From 4bec354b474c0e966c4b432e6c4f72f67ddcac0a Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 22 Aug 2022 16:17:59 +0100
Subject: [PATCH 001/239] test: New Electron versions (#538)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 208c2acd..dfe4831d 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.8","19.0.12","20.0.2"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.9","19.0.13","20.0.3"]

From 6f227e9be98bab8e7f5870d2306346dc6d84c0b3 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 22 Aug 2022 16:18:18 +0100
Subject: [PATCH 002/239] Pass attachments from renderer to main (#536)

---
 src/main/ipc.ts                                           | 4 ++++
 src/renderer/integrations/scope-to-main.ts                | 1 +
 test/e2e/test-apps/other/scope-breadcrumbs/event.json     | 3 ++-
 test/e2e/test-apps/other/scope-breadcrumbs/src/index.html | 1 +
 4 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index f801c96f..b252172e 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -56,6 +56,10 @@ export function handleScope(options: ElectronMainOptionsInternal, jsonScope: str
       scope.setExtras(sentScope._extra);
     }
 
+    for (const attachment of sentScope._attachments || []) {
+      scope.addAttachment(attachment);
+    }
+
     const breadcrumb = sentScope._breadcrumbs.pop();
     if (breadcrumb) {
       scope.addBreadcrumb(breadcrumb, options?.maxBreadcrumbs || 100);
diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts
index c7dc60a9..ba93bba8 100644
--- a/src/renderer/integrations/scope-to-main.ts
+++ b/src/renderer/integrations/scope-to-main.ts
@@ -30,6 +30,7 @@ export class ScopeToMain implements Integration {
       scope.addScopeListener((updatedScope) => {
         ipc.sendScope(JSON.stringify(normalize(updatedScope, 20, 2_000)));
         scope.clearBreadcrumbs();
+        scope.clearAttachments();
       });
     }
   }
diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/event.json b/test/e2e/test-apps/other/scope-breadcrumbs/event.json
index bef23dd3..6133b621 100644
--- a/test/e2e/test-apps/other/scope-breadcrumbs/event.json
+++ b/test/e2e/test-apps/other/scope-breadcrumbs/event.json
@@ -118,5 +118,6 @@
     "extra": {
       "some-extra": "extra-value"
     }
-  }
+  },
+  "attachments": [ { "type": "attachment", "length": 12, "filename": "attachment.txt" } ]
 }
diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html b/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html
index 859adff2..3cf5b517 100644
--- a/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html
+++ b/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html
@@ -13,6 +13,7 @@
 
       configureScope((scope) => {
         scope.setTag('renderer-tag', 'another-value');
+        scope.addAttachment({ filename: 'attachment.txt', data: 'Some content' });
       });
 
       console.log('Some logging from the renderer process');

From 0f9e948951b9c37ae02605fab3d7cb96c9c792bb Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 29 Aug 2022 20:01:24 +0100
Subject: [PATCH 003/239] test: New Electron versions (#540)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index dfe4831d..4da28821 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.9","19.0.13","20.0.3"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.9","19.0.14","20.1.0"]

From a3d177fc4e0d6cfa3f79f6c309d57a60cc4149fd Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 31 Aug 2022 15:58:21 +0100
Subject: [PATCH 004/239] Update to v7.11.1 of JavaScript SDKs (#543)

---
 package.json                                  |  18 +--
 .../other/browser-tracing/package.json        |   2 +-
 .../other/custom-tracing/package.json         |   2 +-
 .../net-breadcrumbs-tracing/package.json      |   2 +-
 .../other/net-breadcrumbs/package.json        |   2 +-
 yarn.lock                                     | 116 +++++++++---------
 6 files changed, 71 insertions(+), 71 deletions(-)

diff --git a/package.json b/package.json
index 7f66e1bb..a89e87ca 100644
--- a/package.json
+++ b/package.json
@@ -57,19 +57,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.8.1",
-    "@sentry/core": "7.8.1",
-    "@sentry/hub": "7.8.1",
-    "@sentry/node": "7.8.1",
-    "@sentry/types": "7.8.1",
-    "@sentry/utils": "7.8.1",
+    "@sentry/browser": "7.11.1",
+    "@sentry/core": "7.11.1",
+    "@sentry/hub": "7.11.1",
+    "@sentry/node": "7.11.1",
+    "@sentry/types": "7.11.1",
+    "@sentry/utils": "7.11.1",
     "deepmerge": "^4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.8.1",
-    "@sentry-internal/typescript": "7.8.1",
-    "@sentry/tracing": "7.8.1",
+    "@sentry-internal/eslint-config-sdk": "7.11.1",
+    "@sentry-internal/typescript": "7.11.1",
+    "@sentry/tracing": "7.11.1",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/test/e2e/test-apps/other/browser-tracing/package.json b/test/e2e/test-apps/other/browser-tracing/package.json
index 1e7794bb..03e84a31 100644
--- a/test/e2e/test-apps/other/browser-tracing/package.json
+++ b/test/e2e/test-apps/other/browser-tracing/package.json
@@ -4,6 +4,6 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.8.1"
+    "@sentry/tracing": "7.11.1"
   }
 }
diff --git a/test/e2e/test-apps/other/custom-tracing/package.json b/test/e2e/test-apps/other/custom-tracing/package.json
index a10e9d49..d7d484ab 100644
--- a/test/e2e/test-apps/other/custom-tracing/package.json
+++ b/test/e2e/test-apps/other/custom-tracing/package.json
@@ -4,6 +4,6 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.8.1"
+    "@sentry/tracing": "7.11.1"
   }
 }
diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
index 5d0750e5..2c4d1575 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
+++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
@@ -4,7 +4,7 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.8.1",
+    "@sentry/tracing": "7.11.1",
     "electron-fetch": "1.7.4"
   }
 }
diff --git a/test/e2e/test-apps/other/net-breadcrumbs/package.json b/test/e2e/test-apps/other/net-breadcrumbs/package.json
index 7ed7e688..2d92c651 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs/package.json
+++ b/test/e2e/test-apps/other/net-breadcrumbs/package.json
@@ -4,7 +4,7 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.8.1",
+    "@sentry/tracing": "7.11.1",
     "electron-fetch": "1.7.4"
   }
 }
diff --git a/yarn.lock b/yarn.lock
index 689f9d62..906872bb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -100,13 +100,13 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@sentry-internal/eslint-config-sdk@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.8.1.tgz#e26d8721cfd289591a9fb4c864c9655956d31118"
-  integrity sha512-p1n/KZw1usK4dONInADFgVMG5Jb2fhSnwDfUzx2EG2rUClTFataoRb53girY/8z1RZrh92dhtQVHElS9sdz/iQ==
+"@sentry-internal/eslint-config-sdk@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.11.1.tgz#b6f4048815d35606e9111ea6604707155055e2cb"
+  integrity sha512-iZmJGHMcsLk+ovihIII1VReAhZvAUKLtesM7pCjOmcDM7TaPVPj4HAgRCwL3oPPryTljmYEgnr0XeqDhrUhoyA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.8.1"
-    "@sentry-internal/typescript" "7.8.1"
+    "@sentry-internal/eslint-plugin-sdk" "7.11.1"
+    "@sentry-internal/typescript" "7.11.1"
     "@typescript-eslint/eslint-plugin" "^3.9.0"
     "@typescript-eslint/parser" "^3.9.0"
     eslint-config-prettier "^6.11.0"
@@ -115,82 +115,82 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.8.1.tgz#01df570c17bc57efb126aba7635b3da2da4e3087"
-  integrity sha512-w0o7MkHixrLsCvcKiXejqY/TbsYFrzYBIRvX9zj60Wn3corjC/jNB0VC5CmXrsI71O6B1zvkw2gKfVYDdQ7Dug==
+"@sentry-internal/eslint-plugin-sdk@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.11.1.tgz#b179bca47e31df3d5202ac36dd360f7d08b850a8"
+  integrity sha512-RcibkVAcRnvEj0G8Pj9sDva1KgzO6BvbXLEHCg2i/vF761OHGrn1WLhtasALRPD4xZjqr0+YPt8RoDeXlYEhVw==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.8.1.tgz#886e446b3a8fc54f52e84824ab16fd6b839d489e"
-  integrity sha512-3newTQXCuM4/rt51lo/ASd0+/dksi6wSmQt42914rfQf4dMxAwNeKyf3k6stcar1RdQQXXGv0lZfbtDOQ0wvzA==
+"@sentry-internal/typescript@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.11.1.tgz#651ce17e5d1a8fa95f9b8d59edcf428e17748b6e"
+  integrity sha512-vTqJiEuj4MFbVOxvTj0rMQOE4HEwnx/zkEoDCuZnb05OCeba8UzKc7xDBhnE+CuyYeEg7bjhA/o6iNMjPjMxQw==
 
-"@sentry/browser@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.8.1.tgz#ca91c80a5da745e1b5379bc215100ba4660bac29"
-  integrity sha512-9JuagYqHyaZu/4RqyxrAgEHo71oV592XBuUKC33gajCVKWbyG3mNqudSMoHtdM1DrV9REZ4Elha7zFaE2cJX6g==
+"@sentry/browser@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.11.1.tgz#377d417e833ef54c78a93ef720a742bda5022625"
+  integrity sha512-k2XHuzPfnm8VJPK5eWd1+Y5VCgN42sLveb8Qxc3prb5PSL416NWMLZaoB7RMIhy430fKrSFiosnm6QDk2M6pbA==
   dependencies:
-    "@sentry/core" "7.8.1"
-    "@sentry/types" "7.8.1"
-    "@sentry/utils" "7.8.1"
+    "@sentry/core" "7.11.1"
+    "@sentry/types" "7.11.1"
+    "@sentry/utils" "7.11.1"
     tslib "^1.9.3"
 
-"@sentry/core@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.8.1.tgz#d11ba7c97766d1e47edf697dbfd47fe4041477d9"
-  integrity sha512-PRivbdIzApi/gSixAxozhOBTylSVdw/9VxaStYHd7JJGhs36KXkV8ylpbCmYO4ap7/Ue9/slzwpvPOJJzmzAgA==
+"@sentry/core@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.11.1.tgz#d68e796f3b6428aefd6086a1db00118df7a9a9e4"
+  integrity sha512-kaDSZ6VNuO4ZZdqUOOX6XM6x+kjo2bMnDQ3IJG51FPvVjr8lXYhXj1Ccxcot3pBYAIWPPby2+vNDOXllmXqoBA==
   dependencies:
-    "@sentry/hub" "7.8.1"
-    "@sentry/types" "7.8.1"
-    "@sentry/utils" "7.8.1"
+    "@sentry/hub" "7.11.1"
+    "@sentry/types" "7.11.1"
+    "@sentry/utils" "7.11.1"
     tslib "^1.9.3"
 
-"@sentry/hub@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.8.1.tgz#bc255c6b8e99a3333e737f189c984c715df504aa"
-  integrity sha512-AxwyGyS9Lp4XsURu4t8opa5vZ+NAB6I/n+B/Uix3YZea9z8jdWYAu9vsXSizOrtxekc/i7ZN4bnlNgXVHix0iA==
+"@sentry/hub@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.11.1.tgz#1749b2b102ea1892ff388d65d66d3b402b393958"
+  integrity sha512-M6ClgdXdptS0lUBKB5KpXXe2qMQhsoiEN2pEGRI6+auqhfHCUQB1ZXsfjiOYexKC9fwx7TyFyZ9Jcaf2DTxEhw==
   dependencies:
-    "@sentry/types" "7.8.1"
-    "@sentry/utils" "7.8.1"
+    "@sentry/types" "7.11.1"
+    "@sentry/utils" "7.11.1"
     tslib "^1.9.3"
 
-"@sentry/node@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.8.1.tgz#9dca7afee2d9ad38fd9756e13439ce09d2f01934"
-  integrity sha512-gQHeIip7QudeK1YWrLyZPc7nfirhbVDJ3gfCfL9mLT724Sk8gKd1kcpU1niI+wwIwY7SOpJqX4Oh/F0lRKjzDQ==
+"@sentry/node@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.11.1.tgz#97fd26de26e8203a3c34e26b38f3c2a5ba46828b"
+  integrity sha512-EAAHou/eHSzwRK0Z5qnQiwXNbkpnjWjloaG979gftA+MS/kM0AxQHdOrSJQbOEaqRf3F7/eC4Hj+1tfglAuaLQ==
   dependencies:
-    "@sentry/core" "7.8.1"
-    "@sentry/hub" "7.8.1"
-    "@sentry/types" "7.8.1"
-    "@sentry/utils" "7.8.1"
+    "@sentry/core" "7.11.1"
+    "@sentry/hub" "7.11.1"
+    "@sentry/types" "7.11.1"
+    "@sentry/utils" "7.11.1"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/tracing@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.8.1.tgz#6368e7e90a43389cd583e77de7e28d5ca6f88bf9"
-  integrity sha512-orNVCsMtQUKhvh7GmyJzjOhU6oT7lC7TRT7tTRlyXQVrUmfJZsthmBtyfrTC7QWJ9vXQ0mB4jab8kMT3xE4ltg==
+"@sentry/tracing@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.11.1.tgz#50cbe82dd5b9a1307b31761cdd4b0d71132cf5c7"
+  integrity sha512-ilgnHfpdYUWKG/5yAXIfIbPVsCfrC4ONFBR/wN25/hdAyVfXMa3AJx7NCCXxZBOPDWH3hMW8rl4La5yuDbXofg==
   dependencies:
-    "@sentry/hub" "7.8.1"
-    "@sentry/types" "7.8.1"
-    "@sentry/utils" "7.8.1"
+    "@sentry/hub" "7.11.1"
+    "@sentry/types" "7.11.1"
+    "@sentry/utils" "7.11.1"
     tslib "^1.9.3"
 
-"@sentry/types@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.8.1.tgz#c00a1ed02ad8f69d3b94fcda91e2d24e0bb3492a"
-  integrity sha512-LOoaeBXVI23Kh5SpIbxSRiJ6+eYZXVOFyPFH1T1mGBj95LPwRMqOdg0lUTmFJGBKbDGDB/YNjNnu1kQ7GrXBXw==
+"@sentry/types@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.11.1.tgz#06e2827f6ba37159c33644208a0453b86d25e232"
+  integrity sha512-gIEhOPxC2cjrxQ0+K2SFJ1P6e/an5osSxVc9OOtekN28eHtVsXFCLB8XVWeNQnS7N2VkrVrkqORMBz1kvIcvVQ==
 
-"@sentry/utils@7.8.1":
-  version "7.8.1"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.8.1.tgz#5d8a7e1c8d834de608ad834cf648d5291c62ba39"
-  integrity sha512-isUZjft4HWTOk1Z58KFJ/zzXeFtIJgP82CkYQlW464ZR2WCqPHYlXXXRWZpOHOfMnrf+gWeX9WAGS9rTAdhiSg==
+"@sentry/utils@7.11.1":
+  version "7.11.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.11.1.tgz#1635c5b223369d9428bc83c9b8908c9c3287ee10"
+  integrity sha512-tRVXNT5O9ilkV31pyHeTqA1PcPQfMV/2OR6yUYM4ah+QVISovC0f0ybhByuH5nYg6x/Gsnx1o7pc8L1GE3+O7A==
   dependencies:
-    "@sentry/types" "7.8.1"
+    "@sentry/types" "7.11.1"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From 0caa941de4b15107f373bc580db8811bfa695517 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 1 Sep 2022 17:12:22 +0100
Subject: [PATCH 005/239] test: New Electron versions (#544)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 4da28821..9e26d6f5 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.9","19.0.14","20.1.0"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.11","19.0.15","20.1.1"]

From 14aafd56f09808abc525fe591914d4b6a2336732 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 8 Sep 2022 19:48:51 +0100
Subject: [PATCH 006/239] Make the store completely async (#542)

---
 src/main/integrations/electron-minidump.ts    |  7 ++--
 src/main/integrations/main-process-session.ts |  2 +-
 .../integrations/sentry-minidump/index.ts     |  8 ++--
 src/main/sessions.ts                          | 32 ++++++++--------
 src/main/store.ts                             | 37 ++++++++++---------
 src/main/transports/queue.ts                  |  4 +-
 6 files changed, 47 insertions(+), 43 deletions(-)

diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index f30294c7..7891050c 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -96,9 +96,10 @@ export class ElectronMinidump implements Integration {
     }
 
     // Check if last crash report was likely to have been unreported in the last session
-    const previousSessionCrashed = unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date);
-    // Check if a previous session was not closed
-    checkPreviousSession(previousSessionCrashed).catch((error) => logger.error(error));
+    void unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => {
+      // Check if a previous session was not closed
+      checkPreviousSession(crashed).catch((error) => logger.error(error));
+    });
   }
 
   /**
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index a780d742..b165c64b 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -14,7 +14,7 @@ export class MainProcessSession implements Integration {
 
   /** @inheritDoc */
   public setupOnce(): void {
-    startSession();
+    void startSession();
 
     // We track sessions via the 'will-quit' event which is the last event emitted before close.
     //
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 03967f89..34c551a1 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -26,7 +26,7 @@ export class SentryMinidump implements Integration {
   private _scopeStore?: Store<Scope>;
 
   /** Temp store for the scope of last run */
-  private _scopeLastRun?: Scope;
+  private _scopeLastRun?: Promise<Scope>;
 
   private _minidumpLoader?: MinidumpLoader;
 
@@ -170,14 +170,14 @@ export class SentryMinidump implements Integration {
   private _setupScopeListener(): void {
     const hubScope = getCurrentHub().getScope();
     if (hubScope) {
-      hubScope.addScopeListener((updatedScope) => {
+      hubScope.addScopeListener(async (updatedScope) => {
         const scope = Scope.clone(updatedScope);
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         (scope as any)._eventProcessors = [];
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         (scope as any)._scopeListeners = [];
 
-        this._scopeStore?.set(scope);
+        await this._scopeStore?.set(scope);
       });
     }
   }
@@ -224,7 +224,7 @@ export class SentryMinidump implements Integration {
           return false;
         }
 
-        const storedScope = Scope.clone(this._scopeLastRun);
+        const storedScope = Scope.clone(await this._scopeLastRun);
         let newEvent = await storedScope.applyToEvent(event);
 
         const hubScope = hub.getScope();
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index 583b215e..547d1c36 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -1,7 +1,7 @@
 import { getCurrentHub } from '@sentry/core';
 import { makeSession, updateSession } from '@sentry/hub';
 import { flush, NodeClient } from '@sentry/node';
-import { SerializedSession, SessionContext, SessionStatus } from '@sentry/types';
+import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';
 import { logger } from '@sentry/utils';
 
 import { sentryCachePath } from './fs';
@@ -13,22 +13,21 @@ const PERSIST_INTERVAL_MS = 60_000;
 const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined);
 
 /** Previous session that did not exit cleanly */
-let previousSession = sessionStore.get();
-const previousSessionModified = sessionStore.getModifiedDate();
+let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get();
 
 let persistTimer: NodeJS.Timer | undefined;
 
 /** Starts a session */
-export function startSession(): void {
+export async function startSession(): Promise<void> {
   const hub = getCurrentHub();
-  sessionStore.set(hub.startSession());
+  await sessionStore.set(hub.startSession(), true);
 
   // Every PERSIST_INTERVAL, write the session to disk
-  persistTimer = setInterval(() => {
+  persistTimer = setInterval(async () => {
     const currentSession = hub.getScope()?.getSession();
     // Only bother saving if it hasn't already ended
     if (currentSession && currentSession.status === 'ok') {
-      sessionStore.set(currentSession);
+      await sessionStore.set(currentSession);
     }
   }, PERSIST_INTERVAL_MS);
 }
@@ -54,19 +53,20 @@ export async function endSession(): Promise<void> {
     logger.log('No session');
   }
 
-  sessionStore.set(undefined, true);
+  await sessionStore.set(undefined, true);
 
   await flush();
 }
 
 /** Determines if a Date is likely to have occurred in the previous uncompleted session */
-export function unreportedDuringLastSession(crashDate: Date | undefined): boolean {
+export async function unreportedDuringLastSession(crashDate: Date | undefined): Promise<boolean> {
   if (!crashDate) {
     return false;
   }
 
+  const previousSessionModified = await sessionStore.getModifiedDate();
   // There is no previous session
-  if (!previousSessionModified) {
+  if (previousSessionModified == undefined) {
     return false;
   }
 
@@ -87,9 +87,11 @@ export function unreportedDuringLastSession(crashDate: Date | undefined): boolea
 export async function checkPreviousSession(crashed: boolean): Promise<void> {
   const client = getCurrentHub().getClient<NodeClient>();
 
-  if (previousSession && client) {
+  const previous = await previousSession;
+
+  if (previous && client) {
     // Ignore if the previous session is already ended
-    if (previousSession.status !== 'ok') {
+    if (previous.status !== 'ok') {
       previousSession = undefined;
       return;
     }
@@ -98,13 +100,13 @@ export async function checkPreviousSession(crashed: boolean): Promise<void> {
 
     logger.log(`Found previous ${status} session`);
 
-    const sesh = makeSession(previousSession);
+    const sesh = makeSession(previous);
 
     updateSession(sesh, {
       status,
       errors: (sesh.errors || 0) + 1,
-      release: (previousSession as unknown as SerializedSession).attrs?.release,
-      environment: (previousSession as unknown as SerializedSession).attrs?.environment,
+      release: (previous as unknown as SerializedSession).attrs?.release,
+      environment: (previous as unknown as SerializedSession).attrs?.environment,
     });
 
     await client.sendSession(sesh);
diff --git a/src/main/store.ts b/src/main/store.ts
index f34d101f..be009a79 100644
--- a/src/main/store.ts
+++ b/src/main/store.ts
@@ -1,8 +1,7 @@
 import { logger } from '@sentry/utils';
-import { existsSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'fs';
 import { dirname, join } from 'path';
 
-import { mkdirpSync } from './fs';
+import { mkdirpSync, readFileAsync, statAsync, unlinkAsync, writeFileAsync } from './fs';
 
 const dateFormat = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.*\d{0,10}Z$/;
 
@@ -48,16 +47,16 @@ export class Store<T> {
    * @param next New data to replace the previous one.
    * @param forceFlush Forces the write to be flushed to disk immediately
    */
-  public set(next: T, forceFlush: boolean = false): void {
+  public async set(next: T, forceFlush: boolean = false): Promise<void> {
     this._data = next;
 
     if (!this._flushing) {
       this._flushing = true;
       if (forceFlush) {
-        this._flush();
+        await this._flush();
       } else {
         setImmediate(() => {
-          this._flush();
+          void this._flush();
         });
       }
     }
@@ -67,8 +66,8 @@ export class Store<T> {
    * Updates data by passing it through the given function.
    * @param fn A function receiving the current data and returning new one.
    */
-  public update(fn: (current: T) => T): void {
-    this.set(fn(this.get()));
+  public async update(fn: (current: T) => T): Promise<void> {
+    await this.set(fn(await this.get()));
   }
 
   /**
@@ -78,12 +77,10 @@ export class Store<T> {
    * from disk. If the file does not exist, the initial value provided to the
    * constructor is used.
    */
-  public get(): T {
+  public async get(): Promise<T> {
     if (this._data === undefined) {
       try {
-        this._data = existsSync(this._path)
-          ? (JSON.parse(readFileSync(this._path, 'utf8'), dateReviver) as T)
-          : this._initial;
+        this._data = JSON.parse(await readFileAsync(this._path, 'utf8'), dateReviver) as T;
       } catch (e) {
         this._data = this._initial;
       }
@@ -93,27 +90,31 @@ export class Store<T> {
   }
 
   /** Returns store to its initial state */
-  public clear(): void {
-    this.set(this._initial);
+  public async clear(): Promise<void> {
+    await this.set(this._initial);
   }
 
   /** Gets the Date that the file was last modified */
-  public getModifiedDate(): Date | undefined {
+  public async getModifiedDate(): Promise<Date | undefined> {
     try {
-      return statSync(this._path)?.mtime;
+      return (await statAsync(this._path))?.mtime;
     } catch (_) {
       return undefined;
     }
   }
 
   /** Serializes the current data into the JSON file. */
-  private _flush(): void {
+  private async _flush(): Promise<void> {
     try {
       if (this._data === undefined) {
-        unlinkSync(this._path);
+        try {
+          await unlinkAsync(this._path);
+        } catch (_) {
+          //
+        }
       } else {
         mkdirpSync(dirname(this._path));
-        writeFileSync(this._path, JSON.stringify(this._data));
+        await writeFileAsync(this._path, JSON.stringify(this._data));
       }
     } catch (e) {
       logger.warn('Failed to flush store', e);
diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts
index 93618935..f224cd59 100644
--- a/src/main/transports/queue.ts
+++ b/src/main/transports/queue.ts
@@ -33,7 +33,7 @@ export class PersistedRequestQueue {
   public async add(request: QueuedTransportRequest): Promise<void> {
     const bodyPath = uuid4();
 
-    this._queue.update((queue) => {
+    await this._queue.update((queue) => {
       queue.push({
         bodyPath,
         date: request.date || new Date(),
@@ -60,7 +60,7 @@ export class PersistedRequestQueue {
     let found: PersistedRequest | undefined;
     const cutOff = Date.now() - MILLISECONDS_PER_DAY * this._maxAgeDays;
 
-    this._queue.update((queue) => {
+    await this._queue.update((queue) => {
       while ((found = queue.shift())) {
         // We drop events created in v3 of the SDK or before the cut-off
         if ('type' in found || found.date.getTime() < cutOff) {

From d37dc0d49a0f40bae5ba498e0607817a62105fcd Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 8 Sep 2022 19:49:19 +0100
Subject: [PATCH 007/239] test: New Electron versions (#545)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 9e26d6f5..3fc04a45 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.11","19.0.15","20.1.1"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.11","19.0.16","20.1.2"]

From 3470537694fc0dac3a63152978d7882d28d1a6c4 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 9 Sep 2022 12:59:38 +0100
Subject: [PATCH 008/239] Update to v7.12.1 of JavaScript SDKs (#548)

---
 package.json                                  |  18 +--
 src/main/integrations/additional-context.ts   |  23 +---
 src/main/sdk.ts                               |   4 +-
 .../other/browser-tracing/package.json        |   2 +-
 .../other/custom-tracing/package.json         |   2 +-
 .../net-breadcrumbs-tracing/package.json      |   2 +-
 .../other/net-breadcrumbs/package.json        |   2 +-
 yarn.lock                                     | 116 +++++++++---------
 8 files changed, 78 insertions(+), 91 deletions(-)

diff --git a/package.json b/package.json
index a89e87ca..2c1d5fd0 100644
--- a/package.json
+++ b/package.json
@@ -57,19 +57,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.11.1",
-    "@sentry/core": "7.11.1",
-    "@sentry/hub": "7.11.1",
-    "@sentry/node": "7.11.1",
-    "@sentry/types": "7.11.1",
-    "@sentry/utils": "7.11.1",
+    "@sentry/browser": "7.12.1",
+    "@sentry/core": "7.12.1",
+    "@sentry/hub": "7.12.1",
+    "@sentry/node": "7.12.1",
+    "@sentry/types": "7.12.1",
+    "@sentry/utils": "7.12.1",
     "deepmerge": "^4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.11.1",
-    "@sentry-internal/typescript": "7.11.1",
-    "@sentry/tracing": "7.11.1",
+    "@sentry-internal/eslint-config-sdk": "7.12.1",
+    "@sentry-internal/typescript": "7.12.1",
+    "@sentry/tracing": "7.12.1",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts
index a20f35c6..9ad63f81 100644
--- a/src/main/integrations/additional-context.ts
+++ b/src/main/integrations/additional-context.ts
@@ -1,4 +1,4 @@
-import { Event, EventProcessor, Integration } from '@sentry/types';
+import { DeviceContext, Event, EventProcessor, Integration } from '@sentry/types';
 import { app, screen as electronScreen } from 'electron';
 import { CpuInfo, cpus } from 'os';
 
@@ -19,21 +19,6 @@ const DEFAULT_OPTIONS: AdditionalContextOptions = {
   language: true,
 };
 
-interface LazyDeviceContext {
-  language?: string;
-  screen_resolution?: string;
-  screen_density?: number;
-}
-
-interface AdditionalDeviceContext extends LazyDeviceContext {
-  memory_size?: number;
-  free_memory?: number;
-  processor_count?: number;
-  cpu_description?: string;
-  processor_frequency?: number;
-  machine_arch?: string;
-}
-
 /** Adds Electron context to events and normalises paths. */
 export class AdditionalContext implements Integration {
   /** @inheritDoc */
@@ -43,7 +28,7 @@ export class AdditionalContext implements Integration {
   public name: string = AdditionalContext.id;
 
   private readonly _options: AdditionalContextOptions;
-  private _lazyDeviceContext: LazyDeviceContext = {};
+  private _lazyDeviceContext: DeviceContext = {};
 
   public constructor(options: Partial<AdditionalContextOptions> = {}) {
     this._options = {
@@ -76,7 +61,7 @@ export class AdditionalContext implements Integration {
 
   /** Adds additional context to event */
   private _addAdditionalContext(event: Event): Event {
-    const device: AdditionalDeviceContext = this._lazyDeviceContext;
+    const device: DeviceContext = this._lazyDeviceContext;
 
     const { memory, cpu } = this._options;
 
@@ -101,7 +86,7 @@ export class AdditionalContext implements Integration {
       }
     }
 
-    return mergeEvents(event, { contexts: { device: device as Record<string, string | number> } });
+    return mergeEvents(event, { contexts: { device } });
   }
 
   /** Sets the display info */
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index 1cd9ea58..e1db482a 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -32,7 +32,9 @@ export const defaultIntegrations: Integration[] = [
   new PreloadInjection(),
   new AdditionalContext(),
   new Screenshots(),
-  ...defaultNodeIntegrations.filter((integration) => integration.name !== 'OnUncaughtException'),
+  ...defaultNodeIntegrations.filter(
+    (integration) => integration.name !== 'OnUncaughtException' && integration.name !== 'Context',
+  ),
 ];
 
 export interface ElectronMainOptionsInternal extends Options<ElectronOfflineTransportOptions> {
diff --git a/test/e2e/test-apps/other/browser-tracing/package.json b/test/e2e/test-apps/other/browser-tracing/package.json
index 03e84a31..2bc9ff1f 100644
--- a/test/e2e/test-apps/other/browser-tracing/package.json
+++ b/test/e2e/test-apps/other/browser-tracing/package.json
@@ -4,6 +4,6 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.11.1"
+    "@sentry/tracing": "7.12.1"
   }
 }
diff --git a/test/e2e/test-apps/other/custom-tracing/package.json b/test/e2e/test-apps/other/custom-tracing/package.json
index d7d484ab..223d8ef3 100644
--- a/test/e2e/test-apps/other/custom-tracing/package.json
+++ b/test/e2e/test-apps/other/custom-tracing/package.json
@@ -4,6 +4,6 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.11.1"
+    "@sentry/tracing": "7.12.1"
   }
 }
diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
index 2c4d1575..f8991b67 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
+++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
@@ -4,7 +4,7 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.11.1",
+    "@sentry/tracing": "7.12.1",
     "electron-fetch": "1.7.4"
   }
 }
diff --git a/test/e2e/test-apps/other/net-breadcrumbs/package.json b/test/e2e/test-apps/other/net-breadcrumbs/package.json
index 2d92c651..b77f256e 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs/package.json
+++ b/test/e2e/test-apps/other/net-breadcrumbs/package.json
@@ -4,7 +4,7 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.11.1",
+    "@sentry/tracing": "7.12.1",
     "electron-fetch": "1.7.4"
   }
 }
diff --git a/yarn.lock b/yarn.lock
index 906872bb..27aab6e8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -100,13 +100,13 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@sentry-internal/eslint-config-sdk@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.11.1.tgz#b6f4048815d35606e9111ea6604707155055e2cb"
-  integrity sha512-iZmJGHMcsLk+ovihIII1VReAhZvAUKLtesM7pCjOmcDM7TaPVPj4HAgRCwL3oPPryTljmYEgnr0XeqDhrUhoyA==
+"@sentry-internal/eslint-config-sdk@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.12.1.tgz#2eea4ca6ad3013ddb274031f1cc377be7a2adb07"
+  integrity sha512-a8vrOTQAmnU7jECSy7wiXf3/Z156lSud1tWZmKI8FPakvmidISPu7m96TlAY/fSysv2UoiKMjpfpBizjttnIGA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.11.1"
-    "@sentry-internal/typescript" "7.11.1"
+    "@sentry-internal/eslint-plugin-sdk" "7.12.1"
+    "@sentry-internal/typescript" "7.12.1"
     "@typescript-eslint/eslint-plugin" "^3.9.0"
     "@typescript-eslint/parser" "^3.9.0"
     eslint-config-prettier "^6.11.0"
@@ -115,82 +115,82 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.11.1.tgz#b179bca47e31df3d5202ac36dd360f7d08b850a8"
-  integrity sha512-RcibkVAcRnvEj0G8Pj9sDva1KgzO6BvbXLEHCg2i/vF761OHGrn1WLhtasALRPD4xZjqr0+YPt8RoDeXlYEhVw==
+"@sentry-internal/eslint-plugin-sdk@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.12.1.tgz#9aea7ba346f07036479fb114b6d4d3d90b218a22"
+  integrity sha512-q1Ke/14TWDbAoc2In7+jGNw0xXVfQgHows9/uhNXHhI68PjdtO2dKUR66kgbHiZe5O/4lGTlxzRTANBSKOShtA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.11.1.tgz#651ce17e5d1a8fa95f9b8d59edcf428e17748b6e"
-  integrity sha512-vTqJiEuj4MFbVOxvTj0rMQOE4HEwnx/zkEoDCuZnb05OCeba8UzKc7xDBhnE+CuyYeEg7bjhA/o6iNMjPjMxQw==
+"@sentry-internal/typescript@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.12.1.tgz#e08d8275aa8ac1f60c67fe605275eb031aba5eb6"
+  integrity sha512-79UcEk5++A7jUyTOa/DX/jJRW1OMcjtVqCk+aXF5hZbHM7qNjL1F8ZClxEq2SSstwuF0Q+ESHwK30VUR79NbwQ==
 
-"@sentry/browser@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.11.1.tgz#377d417e833ef54c78a93ef720a742bda5022625"
-  integrity sha512-k2XHuzPfnm8VJPK5eWd1+Y5VCgN42sLveb8Qxc3prb5PSL416NWMLZaoB7RMIhy430fKrSFiosnm6QDk2M6pbA==
+"@sentry/browser@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.12.1.tgz#2be6fa5c2529a2a75abac4d00aca786362302a1a"
+  integrity sha512-pgyL65CrGFLe8sKcEG8KXAuVTE8zkAsyTlv/AuME06cSdxzO/memPK/r3BI6EM7WupIdga+V5tQUldeT1kgHNA==
   dependencies:
-    "@sentry/core" "7.11.1"
-    "@sentry/types" "7.11.1"
-    "@sentry/utils" "7.11.1"
+    "@sentry/core" "7.12.1"
+    "@sentry/types" "7.12.1"
+    "@sentry/utils" "7.12.1"
     tslib "^1.9.3"
 
-"@sentry/core@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.11.1.tgz#d68e796f3b6428aefd6086a1db00118df7a9a9e4"
-  integrity sha512-kaDSZ6VNuO4ZZdqUOOX6XM6x+kjo2bMnDQ3IJG51FPvVjr8lXYhXj1Ccxcot3pBYAIWPPby2+vNDOXllmXqoBA==
+"@sentry/core@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.12.1.tgz#a22f1c530ed528a699ed204c36eb5fc8d308103d"
+  integrity sha512-DFHbzHFjukhlkRZ5xzfebx0IBzblW43kmfnalBBq7xEMscUvnhsYnlvL9Y20tuPZ/PrTcq4JAHbFluAvw6M0QQ==
   dependencies:
-    "@sentry/hub" "7.11.1"
-    "@sentry/types" "7.11.1"
-    "@sentry/utils" "7.11.1"
+    "@sentry/hub" "7.12.1"
+    "@sentry/types" "7.12.1"
+    "@sentry/utils" "7.12.1"
     tslib "^1.9.3"
 
-"@sentry/hub@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.11.1.tgz#1749b2b102ea1892ff388d65d66d3b402b393958"
-  integrity sha512-M6ClgdXdptS0lUBKB5KpXXe2qMQhsoiEN2pEGRI6+auqhfHCUQB1ZXsfjiOYexKC9fwx7TyFyZ9Jcaf2DTxEhw==
+"@sentry/hub@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.12.1.tgz#dffad40cd2b8f44df2d5f20a89df87879cbbf1c3"
+  integrity sha512-KLVnVqXf+CRmXNy9/T8K2/js7QvOQ94xtgP5KnWJbu2rl+JhxnIGiBRF51lPXFIatt7zWwB9qNdMS8lVsvLMGQ==
   dependencies:
-    "@sentry/types" "7.11.1"
-    "@sentry/utils" "7.11.1"
+    "@sentry/types" "7.12.1"
+    "@sentry/utils" "7.12.1"
     tslib "^1.9.3"
 
-"@sentry/node@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.11.1.tgz#97fd26de26e8203a3c34e26b38f3c2a5ba46828b"
-  integrity sha512-EAAHou/eHSzwRK0Z5qnQiwXNbkpnjWjloaG979gftA+MS/kM0AxQHdOrSJQbOEaqRf3F7/eC4Hj+1tfglAuaLQ==
+"@sentry/node@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.12.1.tgz#ced12d0db3ca5715d699858acb1e2f2ea1d7c59b"
+  integrity sha512-ZVT2+lLd3gbhOuCOczlFLHH2KnD4EXrq6jRp5Sb2vsSZGVHnVsbD5j7i54zbSBqcydlFqzVMqWSysGTKoYiimw==
   dependencies:
-    "@sentry/core" "7.11.1"
-    "@sentry/hub" "7.11.1"
-    "@sentry/types" "7.11.1"
-    "@sentry/utils" "7.11.1"
+    "@sentry/core" "7.12.1"
+    "@sentry/hub" "7.12.1"
+    "@sentry/types" "7.12.1"
+    "@sentry/utils" "7.12.1"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/tracing@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.11.1.tgz#50cbe82dd5b9a1307b31761cdd4b0d71132cf5c7"
-  integrity sha512-ilgnHfpdYUWKG/5yAXIfIbPVsCfrC4ONFBR/wN25/hdAyVfXMa3AJx7NCCXxZBOPDWH3hMW8rl4La5yuDbXofg==
+"@sentry/tracing@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.12.1.tgz#9f92985f152054ac90b6ec83a33c44e8084a008e"
+  integrity sha512-WnweIt//IqkEkJSjA8DtnIeCdItYIqJSxNQ6qK+r546/ufxRYFBck2fbmM0oKZJVg2evbwhadrBTIUzYkqNj4A==
   dependencies:
-    "@sentry/hub" "7.11.1"
-    "@sentry/types" "7.11.1"
-    "@sentry/utils" "7.11.1"
+    "@sentry/hub" "7.12.1"
+    "@sentry/types" "7.12.1"
+    "@sentry/utils" "7.12.1"
     tslib "^1.9.3"
 
-"@sentry/types@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.11.1.tgz#06e2827f6ba37159c33644208a0453b86d25e232"
-  integrity sha512-gIEhOPxC2cjrxQ0+K2SFJ1P6e/an5osSxVc9OOtekN28eHtVsXFCLB8XVWeNQnS7N2VkrVrkqORMBz1kvIcvVQ==
+"@sentry/types@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.12.1.tgz#eff76d938f9effc62a2ec76cd5c3f04de37f5c15"
+  integrity sha512-VGZs39SZgMcCGv7H0VyFy1LEFGsnFZH590JUopmz6nG63EpeYQ2xzhIoPNAiLKbyUvBEwukn+faCg3u3MGqhgQ==
 
-"@sentry/utils@7.11.1":
-  version "7.11.1"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.11.1.tgz#1635c5b223369d9428bc83c9b8908c9c3287ee10"
-  integrity sha512-tRVXNT5O9ilkV31pyHeTqA1PcPQfMV/2OR6yUYM4ah+QVISovC0f0ybhByuH5nYg6x/Gsnx1o7pc8L1GE3+O7A==
+"@sentry/utils@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.12.1.tgz#fcf80fdc332d0bd288e21b13efc7a2f0d604f75a"
+  integrity sha512-Dh8B13pC0u8uLM/zf+oZngyg808c6BDEO94F7H+h3IciCVVd92A0cOQwLGAEdf8srnJgpZJNAlSC8lFDhbFHzQ==
   dependencies:
-    "@sentry/types" "7.11.1"
+    "@sentry/types" "7.12.1"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From 055b1c432b4d25bdb099be9047cd998317ccce87 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 9 Sep 2022 16:16:45 +0100
Subject: [PATCH 009/239] test: New Electron versions (#547)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 3fc04a45..13793057 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.11","19.0.16","20.1.2"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.12","19.0.16","20.1.3"]

From a41b380a7332565539ebe458c457d66b5400fec3 Mon Sep 17 00:00:00 2001
From: Clifton Hensley <clifton.hensley@gmail.com>
Date: Mon, 12 Sep 2022 15:16:07 -0700
Subject: [PATCH 010/239] fix: Page titles in breadcrumbs should not change

---
 src/main/integrations/electron-breadcrumbs.ts | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts
index 33d0fbb5..d7b040f7 100644
--- a/src/main/integrations/electron-breadcrumbs.ts
+++ b/src/main/integrations/electron-breadcrumbs.ts
@@ -183,14 +183,10 @@ export class ElectronBreadcrumbs implements Integration {
         };
 
         if (id) {
-          const state = getRendererProperties(id);
+          breadcrumb.data = { ...getRendererProperties(id) };
 
-          if (!this._options.captureWindowTitles && state?.title) {
-            delete state.title;
-          }
-
-          if (state) {
-            breadcrumb.data = state;
+          if (!this._options.captureWindowTitles && breadcrumb.data?.title) {
+            delete breadcrumb.data?.title;
           }
         }
 

From 1d490fef58f603cead7e236b7bbcc0cc9e5ef816 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 12 Sep 2022 23:16:39 +0100
Subject: [PATCH 011/239] Revert "Make the store completely async (#542)"
 (#552)

This reverts commit 14aafd56f09808abc525fe591914d4b6a2336732.
---
 src/main/integrations/electron-minidump.ts    |  7 ++--
 src/main/integrations/main-process-session.ts |  2 +-
 .../integrations/sentry-minidump/index.ts     |  8 ++--
 src/main/sessions.ts                          | 32 ++++++++--------
 src/main/store.ts                             | 37 +++++++++----------
 src/main/transports/queue.ts                  |  4 +-
 6 files changed, 43 insertions(+), 47 deletions(-)

diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index 7891050c..f30294c7 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -96,10 +96,9 @@ export class ElectronMinidump implements Integration {
     }
 
     // Check if last crash report was likely to have been unreported in the last session
-    void unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => {
-      // Check if a previous session was not closed
-      checkPreviousSession(crashed).catch((error) => logger.error(error));
-    });
+    const previousSessionCrashed = unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date);
+    // Check if a previous session was not closed
+    checkPreviousSession(previousSessionCrashed).catch((error) => logger.error(error));
   }
 
   /**
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index b165c64b..a780d742 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -14,7 +14,7 @@ export class MainProcessSession implements Integration {
 
   /** @inheritDoc */
   public setupOnce(): void {
-    void startSession();
+    startSession();
 
     // We track sessions via the 'will-quit' event which is the last event emitted before close.
     //
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 34c551a1..03967f89 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -26,7 +26,7 @@ export class SentryMinidump implements Integration {
   private _scopeStore?: Store<Scope>;
 
   /** Temp store for the scope of last run */
-  private _scopeLastRun?: Promise<Scope>;
+  private _scopeLastRun?: Scope;
 
   private _minidumpLoader?: MinidumpLoader;
 
@@ -170,14 +170,14 @@ export class SentryMinidump implements Integration {
   private _setupScopeListener(): void {
     const hubScope = getCurrentHub().getScope();
     if (hubScope) {
-      hubScope.addScopeListener(async (updatedScope) => {
+      hubScope.addScopeListener((updatedScope) => {
         const scope = Scope.clone(updatedScope);
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         (scope as any)._eventProcessors = [];
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         (scope as any)._scopeListeners = [];
 
-        await this._scopeStore?.set(scope);
+        this._scopeStore?.set(scope);
       });
     }
   }
@@ -224,7 +224,7 @@ export class SentryMinidump implements Integration {
           return false;
         }
 
-        const storedScope = Scope.clone(await this._scopeLastRun);
+        const storedScope = Scope.clone(this._scopeLastRun);
         let newEvent = await storedScope.applyToEvent(event);
 
         const hubScope = hub.getScope();
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index 547d1c36..583b215e 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -1,7 +1,7 @@
 import { getCurrentHub } from '@sentry/core';
 import { makeSession, updateSession } from '@sentry/hub';
 import { flush, NodeClient } from '@sentry/node';
-import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';
+import { SerializedSession, SessionContext, SessionStatus } from '@sentry/types';
 import { logger } from '@sentry/utils';
 
 import { sentryCachePath } from './fs';
@@ -13,21 +13,22 @@ const PERSIST_INTERVAL_MS = 60_000;
 const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined);
 
 /** Previous session that did not exit cleanly */
-let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get();
+let previousSession = sessionStore.get();
+const previousSessionModified = sessionStore.getModifiedDate();
 
 let persistTimer: NodeJS.Timer | undefined;
 
 /** Starts a session */
-export async function startSession(): Promise<void> {
+export function startSession(): void {
   const hub = getCurrentHub();
-  await sessionStore.set(hub.startSession(), true);
+  sessionStore.set(hub.startSession());
 
   // Every PERSIST_INTERVAL, write the session to disk
-  persistTimer = setInterval(async () => {
+  persistTimer = setInterval(() => {
     const currentSession = hub.getScope()?.getSession();
     // Only bother saving if it hasn't already ended
     if (currentSession && currentSession.status === 'ok') {
-      await sessionStore.set(currentSession);
+      sessionStore.set(currentSession);
     }
   }, PERSIST_INTERVAL_MS);
 }
@@ -53,20 +54,19 @@ export async function endSession(): Promise<void> {
     logger.log('No session');
   }
 
-  await sessionStore.set(undefined, true);
+  sessionStore.set(undefined, true);
 
   await flush();
 }
 
 /** Determines if a Date is likely to have occurred in the previous uncompleted session */
-export async function unreportedDuringLastSession(crashDate: Date | undefined): Promise<boolean> {
+export function unreportedDuringLastSession(crashDate: Date | undefined): boolean {
   if (!crashDate) {
     return false;
   }
 
-  const previousSessionModified = await sessionStore.getModifiedDate();
   // There is no previous session
-  if (previousSessionModified == undefined) {
+  if (!previousSessionModified) {
     return false;
   }
 
@@ -87,11 +87,9 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined):
 export async function checkPreviousSession(crashed: boolean): Promise<void> {
   const client = getCurrentHub().getClient<NodeClient>();
 
-  const previous = await previousSession;
-
-  if (previous && client) {
+  if (previousSession && client) {
     // Ignore if the previous session is already ended
-    if (previous.status !== 'ok') {
+    if (previousSession.status !== 'ok') {
       previousSession = undefined;
       return;
     }
@@ -100,13 +98,13 @@ export async function checkPreviousSession(crashed: boolean): Promise<void> {
 
     logger.log(`Found previous ${status} session`);
 
-    const sesh = makeSession(previous);
+    const sesh = makeSession(previousSession);
 
     updateSession(sesh, {
       status,
       errors: (sesh.errors || 0) + 1,
-      release: (previous as unknown as SerializedSession).attrs?.release,
-      environment: (previous as unknown as SerializedSession).attrs?.environment,
+      release: (previousSession as unknown as SerializedSession).attrs?.release,
+      environment: (previousSession as unknown as SerializedSession).attrs?.environment,
     });
 
     await client.sendSession(sesh);
diff --git a/src/main/store.ts b/src/main/store.ts
index be009a79..f34d101f 100644
--- a/src/main/store.ts
+++ b/src/main/store.ts
@@ -1,7 +1,8 @@
 import { logger } from '@sentry/utils';
+import { existsSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'fs';
 import { dirname, join } from 'path';
 
-import { mkdirpSync, readFileAsync, statAsync, unlinkAsync, writeFileAsync } from './fs';
+import { mkdirpSync } from './fs';
 
 const dateFormat = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.*\d{0,10}Z$/;
 
@@ -47,16 +48,16 @@ export class Store<T> {
    * @param next New data to replace the previous one.
    * @param forceFlush Forces the write to be flushed to disk immediately
    */
-  public async set(next: T, forceFlush: boolean = false): Promise<void> {
+  public set(next: T, forceFlush: boolean = false): void {
     this._data = next;
 
     if (!this._flushing) {
       this._flushing = true;
       if (forceFlush) {
-        await this._flush();
+        this._flush();
       } else {
         setImmediate(() => {
-          void this._flush();
+          this._flush();
         });
       }
     }
@@ -66,8 +67,8 @@ export class Store<T> {
    * Updates data by passing it through the given function.
    * @param fn A function receiving the current data and returning new one.
    */
-  public async update(fn: (current: T) => T): Promise<void> {
-    await this.set(fn(await this.get()));
+  public update(fn: (current: T) => T): void {
+    this.set(fn(this.get()));
   }
 
   /**
@@ -77,10 +78,12 @@ export class Store<T> {
    * from disk. If the file does not exist, the initial value provided to the
    * constructor is used.
    */
-  public async get(): Promise<T> {
+  public get(): T {
     if (this._data === undefined) {
       try {
-        this._data = JSON.parse(await readFileAsync(this._path, 'utf8'), dateReviver) as T;
+        this._data = existsSync(this._path)
+          ? (JSON.parse(readFileSync(this._path, 'utf8'), dateReviver) as T)
+          : this._initial;
       } catch (e) {
         this._data = this._initial;
       }
@@ -90,31 +93,27 @@ export class Store<T> {
   }
 
   /** Returns store to its initial state */
-  public async clear(): Promise<void> {
-    await this.set(this._initial);
+  public clear(): void {
+    this.set(this._initial);
   }
 
   /** Gets the Date that the file was last modified */
-  public async getModifiedDate(): Promise<Date | undefined> {
+  public getModifiedDate(): Date | undefined {
     try {
-      return (await statAsync(this._path))?.mtime;
+      return statSync(this._path)?.mtime;
     } catch (_) {
       return undefined;
     }
   }
 
   /** Serializes the current data into the JSON file. */
-  private async _flush(): Promise<void> {
+  private _flush(): void {
     try {
       if (this._data === undefined) {
-        try {
-          await unlinkAsync(this._path);
-        } catch (_) {
-          //
-        }
+        unlinkSync(this._path);
       } else {
         mkdirpSync(dirname(this._path));
-        await writeFileAsync(this._path, JSON.stringify(this._data));
+        writeFileSync(this._path, JSON.stringify(this._data));
       }
     } catch (e) {
       logger.warn('Failed to flush store', e);
diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts
index f224cd59..93618935 100644
--- a/src/main/transports/queue.ts
+++ b/src/main/transports/queue.ts
@@ -33,7 +33,7 @@ export class PersistedRequestQueue {
   public async add(request: QueuedTransportRequest): Promise<void> {
     const bodyPath = uuid4();
 
-    await this._queue.update((queue) => {
+    this._queue.update((queue) => {
       queue.push({
         bodyPath,
         date: request.date || new Date(),
@@ -60,7 +60,7 @@ export class PersistedRequestQueue {
     let found: PersistedRequest | undefined;
     const cutOff = Date.now() - MILLISECONDS_PER_DAY * this._maxAgeDays;
 
-    await this._queue.update((queue) => {
+    this._queue.update((queue) => {
       while ((found = queue.shift())) {
         // We drop events created in v3 of the SDK or before the cut-off
         if ('type' in found || found.date.getTime() < cutOff) {

From 101c235a6d3421b453b40d993f22a4560772dec3 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 13 Sep 2022 08:13:53 +0100
Subject: [PATCH 012/239] chore: changelog for 4.0.1 release (#553)

---
 CHANGELOG.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3018b887..5c6e47a7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
 
 ## Unreleased
 
+## 4.0.1
+
+- fix: Page titles in breadcrumbs should not change (#551)
+- feat: Update to v7.12.1 of JavaScript SDKs (#548)
+- fix: Pass attachments from renderer to main (#536)
+
+
 ## 4.0.0
 
 Updating the underlying Sentry JavaScript SDK's to v7 forces a major version bump due to minor breaking changes in user

From df20f1ef673320f821d5dd1e74e7f0e98d8803cb Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 13 Sep 2022 07:14:48 +0000
Subject: [PATCH 013/239] release: 4.0.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 2c1d5fd0..7df00899 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.0.0",
+  "version": "4.0.1",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From ee939e0d07877f7bb499317d4e166cf65bfcb204 Mon Sep 17 00:00:00 2001
From: Abhijeet Prasad <aprasad@sentry.io>
Date: Tue, 13 Sep 2022 11:46:23 +0200
Subject: [PATCH 014/239] chore: Add merge target to release action (#555)

---
 .github/workflows/release.yml | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 0ceb5c79..8e02b82e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,4 +1,4 @@
-name: Release
+name: Prepare Release
 on:
   workflow_dispatch:
     inputs:
@@ -8,6 +8,9 @@ on:
       force:
         description: Force a release even when there are release-blockers (optional)
         required: false
+      merge_target:
+        description: Target branch to merge into. Uses the default branch as a fallback (optional)
+        required: false
 jobs:
   release:
     runs-on: ubuntu-latest
@@ -24,3 +27,4 @@ jobs:
         with:
           version: ${{ github.event.inputs.version }}
           force: ${{ github.event.inputs.force }}
+          merge_target: ${{ github.event.inputs.merge_target }}

From 382cbcb12f3b8affb7d6a30f7601518739e72e8a Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 13 Sep 2022 12:55:06 +0100
Subject: [PATCH 015/239] test: Automatically update version of @sentry/tracing
 in e2e tests (#549)

---
 test/e2e/recipe/index.ts | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index 3665c972..0f76139e 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -15,6 +15,7 @@ import { parseRecipe, TestRecipe } from './parser';
 export * from './normalize';
 
 const SENTRY_KEY = '37f8a2ee37c0409d8970bc7559c7c7e4';
+const TRACING_VERSION = require('../../../package.json').devDependencies['@sentry/tracing'];
 
 const log = createLogger('Recipe Runner');
 
@@ -113,13 +114,15 @@ export class RecipeRunner {
         .replace('__RATE_LIMIT_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${RATE_LIMIT_ID}`)
         .replace('__ERROR_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${ERROR_ID}`);
 
-      // We replace the @sentry/electron dependency in package.json with
-      // the path to the tarball
       if (file.endsWith('package.json')) {
-        content = content.replace(
-          /"@sentry\/electron": ".*"/,
-          `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`,
-        );
+        content = content
+          // We replace the @sentry/electron dependency in package.json with the path to the tarball
+          .replace(
+            /"@sentry\/electron": ".*"/,
+            `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`,
+          )
+          // We replace the @sentry/tracing dependency version to match that of @sentry/electron
+          .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${TRACING_VERSION}"`);
       }
 
       writeFileSync(path, content);

From 203438a6036dc95e7cf04281e9f92bf1eb649ce3 Mon Sep 17 00:00:00 2001
From: Abhijeet Prasad <aprasad@sentry.io>
Date: Tue, 13 Sep 2022 17:07:00 +0200
Subject: [PATCH 016/239] meta: Changelog for 4.0.2 (#556)

Add a patch with no changes so that the npm tag uses this as latest.
---
 CHANGELOG.md | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c6e47a7..6597e6b2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,13 +2,16 @@
 
 ## Unreleased
 
+## 4.0.2
+
+This patch contains no changes. It has been made to make sure the `4.x` set of versions have the `latest` tag on npm.
+
 ## 4.0.1
 
 - fix: Page titles in breadcrumbs should not change (#551)
 - feat: Update to v7.12.1 of JavaScript SDKs (#548)
 - fix: Pass attachments from renderer to main (#536)
 
-
 ## 4.0.0
 
 Updating the underlying Sentry JavaScript SDK's to v7 forces a major version bump due to minor breaking changes in user

From 729bc1571ffeeb65d2d2f2768047d4ea0ce76015 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 13 Sep 2022 15:07:34 +0000
Subject: [PATCH 017/239] release: 4.0.2

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 7df00899..380bcf41 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.0.1",
+  "version": "4.0.2",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 0f36293ec8b60ea92f4b4d33a4121da73268afd1 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 16 Sep 2022 12:19:11 +0100
Subject: [PATCH 018/239] test: New Electron versions (#558)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 13793057..3f7b4d18 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.12","19.0.16","20.1.3"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.13","19.0.17","20.1.4"]

From 15812efc7dd9887647073c158300a846f6dfeed9 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 16 Sep 2022 15:58:53 +0100
Subject: [PATCH 019/239] test: Test less Electron versions (#560)

---
 .github/workflows/build.yml  |  2 +-
 scripts/e2e-test-versions.js | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)
 create mode 100644 scripts/e2e-test-versions.js

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 2e31020e..ef4b97ec 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -32,7 +32,7 @@ jobs:
           path: |
             ${{ github.workspace }}/*.tgz
       - id: set-matrix
-        run: echo "::set-output name=matrix::$(cat ./test/e2e/versions.json)"
+        run: echo "::set-output name=matrix::$(node ./scripts/e2e-test-versions.js)"
     outputs:
       matrix: ${{ steps.set-matrix.outputs.matrix }}
 
diff --git a/scripts/e2e-test-versions.js b/scripts/e2e-test-versions.js
new file mode 100644
index 00000000..ff6f32a7
--- /dev/null
+++ b/scripts/e2e-test-versions.js
@@ -0,0 +1,11 @@
+const { readFileSync } = require('fs');
+
+const versions = JSON.parse(readFileSync('./test/e2e/versions.json', 'utf8'));
+
+if (process.env.GITHUB_REF && process.env.GITHUB_REF.includes('release/')) {
+  // For release builds we test all versions
+  console.log(JSON.stringify(versions));
+} else {
+  // Otherwise we test the oldest version and the last 10 versions
+  console.log(JSON.stringify([versions[0], ...versions.slice(-10)]));
+}

From b86fab3d456da7851f80e69fee798a562e4ca75f Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 23 Sep 2022 12:19:47 +0100
Subject: [PATCH 020/239] fix: Rewrite async file store (#550)

---
 package.json                                  |   2 +-
 src/common/mutex.ts                           | 104 ++++++++++++
 src/main/fs.ts                                |  35 +---
 src/main/integrations/electron-minidump.ts    |   7 +-
 src/main/integrations/main-process-session.ts |   2 +-
 .../integrations/sentry-minidump/index.ts     |  14 +-
 src/main/sessions.ts                          |  32 ++--
 src/main/store.ts                             | 156 +++++++++++-------
 src/main/transports/queue.ts                  |  12 +-
 test/e2e/context.ts                           |  11 +-
 test/helpers.ts                               |   9 +
 test/unit/persist-queue.test.ts               |  19 +--
 test/unit/store.test.ts                       |  90 ++++++++++
 yarn.lock                                     |   2 +-
 14 files changed, 355 insertions(+), 140 deletions(-)
 create mode 100644 src/common/mutex.ts
 create mode 100644 test/unit/store.test.ts

diff --git a/package.json b/package.json
index 380bcf41..5b649ee0 100644
--- a/package.json
+++ b/package.json
@@ -63,7 +63,7 @@
     "@sentry/node": "7.12.1",
     "@sentry/types": "7.12.1",
     "@sentry/utils": "7.12.1",
-    "deepmerge": "^4.2.2",
+    "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
diff --git a/src/common/mutex.ts b/src/common/mutex.ts
new file mode 100644
index 00000000..602be804
--- /dev/null
+++ b/src/common/mutex.ts
@@ -0,0 +1,104 @@
+// This code was originally copied from  https://github.com/DirtyHairy/async-mutex
+// before being significantly simplified for our usage
+//
+// Copied at commit: 3d2d987e60799d0fa222f1df8f99fc90ed570bfd
+// Original licence:
+
+// The MIT License (MIT)
+//
+// Copyright (c) 2016 Christian Speckner <cnspeckn@googlemail.com>
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+type Releaser = () => void;
+
+interface QueueEntry {
+  resolve(result: Releaser): void;
+  reject(error: unknown): void;
+}
+
+/** An async mutex that queues up tasks for a shared resource */
+export class Mutex {
+  private _entries: Array<QueueEntry> = [];
+  private _waiters: Array<Releaser> = [];
+  private _value: number = 1;
+
+  /** Run a task when all pending tasks are complete */
+  public async runExclusive<T>(task: () => Promise<T> | T): Promise<T> {
+    const release = await this._acquire();
+
+    try {
+      return await task();
+    } finally {
+      release();
+    }
+  }
+
+  /** Gets a promise that resolves when all pending tasks are complete */
+  private _acquire(): Promise<Releaser> {
+    return new Promise((resolve, reject) => {
+      this._entries.push({ resolve, reject });
+
+      this._dispatch();
+    });
+  }
+
+  /** Releases after a task is complete */
+  private _release(): void {
+    this._value += 1;
+    this._dispatch();
+  }
+
+  /** Dispatches pending tasks */
+  private _dispatch(): void {
+    for (let weight = this._value; weight > 0; weight--) {
+      const queueEntry = this._entries?.shift();
+      if (!queueEntry) continue;
+
+      this._value -= weight;
+      weight = this._value + 1;
+
+      queueEntry.resolve(this._newReleaser());
+    }
+
+    this._drainUnlockWaiters();
+  }
+
+  /** Creates a new releaser */
+  private _newReleaser(): Releaser {
+    let called = false;
+
+    return () => {
+      if (called) return;
+      called = true;
+
+      this._release();
+    };
+  }
+
+  /** Drain unlock waiters */
+  private _drainUnlockWaiters(): void {
+    for (let weight = this._value; weight > 0; weight--) {
+      if (!this._waiters[weight - 1]) continue;
+
+      this._waiters.forEach((waiter) => waiter());
+      this._waiters = [];
+    }
+  }
+}
diff --git a/src/main/fs.ts b/src/main/fs.ts
index 68bc5d23..d174effc 100644
--- a/src/main/fs.ts
+++ b/src/main/fs.ts
@@ -1,5 +1,5 @@
 import { app } from 'electron';
-import { mkdir, mkdirSync, readdir, readFile, rename, stat, statSync, unlink, writeFile } from 'fs';
+import { mkdir, readdir, readFile, rename, stat, statSync, unlink, writeFile } from 'fs';
 import { dirname, join, resolve } from 'path';
 import { promisify } from 'util';
 
@@ -13,7 +13,7 @@ export const unlinkAsync = promisify(unlink);
 export const readDirAsync = promisify(readdir);
 export const renameAsync = promisify(rename);
 
-// mkdir/mkdirSync with recursive was only added in Node 10+
+// mkdir with recursive was only added in Node 10+
 
 /**
  * Recursively creates the given path.
@@ -26,12 +26,12 @@ export async function mkdirp(path: string): Promise<void> {
   const realPath = resolve(path);
 
   try {
-    return mkdirAsync(realPath, 0o777);
+    await mkdirAsync(realPath, 0o777);
   } catch (err) {
     const error = err as { code: string };
     if (error && error.code === 'ENOENT') {
       await mkdirp(dirname(realPath));
-      return mkdirAsync(realPath, 0o777);
+      await mkdirAsync(realPath, 0o777);
     }
 
     try {
@@ -43,30 +43,3 @@ export async function mkdirp(path: string): Promise<void> {
     }
   }
 }
-
-/**
- * Synchronous version of {@link mkdirp}.
- *
- * @param path A relative or absolute path to create.
- */
-export function mkdirpSync(path: string): void {
-  const realPath = resolve(path);
-
-  try {
-    mkdirSync(realPath, 0o777);
-  } catch (err) {
-    const error = err as { code: string };
-    if (error && error.code === 'ENOENT') {
-      mkdirpSync(dirname(realPath));
-      mkdirSync(realPath, 0o777);
-    } else {
-      try {
-        if (!statSync(realPath).isDirectory()) {
-          throw err;
-        }
-      } catch (_) {
-        throw err;
-      }
-    }
-  }
-}
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index f30294c7..7891050c 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -96,9 +96,10 @@ export class ElectronMinidump implements Integration {
     }
 
     // Check if last crash report was likely to have been unreported in the last session
-    const previousSessionCrashed = unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date);
-    // Check if a previous session was not closed
-    checkPreviousSession(previousSessionCrashed).catch((error) => logger.error(error));
+    void unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => {
+      // Check if a previous session was not closed
+      checkPreviousSession(crashed).catch((error) => logger.error(error));
+    });
   }
 
   /**
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index a780d742..b165c64b 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -14,7 +14,7 @@ export class MainProcessSession implements Integration {
 
   /** @inheritDoc */
   public setupOnce(): void {
-    startSession();
+    void startSession();
 
     // We track sessions via the 'will-quit' event which is the last event emitted before close.
     //
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 03967f89..2a27a279 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -11,7 +11,7 @@ import { sentryCachePath } from '../../fs';
 import { getRendererProperties, trackRendererProperties } from '../../renderers';
 import { ElectronMainOptions } from '../../sdk';
 import { checkPreviousSession, sessionCrashed } from '../../sessions';
-import { Store } from '../../store';
+import { BufferedWriteStore } from '../../store';
 import { deleteMinidump, getMinidumpLoader, MinidumpLoader } from './minidump-loader';
 
 /** Sends minidumps via the Sentry uploader */
@@ -23,10 +23,10 @@ export class SentryMinidump implements Integration {
   public name: string = SentryMinidump.id;
 
   /** Store to persist context information beyond application crashes. */
-  private _scopeStore?: Store<Scope>;
+  private _scopeStore?: BufferedWriteStore<Scope>;
 
   /** Temp store for the scope of last run */
-  private _scopeLastRun?: Scope;
+  private _scopeLastRun?: Promise<Scope>;
 
   private _minidumpLoader?: MinidumpLoader;
 
@@ -41,7 +41,7 @@ export class SentryMinidump implements Integration {
 
     this._startCrashReporter();
 
-    this._scopeStore = new Store<Scope>(sentryCachePath, 'scope_v2', new Scope());
+    this._scopeStore = new BufferedWriteStore<Scope>(sentryCachePath, 'scope_v2', new Scope());
     // We need to store the scope in a variable here so it can be attached to minidumps
     this._scopeLastRun = this._scopeStore.get();
 
@@ -170,14 +170,14 @@ export class SentryMinidump implements Integration {
   private _setupScopeListener(): void {
     const hubScope = getCurrentHub().getScope();
     if (hubScope) {
-      hubScope.addScopeListener((updatedScope) => {
+      hubScope.addScopeListener(async (updatedScope) => {
         const scope = Scope.clone(updatedScope);
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         (scope as any)._eventProcessors = [];
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         (scope as any)._scopeListeners = [];
 
-        this._scopeStore?.set(scope);
+        await this._scopeStore?.set(scope);
       });
     }
   }
@@ -224,7 +224,7 @@ export class SentryMinidump implements Integration {
           return false;
         }
 
-        const storedScope = Scope.clone(this._scopeLastRun);
+        const storedScope = Scope.clone(await this._scopeLastRun);
         let newEvent = await storedScope.applyToEvent(event);
 
         const hubScope = hub.getScope();
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index 583b215e..0cf890ae 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -1,7 +1,7 @@
 import { getCurrentHub } from '@sentry/core';
 import { makeSession, updateSession } from '@sentry/hub';
 import { flush, NodeClient } from '@sentry/node';
-import { SerializedSession, SessionContext, SessionStatus } from '@sentry/types';
+import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';
 import { logger } from '@sentry/utils';
 
 import { sentryCachePath } from './fs';
@@ -13,22 +13,21 @@ const PERSIST_INTERVAL_MS = 60_000;
 const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined);
 
 /** Previous session that did not exit cleanly */
-let previousSession = sessionStore.get();
-const previousSessionModified = sessionStore.getModifiedDate();
+let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get();
 
 let persistTimer: NodeJS.Timer | undefined;
 
 /** Starts a session */
-export function startSession(): void {
+export async function startSession(): Promise<void> {
   const hub = getCurrentHub();
-  sessionStore.set(hub.startSession());
+  await sessionStore.set(hub.startSession());
 
   // Every PERSIST_INTERVAL, write the session to disk
-  persistTimer = setInterval(() => {
+  persistTimer = setInterval(async () => {
     const currentSession = hub.getScope()?.getSession();
     // Only bother saving if it hasn't already ended
     if (currentSession && currentSession.status === 'ok') {
-      sessionStore.set(currentSession);
+      await sessionStore.set(currentSession);
     }
   }, PERSIST_INTERVAL_MS);
 }
@@ -54,19 +53,20 @@ export async function endSession(): Promise<void> {
     logger.log('No session');
   }
 
-  sessionStore.set(undefined, true);
+  await sessionStore.clear();
 
   await flush();
 }
 
 /** Determines if a Date is likely to have occurred in the previous uncompleted session */
-export function unreportedDuringLastSession(crashDate: Date | undefined): boolean {
+export async function unreportedDuringLastSession(crashDate: Date | undefined): Promise<boolean> {
   if (!crashDate) {
     return false;
   }
 
+  const previousSessionModified = await sessionStore.getModifiedDate();
   // There is no previous session
-  if (!previousSessionModified) {
+  if (previousSessionModified == undefined) {
     return false;
   }
 
@@ -87,9 +87,11 @@ export function unreportedDuringLastSession(crashDate: Date | undefined): boolea
 export async function checkPreviousSession(crashed: boolean): Promise<void> {
   const client = getCurrentHub().getClient<NodeClient>();
 
-  if (previousSession && client) {
+  const previous = await previousSession;
+
+  if (previous && client) {
     // Ignore if the previous session is already ended
-    if (previousSession.status !== 'ok') {
+    if (previous.status !== 'ok') {
       previousSession = undefined;
       return;
     }
@@ -98,13 +100,13 @@ export async function checkPreviousSession(crashed: boolean): Promise<void> {
 
     logger.log(`Found previous ${status} session`);
 
-    const sesh = makeSession(previousSession);
+    const sesh = makeSession(previous);
 
     updateSession(sesh, {
       status,
       errors: (sesh.errors || 0) + 1,
-      release: (previousSession as unknown as SerializedSession).attrs?.release,
-      environment: (previousSession as unknown as SerializedSession).attrs?.environment,
+      release: (previous as unknown as SerializedSession).attrs?.release,
+      environment: (previous as unknown as SerializedSession).attrs?.environment,
     });
 
     await client.sendSession(sesh);
diff --git a/src/main/store.ts b/src/main/store.ts
index f34d101f..291de428 100644
--- a/src/main/store.ts
+++ b/src/main/store.ts
@@ -1,8 +1,8 @@
 import { logger } from '@sentry/utils';
-import { existsSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'fs';
 import { dirname, join } from 'path';
 
-import { mkdirpSync } from './fs';
+import { Mutex } from '../common/mutex';
+import { mkdirp, readFileAsync, statAsync, unlinkAsync, writeFileAsync } from './fs';
 
 const dateFormat = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.*\d{0,10}Z$/;
 
@@ -16,19 +16,18 @@ function dateReviver(_: string, value: any): any {
 }
 
 /**
- * Note, this class is only compatible with Node.
- * Lazily serializes data to a JSON file to persist. When created, it loads data
- * from that file if it already exists.
+ * Stores data serialized to a JSON file.
  */
 export class Store<T> {
+  /** Current state of the data. */
+  protected _data?: T;
+
   /** Internal path for JSON file. */
   private readonly _path: string;
   /** Value used to initialize data for the first time. */
   private readonly _initial: T;
-  /** Current state of the data. */
-  private _data?: T;
-  /** State whether a flush to disk has been requested in this cycle. */
-  private _flushing: boolean;
+  /** A mutex to ensure that there aren't races while reading and writing files */
+  private _lock: Mutex = new Mutex();
 
   /**
    * Creates a new store.
@@ -40,35 +39,34 @@ export class Store<T> {
   public constructor(path: string, id: string, initial: T) {
     this._path = join(path, `${id}.json`);
     this._initial = initial;
-    this._flushing = false;
   }
 
   /**
    * Updates data by replacing it with the given value.
-   * @param next New data to replace the previous one.
-   * @param forceFlush Forces the write to be flushed to disk immediately
+   * @param data New data to replace the previous one.
    */
-  public set(next: T, forceFlush: boolean = false): void {
-    this._data = next;
-
-    if (!this._flushing) {
-      this._flushing = true;
-      if (forceFlush) {
-        this._flush();
-      } else {
-        setImmediate(() => {
-          this._flush();
-        });
-      }
-    }
-  }
+  public async set(data: T): Promise<void> {
+    await this._lock.runExclusive(async () => {
+      this._data = data;
 
-  /**
-   * Updates data by passing it through the given function.
-   * @param fn A function receiving the current data and returning new one.
-   */
-  public update(fn: (current: T) => T): void {
-    this.set(fn(this.get()));
+      try {
+        if (data === undefined) {
+          try {
+            await unlinkAsync(this._path);
+          } catch (_) {
+            //
+          }
+        } else {
+          await mkdirp(dirname(this._path));
+          await writeFileAsync(this._path, JSON.stringify(data));
+        }
+      } catch (e) {
+        logger.warn('Failed to write to store', e);
+        // This usually fails due to anti virus scanners, issues in the file
+        // system, or problems with network drives. We cannot fix or handle this
+        // issue and must resume gracefully. Thus, we have to ignore this error.
+      }
+    });
   }
 
   /**
@@ -78,50 +76,84 @@ export class Store<T> {
    * from disk. If the file does not exist, the initial value provided to the
    * constructor is used.
    */
-  public get(): T {
-    if (this._data === undefined) {
-      try {
-        this._data = existsSync(this._path)
-          ? (JSON.parse(readFileSync(this._path, 'utf8'), dateReviver) as T)
-          : this._initial;
-      } catch (e) {
-        this._data = this._initial;
+  public async get(): Promise<T> {
+    return await this._lock.runExclusive(async () => {
+      if (this._data === undefined) {
+        try {
+          this._data = JSON.parse(await readFileAsync(this._path, 'utf8'), dateReviver) as T;
+        } catch (e) {
+          this._data = this._initial;
+        }
       }
-    }
 
-    return this._data;
+      return this._data;
+    });
+  }
+
+  /**
+   * Updates data by passing it through the given function.
+   * @param fn A function receiving the current data and returning new one.
+   */
+  public async update(fn: (current: T) => T): Promise<void> {
+    await this.set(fn(await this.get()));
   }
 
   /** Returns store to its initial state */
-  public clear(): void {
-    this.set(this._initial);
+  public async clear(): Promise<void> {
+    await this.set(this._initial);
   }
 
   /** Gets the Date that the file was last modified */
-  public getModifiedDate(): Date | undefined {
+  public async getModifiedDate(): Promise<Date | undefined> {
     try {
-      return statSync(this._path)?.mtime;
+      return (await statAsync(this._path))?.mtime;
     } catch (_) {
       return undefined;
     }
   }
+}
 
-  /** Serializes the current data into the JSON file. */
-  private _flush(): void {
-    try {
-      if (this._data === undefined) {
-        unlinkSync(this._path);
-      } else {
-        mkdirpSync(dirname(this._path));
-        writeFileSync(this._path, JSON.stringify(this._data));
-      }
-    } catch (e) {
-      logger.warn('Failed to flush store', e);
-      // This usually fails due to anti virus scanners, issues in the file
-      // system, or problems with network drives. We cannot fix or handle this
-      // issue and must resume gracefully. Thus, we have to ignore this error.
-    } finally {
-      this._flushing = false;
+/**
+ * Extends Store to throttle writes.
+ */
+export class BufferedWriteStore<T> extends Store<T> {
+  /** The minimum time between writes */
+  private readonly _throttleTime?: number;
+  /** A write that hasn't been written to disk yet */
+  private _pendingWrite: { data: T; timeout: NodeJS.Timeout } | undefined;
+
+  /**
+   * Creates a new ThrottledStore.
+   *
+   * @param path A unique filename to store this data.
+   * @param id A unique filename to store this data.
+   * @param initial An initial value to initialize data with.
+   * @param throttleTime The minimum time between writes
+   */
+  public constructor(path: string, id: string, initial: T, throttleTime: number = 500) {
+    super(path, id, initial);
+    this._throttleTime = throttleTime;
+  }
+
+  /** @inheritdoc */
+  public override async set(data: T): Promise<void> {
+    this._data = data;
+
+    this._pendingWrite = {
+      // We overwrite the data for the pending write so that the latest data is written in the next flush
+      data,
+      // If there is already a pending timeout, we keep that rather than starting the timeout again
+      timeout: this._pendingWrite?.timeout || setTimeout(() => this._writePending(), this._throttleTime),
+    };
+  }
+
+  /** Writes the pending write to disk */
+  private _writePending(): void {
+    if (this._pendingWrite) {
+      const data = this._pendingWrite.data;
+      // Clear the pending write immediately so that subsequent writes can be queued
+      this._pendingWrite = undefined;
+      void super.set(data);
     }
   }
 }
diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts
index 93618935..9448281c 100644
--- a/src/main/transports/queue.ts
+++ b/src/main/transports/queue.ts
@@ -3,7 +3,7 @@ import { logger, uuid4 } from '@sentry/utils';
 import { join } from 'path';
 
 import { readFileAsync, unlinkAsync, writeFileAsync } from '../fs';
-import { Store } from '../store';
+import { BufferedWriteStore } from '../store';
 
 const MILLISECONDS_PER_DAY = 86_400_000;
 
@@ -21,7 +21,11 @@ export interface QueuedTransportRequest extends TransportRequest {
 
 /** A request queue that is persisted to disk to survive app restarts */
 export class PersistedRequestQueue {
-  private readonly _queue: Store<PersistedRequest[]> = new Store(this._queuePath, 'queue', []);
+  private readonly _queue: BufferedWriteStore<PersistedRequest[]> = new BufferedWriteStore(
+    this._queuePath,
+    'queue',
+    [],
+  );
 
   public constructor(
     private readonly _queuePath: string,
@@ -33,7 +37,7 @@ export class PersistedRequestQueue {
   public async add(request: QueuedTransportRequest): Promise<void> {
     const bodyPath = uuid4();
 
-    this._queue.update((queue) => {
+    await this._queue.update((queue) => {
       queue.push({
         bodyPath,
         date: request.date || new Date(),
@@ -60,7 +64,7 @@ export class PersistedRequestQueue {
     let found: PersistedRequest | undefined;
     const cutOff = Date.now() - MILLISECONDS_PER_DAY * this._maxAgeDays;
 
-    this._queue.update((queue) => {
+    await this._queue.update((queue) => {
       while ((found = queue.shift())) {
         // We drop events created in v3 of the SDK or before the cut-off
         if ('type' in found || found.date.getTime() < cutOff) {
diff --git a/test/e2e/context.ts b/test/e2e/context.ts
index 6dd42c09..aaab4ef6 100644
--- a/test/e2e/context.ts
+++ b/test/e2e/context.ts
@@ -63,6 +63,7 @@ export class TestContext {
 
     if (!options.secondRun) {
       env.APP_FIRST_RUN = true;
+      this._clearAppUserData();
     }
 
     const childProcess = spawn(this._electronPath, [this._appPath], { env });
@@ -110,9 +111,7 @@ export class TestContext {
     await this.mainProcess.kill();
 
     if (!options.retainData) {
-      for (const dir of getDeleteDirectories(this._appName)) {
-        rmSync(dir, { recursive: true, force: true });
-      }
+      this._clearAppUserData();
     }
 
     log('Test app stopped');
@@ -177,6 +176,12 @@ export class TestContext {
   public get isStarted(): boolean {
     return this._started;
   }
+
+  private _clearAppUserData() {
+    for (const dir of getDeleteDirectories(this._appName)) {
+      rmSync(dir, { recursive: true, force: true });
+    }
+  }
 }
 
 /** Handle for a running process. */
diff --git a/test/helpers.ts b/test/helpers.ts
index ad5fd93f..e8ef05ca 100644
--- a/test/helpers.ts
+++ b/test/helpers.ts
@@ -1,5 +1,14 @@
+import { expect } from 'chai';
+
+import { walkSync } from './e2e/utils';
+
 export function delay(ms: number): Promise<void> {
   return new Promise((resolve) => {
     setTimeout(resolve, ms);
   });
 }
+
+export async function expectFilesInDirectory(dir: string, count: number): Promise<void> {
+  const found = Array.from(walkSync(dir)).length;
+  expect(found, 'files in directory').to.equal(count);
+}
diff --git a/test/unit/persist-queue.test.ts b/test/unit/persist-queue.test.ts
index 7cc50641..19fab5ad 100644
--- a/test/unit/persist-queue.test.ts
+++ b/test/unit/persist-queue.test.ts
@@ -3,20 +3,11 @@ import chaiAsPromised = require('chai-as-promised');
 import * as tmp from 'tmp';
 
 import { PersistedRequestQueue, QueuedTransportRequest } from '../../src/main/transports/queue';
-import { walkSync } from '../e2e/utils';
-import { delay } from '../helpers';
+import { delay, expectFilesInDirectory } from '../helpers';
 
 should();
 use(chaiAsPromised);
 
-async function expectFilesInDirectory(dir: string, count: number): Promise<void> {
-  // We delay because store flushing is async and not waited on
-  await delay(500);
-
-  const found = Array.from(walkSync(dir)).length;
-  expect(found, 'files in directory').to.equal(count);
-}
-
 describe('PersistedRequestQueue', () => {
   let tempDir: tmp.DirResult;
   beforeEach(() => {
@@ -34,9 +25,8 @@ describe('PersistedRequestQueue', () => {
     await expectFilesInDirectory(tempDir.name, 0);
 
     await queue.add({ body: 'just a string' });
-    await expectFilesInDirectory(tempDir.name, 2);
-
     await delay(1_000);
+    await expectFilesInDirectory(tempDir.name, 2);
 
     // We create a new queue to force reading from serialized store
     const queue2 = new PersistedRequestQueue(tempDir.name);
@@ -46,6 +36,7 @@ describe('PersistedRequestQueue', () => {
     expect(popped?.body).to.not.be.undefined;
     expect(popped?.body.toString()).to.equal('just a string');
 
+    await delay(1_000);
     await expectFilesInDirectory(tempDir.name, 1);
   });
 
@@ -60,6 +51,7 @@ describe('PersistedRequestQueue', () => {
     await queue.add({ body: '6' });
     await queue.add({ body: '7' });
 
+    await delay(1_000);
     await expectFilesInDirectory(tempDir.name, 6);
 
     const popped: QueuedTransportRequest[] = [];
@@ -71,6 +63,7 @@ describe('PersistedRequestQueue', () => {
     expect(popped.length).to.equal(5);
     expect(popped.map((p) => p.body.toString()).join('')).to.equal('34567');
 
+    await delay(1_000);
     await expectFilesInDirectory(tempDir.name, 1);
   });
 
@@ -82,6 +75,7 @@ describe('PersistedRequestQueue', () => {
     await queue.add({ body: 'so old 3', date: new Date(Date.now() - 100_000_000) });
     await queue.add({ body: 'so old 4' });
 
+    await delay(1_000);
     await expectFilesInDirectory(tempDir.name, 5);
 
     const pop = await queue.pop();
@@ -89,6 +83,7 @@ describe('PersistedRequestQueue', () => {
     const pop2 = await queue.pop();
     expect(pop2).to.be.undefined;
 
+    await delay(1_000);
     await expectFilesInDirectory(tempDir.name, 1);
   });
 });
diff --git a/test/unit/store.test.ts b/test/unit/store.test.ts
new file mode 100644
index 00000000..4c82cf36
--- /dev/null
+++ b/test/unit/store.test.ts
@@ -0,0 +1,90 @@
+import { expect, should, use } from 'chai';
+import chaiAsPromised = require('chai-as-promised');
+import { join } from 'path';
+import * as tmp from 'tmp';
+
+import { readFileAsync } from '../../src/main/fs';
+import { BufferedWriteStore, Store } from '../../src/main/store';
+import { delay, expectFilesInDirectory } from '../helpers';
+
+should();
+use(chaiAsPromised);
+
+interface TestType {
+  num: number;
+  str: string;
+}
+
+describe('Store', () => {
+  let tempDir: tmp.DirResult;
+  beforeEach(() => {
+    tempDir = tmp.dirSync({ unsafeCleanup: true });
+  });
+
+  afterEach(() => {
+    if (tempDir) {
+      tempDir.removeCallback();
+    }
+  });
+
+  it('Non throttled store', async () => {
+    const store = new Store<TestType | undefined>(tempDir.name, 'test-store', undefined);
+    await expectFilesInDirectory(tempDir.name, 0);
+
+    await store.set({ num: 99, str: 'just a string' });
+    // It should have been written immediately
+    await expectFilesInDirectory(tempDir.name, 1);
+    const contents = await readFileAsync(join(tempDir.name, 'test-store.json'), 'utf-8');
+
+    expect(contents).to.equal('{"num":99,"str":"just a string"}');
+
+    // Load a new store instance so it's forced to read from disk
+    const store2 = new Store<TestType | undefined>(tempDir.name, 'test-store', undefined);
+    const value = await store2.get();
+
+    expect(value).to.eql({ num: 99, str: 'just a string' });
+
+    await store2.clear();
+    // File should now be deleted
+    await expectFilesInDirectory(tempDir.name, 0);
+  });
+
+  it('Throttled store', async () => {
+    const store = new BufferedWriteStore<TestType | undefined>(tempDir.name, 'test-store', undefined);
+    await expectFilesInDirectory(tempDir.name, 0);
+
+    await store.set({ num: 990, str: 'just a string' });
+    // File should not be written after 100ms!
+    await delay(100);
+    await expectFilesInDirectory(tempDir.name, 0);
+    // Should have been written after 1 more second
+    await delay(1_000);
+    await expectFilesInDirectory(tempDir.name, 1);
+
+    const contents = await readFileAsync(join(tempDir.name, 'test-store.json'), 'utf-8');
+    expect(contents).to.equal('{"num":990,"str":"just a string"}');
+
+    await store.set({ num: 5_000, str: 'just a string' });
+    await delay(100);
+
+    // File should still contain the old value
+    const contents2 = await readFileAsync(join(tempDir.name, 'test-store.json'), 'utf-8');
+    expect(contents2).to.equal('{"num":990,"str":"just a string"}');
+
+    await delay(1_000);
+    // File should now contain updated value
+    const contents3 = await readFileAsync(join(tempDir.name, 'test-store.json'), 'utf-8');
+    expect(contents3).to.equal('{"num":5000,"str":"just a string"}');
+
+    // Load a new store instance so it's forced to read from disk
+    const store2 = new BufferedWriteStore<TestType | undefined>(tempDir.name, 'test-store', undefined);
+    const value = await store2.get();
+
+    expect(value).to.eql({ num: 5_000, str: 'just a string' });
+
+    await store2.clear();
+    await delay(1_000);
+    // File should now be deleted
+    await expectFilesInDirectory(tempDir.name, 0);
+  });
+});
diff --git a/yarn.lock b/yarn.lock
index 27aab6e8..c91872ba 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1062,7 +1062,7 @@ deep-is@^0.1.3:
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
   integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
 
-deepmerge@^4.2.2:
+deepmerge@4.2.2:
   version "4.2.2"
   resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
   integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==

From 59787026ad84b2f1ef8f96f9ae9b1f3bec1760bc Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 23 Sep 2022 12:51:22 +0100
Subject: [PATCH 021/239] test: New Electron versions (#562)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 3f7b4d18..49cb443e 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.13","19.0.17","20.1.4"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.13","19.0.17","20.2.0"]

From aaf65dbb49735c662adbd45dcc618ba45bc8004d Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Sun, 25 Sep 2022 16:11:10 +0100
Subject: [PATCH 022/239] Update JavaScript SDKs to 7.13.0 (#563)

---
 package.json |  18 ++++----
 yarn.lock    | 116 +++++++++++++++++++++++++--------------------------
 2 files changed, 67 insertions(+), 67 deletions(-)

diff --git a/package.json b/package.json
index 5b649ee0..0db2547a 100644
--- a/package.json
+++ b/package.json
@@ -57,19 +57,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.12.1",
-    "@sentry/core": "7.12.1",
-    "@sentry/hub": "7.12.1",
-    "@sentry/node": "7.12.1",
-    "@sentry/types": "7.12.1",
-    "@sentry/utils": "7.12.1",
+    "@sentry/browser": "7.13.0",
+    "@sentry/core": "7.13.0",
+    "@sentry/hub": "7.13.0",
+    "@sentry/node": "7.13.0",
+    "@sentry/types": "7.13.0",
+    "@sentry/utils": "7.13.0",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.12.1",
-    "@sentry-internal/typescript": "7.12.1",
-    "@sentry/tracing": "7.12.1",
+    "@sentry-internal/eslint-config-sdk": "7.13.0",
+    "@sentry-internal/typescript": "7.13.0",
+    "@sentry/tracing": "7.13.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/yarn.lock b/yarn.lock
index c91872ba..3c5fff4b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -100,13 +100,13 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@sentry-internal/eslint-config-sdk@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.12.1.tgz#2eea4ca6ad3013ddb274031f1cc377be7a2adb07"
-  integrity sha512-a8vrOTQAmnU7jECSy7wiXf3/Z156lSud1tWZmKI8FPakvmidISPu7m96TlAY/fSysv2UoiKMjpfpBizjttnIGA==
+"@sentry-internal/eslint-config-sdk@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.13.0.tgz#0aca52992a90ba52f30f655bd88f62990c8a19ae"
+  integrity sha512-l4HcT//w4Ubqc2PV58hJux6sf/NgMG5ahHUhC2LupJICpZPvFAp3lwSZkm/ejSElaX1LYGLW8giZqiix+ssVOQ==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.12.1"
-    "@sentry-internal/typescript" "7.12.1"
+    "@sentry-internal/eslint-plugin-sdk" "7.13.0"
+    "@sentry-internal/typescript" "7.13.0"
     "@typescript-eslint/eslint-plugin" "^3.9.0"
     "@typescript-eslint/parser" "^3.9.0"
     eslint-config-prettier "^6.11.0"
@@ -115,82 +115,82 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.12.1.tgz#9aea7ba346f07036479fb114b6d4d3d90b218a22"
-  integrity sha512-q1Ke/14TWDbAoc2In7+jGNw0xXVfQgHows9/uhNXHhI68PjdtO2dKUR66kgbHiZe5O/4lGTlxzRTANBSKOShtA==
+"@sentry-internal/eslint-plugin-sdk@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.13.0.tgz#ca7d97d3bbd618ad44293490c387fc86f3db5e45"
+  integrity sha512-ZKejUx7FLiOB+cY/3YbV1/TamMFm8IOE54dTK2e148MbBvefM1mNjI5gbUcBMDCVk3CR5PO/2SkeRMBcEZfw1A==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.12.1.tgz#e08d8275aa8ac1f60c67fe605275eb031aba5eb6"
-  integrity sha512-79UcEk5++A7jUyTOa/DX/jJRW1OMcjtVqCk+aXF5hZbHM7qNjL1F8ZClxEq2SSstwuF0Q+ESHwK30VUR79NbwQ==
+"@sentry-internal/typescript@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.13.0.tgz#86b7014859002eb5860e560fbc9d9c20e71d98d3"
+  integrity sha512-dAyNQR7a2GTMSOkGxWXRNWUmM/u8rhM1sY+d1817IXstTiLN2PFWVnpvyup32p5H7jasW/nuIDGjWjzZoY3/9Q==
 
-"@sentry/browser@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.12.1.tgz#2be6fa5c2529a2a75abac4d00aca786362302a1a"
-  integrity sha512-pgyL65CrGFLe8sKcEG8KXAuVTE8zkAsyTlv/AuME06cSdxzO/memPK/r3BI6EM7WupIdga+V5tQUldeT1kgHNA==
+"@sentry/browser@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.13.0.tgz#883b8598c8a0c33af246242e7172e39306dc564a"
+  integrity sha512-WbgClHPYe8TKsdVVbuzd6alxwh3maFQNuljMkSTnYvPx2P+NT0wHljTs37D39FGfSmAwaqn7D/1ZHAtC+6mWxA==
   dependencies:
-    "@sentry/core" "7.12.1"
-    "@sentry/types" "7.12.1"
-    "@sentry/utils" "7.12.1"
+    "@sentry/core" "7.13.0"
+    "@sentry/types" "7.13.0"
+    "@sentry/utils" "7.13.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.12.1.tgz#a22f1c530ed528a699ed204c36eb5fc8d308103d"
-  integrity sha512-DFHbzHFjukhlkRZ5xzfebx0IBzblW43kmfnalBBq7xEMscUvnhsYnlvL9Y20tuPZ/PrTcq4JAHbFluAvw6M0QQ==
+"@sentry/core@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.13.0.tgz#65597d71f8bfa1186f34009803e03ca9edb3adee"
+  integrity sha512-hB46fklmKrSDMEvZOF8qBHhys7PONBFyxQtbNDZUlv/kabs4gF3VEg1ftCaXnjx4lLNlsUl/ScFdM6194RvISg==
   dependencies:
-    "@sentry/hub" "7.12.1"
-    "@sentry/types" "7.12.1"
-    "@sentry/utils" "7.12.1"
+    "@sentry/hub" "7.13.0"
+    "@sentry/types" "7.13.0"
+    "@sentry/utils" "7.13.0"
     tslib "^1.9.3"
 
-"@sentry/hub@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.12.1.tgz#dffad40cd2b8f44df2d5f20a89df87879cbbf1c3"
-  integrity sha512-KLVnVqXf+CRmXNy9/T8K2/js7QvOQ94xtgP5KnWJbu2rl+JhxnIGiBRF51lPXFIatt7zWwB9qNdMS8lVsvLMGQ==
+"@sentry/hub@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.13.0.tgz#752068e528cfb277ed154bc94e311cad50ef792e"
+  integrity sha512-88/GsD1BoyrBwRKJCmVHZtSH5rizOsImUHWEXc1AOa1aR8nanfn56JdAbd6tC55pA+nT4R4H4vN/PrUaomTbtg==
   dependencies:
-    "@sentry/types" "7.12.1"
-    "@sentry/utils" "7.12.1"
+    "@sentry/types" "7.13.0"
+    "@sentry/utils" "7.13.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.12.1.tgz#ced12d0db3ca5715d699858acb1e2f2ea1d7c59b"
-  integrity sha512-ZVT2+lLd3gbhOuCOczlFLHH2KnD4EXrq6jRp5Sb2vsSZGVHnVsbD5j7i54zbSBqcydlFqzVMqWSysGTKoYiimw==
+"@sentry/node@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.13.0.tgz#0e073b75d4cce684db006d93ef18f2de2cf2f60e"
+  integrity sha512-uP3bPAIRHPilnOEiYGQQDLaQphc/c7d87wm91bZrTJ+WPnMW4D/NmT7fna5zGGDQIr/KTdQ/LEpDeZOILbkCqQ==
   dependencies:
-    "@sentry/core" "7.12.1"
-    "@sentry/hub" "7.12.1"
-    "@sentry/types" "7.12.1"
-    "@sentry/utils" "7.12.1"
+    "@sentry/core" "7.13.0"
+    "@sentry/hub" "7.13.0"
+    "@sentry/types" "7.13.0"
+    "@sentry/utils" "7.13.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/tracing@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.12.1.tgz#9f92985f152054ac90b6ec83a33c44e8084a008e"
-  integrity sha512-WnweIt//IqkEkJSjA8DtnIeCdItYIqJSxNQ6qK+r546/ufxRYFBck2fbmM0oKZJVg2evbwhadrBTIUzYkqNj4A==
+"@sentry/tracing@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.13.0.tgz#521dc021dab78e37e29b0f90b01cb444337adfc4"
+  integrity sha512-/MKSd25rGv6Pc0FPBLXJifkfvSaYVPA8XUOLzVeDN0gl07h8AXli4qG9amTh/4Wb5h4dFpbcscOvW2VC+pxkIA==
   dependencies:
-    "@sentry/hub" "7.12.1"
-    "@sentry/types" "7.12.1"
-    "@sentry/utils" "7.12.1"
+    "@sentry/hub" "7.13.0"
+    "@sentry/types" "7.13.0"
+    "@sentry/utils" "7.13.0"
     tslib "^1.9.3"
 
-"@sentry/types@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.12.1.tgz#eff76d938f9effc62a2ec76cd5c3f04de37f5c15"
-  integrity sha512-VGZs39SZgMcCGv7H0VyFy1LEFGsnFZH590JUopmz6nG63EpeYQ2xzhIoPNAiLKbyUvBEwukn+faCg3u3MGqhgQ==
+"@sentry/types@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.13.0.tgz#398e33e5c92ea0ce91e2c86e3ab003fe00c471a2"
+  integrity sha512-ttckM1XaeyHRLMdr79wmGA5PFbTGx2jio9DCD/mkEpSfk6OGfqfC7gpwy7BNstDH/VKyQj/lDCJPnwvWqARMoQ==
 
-"@sentry/utils@7.12.1":
-  version "7.12.1"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.12.1.tgz#fcf80fdc332d0bd288e21b13efc7a2f0d604f75a"
-  integrity sha512-Dh8B13pC0u8uLM/zf+oZngyg808c6BDEO94F7H+h3IciCVVd92A0cOQwLGAEdf8srnJgpZJNAlSC8lFDhbFHzQ==
+"@sentry/utils@7.13.0":
+  version "7.13.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.13.0.tgz#0d47a9278806ece78ba3a83c7dbebce817462759"
+  integrity sha512-jnR85LgRLSk7IQe2OhKOPMY4fasJCNQNW0iCXsH+S2R1qnsF+N4ksNkQ+7JyyM9E7F03YpI2qd76bKY0VIn5iA==
   dependencies:
-    "@sentry/types" "7.12.1"
+    "@sentry/types" "7.13.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From cc75f592937c00e4fca6c6b1d5946c058a9aef87 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 27 Sep 2022 12:18:49 +0100
Subject: [PATCH 023/239] test: New Electron versions (#565)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 49cb443e..31efdba7 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.13","19.0.17","20.2.0"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.14","19.1.0","20.2.0","21.0.0"]

From 7a58f3408ca7071ee541625f30bec793c66eac92 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sat, 1 Oct 2022 21:43:24 +0100
Subject: [PATCH 024/239] test: New Electron versions (#566)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 31efdba7..98456b52 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.14","19.1.0","20.2.0","21.0.0"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.1","20.3.0","21.0.1"]

From d54ec96fb55f18bb1497d092a8ddeafb0c3d52c6 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 5 Oct 2022 17:05:42 +0200
Subject: [PATCH 025/239] fix: Main process options should be a union with
 NodeOptions (#569)

---
 src/main/sdk.ts | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index e1db482a..9584dc31 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -1,7 +1,7 @@
 import { ensureProcess, IPCMode } from '../common';
 ensureProcess('main');
 
-import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit } from '@sentry/node';
+import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit, NodeOptions } from '@sentry/node';
 import { Integration, Options } from '@sentry/types';
 import { Session, session, WebContents } from 'electron';
 
@@ -79,7 +79,8 @@ export interface ElectronMainOptionsInternal extends Options<ElectronOfflineTran
 
 // getSessions and ipcMode properties are optional because they have defaults
 export type ElectronMainOptions = Pick<Partial<ElectronMainOptionsInternal>, 'getSessions' | 'ipcMode'> &
-  Omit<ElectronMainOptionsInternal, 'getSessions' | 'ipcMode'>;
+  Omit<ElectronMainOptionsInternal, 'getSessions' | 'ipcMode'> &
+  NodeOptions;
 
 const defaultOptions: ElectronMainOptionsInternal = {
   _metadata: { sdk: { name: 'sentry.javascript.electron', version: SDK_VERSION } },

From 84dc9b9fec7ceb91544f8e6a81fa245ac28d6697 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 6 Oct 2022 10:45:59 +0200
Subject: [PATCH 026/239] docs: Add process specific imports to readme (#570)

---
 CHANGELOG.md | 4 ++++
 README.md    | 9 +++++++++
 2 files changed, 13 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6597e6b2..77608318 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ## Unreleased
 
+## 4.0.3
+
+- fix: `ElectronMainOptions` type should be a union with `NodeOptions`
+
 ## 4.0.2
 
 This patch contains no changes. It has been made to make sure the `4.x` set of versions have the `latest` tag on npm.
diff --git a/README.md b/README.md
index 6689ad7f..8e6f8c2c 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,15 @@ init({
   // ...
 });
 ```
+If you are using a JavaScript bundler, you may need to use the process specific imports to ensure the correct code is loaded for
+each process:
+```javascript
+// In the Electron main process
+import { init } from '@sentry/electron/main';
+
+// In the Electron renderer processes
+import { init } from '@sentry/electron/renderer';
+```
 
 To set context information or send manual events, use the exported functions of `@sentry/electron`. Note that these
 functions will not perform any action before you have called `init()`:

From 2889482b8fd6e7abb24d91d7ea1573211d86dbaa Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Thu, 6 Oct 2022 08:47:11 +0000
Subject: [PATCH 027/239] release: 4.0.3

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 0db2547a..b05de3c6 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.0.2",
+  "version": "4.0.3",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 689009e1725ef9477d41099e7e69b6fb37f32252 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 6 Oct 2022 11:55:28 +0200
Subject: [PATCH 028/239] test: New Electron versions (#571)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 98456b52..272216cc 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.1","20.3.0","21.0.1"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.2","20.3.1","21.1.0"]

From b9da0a2ff7b679bc04dfa9eaf9abb10f552d0c88 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 11 Oct 2022 16:03:01 +0200
Subject: [PATCH 029/239] feat: Update to v7.15.0 of Sentry JavaScript SDKs
 (#572)

---
 package.json         |  17 +++----
 src/main/sessions.ts |   3 +-
 yarn.lock            | 115 +++++++++++++++++++++----------------------
 3 files changed, 66 insertions(+), 69 deletions(-)

diff --git a/package.json b/package.json
index b05de3c6..0b71277f 100644
--- a/package.json
+++ b/package.json
@@ -57,19 +57,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.13.0",
-    "@sentry/core": "7.13.0",
-    "@sentry/hub": "7.13.0",
-    "@sentry/node": "7.13.0",
-    "@sentry/types": "7.13.0",
-    "@sentry/utils": "7.13.0",
+    "@sentry/browser": "7.15.0",
+    "@sentry/core": "7.15.0",
+    "@sentry/node": "7.15.0",
+    "@sentry/types": "7.15.0",
+    "@sentry/utils": "7.15.0",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.13.0",
-    "@sentry-internal/typescript": "7.13.0",
-    "@sentry/tracing": "7.13.0",
+    "@sentry-internal/eslint-config-sdk": "7.15.0",
+    "@sentry-internal/typescript": "7.15.0",
+    "@sentry/tracing": "7.15.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index 0cf890ae..2efc7966 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -1,5 +1,4 @@
-import { getCurrentHub } from '@sentry/core';
-import { makeSession, updateSession } from '@sentry/hub';
+import { getCurrentHub, makeSession, updateSession } from '@sentry/core';
 import { flush, NodeClient } from '@sentry/node';
 import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';
 import { logger } from '@sentry/utils';
diff --git a/yarn.lock b/yarn.lock
index 3c5fff4b..d674b541 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -100,13 +100,13 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@sentry-internal/eslint-config-sdk@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.13.0.tgz#0aca52992a90ba52f30f655bd88f62990c8a19ae"
-  integrity sha512-l4HcT//w4Ubqc2PV58hJux6sf/NgMG5ahHUhC2LupJICpZPvFAp3lwSZkm/ejSElaX1LYGLW8giZqiix+ssVOQ==
+"@sentry-internal/eslint-config-sdk@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.15.0.tgz#7f33c6c39c720132d9816364d55751cd26ab34e4"
+  integrity sha512-ttLoetchz0NkRuv8xkab/NF3u67lwWidYAIr8dV0Gc/wuefLwGr/XWdHff1hadXk528/7ZJcnNVUAE9DeeWYvA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.13.0"
-    "@sentry-internal/typescript" "7.13.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.15.0"
+    "@sentry-internal/typescript" "7.15.0"
     "@typescript-eslint/eslint-plugin" "^3.9.0"
     "@typescript-eslint/parser" "^3.9.0"
     eslint-config-prettier "^6.11.0"
@@ -115,82 +115,81 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.13.0.tgz#ca7d97d3bbd618ad44293490c387fc86f3db5e45"
-  integrity sha512-ZKejUx7FLiOB+cY/3YbV1/TamMFm8IOE54dTK2e148MbBvefM1mNjI5gbUcBMDCVk3CR5PO/2SkeRMBcEZfw1A==
+"@sentry-internal/eslint-plugin-sdk@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.15.0.tgz#49dfa926033d70948aaf1f304e4d98d1f50d13b9"
+  integrity sha512-CYCf6i/kt5m49XKYNz5ocgRDGUSpQvImyT/qXvZGWnj4jKNeie4/k3abua2Dj765zZ1IpNscAuBudOG7rBTRlQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.13.0.tgz#86b7014859002eb5860e560fbc9d9c20e71d98d3"
-  integrity sha512-dAyNQR7a2GTMSOkGxWXRNWUmM/u8rhM1sY+d1817IXstTiLN2PFWVnpvyup32p5H7jasW/nuIDGjWjzZoY3/9Q==
+"@sentry-internal/typescript@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.15.0.tgz#72daf80ff94ab8ba4ae22c39dd3ab888d38b9229"
+  integrity sha512-Gjc2/w1+vxmZIwSXAZYcuT99BjjOPXhHlCscOXLlGhPx5qNhnIXZ52StlQbCfW0P6Qg6H2d4P/OYUGTcOXd7gQ==
 
-"@sentry/browser@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.13.0.tgz#883b8598c8a0c33af246242e7172e39306dc564a"
-  integrity sha512-WbgClHPYe8TKsdVVbuzd6alxwh3maFQNuljMkSTnYvPx2P+NT0wHljTs37D39FGfSmAwaqn7D/1ZHAtC+6mWxA==
+"@sentry/browser@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.15.0.tgz#1723dc8efcea9239d26072126755f61f6fb9448d"
+  integrity sha512-vZYr8L2JmniV8cns4yGOpX32moazz6tsllB1uv7XmmELW98sIuuugVFX0k6cBi89R8pyhdqULFCf9CL8CRguRg==
   dependencies:
-    "@sentry/core" "7.13.0"
-    "@sentry/types" "7.13.0"
-    "@sentry/utils" "7.13.0"
+    "@sentry/core" "7.15.0"
+    "@sentry/types" "7.15.0"
+    "@sentry/utils" "7.15.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.13.0.tgz#65597d71f8bfa1186f34009803e03ca9edb3adee"
-  integrity sha512-hB46fklmKrSDMEvZOF8qBHhys7PONBFyxQtbNDZUlv/kabs4gF3VEg1ftCaXnjx4lLNlsUl/ScFdM6194RvISg==
+"@sentry/core@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.15.0.tgz#983e08326afdb8ddb10494372cd22b3886d683c9"
+  integrity sha512-W8d44g04GShBn4Z9VBTUhf1T9LTMfzUnETEx237zzUucv0kkyj3LsWQsJapWchMbmwr1V/CdnNDN+lGDm8iXQA==
   dependencies:
-    "@sentry/hub" "7.13.0"
-    "@sentry/types" "7.13.0"
-    "@sentry/utils" "7.13.0"
+    "@sentry/types" "7.15.0"
+    "@sentry/utils" "7.15.0"
     tslib "^1.9.3"
 
-"@sentry/hub@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.13.0.tgz#752068e528cfb277ed154bc94e311cad50ef792e"
-  integrity sha512-88/GsD1BoyrBwRKJCmVHZtSH5rizOsImUHWEXc1AOa1aR8nanfn56JdAbd6tC55pA+nT4R4H4vN/PrUaomTbtg==
+"@sentry/hub@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.15.0.tgz#d4da91c15ab0a1ee2d70796bf7b2fda35f06837f"
+  integrity sha512-v15sSoYuKJ9+BmDUX6qxAnCDhlClmw6TY9/rcIYbP2XSxsGrJcPy6VPOw4E21/1zGXnKiW7KvBkPeYEjIx7fWA==
   dependencies:
-    "@sentry/types" "7.13.0"
-    "@sentry/utils" "7.13.0"
+    "@sentry/core" "7.15.0"
+    "@sentry/types" "7.15.0"
+    "@sentry/utils" "7.15.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.13.0.tgz#0e073b75d4cce684db006d93ef18f2de2cf2f60e"
-  integrity sha512-uP3bPAIRHPilnOEiYGQQDLaQphc/c7d87wm91bZrTJ+WPnMW4D/NmT7fna5zGGDQIr/KTdQ/LEpDeZOILbkCqQ==
+"@sentry/node@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.15.0.tgz#8784a747d9b933754b29bba954b22f0d54c3b614"
+  integrity sha512-gfyo6YTo4Sw5pdKWCzs7trqZpBm5D/ArR4vylQrQayfImiYyNY6yaOK1R7g4rM34MXUu91pfVJLUpXvjk/NsHw==
   dependencies:
-    "@sentry/core" "7.13.0"
-    "@sentry/hub" "7.13.0"
-    "@sentry/types" "7.13.0"
-    "@sentry/utils" "7.13.0"
+    "@sentry/core" "7.15.0"
+    "@sentry/types" "7.15.0"
+    "@sentry/utils" "7.15.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/tracing@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.13.0.tgz#521dc021dab78e37e29b0f90b01cb444337adfc4"
-  integrity sha512-/MKSd25rGv6Pc0FPBLXJifkfvSaYVPA8XUOLzVeDN0gl07h8AXli4qG9amTh/4Wb5h4dFpbcscOvW2VC+pxkIA==
+"@sentry/tracing@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.15.0.tgz#ea516957b2ed39f389c21132f433b6470d54b465"
+  integrity sha512-c0Y3+z6EWsc+EJsfBcRtc58ugkWYa6+6KTu3ceMkx2ZgZTCmRUuzAb7yodMt/gwezBsxzq706fnQivx1lQgzlQ==
   dependencies:
-    "@sentry/hub" "7.13.0"
-    "@sentry/types" "7.13.0"
-    "@sentry/utils" "7.13.0"
+    "@sentry/core" "7.15.0"
+    "@sentry/types" "7.15.0"
+    "@sentry/utils" "7.15.0"
     tslib "^1.9.3"
 
-"@sentry/types@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.13.0.tgz#398e33e5c92ea0ce91e2c86e3ab003fe00c471a2"
-  integrity sha512-ttckM1XaeyHRLMdr79wmGA5PFbTGx2jio9DCD/mkEpSfk6OGfqfC7gpwy7BNstDH/VKyQj/lDCJPnwvWqARMoQ==
+"@sentry/types@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.15.0.tgz#50c57c924993d4dd16b43172d310c66384d17463"
+  integrity sha512-MN9haDRh9ZOsTotoDTHu2BT3sT8Vs1F0alhizUpDyjN2YgBCqR6JV+AbAE1XNHwS2+5zbppch1PwJUVeE58URQ==
 
-"@sentry/utils@7.13.0":
-  version "7.13.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.13.0.tgz#0d47a9278806ece78ba3a83c7dbebce817462759"
-  integrity sha512-jnR85LgRLSk7IQe2OhKOPMY4fasJCNQNW0iCXsH+S2R1qnsF+N4ksNkQ+7JyyM9E7F03YpI2qd76bKY0VIn5iA==
+"@sentry/utils@7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.15.0.tgz#cda642a353a58fd6631979c1e5986788e6db6c43"
+  integrity sha512-akic22/6xa/RG5Mj7UN6pLc23VnX9zQlKM53L/q3yIr0juckSVthJiiFNdgdqrX03S1tHYlBgPeShKFFTHpkjA==
   dependencies:
-    "@sentry/types" "7.13.0"
+    "@sentry/types" "7.15.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From ceaf5746aabb6b39db9170701137677c46bde4c4 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 13 Oct 2022 12:02:30 +0200
Subject: [PATCH 030/239] test: New Electron versions (#573)

---
 test/e2e/versions.json |  2 +-
 yarn.lock              | 10 ----------
 2 files changed, 1 insertion(+), 11 deletions(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 272216cc..38a3f269 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.2","20.3.1","21.1.0"]
+["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.3","20.3.2","21.1.1"]
diff --git a/yarn.lock b/yarn.lock
index d674b541..2a170f11 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -146,16 +146,6 @@
     "@sentry/utils" "7.15.0"
     tslib "^1.9.3"
 
-"@sentry/hub@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.15.0.tgz#d4da91c15ab0a1ee2d70796bf7b2fda35f06837f"
-  integrity sha512-v15sSoYuKJ9+BmDUX6qxAnCDhlClmw6TY9/rcIYbP2XSxsGrJcPy6VPOw4E21/1zGXnKiW7KvBkPeYEjIx7fWA==
-  dependencies:
-    "@sentry/core" "7.15.0"
-    "@sentry/types" "7.15.0"
-    "@sentry/utils" "7.15.0"
-    tslib "^1.9.3"
-
 "@sentry/node@7.15.0":
   version "7.15.0"
   resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.15.0.tgz#8784a747d9b933754b29bba954b22f0d54c3b614"

From 3c7c1287a7a756bd77f17259b3f9347cf0e131bc Mon Sep 17 00:00:00 2001
From: anthony sottile <103459774+asottile-sentry@users.noreply.github.com>
Date: Thu, 13 Oct 2022 08:02:31 -0400
Subject: [PATCH 031/239] ref(ci): fix set-output / set-state deprecation
 (#574)

https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

Committed via https://github.com/asottile/all-repos
---
 .github/workflows/build.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ef4b97ec..53e7affe 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -32,7 +32,7 @@ jobs:
           path: |
             ${{ github.workspace }}/*.tgz
       - id: set-matrix
-        run: echo "::set-output name=matrix::$(node ./scripts/e2e-test-versions.js)"
+        run: echo "matrix=$(node ./scripts/e2e-test-versions.js)" >> "$GITHUB_OUTPUT"
     outputs:
       matrix: ${{ steps.set-matrix.outputs.matrix }}
 

From ffad61d621119eee8f6d42e361e393fcdb478905 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 13 Oct 2022 18:52:55 +0200
Subject: [PATCH 032/239] feat: Support passing JavaScript framework specific
 SDK init as second init parameter (#575)

---
 README.md                                       | 10 ++++++++++
 .../electron-react-boilerplate/package.json     |  1 +
 .../src/renderer/index.tsx                      |  5 +++--
 examples/electron-vite/index.html               |  5 ++---
 examples/electron-vite/package.json             |  7 +++++--
 examples/electron-vite/src/renderer/App.vue     | 10 ++++++++++
 examples/electron-vite/src/renderer/index.mjs   | 17 +++++++++++------
 examples/electron-vite/vite.config.renderer.js  |  2 ++
 src/renderer/sdk.ts                             | 10 ++++++++--
 test/e2e/recipe/index.ts                        |  8 +++++---
 10 files changed, 57 insertions(+), 18 deletions(-)
 create mode 100644 examples/electron-vite/src/renderer/App.vue

diff --git a/README.md b/README.md
index 8e6f8c2c..0ac5be5f 100644
--- a/README.md
+++ b/README.md
@@ -46,6 +46,16 @@ import { init } from '@sentry/electron/main';
 import { init } from '@sentry/electron/renderer';
 ```
 
+If you are using a framework specific Sentry SDK, you can pass that `init` function as the second parameter in the
+renderer and the two SDKs functionalities will be combined:
+```javascript
+import { init } from '@sentry/electron/renderer';
+import { init as reactInit } from '@sentry/react';
+
+init({ /* config */ }, reactInit);
+
+```
+
 To set context information or send manual events, use the exported functions of `@sentry/electron`. Note that these
 functions will not perform any action before you have called `init()`:
 
diff --git a/examples/electron-react-boilerplate/package.json b/examples/electron-react-boilerplate/package.json
index 961c0cd3..b6787de6 100644
--- a/examples/electron-react-boilerplate/package.json
+++ b/examples/electron-react-boilerplate/package.json
@@ -58,6 +58,7 @@
   },
   "dependencies": {
     "@sentry/electron": "^3.0.5",
+    "@sentry/react": "7.15.0",
     "electron-debug": "^3.2.0",
     "electron-log": "^4.4.6",
     "electron-updater": "^4.6.5",
diff --git a/examples/electron-react-boilerplate/src/renderer/index.tsx b/examples/electron-react-boilerplate/src/renderer/index.tsx
index ce76b4cc..0ce9d632 100644
--- a/examples/electron-react-boilerplate/src/renderer/index.tsx
+++ b/examples/electron-react-boilerplate/src/renderer/index.tsx
@@ -1,8 +1,9 @@
 import { render } from 'react-dom';
 import App from './App';
-import * as Sentry from '@sentry/electron/renderer';
+import { init } from '@sentry/electron/renderer';
+import { init as reactInit } from '@sentry/react';
 
-Sentry.init();
+init({ debug: true }, reactInit);
 
 setTimeout(() => {
   throw new Error('Some renderer error');
diff --git a/examples/electron-vite/index.html b/examples/electron-vite/index.html
index ddd4aceb..a34faf99 100644
--- a/examples/electron-vite/index.html
+++ b/examples/electron-vite/index.html
@@ -5,8 +5,7 @@
     <title>Hello World!</title>
   </head>
   <body>
-    <h1>💖 Hello World!</h1>
-    <p>Welcome to your Electron application.</p>
-    <script type="module" src="./src/renderer/index.mjs"></script>
+    <div id="app"></div>
+    <script type="module" src="/src/renderer/index.mjs"></script>
   </body>
 </html>
diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json
index be39b2ab..23af13c4 100644
--- a/examples/electron-vite/package.json
+++ b/examples/electron-vite/package.json
@@ -9,10 +9,13 @@
   },
   "dependencies": {
     "electron-squirrel-startup": "^1.0.0",
-    "@sentry/electron": "3.0.0"
+    "@sentry/electron": "3.0.0",
+    "@sentry/vue": "7.15.0",
+    "vue": "^3.2.40"
   },
   "devDependencies": {
-    "vite": "^2.7.10",
+    "@vitejs/plugin-vue": "^3.1.2",
+    "vite": "^3.1.8",
     "electron": "13.1.9"
   }
 }
diff --git a/examples/electron-vite/src/renderer/App.vue b/examples/electron-vite/src/renderer/App.vue
new file mode 100644
index 00000000..95ea8ee6
--- /dev/null
+++ b/examples/electron-vite/src/renderer/App.vue
@@ -0,0 +1,10 @@
+<script setup>
+setTimeout(() => {
+  throw new Error('Some renderer error');
+}, 500);
+</script>
+
+<template>
+  <h1>💖 Hello World!</h1>
+  <p>Welcome to your Electron application.</p>
+</template>
diff --git a/examples/electron-vite/src/renderer/index.mjs b/examples/electron-vite/src/renderer/index.mjs
index a9086d1d..ec9fdee6 100644
--- a/examples/electron-vite/src/renderer/index.mjs
+++ b/examples/electron-vite/src/renderer/index.mjs
@@ -1,9 +1,14 @@
+import { createApp } from 'vue';
+import App from './App.vue';
 import { init } from '@sentry/electron';
+import { init as initVue } from '@sentry/vue';
 
-init({
-  debug: true,
-});
+init(
+  {
+    debug: true,
+  },
+  initVue,
+);
 
-setTimeout(() => {
-  throw new Error('Some renderer error');
-}, 500);
+const app = createApp(App);
+app.mount('#app');
diff --git a/examples/electron-vite/vite.config.renderer.js b/examples/electron-vite/vite.config.renderer.js
index faea6a09..14b8eb38 100644
--- a/examples/electron-vite/vite.config.renderer.js
+++ b/examples/electron-vite/vite.config.renderer.js
@@ -1,4 +1,5 @@
 import { join } from 'path';
+import vue from '@vitejs/plugin-vue';
 
 const PACKAGE_ROOT = __dirname;
 
@@ -16,6 +17,7 @@ const config = {
       strict: true,
     },
   },
+  plugins: [vue()],
   build: {
     sourcemap: true,
     target: `chrome61`,
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index e146769d..752877ad 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -14,8 +14,14 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 
 /**
  * Initialize Sentry in the Electron renderer process
+ * @param options SDK options
+ * @param originalInit Optional init function for a specific framework SDK
+ * @returns
  */
-export function init(options: BrowserOptions = {}): void {
+export function init<O extends BrowserOptions>(
+  options: BrowserOptions & O = {} as BrowserOptions & O,
+  originalInit: (options: O) => void = browserInit,
+): void {
   ensureProcess('renderer');
 
   // Ensure the browser SDK is only init'ed once.
@@ -53,5 +59,5 @@ If init has been called in the preload and contextIsolation is disabled, is not
   // We only handle initialScope in the main process otherwise it can cause race conditions over IPC
   delete options.initialScope;
 
-  browserInit(options);
+  originalInit(options);
 }
diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index 0f76139e..59a16f93 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -15,7 +15,7 @@ import { parseRecipe, TestRecipe } from './parser';
 export * from './normalize';
 
 const SENTRY_KEY = '37f8a2ee37c0409d8970bc7559c7c7e4';
-const TRACING_VERSION = require('../../../package.json').devDependencies['@sentry/tracing'];
+const JS_VERSION = require('../../../package.json').dependencies['@sentry/core'];
 
 const log = createLogger('Recipe Runner');
 
@@ -121,8 +121,10 @@ export class RecipeRunner {
             /"@sentry\/electron": ".*"/,
             `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`,
           )
-          // We replace the @sentry/tracing dependency version to match that of @sentry/electron
-          .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${TRACING_VERSION}"`);
+          // We replace the Sentry JavaScript dependency versions to match that of @sentry/electron
+          .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${JS_VERSION}"`)
+          .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`)
+          .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`);
       }
 
       writeFileSync(path, content);

From c7c0dd63e1c074b8bc5863f9fd023d1ddcdff8e4 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 13 Oct 2022 22:16:31 +0200
Subject: [PATCH 033/239] fix: Include sentry_key in IPC Ping URL so it does
 not create breadcrumbs (#576)

---
 src/renderer/ipc.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts
index 6daa699b..f74af6b0 100644
--- a/src/renderer/ipc.ts
+++ b/src/renderer/ipc.ts
@@ -13,7 +13,7 @@ function getImplementation(): IPCInterface {
 
   logger.log('IPC was not configured in preload script, falling back to custom protocol and fetch');
 
-  fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}`).catch(() =>
+  fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}/sentry_key`).catch(() =>
     console.error(`Sentry SDK failed to establish connection with the Electron main process.
  - Ensure you have initialized the SDK in the main process
  - If your renderers use custom sessions, be sure to set 'getSessions' in the main process options

From 39130bf6ba9dc60b32bc9233a60570a02a2487ef Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 14 Oct 2022 13:47:12 +0200
Subject: [PATCH 034/239] chore: Update changelog (#577)

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 77608318..f875cccc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 4.1.0
+
+- feat: Support passing JavaScript framework specific SDK init as second init parameter (#575)
+- feat: Update JavaScript SDKs to 7.15.0 (#572)
+- fix: Include `sentry_key` in IPC Ping URL so it does not create breadcrumbs (#576)
+
 ## 4.0.3
 
 - fix: `ElectronMainOptions` type should be a union with `NodeOptions`

From bc30894794a6a65ead2a8c729d43b941d18332e0 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Fri, 14 Oct 2022 11:47:57 +0000
Subject: [PATCH 035/239] release: 4.1.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 0b71277f..67e8ad44 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.0.3",
+  "version": "4.1.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 35e739b3069b1b4ee1c896fe2cc53f2e604b7fa3 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Sat, 22 Oct 2022 10:16:05 +0200
Subject: [PATCH 036/239] Update to 7.16 (#579)

---
 package.json |  16 ++++-----
 yarn.lock    | 100 +++++++++++++++++++++++++--------------------------
 2 files changed, 58 insertions(+), 58 deletions(-)

diff --git a/package.json b/package.json
index 67e8ad44..13cc34d8 100644
--- a/package.json
+++ b/package.json
@@ -57,18 +57,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.15.0",
-    "@sentry/core": "7.15.0",
-    "@sentry/node": "7.15.0",
-    "@sentry/types": "7.15.0",
-    "@sentry/utils": "7.15.0",
+    "@sentry/browser": "7.16.0",
+    "@sentry/core": "7.16.0",
+    "@sentry/node": "7.16.0",
+    "@sentry/types": "7.16.0",
+    "@sentry/utils": "7.16.0",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.15.0",
-    "@sentry-internal/typescript": "7.15.0",
-    "@sentry/tracing": "7.15.0",
+    "@sentry-internal/eslint-config-sdk": "7.16.0",
+    "@sentry-internal/typescript": "7.16.0",
+    "@sentry/tracing": "7.16.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/yarn.lock b/yarn.lock
index 2a170f11..4d4c873e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -100,13 +100,13 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@sentry-internal/eslint-config-sdk@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.15.0.tgz#7f33c6c39c720132d9816364d55751cd26ab34e4"
-  integrity sha512-ttLoetchz0NkRuv8xkab/NF3u67lwWidYAIr8dV0Gc/wuefLwGr/XWdHff1hadXk528/7ZJcnNVUAE9DeeWYvA==
+"@sentry-internal/eslint-config-sdk@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.16.0.tgz#a626e2d248c8a079adc7e0855215b372e5294f65"
+  integrity sha512-rFbHI6RlO0Y1vwxtvRW/KyOiYBdT3kyKVIf4sXJxUc0IJ6ETmFXjGNRerWKUg3AF7m5QfHNsKQhHMKXhsCGPog==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.15.0"
-    "@sentry-internal/typescript" "7.15.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.16.0"
+    "@sentry-internal/typescript" "7.16.0"
     "@typescript-eslint/eslint-plugin" "^3.9.0"
     "@typescript-eslint/parser" "^3.9.0"
     eslint-config-prettier "^6.11.0"
@@ -115,71 +115,71 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.15.0.tgz#49dfa926033d70948aaf1f304e4d98d1f50d13b9"
-  integrity sha512-CYCf6i/kt5m49XKYNz5ocgRDGUSpQvImyT/qXvZGWnj4jKNeie4/k3abua2Dj765zZ1IpNscAuBudOG7rBTRlQ==
+"@sentry-internal/eslint-plugin-sdk@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.16.0.tgz#8675577a2781fae3cfac918d95fcd1ac731c8350"
+  integrity sha512-NlNZs8JlMA9wK2SaTrbznqk9P8P8yM0oj/HI7CnDJFuBStfbdFLuf025ejnSLXCfdPNRnHxKsHkq78jXyyA+Kg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.15.0.tgz#72daf80ff94ab8ba4ae22c39dd3ab888d38b9229"
-  integrity sha512-Gjc2/w1+vxmZIwSXAZYcuT99BjjOPXhHlCscOXLlGhPx5qNhnIXZ52StlQbCfW0P6Qg6H2d4P/OYUGTcOXd7gQ==
+"@sentry-internal/typescript@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.16.0.tgz#a37c15649ed9d36d0e3ea0e1f622bb157308d5ce"
+  integrity sha512-cudpmUkvKmJNiCud5z/J+zbPDaulwClG/wLeK/+tFKz+qI5zrFWP9FGD4lTvL2wRyz8eQ4qTXtdaFK2RkxU/7A==
 
-"@sentry/browser@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.15.0.tgz#1723dc8efcea9239d26072126755f61f6fb9448d"
-  integrity sha512-vZYr8L2JmniV8cns4yGOpX32moazz6tsllB1uv7XmmELW98sIuuugVFX0k6cBi89R8pyhdqULFCf9CL8CRguRg==
+"@sentry/browser@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.16.0.tgz#afd2bac91857d2359272a0d9d2b1ee5ca7d69828"
+  integrity sha512-tJ063zvoF8Raw7mzQEXupOFPSN6v36WIbsDVGeFdToPCwViaBuATaxvWCrudGzsnBkMyItmTLJkzn9SEIXUOiw==
   dependencies:
-    "@sentry/core" "7.15.0"
-    "@sentry/types" "7.15.0"
-    "@sentry/utils" "7.15.0"
+    "@sentry/core" "7.16.0"
+    "@sentry/types" "7.16.0"
+    "@sentry/utils" "7.16.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.15.0.tgz#983e08326afdb8ddb10494372cd22b3886d683c9"
-  integrity sha512-W8d44g04GShBn4Z9VBTUhf1T9LTMfzUnETEx237zzUucv0kkyj3LsWQsJapWchMbmwr1V/CdnNDN+lGDm8iXQA==
+"@sentry/core@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.16.0.tgz#60f9b54ef2ec524176b329e1d15be39c36da5953"
+  integrity sha512-vq6H1b/IPTvzDD9coQ3wIudvSjkAYuUlXb1dv69dRlq4v3st9dcKBps1Zf0lQ1i4TVlDLoe1iGMmNFglMF1Q5w==
   dependencies:
-    "@sentry/types" "7.15.0"
-    "@sentry/utils" "7.15.0"
+    "@sentry/types" "7.16.0"
+    "@sentry/utils" "7.16.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.15.0.tgz#8784a747d9b933754b29bba954b22f0d54c3b614"
-  integrity sha512-gfyo6YTo4Sw5pdKWCzs7trqZpBm5D/ArR4vylQrQayfImiYyNY6yaOK1R7g4rM34MXUu91pfVJLUpXvjk/NsHw==
+"@sentry/node@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.16.0.tgz#f049e243169ec4d6058d5c0fff08104509f5ba9a"
+  integrity sha512-OC0TO6UTetv8IsX3zNhdeui7YVIQCnhkbfi+CMrB6YsHaMP2A9qH5gNyu/hKbaY9+4xci7e4rxyRmI65aKS9ow==
   dependencies:
-    "@sentry/core" "7.15.0"
-    "@sentry/types" "7.15.0"
-    "@sentry/utils" "7.15.0"
+    "@sentry/core" "7.16.0"
+    "@sentry/types" "7.16.0"
+    "@sentry/utils" "7.16.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/tracing@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.15.0.tgz#ea516957b2ed39f389c21132f433b6470d54b465"
-  integrity sha512-c0Y3+z6EWsc+EJsfBcRtc58ugkWYa6+6KTu3ceMkx2ZgZTCmRUuzAb7yodMt/gwezBsxzq706fnQivx1lQgzlQ==
+"@sentry/tracing@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.16.0.tgz#823b84abf0df08ecd16669547b4281e3c7a96ac9"
+  integrity sha512-8a9bViUY7oS35msBMouxkgz5OGd9NGutuKF7SQ8hPZwTcQPOxOwPyHccykgr56k6OmaDjGCLZMqZowaysJj+4g==
   dependencies:
-    "@sentry/core" "7.15.0"
-    "@sentry/types" "7.15.0"
-    "@sentry/utils" "7.15.0"
+    "@sentry/core" "7.16.0"
+    "@sentry/types" "7.16.0"
+    "@sentry/utils" "7.16.0"
     tslib "^1.9.3"
 
-"@sentry/types@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.15.0.tgz#50c57c924993d4dd16b43172d310c66384d17463"
-  integrity sha512-MN9haDRh9ZOsTotoDTHu2BT3sT8Vs1F0alhizUpDyjN2YgBCqR6JV+AbAE1XNHwS2+5zbppch1PwJUVeE58URQ==
+"@sentry/types@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.16.0.tgz#79c06ada153a84feb949fa49b1c9d15f91decd79"
+  integrity sha512-i6D+OK6d0l/k+VQvRp/Pt21WkDEgVBUIZq+sOkEZJczbcfexVdXKeXXoYTD2vYuFq8Yy28fzlsZaKI+NoH94yQ==
 
-"@sentry/utils@7.15.0":
-  version "7.15.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.15.0.tgz#cda642a353a58fd6631979c1e5986788e6db6c43"
-  integrity sha512-akic22/6xa/RG5Mj7UN6pLc23VnX9zQlKM53L/q3yIr0juckSVthJiiFNdgdqrX03S1tHYlBgPeShKFFTHpkjA==
+"@sentry/utils@7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.16.0.tgz#b832520c661d4435808969ee04814ff8e20497b1"
+  integrity sha512-3Zh1txg7IRp4kZAdG27YF7K6lD1IZyuAo9KjoPg1Xzqa4DOZyASJuEkbf+rK2a9T4HrtVHHXJUsNbKg8WM3VHg==
   dependencies:
-    "@sentry/types" "7.15.0"
+    "@sentry/types" "7.16.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From 15ac57fcc9b2816987ad72d05582ad504c3ddec5 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 1 Nov 2022 23:31:55 +0100
Subject: [PATCH 037/239] Use specific versions of forge as they're making
 breaking changes (#581)

---
 examples/{REAMDE.md => README.md}            | 0
 examples/electron-forge-webpack/package.json | 4 ++--
 examples/electron-forge/package.json         | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
 rename examples/{REAMDE.md => README.md} (100%)

diff --git a/examples/REAMDE.md b/examples/README.md
similarity index 100%
rename from examples/REAMDE.md
rename to examples/README.md
diff --git a/examples/electron-forge-webpack/package.json b/examples/electron-forge-webpack/package.json
index 59a56dde..86688199 100644
--- a/examples/electron-forge-webpack/package.json
+++ b/examples/electron-forge-webpack/package.json
@@ -28,8 +28,8 @@
     }
   },
   "devDependencies": {
-    "@electron-forge/cli": "^6.0.0-beta.63",
-    "@electron-forge/plugin-webpack": "^6.0.0-beta.63",
+    "@electron-forge/cli": "6.0.0-beta.63",
+    "@electron-forge/plugin-webpack": "6.0.0-beta.63",
     "@vercel/webpack-asset-relocator-loader": "1.6.0",
     "electron": "15.2.0",
     "node-loader": "^2.0.0"
diff --git a/examples/electron-forge/package.json b/examples/electron-forge/package.json
index 241c9c40..93f541df 100644
--- a/examples/electron-forge/package.json
+++ b/examples/electron-forge/package.json
@@ -10,7 +10,7 @@
     "@sentry/electron": "3.0.0"
   },
   "devDependencies": {
-    "@electron-forge/cli": "^6.0.0-beta.63",
+    "@electron-forge/cli": "6.0.0-beta.63",
     "electron": "13.1.9"
   }
 }
\ No newline at end of file

From f8c1e154ec2e28cb49cd2efca6867f2ce8546256 Mon Sep 17 00:00:00 2001
From: "Matt Gaunt-Seo @ Sentry.io"
 <112419115+mattgauntseo-sentry@users.noreply.github.com>
Date: Wed, 2 Nov 2022 10:04:04 -0700
Subject: [PATCH 038/239] ci: Update actions/upload-artifact to v3.1.1 (#582)

Committed via https://github.com/asottile/all-repos
---
 .github/workflows/build.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 53e7affe..781ad437 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -26,7 +26,7 @@ jobs:
       - name: Pack
         run: yarn pack
       - name: Archive Artifacts
-        uses: actions/upload-artifact@v2
+        uses: actions/upload-artifact@v3.1.1
         with:
           name: ${{ github.sha }}
           path: |

From dc1c8348a2371bd8ebb08c1a5d2a12473057c48e Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 3 Nov 2022 13:01:41 +0100
Subject: [PATCH 039/239] feat: Add additional options and queue status
 callback to offline transport (#580)

---
 src/main/transports/electron-offline-net.ts | 49 +++++++++++++++++++--
 src/main/transports/queue.ts                | 23 ++++++++--
 test/unit/persist-queue.test.ts             | 25 ++++++++---
 3 files changed, 84 insertions(+), 13 deletions(-)

diff --git a/src/main/transports/electron-offline-net.ts b/src/main/transports/electron-offline-net.ts
index 532b8ae6..3edea316 100644
--- a/src/main/transports/electron-offline-net.ts
+++ b/src/main/transports/electron-offline-net.ts
@@ -11,6 +11,28 @@ import { PersistedRequestQueue } from './queue';
 type BeforeSendResponse = 'send' | 'queue' | 'drop';
 
 export interface ElectronOfflineTransportOptions extends ElectronNetTransportOptions {
+  /**
+   * The maximum number of days to keep an event in the queue.
+   */
+  maxQueueAgeDays?: number;
+
+  /**
+   * The maximum number of events to keep in the queue.
+   */
+  maxQueueCount?: number;
+
+  /**
+   * Called every time the number of requests in the queue changes.
+   */
+  queuedLengthChanged?: (length: number) => void;
+
+  /**
+   * Called before attempting to send an event to Sentry.
+   *
+   * Return 'send' to attempt to send the event.
+   * Return 'queue' to queue and persist the event for sending later.
+   * Return 'drop' to drop the event.
+   */
   beforeSend?: (request: TransportRequest) => BeforeSendResponse | Promise<BeforeSendResponse>;
 }
 
@@ -36,16 +58,35 @@ function isRateLimited(result: TransportMakeRequestResponse): boolean {
  */
 export function makeElectronOfflineTransport(options: ElectronOfflineTransportOptions): Transport {
   const netMakeRequest = createElectronNetRequestExecutor(options.url, options.headers || {});
-  const queue: PersistedRequestQueue = new PersistedRequestQueue(join(sentryCachePath, 'queue'));
+  const queue: PersistedRequestQueue = new PersistedRequestQueue(
+    join(sentryCachePath, 'queue'),
+    options.maxQueueAgeDays,
+    options.maxQueueCount,
+  );
+
+  const beforeSend = options.beforeSend || defaultBeforeSend;
+
   let retryDelay: number = START_DELAY;
+  let lastQueueLength = -1;
+
+  function queueLengthChanged(queuedEvents: number): void {
+    if (options.queuedLengthChanged && queuedEvents !== lastQueueLength) {
+      lastQueueLength = queuedEvents;
+      options.queuedLengthChanged(queuedEvents);
+    }
+  }
 
   function flushQueue(): void {
     queue
       .pop()
       .then((found) => {
         if (found) {
+          // We have pendingCount plus found.request
+          queueLengthChanged(found.pendingCount + 1);
           logger.log('Found a request in the queue');
-          makeRequest(found).catch((e) => logger.error(e));
+          makeRequest(found.request).catch((e) => logger.error(e));
+        } else {
+          queueLengthChanged(0);
         }
       })
       .catch((e) => logger.error(e));
@@ -53,7 +94,7 @@ export function makeElectronOfflineTransport(options: ElectronOfflineTransportOp
 
   async function queueRequest(request: TransportRequest): Promise<TransportMakeRequestResponse> {
     logger.log('Queuing request');
-    await queue.add(request);
+    queueLengthChanged(await queue.add(request));
 
     setTimeout(() => {
       flushQueue();
@@ -71,7 +112,7 @@ export function makeElectronOfflineTransport(options: ElectronOfflineTransportOp
   }
 
   async function makeRequest(request: TransportRequest): Promise<TransportMakeRequestResponse> {
-    let action = (options.beforeSend || defaultBeforeSend)(request);
+    let action = beforeSend(request);
 
     if (action instanceof Promise) {
       action = await action;
diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts
index 9448281c..9f020fe8 100644
--- a/src/main/transports/queue.ts
+++ b/src/main/transports/queue.ts
@@ -15,6 +15,11 @@ interface PersistedRequest {
   type?: unknown;
 }
 
+interface PopResult {
+  request: QueuedTransportRequest;
+  pendingCount: number;
+}
+
 export interface QueuedTransportRequest extends TransportRequest {
   date?: Date;
 }
@@ -34,8 +39,9 @@ export class PersistedRequestQueue {
   ) {}
 
   /** Adds a request to the queue */
-  public async add(request: QueuedTransportRequest): Promise<void> {
+  public async add(request: QueuedTransportRequest): Promise<number> {
     const bodyPath = uuid4();
+    let queuedEvents = 0;
 
     await this._queue.update((queue) => {
       queue.push({
@@ -49,6 +55,8 @@ export class PersistedRequestQueue {
           void this._removeBody(removed.bodyPath);
         }
       }
+
+      queuedEvents = queue.length;
       return queue;
     });
 
@@ -57,11 +65,14 @@ export class PersistedRequestQueue {
     } catch (_) {
       //
     }
+
+    return queuedEvents;
   }
 
   /** Pops the oldest event from the queue */
-  public async pop(): Promise<QueuedTransportRequest | undefined> {
+  public async pop(): Promise<PopResult | undefined> {
     let found: PersistedRequest | undefined;
+    let pendingCount = 0;
     const cutOff = Date.now() - MILLISECONDS_PER_DAY * this._maxAgeDays;
 
     await this._queue.update((queue) => {
@@ -72,6 +83,7 @@ export class PersistedRequestQueue {
           void this._removeBody(found.bodyPath);
           found = undefined;
         } else {
+          pendingCount = queue.length;
           break;
         }
       }
@@ -84,8 +96,11 @@ export class PersistedRequestQueue {
         void this._removeBody(found.bodyPath);
 
         return {
-          body,
-          date: found.date || new Date(),
+          request: {
+            body,
+            date: found.date || new Date(),
+          },
+          pendingCount,
         };
       } catch (e) {
         logger.warn('Filed to read queued request body', e);
diff --git a/test/unit/persist-queue.test.ts b/test/unit/persist-queue.test.ts
index 19fab5ad..13cb9cc8 100644
--- a/test/unit/persist-queue.test.ts
+++ b/test/unit/persist-queue.test.ts
@@ -32,14 +32,29 @@ describe('PersistedRequestQueue', () => {
     const queue2 = new PersistedRequestQueue(tempDir.name);
     const popped = await queue2.pop();
     expect(popped).to.not.be.undefined;
-    expect(popped?.date).to.be.instanceOf(Date);
-    expect(popped?.body).to.not.be.undefined;
-    expect(popped?.body.toString()).to.equal('just a string');
+    expect(popped?.request?.date).to.be.instanceOf(Date);
+    expect(popped?.request?.body).to.not.be.undefined;
+    expect(popped?.request?.body.toString()).to.equal('just a string');
 
     await delay(1_000);
     await expectFilesInDirectory(tempDir.name, 1);
   });
 
+  it('Correctly returns pending request count', async () => {
+    const queue = new PersistedRequestQueue(tempDir.name);
+
+    const r1 = await queue.add({ body: 'just a string' });
+    expect(r1).to.equal(1);
+    const r2 = await queue.add({ body: 'just another string' });
+    expect(r2).to.equal(2);
+
+    const r3 = await queue.pop();
+    expect(r3?.pendingCount).to.equal(1);
+
+    const r4 = await queue.pop();
+    expect(r4?.pendingCount).to.equal(0);
+  });
+
   it('Drops requests when full', async () => {
     const queue = new PersistedRequestQueue(tempDir.name, 30, 5);
 
@@ -55,9 +70,9 @@ describe('PersistedRequestQueue', () => {
     await expectFilesInDirectory(tempDir.name, 6);
 
     const popped: QueuedTransportRequest[] = [];
-    let pop: QueuedTransportRequest | undefined;
+    let pop: { request: QueuedTransportRequest } | undefined;
     while ((pop = await queue.pop())) {
-      popped.push(pop);
+      popped.push(pop.request);
     }
 
     expect(popped.length).to.equal(5);

From cd7ffcbcf816f4b8f03bbfe6f50faef12860d030 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 9 Nov 2022 15:23:48 +0100
Subject: [PATCH 040/239] fix: Change parameter name to give more useful
 TypeScript error on SDK version mismatch (#584)

---
 scripts/update-version.js | 18 ++++++++++++++----
 src/renderer/sdk.ts       |  3 ++-
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/scripts/update-version.js b/scripts/update-version.js
index 2e10f987..1f65ae11 100644
--- a/scripts/update-version.js
+++ b/scripts/update-version.js
@@ -1,6 +1,16 @@
 const { join } = require('path');
-const { writeFileSync } = require('fs');
+const { readFileSync, writeFileSync } = require('fs');
 
-const path = join(__dirname, '../src/main/version.ts');
-const version = require('../package.json').version;
-writeFileSync(path, `export const SDK_VERSION = '${version}';\n`);
+const packageJson = require('../package.json');
+
+// SDK_VERSION to 'src/main/version.ts'
+const versionPath = join(__dirname, '../src/main/version.ts');
+writeFileSync(versionPath, `export const SDK_VERSION = '${packageJson.version}';\n`);
+
+// Write @sentry/core version into options variable name so TypeScript error includes useful hint
+const coreVersion = packageJson.dependencies['@sentry/core'];
+const coreVersionVar = coreVersion.replace(/\./g, '_');
+const rendererSdkPath = join(__dirname, '../src/renderer/sdk.ts');
+let rendererSdk = readFileSync(rendererSdkPath, { encoding: 'utf8' });
+rendererSdk = rendererSdk.replace(/version_v\d+_\d+_\d+/, `version_v${coreVersionVar}`);
+writeFileSync(rendererSdkPath, rendererSdk);
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 752877ad..97e46fcf 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -20,7 +20,8 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
  */
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
-  originalInit: (options: O) => void = browserInit,
+  // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_16_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 

From de9bf658df96db22ee853f53c7593b4de37a2a23 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 15 Nov 2022 13:08:58 +0100
Subject: [PATCH 041/239] fix: Attempt to send minidumps for all `process-gone`
 reasons (#586)

---
 src/main/integrations/sentry-minidump/index.ts | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 2a27a279..8485a5f8 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -6,7 +6,7 @@ import { app, crashReporter } from 'electron';
 
 import { mergeEvents } from '../../../common';
 import { getEventDefaults } from '../../context';
-import { CRASH_REASONS, onChildProcessGone, onRendererProcessGone } from '../../electron-normalize';
+import { EXIT_REASONS, onChildProcessGone, onRendererProcessGone } from '../../electron-normalize';
 import { sentryCachePath } from '../../fs';
 import { getRendererProperties, trackRendererProperties } from '../../renderers';
 import { ElectronMainOptions } from '../../sdk';
@@ -58,8 +58,8 @@ export class SentryMinidump implements Integration {
 
     this._minidumpLoader = getMinidumpLoader();
 
-    onRendererProcessGone(CRASH_REASONS, (contents, details) => this._sendRendererCrash(options, contents, details));
-    onChildProcessGone(CRASH_REASONS, (details) => this._sendChildProcessCrash(options, details));
+    onRendererProcessGone(EXIT_REASONS, (contents, details) => this._sendRendererCrash(options, contents, details));
+    onChildProcessGone(EXIT_REASONS, (details) => this._sendChildProcessCrash(options, details));
 
     // Start to submit recent minidump crashes. This will load breadcrumbs and
     // context information that was cached on disk prior to the crash.
@@ -121,6 +121,7 @@ export class SentryMinidump implements Integration {
       tags: {
         'event.environment': 'native',
         'event.process': crashedProcess,
+        'exit.reason': details.reason,
         event_type: 'native',
       },
     });
@@ -153,6 +154,7 @@ export class SentryMinidump implements Integration {
       tags: {
         'event.environment': 'native',
         'event.process': details.type,
+        'exit.reason': details.reason,
         event_type: 'native',
       },
     });

From b3cf00023db4abd958cf5b6bae4e1a5b11573d5f Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 15 Nov 2022 13:24:48 +0100
Subject: [PATCH 042/239] Update changelog (#587)

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index f875cccc..bc81f91c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 4.1.1
+
+- feat: Add additional options and queue status callback to offline transport (#580)
+- fix: Change parameter name to give more useful TypeScript error on SDK version mismatch (#584)
+- fix: Attempt to send minidumps for all process gone reasons (#586)
+
 ## 4.1.0
 
 - feat: Support passing JavaScript framework specific SDK init as second init parameter (#575)

From e2e4e1f28491abcdef04a798134eb7b764aa0a72 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 15 Nov 2022 12:25:28 +0000
Subject: [PATCH 043/239] release: 4.1.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 13cc34d8..a8baa692 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.1.0",
+  "version": "4.1.1",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 08a526d177bfcaf97368e64f3811cd5acdb3b5c6 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 21 Nov 2022 11:23:59 +0100
Subject: [PATCH 044/239] fix: Ensure the scope writes do not beat the initial
 async scope read (#593)

---
 src/main/integrations/sentry-minidump/index.ts    | 8 ++++++--
 test/e2e/test-apps/native-sentry/main/event.json  | 3 ++-
 test/e2e/test-apps/native-sentry/main/src/main.js | 8 ++++++--
 3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 8485a5f8..ca4367c8 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -172,14 +172,18 @@ export class SentryMinidump implements Integration {
   private _setupScopeListener(): void {
     const hubScope = getCurrentHub().getScope();
     if (hubScope) {
-      hubScope.addScopeListener(async (updatedScope) => {
+      hubScope.addScopeListener((updatedScope) => {
         const scope = Scope.clone(updatedScope);
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         (scope as any)._eventProcessors = [];
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         (scope as any)._scopeListeners = [];
 
-        await this._scopeStore?.set(scope);
+        // Since the initial scope read is async, we need to ensure that any writes do not beat that
+        // https://github.com/getsentry/sentry-electron/issues/585
+        setImmediate(() => {
+          void this._scopeStore?.set(scope);
+        });
       });
     }
   }
diff --git a/test/e2e/test-apps/native-sentry/main/event.json b/test/e2e/test-apps/native-sentry/main/event.json
index edde8c15..d5ec4f9d 100644
--- a/test/e2e/test-apps/native-sentry/main/event.json
+++ b/test/e2e/test-apps/native-sentry/main/event.json
@@ -65,7 +65,8 @@
       "event.environment": "native",
       "event.origin": "electron",
       "event.process": "browser",
-      "event_type": "native"
+      "event_type": "native",
+      "app-run": "first"
     }
   },
   "attachments": [ { "attachment_type": "event.minidump" } ]
diff --git a/test/e2e/test-apps/native-sentry/main/src/main.js b/test/e2e/test-apps/native-sentry/main/src/main.js
index 7d93bf30..ae6a4a7a 100644
--- a/test/e2e/test-apps/native-sentry/main/src/main.js
+++ b/test/e2e/test-apps/native-sentry/main/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init } = require('@sentry/electron');
+const { init, configureScope } = require('@sentry/electron');
 
 init({
   dsn: '__DSN__',
@@ -10,6 +10,10 @@ init({
   onFatalError: () => {},
 });
 
+configureScope((scope) => {
+  scope.setTag('app-run', process.env.APP_FIRST_RUN ? 'first' : 'second');
+});
+
 app.on('ready', () => {
   const mainWindow = new BrowserWindow({
     show: false,
@@ -28,4 +32,4 @@ app.on('ready', () => {
       process.crash();
     }, 500);
   }
-});
\ No newline at end of file
+});

From 17b8e562216dc5a3d42fd3303fc42f48d40451ff Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 21 Nov 2022 14:03:17 +0100
Subject: [PATCH 045/239] fix: Also check crashpad `pending` directory on macOS
 when renderer process exits (#592)

---
 .../sentry-minidump/minidump-loader.ts        | 28 +++++--
 .../renderer-force-crash/event.json           | 76 +++++++++++++++++++
 .../renderer-force-crash/package.json         |  8 ++
 .../renderer-force-crash/recipe.yml           |  4 +
 .../renderer-force-crash/src/index.html       | 15 ++++
 .../renderer-force-crash/src/main.js          | 29 +++++++
 6 files changed, 154 insertions(+), 6 deletions(-)
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/event.json
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/package.json
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/recipe.yml
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/src/index.html
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/src/main.js

diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts
index 2e12b859..426e23e5 100644
--- a/src/main/integrations/sentry-minidump/minidump-loader.ts
+++ b/src/main/integrations/sentry-minidump/minidump-loader.ts
@@ -86,20 +86,36 @@ async function deleteCrashpadMetadataFile(crashesDirectory: string, waitMs: numb
   }
 }
 
+async function readDirsAsync(paths: string[]): Promise<string[]> {
+  const found: string[] = [];
+  for (const path of paths) {
+    try {
+      const files = await readDirAsync(path);
+      found.push(...files.map((file) => join(path, file)));
+    } catch (_) {
+      //
+    }
+  }
+  return found;
+}
+
 function crashpadMinidumpLoader(): MinidumpLoader {
   const crashesDirectory: string = getCrashesDirectory();
   const crashpadSubDirectory = process.platform === 'win32' ? 'reports' : 'completed';
 
+  const dumpDirectories = [join(crashesDirectory, crashpadSubDirectory)];
+
+  if (process.platform === 'darwin') {
+    dumpDirectories.push(join(crashesDirectory, 'pending'));
+  }
+
   return createMinidumpLoader(async () => {
     await deleteCrashpadMetadataFile(crashesDirectory).catch((error) => logger.error(error));
 
-    const dumpDirectory = join(crashesDirectory, crashpadSubDirectory);
-
-    return (await readDirAsync(dumpDirectory))
+    const files = await readDirsAsync(dumpDirectories);
+    return files
       .filter((file) => file.endsWith('.dmp'))
-      .map((file) => {
-        const path = join(dumpDirectory, file);
-
+      .map((path) => {
         return {
           path,
           load: () => readFileAsync(path),
diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/event.json b/test/e2e/test-apps/native-sentry/renderer-force-crash/event.json
new file mode 100644
index 00000000..a760d30a
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/event.json
@@ -0,0 +1,76 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "native-sentry-renderer-force-crash",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution": "{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "release": "native-sentry-renderer-force-crash@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "event_id": "{{id}}",
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "tags": {
+      "event.environment": "native",
+      "event.origin": "electron",
+      "event.process": "renderer",
+      "event_type": "native"
+    }
+  },
+  "attachments": [
+    {
+      "attachment_type": "event.minidump"
+    }
+  ]
+}
diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/package.json b/test/e2e/test-apps/native-sentry/renderer-force-crash/package.json
new file mode 100644
index 00000000..af69a6e7
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "native-sentry-renderer-force-crash",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/recipe.yml b/test/e2e/test-apps/native-sentry/renderer-force-crash/recipe.yml
new file mode 100644
index 00000000..3ab001f6
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/recipe.yml
@@ -0,0 +1,4 @@
+description: Native Renderer forcefullyCrashRenderer
+category: Native (Sentry Uploader)
+command: yarn
+condition: usesCrashpad && version.major >= 12
diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/src/index.html b/test/e2e/test-apps/native-sentry/renderer-force-crash/src/index.html
new file mode 100644
index 00000000..b43f77af
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/src/index.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+
+      init({
+        debug: true,
+      });
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/src/main.js b/test/e2e/test-apps/native-sentry/renderer-force-crash/src/main.js
new file mode 100644
index 00000000..f75fd9c5
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/src/main.js
@@ -0,0 +1,29 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron');
+
+app.commandLine.appendSwitch('enable-crashpad');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+
+  setTimeout(() => {
+    mainWindow.webContents.forcefullyCrashRenderer();
+  }, 1000);
+});

From 55393b3788307acf5e7b3b5fa2409f339f577373 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 21 Nov 2022 14:49:28 +0100
Subject: [PATCH 046/239] Update changelog (#595)

---
 CHANGELOG.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc81f91c..d06df8a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## Unreleased
 
+## 4.1.2
+
+- fix: Ensure the scope writes do not beat the initial async scope read (#593)
+- fix: Also check crashpad pending directory on macOS when renderer process exits (#592)
+
 ## 4.1.1
 
 - feat: Add additional options and queue status callback to offline transport (#580)

From 7d30fd32f4a0f9aeab4076def6f394729d35db38 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Mon, 21 Nov 2022 13:50:53 +0000
Subject: [PATCH 047/239] release: 4.1.2

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index a8baa692..9aa95011 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.1.1",
+  "version": "4.1.2",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 3cbc85378c7d4af5ec8cbc1854dbbb1e35ed25f1 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 1 Dec 2022 15:30:05 +0100
Subject: [PATCH 048/239] test: Add test to ensure window titles don't end up
 in breadcrumbs when disabled (#594)

---
 test/e2e/recipe/index.ts                      | 18 ++++++++--
 test/e2e/recipe/parser.ts                     | 12 +++++--
 .../test-apps/other/window-titles/events.ts   | 24 ++++++++++++++
 .../other/window-titles/package.json          |  9 +++++
 .../test-apps/other/window-titles/recipe.yml  |  2 ++
 .../other/window-titles/src/index.html        | 19 +++++++++++
 .../test-apps/other/window-titles/src/main.js | 33 +++++++++++++++++++
 7 files changed, 112 insertions(+), 5 deletions(-)
 create mode 100644 test/e2e/test-apps/other/window-titles/events.ts
 create mode 100644 test/e2e/test-apps/other/window-titles/package.json
 create mode 100644 test/e2e/test-apps/other/window-titles/recipe.yml
 create mode 100644 test/e2e/test-apps/other/window-titles/src/index.html
 create mode 100644 test/e2e/test-apps/other/window-titles/src/main.js

diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index 59a16f93..5f6419a7 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -1,3 +1,4 @@
+import { Event } from '@sentry/types';
 import { expect } from 'chai';
 import { spawnSync } from 'child_process';
 import { mkdirSync, writeFileSync } from 'fs';
@@ -6,7 +7,7 @@ import { dirname, join } from 'path';
 import { SDK_VERSION } from '../../../src/main/version';
 import { delay } from '../../helpers';
 import { TestContext } from '../context';
-import { ERROR_ID, RATE_LIMIT_ID, SERVER_PORT, TestServer } from '../server';
+import { ERROR_ID, RATE_LIMIT_ID, SERVER_PORT, TestServer, TestServerEvent } from '../server';
 import { createLogger, getTestLog, walkSync } from '../utils';
 import { evaluateCondition } from './eval';
 import { eventIsSession, normalize } from './normalize';
@@ -17,6 +18,8 @@ export * from './normalize';
 const SENTRY_KEY = '37f8a2ee37c0409d8970bc7559c7c7e4';
 const JS_VERSION = require('../../../package.json').dependencies['@sentry/core'];
 
+type CustomScript = { execute(events: TestServerEvent<Event>[]): Promise<void> };
+
 const log = createLogger('Recipe Runner');
 
 function loadRecipes(rootDir: string, electronVersion: string): RecipeRunner[] {
@@ -175,9 +178,11 @@ export class RecipeRunner {
       await delay(2_000);
     }
 
-    await context.waitForEvents(testServer, expectedEvents.length);
+    const totalEvents = expectedEvents.length + (this._recipe.customScriptPath ? 1 : 0);
+
+    await context.waitForEvents(testServer, totalEvents);
 
-    if (expectedEvents.length !== testServer.events.length) {
+    if (totalEvents !== testServer.events.length) {
       throw new Error(`Expected ${expectedEvents.length} events but server has ${testServer.events.length} events`);
     }
 
@@ -192,6 +197,13 @@ export class RecipeRunner {
       expect(log).to.include(this._recipe.metadata.expectedError);
     }
 
+    if (this._recipe.customScriptPath) {
+      log('Loading custom script', this._recipe.customScriptPath);
+      const script: CustomScript = await import(this._recipe.customScriptPath);
+      await script.execute(testServer.events as TestServerEvent<Event>[]);
+      return;
+    }
+
     for (const event of testServer.events) {
       event.data = normalize(event.data);
     }
diff --git a/test/e2e/recipe/parser.ts b/test/e2e/recipe/parser.ts
index e5963d5e..96235670 100644
--- a/test/e2e/recipe/parser.ts
+++ b/test/e2e/recipe/parser.ts
@@ -1,6 +1,6 @@
 import { Event, Session } from '@sentry/types';
-import { readFileSync } from 'fs';
-import { dirname, sep } from 'path';
+import { readdirSync, readFileSync } from 'fs';
+import { dirname, join, sep } from 'path';
 import YAML from 'yaml';
 
 import { TestServerEvent } from '../server';
@@ -25,6 +25,7 @@ export interface TestRecipe {
   metadata: TestMetadata;
   files: Record<string, string>;
   expectedEvents: ConditionalTestServerEvent[];
+  customScriptPath?: string;
 }
 
 function isEventOrSession(path: string): boolean {
@@ -37,6 +38,12 @@ function getEventsAndSessions(rootDir: string): ConditionalTestServerEvent[] {
     .map((path) => JSON.parse(readFileSync(path, { encoding: 'utf-8' })) as ConditionalTestServerEvent);
 }
 
+function getCustomScript(rootDir: string): string | undefined {
+  return readdirSync(rootDir)
+    .map((path) => join(rootDir, path))
+    .find((path) => path.endsWith('.ts'));
+}
+
 function getFiles(rootDir: string): Record<string, string> {
   return Array.from(walkSync(rootDir))
     .filter((path) => !isEventOrSession(path) && !path.endsWith('recipe.yml'))
@@ -56,5 +63,6 @@ export function parseRecipe(ymlPath: string): TestRecipe {
     metadata: YAML.parse(readFileSync(ymlPath, { encoding: 'utf8' })),
     files: getFiles(rootPath),
     expectedEvents: getEventsAndSessions(rootPath),
+    customScriptPath: getCustomScript(rootPath),
   };
 }
diff --git a/test/e2e/test-apps/other/window-titles/events.ts b/test/e2e/test-apps/other/window-titles/events.ts
new file mode 100644
index 00000000..f31d00da
--- /dev/null
+++ b/test/e2e/test-apps/other/window-titles/events.ts
@@ -0,0 +1,24 @@
+import { Event } from '@sentry/types';
+import { expect } from 'chai';
+
+import { TestServerEvent } from '../../../server';
+
+export async function execute(events: TestServerEvent<Event>[]): Promise<void> {
+  expect(events).to.have.lengthOf(1);
+
+  const event = events[0];
+
+  expect(event.data.breadcrumbs?.length).to.be.greaterThan(5);
+
+  let withData = 0;
+
+  for (const breadcrumb of event.data.breadcrumbs || []) {
+    if (breadcrumb?.data?.id) {
+      withData += 1;
+    }
+
+    expect(breadcrumb?.data?.title).to.be.undefined;
+  }
+
+  expect(withData).to.be.greaterThanOrEqual(2);
+}
diff --git a/test/e2e/test-apps/other/window-titles/package.json b/test/e2e/test-apps/other/window-titles/package.json
new file mode 100644
index 00000000..47fca2a9
--- /dev/null
+++ b/test/e2e/test-apps/other/window-titles/package.json
@@ -0,0 +1,9 @@
+{
+  "name": "window-titles",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "homepage": "https://github.com/getsentry/sentry-electron/pull/551",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/window-titles/recipe.yml b/test/e2e/test-apps/other/window-titles/recipe.yml
new file mode 100644
index 00000000..0f14c716
--- /dev/null
+++ b/test/e2e/test-apps/other/window-titles/recipe.yml
@@ -0,0 +1,2 @@
+description: Window titles are empty when disabled
+command: yarn
diff --git a/test/e2e/test-apps/other/window-titles/src/index.html b/test/e2e/test-apps/other/window-titles/src/index.html
new file mode 100644
index 00000000..79a9802f
--- /dev/null
+++ b/test/e2e/test-apps/other/window-titles/src/index.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+
+      init({
+        debug: true,
+      });
+
+      setInterval(() => {
+        document.title = `This is the new page title: ${Math.random()}`;
+      }, 10);
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/other/window-titles/src/main.js b/test/e2e/test-apps/other/window-titles/src/main.js
new file mode 100644
index 00000000..fa373743
--- /dev/null
+++ b/test/e2e/test-apps/other/window-titles/src/main.js
@@ -0,0 +1,33 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.webContents.on('dom-ready', () => {
+    setTimeout(() => {
+      mainWindow.minimize();
+
+      setTimeout(() => {
+        throw new Error('enough');
+      }, 500);
+    }, 500);
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+});

From a00130540f9bbd1bae9b78d00b754eb82cfdac49 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 1 Dec 2022 15:31:21 +0100
Subject: [PATCH 049/239] Fix electron version lookup (#598)

---
 package.json           |  2 +-
 test/e2e/versions.json |  2 +-
 yarn.lock              | 17 +++++++++++++----
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/package.json b/package.json
index 9aa95011..48378938 100644
--- a/package.json
+++ b/package.json
@@ -87,7 +87,7 @@
     "electron": "19.0.8",
     "@electron/get": "^1.13.0",
     "electron-mocha": "^11.0.0",
-    "electron-latest-versions": "^0.1.7",
+    "electron-latest-versions": "^0.2.0",
     "extract-zip": "^2.0.1",
     "koa": "^2.13.4",
     "koa-bodyparser": "^4.3.0",
diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 38a3f269..cc43d8ca 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.3","20.3.2","21.1.1"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.8","20.3.7","21.3.1","22.0.0"]
diff --git a/yarn.lock b/yarn.lock
index 4d4c873e..c60b63a0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1147,10 +1147,12 @@ ee-first@1.1.1:
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
   integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
 
-electron-latest-versions@^0.1.7:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/electron-latest-versions/-/electron-latest-versions-0.1.7.tgz#f8c3cdc065efc0a11660eb372315d009877ae0bd"
-  integrity sha512-eUbkBwa6rsoh5nWKF2vPPezr3DWlzMgnmrclEneyc0EOUIZESZPtv8uoFX8saEVDMvSNBVZAiXeR2/xMZIjFzQ==
+electron-latest-versions@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/electron-latest-versions/-/electron-latest-versions-0.2.0.tgz#b68411c50c30ad39587cad08eb652941b43b3068"
+  integrity sha512-7/FriqKppJQJ/bBO/22sdEWlxAKKNayVjNnw5HUCuW0uRabZGuq4bA/aThZM4axDlMSJKb8O26UOKzxV7TI5Rw==
+  dependencies:
+    semver "^7.3.8"
 
 electron-mocha@^11.0.0:
   version "11.0.2"
@@ -2941,6 +2943,13 @@ semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7:
   dependencies:
     lru-cache "^6.0.0"
 
+semver@^7.3.8:
+  version "7.3.8"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
+  integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
+  dependencies:
+    lru-cache "^6.0.0"
+
 serialize-error@^7.0.1:
   version "7.0.1"
   resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"

From c22dd572c8fb955e775de2cecd191c67d689623d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 2 Dec 2022 13:25:15 +0100
Subject: [PATCH 050/239] chore(deps-dev): bump electron from 19.0.8 to 19.1.8
 (#600)

---
 package.json | 2 +-
 yarn.lock    | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/package.json b/package.json
index 48378938..31076a75 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
     "chai-subset": "^1.6.0",
     "cross-env": "^7.0.3",
     "eslint": "7.27.0",
-    "electron": "19.0.8",
+    "electron": "19.1.8",
     "@electron/get": "^1.13.0",
     "electron-mocha": "^11.0.0",
     "electron-latest-versions": "^0.2.0",
diff --git a/yarn.lock b/yarn.lock
index c60b63a0..3e325e8c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1173,10 +1173,10 @@ electron-window@^0.8.0:
   dependencies:
     is-electron-renderer "^2.0.0"
 
-electron@19.0.8:
-  version "19.0.8"
-  resolved "https://registry.yarnpkg.com/electron/-/electron-19.0.8.tgz#c4d4ba915de554f2926261eb37d3527d2b092d4c"
-  integrity sha512-OWK3P/NbDFfBUv+wbYv1/OV4jehY5DQPT7n1maQJfN9hsnrWTMktXS/bmS05eSUAjNAzHmKPKfiKH2c1Yr7nGw==
+electron@19.1.8:
+  version "19.1.8"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-19.1.8.tgz#3ce19c270ca86d05bbf0df5ceeaea2d23edc7083"
+  integrity sha512-UfPQdFjgKI0xCm1V5sV3iAVOs0kCwAE91xWzV5tI7ij14yOkxTdXp9BqTzFaSbQYLYxn6q1BUUe1nlzjJjzAnw==
   dependencies:
     "@electron/get" "^1.14.1"
     "@types/node" "^16.11.26"

From 26bbb62ea038cd09b5fb58464d3ce44b448ba787 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 4 Dec 2022 10:06:10 +0100
Subject: [PATCH 051/239] test: New Electron versions (#601)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index cc43d8ca..f2ee32b8 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.8","20.3.7","21.3.1","22.0.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.8","21.3.3","22.0.0"]

From 29a0b0e004506cfd515ef2d6d11c69fdd18fa84a Mon Sep 17 00:00:00 2001
From: Abhijeet Prasad <aprasad@sentry.io>
Date: Wed, 7 Dec 2022 14:21:25 +0100
Subject: [PATCH 052/239] meta: Add new issue templates (#604)

---
 .github/ISSUE_TEMPLATE/bug.yml       | 83 ++++++++++++++++++++++++++++
 .github/ISSUE_TEMPLATE/bug_report.md | 23 --------
 .github/ISSUE_TEMPLATE/feature.yml   | 30 ++++++++++
 3 files changed, 113 insertions(+), 23 deletions(-)
 create mode 100644 .github/ISSUE_TEMPLATE/bug.yml
 delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md
 create mode 100644 .github/ISSUE_TEMPLATE/feature.yml

diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
new file mode 100644
index 00000000..d1d9f0e0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -0,0 +1,83 @@
+name: 🐞 Bug Report
+description: Tell us about something that's not working the way we (probably) intend.
+labels: ["Type: Bug"]
+body:
+  - type: checkboxes
+    attributes:
+      label: Is there an existing issue for this?
+      description: Please search to see if an issue already exists for the bug you encountered.
+      options:
+        - label: I have checked for existing issues https://github.com/getsentry/sentry-javascript/issues
+          required: true
+        - label: I have reviewed the documentation https://docs.sentry.io/
+          required: true
+        - label: I am using the latest SDK release https://github.com/getsentry/sentry-javascript/releases
+          required: true
+  - type: dropdown
+    id: type
+    attributes:
+      label: How do you use Sentry?
+      options:
+        - Sentry Saas (sentry.io)
+        - Self-hosted/on-premise
+    validations:
+      required: true
+  - type: input
+    id: sdk-version
+    attributes:
+      label: Electron SDK Version
+      description: What version of the Electron SDK are you using?
+      placeholder: ex. 4.1.2
+    validations:
+      required: true
+  - type: input
+    id: electron-version
+    attributes:
+      label: Electron Version
+      description: What version of the Electron are you using?
+      placeholder: ex. 22.0.0
+    validations:
+      required: true
+  - type: dropdown
+    id: platform
+    attributes:
+      label: What platform are you using?
+      options:
+        - "Linux"
+        - "MacOS"
+        - "Windows"
+        - "Other"
+  - type: input
+    id: link-to-sentry
+    attributes:
+      label: Link to Sentry event
+      description: If applicable, provide a link to the affected event from your Sentry account. The event will only be viewable by Sentry staff.
+      placeholder: https://sentry.io/organizations/<org-slug>/issues/<issue-id>/events/<event-id>/?project=<project-id>
+  - type: textarea
+    id: repro
+    attributes:
+      label: Steps to Reproduce
+      description: How can we see what you're seeing? Specific is terrific.
+      placeholder: |-
+        1. What
+        2. you
+        3. did.
+    validations:
+      required: true
+  - type: textarea
+    id: expected
+    attributes:
+      label: Expected Result
+    validations:
+      required: true
+  - type: textarea
+    id: actual
+    attributes:
+      label: Actual Result
+      description: Logs? Screenshots? Yes, please.
+    validations:
+      required: true
+  - type: markdown
+    attributes:
+      value: |-
+        ## Thanks 🙏
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index fa00a1cb..00000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-name: "\U0001F41B Bug Report"
-about: Report a reproducible bug or regression in Sentry Electron SDKs.
-title: ''
-assignees: ''
----
-
-<!-- Requirements: please go through this checklist before opening a new issue -->
-
-- [ ] Review the documentation: https://docs.sentry.io/platforms/javascript/electron/
-- [ ] Search for existing issues: https://github.com/getsentry/sentry-electron/issues
-- [ ] Use the latest release: https://github.com/getsentry/sentry-electron/releases
-- [ ] Provide a link to the affected event from your Sentry account
-
-## Versions + Platform
-
-- [ ] SDK version - `@sentry/electron@v?.?.?`
-- [ ] Electron version - `electron@v?.?.?`
-- [ ] Platform - `Windows/macOS/Linux`
-
-## Description
-
-Describe your issue in detail, ideally, you have a reproducible demo that you can show.
diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml
new file mode 100644
index 00000000..f3df2f94
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature.yml
@@ -0,0 +1,30 @@
+name: 💡 Feature Request
+description: Create a feature request for the Sentry Electron SDK.
+labels: 'Type: Improvement'
+body:
+  - type: markdown
+    attributes:
+      value: Thanks for taking the time to file a feature request! Please fill out this form as completely as possible.
+  - type: textarea
+    id: problem
+    attributes:
+      label: Problem Statement
+      description: A clear and concise description of what you want and what your use case is.
+      placeholder: |-
+        I want to make whirled peas, but Sentry doesn't blend.
+    validations:
+      required: true
+  - type: textarea
+    id: expected
+    attributes:
+      label: Solution Brainstorm
+      description: We know you have bright ideas to share ... share away, friend.
+      placeholder: |-
+        Add a blender to Sentry.
+    validations:
+      required: true
+  - type: markdown
+    attributes:
+      value: |-
+        ## Thanks 🙏
+        Check our [triage docs](https://open.sentry.io/triage/) for what to expect next.

From 35bb8b4efe98c9f2afd9ac1c7c41bf48abd083f8 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 7 Dec 2022 20:21:39 +0000
Subject: [PATCH 053/239] feat: Update to v7.24.1 of JavaScript SDKs (#605)

---
 package.json |  16 ++++-----
 yarn.lock    | 100 +++++++++++++++++++++++++--------------------------
 2 files changed, 58 insertions(+), 58 deletions(-)

diff --git a/package.json b/package.json
index 31076a75..ae2c1547 100644
--- a/package.json
+++ b/package.json
@@ -57,18 +57,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.16.0",
-    "@sentry/core": "7.16.0",
-    "@sentry/node": "7.16.0",
-    "@sentry/types": "7.16.0",
-    "@sentry/utils": "7.16.0",
+    "@sentry/browser": "7.24.1",
+    "@sentry/core": "7.24.1",
+    "@sentry/node": "7.24.1",
+    "@sentry/types": "7.24.1",
+    "@sentry/utils": "7.24.1",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.16.0",
-    "@sentry-internal/typescript": "7.16.0",
-    "@sentry/tracing": "7.16.0",
+    "@sentry-internal/eslint-config-sdk": "7.24.1",
+    "@sentry-internal/typescript": "7.24.1",
+    "@sentry/tracing": "7.24.1",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/yarn.lock b/yarn.lock
index 3e325e8c..2d896adc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -100,13 +100,13 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@sentry-internal/eslint-config-sdk@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.16.0.tgz#a626e2d248c8a079adc7e0855215b372e5294f65"
-  integrity sha512-rFbHI6RlO0Y1vwxtvRW/KyOiYBdT3kyKVIf4sXJxUc0IJ6ETmFXjGNRerWKUg3AF7m5QfHNsKQhHMKXhsCGPog==
+"@sentry-internal/eslint-config-sdk@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.24.1.tgz#94c0f25302691a3dcf3a8b2a68fdeb57a16a430c"
+  integrity sha512-Jyvb4T7wRmtQ7N1dMH++AncpoxQeH7nu8+i7vc3qc/yIg5qXFgh4TwV4YL9ab2+Tal65wKOrAchuom/QDSeJYg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.16.0"
-    "@sentry-internal/typescript" "7.16.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.24.1"
+    "@sentry-internal/typescript" "7.24.1"
     "@typescript-eslint/eslint-plugin" "^3.9.0"
     "@typescript-eslint/parser" "^3.9.0"
     eslint-config-prettier "^6.11.0"
@@ -115,71 +115,71 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.16.0.tgz#8675577a2781fae3cfac918d95fcd1ac731c8350"
-  integrity sha512-NlNZs8JlMA9wK2SaTrbznqk9P8P8yM0oj/HI7CnDJFuBStfbdFLuf025ejnSLXCfdPNRnHxKsHkq78jXyyA+Kg==
+"@sentry-internal/eslint-plugin-sdk@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.24.1.tgz#5748d1c3aa7a5aa47efc7e701ae25e13fb5c435f"
+  integrity sha512-LvUp73MHGrvUXOSkptXu+Lx8enD93doljL1IMqqcqgDyEHkqitFY/bGMBLpVl1CE6pQumlhIq5q97CaOr+fMLg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.16.0.tgz#a37c15649ed9d36d0e3ea0e1f622bb157308d5ce"
-  integrity sha512-cudpmUkvKmJNiCud5z/J+zbPDaulwClG/wLeK/+tFKz+qI5zrFWP9FGD4lTvL2wRyz8eQ4qTXtdaFK2RkxU/7A==
+"@sentry-internal/typescript@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.24.1.tgz#3c1e854c1106bbe607fbccde64e534a7ef7fc6a5"
+  integrity sha512-5j3pwSJoMwk5KA6SvLPSeX7QtCqVVA9MTSLIjushg9Q+8HEq8MTAEizzEs8uZnS7b0GL4i4YUupU+dqvGkJtqA==
 
-"@sentry/browser@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.16.0.tgz#afd2bac91857d2359272a0d9d2b1ee5ca7d69828"
-  integrity sha512-tJ063zvoF8Raw7mzQEXupOFPSN6v36WIbsDVGeFdToPCwViaBuATaxvWCrudGzsnBkMyItmTLJkzn9SEIXUOiw==
+"@sentry/browser@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.24.1.tgz#01c1ce61ba3cfbdec07bcf1413dc958087e26c32"
+  integrity sha512-Tr7p1Bg8a+ycdUmZuega0TTOl6xNZUj17PBFZnCjpZtxUMxlwR6aBlM0TxF6/bV6fUJchmoLCAjL3kLIHSSo6Q==
   dependencies:
-    "@sentry/core" "7.16.0"
-    "@sentry/types" "7.16.0"
-    "@sentry/utils" "7.16.0"
+    "@sentry/core" "7.24.1"
+    "@sentry/types" "7.24.1"
+    "@sentry/utils" "7.24.1"
     tslib "^1.9.3"
 
-"@sentry/core@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.16.0.tgz#60f9b54ef2ec524176b329e1d15be39c36da5953"
-  integrity sha512-vq6H1b/IPTvzDD9coQ3wIudvSjkAYuUlXb1dv69dRlq4v3st9dcKBps1Zf0lQ1i4TVlDLoe1iGMmNFglMF1Q5w==
+"@sentry/core@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.24.1.tgz#815480791e4230fd2e8718a4caa1b8253ca42c23"
+  integrity sha512-x/kBpBVFCZn4ijVVAPAw0cmHy0PfXgBpYGQ1X3+EEzI3pkvlygvnF2pLR/4LrsC23zGfIRlbDj4DwK5hxoFF4g==
   dependencies:
-    "@sentry/types" "7.16.0"
-    "@sentry/utils" "7.16.0"
+    "@sentry/types" "7.24.1"
+    "@sentry/utils" "7.24.1"
     tslib "^1.9.3"
 
-"@sentry/node@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.16.0.tgz#f049e243169ec4d6058d5c0fff08104509f5ba9a"
-  integrity sha512-OC0TO6UTetv8IsX3zNhdeui7YVIQCnhkbfi+CMrB6YsHaMP2A9qH5gNyu/hKbaY9+4xci7e4rxyRmI65aKS9ow==
+"@sentry/node@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.24.1.tgz#709376a72f6d10ad5c22dc2bb446b1ca9d51a949"
+  integrity sha512-sCZEqG+9SGn7vq9QHrhjU9SB3U/7FHAonCFG9oQth8zNT4SpOKKjEkbQC45sHqZ00dnERRuQMoEznOHqF46uIA==
   dependencies:
-    "@sentry/core" "7.16.0"
-    "@sentry/types" "7.16.0"
-    "@sentry/utils" "7.16.0"
+    "@sentry/core" "7.24.1"
+    "@sentry/types" "7.24.1"
+    "@sentry/utils" "7.24.1"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/tracing@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.16.0.tgz#823b84abf0df08ecd16669547b4281e3c7a96ac9"
-  integrity sha512-8a9bViUY7oS35msBMouxkgz5OGd9NGutuKF7SQ8hPZwTcQPOxOwPyHccykgr56k6OmaDjGCLZMqZowaysJj+4g==
+"@sentry/tracing@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.24.1.tgz#8f947b01a6b836334f20fcb36441d69cede474c9"
+  integrity sha512-Vp03aH7wMxLszFMZqVWPlDlqCP5mwAqqsh9nHWUJhyarGJjeacrMj+B+5qKKM4W/JNnbrHRTRLw2lL/szxj1KA==
   dependencies:
-    "@sentry/core" "7.16.0"
-    "@sentry/types" "7.16.0"
-    "@sentry/utils" "7.16.0"
+    "@sentry/core" "7.24.1"
+    "@sentry/types" "7.24.1"
+    "@sentry/utils" "7.24.1"
     tslib "^1.9.3"
 
-"@sentry/types@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.16.0.tgz#79c06ada153a84feb949fa49b1c9d15f91decd79"
-  integrity sha512-i6D+OK6d0l/k+VQvRp/Pt21WkDEgVBUIZq+sOkEZJczbcfexVdXKeXXoYTD2vYuFq8Yy28fzlsZaKI+NoH94yQ==
+"@sentry/types@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.24.1.tgz#ff2e39752ff1d46b54807275e9262209f95ec429"
+  integrity sha512-77E1cgw31YmEeqTi5RNMfIgwDB164UdtAGKtTtCehbF9HffO3Lp4f3G8TumqNKOik1RDNHrn+ZWqbj2c97UZZA==
 
-"@sentry/utils@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.16.0.tgz#b832520c661d4435808969ee04814ff8e20497b1"
-  integrity sha512-3Zh1txg7IRp4kZAdG27YF7K6lD1IZyuAo9KjoPg1Xzqa4DOZyASJuEkbf+rK2a9T4HrtVHHXJUsNbKg8WM3VHg==
+"@sentry/utils@7.24.1":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.24.1.tgz#f9760a7cb4b33d2ead01aace7b0fd62c8c2c6be8"
+  integrity sha512-wH0+ToU3OpL373Nx0YiuYje82a8lf6fm7q+MqyWyC6sVETe4YiL4+Ge0WLEJ0XEGFjxfL4gSZL3FhoVbJQxUtA==
   dependencies:
-    "@sentry/types" "7.16.0"
+    "@sentry/types" "7.24.1"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From 34481a63a49049a159a473d82523e11eb15e3d80 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 6 Jan 2023 14:48:17 +0000
Subject: [PATCH 054/239] CI: Use volta-cli/action to use the correct node
 version (#609)

---
 .github/workflows/build.yml           | 20 ++++----------------
 .github/workflows/new-versions-pr.yml |  4 +---
 package.json                          |  2 +-
 test/e2e/context.ts                   |  6 +++++-
 4 files changed, 11 insertions(+), 21 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 781ad437..9e3d2aa5 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -15,10 +15,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v2
-      - uses: actions/setup-node@v2
-        with:
-          node-version: '14'
-          cache: 'yarn'
+      - uses: volta-cli/action@v3
       - name: Install
         run: yarn install
       - name: Build
@@ -41,10 +38,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v2
-      - uses: actions/setup-node@v2
-        with:
-          node-version: '14'
-          cache: 'yarn'
+      - uses: volta-cli/action@v3
       - run: yarn install
       - name: Run Linter
         run: yarn lint
@@ -60,10 +54,7 @@ jobs:
         os: [ubuntu-latest, macos-latest, windows-latest]
     steps:
       - uses: actions/checkout@v2
-      - uses: actions/setup-node@v2
-        with:
-          node-version: '14'
-          cache: 'yarn'
+      - uses: volta-cli/action@v3
       - run: yarn install
       - name: Run Unit Tests
         run: yarn test
@@ -81,10 +72,7 @@ jobs:
       ELECTRON_VERSION: ${{ matrix.electron }}
     steps:
       - uses: actions/checkout@v2
-      - uses: actions/setup-node@v2
-        with:
-          node-version: '14'
-          cache: 'yarn'
+      - uses: volta-cli/action@v3
       - uses: actions/cache@v2
         with:
           path: |
diff --git a/.github/workflows/new-versions-pr.yml b/.github/workflows/new-versions-pr.yml
index 0ce18992..8c47b74d 100644
--- a/.github/workflows/new-versions-pr.yml
+++ b/.github/workflows/new-versions-pr.yml
@@ -10,9 +10,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v2
-      - uses: actions/setup-node@v2
-        with:
-          node-version: '14'
+      - uses: volta-cli/action@v3
       - run: yarn install
       - name: Update Versions
         run: yarn update-electron-versions
diff --git a/package.json b/package.json
index ae2c1547..88b6e14b 100644
--- a/package.json
+++ b/package.json
@@ -103,7 +103,7 @@
     "yaml": "^1.10.2"
   },
   "volta": {
-    "node": "16.14.0",
+    "node": "18.12.1",
     "yarn": "1.22.17"
   }
 }
diff --git a/test/e2e/context.ts b/test/e2e/context.ts
index aaab4ef6..c190dc1b 100644
--- a/test/e2e/context.ts
+++ b/test/e2e/context.ts
@@ -179,7 +179,11 @@ export class TestContext {
 
   private _clearAppUserData() {
     for (const dir of getDeleteDirectories(this._appName)) {
-      rmSync(dir, { recursive: true, force: true });
+      try {
+        rmSync(dir, { recursive: true, force: true });
+      } catch (_) {
+        //
+      }
     }
   }
 }

From fed42dfadd92c05b258cb98c9f8bbda28aa383b5 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 6 Jan 2023 14:50:32 +0000
Subject: [PATCH 055/239] feat: Update JavaScript SDKs to 7.29.0 (#615)

---
 package.json        |  16 +++----
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 110 ++++++++++++++++++++++++--------------------
 3 files changed, 69 insertions(+), 59 deletions(-)

diff --git a/package.json b/package.json
index 88b6e14b..7d342e27 100644
--- a/package.json
+++ b/package.json
@@ -57,18 +57,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.24.1",
-    "@sentry/core": "7.24.1",
-    "@sentry/node": "7.24.1",
-    "@sentry/types": "7.24.1",
-    "@sentry/utils": "7.24.1",
+    "@sentry/browser": "7.29.0",
+    "@sentry/core": "7.29.0",
+    "@sentry/node": "7.29.0",
+    "@sentry/types": "7.29.0",
+    "@sentry/utils": "7.29.0",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.24.1",
-    "@sentry-internal/typescript": "7.24.1",
-    "@sentry/tracing": "7.24.1",
+    "@sentry-internal/eslint-config-sdk": "7.29.0",
+    "@sentry-internal/typescript": "7.29.0",
+    "@sentry/tracing": "7.29.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 97e46fcf..419d72e3 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -21,7 +21,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_16_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_29_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 2d896adc..142f6b75 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -100,13 +100,13 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@sentry-internal/eslint-config-sdk@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.24.1.tgz#94c0f25302691a3dcf3a8b2a68fdeb57a16a430c"
-  integrity sha512-Jyvb4T7wRmtQ7N1dMH++AncpoxQeH7nu8+i7vc3qc/yIg5qXFgh4TwV4YL9ab2+Tal65wKOrAchuom/QDSeJYg==
+"@sentry-internal/eslint-config-sdk@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.29.0.tgz#ea0e24e0edcc4daf00c76876b809697ce36ded06"
+  integrity sha512-2173bQkiuSjCY8a3JubgEo+JPMXPObIjcMK9kQhPFmNv4kn8AcnLOUO5fzN/4Bm9PNzuLSqJeJgJrgh0K/rBsw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.24.1"
-    "@sentry-internal/typescript" "7.24.1"
+    "@sentry-internal/eslint-plugin-sdk" "7.29.0"
+    "@sentry-internal/typescript" "7.29.0"
     "@typescript-eslint/eslint-plugin" "^3.9.0"
     "@typescript-eslint/parser" "^3.9.0"
     eslint-config-prettier "^6.11.0"
@@ -115,71 +115,81 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.24.1.tgz#5748d1c3aa7a5aa47efc7e701ae25e13fb5c435f"
-  integrity sha512-LvUp73MHGrvUXOSkptXu+Lx8enD93doljL1IMqqcqgDyEHkqitFY/bGMBLpVl1CE6pQumlhIq5q97CaOr+fMLg==
+"@sentry-internal/eslint-plugin-sdk@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.29.0.tgz#f8d10edd65ec272cfb01b56ca148874baf2ff9aa"
+  integrity sha512-bhJNEKMR0rPaL+++HiPYXtsRXBV7fyX69IcbluLGXTNk8IvSbwxVl/jKZDO5pterE312oqBlkCHnQidYmqd3Zg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.24.1.tgz#3c1e854c1106bbe607fbccde64e534a7ef7fc6a5"
-  integrity sha512-5j3pwSJoMwk5KA6SvLPSeX7QtCqVVA9MTSLIjushg9Q+8HEq8MTAEizzEs8uZnS7b0GL4i4YUupU+dqvGkJtqA==
+"@sentry-internal/typescript@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.29.0.tgz#4ea3133d4d0056a5c7f89f58ad26f1c1062d11ad"
+  integrity sha512-WB1ncGZ8IjM2N/hGD01mYoWIoVUcuCMXZIaejXxYnhnIdBv+jTsO7UiRa66IsCyl1QGQMNPyMGsgCoqqwctQPQ==
 
-"@sentry/browser@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.24.1.tgz#01c1ce61ba3cfbdec07bcf1413dc958087e26c32"
-  integrity sha512-Tr7p1Bg8a+ycdUmZuega0TTOl6xNZUj17PBFZnCjpZtxUMxlwR6aBlM0TxF6/bV6fUJchmoLCAjL3kLIHSSo6Q==
+"@sentry/browser@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.29.0.tgz#eb162b50adec33ac49ecd3dc930bdffbfda8098e"
+  integrity sha512-Af+dIcntaw405Wt7myDOMGDxiszfy4aBdshrEKYbGgcfHjgXBIdF3iKlNatvl6nrOm+IOVuKgSpCLOr2hiCwzw==
   dependencies:
-    "@sentry/core" "7.24.1"
-    "@sentry/types" "7.24.1"
-    "@sentry/utils" "7.24.1"
+    "@sentry/core" "7.29.0"
+    "@sentry/replay" "7.29.0"
+    "@sentry/types" "7.29.0"
+    "@sentry/utils" "7.29.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.24.1.tgz#815480791e4230fd2e8718a4caa1b8253ca42c23"
-  integrity sha512-x/kBpBVFCZn4ijVVAPAw0cmHy0PfXgBpYGQ1X3+EEzI3pkvlygvnF2pLR/4LrsC23zGfIRlbDj4DwK5hxoFF4g==
+"@sentry/core@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.29.0.tgz#bc4b54d56cf7652598d4430cf43ea97cc069f6fe"
+  integrity sha512-+e9aIp2ljtT4EJq3901z6TfEVEeqZd5cWzbKEuQzPn2UO6If9+Utd7kY2Y31eQYb4QnJgZfiIEz1HonuYY6zqQ==
   dependencies:
-    "@sentry/types" "7.24.1"
-    "@sentry/utils" "7.24.1"
+    "@sentry/types" "7.29.0"
+    "@sentry/utils" "7.29.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.24.1.tgz#709376a72f6d10ad5c22dc2bb446b1ca9d51a949"
-  integrity sha512-sCZEqG+9SGn7vq9QHrhjU9SB3U/7FHAonCFG9oQth8zNT4SpOKKjEkbQC45sHqZ00dnERRuQMoEznOHqF46uIA==
+"@sentry/node@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.29.0.tgz#721aab15faef98f291b5a3fcb9b303565deb1e74"
+  integrity sha512-s/bN/JS5gPTmwzVms4FtI5YNYtC9aGY4uqdx/llVrIiVv7G6md/oJJzKtO1C4dt6YshjGjSs5KCpEn1NM4+1iA==
   dependencies:
-    "@sentry/core" "7.24.1"
-    "@sentry/types" "7.24.1"
-    "@sentry/utils" "7.24.1"
+    "@sentry/core" "7.29.0"
+    "@sentry/types" "7.29.0"
+    "@sentry/utils" "7.29.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/tracing@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.24.1.tgz#8f947b01a6b836334f20fcb36441d69cede474c9"
-  integrity sha512-Vp03aH7wMxLszFMZqVWPlDlqCP5mwAqqsh9nHWUJhyarGJjeacrMj+B+5qKKM4W/JNnbrHRTRLw2lL/szxj1KA==
+"@sentry/replay@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.29.0.tgz#75d5bb9df39e0a31994be245032c9998af62a304"
+  integrity sha512-Gw7HgviJQu6pX5RFQGVY38Av4qFn9otrZdwSSl/QK5hIyg6yhlh5h7U0ydZkrYYGiW6Z6SYYRpEWCJc/Wbh+ZQ==
   dependencies:
-    "@sentry/core" "7.24.1"
-    "@sentry/types" "7.24.1"
-    "@sentry/utils" "7.24.1"
+    "@sentry/core" "7.29.0"
+    "@sentry/types" "7.29.0"
+    "@sentry/utils" "7.29.0"
+
+"@sentry/tracing@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.29.0.tgz#767f309cbff46ab12bec6ab3c266f7f03fec91fd"
+  integrity sha512-MAN/G6XROtRhzo/KDjddb6VJn/Q1TaPLwdyj9vvfkUkBNtlt5k16oXp+u7eHWX0uujER9wnZtj2ivXaPeqq0VA==
+  dependencies:
+    "@sentry/core" "7.29.0"
+    "@sentry/types" "7.29.0"
+    "@sentry/utils" "7.29.0"
     tslib "^1.9.3"
 
-"@sentry/types@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.24.1.tgz#ff2e39752ff1d46b54807275e9262209f95ec429"
-  integrity sha512-77E1cgw31YmEeqTi5RNMfIgwDB164UdtAGKtTtCehbF9HffO3Lp4f3G8TumqNKOik1RDNHrn+ZWqbj2c97UZZA==
+"@sentry/types@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.29.0.tgz#ed829b6014ee19049035fec6af2b4fea44ff28b8"
+  integrity sha512-DmoEpoqHPty3VxqubS/5gxarwebHRlcBd/yuno+PS3xy++/i9YPjOWLZhU2jYs1cW68M9R6CcCOiC9f2ckJjdw==
 
-"@sentry/utils@7.24.1":
-  version "7.24.1"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.24.1.tgz#f9760a7cb4b33d2ead01aace7b0fd62c8c2c6be8"
-  integrity sha512-wH0+ToU3OpL373Nx0YiuYje82a8lf6fm7q+MqyWyC6sVETe4YiL4+Ge0WLEJ0XEGFjxfL4gSZL3FhoVbJQxUtA==
+"@sentry/utils@7.29.0":
+  version "7.29.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.29.0.tgz#cbf8f87dd851b0fdc7870db9c68014c321c3bab8"
+  integrity sha512-ICcBwTiBGK8NQA8H2BJo0JcMN6yCeKLqNKNMVampRgS6wSfSk1edvcTdhRkW3bSktIGrIPZrKskBHyMwDGF2XQ==
   dependencies:
-    "@sentry/types" "7.24.1"
+    "@sentry/types" "7.29.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From 82927b4ccf2b1f73a26e24004e52d906439ea9c8 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 6 Jan 2023 15:04:54 +0000
Subject: [PATCH 056/239] chore(deps): bump json5 from 1.0.1 to 1.0.2 (#616)

---
 yarn.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/yarn.lock b/yarn.lock
index 142f6b75..17efdde5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2179,9 +2179,9 @@ json-stringify-safe@^5.0.1:
   integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
 
 json5@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
-  integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+  integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
   dependencies:
     minimist "^1.2.0"
 
@@ -2425,9 +2425,9 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
     brace-expansion "^1.1.7"
 
 minimist@^1.2.0, minimist@^1.2.6:
-  version "1.2.6"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
-  integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
+  integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
 
 mkdirp@^0.5.4:
   version "0.5.6"

From e451f3c0d851c3dd2285daf05337e5ac4052a67b Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 9 Jan 2023 13:15:46 +0000
Subject: [PATCH 057/239] feat: Use a transport to send events to main process
 rather than via integration (#610)

---
 examples/electron-forge-webpack/event.json    |  2 +-
 examples/electron-forge/event.json            |  2 +-
 .../electron-react-boilerplate/event.json     |  2 +-
 examples/electron-vite/event.json             |  2 +-
 .../event.json                                |  2 +-
 examples/webpack-context-isolation/event.json |  2 +-
 src/common/ipc.ts                             |  5 +-
 src/main/ipc.ts                               | 82 ++++++++++++++++---
 src/preload/index.ts                          |  1 +
 src/preload/legacy.ts                         |  1 +
 src/renderer/ipc.ts                           | 13 ++-
 src/renderer/sdk.ts                           |  9 +-
 src/renderer/transport.ts                     | 17 ++++
 test/e2e/download.ts                          | 18 +++-
 test/e2e/server/envelope.ts                   | 61 --------------
 test/e2e/server/index.ts                      | 31 +++++--
 .../preload-error-protocol/event.json         |  2 +-
 .../javascript/preload-error/event.json       |  2 +-
 .../renderer-error-custom-env/event.json      |  2 +-
 .../renderer-error-custom-release/event.json  |  2 +-
 .../renderer-error-protocol/event.json        |  2 +-
 .../javascript/renderer-error/event.json      |  2 +-
 .../offline/renderer-error/event.json         |  2 +-
 .../test-apps/other/child-process/event2.json |  2 +-
 .../other/custom-renderer-name/event.json     |  2 +-
 .../test-apps/other/error-iframe/event.json   |  2 +-
 .../other/scope-breadcrumbs/event.json        | 27 ++++--
 .../other/scope-breadcrumbs/src/index.html    |  4 +
 .../test-apps/other/screenshots/event.json    |  2 +-
 .../sessions/javascript-error/event.json      |  2 +-
 30 files changed, 190 insertions(+), 115 deletions(-)
 create mode 100644 src/renderer/transport.ts
 delete mode 100644 test/e2e/server/envelope.ts

diff --git a/examples/electron-forge-webpack/event.json b/examples/electron-forge-webpack/event.json
index ba251353..16bb6c29 100644
--- a/examples/electron-forge-webpack/event.json
+++ b/examples/electron-forge-webpack/event.json
@@ -83,7 +83,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/examples/electron-forge/event.json b/examples/electron-forge/event.json
index d8b806c9..0182666a 100644
--- a/examples/electron-forge/event.json
+++ b/examples/electron-forge/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/examples/electron-react-boilerplate/event.json b/examples/electron-react-boilerplate/event.json
index 86072c9e..0574cfee 100644
--- a/examples/electron-react-boilerplate/event.json
+++ b/examples/electron-react-boilerplate/event.json
@@ -68,7 +68,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/examples/electron-vite/event.json b/examples/electron-vite/event.json
index 8de8a8a3..3c7b1401 100644
--- a/examples/electron-vite/event.json
+++ b/examples/electron-vite/event.json
@@ -68,7 +68,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/examples/webpack-context-isolation-preload/event.json b/examples/webpack-context-isolation-preload/event.json
index ad61407b..61d37b24 100644
--- a/examples/webpack-context-isolation-preload/event.json
+++ b/examples/webpack-context-isolation-preload/event.json
@@ -84,7 +84,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/examples/webpack-context-isolation/event.json b/examples/webpack-context-isolation/event.json
index 12bfe201..a2a16a44 100644
--- a/examples/webpack-context-isolation/event.json
+++ b/examples/webpack-context-isolation/event.json
@@ -84,7 +84,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/src/common/ipc.ts b/src/common/ipc.ts
index c90a5f4f..0203d5e2 100644
--- a/src/common/ipc.ts
+++ b/src/common/ipc.ts
@@ -5,13 +5,16 @@ export enum IPCChannel {
   PING = 'sentry-electron.ping',
   /** IPC to send a captured event to Sentry. */
   EVENT = 'sentry-electron.event',
-  /** IPC to capture scope globally. */
+  /** IPC to pass scope changes to main process. */
   SCOPE = 'sentry-electron.scope',
+  /** IPC to pass envelopes to the main process. */
+  ENVELOPE = 'sentry-electron.envelope',
 }
 
 export interface IPCInterface {
   sendScope: (scope: string) => void;
   sendEvent: (event: string) => void;
+  sendEnvelope: (evn: Uint8Array | string) => void;
 }
 
 /**
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index b252172e..30cae0ab 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -1,16 +1,36 @@
-import { captureEvent, configureScope, Scope } from '@sentry/core';
-import { Event } from '@sentry/types';
-import { logger, SentryError } from '@sentry/utils';
+import { captureEvent, configureScope, getCurrentHub, Scope } from '@sentry/core';
+import { Attachment, AttachmentItem, Envelope, Event, EventItem } from '@sentry/types';
+import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils';
 import { app, ipcMain, protocol, WebContents } from 'electron';
+import { TextDecoder, TextEncoder } from 'util';
 
 import { IPCChannel, IPCMode, mergeEvents, PROTOCOL_SCHEME } from '../common';
 import { supportsFullProtocol, whenAppReady } from './electron-normalize';
 import { ElectronMainOptionsInternal } from './sdk';
 
-/**
- * Handle events from the renderer processes
- */
-export function handleEvent(options: ElectronMainOptionsInternal, jsonEvent: string, contents?: WebContents): void {
+function captureEventFromRenderer(
+  options: ElectronMainOptionsInternal,
+  event: Event,
+  attachments: Attachment[],
+  contents?: WebContents,
+): void {
+  const process = contents ? options?.getRendererName?.(contents) || 'renderer' : 'renderer';
+
+  // Ensure breadcrumbs are empty as they sent via scope updates
+  event.breadcrumbs = event.breadcrumbs || [];
+
+  // Remove the environment as it defaults to 'production' and overwrites the main process environment
+  delete event.environment;
+
+  // Remove the SDK info as we want the Electron SDK to be the one reporting the event
+  delete event.sdk?.name;
+  delete event.sdk?.version;
+  delete event.sdk?.packages;
+
+  captureEvent(mergeEvents(event, { tags: { 'event.process': process } }), { attachments });
+}
+
+function handleEvent(options: ElectronMainOptionsInternal, jsonEvent: string, contents?: WebContents): void {
   let event: Event;
   try {
     event = JSON.parse(jsonEvent) as Event;
@@ -19,9 +39,42 @@ export function handleEvent(options: ElectronMainOptionsInternal, jsonEvent: str
     return;
   }
 
-  const process = contents ? options?.getRendererName?.(contents) || 'renderer' : 'renderer';
+  captureEventFromRenderer(options, event, [], contents);
+}
+
+function eventFromEnvelope(envelope: Envelope): [Event, Attachment[]] | undefined {
+  let event: Event | undefined;
+  const attachments: Attachment[] = [];
+
+  forEachEnvelopeItem(envelope, (item, type) => {
+    if (type === 'event' || type === 'transaction') {
+      event = Array.isArray(item) ? (item as EventItem)[1] : undefined;
+    } else if (type === 'attachment') {
+      const [headers, bin] = item as AttachmentItem;
+
+      attachments.push({
+        filename: headers.filename,
+        attachmentType: headers.attachment_type,
+        contentType: headers.content_type,
+        data: bin,
+      });
+    }
+  });
 
-  captureEvent(mergeEvents(event, { tags: { 'event.process': process } }));
+  return event ? [event, attachments] : undefined;
+}
+
+function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array | string, contents?: WebContents): void {
+  const envelope = parseEnvelope(env, new TextEncoder(), new TextDecoder());
+
+  const eventAndAttachments = eventFromEnvelope(envelope);
+  if (eventAndAttachments) {
+    const [event, attachments] = eventAndAttachments;
+    captureEventFromRenderer(options, event, attachments, contents);
+  } else {
+    // Pass other types of envelope straight to the transport
+    void getCurrentHub().getClient()?.getTransport()?.send(envelope);
+  }
 }
 
 /** Is object defined and has keys */
@@ -32,7 +85,7 @@ function hasKeys(obj: any): boolean {
 /**
  * Handle scope updates from renderer processes
  */
-export function handleScope(options: ElectronMainOptionsInternal, jsonScope: string): void {
+function handleScope(options: ElectronMainOptionsInternal, jsonScope: string): void {
   let rendererScope: Scope;
   try {
     rendererScope = JSON.parse(jsonScope) as Scope;
@@ -85,12 +138,14 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
     .then(() => {
       for (const sesh of options.getSessions()) {
         sesh.protocol.registerStringProtocol(PROTOCOL_SCHEME, (request, callback) => {
-          const data = request.uploadData?.[0]?.bytes.toString();
+          const data = request.uploadData?.[0]?.bytes;
 
           if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) {
-            handleEvent(options, data);
+            handleEvent(options, data.toString());
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}`) && data) {
-            handleScope(options, data);
+            handleScope(options, data.toString());
+          } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) {
+            handleEnvelope(options, data);
           }
 
           callback('');
@@ -106,6 +161,7 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
 function configureClassic(options: ElectronMainOptionsInternal): void {
   ipcMain.on(IPCChannel.EVENT, ({ sender }, jsonEvent: string) => handleEvent(options, jsonEvent, sender));
   ipcMain.on(IPCChannel.SCOPE, (_, jsonScope: string) => handleScope(options, jsonScope));
+  ipcMain.on(IPCChannel.ENVELOPE, ({ sender }, env: Uint8Array | string) => handleEnvelope(options, env, sender));
 }
 
 /** Sets up communication channels with the renderer */
diff --git a/src/preload/index.ts b/src/preload/index.ts
index ca5c7530..e7cb8617 100644
--- a/src/preload/index.ts
+++ b/src/preload/index.ts
@@ -16,6 +16,7 @@ if (window.__SENTRY_IPC__) {
   const ipcObject = {
     sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson),
     sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson),
+    sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope),
   };
 
   // eslint-disable-next-line no-restricted-globals
diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts
index 5a572aa9..38ea7b31 100644
--- a/src/preload/legacy.ts
+++ b/src/preload/legacy.ts
@@ -27,6 +27,7 @@ if (window.__SENTRY_IPC__) {
   const ipcObject = {
     sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson),
     sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson),
+    sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope),
   };
 
   // eslint-disable-next-line no-restricted-globals
diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts
index f74af6b0..a865c5e8 100644
--- a/src/renderer/ipc.ts
+++ b/src/renderer/ipc.ts
@@ -23,13 +23,18 @@ function getImplementation(): IPCInterface {
   // We include sentry_key in the URL so these dont end up in fetch breadcrumbs
   // https://github.com/getsentry/sentry-javascript/blob/a3f70d8869121183bec037571a3ee78efaf26b0b/packages/browser/src/integrations/breadcrumbs.ts#L240
   return {
-    sendScope: (scope) => {
-      fetch(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}/sentry_key`, { method: 'POST', body: scope }).catch(() => {
+    sendScope: (body) => {
+      fetch(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}/sentry_key`, { method: 'POST', body }).catch(() => {
         // ignore
       });
     },
-    sendEvent: (event) => {
-      fetch(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}/sentry_key`, { method: 'POST', body: event }).catch(() => {
+    sendEvent: (body) => {
+      fetch(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}/sentry_key`, { method: 'POST', body }).catch(() => {
+        // ignore
+      });
+    },
+    sendEnvelope: (body) => {
+      fetch(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}/sentry_key`, { method: 'POST', body }).catch(() => {
         // ignore
       });
     },
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 419d72e3..6bd2259f 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -7,10 +7,11 @@ import {
 import { logger } from '@sentry/utils';
 
 import { ensureProcess } from '../common';
-import { EventToMain, ScopeToMain } from './integrations';
+import { ScopeToMain } from './integrations';
 import { electronRendererStackParser } from './stack-parse';
+import { makeRendererTransport } from './transport';
 
-export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain(), new EventToMain()];
+export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain()];
 
 /**
  * Initialize Sentry in the Electron renderer process
@@ -57,6 +58,10 @@ If init has been called in the preload and contextIsolation is disabled, is not
     options.dsn = 'https://12345@dummy.dsn/12345';
   }
 
+  if (options.transport === undefined) {
+    options.transport = makeRendererTransport;
+  }
+
   // We only handle initialScope in the main process otherwise it can cause race conditions over IPC
   delete options.initialScope;
 
diff --git a/src/renderer/transport.ts b/src/renderer/transport.ts
new file mode 100644
index 00000000..5b315b93
--- /dev/null
+++ b/src/renderer/transport.ts
@@ -0,0 +1,17 @@
+import { createTransport } from '@sentry/core';
+import { BaseTransportOptions, Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';
+
+import { getIPC } from './ipc';
+
+/**
+ * Creates a Transport that passes envelopes to the Electron main process.
+ */
+export function makeRendererTransport(options: BaseTransportOptions): Transport {
+  const ipc = getIPC();
+
+  return createTransport(options, async (request: TransportRequest): Promise<TransportMakeRequestResponse> => {
+    ipc.sendEnvelope(request.body);
+    // Since the main process handles sending of envelopes and rate limiting, we always return 200 OK to the renderers.
+    return { statusCode: 200 };
+  });
+}
diff --git a/test/e2e/download.ts b/test/e2e/download.ts
index 98bd6d8a..1691048a 100644
--- a/test/e2e/download.ts
+++ b/test/e2e/download.ts
@@ -1,8 +1,19 @@
 import { downloadArtifact as electronDownload } from '@electron/get';
 import electronExtract = require('extract-zip');
+import { spawnSync } from 'child_process';
 import { existsSync } from 'fs';
 import { join } from 'path';
 
+function isMacArm64(): boolean {
+  if (process.platform !== 'darwin') {
+    return false;
+  }
+
+  // Check if this machine is Apple silicone. This cputype might only match M1 for now...
+  const output = spawnSync('sysctl', ['hw.cputype']).output?.toString();
+  return output?.includes('16777228');
+}
+
 /** Gets the users home directory */
 function getHomDir(): string {
   return process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME'] || '';
@@ -29,11 +40,14 @@ function getExecutablePath(): string {
  * @returns Path to the Electron executable
  */
 export async function downloadElectron(version: string): Promise<string> {
+  // We override the arch on Mac arm64 when we're running on node x64 because Crashpad doesn't work on x64 Electron
+  // running in Rosetta...
+  const arch = isMacArm64() ? 'arm64' : 'x64';
   const cacheDir = join(process.env.ELECTRON_CACHE_DIR ?? getHomDir(), '.cache');
-  const dir = join(cacheDir, `${version}-x64`);
+  const dir = join(cacheDir, `${version}-${arch}`);
 
   if (!existsSync(dir)) {
-    const zipPath = await electronDownload({ version, arch: 'x64', artifactName: 'electron' });
+    const zipPath = await electronDownload({ version, arch, artifactName: 'electron' });
     await electronExtract(zipPath, { dir });
   }
 
diff --git a/test/e2e/server/envelope.ts b/test/e2e/server/envelope.ts
deleted file mode 100644
index 415165c2..00000000
--- a/test/e2e/server/envelope.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { BaseEnvelopeHeaders, BaseEnvelopeItemHeaders, Envelope } from '@sentry/types';
-
-/**
- * A naive binary envelope parser
- */
-export function parseEnvelope(env: string | Uint8Array): Envelope {
-  let buf = typeof env === 'string' ? new TextEncoder().encode(env) : env;
-
-  let envelopeHeaders: BaseEnvelopeHeaders | undefined;
-  let lastItemHeader: BaseEnvelopeItemHeaders | undefined;
-  const items: [any, any][] = [];
-
-  let binaryLength = 0;
-  while (buf.length) {
-    // Next length is either the binary length from the previous header
-    // or the next newline character
-    let i = binaryLength || buf.indexOf(0xa);
-
-    // If no newline was found, assume this is the last block
-    if (i < 0) {
-      i = buf.length;
-    }
-
-    // If we read out a length in the previous header, assume binary
-    if (binaryLength > 0) {
-      const bin = buf.slice(0, binaryLength);
-      binaryLength = 0;
-      items.push([lastItemHeader, bin]);
-    } else {
-      const jsonStr = new TextDecoder().decode(buf.slice(0, i + 1));
-
-      try {
-        const json = JSON.parse(jsonStr);
-
-        if (typeof json.length === 'number') {
-          binaryLength = json.length;
-        }
-
-        // First json is always the envelope headers
-        if (!envelopeHeaders) {
-          envelopeHeaders = json;
-        } else {
-          // If there is a type property, assume this is an item header
-          if (lastItemHeader) {
-            items.push([lastItemHeader, json]);
-            lastItemHeader = undefined;
-          } else {
-            lastItemHeader = json;
-          }
-        }
-      } catch (_) {
-        //
-      }
-    }
-
-    // Replace the buffer with the previous block and newline removed
-    buf = buf.slice(i + 1);
-  }
-
-  return [envelopeHeaders as BaseEnvelopeHeaders, items];
-}
diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts
index 1983d421..81b20188 100644
--- a/test/e2e/server/index.ts
+++ b/test/e2e/server/index.ts
@@ -1,14 +1,15 @@
 import { Event, Session, Transaction } from '@sentry/types';
-import { forEachEnvelopeItem } from '@sentry/utils';
+import { forEachEnvelopeItem, parseEnvelope } from '@sentry/utils';
 import { Server } from 'http';
 import Koa from 'koa';
 import bodyParser from 'koa-bodyparser';
 import Router from 'koa-tree-router';
-import { inspect } from 'util';
+import { Readable } from 'stream';
+import { inspect, TextDecoder, TextEncoder } from 'util';
+import { gunzipSync } from 'zlib';
 
 import { eventIsSession } from '../recipe';
 import { createLogger } from '../utils';
-import { parseEnvelope } from './envelope';
 import { parseMultipart, sentryEventFromFormFields } from './multi-part';
 
 const log = createLogger('Test Server');
@@ -39,6 +40,25 @@ export interface TestServerEvent<T = unknown> {
   method: 'envelope' | 'minidump' | 'store';
 }
 
+function stream2buffer(stream: Readable): Promise<Buffer> {
+  return new Promise((resolve, reject) => {
+    const buf: Buffer[] = [];
+    stream.on('data', (chunk) => buf.push(chunk));
+    stream.on('end', () => resolve(Buffer.concat(buf)));
+    stream.on('error', (err) => reject(err));
+  });
+}
+
+async function getRequestBody(ctx: Koa.ParameterizedContext): Promise<Buffer> {
+  let buf = await stream2buffer(ctx.req);
+
+  if (ctx.request.headers['content-encoding'] === 'gzip') {
+    buf = gunzipSync(buf);
+  }
+
+  return buf;
+}
+
 /**
  * A mock Sentry server.
  *
@@ -59,9 +79,6 @@ export class TestServer {
     app.use(
       bodyParser({
         enableTypes: ['text'],
-        extendTypes: {
-          text: ['application/x-sentry-envelope'],
-        },
         textLimit: '200mb',
       }),
     );
@@ -93,7 +110,7 @@ export class TestServer {
         return;
       }
 
-      const envelope = parseEnvelope(ctx.request.body);
+      const envelope = parseEnvelope(await getRequestBody(ctx), new TextEncoder(), new TextDecoder());
 
       let data: Event | Transaction | Session | undefined;
       const attachments: Attachment[] = [];
diff --git a/test/e2e/test-apps/javascript/preload-error-protocol/event.json b/test/e2e/test-apps/javascript/preload-error-protocol/event.json
index 98304fcc..ee81ccf8 100644
--- a/test/e2e/test-apps/javascript/preload-error-protocol/event.json
+++ b/test/e2e/test-apps/javascript/preload-error-protocol/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/javascript/preload-error/event.json b/test/e2e/test-apps/javascript/preload-error/event.json
index a24afd64..91cf8b47 100644
--- a/test/e2e/test-apps/javascript/preload-error/event.json
+++ b/test/e2e/test-apps/javascript/preload-error/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json b/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json
index 66c72d7f..d24eb797 100644
--- a/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json
+++ b/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json b/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json
index 109efe98..6aec9824 100644
--- a/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json
+++ b/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/javascript/renderer-error-protocol/event.json b/test/e2e/test-apps/javascript/renderer-error-protocol/event.json
index 18034ba5..76536610 100644
--- a/test/e2e/test-apps/javascript/renderer-error-protocol/event.json
+++ b/test/e2e/test-apps/javascript/renderer-error-protocol/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/javascript/renderer-error/event.json b/test/e2e/test-apps/javascript/renderer-error/event.json
index c388a760..43157ee2 100644
--- a/test/e2e/test-apps/javascript/renderer-error/event.json
+++ b/test/e2e/test-apps/javascript/renderer-error/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/offline/renderer-error/event.json b/test/e2e/test-apps/offline/renderer-error/event.json
index 4ff367a9..e05c1f90 100644
--- a/test/e2e/test-apps/offline/renderer-error/event.json
+++ b/test/e2e/test-apps/offline/renderer-error/event.json
@@ -67,7 +67,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/other/child-process/event2.json b/test/e2e/test-apps/other/child-process/event2.json
index c3831a94..3d633f20 100644
--- a/test/e2e/test-apps/other/child-process/event2.json
+++ b/test/e2e/test-apps/other/child-process/event2.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/other/custom-renderer-name/event.json b/test/e2e/test-apps/other/custom-renderer-name/event.json
index d0e8fb5e..6be2c020 100644
--- a/test/e2e/test-apps/other/custom-renderer-name/event.json
+++ b/test/e2e/test-apps/other/custom-renderer-name/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/other/error-iframe/event.json b/test/e2e/test-apps/other/error-iframe/event.json
index b34cc21d..8a410346 100644
--- a/test/e2e/test-apps/other/error-iframe/event.json
+++ b/test/e2e/test-apps/other/error-iframe/event.json
@@ -84,7 +84,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/event.json b/test/e2e/test-apps/other/scope-breadcrumbs/event.json
index 6133b621..3884bb8f 100644
--- a/test/e2e/test-apps/other/scope-breadcrumbs/event.json
+++ b/test/e2e/test-apps/other/scope-breadcrumbs/event.json
@@ -35,7 +35,7 @@
         "processor_count": 0,
         "processor_frequency": 0,
         "cpu_description": "{{cpu}}",
-        "screen_resolution":"{{screen}}",
+        "screen_resolution": "{{screen}}",
         "screen_density": 1,
         "language": "{{language}}"
       },
@@ -77,7 +77,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
@@ -94,10 +94,12 @@
         "timestamp": 0
       },
       {
-       "timestamp": 0,
-       "category": "console",
-       "data": {
-          "arguments": [ "Some logging from the renderer process" ],
+        "timestamp": 0,
+        "category": "console",
+        "data": {
+          "arguments": [
+            "Some logging from the renderer process"
+          ],
           "logger": "console"
         },
         "level": "log",
@@ -119,5 +121,16 @@
       "some-extra": "extra-value"
     }
   },
-  "attachments": [ { "type": "attachment", "length": 12, "filename": "attachment.txt" } ]
+  "attachments": [
+    {
+      "type": "attachment",
+      "length": 15,
+      "filename": "screenshot.png"
+    },
+    {
+      "type": "attachment",
+      "length": 12,
+      "filename": "attachment.txt"
+    }
+  ]
 }
diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html b/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html
index 3cf5b517..c1368cf2 100644
--- a/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html
+++ b/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html
@@ -9,6 +9,10 @@
 
       init({
         debug: true,
+        beforeSend: (event, hint) => {
+          hint.attachments = [{ filename: 'screenshot.png', data: 'captureScreen()' }, ...(hint.attachments || [])];
+          return event;
+        },
       });
 
       configureScope((scope) => {
diff --git a/test/e2e/test-apps/other/screenshots/event.json b/test/e2e/test-apps/other/screenshots/event.json
index 7ac4c12f..ed62d1a4 100644
--- a/test/e2e/test-apps/other/screenshots/event.json
+++ b/test/e2e/test-apps/other/screenshots/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]
diff --git a/test/e2e/test-apps/sessions/javascript-error/event.json b/test/e2e/test-apps/sessions/javascript-error/event.json
index 994a78a3..57228daa 100644
--- a/test/e2e/test-apps/sessions/javascript-error/event.json
+++ b/test/e2e/test-apps/sessions/javascript-error/event.json
@@ -76,7 +76,7 @@
           },
           "mechanism": {
             "handled": true,
-            "type": "generic"
+            "type": "instrument"
           }
         }
       ]

From ed784c3f99a08f619b17520e8908adb7298881c2 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 9 Jan 2023 21:20:26 +0000
Subject: [PATCH 058/239] fix: Use `POST` for main process ping so it does not
 result in fetch breadcrumb (#612)

---
 src/renderer/ipc.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts
index a865c5e8..1de7d225 100644
--- a/src/renderer/ipc.ts
+++ b/src/renderer/ipc.ts
@@ -13,7 +13,7 @@ function getImplementation(): IPCInterface {
 
   logger.log('IPC was not configured in preload script, falling back to custom protocol and fetch');
 
-  fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}/sentry_key`).catch(() =>
+  fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}/sentry_key`, { method: 'POST', body: '' }).catch(() =>
     console.error(`Sentry SDK failed to establish connection with the Electron main process.
  - Ensure you have initialized the SDK in the main process
  - If your renderers use custom sessions, be sure to set 'getSessions' in the main process options
@@ -47,7 +47,7 @@ let cachedInterface: IPCInterface | undefined;
  * Renderer IPC interface
  *
  * Favours IPC if its been exposed via a preload script but will
- * fallback to custom protocol and fetch is IPC is not available
+ * fallback to custom protocol and fetch if IPC is not available
  */
 export function getIPC(): IPCInterface {
   if (!cachedInterface) {

From a2b6cd7986ea0b57c300cc04209a2a9358f625ea Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 9 Jan 2023 21:20:51 +0000
Subject: [PATCH 059/239] CI: Auto SDK update PRs (#608)

---
 ...ns-pr.yml => new-electron-versions-pr.yml} |   0
 .github/workflows/new-sdk-versions-pr.yml     |  26 +++
 package.json                                  |   7 +-
 scripts/update-sdk-versions.mjs               |  37 +++
 yarn.lock                                     | 210 +++++++++++++++++-
 5 files changed, 273 insertions(+), 7 deletions(-)
 rename .github/workflows/{new-versions-pr.yml => new-electron-versions-pr.yml} (100%)
 create mode 100644 .github/workflows/new-sdk-versions-pr.yml
 create mode 100644 scripts/update-sdk-versions.mjs

diff --git a/.github/workflows/new-versions-pr.yml b/.github/workflows/new-electron-versions-pr.yml
similarity index 100%
rename from .github/workflows/new-versions-pr.yml
rename to .github/workflows/new-electron-versions-pr.yml
diff --git a/.github/workflows/new-sdk-versions-pr.yml b/.github/workflows/new-sdk-versions-pr.yml
new file mode 100644
index 00000000..c93cb9ac
--- /dev/null
+++ b/.github/workflows/new-sdk-versions-pr.yml
@@ -0,0 +1,26 @@
+name: Create PR for new SDK versions
+on:
+  schedule:
+    # At 9am every day
+    - cron: '0 9 * * *'
+
+jobs:
+  test:
+    name: Check new versions
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: volta-cli/action@v3
+      - run: yarn install
+      - name: Update Versions
+        run: yarn update-sdk-versions
+      - name: Create Pull Request
+        uses: peter-evans/create-pull-request@v3
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+          branch: test/new-sdk-version
+          delete-branch: true
+          title: 'test: New Sentry SDK version'
+          commit-message: 'test: New Sentry SDK version'
+          body: |
+            Automatically generated PR to test new Sentry SDK version
diff --git a/package.json b/package.json
index 7d342e27..aa74db50 100644
--- a/package.json
+++ b/package.json
@@ -45,6 +45,7 @@
     "clean": "rimraf coverage esm main preload renderer index.* integrations.* ipc.* sentry-electron*.tgz",
     "prelint": "node scripts/update-version.js",
     "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json",
+    "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs",
     "lint": "run-s lint:prettier lint:eslint",
     "lint:prettier": "prettier --check \"{src,test}/**/*.ts\"",
     "lint:eslint": "eslint . --cache --format stylish",
@@ -83,15 +84,15 @@
     "chai-as-promised": "^7.1.1",
     "chai-subset": "^1.6.0",
     "cross-env": "^7.0.3",
-    "eslint": "7.27.0",
     "electron": "19.1.8",
-    "@electron/get": "^1.13.0",
-    "electron-mocha": "^11.0.0",
     "electron-latest-versions": "^0.2.0",
+    "electron-mocha": "^11.0.0",
+    "eslint": "7.27.0",
     "extract-zip": "^2.0.1",
     "koa": "^2.13.4",
     "koa-bodyparser": "^4.3.0",
     "koa-tree-router": "^0.8.0",
+    "latest-version": "^7.0.0",
     "mocha": "^9.1.3",
     "npm-run-all": "^4.1.5",
     "prettier": "^2.4.1",
diff --git a/scripts/update-sdk-versions.mjs b/scripts/update-sdk-versions.mjs
new file mode 100644
index 00000000..8c99e06f
--- /dev/null
+++ b/scripts/update-sdk-versions.mjs
@@ -0,0 +1,37 @@
+import latestVersion from 'latest-version';
+import { spawnSync } from 'child_process';
+import { readFileSync, writeFileSync } from 'fs';
+import { join } from 'path';
+import { fileURLToPath } from 'url';
+
+const __dirname = fileURLToPath(new URL('.', import.meta.url));
+
+const latest = await latestVersion('@sentry/core');
+const packageJsonPath = join(__dirname, '..', 'package.json');
+const packageJson = JSON.parse(readFileSync(packageJsonPath, { encoding: 'utf8' }));
+const current = packageJson.dependencies['@sentry/core'];
+
+if (current !== latest) {
+  console.log(`Updating Sentry deps from ${current} to ${latest}`);
+
+  const re = /^@sentry(-internal)?\//;
+
+  for (const dep of Object.keys(packageJson.dependencies)) {
+    if (dep.match(re)) {
+      packageJson.dependencies[dep] = latest;
+    }
+  }
+
+  for (const dep of Object.keys(packageJson.devDependencies)) {
+    if (dep.match(re)) {
+      packageJson.devDependencies[dep] = latest;
+    }
+  }
+
+  writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
+
+  // Update yarn.lock
+  spawnSync('yarn', ['install'], { stdio: 'inherit' });
+  // Update parameter that has the version in it
+  spawnSync('yarn', ['build'], { stdio: 'inherit' });
+}
diff --git a/yarn.lock b/yarn.lock
index 17efdde5..7fe68678 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -30,7 +30,7 @@
   dependencies:
     "@jridgewell/trace-mapping" "0.3.9"
 
-"@electron/get@^1.13.0", "@electron/get@^1.14.1":
+"@electron/get@^1.14.1":
   version "1.14.1"
   resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40"
   integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==
@@ -100,6 +100,21 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
+"@pnpm/network.ca-file@^1.0.1":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983"
+  integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==
+  dependencies:
+    graceful-fs "4.2.10"
+
+"@pnpm/npm-conf@^1.0.4":
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz#3475541fb71d7b6ce68acaaa3392eae9fedf3276"
+  integrity sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==
+  dependencies:
+    "@pnpm/network.ca-file" "^1.0.1"
+    config-chain "^1.1.11"
+
 "@sentry-internal/eslint-config-sdk@7.29.0":
   version "7.29.0"
   resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.29.0.tgz#ea0e24e0edcc4daf00c76876b809697ce36ded06"
@@ -197,6 +212,11 @@
   resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
   integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
 
+"@sindresorhus/is@^5.2.0":
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc"
+  integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==
+
 "@szmarczak/http-timer@^1.1.2":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
@@ -204,6 +224,13 @@
   dependencies:
     defer-to-connect "^1.0.1"
 
+"@szmarczak/http-timer@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a"
+  integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==
+  dependencies:
+    defer-to-connect "^2.0.1"
+
 "@tsconfig/node10@^1.0.7":
   version "1.0.8"
   resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
@@ -323,6 +350,11 @@
   resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661"
   integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==
 
+"@types/http-cache-semantics@^4.0.1":
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
+  integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
+
 "@types/http-errors@*":
   version "1.8.2"
   resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.2.tgz#7315b4c4c54f82d13fa61c228ec5c2ea5cc9e0e1"
@@ -754,6 +786,24 @@ cache-content-type@^1.0.0:
     mime-types "^2.1.18"
     ylru "^1.2.0"
 
+cacheable-lookup@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27"
+  integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==
+
+cacheable-request@^10.2.1:
+  version "10.2.5"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.5.tgz#7bf5fbdb4f51dc2537fb5f02a3f8a5aefd2d0f36"
+  integrity sha512-5RwYYCfzjNPsyJxb/QpaM0bfzx+kw5/YpDhZPm9oMIDntHFQ9YXeyV47ZvzlTE0XrrrbyO2UITJH4GF9eRLdXQ==
+  dependencies:
+    "@types/http-cache-semantics" "^4.0.1"
+    get-stream "^6.0.1"
+    http-cache-semantics "^4.1.0"
+    keyv "^4.5.2"
+    mimic-response "^4.0.0"
+    normalize-url "^8.0.0"
+    responselike "^3.0.0"
+
 cacheable-request@^6.0.0:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
@@ -1044,6 +1094,13 @@ decompress-response@^3.3.0:
   dependencies:
     mimic-response "^1.0.0"
 
+decompress-response@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+  integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+  dependencies:
+    mimic-response "^3.1.0"
+
 deep-eql@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
@@ -1056,6 +1113,11 @@ deep-equal@~1.0.1:
   resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
   integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
 
+deep-extend@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
 deep-is@^0.1.3:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
@@ -1071,6 +1133,11 @@ defer-to-connect@^1.0.1:
   resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
   integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
 
+defer-to-connect@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+  integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
 define-properties@^1.1.3, define-properties@^1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
@@ -1600,6 +1667,11 @@ flatted@^3.1.0:
   resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
   integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
 
+form-data-encoder@^2.1.2:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5"
+  integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==
+
 form-data@*:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
@@ -1705,6 +1777,11 @@ get-stream@^5.1.0:
   dependencies:
     pump "^3.0.0"
 
+get-stream@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
 get-symbol-description@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
@@ -1792,6 +1869,23 @@ globby@^11.1.0:
     merge2 "^1.4.1"
     slash "^3.0.0"
 
+got@^12.1.0:
+  version "12.5.3"
+  resolved "https://registry.yarnpkg.com/got/-/got-12.5.3.tgz#82bdca2dd61258a02e24d668ea6e7abb70ac3598"
+  integrity sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w==
+  dependencies:
+    "@sindresorhus/is" "^5.2.0"
+    "@szmarczak/http-timer" "^5.0.1"
+    cacheable-lookup "^7.0.0"
+    cacheable-request "^10.2.1"
+    decompress-response "^6.0.0"
+    form-data-encoder "^2.1.2"
+    get-stream "^6.0.1"
+    http2-wrapper "^2.1.10"
+    lowercase-keys "^3.0.0"
+    p-cancelable "^3.0.0"
+    responselike "^3.0.0"
+
 got@^9.6.0:
   version "9.6.0"
   resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
@@ -1809,7 +1903,7 @@ got@^9.6.0:
     to-readable-stream "^1.0.0"
     url-parse-lax "^3.0.0"
 
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
   version "4.2.10"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
   integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
@@ -1878,7 +1972,7 @@ http-assert@^1.3.0:
     deep-equal "~1.0.1"
     http-errors "~1.8.0"
 
-http-cache-semantics@^4.0.0:
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
   integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
@@ -1905,6 +1999,14 @@ http-errors@^1.6.3, http-errors@~1.8.0:
     statuses ">= 1.5.0 < 2"
     toidentifier "1.0.1"
 
+http2-wrapper@^2.1.10:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3"
+  integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==
+  dependencies:
+    quick-lru "^5.1.1"
+    resolve-alpn "^1.2.0"
+
 https-proxy-agent@^5.0.0:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
@@ -1961,7 +2063,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3:
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
 
-ini@^1.3.4:
+ini@^1.3.4, ini@~1.3.0:
   version "1.3.8"
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
   integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
@@ -2153,6 +2255,11 @@ json-buffer@3.0.0:
   resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
   integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
 
+json-buffer@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+  integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
 json-parse-better-errors@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -2215,6 +2322,13 @@ keyv@^3.0.0:
   dependencies:
     json-buffer "3.0.0"
 
+keyv@^4.5.2:
+  version "4.5.2"
+  resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56"
+  integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==
+  dependencies:
+    json-buffer "3.0.1"
+
 koa-bodyparser@^4.3.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a"
@@ -2273,6 +2387,13 @@ koa@^2.13.4:
     type-is "^1.6.16"
     vary "^1.1.2"
 
+latest-version@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da"
+  integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==
+  dependencies:
+    package-json "^8.1.0"
+
 levn@^0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
@@ -2346,6 +2467,11 @@ lowercase-keys@^2.0.0:
   resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
   integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
 
+lowercase-keys@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2"
+  integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==
+
 lru-cache@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -2410,6 +2536,16 @@ mimic-response@^1.0.0, mimic-response@^1.0.1:
   resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
   integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
 
+mimic-response@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+  integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+mimic-response@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f"
+  integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==
+
 minimatch@4.2.1:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4"
@@ -2521,6 +2657,11 @@ normalize-url@^4.1.0:
   resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
   integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
 
+normalize-url@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a"
+  integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==
+
 npm-conf@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
@@ -2609,6 +2750,11 @@ p-cancelable@^1.0.0:
   resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
   integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
 
+p-cancelable@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050"
+  integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==
+
 p-limit@^1.1.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
@@ -2642,6 +2788,16 @@ p-try@^1.0.0:
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
   integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
 
+package-json@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.0.tgz#2a22806f1ed7c786c8e6ff26cfe20003bf4c6850"
+  integrity sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==
+  dependencies:
+    got "^12.1.0"
+    registry-auth-token "^5.0.1"
+    registry-url "^6.0.0"
+    semver "^7.3.7"
+
 parent-module@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -2784,6 +2940,11 @@ queue-microtask@^1.2.2:
   resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
   integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
 
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
 randombytes@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -2801,6 +2962,16 @@ raw-body@^2.3.3:
     iconv-lite "0.4.24"
     unpipe "1.0.0"
 
+rc@1.2.8:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+  dependencies:
+    deep-extend "^0.6.0"
+    ini "~1.3.0"
+    minimist "^1.2.0"
+    strip-json-comments "~2.0.1"
+
 read-pkg@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
@@ -2849,6 +3020,20 @@ regextras@^0.7.1:
   resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2"
   integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==
 
+registry-auth-token@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.1.tgz#5e6cd106e6c251135a046650c58476fc03e92833"
+  integrity sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==
+  dependencies:
+    "@pnpm/npm-conf" "^1.0.4"
+
+registry-url@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58"
+  integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==
+  dependencies:
+    rc "1.2.8"
+
 require-directory@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -2864,6 +3049,11 @@ requireindex@~1.1.0:
   resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162"
   integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI=
 
+resolve-alpn@^1.2.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+  integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
 resolve-from@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -2885,6 +3075,13 @@ responselike@^1.0.2:
   dependencies:
     lowercase-keys "^1.0.0"
 
+responselike@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626"
+  integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==
+  dependencies:
+    lowercase-keys "^3.0.0"
+
 reusify@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -3142,6 +3339,11 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
 
+strip-json-comments@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
 sumchecker@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"

From 207b211da9715ebd19c2dbc5f59491907ba31be9 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 11 Jan 2023 11:39:38 +0000
Subject: [PATCH 060/239] feat: Support browser Replay in renderers (#618)

---
 .eslintrc.js                                  |    1 +
 package.json                                  |   18 +-
 src/common/normalize.ts                       |   31 +-
 src/main/electron-normalize.ts                |    2 +-
 src/main/integrations/electron-minidump.ts    |    4 +-
 .../sentry-minidump/minidump-loader.ts        |    2 +-
 src/main/ipc.ts                               |    9 +-
 src/renderer/sdk.ts                           |    2 +-
 test/e2e/recipe/index.ts                      |    1 +
 test/e2e/recipe/normalize.ts                  |   26 +-
 test/e2e/server/index.ts                      |   21 +-
 .../other/browser-replay/event-replay.json    |   30 +
 .../test-apps/other/browser-replay/event.json |   99 ++
 .../other/browser-replay/package.json         |    9 +
 .../test-apps/other/browser-replay/recipe.yml |    2 +
 .../other/browser-replay/src/index.html       |   23 +
 .../other/browser-replay/src/main.js          |   23 +
 yarn.lock                                     | 1023 +++++++++--------
 18 files changed, 808 insertions(+), 518 deletions(-)
 create mode 100644 test/e2e/test-apps/other/browser-replay/event-replay.json
 create mode 100644 test/e2e/test-apps/other/browser-replay/event.json
 create mode 100644 test/e2e/test-apps/other/browser-replay/package.json
 create mode 100644 test/e2e/test-apps/other/browser-replay/recipe.yml
 create mode 100644 test/e2e/test-apps/other/browser-replay/src/index.html
 create mode 100644 test/e2e/test-apps/other/browser-replay/src/main.js

diff --git a/.eslintrc.js b/.eslintrc.js
index 45739519..cf84dff0 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -32,6 +32,7 @@ module.exports = {
       rules: {
         'no-console': 'off',
         '@typescript-eslint/no-unsafe-member-access': 'off',
+        '@typescript-eslint/member-ordering': 'off',
       },
     },
   ],
diff --git a/package.json b/package.json
index aa74db50..a0ea20d0 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.29.0",
-    "@sentry/core": "7.29.0",
-    "@sentry/node": "7.29.0",
-    "@sentry/types": "7.29.0",
-    "@sentry/utils": "7.29.0",
+    "@sentry/browser": "7.30.0",
+    "@sentry/core": "7.30.0",
+    "@sentry/node": "7.30.0",
+    "@sentry/types": "7.30.0",
+    "@sentry/utils": "7.30.0",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.29.0",
-    "@sentry-internal/typescript": "7.29.0",
-    "@sentry/tracing": "7.29.0",
+    "@sentry-internal/eslint-config-sdk": "7.30.0",
+    "@sentry-internal/typescript": "7.30.0",
+    "@sentry/tracing": "7.30.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -87,7 +87,7 @@
     "electron": "19.1.8",
     "electron-latest-versions": "^0.2.0",
     "electron-mocha": "^11.0.0",
-    "eslint": "7.27.0",
+    "eslint": "7.32.0",
     "extract-zip": "^2.0.1",
     "koa": "^2.13.4",
     "koa-bodyparser": "^4.3.0",
diff --git a/src/common/normalize.ts b/src/common/normalize.ts
index d21714d1..5199784f 100644
--- a/src/common/normalize.ts
+++ b/src/common/normalize.ts
@@ -1,4 +1,5 @@
-import { Event } from '@sentry/types';
+import { Envelope, Event, ReplayEvent } from '@sentry/types';
+import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem } from '@sentry/utils';
 
 /**
  * Normalizes URLs in exceptions and stacktraces so Sentry can fingerprint
@@ -76,3 +77,31 @@ export function normalizeEvent(event: Event, basePath: string): Event {
   delete event.server_name;
   return event;
 }
+
+/** Normalizes URLs in any replay_event items found in an envelope */
+export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: string): Envelope {
+  let modifiedEnvelope = createEnvelope(envelope[0]);
+
+  let isReplay = false;
+
+  forEachEnvelopeItem(envelope, (item, type) => {
+    if (type === 'replay_event') {
+      isReplay = true;
+      const [headers, event] = item as [{ type: 'replay_event' }, ReplayEvent];
+
+      if (Array.isArray(event.urls)) {
+        event.urls = event.urls.map((url) => normalizeUrl(url, basePath));
+      }
+
+      if (event?.request?.url) {
+        event.request.url = normalizeUrl(event.request.url, basePath);
+      }
+
+      modifiedEnvelope = addItemToEnvelope(modifiedEnvelope, [headers, event]);
+    } else if (type === 'replay_recording') {
+      modifiedEnvelope = addItemToEnvelope(modifiedEnvelope, item);
+    }
+  });
+
+  return isReplay ? modifiedEnvelope : envelope;
+}
diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts
index ad11ad02..8c0ca940 100644
--- a/src/main/electron-normalize.ts
+++ b/src/main/electron-normalize.ts
@@ -43,7 +43,7 @@ export const EXIT_REASONS = [
   'launch-failed',
   'integrity-failure',
 ] as const;
-export type ExitReason = typeof EXIT_REASONS[number];
+export type ExitReason = (typeof EXIT_REASONS)[number];
 export const CRASH_REASONS: Readonly<ExitReason[]> = ['crashed', 'oom'] as const;
 
 /** Same as the Electron interface but with optional exitCode */
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index 7891050c..bc4706ba 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -206,8 +206,8 @@ export class ElectronMinidump implements Integration {
       if (i < 0) i = buf.indexOf(32, maxBytes);
       // We couldn't find any space or quote chars so split at maxBytes and hope for the best 🤷‍♂️
       if (i < 0) i = maxBytes;
-      chunks.push(buf.slice(0, i + 1).toString());
-      buf = buf.slice(i + 1);
+      chunks.push(buf.subarray(0, i + 1).toString());
+      buf = buf.subarray(i + 1);
     }
 
     return chunks.reduce((acc, cur, i) => {
diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts
index 426e23e5..93022868 100644
--- a/src/main/integrations/sentry-minidump/minidump-loader.ts
+++ b/src/main/integrations/sentry-minidump/minidump-loader.ts
@@ -132,7 +132,7 @@ function minidumpFromBreakpadMultipart(file: Buffer): Buffer | undefined {
     const dumpEnd = file.lastIndexOf('----------------------------');
 
     if (dumpStart > 0 && dumpEnd > 0 && dumpEnd > dumpStart) {
-      return file.slice(dumpStart, dumpEnd);
+      return file.subarray(dumpStart, dumpEnd);
     }
   }
 
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 30cae0ab..6f8ed30b 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -4,7 +4,7 @@ import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry
 import { app, ipcMain, protocol, WebContents } from 'electron';
 import { TextDecoder, TextEncoder } from 'util';
 
-import { IPCChannel, IPCMode, mergeEvents, PROTOCOL_SCHEME } from '../common';
+import { IPCChannel, IPCMode, mergeEvents, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME } from '../common';
 import { supportsFullProtocol, whenAppReady } from './electron-normalize';
 import { ElectronMainOptionsInternal } from './sdk';
 
@@ -50,13 +50,13 @@ function eventFromEnvelope(envelope: Envelope): [Event, Attachment[]] | undefine
     if (type === 'event' || type === 'transaction') {
       event = Array.isArray(item) ? (item as EventItem)[1] : undefined;
     } else if (type === 'attachment') {
-      const [headers, bin] = item as AttachmentItem;
+      const [headers, data] = item as AttachmentItem;
 
       attachments.push({
         filename: headers.filename,
         attachmentType: headers.attachment_type,
         contentType: headers.content_type,
-        data: bin,
+        data,
       });
     }
   });
@@ -72,8 +72,9 @@ function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array |
     const [event, attachments] = eventAndAttachments;
     captureEventFromRenderer(options, event, attachments, contents);
   } else {
+    const normalizedEnvelope = normalizeUrlsInReplayEnvelope(envelope, app.getAppPath());
     // Pass other types of envelope straight to the transport
-    void getCurrentHub().getClient()?.getTransport()?.send(envelope);
+    void getCurrentHub().getClient()?.getTransport()?.send(normalizedEnvelope);
   }
 }
 
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 6bd2259f..39f8bbfd 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_29_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_30_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index 5f6419a7..d79dc9af 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -125,6 +125,7 @@ export class RecipeRunner {
             `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`,
           )
           // We replace the Sentry JavaScript dependency versions to match that of @sentry/electron
+          .replace(/"@sentry\/replay": ".*"/, `"@sentry/replay": "${JS_VERSION}"`)
           .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${JS_VERSION}"`)
           .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`)
           .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`);
diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts
index 31721cec..ee2ac75a 100644
--- a/test/e2e/recipe/normalize.ts
+++ b/test/e2e/recipe/normalize.ts
@@ -1,5 +1,5 @@
 /* eslint-disable complexity */
-import { Event, Session, Transaction } from '@sentry/types';
+import { Event, ReplayEvent, Session, Transaction } from '@sentry/types';
 
 type EventOrSession = Event | Transaction | Session;
 
@@ -7,7 +7,7 @@ export function normalize(event: EventOrSession): EventOrSession {
   if (eventIsSession(event)) {
     return normalizeSession(event as Session);
   } else {
-    return normalizeEvent(event as Event);
+    return normalizeEvent(event as Event & ReplayEvent);
   }
 }
 
@@ -47,13 +47,13 @@ function normalizeSession(session: Session): Session {
  * All properties that are timestamps, versions, ids or variables that may vary
  * by platform are replaced with placeholder strings
  */
-function normalizeEvent(event: Event): Event {
+function normalizeEvent(event: Event & ReplayEvent): Event {
   if (event.sdk?.version) {
     event.sdk.version = '{{version}}';
   }
 
   if (event?.sdk?.packages) {
-    for (const pkg of event?.sdk?.packages) {
+    for (const pkg of event?.sdk?.packages || []) {
       if (pkg.version) {
         pkg.version = '{{version}}';
       }
@@ -126,12 +126,28 @@ function normalizeEvent(event: Event): Event {
     delete event.contexts.trace.tags;
   }
 
+  if (event?.tags?.replayId) {
+    event.tags.replayId = '{{replay_id}}';
+  }
+
+  if (event.replay_id) {
+    event.replay_id = '{{id}}';
+  }
+
+  if ((event as any).replay_start_timestamp) {
+    (event as any).replay_start_timestamp = 0;
+  }
+
+  if (Array.isArray(event.error_ids) && event.error_ids.length > 0) {
+    event.error_ids = ['{{id}}'];
+  }
+
   if (event.start_timestamp) {
     event.start_timestamp = 0;
   }
 
   if (event.exception?.values?.[0].stacktrace?.frames) {
-    for (const frame of event.exception?.values?.[0].stacktrace?.frames) {
+    for (const frame of event.exception?.values?.[0].stacktrace?.frames || []) {
       frame.colno = 0;
       frame.lineno = 0;
       frame.function = '{{function}}';
diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts
index 81b20188..00261aac 100644
--- a/test/e2e/server/index.ts
+++ b/test/e2e/server/index.ts
@@ -1,4 +1,4 @@
-import { Event, Session, Transaction } from '@sentry/types';
+import { Event, ReplayEvent, Session, Transaction } from '@sentry/types';
 import { forEachEnvelopeItem, parseEnvelope } from '@sentry/utils';
 import { Server } from 'http';
 import Koa from 'koa';
@@ -112,7 +112,7 @@ export class TestServer {
 
       const envelope = parseEnvelope(await getRequestBody(ctx), new TextEncoder(), new TextDecoder());
 
-      let data: Event | Transaction | Session | undefined;
+      let data: Event | Transaction | Session | ReplayEvent | undefined;
       const attachments: Attachment[] = [];
 
       forEachEnvelopeItem(envelope, ([headers, item]) => {
@@ -120,6 +120,14 @@ export class TestServer {
           data = item as Event | Transaction | Session;
         }
 
+        if (headers.type === 'replay_event') {
+          const replayItem = item as ReplayEvent;
+          // We only want to capture replay events that link up to errors as there may be others we don't care about
+          if (Array.isArray(replayItem.error_ids) && replayItem.error_ids.length > 0) {
+            data = replayItem;
+          }
+        }
+
         if (headers.type === 'attachment') {
           attachments.push(headers);
         }
@@ -230,8 +238,13 @@ export class TestServer {
     });
   }
 
-  private _addEvent(event: TestServerEvent<Event | Transaction | Session>): void {
-    const type = eventIsSession(event.data) ? 'session' : 'event';
+  private _addEvent(event: TestServerEvent<Event | Transaction | Session | ReplayEvent>): void {
+    const type = eventIsSession(event.data)
+      ? 'session'
+      : (event.data as ReplayEvent)?.type === 'replay_event'
+      ? 'replay'
+      : 'event';
+
     log(`Received '${type}' on '${event.method}' endpoint`, inspect(event, false, null, true));
     this.events.push(event);
   }
diff --git a/test/e2e/test-apps/other/browser-replay/event-replay.json b/test/e2e/test-apps/other/browser-replay/event-replay.json
new file mode 100644
index 00000000..221294a7
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-replay/event-replay.json
@@ -0,0 +1,30 @@
+{
+  "data": {
+    "type": "replay_event",
+    "replay_start_timestamp": 0,
+    "timestamp": 0,
+    "error_ids": [
+      "{{id}}"
+    ],
+    "trace_ids": [],
+    "urls": [
+      "app:///src/index.html"
+    ],
+    "replay_id": "{{id}}",
+    "segment_id": 0,
+    "replay_type": "error",
+    "event_id": "{{id}}",
+    "environment": "production",
+    "sdk": {
+      "version": "{{version}}",
+      "name": "sentry.javascript.browser"
+    },
+    "request": {
+      "url": "app:///src/index.html"
+    },
+    "platform": "javascript"
+  },
+  "attachments": [],
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope"
+}
diff --git a/test/e2e/test-apps/other/browser-replay/event.json b/test/e2e/test-apps/other/browser-replay/event.json
new file mode 100644
index 00000000..17c18c26
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-replay/event.json
@@ -0,0 +1,99 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "browser-replay",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution":"{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "release": "browser-replay@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "exception": {
+      "values": [
+        {
+          "type": "Error",
+          "value": "Some renderer error",
+          "stacktrace": {
+            "frames": [
+              {
+                "colno": 0,
+                "filename": "app:///src/index.html",
+                "function": "{{function}}",
+                "in_app": true,
+                "lineno": 0
+              }
+            ]
+          },
+          "mechanism": {
+            "handled": true,
+            "type": "instrument"
+          }
+        }
+      ]
+    },
+    "level": "error",
+    "event_id": "{{id}}",
+    "platform": "javascript",
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "request": {
+      "url": "app:///src/index.html"
+    },
+    "tags": {
+      "event.environment": "javascript",
+      "event.origin": "electron",
+      "event.process": "renderer",
+      "event_type": "javascript"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/other/browser-replay/package.json b/test/e2e/test-apps/other/browser-replay/package.json
new file mode 100644
index 00000000..07307186
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-replay/package.json
@@ -0,0 +1,9 @@
+{
+  "name": "browser-replay",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0",
+    "@sentry/replay": "7.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/browser-replay/recipe.yml b/test/e2e/test-apps/other/browser-replay/recipe.yml
new file mode 100644
index 00000000..87c4f72e
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-replay/recipe.yml
@@ -0,0 +1,2 @@
+description: Browser Replay
+command: yarn
diff --git a/test/e2e/test-apps/other/browser-replay/src/index.html b/test/e2e/test-apps/other/browser-replay/src/index.html
new file mode 100644
index 00000000..6d4d5897
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-replay/src/index.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+      const { Replay } = require('@sentry/replay');
+
+      init({
+        debug: true,
+        integrations: [new Replay()],
+        replaysSessionSampleRate: 0,
+        replaysOnErrorSampleRate: 1,
+      });
+
+      setTimeout(() => {
+        throw new Error('Some renderer error');
+      }, 1000);
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/other/browser-replay/src/main.js b/test/e2e/test-apps/other/browser-replay/src/main.js
new file mode 100644
index 00000000..bede8faa
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-replay/src/main.js
@@ -0,0 +1,23 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+});
diff --git a/yarn.lock b/yarn.lock
index 7fe68678..09cc5417 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,17 +9,17 @@
   dependencies:
     "@babel/highlight" "^7.10.4"
 
-"@babel/helper-validator-identifier@^7.16.7":
-  version "7.16.7"
-  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
-  integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
+"@babel/helper-validator-identifier@^7.18.6":
+  version "7.19.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
+  integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
 
 "@babel/highlight@^7.10.4":
-  version "7.17.12"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351"
-  integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
+  integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
   dependencies:
-    "@babel/helper-validator-identifier" "^7.16.7"
+    "@babel/helper-validator-identifier" "^7.18.6"
     chalk "^2.0.0"
     js-tokens "^4.0.0"
 
@@ -46,7 +46,7 @@
     global-agent "^3.0.0"
     global-tunnel-ng "^2.7.1"
 
-"@eslint/eslintrc@^0.4.1":
+"@eslint/eslintrc@^0.4.3":
   version "0.4.3"
   resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
   integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==
@@ -61,15 +61,29 @@
     minimatch "^3.0.4"
     strip-json-comments "^3.1.1"
 
+"@humanwhocodes/config-array@^0.5.0":
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
+  integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
+  dependencies:
+    "@humanwhocodes/object-schema" "^1.2.0"
+    debug "^4.1.1"
+    minimatch "^3.0.4"
+
+"@humanwhocodes/object-schema@^1.2.0":
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
 "@jridgewell/resolve-uri@^3.0.3":
-  version "3.0.7"
-  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe"
-  integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
 
 "@jridgewell/sourcemap-codec@^1.4.10":
-  version "1.4.13"
-  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c"
-  integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==
+  version "1.4.14"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
 
 "@jridgewell/trace-mapping@0.3.9":
   version "0.3.9"
@@ -115,96 +129,96 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.29.0.tgz#ea0e24e0edcc4daf00c76876b809697ce36ded06"
-  integrity sha512-2173bQkiuSjCY8a3JubgEo+JPMXPObIjcMK9kQhPFmNv4kn8AcnLOUO5fzN/4Bm9PNzuLSqJeJgJrgh0K/rBsw==
+"@sentry-internal/eslint-config-sdk@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.30.0.tgz#f527d00a9350601d343ec121aa8a19b23582fe1b"
+  integrity sha512-VhX0qRtC3GOD15YsK4oGmK2NeIErEChswX44X0bi3zvjMOSZCRM8w8YrtgCvbSBe2xrZyZnqRG/nxIOejuNHWw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.29.0"
-    "@sentry-internal/typescript" "7.29.0"
-    "@typescript-eslint/eslint-plugin" "^3.9.0"
-    "@typescript-eslint/parser" "^3.9.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.30.0"
+    "@sentry-internal/typescript" "7.30.0"
+    "@typescript-eslint/eslint-plugin" "^5.48.0"
+    "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
     eslint-plugin-deprecation "^1.1.0"
     eslint-plugin-import "^2.22.0"
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.29.0.tgz#f8d10edd65ec272cfb01b56ca148874baf2ff9aa"
-  integrity sha512-bhJNEKMR0rPaL+++HiPYXtsRXBV7fyX69IcbluLGXTNk8IvSbwxVl/jKZDO5pterE312oqBlkCHnQidYmqd3Zg==
+"@sentry-internal/eslint-plugin-sdk@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.30.0.tgz#daeee31f3cb167142bee4b35a6c5ac24d943fd45"
+  integrity sha512-1YOyrNYfv63wU42a+ezd/SX7bz/wn5ER+HPkbWCW/UpJn/HFVGke5/EHC7HBWcY/YBMDwIFfbP3ecOYwFWRzpA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.29.0.tgz#4ea3133d4d0056a5c7f89f58ad26f1c1062d11ad"
-  integrity sha512-WB1ncGZ8IjM2N/hGD01mYoWIoVUcuCMXZIaejXxYnhnIdBv+jTsO7UiRa66IsCyl1QGQMNPyMGsgCoqqwctQPQ==
+"@sentry-internal/typescript@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.30.0.tgz#c03648c670ca29d9c0f2d8f54ccefd46a38b9e1b"
+  integrity sha512-jQVCOXQ0tcGofvqLD3V+grcqC1I+WSCTAB5qoJOS567zoBOxj4NSz69yDxkrsLjVO1Pf5qrQhhvKkE1T7AiX5g==
 
-"@sentry/browser@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.29.0.tgz#eb162b50adec33ac49ecd3dc930bdffbfda8098e"
-  integrity sha512-Af+dIcntaw405Wt7myDOMGDxiszfy4aBdshrEKYbGgcfHjgXBIdF3iKlNatvl6nrOm+IOVuKgSpCLOr2hiCwzw==
+"@sentry/browser@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.30.0.tgz#9b4387da933290546b7a4ef521713c38723a0213"
+  integrity sha512-9hpaNAqIBDLdnrZ51iWkqenRotqqweE1f2AlHO56nyT/UE+u+GdmAiBrgRNqdFQQM13JtTG/gu4HGOyLWb9HEA==
   dependencies:
-    "@sentry/core" "7.29.0"
-    "@sentry/replay" "7.29.0"
-    "@sentry/types" "7.29.0"
-    "@sentry/utils" "7.29.0"
+    "@sentry/core" "7.30.0"
+    "@sentry/replay" "7.30.0"
+    "@sentry/types" "7.30.0"
+    "@sentry/utils" "7.30.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.29.0.tgz#bc4b54d56cf7652598d4430cf43ea97cc069f6fe"
-  integrity sha512-+e9aIp2ljtT4EJq3901z6TfEVEeqZd5cWzbKEuQzPn2UO6If9+Utd7kY2Y31eQYb4QnJgZfiIEz1HonuYY6zqQ==
+"@sentry/core@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.30.0.tgz#02d2e8747484ba64b6d712e8afe6736250efdc26"
+  integrity sha512-NeLigkBlpcK63ymM63GoIHurml6V3BUe1Vi+trwm4/qqOTzT7PQhvdJCX+o3+atzRBH+zdb6kd4VWx44Oye3KA==
   dependencies:
-    "@sentry/types" "7.29.0"
-    "@sentry/utils" "7.29.0"
+    "@sentry/types" "7.30.0"
+    "@sentry/utils" "7.30.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.29.0.tgz#721aab15faef98f291b5a3fcb9b303565deb1e74"
-  integrity sha512-s/bN/JS5gPTmwzVms4FtI5YNYtC9aGY4uqdx/llVrIiVv7G6md/oJJzKtO1C4dt6YshjGjSs5KCpEn1NM4+1iA==
+"@sentry/node@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.30.0.tgz#42ef5b29d065f6de6ac5556a56aca20d3b9073e1"
+  integrity sha512-YYasu6C3I0HBP4N1oc/ed2nunxhGJgtAWaKwq3lo8uk3uF6cB1A8+2e0CpjzU5ejhbaFPUBxHyj4th39Bvku/w==
   dependencies:
-    "@sentry/core" "7.29.0"
-    "@sentry/types" "7.29.0"
-    "@sentry/utils" "7.29.0"
+    "@sentry/core" "7.30.0"
+    "@sentry/types" "7.30.0"
+    "@sentry/utils" "7.30.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.29.0.tgz#75d5bb9df39e0a31994be245032c9998af62a304"
-  integrity sha512-Gw7HgviJQu6pX5RFQGVY38Av4qFn9otrZdwSSl/QK5hIyg6yhlh5h7U0ydZkrYYGiW6Z6SYYRpEWCJc/Wbh+ZQ==
+"@sentry/replay@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.30.0.tgz#44db86956166fc8909459eef8ce94f750c072519"
+  integrity sha512-qJgz1tG0uStqMF5V7gN7KqxZuZY0MMQQY7siwPcSQVYj7X3AQswHjmvD4npEKbIa+jP6aQ6fFjoBjl3c0t3Mmg==
   dependencies:
-    "@sentry/core" "7.29.0"
-    "@sentry/types" "7.29.0"
-    "@sentry/utils" "7.29.0"
+    "@sentry/core" "7.30.0"
+    "@sentry/types" "7.30.0"
+    "@sentry/utils" "7.30.0"
 
-"@sentry/tracing@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.29.0.tgz#767f309cbff46ab12bec6ab3c266f7f03fec91fd"
-  integrity sha512-MAN/G6XROtRhzo/KDjddb6VJn/Q1TaPLwdyj9vvfkUkBNtlt5k16oXp+u7eHWX0uujER9wnZtj2ivXaPeqq0VA==
+"@sentry/tracing@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.30.0.tgz#b4576fbaf81ce418f1b7c37e7e5f4f6cf19a3c3b"
+  integrity sha512-bjGeDeKhpGAmLcWcrXFT/xOfHVwp/j0L1aRHzYHnqgTjVzD0NXcooPu/Nz8vF0paxz+hPD5bJwb8kz/ggJzGWQ==
   dependencies:
-    "@sentry/core" "7.29.0"
-    "@sentry/types" "7.29.0"
-    "@sentry/utils" "7.29.0"
+    "@sentry/core" "7.30.0"
+    "@sentry/types" "7.30.0"
+    "@sentry/utils" "7.30.0"
     tslib "^1.9.3"
 
-"@sentry/types@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.29.0.tgz#ed829b6014ee19049035fec6af2b4fea44ff28b8"
-  integrity sha512-DmoEpoqHPty3VxqubS/5gxarwebHRlcBd/yuno+PS3xy++/i9YPjOWLZhU2jYs1cW68M9R6CcCOiC9f2ckJjdw==
+"@sentry/types@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.30.0.tgz#fc2baeb5b0e1ecc4d52b07b056fcba54449cd9ce"
+  integrity sha512-l4A86typvt/SfWh5JffpdxNGkg5EEA8m35BzpIcKmCAQZUDmnb4b478r8jdD2uuOjLmPNmZr1tifdRW4NCLuxQ==
 
-"@sentry/utils@7.29.0":
-  version "7.29.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.29.0.tgz#cbf8f87dd851b0fdc7870db9c68014c321c3bab8"
-  integrity sha512-ICcBwTiBGK8NQA8H2BJo0JcMN6yCeKLqNKNMVampRgS6wSfSk1edvcTdhRkW3bSktIGrIPZrKskBHyMwDGF2XQ==
+"@sentry/utils@7.30.0":
+  version "7.30.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.30.0.tgz#1d83145399c65e31f725c1b6ae02f451a990f326"
+  integrity sha512-tSlBhr5u/LdE2emxIDTDmjmyRr99GnZGIAh5GwRxUgeDQ3VEfNUFlyFodBCbZ6yeYTYd6PWNih5xoHn1+Rf3Sw==
   dependencies:
-    "@sentry/types" "7.29.0"
+    "@sentry/types" "7.30.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":
@@ -232,24 +246,24 @@
     defer-to-connect "^2.0.1"
 
 "@tsconfig/node10@^1.0.7":
-  version "1.0.8"
-  resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
-  integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
+  integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
 
 "@tsconfig/node12@^1.0.7":
-  version "1.0.9"
-  resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
-  integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
+  integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
 
 "@tsconfig/node14@^1.0.0":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
-  integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
+  integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
 
 "@tsconfig/node16@^1.0.2":
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
-  integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
+  integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
 
 "@types/accepts@*":
   version "1.3.5"
@@ -288,9 +302,9 @@
     "@types/chai" "*"
 
 "@types/chai@*", "@types/chai@^4.2.10":
-  version "4.3.1"
-  resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04"
-  integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4"
+  integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==
 
 "@types/connect@*":
   version "3.4.35"
@@ -314,27 +328,22 @@
     "@types/keygrip" "*"
     "@types/node" "*"
 
-"@types/eslint-visitor-keys@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
-  integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
-
-"@types/express-serve-static-core@^4.17.18":
-  version "4.17.28"
-  resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8"
-  integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==
+"@types/express-serve-static-core@^4.17.31":
+  version "4.17.32"
+  resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82"
+  integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==
   dependencies:
     "@types/node" "*"
     "@types/qs" "*"
     "@types/range-parser" "*"
 
 "@types/express@*":
-  version "4.17.13"
-  resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034"
-  integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==
+  version "4.17.15"
+  resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff"
+  integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==
   dependencies:
     "@types/body-parser" "*"
-    "@types/express-serve-static-core" "^4.17.18"
+    "@types/express-serve-static-core" "^4.17.31"
     "@types/qs" "*"
     "@types/serve-static" "*"
 
@@ -356,11 +365,11 @@
   integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
 
 "@types/http-errors@*":
-  version "1.8.2"
-  resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.2.tgz#7315b4c4c54f82d13fa61c228ec5c2ea5cc9e0e1"
-  integrity sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65"
+  integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==
 
-"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.9":
+"@types/json-schema@^7.0.9":
   version "7.0.11"
   resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
   integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
@@ -376,9 +385,9 @@
   integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
 
 "@types/koa-bodyparser@^4.3.0":
-  version "4.3.7"
-  resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.7.tgz#3ac41f2dec9d97db7a6f798bbb2e2368be762714"
-  integrity sha512-21NhEp7LjZm4zbNV5alHHmrNY4J+S7B8lYTO6CzRL8ShTMnl20Gd14dRgVhAxraLaW5iZMofox+BycbuiDvj2Q==
+  version "4.3.10"
+  resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.10.tgz#02b8d3d57579aa7d491d553f1f4058088bfe127f"
+  integrity sha512-6ae05pjhmrmGhUR8GYD5qr5p9LTEMEGfGXCsK8VaSL+totwigm8+H/7MHW7K4854CMeuwRAubT8qcc/EagaeIA==
   dependencies:
     "@types/koa" "*"
 
@@ -390,9 +399,9 @@
     "@types/koa" "*"
 
 "@types/koa@*", "@types/koa@^2.0.52", "@types/koa@^2.11.6":
-  version "2.13.4"
-  resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.4.tgz#10620b3f24a8027ef5cbae88b393d1b31205726b"
-  integrity sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==
+  version "2.13.5"
+  resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.5.tgz#64b3ca4d54e08c0062e89ec666c9f45443b21a61"
+  integrity sha512-HSUOdzKz3by4fnqagwthW/1w/yJspTgppyyalPVbgZf8jQWvdIXcVW5h2DGtw4zYntOaeRGx49r1hxoPWrD4aA==
   dependencies:
     "@types/accepts" "*"
     "@types/content-disposition" "*"
@@ -403,10 +412,10 @@
     "@types/koa-compose" "*"
     "@types/node" "*"
 
-"@types/mime@^1":
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
-  integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
+"@types/mime@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
+  integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
 
 "@types/mocha@^9.0.0":
   version "9.1.1"
@@ -414,14 +423,14 @@
   integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==
 
 "@types/node@*":
-  version "17.0.35"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.35.tgz#635b7586086d51fb40de0a2ec9d1014a5283ba4a"
-  integrity sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==
+  version "18.11.18"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f"
+  integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==
 
 "@types/node@^16.11.26":
-  version "16.11.43"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.43.tgz#555e5a743f76b6b897d47f945305b618525ddbe6"
-  integrity sha512-GqWykok+3uocgfAJM8imbozrqLnPyTrpFlrryURQlw1EesPUCx5XxTiucWDSFF9/NUEXDuD4bnvHm8xfVGWTpQ==
+  version "16.18.11"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz#cbb15c12ca7c16c85a72b6bdc4d4b01151bb3cae"
+  integrity sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==
 
 "@types/qs@*":
   version "6.9.7"
@@ -433,12 +442,17 @@
   resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
   integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
 
+"@types/semver@^7.3.12":
+  version "7.3.13"
+  resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
+  integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
+
 "@types/serve-static@*":
-  version "1.13.10"
-  resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9"
-  integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155"
+  integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==
   dependencies:
-    "@types/mime" "^1"
+    "@types/mime" "*"
     "@types/node" "*"
 
 "@types/tmp@^0.2.2":
@@ -453,117 +467,94 @@
   dependencies:
     "@types/node" "*"
 
-"@typescript-eslint/eslint-plugin@^3.9.0":
-  version "3.10.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f"
-  integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==
-  dependencies:
-    "@typescript-eslint/experimental-utils" "3.10.1"
-    debug "^4.1.1"
-    functional-red-black-tree "^1.0.1"
-    regexpp "^3.0.0"
-    semver "^7.3.2"
-    tsutils "^3.17.1"
-
-"@typescript-eslint/experimental-utils@3.10.1":
-  version "3.10.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686"
-  integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==
+"@typescript-eslint/eslint-plugin@^5.48.0":
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz#deee67e399f2cb6b4608c935777110e509d8018c"
+  integrity sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==
   dependencies:
-    "@types/json-schema" "^7.0.3"
-    "@typescript-eslint/types" "3.10.1"
-    "@typescript-eslint/typescript-estree" "3.10.1"
-    eslint-scope "^5.0.0"
-    eslint-utils "^2.0.0"
+    "@typescript-eslint/scope-manager" "5.48.1"
+    "@typescript-eslint/type-utils" "5.48.1"
+    "@typescript-eslint/utils" "5.48.1"
+    debug "^4.3.4"
+    ignore "^5.2.0"
+    natural-compare-lite "^1.4.0"
+    regexpp "^3.2.0"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
 
 "@typescript-eslint/experimental-utils@^5.0.0":
-  version "5.26.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.26.0.tgz#4db8ce6940387b55e3b568a537eff36deaf0a1fe"
-  integrity sha512-OgUGXC/teXD8PYOkn33RSwBJPVwL0I2ipm5OHr9g9cfAhVrPC2DxQiWqaq88MNO5mbr/ZWnav3EVBpuwDreS5Q==
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.1.tgz#5951c0b7ef4b0838ea95f25d53385de0e366e0b8"
+  integrity sha512-8OoIZZuOeqsm5cxn2f01qHWtVC3M4iixSsfZXPiQUg4Sl4LiU+b5epcJFwxNfqeoLl+SGncELyi3x99zI6C0ng==
   dependencies:
-    "@typescript-eslint/utils" "5.26.0"
+    "@typescript-eslint/utils" "5.48.1"
 
-"@typescript-eslint/parser@^3.9.0":
-  version "3.10.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467"
-  integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==
+"@typescript-eslint/parser@^5.48.0":
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10"
+  integrity sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==
   dependencies:
-    "@types/eslint-visitor-keys" "^1.0.0"
-    "@typescript-eslint/experimental-utils" "3.10.1"
-    "@typescript-eslint/types" "3.10.1"
-    "@typescript-eslint/typescript-estree" "3.10.1"
-    eslint-visitor-keys "^1.1.0"
+    "@typescript-eslint/scope-manager" "5.48.1"
+    "@typescript-eslint/types" "5.48.1"
+    "@typescript-eslint/typescript-estree" "5.48.1"
+    debug "^4.3.4"
 
-"@typescript-eslint/scope-manager@5.26.0":
-  version "5.26.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.26.0.tgz#44209c7f649d1a120f0717e0e82da856e9871339"
-  integrity sha512-gVzTJUESuTwiju/7NiTb4c5oqod8xt5GhMbExKsCTp6adU3mya6AGJ4Pl9xC7x2DX9UYFsjImC0mA62BCY22Iw==
+"@typescript-eslint/scope-manager@5.48.1":
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz#39c71e4de639f5fe08b988005beaaf6d79f9d64d"
+  integrity sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==
   dependencies:
-    "@typescript-eslint/types" "5.26.0"
-    "@typescript-eslint/visitor-keys" "5.26.0"
-
-"@typescript-eslint/types@3.10.1":
-  version "3.10.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727"
-  integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==
+    "@typescript-eslint/types" "5.48.1"
+    "@typescript-eslint/visitor-keys" "5.48.1"
 
-"@typescript-eslint/types@5.26.0":
-  version "5.26.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.26.0.tgz#cb204bb154d3c103d9cc4d225f311b08219469f3"
-  integrity sha512-8794JZFE1RN4XaExLWLI2oSXsVImNkl79PzTOOWt9h0UHROwJedNOD2IJyfL0NbddFllcktGIO2aOu10avQQyA==
-
-"@typescript-eslint/typescript-estree@3.10.1":
-  version "3.10.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853"
-  integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==
+"@typescript-eslint/type-utils@5.48.1":
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz#5d94ac0c269a81a91ad77c03407cea2caf481412"
+  integrity sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==
   dependencies:
-    "@typescript-eslint/types" "3.10.1"
-    "@typescript-eslint/visitor-keys" "3.10.1"
-    debug "^4.1.1"
-    glob "^7.1.6"
-    is-glob "^4.0.1"
-    lodash "^4.17.15"
-    semver "^7.3.2"
-    tsutils "^3.17.1"
+    "@typescript-eslint/typescript-estree" "5.48.1"
+    "@typescript-eslint/utils" "5.48.1"
+    debug "^4.3.4"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/types@5.48.1":
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14"
+  integrity sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==
 
-"@typescript-eslint/typescript-estree@5.26.0":
-  version "5.26.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.26.0.tgz#16cbceedb0011c2ed4f607255f3ee1e6e43b88c3"
-  integrity sha512-EyGpw6eQDsfD6jIqmXP3rU5oHScZ51tL/cZgFbFBvWuCwrIptl+oueUZzSmLtxFuSOQ9vDcJIs+279gnJkfd1w==
+"@typescript-eslint/typescript-estree@5.48.1":
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz#9efa8ee2aa471c6ab62e649f6e64d8d121bc2056"
+  integrity sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==
   dependencies:
-    "@typescript-eslint/types" "5.26.0"
-    "@typescript-eslint/visitor-keys" "5.26.0"
+    "@typescript-eslint/types" "5.48.1"
+    "@typescript-eslint/visitor-keys" "5.48.1"
     debug "^4.3.4"
     globby "^11.1.0"
     is-glob "^4.0.3"
     semver "^7.3.7"
     tsutils "^3.21.0"
 
-"@typescript-eslint/utils@5.26.0":
-  version "5.26.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.26.0.tgz#896b8480eb124096e99c8b240460bb4298afcfb4"
-  integrity sha512-PJFwcTq2Pt4AMOKfe3zQOdez6InIDOjUJJD3v3LyEtxHGVVRK3Vo7Dd923t/4M9hSH2q2CLvcTdxlLPjcIk3eg==
+"@typescript-eslint/utils@5.48.1":
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.1.tgz#20f2f4e88e9e2a0961cbebcb47a1f0f7da7ba7f9"
+  integrity sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==
   dependencies:
     "@types/json-schema" "^7.0.9"
-    "@typescript-eslint/scope-manager" "5.26.0"
-    "@typescript-eslint/types" "5.26.0"
-    "@typescript-eslint/typescript-estree" "5.26.0"
+    "@types/semver" "^7.3.12"
+    "@typescript-eslint/scope-manager" "5.48.1"
+    "@typescript-eslint/types" "5.48.1"
+    "@typescript-eslint/typescript-estree" "5.48.1"
     eslint-scope "^5.1.1"
     eslint-utils "^3.0.0"
+    semver "^7.3.7"
 
-"@typescript-eslint/visitor-keys@3.10.1":
-  version "3.10.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931"
-  integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==
-  dependencies:
-    eslint-visitor-keys "^1.1.0"
-
-"@typescript-eslint/visitor-keys@5.26.0":
-  version "5.26.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.26.0.tgz#7195f756e367f789c0e83035297c45b417b57f57"
-  integrity sha512-wei+ffqHanYDOQgg/fS6Hcar6wAWv0CUPQ3TZzOWd2BLfgP539rb49bwua8WRAs7R6kOSLn82rfEu2ro6Llt8Q==
+"@typescript-eslint/visitor-keys@5.48.1":
+  version "5.48.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz#79fd4fb9996023ef86849bf6f904f33eb6c8fccb"
+  integrity sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==
   dependencies:
-    "@typescript-eslint/types" "5.26.0"
+    "@typescript-eslint/types" "5.48.1"
     eslint-visitor-keys "^3.3.0"
 
 "@ungap/promise-all-settled@1.1.2":
@@ -595,9 +586,9 @@ acorn@^7.4.0:
   integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 
 acorn@^8.4.1:
-  version "8.7.1"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
-  integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
+  version "8.8.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
+  integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
 
 agent-base@6:
   version "6.0.2"
@@ -617,9 +608,9 @@ ajv@^6.10.0, ajv@^6.12.4:
     uri-js "^4.2.2"
 
 ajv@^8.0.1:
-  version "8.11.0"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
-  integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
+  version "8.12.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
+  integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
   dependencies:
     fast-deep-equal "^3.1.1"
     json-schema-traverse "^1.0.0"
@@ -656,9 +647,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
     color-convert "^2.0.1"
 
 anymatch@~3.1.2:
-  version "3.1.2"
-  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
-  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
   dependencies:
     normalize-path "^3.0.0"
     picomatch "^2.0.4"
@@ -681,14 +672,14 @@ argparse@^2.0.1:
   integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
 
 array-includes@^3.1.4:
-  version "3.1.5"
-  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
-  integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
+  version "3.1.6"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
+  integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
   dependencies:
     call-bind "^1.0.2"
     define-properties "^1.1.4"
-    es-abstract "^1.19.5"
-    get-intrinsic "^1.1.1"
+    es-abstract "^1.20.4"
+    get-intrinsic "^1.1.3"
     is-string "^1.0.7"
 
 array-union@^2.1.0:
@@ -697,13 +688,13 @@ array-union@^2.1.0:
   integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
 
 array.prototype.flat@^1.2.5:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
-  integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
+  integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
   dependencies:
     call-bind "^1.0.2"
-    define-properties "^1.1.3"
-    es-abstract "^1.19.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
     es-shim-unscopables "^1.0.0"
 
 assertion-error@^1.1.0:
@@ -721,6 +712,11 @@ asynckit@^0.4.0:
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
   integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
 
+available-typed-arrays@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
+  integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
 balanced-match@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -848,13 +844,13 @@ chai-subset@^1.6.0:
   integrity sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug==
 
 chai@^4.3.4:
-  version "4.3.6"
-  resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c"
-  integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==
+  version "4.3.7"
+  resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51"
+  integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==
   dependencies:
     assertion-error "^1.1.0"
     check-error "^1.0.2"
-    deep-eql "^3.0.1"
+    deep-eql "^4.1.2"
     get-func-name "^2.0.0"
     loupe "^2.3.1"
     pathval "^1.1.1"
@@ -907,9 +903,9 @@ cliui@^7.0.2:
     wrap-ansi "^7.0.0"
 
 clone-response@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
-  integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
+  integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
   dependencies:
     mimic-response "^1.0.0"
 
@@ -1090,7 +1086,7 @@ decamelize@^4.0.0:
 decompress-response@^3.3.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
-  integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
+  integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==
   dependencies:
     mimic-response "^1.0.0"
 
@@ -1101,17 +1097,17 @@ decompress-response@^6.0.0:
   dependencies:
     mimic-response "^3.1.0"
 
-deep-eql@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
-  integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==
+deep-eql@^4.1.2:
+  version "4.1.3"
+  resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d"
+  integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==
   dependencies:
     type-detect "^4.0.0"
 
 deep-equal@~1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-  integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
+  integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==
 
 deep-extend@^0.6.0:
   version "0.6.0"
@@ -1149,12 +1145,12 @@ define-properties@^1.1.3, define-properties@^1.1.4:
 delayed-stream@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
 
 delegates@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+  integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
 
 depd@2.0.0, depd@^2.0.0, depd@~2.0.0:
   version "2.0.0"
@@ -1164,7 +1160,7 @@ depd@2.0.0, depd@^2.0.0, depd@~2.0.0:
 depd@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
-  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+  integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
 
 destroy@^1.0.4:
   version "1.2.0"
@@ -1215,14 +1211,14 @@ doctrine@^3.0.0:
     esutils "^2.0.2"
 
 duplexer3@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
-  integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e"
+  integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==
 
 ee-first@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-  integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+  integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
 
 electron-latest-versions@^0.2.0:
   version "0.2.0"
@@ -1246,7 +1242,7 @@ electron-mocha@^11.0.0:
 electron-window@^0.8.0:
   version "0.8.1"
   resolved "https://registry.yarnpkg.com/electron-window/-/electron-window-0.8.1.tgz#16ca187eb4870b0679274fc8299c5960e6ab2c5e"
-  integrity sha1-FsoYfrSHCwZ5J0/IKZxZYOarLF4=
+  integrity sha512-W1i9LfnZJozk3MXE8VgsL2E5wOUHSgyCvcg1H2vQQjj+gqhO9lVudgY3z3SF7LJAmi+0vy3CJkbMqsynWB49EA==
   dependencies:
     is-electron-renderer "^2.0.0"
 
@@ -1267,7 +1263,7 @@ emoji-regex@^8.0.0:
 encodeurl@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
-  integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+  integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
 
 end-of-stream@^1.1.0:
   version "1.4.4"
@@ -1295,34 +1291,53 @@ error-ex@^1.3.1:
   dependencies:
     is-arrayish "^0.2.1"
 
-es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5:
-  version "1.20.1"
-  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
-  integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
+es-abstract@^1.19.0, es-abstract@^1.20.4:
+  version "1.21.1"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6"
+  integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==
   dependencies:
+    available-typed-arrays "^1.0.5"
     call-bind "^1.0.2"
+    es-set-tostringtag "^2.0.1"
     es-to-primitive "^1.2.1"
     function-bind "^1.1.1"
     function.prototype.name "^1.1.5"
-    get-intrinsic "^1.1.1"
+    get-intrinsic "^1.1.3"
     get-symbol-description "^1.0.0"
+    globalthis "^1.0.3"
+    gopd "^1.0.1"
     has "^1.0.3"
     has-property-descriptors "^1.0.0"
+    has-proto "^1.0.1"
     has-symbols "^1.0.3"
-    internal-slot "^1.0.3"
-    is-callable "^1.2.4"
+    internal-slot "^1.0.4"
+    is-array-buffer "^3.0.1"
+    is-callable "^1.2.7"
     is-negative-zero "^2.0.2"
     is-regex "^1.1.4"
     is-shared-array-buffer "^1.0.2"
     is-string "^1.0.7"
+    is-typed-array "^1.1.10"
     is-weakref "^1.0.2"
-    object-inspect "^1.12.0"
+    object-inspect "^1.12.2"
     object-keys "^1.1.1"
-    object.assign "^4.1.2"
+    object.assign "^4.1.4"
     regexp.prototype.flags "^1.4.3"
-    string.prototype.trimend "^1.0.5"
-    string.prototype.trimstart "^1.0.5"
+    safe-regex-test "^1.0.0"
+    string.prototype.trimend "^1.0.6"
+    string.prototype.trimstart "^1.0.6"
+    typed-array-length "^1.0.4"
     unbox-primitive "^1.0.2"
+    which-typed-array "^1.1.9"
+
+es-set-tostringtag@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
+  integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
+  dependencies:
+    get-intrinsic "^1.1.3"
+    has "^1.0.3"
+    has-tostringtag "^1.0.0"
 
 es-shim-unscopables@^1.0.0:
   version "1.0.0"
@@ -1353,7 +1368,7 @@ escalade@^3.1.1:
 escape-html@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-  integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+  integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
 
 escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
   version "4.0.0"
@@ -1363,7 +1378,7 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
 escape-string-regexp@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
 
 eslint-config-prettier@^6.11.0:
   version "6.15.0"
@@ -1381,17 +1396,16 @@ eslint-import-resolver-node@^0.3.6:
     resolve "^1.20.0"
 
 eslint-module-utils@^2.7.3:
-  version "2.7.3"
-  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
-  integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
+  version "2.7.4"
+  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974"
+  integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==
   dependencies:
     debug "^3.2.7"
-    find-up "^2.1.0"
 
 eslint-plugin-deprecation@^1.1.0:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.2.tgz#a8125d28c56158cdfa1a685197e6be8ed86f189e"
-  integrity sha512-z93wbx9w7H/E3ogPw6AZMkkNJ6m51fTZRNZPNQqxQLmx+KKt7aLkMU9wN67s71i+VVHN4tLOZ3zT3QLbnlC0Mg==
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.3.tgz#065b5d36ff220afe139f2b19af57454a13464731"
+  integrity sha512-Bbkv6ZN2cCthVXz/oZKPwsSY5S/CbgTLRG4Q2s2gpPpgNsT0uJ0dB5oLNiWzFYY8AgKX4ULxXFG1l/rDav9QFA==
   dependencies:
     "@typescript-eslint/experimental-utils" "^5.0.0"
     tslib "^2.3.1"
@@ -1434,7 +1448,7 @@ eslint-plugin-simple-import-sort@^5.0.3:
   resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz#9ae258ddada6efffc55e47a134afbd279eb31fc6"
   integrity sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ==
 
-eslint-scope@^5.0.0, eslint-scope@^5.1.1:
+eslint-scope@^5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
   integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@@ -1442,7 +1456,7 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1:
     esrecurse "^4.3.0"
     estraverse "^4.1.1"
 
-eslint-utils@^2.0.0, eslint-utils@^2.1.0:
+eslint-utils@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
   integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
@@ -1471,13 +1485,14 @@ eslint-visitor-keys@^3.3.0:
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
   integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
 
-eslint@7.27.0:
-  version "7.27.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7"
-  integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==
+eslint@7.32.0:
+  version "7.32.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
+  integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
   dependencies:
     "@babel/code-frame" "7.12.11"
-    "@eslint/eslintrc" "^0.4.1"
+    "@eslint/eslintrc" "^0.4.3"
+    "@humanwhocodes/config-array" "^0.5.0"
     ajv "^6.10.0"
     chalk "^4.0.0"
     cross-spawn "^7.0.2"
@@ -1494,7 +1509,7 @@ eslint@7.27.0:
     fast-deep-equal "^3.1.3"
     file-entry-cache "^6.0.1"
     functional-red-black-tree "^1.0.1"
-    glob-parent "^5.0.0"
+    glob-parent "^5.1.2"
     globals "^13.6.0"
     ignore "^4.0.6"
     import-fresh "^3.0.0"
@@ -1586,9 +1601,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
   integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
 
 fast-glob@^3.2.9:
-  version "3.2.11"
-  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
-  integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
+  version "3.2.12"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
   dependencies:
     "@nodelib/fs.stat" "^2.0.2"
     "@nodelib/fs.walk" "^1.2.3"
@@ -1604,19 +1619,19 @@ fast-json-stable-stringify@^2.0.0:
 fast-levenshtein@^2.0.6:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
 
 fastq@^1.6.0:
-  version "1.13.0"
-  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
-  integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
+  integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
   dependencies:
     reusify "^1.0.4"
 
 fd-slicer@~1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
-  integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
+  integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
   dependencies:
     pend "~1.2.0"
 
@@ -1642,13 +1657,6 @@ find-up@5.0.0:
     locate-path "^6.0.0"
     path-exists "^4.0.0"
 
-find-up@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
-  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
-  dependencies:
-    locate-path "^2.0.0"
-
 flat-cache@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
@@ -1663,9 +1671,16 @@ flat@^5.0.2:
   integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
 
 flatted@^3.1.0:
-  version "3.2.5"
-  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
-  integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
+  version "3.2.7"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
+  integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+
+for-each@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+  integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+  dependencies:
+    is-callable "^1.1.3"
 
 form-data-encoder@^2.1.2:
   version "2.1.4"
@@ -1684,7 +1699,7 @@ form-data@*:
 fresh@~0.5.2:
   version "0.5.2"
   resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
-  integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+  integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
 
 fs-extra@^10.0.0:
   version "10.1.0"
@@ -1707,7 +1722,7 @@ fs-extra@^8.1.0:
 fs.realpath@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
 
 fsevents@~2.3.2:
   version "2.3.2"
@@ -1732,7 +1747,7 @@ function.prototype.name@^1.1.5:
 functional-red-black-tree@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
-  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+  integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
 
 functions-have-names@^1.2.2:
   version "1.2.3"
@@ -1747,16 +1762,16 @@ get-caller-file@^2.0.5:
 get-func-name@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
-  integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
+  integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==
 
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
-  integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
+  integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
   dependencies:
     function-bind "^1.1.1"
     has "^1.0.3"
-    has-symbols "^1.0.1"
+    has-symbols "^1.0.3"
 
 get-stdin@^6.0.0:
   version "6.0.0"
@@ -1790,7 +1805,7 @@ get-symbol-description@^1.0.0:
     call-bind "^1.0.2"
     get-intrinsic "^1.1.1"
 
-glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2:
+glob-parent@^5.1.2, glob-parent@~5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
   integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -1809,7 +1824,7 @@ glob@7.2.0:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@^7.1.3, glob@^7.1.6:
+glob@^7.1.3:
   version "7.2.3"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
   integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -1844,13 +1859,13 @@ global-tunnel-ng@^2.7.1:
     tunnel "^0.0.6"
 
 globals@^13.6.0, globals@^13.9.0:
-  version "13.15.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac"
-  integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==
+  version "13.19.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8"
+  integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==
   dependencies:
     type-fest "^0.20.2"
 
-globalthis@^1.0.1:
+globalthis@^1.0.1, globalthis@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
   integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
@@ -1869,6 +1884,13 @@ globby@^11.1.0:
     merge2 "^1.4.1"
     slash "^3.0.0"
 
+gopd@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+  integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+  dependencies:
+    get-intrinsic "^1.1.3"
+
 got@^12.1.0:
   version "12.5.3"
   resolved "https://registry.yarnpkg.com/got/-/got-12.5.3.tgz#82bdca2dd61258a02e24d668ea6e7abb70ac3598"
@@ -1921,7 +1943,7 @@ has-bigints@^1.0.1, has-bigints@^1.0.2:
 has-flag@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+  integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
 
 has-flag@^4.0.0:
   version "4.0.0"
@@ -1935,7 +1957,12 @@ has-property-descriptors@^1.0.0:
   dependencies:
     get-intrinsic "^1.1.1"
 
-has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
+has-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.2, has-symbols@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
   integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
@@ -2028,9 +2055,9 @@ ignore@^4.0.6:
   integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 
 ignore@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
-  integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+  version "5.2.4"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+  integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
 
 import-fresh@^3.0.0, import-fresh@^3.2.1:
   version "3.3.0"
@@ -2043,17 +2070,17 @@ import-fresh@^3.0.0, import-fresh@^3.2.1:
 imurmurhash@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
 
 inflation@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f"
-  integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=
+  integrity sha512-m3xv4hJYR2oXw4o4Y5l6P5P16WYmazYof+el6Al3f+YlggGj6qT9kImBAnzDelRALnP5d3h4jGBPKzYCizjZZw==
 
 inflight@^1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
   dependencies:
     once "^1.3.0"
     wrappy "1"
@@ -2068,19 +2095,28 @@ ini@^1.3.4, ini@~1.3.0:
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
   integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
 
-internal-slot@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
-  integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
+internal-slot@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3"
+  integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==
   dependencies:
-    get-intrinsic "^1.1.0"
+    get-intrinsic "^1.1.3"
     has "^1.0.3"
     side-channel "^1.0.4"
 
+is-array-buffer@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a"
+  integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.3"
+    is-typed-array "^1.1.10"
+
 is-arrayish@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
 
 is-bigint@^1.0.1:
   version "1.0.4"
@@ -2104,15 +2140,15 @@ is-boolean-object@^1.1.0:
     call-bind "^1.0.2"
     has-tostringtag "^1.0.0"
 
-is-callable@^1.1.4, is-callable@^1.2.4:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
-  integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+  integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
 
-is-core-module@^2.8.1:
-  version "2.9.0"
-  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
-  integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
+is-core-module@^2.8.1, is-core-module@^2.9.0:
+  version "2.11.0"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
+  integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
   dependencies:
     has "^1.0.3"
 
@@ -2126,12 +2162,12 @@ is-date-object@^1.0.1:
 is-electron-renderer@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/is-electron-renderer/-/is-electron-renderer-2.0.1.tgz#a469d056f975697c58c98c6023eb0aa79af895a2"
-  integrity sha1-pGnQVvl1aXxYyYxgI+sKp5r4laI=
+  integrity sha512-pRlQnpaCFhDVPtkXkP+g9Ybv/CjbiQDjnKFQTEjpBfDKeV6dRDBczuFRDpM6DVfk2EjpMS8t5kwE5jPnqYl3zA==
 
 is-extglob@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
-  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
 
 is-fullwidth-code-point@^3.0.0:
   version "3.0.0"
@@ -2203,6 +2239,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
   dependencies:
     has-symbols "^1.0.2"
 
+is-typed-array@^1.1.10, is-typed-array@^1.1.9:
+  version "1.1.10"
+  resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
+  integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
+  dependencies:
+    available-typed-arrays "^1.0.5"
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    gopd "^1.0.1"
+    has-tostringtag "^1.0.0"
+
 is-unicode-supported@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
@@ -2218,12 +2265,12 @@ is-weakref@^1.0.2:
 isarray@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
 
 isexe@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
 
 js-tokens@^4.0.0:
   version "4.0.0"
@@ -2253,7 +2300,7 @@ jsdoctypeparser@^9.0.0:
 json-buffer@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
-  integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
+  integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==
 
 json-buffer@3.0.1:
   version "3.0.1"
@@ -2278,12 +2325,12 @@ json-schema-traverse@^1.0.0:
 json-stable-stringify-without-jsonify@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
-  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+  integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
 
 json-stringify-safe@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
 
 json5@^1.0.1:
   version "1.0.2"
@@ -2295,7 +2342,7 @@ json5@^1.0.1:
 jsonfile@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
-  integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+  integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
   optionalDependencies:
     graceful-fs "^4.1.6"
 
@@ -2359,9 +2406,9 @@ koa-tree-router@^0.8.0:
     koa-compose "^4.1.0"
 
 koa@^2.13.4:
-  version "2.13.4"
-  resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.4.tgz#ee5b0cb39e0b8069c38d115139c774833d32462e"
-  integrity sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==
+  version "2.14.1"
+  resolved "https://registry.yarnpkg.com/koa/-/koa-2.14.1.tgz#defb9589297d8eb1859936e777f3feecfc26925c"
+  integrity sha512-USJFyZgi2l0wDgqkfD27gL4YGno7TfUkcmOe6UOLFOVuN+J7FwnNu4Dydl4CUQzraM1lBAiGed0M9OVJoT0Kqw==
   dependencies:
     accepts "^1.3.5"
     cache-content-type "^1.0.0"
@@ -2405,21 +2452,13 @@ levn@^0.4.1:
 load-json-file@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
-  integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+  integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==
   dependencies:
     graceful-fs "^4.1.2"
     parse-json "^4.0.0"
     pify "^3.0.0"
     strip-bom "^3.0.0"
 
-locate-path@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
-  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
-  dependencies:
-    p-locate "^2.0.0"
-    path-exists "^3.0.0"
-
 locate-path@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
@@ -2435,9 +2474,9 @@ lodash.merge@^4.6.2:
 lodash.truncate@^4.4.2:
   version "4.4.2"
   resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
-  integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
+  integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==
 
-lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.20:
+lodash@^4.17.10, lodash@^4.17.20:
   version "4.17.21"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -2451,9 +2490,9 @@ log-symbols@4.1.0:
     is-unicode-supported "^0.1.0"
 
 loupe@^2.3.1:
-  version "2.3.4"
-  resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3"
-  integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==
+  version "2.3.6"
+  resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53"
+  integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==
   dependencies:
     get-func-name "^2.0.0"
 
@@ -2482,7 +2521,7 @@ lru-cache@^6.0.0:
 lru_map@^0.3.3:
   version "0.3.3"
   resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
-  integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=
+  integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
 
 make-error@^1.1.1:
   version "1.3.6"
@@ -2499,12 +2538,12 @@ matcher@^3.0.0:
 media-typer@0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-  integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+  integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
 
 memorystream@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
-  integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
+  integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==
 
 merge2@^1.3.0, merge2@^1.4.1:
   version "1.4.1"
@@ -2605,7 +2644,7 @@ mocha@^9.1.1, mocha@^9.1.3:
 ms@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+  integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
 
 ms@2.1.2:
   version "2.1.2"
@@ -2622,10 +2661,15 @@ nanoid@3.3.1:
   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
   integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==
 
+natural-compare-lite@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
+  integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==
+
 natural-compare@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+  integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
 
 negotiator@0.6.3:
   version "0.6.3"
@@ -2685,7 +2729,7 @@ npm-run-all@^4.1.5:
     shell-quote "^1.6.1"
     string.prototype.padend "^3.0.0"
 
-object-inspect@^1.12.0, object-inspect@^1.9.0:
+object-inspect@^1.12.2, object-inspect@^1.9.0:
   version "1.12.2"
   resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
   integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
@@ -2695,24 +2739,24 @@ object-keys@^1.1.1:
   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
   integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
 
-object.assign@^4.1.2:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
-  integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+object.assign@^4.1.4:
+  version "4.1.4"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
+  integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
   dependencies:
-    call-bind "^1.0.0"
-    define-properties "^1.1.3"
-    has-symbols "^1.0.1"
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    has-symbols "^1.0.3"
     object-keys "^1.1.1"
 
 object.values@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
-  integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
+  integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
   dependencies:
     call-bind "^1.0.2"
-    define-properties "^1.1.3"
-    es-abstract "^1.19.1"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
 
 on-finished@^2.3.0:
   version "2.4.1"
@@ -2724,14 +2768,14 @@ on-finished@^2.3.0:
 once@^1.3.0, once@^1.3.1, once@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
   dependencies:
     wrappy "1"
 
 only@~0.0.2:
   version "0.0.2"
   resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
-  integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=
+  integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==
 
 optionator@^0.9.1:
   version "0.9.1"
@@ -2755,13 +2799,6 @@ p-cancelable@^3.0.0:
   resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050"
   integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==
 
-p-limit@^1.1.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
-  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
-  dependencies:
-    p-try "^1.0.0"
-
 p-limit@^3.0.2:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
@@ -2769,13 +2806,6 @@ p-limit@^3.0.2:
   dependencies:
     yocto-queue "^0.1.0"
 
-p-locate@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
-  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
-  dependencies:
-    p-limit "^1.1.0"
-
 p-locate@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
@@ -2783,11 +2813,6 @@ p-locate@^5.0.0:
   dependencies:
     p-limit "^3.0.2"
 
-p-try@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
-  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
 package-json@^8.1.0:
   version "8.1.0"
   resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.0.tgz#2a22806f1ed7c786c8e6ff26cfe20003bf4c6850"
@@ -2808,7 +2833,7 @@ parent-module@^1.0.0:
 parse-json@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
-  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+  integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
   dependencies:
     error-ex "^1.3.1"
     json-parse-better-errors "^1.0.1"
@@ -2818,11 +2843,6 @@ parseurl@^1.3.2:
   resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
   integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
 
-path-exists@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
-  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
 path-exists@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@@ -2831,12 +2851,12 @@ path-exists@^4.0.0:
 path-is-absolute@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
 
 path-key@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+  integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
 
 path-key@^3.1.0:
   version "3.1.1"
@@ -2868,7 +2888,7 @@ pathval@^1.1.1:
 pend@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
-  integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+  integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
 
 picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
   version "2.3.1"
@@ -2883,7 +2903,7 @@ pidtree@^0.3.0:
 pify@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+  integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
 
 prelude-ls@^1.2.1:
   version "1.2.1"
@@ -2893,12 +2913,12 @@ prelude-ls@^1.2.1:
 prepend-http@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
-  integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+  integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==
 
 prettier@^2.4.1:
-  version "2.6.2"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032"
-  integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==
+  version "2.8.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.2.tgz#c4ea1b5b454d7c4b59966db2e06ed7eec5dfd160"
+  integrity sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==
 
 process-nextick-args@~2.0.0:
   version "2.0.1"
@@ -2913,7 +2933,7 @@ progress@^2.0.0, progress@^2.0.3:
 proto-list@~1.2.1:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
-  integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+  integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
 
 pump@^3.0.0:
   version "3.0.0"
@@ -2924,14 +2944,14 @@ pump@^3.0.0:
     once "^1.3.1"
 
 punycode@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
-  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74"
+  integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==
 
 qs@^6.5.2:
-  version "6.10.3"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e"
-  integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==
+  version "6.11.0"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
+  integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
   dependencies:
     side-channel "^1.0.4"
 
@@ -2975,7 +2995,7 @@ rc@1.2.8:
 read-pkg@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
-  integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+  integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==
   dependencies:
     load-json-file "^4.0.0"
     normalize-package-data "^2.3.2"
@@ -3010,7 +3030,7 @@ regexp.prototype.flags@^1.4.3:
     define-properties "^1.1.3"
     functions-have-names "^1.2.2"
 
-regexpp@^3.0.0, regexpp@^3.1.0:
+regexpp@^3.1.0, regexpp@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
   integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
@@ -3037,7 +3057,7 @@ registry-url@^6.0.0:
 require-directory@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
 
 require-from-string@^2.0.2:
   version "2.0.2"
@@ -3047,7 +3067,7 @@ require-from-string@^2.0.2:
 requireindex@~1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162"
-  integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI=
+  integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==
 
 resolve-alpn@^1.2.0:
   version "1.2.1"
@@ -3060,18 +3080,18 @@ resolve-from@^4.0.0:
   integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
 
 resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0:
-  version "1.22.0"
-  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
-  integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
+  version "1.22.1"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
+  integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
   dependencies:
-    is-core-module "^2.8.1"
+    is-core-module "^2.9.0"
     path-parse "^1.0.7"
     supports-preserve-symlinks-flag "^1.0.0"
 
 responselike@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
-  integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
+  integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==
   dependencies:
     lowercase-keys "^1.0.0"
 
@@ -3123,6 +3143,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
+safe-regex-test@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
+  integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.3"
+    is-regex "^1.1.4"
+
 "safer-buffer@>= 2.1.2 < 3":
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -3131,7 +3160,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
 semver-compare@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
-  integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+  integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
 
 "semver@2 || 3 || 4 || 5", semver@^5.5.0:
   version "5.7.1"
@@ -3143,14 +3172,7 @@ semver@^6.2.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 
-semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7:
-  version "7.3.7"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
-  integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
-  dependencies:
-    lru-cache "^6.0.0"
-
-semver@^7.3.8:
+semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8:
   version "7.3.8"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
   integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
@@ -3179,7 +3201,7 @@ setprototypeof@1.2.0:
 shebang-command@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
-  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+  integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
   dependencies:
     shebang-regex "^1.0.0"
 
@@ -3193,7 +3215,7 @@ shebang-command@^2.0.0:
 shebang-regex@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+  integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
 
 shebang-regex@^3.0.0:
   version "3.0.0"
@@ -3201,9 +3223,9 @@ shebang-regex@^3.0.0:
   integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
 
 shell-quote@^1.6.1:
-  version "1.7.3"
-  resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
-  integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8"
+  integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==
 
 side-channel@^1.0.4:
   version "1.0.4"
@@ -3250,9 +3272,9 @@ spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1:
     spdx-license-ids "^3.0.0"
 
 spdx-license-ids@^3.0.0:
-  version "3.0.11"
-  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
-  integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==
+  version "3.0.12"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779"
+  integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==
 
 sprintf-js@^1.1.2:
   version "1.1.2"
@@ -3262,7 +3284,7 @@ sprintf-js@^1.1.2:
 sprintf-js@~1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+  integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
 
 statuses@2.0.1:
   version "2.0.1"
@@ -3272,12 +3294,12 @@ statuses@2.0.1:
 "statuses@>= 1.5.0 < 2", statuses@^1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
-  integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+  integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
 
 streamsearch@0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
-  integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=
+  integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==
 
 string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
   version "4.2.3"
@@ -3289,31 +3311,31 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
     strip-ansi "^6.0.1"
 
 string.prototype.padend@^3.0.0:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1"
-  integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6"
+  integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==
   dependencies:
     call-bind "^1.0.2"
-    define-properties "^1.1.3"
-    es-abstract "^1.19.1"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
 
-string.prototype.trimend@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
-  integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
+string.prototype.trimend@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
+  integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
   dependencies:
     call-bind "^1.0.2"
     define-properties "^1.1.4"
-    es-abstract "^1.19.5"
+    es-abstract "^1.20.4"
 
-string.prototype.trimstart@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
-  integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
+string.prototype.trimstart@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
+  integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
   dependencies:
     call-bind "^1.0.2"
     define-properties "^1.1.4"
-    es-abstract "^1.19.5"
+    es-abstract "^1.20.4"
 
 string_decoder@~1.1.1:
   version "1.1.1"
@@ -3332,7 +3354,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
 strip-bom@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+  integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
 
 strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
   version "3.1.1"
@@ -3378,9 +3400,9 @@ supports-preserve-symlinks-flag@^1.0.0:
   integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
 
 table@^6.0.9:
-  version "6.8.0"
-  resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca"
-  integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==
+  version "6.8.1"
+  resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf"
+  integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==
   dependencies:
     ajv "^8.0.1"
     lodash.truncate "^4.4.2"
@@ -3391,7 +3413,7 @@ table@^6.0.9:
 text-table@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+  integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
 
 tmp@^0.2.1:
   version "0.2.1"
@@ -3418,9 +3440,9 @@ toidentifier@1.0.1:
   integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
 
 ts-node@^10.4.0:
-  version "10.8.0"
-  resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.0.tgz#3ceb5ac3e67ae8025c1950626aafbdecb55d82ce"
-  integrity sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA==
+  version "10.9.1"
+  resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
+  integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
   dependencies:
     "@cspotcode/source-map-support" "^0.8.0"
     "@tsconfig/node10" "^1.0.7"
@@ -3452,16 +3474,16 @@ tslib@^1.8.1, tslib@^1.9.3:
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 
 tslib@^2.3.1:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
-  integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
+  integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
 
 tsscmp@1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
   integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
 
-tsutils@^3.17.1, tsutils@^3.21.0:
+tsutils@^3.21.0:
   version "3.21.0"
   resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
   integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
@@ -3503,15 +3525,24 @@ type-is@^1.6.16:
     media-typer "0.3.0"
     mime-types "~2.1.24"
 
+typed-array-length@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
+  integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+  dependencies:
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    is-typed-array "^1.1.9"
+
 typedarray@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+  integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
 
 typescript@^4.4.4:
-  version "4.7.2"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.2.tgz#1f9aa2ceb9af87cca227813b4310fff0b51593c4"
-  integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==
+  version "4.9.4"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78"
+  integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==
 
 unbox-primitive@^1.0.2:
   version "1.0.2"
@@ -3536,7 +3567,7 @@ universalify@^2.0.0:
 unpipe@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+  integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
 
 uri-js@^4.2.2:
   version "4.4.1"
@@ -3548,14 +3579,14 @@ uri-js@^4.2.2:
 url-parse-lax@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
-  integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
+  integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==
   dependencies:
     prepend-http "^2.0.0"
 
 util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
 
 v8-compile-cache-lib@^3.0.1:
   version "3.0.1"
@@ -3578,7 +3609,7 @@ validate-npm-package-license@^3.0.1:
 vary@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
-  integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+  integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
 
 which-boxed-primitive@^1.0.2:
   version "1.0.2"
@@ -3591,6 +3622,18 @@ which-boxed-primitive@^1.0.2:
     is-string "^1.0.5"
     is-symbol "^1.0.3"
 
+which-typed-array@^1.1.9:
+  version "1.1.9"
+  resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
+  integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
+  dependencies:
+    available-typed-arrays "^1.0.5"
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    gopd "^1.0.1"
+    has-tostringtag "^1.0.0"
+    is-typed-array "^1.1.10"
+
 which@2.0.2, which@^2.0.1, which@^2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@@ -3627,12 +3670,12 @@ wrap-ansi@^7.0.0:
 wrappy@1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
 
 xvfb-maybe@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/xvfb-maybe/-/xvfb-maybe-0.2.1.tgz#ed8cb132957b7848b439984c66f010ea7f24361b"
-  integrity sha1-7YyxMpV7eEi0OZhMZvAQ6n8kNhs=
+  integrity sha512-9IyRz3l6Qyhl6LvnGRF5jMPB4oBEepQnuzvVAFTynP6ACLLSevqigICJ9d/+ofl29m2daeaVBChnPYUnaeJ7yA==
   dependencies:
     debug "^2.2.0"
     which "^1.2.4"
@@ -3688,7 +3731,7 @@ yargs@16.2.0, yargs@^16.2.0:
 yauzl@^2.10.0:
   version "2.10.0"
   resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
-  integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
+  integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
   dependencies:
     buffer-crc32 "~0.2.3"
     fd-slicer "~1.1.0"

From 36cef2160ae6d36a5423aba06509e88f12447cba Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 11 Jan 2023 11:40:09 +0000
Subject: [PATCH 061/239] test: New Electron versions (#620)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index f2ee32b8..54d3da82 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.8","21.3.3","22.0.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.8","21.3.3","22.0.1"]

From 6ad9d704d5ea350191083229f0e8b2756001c540 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 11 Jan 2023 12:09:44 +0000
Subject: [PATCH 062/239] chore: Update CHANGELOG for 4.2.0 release (#621)

---
 CHANGELOG.md | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index d06df8a9..78e2ae15 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,15 @@
 
 ## Unreleased
 
+## 4.2.0
+
+- feat: Update JavaScript SDKs to 7.30.0 and add support for Replay in renderers (#618)
+- feat: Use a transport to send events to main process rather than via integration (#610)
+- test: Add test to ensure window titles don't end up in breadcrumbs when disabled (#594)
+- fix: Use POST for main process ping so it does not result in fetch breadcrumb (#612)
+- CI: Use volta-cli/action to use the correct node version (#609)
+- CI: Auto-generate PRs for JavaScript SDK updates (#608)
+
 ## 4.1.2
 
 - fix: Ensure the scope writes do not beat the initial async scope read (#593)

From 49760e213883c39ed72357279f7b3cdedd34b142 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 11 Jan 2023 14:29:02 +0000
Subject: [PATCH 063/239] test: Don't run sandbox tests on Linux for Electron <
 13 (#622)

---
 examples/electron-forge-webpack/recipe.yml            | 2 +-
 examples/webpack-context-isolation-preload/recipe.yml | 2 +-
 examples/webpack-context-isolation/recipe.yml         | 2 +-
 test/e2e/recipe/eval.ts                               | 4 +++-
 test/e2e/test-apps/other/error-iframe/recipe.yml      | 2 +-
 5 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/examples/electron-forge-webpack/recipe.yml b/examples/electron-forge-webpack/recipe.yml
index 0ee6003d..d40dea6d 100644
--- a/examples/electron-forge-webpack/recipe.yml
+++ b/examples/electron-forge-webpack/recipe.yml
@@ -1,4 +1,4 @@
 description: Electron Forge Webpack with contextIsolation and sandbox
 command: yarn && yarn package
-condition: supportsContextIsolation
+condition: supportsContextIsolation && supportsSandbox
 timeout: 120
diff --git a/examples/webpack-context-isolation-preload/recipe.yml b/examples/webpack-context-isolation-preload/recipe.yml
index cd6349e1..07abca78 100644
--- a/examples/webpack-context-isolation-preload/recipe.yml
+++ b/examples/webpack-context-isolation-preload/recipe.yml
@@ -1,4 +1,4 @@
 description: Webpack 5 app with contextIsolation and sandbox with preload
 command: yarn && yarn build
-condition: supportsContextIsolation
+condition: supportsContextIsolation && supportsSandbox
 timeout: 120
diff --git a/examples/webpack-context-isolation/recipe.yml b/examples/webpack-context-isolation/recipe.yml
index c6f46484..18407171 100644
--- a/examples/webpack-context-isolation/recipe.yml
+++ b/examples/webpack-context-isolation/recipe.yml
@@ -1,4 +1,4 @@
 description: Webpack 5 app with contextIsolation and sandbox
 command: yarn && yarn build
-condition: supportsContextIsolation
+condition: supportsContextIsolation && supportsSandbox
 timeout: 120
diff --git a/test/e2e/recipe/eval.ts b/test/e2e/recipe/eval.ts
index 63d69462..ced24cbc 100644
--- a/test/e2e/recipe/eval.ts
+++ b/test/e2e/recipe/eval.ts
@@ -15,9 +15,11 @@ function getEvalContext(electronVersion: string): Context {
     (platform === 'win32' && version.major >= 6) ||
     (platform === 'linux' && version.major >= 15);
 
+  const supportsSandbox = platform !== 'linux' || version.major >= 13;
+
   const supportsContextIsolation = version.major >= 6;
 
-  return createContext({ version, platform, usesCrashpad, supportsContextIsolation });
+  return createContext({ version, platform, usesCrashpad, supportsContextIsolation, supportsSandbox });
 }
 
 export function evaluateCondition(name: string, electronVersion: string, condition: string | undefined): boolean {
diff --git a/test/e2e/test-apps/other/error-iframe/recipe.yml b/test/e2e/test-apps/other/error-iframe/recipe.yml
index 37965ed3..73bace15 100644
--- a/test/e2e/test-apps/other/error-iframe/recipe.yml
+++ b/test/e2e/test-apps/other/error-iframe/recipe.yml
@@ -1,4 +1,4 @@
 description: JavaScript Error from <iframe>
 command: yarn && yarn build
-condition: supportsContextIsolation
+condition: supportsContextIsolation && supportsSandbox
 timeout: 120

From dd140ed63a5637414e2ddd2df0088f390e832cf6 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 11 Jan 2023 17:03:07 +0000
Subject: [PATCH 064/239] test: Disable sandbox for Linux e2e tests on older
 Electron versions (#623)

---
 test/e2e/context.ts    | 12 +++++++++++-
 test/e2e/index.test.ts |  4 ++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/test/e2e/context.ts b/test/e2e/context.ts
index c190dc1b..028482d2 100644
--- a/test/e2e/context.ts
+++ b/test/e2e/context.ts
@@ -1,3 +1,4 @@
+import { parseSemver } from '@sentry/utils';
 import { ChildProcess, spawn, spawnSync } from 'child_process';
 import { rmSync } from 'fs';
 import { homedir } from 'os';
@@ -47,6 +48,7 @@ export class TestContext {
    */
   public constructor(
     private readonly _electronPath: string,
+    private readonly _electronVersion: string,
     private readonly _appPath: string,
     private readonly _appName: string,
   ) {}
@@ -66,7 +68,15 @@ export class TestContext {
       this._clearAppUserData();
     }
 
-    const childProcess = spawn(this._electronPath, [this._appPath], { env });
+    const version = parseSemver(this._electronVersion);
+
+    const args = [this._appPath];
+    // Older versions of Electron no longer work correctly on 'ubuntu-latest' with sandbox
+    if (process.platform === 'linux' && (version.major || 0) < 13) {
+      args.push('--no-sandbox');
+    }
+
+    const childProcess = spawn(this._electronPath, args, { env });
 
     function logLinesWithoutEmpty(input: string): void {
       input
diff --git a/test/e2e/index.test.ts b/test/e2e/index.test.ts
index 550a003a..5554756e 100644
--- a/test/e2e/index.test.ts
+++ b/test/e2e/index.test.ts
@@ -61,7 +61,7 @@ describe('E2E Tests', () => {
                 }
 
                 const [appPath, appName] = await recipe.prepare(this, distDir);
-                testContext = new TestContext(await electronPath, appPath, appName);
+                testContext = new TestContext(await electronPath, electronVersion, appPath, appName);
                 await recipe.runTests(testContext, testServer);
               });
             }
@@ -79,7 +79,7 @@ describe('E2E Tests', () => {
             }
 
             const [appPath, appName] = await recipe.prepare(this, distDir);
-            testContext = new TestContext(await electronPath, appPath, appName);
+            testContext = new TestContext(await electronPath, electronVersion, appPath, appName);
             await recipe.runTests(testContext, testServer);
           });
         }

From 25f1c899b8f78db3bacbba4369ed4c188197b75d Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Wed, 11 Jan 2023 17:23:59 +0000
Subject: [PATCH 065/239] release: 4.2.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index a0ea20d0..a87e474b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.1.2",
+  "version": "4.2.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From daea289a2318ea1b9b03e8d445fc1eaa28f42db8 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 15 Jan 2023 21:49:46 +0000
Subject: [PATCH 066/239] test: New Electron versions (#624)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 54d3da82..1defc426 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.8","21.3.3","22.0.1"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.9","21.3.4","22.0.2"]

From ac983a3d54b4b5439c3067b9d9f8505dbf5b2797 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 18 Jan 2023 11:58:23 +0000
Subject: [PATCH 067/239] test: Test localhost URLs are not modified and stack
 traces are correctly parsed (#626)

---
 test/unit/normalize.test.ts   |  6 ++++++
 test/unit/stack-parse.test.ts | 25 +++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/test/unit/normalize.test.ts b/test/unit/normalize.test.ts
index 13def4ad..3b79c849 100644
--- a/test/unit/normalize.test.ts
+++ b/test/unit/normalize.test.ts
@@ -61,4 +61,10 @@ describe('Normalize URLs', () => {
       normalizeUrl('/home/haza/Desktop/foo/app/webpack:/electron/src/common/models/ipc-request.ts', base),
     ).to.equal('app:///electron/src/common/models/ipc-request.ts');
   });
+
+  it('Only modifies file URLS', () => {
+    const base = 'c:/Users/Username/sentry-electron/example';
+    expect(normalizeUrl('https://some.host/index.html', base)).to.equal('https://some.host/index.html');
+    expect(normalizeUrl('http://localhost:43288/index.html', base)).to.equal('http://localhost:43288/index.html');
+  });
 });
diff --git a/test/unit/stack-parse.test.ts b/test/unit/stack-parse.test.ts
index 06137947..9549c4e1 100644
--- a/test/unit/stack-parse.test.ts
+++ b/test/unit/stack-parse.test.ts
@@ -144,4 +144,29 @@ describe('Parse mixed renderer stack traces', () => {
       },
     ]);
   });
+
+  it('Electron localhost', () => {
+    const stack = `Error: ENOENT: no such file or directory, open '/does-not-exist'
+    at two (http://localhost:12345/src/index.html:17:11)
+    at one (http://localhost:12345/src/index.html:24:9)`;
+
+    const frames = electronRendererStackParser(stack);
+
+    expect(frames).to.eql([
+      {
+        filename: 'http://localhost:12345/src/index.html',
+        function: 'one',
+        in_app: false,
+        lineno: 24,
+        colno: 9,
+      },
+      {
+        filename: 'http://localhost:12345/src/index.html',
+        function: 'two',
+        in_app: false,
+        lineno: 17,
+        colno: 11,
+      },
+    ]);
+  });
 });

From 18ddc1af25e0e1cc1a0782b052967d869c74c470 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 18 Jan 2023 12:00:21 +0000
Subject: [PATCH 068/239] CI: A few CI updates and fixes (#625)

---
 .github/workflows/build.yml                   | 17 ++----
 .github/workflows/codeql-analysis.yml         | 58 +++++++++----------
 .../workflows/new-electron-versions-pr.yml    |  2 +-
 .github/workflows/new-sdk-versions-pr.yml     |  2 +-
 .github/workflows/release.yml                 |  2 +-
 5 files changed, 38 insertions(+), 43 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9e3d2aa5..6e53ab99 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -14,7 +14,7 @@ jobs:
     name: Build
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - uses: volta-cli/action@v3
       - name: Install
         run: yarn install
@@ -23,7 +23,7 @@ jobs:
       - name: Pack
         run: yarn pack
       - name: Archive Artifacts
-        uses: actions/upload-artifact@v3.1.1
+        uses: actions/upload-artifact@v3
         with:
           name: ${{ github.sha }}
           path: |
@@ -37,7 +37,7 @@ jobs:
     name: Lint
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - uses: volta-cli/action@v3
       - run: yarn install
       - name: Run Linter
@@ -48,12 +48,12 @@ jobs:
     needs: build
     runs-on: ${{ matrix.os }}
     strategy:
-      # we want that the matrix keeps running, default is to cancel them if it fails.
+      # we want that the matrix keeps running, default is to cancel all if one fails.
       fail-fast: false
       matrix:
         os: [ubuntu-latest, macos-latest, windows-latest]
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - uses: volta-cli/action@v3
       - run: yarn install
       - name: Run Unit Tests
@@ -71,13 +71,8 @@ jobs:
     env:
       ELECTRON_VERSION: ${{ matrix.electron }}
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - uses: volta-cli/action@v3
-      - uses: actions/cache@v2
-        with:
-          path: |
-            **/.cache/**/*.zip
-          key: ${{ runner.os }}-${{ matrix.electron }}
       - run: yarn install
       - name: Run E2E Tests
         run: yarn e2e
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 8537198d..9dfdb379 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -9,14 +9,14 @@
 # the `language` matrix defined below to confirm you have the correct set of
 # supported CodeQL languages.
 #
-name: "CodeQL"
+name: 'CodeQL'
 
 on:
   push:
-    branches: [ master ]
+    branches: [master]
   pull_request:
     # The branches below must be a subset of the branches above
-    branches: [ master ]
+    branches: [master]
   schedule:
     - cron: '33 4 * * 5'
 
@@ -28,40 +28,40 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        language: [ 'javascript' ]
+        language: ['javascript']
         # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
         # Learn more:
         # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
 
     steps:
-    - name: Checkout repository
-      uses: actions/checkout@v2
+      - name: Checkout repository
+        uses: actions/checkout@v3
 
-    # Initializes the CodeQL tools for scanning.
-    - name: Initialize CodeQL
-      uses: github/codeql-action/init@v1
-      with:
-        languages: ${{ matrix.language }}
-        # If you wish to specify custom queries, you can do so here or in a config file.
-        # By default, queries listed here will override any specified in a config file.
-        # Prefix the list here with "+" to use these queries and those in the config file.
-        # queries: ./path/to/local/query, your-org/your-repo/queries@main
+      # Initializes the CodeQL tools for scanning.
+      - name: Initialize CodeQL
+        uses: github/codeql-action/init@v1
+        with:
+          languages: ${{ matrix.language }}
+          # If you wish to specify custom queries, you can do so here or in a config file.
+          # By default, queries listed here will override any specified in a config file.
+          # Prefix the list here with "+" to use these queries and those in the config file.
+          # queries: ./path/to/local/query, your-org/your-repo/queries@main
 
-    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
-    # If this step fails, then you should remove it and run the build manually (see below)
-    - name: Autobuild
-      uses: github/codeql-action/autobuild@v1
+      # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
+      # If this step fails, then you should remove it and run the build manually (see below)
+      - name: Autobuild
+        uses: github/codeql-action/autobuild@v1
 
-    # ℹ️ Command-line programs to run using the OS shell.
-    # 📚 https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
+      # ℹ️ Command-line programs to run using the OS shell.
+      # 📚 https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
 
-    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
-    #    and modify them (or add more) to build your code if your project
-    #    uses a compiled language
+      # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
+      #    and modify them (or add more) to build your code if your project
+      #    uses a compiled language
 
-    #- run: |
-    #   make bootstrap
-    #   make release
+      #- run: |
+      #   make bootstrap
+      #   make release
 
-    - name: Perform CodeQL Analysis
-      uses: github/codeql-action/analyze@v1
+      - name: Perform CodeQL Analysis
+        uses: github/codeql-action/analyze@v1
diff --git a/.github/workflows/new-electron-versions-pr.yml b/.github/workflows/new-electron-versions-pr.yml
index 8c47b74d..ca7abfc1 100644
--- a/.github/workflows/new-electron-versions-pr.yml
+++ b/.github/workflows/new-electron-versions-pr.yml
@@ -9,7 +9,7 @@ jobs:
     name: Check new versions
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - uses: volta-cli/action@v3
       - run: yarn install
       - name: Update Versions
diff --git a/.github/workflows/new-sdk-versions-pr.yml b/.github/workflows/new-sdk-versions-pr.yml
index c93cb9ac..32b2c2e1 100644
--- a/.github/workflows/new-sdk-versions-pr.yml
+++ b/.github/workflows/new-sdk-versions-pr.yml
@@ -9,7 +9,7 @@ jobs:
     name: Check new versions
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - uses: volta-cli/action@v3
       - run: yarn install
       - name: Update Versions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 8e02b82e..92239b35 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -16,7 +16,7 @@ jobs:
     runs-on: ubuntu-latest
     name: 'Release a new version'
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
         with:
           token: ${{ secrets.GH_RELEASE_PAT }}
           fetch-depth: 0

From e58929e2b52a66b994384337d8cff4962e6d47d2 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 18 Jan 2023 12:13:02 +0000
Subject: [PATCH 069/239] feat: Update JavaScript SDKs to v7.31.1 (#628)

---
 .eslintrc.js        |   3 ++
 package.json        |  16 +++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 116 ++++++++++++++++++++++----------------------
 4 files changed, 70 insertions(+), 67 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index cf84dff0..6d0e6d0e 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -40,5 +40,8 @@ module.exports = {
     '@typescript-eslint/no-var-requires': 'off',
     '@sentry-internal/sdk/no-async-await': 'off',
     '@typescript-eslint/no-explicit-any': 'off',
+    '@typescript-eslint/consistent-type-imports': 'off',
+    '@sentry-internal/sdk/no-optional-chaining': 'off',
+    '@sentry-internal/sdk/no-nullish-coalescing': 'off',
   },
 };
diff --git a/package.json b/package.json
index a87e474b..0ea4bddd 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.30.0",
-    "@sentry/core": "7.30.0",
-    "@sentry/node": "7.30.0",
-    "@sentry/types": "7.30.0",
-    "@sentry/utils": "7.30.0",
+    "@sentry/browser": "7.31.1",
+    "@sentry/core": "7.31.1",
+    "@sentry/node": "7.31.1",
+    "@sentry/types": "7.31.1",
+    "@sentry/utils": "7.31.1",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.30.0",
-    "@sentry-internal/typescript": "7.30.0",
-    "@sentry/tracing": "7.30.0",
+    "@sentry-internal/eslint-config-sdk": "7.31.1",
+    "@sentry-internal/typescript": "7.31.1",
+    "@sentry/tracing": "7.31.1",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 39f8bbfd..6d6f69f2 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_30_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_31_1: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 09cc5417..a2490b8c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -129,13 +129,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.30.0.tgz#f527d00a9350601d343ec121aa8a19b23582fe1b"
-  integrity sha512-VhX0qRtC3GOD15YsK4oGmK2NeIErEChswX44X0bi3zvjMOSZCRM8w8YrtgCvbSBe2xrZyZnqRG/nxIOejuNHWw==
+"@sentry-internal/eslint-config-sdk@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.31.1.tgz#4473f01a7ef9c0facc5326893ca350d85da21041"
+  integrity sha512-RGgBa+sF4W7z8emW+4+r8xgVQtpSqfYSJMmU9wVe/UfIERNLnpj00pK4Vg4Bxbxiwf9TnXG/MyN3qyfJqqUpQw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.30.0"
-    "@sentry-internal/typescript" "7.30.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.31.1"
+    "@sentry-internal/typescript" "7.31.1"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -144,81 +144,81 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.30.0.tgz#daeee31f3cb167142bee4b35a6c5ac24d943fd45"
-  integrity sha512-1YOyrNYfv63wU42a+ezd/SX7bz/wn5ER+HPkbWCW/UpJn/HFVGke5/EHC7HBWcY/YBMDwIFfbP3ecOYwFWRzpA==
+"@sentry-internal/eslint-plugin-sdk@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.31.1.tgz#d08b96a7d892d83c6644aa136d33f63e523ead51"
+  integrity sha512-nXoDrgpJiRvKr2DIm556XE0MwLUM5LNatfBVzmJgOd57b2kCh2MamYCZBlqjmLvJ3cB/nYlG9xK4CKBPynXxcQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.30.0.tgz#c03648c670ca29d9c0f2d8f54ccefd46a38b9e1b"
-  integrity sha512-jQVCOXQ0tcGofvqLD3V+grcqC1I+WSCTAB5qoJOS567zoBOxj4NSz69yDxkrsLjVO1Pf5qrQhhvKkE1T7AiX5g==
+"@sentry-internal/typescript@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.31.1.tgz#efba3403d7539d4b106cac867f02cae330910af1"
+  integrity sha512-nYuLczcPd4PtKjfgdDMEGAczREBTtUTr1hjMZSafCMY4FUwdns9VKu4Eb13nrrytmF2zyqcCg4pPAXRuaeUAbA==
 
-"@sentry/browser@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.30.0.tgz#9b4387da933290546b7a4ef521713c38723a0213"
-  integrity sha512-9hpaNAqIBDLdnrZ51iWkqenRotqqweE1f2AlHO56nyT/UE+u+GdmAiBrgRNqdFQQM13JtTG/gu4HGOyLWb9HEA==
+"@sentry/browser@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.31.1.tgz#ac42ef5994d0e983e4c44c35b17013a0080c6527"
+  integrity sha512-Rg9F61S1tz1Dv3iUyyGP26bxoi7WJAG2+f2fBbSmFuJ+JTH4Jvu2/F1bBig8Dz01ejzVhbNSUUCfoDhSvksIsQ==
   dependencies:
-    "@sentry/core" "7.30.0"
-    "@sentry/replay" "7.30.0"
-    "@sentry/types" "7.30.0"
-    "@sentry/utils" "7.30.0"
+    "@sentry/core" "7.31.1"
+    "@sentry/replay" "7.31.1"
+    "@sentry/types" "7.31.1"
+    "@sentry/utils" "7.31.1"
     tslib "^1.9.3"
 
-"@sentry/core@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.30.0.tgz#02d2e8747484ba64b6d712e8afe6736250efdc26"
-  integrity sha512-NeLigkBlpcK63ymM63GoIHurml6V3BUe1Vi+trwm4/qqOTzT7PQhvdJCX+o3+atzRBH+zdb6kd4VWx44Oye3KA==
+"@sentry/core@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.31.1.tgz#8c48e9c6a24b612eb7f757fdf246ed6b22c26b3b"
+  integrity sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==
   dependencies:
-    "@sentry/types" "7.30.0"
-    "@sentry/utils" "7.30.0"
+    "@sentry/types" "7.31.1"
+    "@sentry/utils" "7.31.1"
     tslib "^1.9.3"
 
-"@sentry/node@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.30.0.tgz#42ef5b29d065f6de6ac5556a56aca20d3b9073e1"
-  integrity sha512-YYasu6C3I0HBP4N1oc/ed2nunxhGJgtAWaKwq3lo8uk3uF6cB1A8+2e0CpjzU5ejhbaFPUBxHyj4th39Bvku/w==
+"@sentry/node@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.31.1.tgz#cba1eaa5664fc7e6dc07bb5a378f7dbe42f63457"
+  integrity sha512-4VzfOU1YHeoGkBQmkVXlXoXITf+1NkZEREKhdzgpVAkVjb2Tk3sMoFov4wOKWnNTTj4ka50xyaw/ZmqApgQ4Pw==
   dependencies:
-    "@sentry/core" "7.30.0"
-    "@sentry/types" "7.30.0"
-    "@sentry/utils" "7.30.0"
+    "@sentry/core" "7.31.1"
+    "@sentry/types" "7.31.1"
+    "@sentry/utils" "7.31.1"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.30.0.tgz#44db86956166fc8909459eef8ce94f750c072519"
-  integrity sha512-qJgz1tG0uStqMF5V7gN7KqxZuZY0MMQQY7siwPcSQVYj7X3AQswHjmvD4npEKbIa+jP6aQ6fFjoBjl3c0t3Mmg==
+"@sentry/replay@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.31.1.tgz#453ad85fc2f14e4d203d3a7e0bf790877f697964"
+  integrity sha512-sLArvwZn6IwA/bASctyhxN7LhdCXJvMmyTynRfmk7pzuNzBMc5CNlHeIsDpHrfQuH53IKicvl6cHnHyclu5DSA==
   dependencies:
-    "@sentry/core" "7.30.0"
-    "@sentry/types" "7.30.0"
-    "@sentry/utils" "7.30.0"
+    "@sentry/core" "7.31.1"
+    "@sentry/types" "7.31.1"
+    "@sentry/utils" "7.31.1"
 
-"@sentry/tracing@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.30.0.tgz#b4576fbaf81ce418f1b7c37e7e5f4f6cf19a3c3b"
-  integrity sha512-bjGeDeKhpGAmLcWcrXFT/xOfHVwp/j0L1aRHzYHnqgTjVzD0NXcooPu/Nz8vF0paxz+hPD5bJwb8kz/ggJzGWQ==
+"@sentry/tracing@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.31.1.tgz#f3bf8ca3aa9ddc15c282425df8043be978baadb4"
+  integrity sha512-kW6vNwddp2Ycq2JfTzveUEIRF9YQwvl7L6BBoOZt9oVnYlsPipEeyU2Q277LatHldr8hDo2tbz/vz2BQjO5GSw==
   dependencies:
-    "@sentry/core" "7.30.0"
-    "@sentry/types" "7.30.0"
-    "@sentry/utils" "7.30.0"
+    "@sentry/core" "7.31.1"
+    "@sentry/types" "7.31.1"
+    "@sentry/utils" "7.31.1"
     tslib "^1.9.3"
 
-"@sentry/types@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.30.0.tgz#fc2baeb5b0e1ecc4d52b07b056fcba54449cd9ce"
-  integrity sha512-l4A86typvt/SfWh5JffpdxNGkg5EEA8m35BzpIcKmCAQZUDmnb4b478r8jdD2uuOjLmPNmZr1tifdRW4NCLuxQ==
+"@sentry/types@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.31.1.tgz#920fc10b289ac1f99f277033b4d26625028a1f9f"
+  integrity sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==
 
-"@sentry/utils@7.30.0":
-  version "7.30.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.30.0.tgz#1d83145399c65e31f725c1b6ae02f451a990f326"
-  integrity sha512-tSlBhr5u/LdE2emxIDTDmjmyRr99GnZGIAh5GwRxUgeDQ3VEfNUFlyFodBCbZ6yeYTYd6PWNih5xoHn1+Rf3Sw==
+"@sentry/utils@7.31.1":
+  version "7.31.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.31.1.tgz#bdc988de603318a30ff247d5702c2f9ac81255cb"
+  integrity sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==
   dependencies:
-    "@sentry/types" "7.30.0"
+    "@sentry/types" "7.31.1"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From 4564258fa4231d446bfc1ffeefc4a7f15a3f3132 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 19 Jan 2023 22:50:55 +0000
Subject: [PATCH 070/239] test: New Electron versions (#630)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 1defc426..b228b954 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.9","21.3.4","22.0.2"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.10","21.3.5","22.0.3"]

From a8c4274c91c37d0deac9b4e231bbede29215bea1 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 2 Feb 2023 14:02:18 +0100
Subject: [PATCH 071/239] test: New Electron versions (#632)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index b228b954..9be33b05 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.10","21.3.5","22.0.3"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.11","21.4.1","22.2.0"]

From dbc3f4db4e4eb9284cdde09d8180919b7d99b442 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 2 Feb 2023 14:41:38 +0100
Subject: [PATCH 072/239] fix: Replay should be re-exported (#633)

---
 src/renderer/index.ts                                  | 2 +-
 test/e2e/test-apps/other/browser-replay/package.json   | 3 +--
 test/e2e/test-apps/other/browser-replay/src/index.html | 3 +--
 3 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 44d88b8a..1d81528c 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -45,7 +45,7 @@ export {
   InboundFilters,
 } from '@sentry/core';
 
-export { BrowserClient, lastEventId, showReportDialog } from '@sentry/browser';
+export { BrowserClient, lastEventId, showReportDialog, Replay } from '@sentry/browser';
 export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser';
 
 export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations };
diff --git a/test/e2e/test-apps/other/browser-replay/package.json b/test/e2e/test-apps/other/browser-replay/package.json
index 07307186..01f82712 100644
--- a/test/e2e/test-apps/other/browser-replay/package.json
+++ b/test/e2e/test-apps/other/browser-replay/package.json
@@ -3,7 +3,6 @@
   "version": "1.0.0",
   "main": "src/main.js",
   "dependencies": {
-    "@sentry/electron": "3.0.0",
-    "@sentry/replay": "7.0.0"
+    "@sentry/electron": "3.0.0"
   }
 }
diff --git a/test/e2e/test-apps/other/browser-replay/src/index.html b/test/e2e/test-apps/other/browser-replay/src/index.html
index 6d4d5897..b6e3a5aa 100644
--- a/test/e2e/test-apps/other/browser-replay/src/index.html
+++ b/test/e2e/test-apps/other/browser-replay/src/index.html
@@ -5,8 +5,7 @@
   </head>
   <body>
     <script>
-      const { init } = require('@sentry/electron');
-      const { Replay } = require('@sentry/replay');
+      const { init, Replay } = require('@sentry/electron/renderer');
 
       init({
         debug: true,

From 3aca3aa32085a634e1e6fe8270c005d9727575e8 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 2 Feb 2023 14:42:00 +0100
Subject: [PATCH 073/239] test: Update Sentry SDKs to 7.35.0 (#631)

---
 package.json        |  18 +++----
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 116 ++++++++++++++++++++++----------------------
 3 files changed, 68 insertions(+), 68 deletions(-)

diff --git a/package.json b/package.json
index 0ea4bddd..71dd1589 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.31.1",
-    "@sentry/core": "7.31.1",
-    "@sentry/node": "7.31.1",
-    "@sentry/types": "7.31.1",
-    "@sentry/utils": "7.31.1",
+    "@sentry/browser": "7.35.0",
+    "@sentry/core": "7.35.0",
+    "@sentry/node": "7.35.0",
+    "@sentry/types": "7.35.0",
+    "@sentry/utils": "7.35.0",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.31.1",
-    "@sentry-internal/typescript": "7.31.1",
-    "@sentry/tracing": "7.31.1",
+    "@sentry-internal/eslint-config-sdk": "7.35.0",
+    "@sentry-internal/typescript": "7.35.0",
+    "@sentry/tracing": "7.35.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -107,4 +107,4 @@
     "node": "18.12.1",
     "yarn": "1.22.17"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 6d6f69f2..3023956b 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_31_1: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_35_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index a2490b8c..851e37e1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -129,13 +129,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.31.1.tgz#4473f01a7ef9c0facc5326893ca350d85da21041"
-  integrity sha512-RGgBa+sF4W7z8emW+4+r8xgVQtpSqfYSJMmU9wVe/UfIERNLnpj00pK4Vg4Bxbxiwf9TnXG/MyN3qyfJqqUpQw==
+"@sentry-internal/eslint-config-sdk@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.35.0.tgz#c3922f9585cfb4faa7b42f49e2f754b97726861d"
+  integrity sha512-F1Y3mTw46yu5xOKccgxezdrin3uJicULt6eVsV1xt9el/d0kOrXgli8dwOZrgm/cy1aYCGubVrw6IX7g/gucFA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.31.1"
-    "@sentry-internal/typescript" "7.31.1"
+    "@sentry-internal/eslint-plugin-sdk" "7.35.0"
+    "@sentry-internal/typescript" "7.35.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -144,81 +144,81 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.31.1.tgz#d08b96a7d892d83c6644aa136d33f63e523ead51"
-  integrity sha512-nXoDrgpJiRvKr2DIm556XE0MwLUM5LNatfBVzmJgOd57b2kCh2MamYCZBlqjmLvJ3cB/nYlG9xK4CKBPynXxcQ==
+"@sentry-internal/eslint-plugin-sdk@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.35.0.tgz#03bab00364e2cf105a0c8037528186966605d89d"
+  integrity sha512-33E2jhzFzB4mE0W42y5l6P8FvCH9BMl8VCcLAyuthTqGpT9MAxd3pJI3Xhpq9zUGP291OFHEP1doSTruvlezwA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.31.1.tgz#efba3403d7539d4b106cac867f02cae330910af1"
-  integrity sha512-nYuLczcPd4PtKjfgdDMEGAczREBTtUTr1hjMZSafCMY4FUwdns9VKu4Eb13nrrytmF2zyqcCg4pPAXRuaeUAbA==
+"@sentry-internal/typescript@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.35.0.tgz#fdd17f08ccd4cb81e3c4343929ba90a9164bd67a"
+  integrity sha512-j1xgTlFwV6MUeBoHpt3u+fGEscbPwiA9nDU+vJJCQ8UY0V6/8yanA1S/UcQ0OZv9BjsfFRMRrJyDYZwwpMSOhA==
 
-"@sentry/browser@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.31.1.tgz#ac42ef5994d0e983e4c44c35b17013a0080c6527"
-  integrity sha512-Rg9F61S1tz1Dv3iUyyGP26bxoi7WJAG2+f2fBbSmFuJ+JTH4Jvu2/F1bBig8Dz01ejzVhbNSUUCfoDhSvksIsQ==
+"@sentry/browser@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.35.0.tgz#fdc5f25706acfb49c2635e2cad9eccf997991e15"
+  integrity sha512-2uoBNVsO26aa+Ln9h0K2MklDg6OAt4S0upZcYF9EoPf3ryUNmv0GCX8MG0kQ7+WQfO/jrlKv9zJggyYWGutSZQ==
   dependencies:
-    "@sentry/core" "7.31.1"
-    "@sentry/replay" "7.31.1"
-    "@sentry/types" "7.31.1"
-    "@sentry/utils" "7.31.1"
+    "@sentry/core" "7.35.0"
+    "@sentry/replay" "7.35.0"
+    "@sentry/types" "7.35.0"
+    "@sentry/utils" "7.35.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.31.1.tgz#8c48e9c6a24b612eb7f757fdf246ed6b22c26b3b"
-  integrity sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==
+"@sentry/core@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.35.0.tgz#2d6d3ebb3224bd3a1321da3afa4a7e2900b9bb1a"
+  integrity sha512-j+UJaWDUyLCWOTKMrDFivy/rH5QuSvPK9TsOmYOIFctSKfp+e9Ap0cPRPXNObwim2YTpN4wpl7TqDGDANTKhuQ==
   dependencies:
-    "@sentry/types" "7.31.1"
-    "@sentry/utils" "7.31.1"
+    "@sentry/types" "7.35.0"
+    "@sentry/utils" "7.35.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.31.1.tgz#cba1eaa5664fc7e6dc07bb5a378f7dbe42f63457"
-  integrity sha512-4VzfOU1YHeoGkBQmkVXlXoXITf+1NkZEREKhdzgpVAkVjb2Tk3sMoFov4wOKWnNTTj4ka50xyaw/ZmqApgQ4Pw==
+"@sentry/node@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.35.0.tgz#5ba48d4c4271c0304f65f0a94d429bfea49e01c2"
+  integrity sha512-uenomjlwSk1zX4gyNV6DdJFQXgDzzdLUcTCFWoO2D3sDqCGiJO6fmRXX+kVVanYcRXfKg14ko5uelfCj6pq9BQ==
   dependencies:
-    "@sentry/core" "7.31.1"
-    "@sentry/types" "7.31.1"
-    "@sentry/utils" "7.31.1"
+    "@sentry/core" "7.35.0"
+    "@sentry/types" "7.35.0"
+    "@sentry/utils" "7.35.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.31.1.tgz#453ad85fc2f14e4d203d3a7e0bf790877f697964"
-  integrity sha512-sLArvwZn6IwA/bASctyhxN7LhdCXJvMmyTynRfmk7pzuNzBMc5CNlHeIsDpHrfQuH53IKicvl6cHnHyclu5DSA==
+"@sentry/replay@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.35.0.tgz#7f55e86a662a0e35a323152895185cd0527b3bcd"
+  integrity sha512-msD76vT4yc5JvxcCVk21YkH8BP9unJ6xRmtCyaCHi7bDsfdu7RcQD+jIAOyS0534uHQLn6BZ2wAW8O4mpTk+7g==
   dependencies:
-    "@sentry/core" "7.31.1"
-    "@sentry/types" "7.31.1"
-    "@sentry/utils" "7.31.1"
+    "@sentry/core" "7.35.0"
+    "@sentry/types" "7.35.0"
+    "@sentry/utils" "7.35.0"
 
-"@sentry/tracing@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.31.1.tgz#f3bf8ca3aa9ddc15c282425df8043be978baadb4"
-  integrity sha512-kW6vNwddp2Ycq2JfTzveUEIRF9YQwvl7L6BBoOZt9oVnYlsPipEeyU2Q277LatHldr8hDo2tbz/vz2BQjO5GSw==
+"@sentry/tracing@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.35.0.tgz#5d579325042eebb6bb41a739384ec46d2af96438"
+  integrity sha512-+mXydQjsoX1Lyjil1IR51hVKsm6vYYCYaKZXo/BzUsjKS0INK1GsfanqHzu2So9bBS5dPLo78lq5YuFsIsAAkw==
   dependencies:
-    "@sentry/core" "7.31.1"
-    "@sentry/types" "7.31.1"
-    "@sentry/utils" "7.31.1"
+    "@sentry/core" "7.35.0"
+    "@sentry/types" "7.35.0"
+    "@sentry/utils" "7.35.0"
     tslib "^1.9.3"
 
-"@sentry/types@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.31.1.tgz#920fc10b289ac1f99f277033b4d26625028a1f9f"
-  integrity sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==
+"@sentry/types@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.35.0.tgz#08bd28b03dcecdb52928c604da9b2160702926b5"
+  integrity sha512-gy1PhwYvER/F80N+ZI06PjMk55xAZ4P+r3jomsMnOXQBWzx2VEEpc2fS/3B21wymxSl+mjh+5sUlk/JpxxOQvQ==
 
-"@sentry/utils@7.31.1":
-  version "7.31.1"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.31.1.tgz#bdc988de603318a30ff247d5702c2f9ac81255cb"
-  integrity sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==
+"@sentry/utils@7.35.0":
+  version "7.35.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.35.0.tgz#e139e2edc0a11c3b7ff429159412782e9ae0a0f3"
+  integrity sha512-xB/uVNXrfSwQj5fZsYOHr70ORq9qNT+9FAoUGffAQUyVjRhXG27KxsstK1Rv2yt+FBCHY06e3vE4K9B4zwSe7Q==
   dependencies:
-    "@sentry/types" "7.31.1"
+    "@sentry/types" "7.35.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From 00b10000376905cb30ebf370bf1f937ad2f3e9eb Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 2 Feb 2023 18:43:29 +0100
Subject: [PATCH 074/239] chore: Update CHANGELOG for 4.3.0 release (#635)

---
 CHANGELOG.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78e2ae15..fb304366 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## Unreleased
 
+## 4.3.0
+
+- feat: Update Sentry SDKs to 7.35.0 (#631)
+- fix: Replay should be re-exported (#633)
+
 ## 4.2.0
 
 - feat: Update JavaScript SDKs to 7.30.0 and add support for Replay in renderers (#618)

From 0ef7ad99011f08481194ea99521d2b96738b8f32 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 8 Feb 2023 12:56:38 +0100
Subject: [PATCH 075/239] test: New Electron versions (#638)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 9be33b05..b38e56b9 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.11","21.4.1","22.2.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.11","21.4.1","22.2.0","23.0.0"]

From 484c1fabe4b63e8a481c64b094987892ffba9923 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sat, 11 Feb 2023 13:58:48 +0100
Subject: [PATCH 076/239] test: New Electron versions (#639)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index b38e56b9..75cc5e0a 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.11","21.4.1","22.2.0","23.0.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.1","22.2.1","23.0.0"]

From ad651fca23f1918dff3358cf947bd22a0e42e6ad Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 13 Feb 2023 10:16:55 +0100
Subject: [PATCH 077/239] chore(deps): bump http-cache-semantics from 4.1.0 to
 4.1.1 (#634)

---
 yarn.lock | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/yarn.lock b/yarn.lock
index 851e37e1..daac3dd2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2000,9 +2000,9 @@ http-assert@^1.3.0:
     http-errors "~1.8.0"
 
 http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
-  integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+  integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
 
 http-errors@2.0.0:
   version "2.0.0"

From 5be18e5212d09912a506ca9f01107de2bf043f94 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 13 Feb 2023 10:36:37 +0100
Subject: [PATCH 078/239] test: Update Sentry SDKs to 7.37.1 (#636)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 package.json        |  16 +++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 116 ++++++++++++++++++++++----------------------
 3 files changed, 67 insertions(+), 67 deletions(-)

diff --git a/package.json b/package.json
index 71dd1589..0dbd3c8d 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.35.0",
-    "@sentry/core": "7.35.0",
-    "@sentry/node": "7.35.0",
-    "@sentry/types": "7.35.0",
-    "@sentry/utils": "7.35.0",
+    "@sentry/browser": "7.37.1",
+    "@sentry/core": "7.37.1",
+    "@sentry/node": "7.37.1",
+    "@sentry/types": "7.37.1",
+    "@sentry/utils": "7.37.1",
     "deepmerge": "4.2.2",
     "tslib": "^2.3.1"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.35.0",
-    "@sentry-internal/typescript": "7.35.0",
-    "@sentry/tracing": "7.35.0",
+    "@sentry-internal/eslint-config-sdk": "7.37.1",
+    "@sentry-internal/typescript": "7.37.1",
+    "@sentry/tracing": "7.37.1",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 3023956b..ff946a3b 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_35_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_37_1: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index daac3dd2..91caff3c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -129,13 +129,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.35.0.tgz#c3922f9585cfb4faa7b42f49e2f754b97726861d"
-  integrity sha512-F1Y3mTw46yu5xOKccgxezdrin3uJicULt6eVsV1xt9el/d0kOrXgli8dwOZrgm/cy1aYCGubVrw6IX7g/gucFA==
+"@sentry-internal/eslint-config-sdk@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.37.1.tgz#1dafb9edbe7df94fb791c95aff80b6437f60a36a"
+  integrity sha512-jdkt6DG0+IwctiH8J1be8ZyQlgDyzkeJvhEZv8D/ZdCM5tqjvUqkbqS1yVTfwV+5OfjIMnQ4I9D/5Fnt8V14Rg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.35.0"
-    "@sentry-internal/typescript" "7.35.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.37.1"
+    "@sentry-internal/typescript" "7.37.1"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -144,81 +144,81 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.35.0.tgz#03bab00364e2cf105a0c8037528186966605d89d"
-  integrity sha512-33E2jhzFzB4mE0W42y5l6P8FvCH9BMl8VCcLAyuthTqGpT9MAxd3pJI3Xhpq9zUGP291OFHEP1doSTruvlezwA==
+"@sentry-internal/eslint-plugin-sdk@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.37.1.tgz#9f6da2b0c711edeca628cb76eedf5f4776863dd2"
+  integrity sha512-SENuFIWVzb7xDEOdQTV8/i4EUb+s9ro6QWM/etXALQGE/Cvdors4YzTzfm3dJzV0Uk5DF3IPwdwQvimEeOsXHA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.35.0.tgz#fdd17f08ccd4cb81e3c4343929ba90a9164bd67a"
-  integrity sha512-j1xgTlFwV6MUeBoHpt3u+fGEscbPwiA9nDU+vJJCQ8UY0V6/8yanA1S/UcQ0OZv9BjsfFRMRrJyDYZwwpMSOhA==
+"@sentry-internal/typescript@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.37.1.tgz#69ab51dc699eef56478da115789999dedb762e07"
+  integrity sha512-DEgaC5noRaY7WHM2XKEDRKbO01LtI4TVYxdbEgZQUmQX7FV1Ql27otHtEGiMBKe8JqoRHYm+Q3J9ZRtblMDERQ==
 
-"@sentry/browser@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.35.0.tgz#fdc5f25706acfb49c2635e2cad9eccf997991e15"
-  integrity sha512-2uoBNVsO26aa+Ln9h0K2MklDg6OAt4S0upZcYF9EoPf3ryUNmv0GCX8MG0kQ7+WQfO/jrlKv9zJggyYWGutSZQ==
+"@sentry/browser@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.37.1.tgz#d452ebed7f974f20872d34744e67d856ab54a41b"
+  integrity sha512-MfVbKzEVHKVH6ZyMCKLtPXvMtRCvxqQzrnK735sYW6EyMpcMYhukBU0pq7ws1E/KaCZjAJi1wDx2nqf2yPIVdQ==
   dependencies:
-    "@sentry/core" "7.35.0"
-    "@sentry/replay" "7.35.0"
-    "@sentry/types" "7.35.0"
-    "@sentry/utils" "7.35.0"
+    "@sentry/core" "7.37.1"
+    "@sentry/replay" "7.37.1"
+    "@sentry/types" "7.37.1"
+    "@sentry/utils" "7.37.1"
     tslib "^1.9.3"
 
-"@sentry/core@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.35.0.tgz#2d6d3ebb3224bd3a1321da3afa4a7e2900b9bb1a"
-  integrity sha512-j+UJaWDUyLCWOTKMrDFivy/rH5QuSvPK9TsOmYOIFctSKfp+e9Ap0cPRPXNObwim2YTpN4wpl7TqDGDANTKhuQ==
+"@sentry/core@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.37.1.tgz#6d8d151b3d6ae0d6f81c7f4da92cd2e7cb5bf1fa"
+  integrity sha512-eS5hoFDjAOl7POZg6K77J0oiypiqR1782oVSB49UkjK+D8tCZzZ5PxPMv0b/O0310p7x4oZ3WGRJaWEN3vY4KQ==
   dependencies:
-    "@sentry/types" "7.35.0"
-    "@sentry/utils" "7.35.0"
+    "@sentry/types" "7.37.1"
+    "@sentry/utils" "7.37.1"
     tslib "^1.9.3"
 
-"@sentry/node@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.35.0.tgz#5ba48d4c4271c0304f65f0a94d429bfea49e01c2"
-  integrity sha512-uenomjlwSk1zX4gyNV6DdJFQXgDzzdLUcTCFWoO2D3sDqCGiJO6fmRXX+kVVanYcRXfKg14ko5uelfCj6pq9BQ==
+"@sentry/node@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.37.1.tgz#c234e8711090b7532358bb1d6ab3fcca75356e98"
+  integrity sha512-nGerngIo5JwinJgl7m0SaL/xI+YRBlhb53gbkuLSAAcnoitBFzbp7LjywsqYFTWuWDIyk7O2t124GNxtolBAgA==
   dependencies:
-    "@sentry/core" "7.35.0"
-    "@sentry/types" "7.35.0"
-    "@sentry/utils" "7.35.0"
+    "@sentry/core" "7.37.1"
+    "@sentry/types" "7.37.1"
+    "@sentry/utils" "7.37.1"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.35.0.tgz#7f55e86a662a0e35a323152895185cd0527b3bcd"
-  integrity sha512-msD76vT4yc5JvxcCVk21YkH8BP9unJ6xRmtCyaCHi7bDsfdu7RcQD+jIAOyS0534uHQLn6BZ2wAW8O4mpTk+7g==
+"@sentry/replay@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.37.1.tgz#8ab4588b28baa07e35c417d3ffc6aaf934c58c45"
+  integrity sha512-3sHOE/oPirdvJbOn0IA/wpds12Sm2WaEtiAeC0+5Gg5mxQzFBLRrsA1Mz/ifzPGwr+ETn3sCyPCnd9b3PWaWMQ==
   dependencies:
-    "@sentry/core" "7.35.0"
-    "@sentry/types" "7.35.0"
-    "@sentry/utils" "7.35.0"
+    "@sentry/core" "7.37.1"
+    "@sentry/types" "7.37.1"
+    "@sentry/utils" "7.37.1"
 
-"@sentry/tracing@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.35.0.tgz#5d579325042eebb6bb41a739384ec46d2af96438"
-  integrity sha512-+mXydQjsoX1Lyjil1IR51hVKsm6vYYCYaKZXo/BzUsjKS0INK1GsfanqHzu2So9bBS5dPLo78lq5YuFsIsAAkw==
+"@sentry/tracing@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.37.1.tgz#f5db7990f09be8d3c6b621b3718c268fff163ba0"
+  integrity sha512-3mQG2XtMCGqDkgfzhKpRJAIfRaokNAOF8WafgAmFmZQwEDsRAFjZ3pLoO+KiBUeQE5E5et7HyWBOl9rqHCkWnQ==
   dependencies:
-    "@sentry/core" "7.35.0"
-    "@sentry/types" "7.35.0"
-    "@sentry/utils" "7.35.0"
+    "@sentry/core" "7.37.1"
+    "@sentry/types" "7.37.1"
+    "@sentry/utils" "7.37.1"
     tslib "^1.9.3"
 
-"@sentry/types@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.35.0.tgz#08bd28b03dcecdb52928c604da9b2160702926b5"
-  integrity sha512-gy1PhwYvER/F80N+ZI06PjMk55xAZ4P+r3jomsMnOXQBWzx2VEEpc2fS/3B21wymxSl+mjh+5sUlk/JpxxOQvQ==
+"@sentry/types@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.37.1.tgz#269da7da39c1a5243bf5f9a35370291b5cc205bb"
+  integrity sha512-c2HWyWSgVA0V4+DSW2qVb0yjftrb1X/q2CzCom+ayjGHO72qyWC+9Tc+7ZfotU1mapRjqUWBgkXkbGmao8N8Ug==
 
-"@sentry/utils@7.35.0":
-  version "7.35.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.35.0.tgz#e139e2edc0a11c3b7ff429159412782e9ae0a0f3"
-  integrity sha512-xB/uVNXrfSwQj5fZsYOHr70ORq9qNT+9FAoUGffAQUyVjRhXG27KxsstK1Rv2yt+FBCHY06e3vE4K9B4zwSe7Q==
+"@sentry/utils@7.37.1":
+  version "7.37.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.37.1.tgz#7695d6e30d6178723f3fa446a9553893bca85e96"
+  integrity sha512-/4mJOyDsfysx+5TXyJgSI+Ihw2/0EVJbrHjCyXPDXW5ADwbtU8VdBZ0unOmF0hk4QfftqwM9cyEu3BN4iBJsEA==
   dependencies:
-    "@sentry/types" "7.35.0"
+    "@sentry/types" "7.37.1"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^0.14.0":

From f979333f2013e77d8101d5217fcf59a4a18efc45 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 13 Feb 2023 12:41:06 +0100
Subject: [PATCH 079/239] chore: Update dependencies (#640)

---
 examples/electron-forge-webpack/package.json  |   2 +-
 examples/electron-forge/package.json          |   2 +-
 .../electron-react-boilerplate/package.json   |   2 +-
 examples/electron-vite/package.json           |   2 +-
 package.json                                  |  28 +-
 .../other/error-entry-point/package.json      |   2 +-
 yarn.lock                                     | 714 ++++++++----------
 7 files changed, 350 insertions(+), 402 deletions(-)

diff --git a/examples/electron-forge-webpack/package.json b/examples/electron-forge-webpack/package.json
index 86688199..effe250b 100644
--- a/examples/electron-forge-webpack/package.json
+++ b/examples/electron-forge-webpack/package.json
@@ -31,7 +31,7 @@
     "@electron-forge/cli": "6.0.0-beta.63",
     "@electron-forge/plugin-webpack": "6.0.0-beta.63",
     "@vercel/webpack-asset-relocator-loader": "1.6.0",
-    "electron": "15.2.0",
+    "electron": "23.0.0",
     "node-loader": "^2.0.0"
   },
   "dependencies": {
diff --git a/examples/electron-forge/package.json b/examples/electron-forge/package.json
index 93f541df..25f63605 100644
--- a/examples/electron-forge/package.json
+++ b/examples/electron-forge/package.json
@@ -11,6 +11,6 @@
   },
   "devDependencies": {
     "@electron-forge/cli": "6.0.0-beta.63",
-    "electron": "13.1.9"
+    "electron": "23.0.0"
   }
 }
\ No newline at end of file
diff --git a/examples/electron-react-boilerplate/package.json b/examples/electron-react-boilerplate/package.json
index b6787de6..c6d46bee 100644
--- a/examples/electron-react-boilerplate/package.json
+++ b/examples/electron-react-boilerplate/package.json
@@ -28,7 +28,7 @@
     "css-loader": "^6.5.1",
     "css-minimizer-webpack-plugin": "^3.3.1",
     "detect-port": "^1.3.0",
-    "electron": "^16.0.5",
+    "electron": "^23.0.0",
     "electron-builder": "22.13.1",
     "electron-devtools-installer": "^3.2.0",
     "electron-notarize": "^1.1.1",
diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json
index 23af13c4..6051ae5d 100644
--- a/examples/electron-vite/package.json
+++ b/examples/electron-vite/package.json
@@ -16,6 +16,6 @@
   "devDependencies": {
     "@vitejs/plugin-vue": "^3.1.2",
     "vite": "^3.1.8",
-    "electron": "13.1.9"
+    "electron": "23.0.0"
   }
 }
diff --git a/package.json b/package.json
index 0dbd3c8d..670a4b89 100644
--- a/package.json
+++ b/package.json
@@ -63,8 +63,8 @@
     "@sentry/node": "7.37.1",
     "@sentry/types": "7.37.1",
     "@sentry/utils": "7.37.1",
-    "deepmerge": "4.2.2",
-    "tslib": "^2.3.1"
+    "deepmerge": "4.3.0",
+    "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@sentry-internal/eslint-config-sdk": "7.37.1",
@@ -80,31 +80,31 @@
     "@types/mocha": "^9.0.0",
     "@types/tmp": "^0.2.2",
     "busboy": "^0.3.1",
-    "chai": "^4.3.4",
+    "chai": "^4.3.7",
     "chai-as-promised": "^7.1.1",
     "chai-subset": "^1.6.0",
     "cross-env": "^7.0.3",
-    "electron": "19.1.8",
+    "electron": "23.0.0",
     "electron-latest-versions": "^0.2.0",
-    "electron-mocha": "^11.0.0",
+    "electron-mocha": "^11.0.2",
     "eslint": "7.32.0",
     "extract-zip": "^2.0.1",
-    "koa": "^2.13.4",
+    "koa": "^2.14.1",
     "koa-bodyparser": "^4.3.0",
-    "koa-tree-router": "^0.8.0",
+    "koa-tree-router": "^0.12.1",
     "latest-version": "^7.0.0",
-    "mocha": "^9.1.3",
+    "mocha": "^10.2.0",
     "npm-run-all": "^4.1.5",
-    "prettier": "^2.4.1",
+    "prettier": "^2.8.4",
     "rimraf": "^3.0.2",
     "tmp": "^0.2.1",
-    "ts-node": "^10.4.0",
-    "typescript": "^4.4.4",
+    "ts-node": "^10.9.1",
+    "typescript": "^4.9.5",
     "xvfb-maybe": "^0.2.1",
-    "yaml": "^1.10.2"
+    "yaml": "^2.2.1"
   },
   "volta": {
     "node": "18.12.1",
-    "yarn": "1.22.17"
+    "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}
diff --git a/test/e2e/test-apps/other/error-entry-point/package.json b/test/e2e/test-apps/other/error-entry-point/package.json
index 84d73ced..29e5af22 100644
--- a/test/e2e/test-apps/other/error-entry-point/package.json
+++ b/test/e2e/test-apps/other/error-entry-point/package.json
@@ -10,6 +10,6 @@
   },
   "devDependencies": {
     "vite": "^2.7.10",
-    "electron": "13.1.9"
+    "electron": "23.0.0"
   }
 }
diff --git a/yarn.lock b/yarn.lock
index 91caff3c..dbd5ecb6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -30,21 +30,20 @@
   dependencies:
     "@jridgewell/trace-mapping" "0.3.9"
 
-"@electron/get@^1.14.1":
-  version "1.14.1"
-  resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40"
-  integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==
+"@electron/get@^2.0.0":
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e"
+  integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==
   dependencies:
     debug "^4.1.1"
     env-paths "^2.2.0"
     fs-extra "^8.1.0"
-    got "^9.6.0"
+    got "^11.8.5"
     progress "^2.0.3"
     semver "^6.2.0"
     sumchecker "^3.0.1"
   optionalDependencies:
     global-agent "^3.0.0"
-    global-tunnel-ng "^2.7.1"
 
 "@eslint/eslintrc@^0.4.3":
   version "0.4.3"
@@ -221,22 +220,22 @@
     "@sentry/types" "7.37.1"
     tslib "^1.9.3"
 
-"@sindresorhus/is@^0.14.0":
-  version "0.14.0"
-  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
-  integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+"@sindresorhus/is@^4.0.0":
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+  integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
 
 "@sindresorhus/is@^5.2.0":
   version "5.3.0"
   resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc"
   integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==
 
-"@szmarczak/http-timer@^1.1.2":
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
-  integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+"@szmarczak/http-timer@^4.0.5":
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
+  integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
   dependencies:
-    defer-to-connect "^1.0.1"
+    defer-to-connect "^2.0.0"
 
 "@szmarczak/http-timer@^5.0.1":
   version "5.0.1"
@@ -287,6 +286,16 @@
   dependencies:
     "@types/node" "*"
 
+"@types/cacheable-request@^6.0.1":
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
+  integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
+  dependencies:
+    "@types/http-cache-semantics" "*"
+    "@types/keyv" "^3.1.4"
+    "@types/node" "*"
+    "@types/responselike" "^1.0.0"
+
 "@types/chai-as-promised@^7.1.5":
   version "7.1.5"
   resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255"
@@ -328,22 +337,22 @@
     "@types/keygrip" "*"
     "@types/node" "*"
 
-"@types/express-serve-static-core@^4.17.31":
-  version "4.17.32"
-  resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82"
-  integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==
+"@types/express-serve-static-core@^4.17.33":
+  version "4.17.33"
+  resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543"
+  integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==
   dependencies:
     "@types/node" "*"
     "@types/qs" "*"
     "@types/range-parser" "*"
 
 "@types/express@*":
-  version "4.17.15"
-  resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff"
-  integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==
+  version "4.17.17"
+  resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4"
+  integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==
   dependencies:
     "@types/body-parser" "*"
-    "@types/express-serve-static-core" "^4.17.31"
+    "@types/express-serve-static-core" "^4.17.33"
     "@types/qs" "*"
     "@types/serve-static" "*"
 
@@ -359,7 +368,7 @@
   resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661"
   integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==
 
-"@types/http-cache-semantics@^4.0.1":
+"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.1":
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
   integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
@@ -384,6 +393,13 @@
   resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
   integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
 
+"@types/keyv@^3.1.4":
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+  integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+  dependencies:
+    "@types/node" "*"
+
 "@types/koa-bodyparser@^4.3.0":
   version "4.3.10"
   resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.10.tgz#02b8d3d57579aa7d491d553f1f4058088bfe127f"
@@ -398,7 +414,7 @@
   dependencies:
     "@types/koa" "*"
 
-"@types/koa@*", "@types/koa@^2.0.52", "@types/koa@^2.11.6":
+"@types/koa@*", "@types/koa@^2.0.52", "@types/koa@^2.13.4":
   version "2.13.5"
   resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.5.tgz#64b3ca4d54e08c0062e89ec666c9f45443b21a61"
   integrity sha512-HSUOdzKz3by4fnqagwthW/1w/yJspTgppyyalPVbgZf8jQWvdIXcVW5h2DGtw4zYntOaeRGx49r1hxoPWrD4aA==
@@ -423,14 +439,14 @@
   integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==
 
 "@types/node@*":
-  version "18.11.18"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f"
-  integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==
+  version "18.13.0"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850"
+  integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==
 
 "@types/node@^16.11.26":
-  version "16.18.11"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz#cbb15c12ca7c16c85a72b6bdc4d4b01151bb3cae"
-  integrity sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==
+  version "16.18.12"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.12.tgz#e3bfea80e31523fde4292a6118f19ffa24fd6f65"
+  integrity sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==
 
 "@types/qs@*":
   version "6.9.7"
@@ -442,6 +458,13 @@
   resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
   integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
 
+"@types/responselike@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
+  integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
+  dependencies:
+    "@types/node" "*"
+
 "@types/semver@^7.3.12":
   version "7.3.13"
   resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
@@ -468,14 +491,15 @@
     "@types/node" "*"
 
 "@typescript-eslint/eslint-plugin@^5.48.0":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz#deee67e399f2cb6b4608c935777110e509d8018c"
-  integrity sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.51.0.tgz#da3f2819633061ced84bb82c53bba45a6fe9963a"
+  integrity sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ==
   dependencies:
-    "@typescript-eslint/scope-manager" "5.48.1"
-    "@typescript-eslint/type-utils" "5.48.1"
-    "@typescript-eslint/utils" "5.48.1"
+    "@typescript-eslint/scope-manager" "5.51.0"
+    "@typescript-eslint/type-utils" "5.51.0"
+    "@typescript-eslint/utils" "5.51.0"
     debug "^4.3.4"
+    grapheme-splitter "^1.0.4"
     ignore "^5.2.0"
     natural-compare-lite "^1.4.0"
     regexpp "^3.2.0"
@@ -483,78 +507,78 @@
     tsutils "^3.21.0"
 
 "@typescript-eslint/experimental-utils@^5.0.0":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.1.tgz#5951c0b7ef4b0838ea95f25d53385de0e366e0b8"
-  integrity sha512-8OoIZZuOeqsm5cxn2f01qHWtVC3M4iixSsfZXPiQUg4Sl4LiU+b5epcJFwxNfqeoLl+SGncELyi3x99zI6C0ng==
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.51.0.tgz#936124843a9221863f027a08063b737578838bea"
+  integrity sha512-8/3+ZyBENl2aog1/QB3S39ptkZ2oRhDB+sJt15UWXBE3skgwL1C8BN9RjpOyhTejwR2hVrvqEjcYcNY6qtZ7nw==
   dependencies:
-    "@typescript-eslint/utils" "5.48.1"
+    "@typescript-eslint/utils" "5.51.0"
 
 "@typescript-eslint/parser@^5.48.0":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10"
-  integrity sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.51.0.tgz#2d74626652096d966ef107f44b9479f02f51f271"
+  integrity sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA==
   dependencies:
-    "@typescript-eslint/scope-manager" "5.48.1"
-    "@typescript-eslint/types" "5.48.1"
-    "@typescript-eslint/typescript-estree" "5.48.1"
+    "@typescript-eslint/scope-manager" "5.51.0"
+    "@typescript-eslint/types" "5.51.0"
+    "@typescript-eslint/typescript-estree" "5.51.0"
     debug "^4.3.4"
 
-"@typescript-eslint/scope-manager@5.48.1":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz#39c71e4de639f5fe08b988005beaaf6d79f9d64d"
-  integrity sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==
+"@typescript-eslint/scope-manager@5.51.0":
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz#ad3e3c2ecf762d9a4196c0fbfe19b142ac498990"
+  integrity sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ==
   dependencies:
-    "@typescript-eslint/types" "5.48.1"
-    "@typescript-eslint/visitor-keys" "5.48.1"
+    "@typescript-eslint/types" "5.51.0"
+    "@typescript-eslint/visitor-keys" "5.51.0"
 
-"@typescript-eslint/type-utils@5.48.1":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz#5d94ac0c269a81a91ad77c03407cea2caf481412"
-  integrity sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==
+"@typescript-eslint/type-utils@5.51.0":
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988"
+  integrity sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ==
   dependencies:
-    "@typescript-eslint/typescript-estree" "5.48.1"
-    "@typescript-eslint/utils" "5.48.1"
+    "@typescript-eslint/typescript-estree" "5.51.0"
+    "@typescript-eslint/utils" "5.51.0"
     debug "^4.3.4"
     tsutils "^3.21.0"
 
-"@typescript-eslint/types@5.48.1":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14"
-  integrity sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==
+"@typescript-eslint/types@5.51.0":
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.51.0.tgz#e7c1622f46c7eea7e12bbf1edfb496d4dec37c90"
+  integrity sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==
 
-"@typescript-eslint/typescript-estree@5.48.1":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz#9efa8ee2aa471c6ab62e649f6e64d8d121bc2056"
-  integrity sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==
+"@typescript-eslint/typescript-estree@5.51.0":
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de"
+  integrity sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA==
   dependencies:
-    "@typescript-eslint/types" "5.48.1"
-    "@typescript-eslint/visitor-keys" "5.48.1"
+    "@typescript-eslint/types" "5.51.0"
+    "@typescript-eslint/visitor-keys" "5.51.0"
     debug "^4.3.4"
     globby "^11.1.0"
     is-glob "^4.0.3"
     semver "^7.3.7"
     tsutils "^3.21.0"
 
-"@typescript-eslint/utils@5.48.1":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.1.tgz#20f2f4e88e9e2a0961cbebcb47a1f0f7da7ba7f9"
-  integrity sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==
+"@typescript-eslint/utils@5.51.0":
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47"
+  integrity sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw==
   dependencies:
     "@types/json-schema" "^7.0.9"
     "@types/semver" "^7.3.12"
-    "@typescript-eslint/scope-manager" "5.48.1"
-    "@typescript-eslint/types" "5.48.1"
-    "@typescript-eslint/typescript-estree" "5.48.1"
+    "@typescript-eslint/scope-manager" "5.51.0"
+    "@typescript-eslint/types" "5.51.0"
+    "@typescript-eslint/typescript-estree" "5.51.0"
     eslint-scope "^5.1.1"
     eslint-utils "^3.0.0"
     semver "^7.3.7"
 
-"@typescript-eslint/visitor-keys@5.48.1":
-  version "5.48.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz#79fd4fb9996023ef86849bf6f904f33eb6c8fccb"
-  integrity sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==
+"@typescript-eslint/visitor-keys@5.51.0":
+  version "5.51.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87"
+  integrity sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ==
   dependencies:
-    "@typescript-eslint/types" "5.48.1"
+    "@typescript-eslint/types" "5.51.0"
     eslint-visitor-keys "^3.3.0"
 
 "@ungap/promise-all-settled@1.1.2":
@@ -586,9 +610,9 @@ acorn@^7.4.0:
   integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 
 acorn@^8.4.1:
-  version "8.8.1"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
-  integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
+  version "8.8.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
 
 agent-base@6:
   version "6.0.2"
@@ -671,7 +695,7 @@ argparse@^2.0.1:
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
   integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
 
-array-includes@^3.1.4:
+array-includes@^3.1.6:
   version "3.1.6"
   resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
   integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
@@ -687,7 +711,7 @@ array-union@^2.1.0:
   resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
   integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
 
-array.prototype.flat@^1.2.5:
+array.prototype.flat@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
   integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
@@ -697,6 +721,16 @@ array.prototype.flat@^1.2.5:
     es-abstract "^1.20.4"
     es-shim-unscopables "^1.0.0"
 
+array.prototype.flatmap@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
+  integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+    es-shim-unscopables "^1.0.0"
+
 assertion-error@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
@@ -740,6 +774,13 @@ brace-expansion@^1.1.7:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
 braces@^3.0.2, braces@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -757,11 +798,6 @@ buffer-crc32@~0.2.3:
   resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
   integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
 
-buffer-from@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
-  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
 busboy@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
@@ -782,36 +818,41 @@ cache-content-type@^1.0.0:
     mime-types "^2.1.18"
     ylru "^1.2.0"
 
+cacheable-lookup@^5.0.3:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+  integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
 cacheable-lookup@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27"
   integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==
 
 cacheable-request@^10.2.1:
-  version "10.2.5"
-  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.5.tgz#7bf5fbdb4f51dc2537fb5f02a3f8a5aefd2d0f36"
-  integrity sha512-5RwYYCfzjNPsyJxb/QpaM0bfzx+kw5/YpDhZPm9oMIDntHFQ9YXeyV47ZvzlTE0XrrrbyO2UITJH4GF9eRLdXQ==
+  version "10.2.7"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.7.tgz#8bb8da66338f321b3cbbc34a71ac231178171bcc"
+  integrity sha512-I4SA6mKgDxcxVbSt/UmIkb9Ny8qSkg6ReBHtAAXnZHk7KOSx5g3DTiAOaYzcHCs6oOdHn+bip9T48E6tMvK9hw==
   dependencies:
     "@types/http-cache-semantics" "^4.0.1"
     get-stream "^6.0.1"
-    http-cache-semantics "^4.1.0"
+    http-cache-semantics "^4.1.1"
     keyv "^4.5.2"
     mimic-response "^4.0.0"
     normalize-url "^8.0.0"
     responselike "^3.0.0"
 
-cacheable-request@^6.0.0:
-  version "6.1.0"
-  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
-  integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+cacheable-request@^7.0.2:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
+  integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
   dependencies:
     clone-response "^1.0.2"
     get-stream "^5.1.0"
     http-cache-semantics "^4.0.0"
-    keyv "^3.0.0"
+    keyv "^4.0.0"
     lowercase-keys "^2.0.0"
-    normalize-url "^4.1.0"
-    responselike "^1.0.2"
+    normalize-url "^6.0.1"
+    responselike "^2.0.0"
 
 call-bind@^1.0.0, call-bind@^1.0.2:
   version "1.0.2"
@@ -843,7 +884,7 @@ chai-subset@^1.6.0:
   resolved "https://registry.yarnpkg.com/chai-subset/-/chai-subset-1.6.0.tgz#a5d0ca14e329a79596ed70058b6646bd6988cfe9"
   integrity sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug==
 
-chai@^4.3.4:
+chai@^4.3.7:
   version "4.3.7"
   resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51"
   integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==
@@ -965,16 +1006,6 @@ concat-map@0.0.1:
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
   integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
 
-concat-stream@^1.6.2:
-  version "1.6.2"
-  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
-  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
-  dependencies:
-    buffer-from "^1.0.0"
-    inherits "^2.0.3"
-    readable-stream "^2.2.2"
-    typedarray "^0.0.6"
-
 config-chain@^1.1.11:
   version "1.1.13"
   resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
@@ -991,9 +1022,9 @@ content-disposition@~0.5.2:
     safe-buffer "5.2.1"
 
 content-type@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
-  integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
+  integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
 
 cookie@^0.4.1:
   version "0.4.2"
@@ -1013,11 +1044,6 @@ copy-to@^2.0.1:
   resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
   integrity sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==
 
-core-util-is@~1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
-  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-
 create-require@^1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
@@ -1050,7 +1076,7 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2:
     shebang-command "^2.0.0"
     which "^2.0.1"
 
-debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
   version "4.3.4"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -1064,7 +1090,7 @@ debug@4.3.3:
   dependencies:
     ms "2.1.2"
 
-debug@^2.2.0, debug@^2.6.9:
+debug@^2.2.0:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -1083,13 +1109,6 @@ decamelize@^4.0.0:
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
   integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
 
-decompress-response@^3.3.0:
-  version "3.3.0"
-  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
-  integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==
-  dependencies:
-    mimic-response "^1.0.0"
-
 decompress-response@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
@@ -1119,25 +1138,20 @@ deep-is@^0.1.3:
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
   integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
 
-deepmerge@4.2.2:
-  version "4.2.2"
-  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
-  integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
-
-defer-to-connect@^1.0.1:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
-  integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+deepmerge@4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b"
+  integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==
 
-defer-to-connect@^2.0.1:
+defer-to-connect@^2.0.0, defer-to-connect@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
   integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
 
 define-properties@^1.1.3, define-properties@^1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
-  integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+  integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
   dependencies:
     has-property-descriptors "^1.0.0"
     object-keys "^1.1.1"
@@ -1210,11 +1224,6 @@ doctrine@^3.0.0:
   dependencies:
     esutils "^2.0.2"
 
-duplexer3@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e"
-  integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==
-
 ee-first@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -1227,7 +1236,7 @@ electron-latest-versions@^0.2.0:
   dependencies:
     semver "^7.3.8"
 
-electron-mocha@^11.0.0:
+electron-mocha@^11.0.2:
   version "11.0.2"
   resolved "https://registry.yarnpkg.com/electron-mocha/-/electron-mocha-11.0.2.tgz#f8fd6c3af539f3c7a9aed4aba29cf12c3f408810"
   integrity sha512-fOk+zUgSIsmL2cuIrd7IlK4eRhGVi1PYIB3QvqiBO+6f6AP8XLkYkT9eORlL2xwaS3yAAk02Y+4OTuhtqHPkEQ==
@@ -1246,14 +1255,14 @@ electron-window@^0.8.0:
   dependencies:
     is-electron-renderer "^2.0.0"
 
-electron@19.1.8:
-  version "19.1.8"
-  resolved "https://registry.yarnpkg.com/electron/-/electron-19.1.8.tgz#3ce19c270ca86d05bbf0df5ceeaea2d23edc7083"
-  integrity sha512-UfPQdFjgKI0xCm1V5sV3iAVOs0kCwAE91xWzV5tI7ij14yOkxTdXp9BqTzFaSbQYLYxn6q1BUUe1nlzjJjzAnw==
+electron@23.0.0:
+  version "23.0.0"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-23.0.0.tgz#4da457d7585149bb1a98ea8bddb286e72322a309"
+  integrity sha512-S6hVtTAjauMiiWP9sBVR5RpcUC464cNZ06I2EMUjeZBq+KooS6tLmNsfw0zLpAXDp1qosjlBP3v71NTZ3gd9iA==
   dependencies:
-    "@electron/get" "^1.14.1"
+    "@electron/get" "^2.0.0"
     "@types/node" "^16.11.26"
-    extract-zip "^1.0.3"
+    extract-zip "^2.0.1"
 
 emoji-regex@^8.0.0:
   version "8.0.0"
@@ -1387,15 +1396,16 @@ eslint-config-prettier@^6.11.0:
   dependencies:
     get-stdin "^6.0.0"
 
-eslint-import-resolver-node@^0.3.6:
-  version "0.3.6"
-  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
-  integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
+eslint-import-resolver-node@^0.3.7:
+  version "0.3.7"
+  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7"
+  integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==
   dependencies:
     debug "^3.2.7"
-    resolve "^1.20.0"
+    is-core-module "^2.11.0"
+    resolve "^1.22.1"
 
-eslint-module-utils@^2.7.3:
+eslint-module-utils@^2.7.4:
   version "2.7.4"
   resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974"
   integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==
@@ -1412,22 +1422,24 @@ eslint-plugin-deprecation@^1.1.0:
     tsutils "^3.21.0"
 
 eslint-plugin-import@^2.22.0:
-  version "2.26.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
-  integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
+  version "2.27.5"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
+  integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
   dependencies:
-    array-includes "^3.1.4"
-    array.prototype.flat "^1.2.5"
-    debug "^2.6.9"
+    array-includes "^3.1.6"
+    array.prototype.flat "^1.3.1"
+    array.prototype.flatmap "^1.3.1"
+    debug "^3.2.7"
     doctrine "^2.1.0"
-    eslint-import-resolver-node "^0.3.6"
-    eslint-module-utils "^2.7.3"
+    eslint-import-resolver-node "^0.3.7"
+    eslint-module-utils "^2.7.4"
     has "^1.0.3"
-    is-core-module "^2.8.1"
+    is-core-module "^2.11.0"
     is-glob "^4.0.3"
     minimatch "^3.1.2"
-    object.values "^1.1.5"
-    resolve "^1.22.0"
+    object.values "^1.1.6"
+    resolve "^1.22.1"
+    semver "^6.3.0"
     tsconfig-paths "^3.14.1"
 
 eslint-plugin-jsdoc@^30.0.3:
@@ -1574,16 +1586,6 @@ esutils@^2.0.2:
   resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
   integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
 
-extract-zip@^1.0.3:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
-  integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
-  dependencies:
-    concat-stream "^1.6.2"
-    debug "^2.6.9"
-    mkdirp "^0.5.4"
-    yauzl "^2.10.0"
-
 extract-zip@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
@@ -1764,10 +1766,10 @@ get-func-name@^2.0.0:
   resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
   integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==
 
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
-  integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
+  integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
   dependencies:
     function-bind "^1.1.1"
     has "^1.0.3"
@@ -1778,13 +1780,6 @@ get-stdin@^6.0.0:
   resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
   integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
 
-get-stream@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
-  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
-  dependencies:
-    pump "^3.0.0"
-
 get-stream@^5.1.0:
   version "5.2.0"
   resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
@@ -1848,20 +1843,10 @@ global-agent@^3.0.0:
     semver "^7.3.2"
     serialize-error "^7.0.1"
 
-global-tunnel-ng@^2.7.1:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f"
-  integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==
-  dependencies:
-    encodeurl "^1.0.2"
-    lodash "^4.17.10"
-    npm-conf "^1.1.3"
-    tunnel "^0.0.6"
-
 globals@^13.6.0, globals@^13.9.0:
-  version "13.19.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8"
-  integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==
+  version "13.20.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
+  integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
   dependencies:
     type-fest "^0.20.2"
 
@@ -1891,6 +1876,23 @@ gopd@^1.0.1:
   dependencies:
     get-intrinsic "^1.1.3"
 
+got@^11.8.5:
+  version "11.8.6"
+  resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
+  integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
+  dependencies:
+    "@sindresorhus/is" "^4.0.0"
+    "@szmarczak/http-timer" "^4.0.5"
+    "@types/cacheable-request" "^6.0.1"
+    "@types/responselike" "^1.0.0"
+    cacheable-lookup "^5.0.3"
+    cacheable-request "^7.0.2"
+    decompress-response "^6.0.0"
+    http2-wrapper "^1.0.0-beta.5.2"
+    lowercase-keys "^2.0.0"
+    p-cancelable "^2.0.0"
+    responselike "^2.0.0"
+
 got@^12.1.0:
   version "12.5.3"
   resolved "https://registry.yarnpkg.com/got/-/got-12.5.3.tgz#82bdca2dd61258a02e24d668ea6e7abb70ac3598"
@@ -1908,28 +1910,16 @@ got@^12.1.0:
     p-cancelable "^3.0.0"
     responselike "^3.0.0"
 
-got@^9.6.0:
-  version "9.6.0"
-  resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
-  integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
-  dependencies:
-    "@sindresorhus/is" "^0.14.0"
-    "@szmarczak/http-timer" "^1.1.2"
-    cacheable-request "^6.0.0"
-    decompress-response "^3.3.0"
-    duplexer3 "^0.1.4"
-    get-stream "^4.1.0"
-    lowercase-keys "^1.0.1"
-    mimic-response "^1.0.1"
-    p-cancelable "^1.0.0"
-    to-readable-stream "^1.0.0"
-    url-parse-lax "^3.0.0"
-
 graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
   version "4.2.10"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
   integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
 
+grapheme-splitter@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
+  integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+
 growl@1.10.5:
   version "1.10.5"
   resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
@@ -1999,7 +1989,7 @@ http-assert@^1.3.0:
     deep-equal "~1.0.1"
     http-errors "~1.8.0"
 
-http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
   integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
@@ -2026,6 +2016,14 @@ http-errors@^1.6.3, http-errors@~1.8.0:
     statuses ">= 1.5.0 < 2"
     toidentifier "1.0.1"
 
+http2-wrapper@^1.0.0-beta.5.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+  integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+  dependencies:
+    quick-lru "^5.1.1"
+    resolve-alpn "^1.0.0"
+
 http2-wrapper@^2.1.10:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3"
@@ -2085,7 +2083,7 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3:
+inherits@2, inherits@2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -2096,11 +2094,11 @@ ini@^1.3.4, ini@~1.3.0:
   integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
 
 internal-slot@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3"
-  integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
+  integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
   dependencies:
-    get-intrinsic "^1.1.3"
+    get-intrinsic "^1.2.0"
     has "^1.0.3"
     side-channel "^1.0.4"
 
@@ -2145,7 +2143,7 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
   integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
 
-is-core-module@^2.8.1, is-core-module@^2.9.0:
+is-core-module@^2.11.0, is-core-module@^2.9.0:
   version "2.11.0"
   resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
   integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
@@ -2262,11 +2260,6 @@ is-weakref@^1.0.2:
   dependencies:
     call-bind "^1.0.2"
 
-isarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
-
 isexe@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -2297,11 +2290,6 @@ jsdoctypeparser@^9.0.0:
   resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26"
   integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==
 
-json-buffer@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
-  integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==
-
 json-buffer@3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
@@ -2362,14 +2350,7 @@ keygrip@~1.1.0:
   dependencies:
     tsscmp "1.0.6"
 
-keyv@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
-  integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
-  dependencies:
-    json-buffer "3.0.0"
-
-keyv@^4.5.2:
+keyv@^4.0.0, keyv@^4.5.2:
   version "4.5.2"
   resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56"
   integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==
@@ -2397,15 +2378,15 @@ koa-convert@^2.0.0:
     co "^4.6.0"
     koa-compose "^4.1.0"
 
-koa-tree-router@^0.8.0:
-  version "0.8.0"
-  resolved "https://registry.yarnpkg.com/koa-tree-router/-/koa-tree-router-0.8.0.tgz#afc595e015925cd2f66d9bf8572520cf31a23a7d"
-  integrity sha512-kgsTDNXULrYwj1+gkfz4mBRhOEXQDJ8Wd81AkXPrMNWserb9wGNiOk3g9oflqaJy+PrgcCDqeLztt6o9Lbr+Lw==
+koa-tree-router@^0.12.1:
+  version "0.12.1"
+  resolved "https://registry.yarnpkg.com/koa-tree-router/-/koa-tree-router-0.12.1.tgz#0db942bca4f16c1472fba574c8f1c3fe7765a1ee"
+  integrity sha512-U/jJoV+rDFYtbaU/X6r2hcNKT7+DZs8HeXONWA7/OSIMk6/cYhoW5P9MPrjg7vHWRrmZOAiFkPoW7vtxvwLWpw==
   dependencies:
-    "@types/koa" "^2.11.6"
+    "@types/koa" "^2.13.4"
     koa-compose "^4.1.0"
 
-koa@^2.13.4:
+koa@^2.14.1:
   version "2.14.1"
   resolved "https://registry.yarnpkg.com/koa/-/koa-2.14.1.tgz#defb9589297d8eb1859936e777f3feecfc26925c"
   integrity sha512-USJFyZgi2l0wDgqkfD27gL4YGno7TfUkcmOe6UOLFOVuN+J7FwnNu4Dydl4CUQzraM1lBAiGed0M9OVJoT0Kqw==
@@ -2476,7 +2457,7 @@ lodash.truncate@^4.4.2:
   resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
   integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==
 
-lodash@^4.17.10, lodash@^4.17.20:
+lodash@^4.17.20:
   version "4.17.21"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -2496,11 +2477,6 @@ loupe@^2.3.1:
   dependencies:
     get-func-name "^2.0.0"
 
-lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
-  integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
-
 lowercase-keys@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
@@ -2570,7 +2546,7 @@ mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34:
   dependencies:
     mime-db "1.52.0"
 
-mimic-response@^1.0.0, mimic-response@^1.0.1:
+mimic-response@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
   integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
@@ -2592,6 +2568,13 @@ minimatch@4.2.1:
   dependencies:
     brace-expansion "^1.1.7"
 
+minimatch@5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
+  integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
+  dependencies:
+    brace-expansion "^2.0.1"
+
 minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -2600,18 +2583,38 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
     brace-expansion "^1.1.7"
 
 minimist@^1.2.0, minimist@^1.2.6:
-  version "1.2.7"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
-  integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
 
-mkdirp@^0.5.4:
-  version "0.5.6"
-  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
-  integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+mocha@^10.2.0:
+  version "10.2.0"
+  resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8"
+  integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
   dependencies:
-    minimist "^1.2.6"
+    ansi-colors "4.1.1"
+    browser-stdout "1.3.1"
+    chokidar "3.5.3"
+    debug "4.3.4"
+    diff "5.0.0"
+    escape-string-regexp "4.0.0"
+    find-up "5.0.0"
+    glob "7.2.0"
+    he "1.2.0"
+    js-yaml "4.1.0"
+    log-symbols "4.1.0"
+    minimatch "5.0.1"
+    ms "2.1.3"
+    nanoid "3.3.3"
+    serialize-javascript "6.0.0"
+    strip-json-comments "3.1.1"
+    supports-color "8.1.1"
+    workerpool "6.2.1"
+    yargs "16.2.0"
+    yargs-parser "20.2.4"
+    yargs-unparser "2.0.0"
 
-mocha@^9.1.1, mocha@^9.1.3:
+mocha@^9.1.1:
   version "9.2.2"
   resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9"
   integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==
@@ -2661,6 +2664,11 @@ nanoid@3.3.1:
   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
   integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==
 
+nanoid@3.3.3:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
+  integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
+
 natural-compare-lite@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
@@ -2696,24 +2704,16 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
   integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
 
-normalize-url@^4.1.0:
-  version "4.5.1"
-  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
-  integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
+normalize-url@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+  integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
 
 normalize-url@^8.0.0:
   version "8.0.0"
   resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a"
   integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==
 
-npm-conf@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
-  integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
-  dependencies:
-    config-chain "^1.1.11"
-    pify "^3.0.0"
-
 npm-run-all@^4.1.5:
   version "4.1.5"
   resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
@@ -2730,9 +2730,9 @@ npm-run-all@^4.1.5:
     string.prototype.padend "^3.0.0"
 
 object-inspect@^1.12.2, object-inspect@^1.9.0:
-  version "1.12.2"
-  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
-  integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
+  version "1.12.3"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
+  integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
 
 object-keys@^1.1.1:
   version "1.1.1"
@@ -2749,7 +2749,7 @@ object.assign@^4.1.4:
     has-symbols "^1.0.3"
     object-keys "^1.1.1"
 
-object.values@^1.1.5:
+object.values@^1.1.6:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
   integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
@@ -2789,10 +2789,10 @@ optionator@^0.9.1:
     type-check "^0.4.0"
     word-wrap "^1.2.3"
 
-p-cancelable@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
-  integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+p-cancelable@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+  integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
 
 p-cancelable@^3.0.0:
   version "3.0.0"
@@ -2910,20 +2910,10 @@ prelude-ls@^1.2.1:
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
   integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
 
-prepend-http@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
-  integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==
-
-prettier@^2.4.1:
-  version "2.8.2"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.2.tgz#c4ea1b5b454d7c4b59966db2e06ed7eec5dfd160"
-  integrity sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==
-
-process-nextick-args@~2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
-  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+prettier@^2.8.4:
+  version "2.8.4"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3"
+  integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==
 
 progress@^2.0.0, progress@^2.0.3:
   version "2.0.3"
@@ -2944,9 +2934,9 @@ pump@^3.0.0:
     once "^1.3.1"
 
 punycode@^2.1.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74"
-  integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
 
 qs@^6.5.2:
   version "6.11.0"
@@ -3001,19 +2991,6 @@ read-pkg@^3.0.0:
     normalize-package-data "^2.3.2"
     path-type "^3.0.0"
 
-readable-stream@^2.2.2:
-  version "2.3.7"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
-  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.3"
-    isarray "~1.0.0"
-    process-nextick-args "~2.0.0"
-    safe-buffer "~5.1.1"
-    string_decoder "~1.1.1"
-    util-deprecate "~1.0.1"
-
 readdirp@~3.6.0:
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
@@ -3069,7 +3046,7 @@ requireindex@~1.1.0:
   resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162"
   integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==
 
-resolve-alpn@^1.2.0:
+resolve-alpn@^1.0.0, resolve-alpn@^1.2.0:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
   integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
@@ -3079,7 +3056,7 @@ resolve-from@^4.0.0:
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
   integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
 
-resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0:
+resolve@^1.10.0, resolve@^1.22.1:
   version "1.22.1"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
   integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
@@ -3088,12 +3065,12 @@ resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0:
     path-parse "^1.0.7"
     supports-preserve-symlinks-flag "^1.0.0"
 
-responselike@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
-  integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==
+responselike@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
+  integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
   dependencies:
-    lowercase-keys "^1.0.0"
+    lowercase-keys "^2.0.0"
 
 responselike@^3.0.0:
   version "3.0.0"
@@ -3114,6 +3091,11 @@ rimraf@^3.0.0, rimraf@^3.0.2:
   dependencies:
     glob "^7.1.3"
 
+rimraf@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.1.2.tgz#20dfbc98083bdfaa28b01183162885ef213dbf7c"
+  integrity sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==
+
 roarr@^2.15.3:
   version "2.15.4"
   resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
@@ -3138,11 +3120,6 @@ safe-buffer@5.2.1, safe-buffer@^5.1.0:
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
   integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
 
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
-  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
 safe-regex-test@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
@@ -3167,7 +3144,7 @@ semver-compare@^1.0.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
   integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
 
-semver@^6.2.0:
+semver@^6.2.0, semver@^6.3.0:
   version "6.3.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -3223,9 +3200,9 @@ shebang-regex@^3.0.0:
   integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
 
 shell-quote@^1.6.1:
-  version "1.7.4"
-  resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8"
-  integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba"
+  integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==
 
 side-channel@^1.0.4:
   version "1.0.4"
@@ -3337,13 +3314,6 @@ string.prototype.trimstart@^1.0.6:
     define-properties "^1.1.4"
     es-abstract "^1.20.4"
 
-string_decoder@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
-  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
-  dependencies:
-    safe-buffer "~5.1.0"
-
 strip-ansi@^6.0.0, strip-ansi@^6.0.1:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -3422,11 +3392,6 @@ tmp@^0.2.1:
   dependencies:
     rimraf "^3.0.0"
 
-to-readable-stream@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
-  integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
-
 to-regex-range@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -3439,7 +3404,7 @@ toidentifier@1.0.1:
   resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
   integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
 
-ts-node@^10.4.0:
+ts-node@^10.9.1:
   version "10.9.1"
   resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
   integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
@@ -3473,10 +3438,10 @@ tslib@^1.8.1, tslib@^1.9.3:
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 
-tslib@^2.3.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
-  integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
+tslib@^2.3.1, tslib@^2.5.0:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
+  integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
 
 tsscmp@1.0.6:
   version "1.0.6"
@@ -3490,11 +3455,6 @@ tsutils@^3.21.0:
   dependencies:
     tslib "^1.8.1"
 
-tunnel@^0.0.6:
-  version "0.0.6"
-  resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
-  integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
-
 type-check@^0.4.0, type-check@~0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -3534,15 +3494,10 @@ typed-array-length@^1.0.4:
     for-each "^0.3.3"
     is-typed-array "^1.1.9"
 
-typedarray@^0.0.6:
-  version "0.0.6"
-  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-  integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
-
-typescript@^4.4.4:
-  version "4.9.4"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78"
-  integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==
+typescript@^4.9.5:
+  version "4.9.5"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
+  integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
 
 unbox-primitive@^1.0.2:
   version "1.0.2"
@@ -3576,18 +3531,6 @@ uri-js@^4.2.2:
   dependencies:
     punycode "^2.1.0"
 
-url-parse-lax@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
-  integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==
-  dependencies:
-    prepend-http "^2.0.0"
-
-util-deprecate@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-
 v8-compile-cache-lib@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
@@ -3658,6 +3601,11 @@ workerpool@6.2.0:
   resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b"
   integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==
 
+workerpool@6.2.1:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
+  integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
+
 wrap-ansi@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -3690,10 +3638,10 @@ yallist@^4.0.0:
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
   integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
 
-yaml@^1.10.2:
-  version "1.10.2"
-  resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
-  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+yaml@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4"
+  integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==
 
 yargs-parser@20.2.4:
   version "20.2.4"

From 0cc638b7ebf93aa8cd73af396a057f457d768a90 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 16 Feb 2023 12:06:22 +0100
Subject: [PATCH 080/239] test: New Electron versions (#642)

---
 test/e2e/versions.json | 2 +-
 yarn.lock              | 5 -----
 2 files changed, 1 insertion(+), 6 deletions(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 75cc5e0a..f8356b70 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.1","22.2.1","23.0.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.1","22.3.0","23.1.0"]
diff --git a/yarn.lock b/yarn.lock
index dbd5ecb6..8c14acbd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3091,11 +3091,6 @@ rimraf@^3.0.0, rimraf@^3.0.2:
   dependencies:
     glob "^7.1.3"
 
-rimraf@^4.1.2:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.1.2.tgz#20dfbc98083bdfaa28b01183162885ef213dbf7c"
-  integrity sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==
-
 roarr@^2.15.3:
   version "2.15.4"
   resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"

From 558119557947e7c4034d3bdffdf3d952577bc9f2 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 20 Feb 2023 10:17:34 +0100
Subject: [PATCH 081/239] fix: Add 2 second timeout to session flushing (#644)

---
 src/main/sessions.ts                              |  2 +-
 test/e2e/recipe/index.ts                          |  5 +++--
 test/e2e/server/index.ts                          |  7 +++++++
 .../e2e/test-apps/other/exit-timeout/package.json |  8 ++++++++
 test/e2e/test-apps/other/exit-timeout/recipe.yml  |  3 +++
 test/e2e/test-apps/other/exit-timeout/src/main.js | 15 +++++++++++++++
 6 files changed, 37 insertions(+), 3 deletions(-)
 create mode 100644 test/e2e/test-apps/other/exit-timeout/package.json
 create mode 100644 test/e2e/test-apps/other/exit-timeout/recipe.yml
 create mode 100644 test/e2e/test-apps/other/exit-timeout/src/main.js

diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index 2efc7966..36a159a7 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -54,7 +54,7 @@ export async function endSession(): Promise<void> {
 
   await sessionStore.clear();
 
-  await flush();
+  await flush(2_000);
 }
 
 /** Determines if a Date is likely to have occurred in the previous uncompleted session */
diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index d79dc9af..511dcbe5 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -7,7 +7,7 @@ import { dirname, join } from 'path';
 import { SDK_VERSION } from '../../../src/main/version';
 import { delay } from '../../helpers';
 import { TestContext } from '../context';
-import { ERROR_ID, RATE_LIMIT_ID, SERVER_PORT, TestServer, TestServerEvent } from '../server';
+import { ERROR_ID, HANG_ID, RATE_LIMIT_ID, SERVER_PORT, TestServer, TestServerEvent } from '../server';
 import { createLogger, getTestLog, walkSync } from '../utils';
 import { evaluateCondition } from './eval';
 import { eventIsSession, normalize } from './normalize';
@@ -115,7 +115,8 @@ export class RecipeRunner {
         .replace('__DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/277345`)
         .replace('__INCORRECT_DSN__', `http://${SENTRY_KEY}@localhost:9999/277345`)
         .replace('__RATE_LIMIT_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${RATE_LIMIT_ID}`)
-        .replace('__ERROR_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${ERROR_ID}`);
+        .replace('__ERROR_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${ERROR_ID}`)
+        .replace('__HANG_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${HANG_ID}`);
 
       if (file.endsWith('package.json')) {
         content = content
diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts
index 00261aac..aee950a9 100644
--- a/test/e2e/server/index.ts
+++ b/test/e2e/server/index.ts
@@ -8,6 +8,7 @@ import { Readable } from 'stream';
 import { inspect, TextDecoder, TextEncoder } from 'util';
 import { gunzipSync } from 'zlib';
 
+import { delay } from '../../helpers';
 import { eventIsSession } from '../recipe';
 import { createLogger } from '../utils';
 import { parseMultipart, sentryEventFromFormFields } from './multi-part';
@@ -17,6 +18,7 @@ const log = createLogger('Test Server');
 export const SERVER_PORT = 8123;
 export const RATE_LIMIT_ID = 666;
 export const ERROR_ID = 999;
+export const HANG_ID = 777;
 
 interface Attachment {
   filename?: string;
@@ -102,6 +104,11 @@ export class TestServer {
         return;
       }
 
+      if (ctx.params.id === HANG_ID.toString()) {
+        await delay(10_000);
+        return;
+      }
+
       const auth = (ctx.headers['x-sentry-auth'] as string) || ctx.url;
       const keyMatch = auth.match(/sentry_key=([a-f0-9]*)/);
       if (!keyMatch) {
diff --git a/test/e2e/test-apps/other/exit-timeout/package.json b/test/e2e/test-apps/other/exit-timeout/package.json
new file mode 100644
index 00000000..6f18c0d4
--- /dev/null
+++ b/test/e2e/test-apps/other/exit-timeout/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "flush-on-exit-timeout",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/exit-timeout/recipe.yml b/test/e2e/test-apps/other/exit-timeout/recipe.yml
new file mode 100644
index 00000000..980c88c5
--- /dev/null
+++ b/test/e2e/test-apps/other/exit-timeout/recipe.yml
@@ -0,0 +1,3 @@
+description: App close flush timeout
+command: yarn
+expectedError: Some console output
diff --git a/test/e2e/test-apps/other/exit-timeout/src/main.js b/test/e2e/test-apps/other/exit-timeout/src/main.js
new file mode 100644
index 00000000..1b2a63d7
--- /dev/null
+++ b/test/e2e/test-apps/other/exit-timeout/src/main.js
@@ -0,0 +1,15 @@
+const { app } = require('electron');
+const { init } = require('@sentry/electron');
+
+init({
+  dsn: '__HANG_DSN__',
+  debug: true,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  setTimeout(() => {
+    console.log('Some console output');
+    app.quit();
+  }, 3000);
+});

From 86fa70f1b3f1adf954174e9568e8a37d00c0dc9e Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 20 Feb 2023 10:17:51 +0100
Subject: [PATCH 082/239] chore: Update changelog for fresh 4.3.0 release
 (#645)

---
 CHANGELOG.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index fb304366..9b6c9506 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,9 @@
 
 ## 4.3.0
 
-- feat: Update Sentry SDKs to 7.35.0 (#631)
+- fix: Add 2 second timeout to session flushing (#644)
+- feat: Update dependencies (#640)
+- feat: Update Sentry SDKs to 7.37.1 (#636)
 - fix: Replay should be re-exported (#633)
 
 ## 4.2.0

From afa3978c47f295bdec14fdc0103bc866a871d266 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Mon, 20 Feb 2023 09:18:35 +0000
Subject: [PATCH 083/239] release: 4.3.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 670a4b89..ee91da0f 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.2.0",
+  "version": "4.3.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From c54047c6fce3a898482e3eff5e07e62c003e469d Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 20 Feb 2023 12:46:04 +0100
Subject: [PATCH 084/239] feat: Update Sentry SDKs to v7.38.0 (#646)

---
 package.json                  |  16 ++---
 src/common/normalize.ts       |   9 ++-
 src/renderer/sdk.ts           |   2 +-
 test/unit/stack-parse.test.ts |  12 ++++
 yarn.lock                     | 116 +++++++++++++++++-----------------
 5 files changed, 85 insertions(+), 70 deletions(-)

diff --git a/package.json b/package.json
index ee91da0f..56c4f9c3 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.37.1",
-    "@sentry/core": "7.37.1",
-    "@sentry/node": "7.37.1",
-    "@sentry/types": "7.37.1",
-    "@sentry/utils": "7.37.1",
+    "@sentry/browser": "7.38.0",
+    "@sentry/core": "7.38.0",
+    "@sentry/node": "7.38.0",
+    "@sentry/types": "7.38.0",
+    "@sentry/utils": "7.38.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.37.1",
-    "@sentry-internal/typescript": "7.37.1",
-    "@sentry/tracing": "7.37.1",
+    "@sentry-internal/eslint-config-sdk": "7.38.0",
+    "@sentry-internal/typescript": "7.38.0",
+    "@sentry/tracing": "7.38.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/common/normalize.ts b/src/common/normalize.ts
index 5199784f..7f4ae4f9 100644
--- a/src/common/normalize.ts
+++ b/src/common/normalize.ts
@@ -42,6 +42,10 @@ export function normalizeEvent(event: Event, basePath: string): Event {
       if (frame.filename) {
         frame.filename = normalizeUrl(frame.filename, basePath);
       }
+
+      if (frame.abs_path) {
+        frame.abs_path = normalizeUrl(frame.abs_path, basePath);
+      }
     }
   }
 
@@ -69,9 +73,8 @@ export function normalizeEvent(event: Event, basePath: string): Event {
     delete request.headers['User-Agent'];
   }
 
-  // The Node SDK includes server_name, which contains
-  // the machine name of the computer running Electron. This is not useful
-  // information in this case.
+  // The Node SDK includes server_name, which contains the machine name of the computer running Electron.
+  // In this case this is likely to include PII.
   const { tags = {} } = event;
   delete tags.server_name;
   delete event.server_name;
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index ff946a3b..32d9c0e1 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_37_1: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_38_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/unit/stack-parse.test.ts b/test/unit/stack-parse.test.ts
index 9549c4e1..120c2555 100644
--- a/test/unit/stack-parse.test.ts
+++ b/test/unit/stack-parse.test.ts
@@ -22,6 +22,8 @@ describe('Parse mixed renderer stack traces', () => {
 
     expect(frames).to.eql([
       {
+        abs_path:
+          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'global.setTimeout',
@@ -30,6 +32,8 @@ describe('Parse mixed renderer stack traces', () => {
         colno: 9,
       },
       {
+        abs_path:
+          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'one',
@@ -38,6 +42,8 @@ describe('Parse mixed renderer stack traces', () => {
         colno: 9,
       },
       {
+        abs_path:
+          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'two',
@@ -91,6 +97,8 @@ describe('Parse mixed renderer stack traces', () => {
 
     expect(frames).to.eql([
       {
+        abs_path:
+          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: '?',
@@ -99,6 +107,8 @@ describe('Parse mixed renderer stack traces', () => {
         colno: 9,
       },
       {
+        abs_path:
+          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'one',
@@ -107,6 +117,8 @@ describe('Parse mixed renderer stack traces', () => {
         colno: 9,
       },
       {
+        abs_path:
+          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'two',
diff --git a/yarn.lock b/yarn.lock
index 8c14acbd..79db392d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.37.1.tgz#1dafb9edbe7df94fb791c95aff80b6437f60a36a"
-  integrity sha512-jdkt6DG0+IwctiH8J1be8ZyQlgDyzkeJvhEZv8D/ZdCM5tqjvUqkbqS1yVTfwV+5OfjIMnQ4I9D/5Fnt8V14Rg==
+"@sentry-internal/eslint-config-sdk@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.38.0.tgz#a7c0c59e13d9b04895c2b5d1ac4d675fd692b449"
+  integrity sha512-qKw2Vcs+K7s16tgHlHzbaM821e34p+PsNtxndRiOFq3o+f9aCZYO1vAVTV9Qx7o/yB2dIBapI0ua8bWm8fHcMw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.37.1"
-    "@sentry-internal/typescript" "7.37.1"
+    "@sentry-internal/eslint-plugin-sdk" "7.38.0"
+    "@sentry-internal/typescript" "7.38.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,81 +143,81 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.37.1.tgz#9f6da2b0c711edeca628cb76eedf5f4776863dd2"
-  integrity sha512-SENuFIWVzb7xDEOdQTV8/i4EUb+s9ro6QWM/etXALQGE/Cvdors4YzTzfm3dJzV0Uk5DF3IPwdwQvimEeOsXHA==
+"@sentry-internal/eslint-plugin-sdk@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.38.0.tgz#c149722c148ee69aed363da41bd6de7301447263"
+  integrity sha512-kBql/7x8jveC6bgOL5664odpKcVLnLcW5khKQV453C8vvyBwzBpbk4mWYS4xDI/o64XJCdI866Sh8bN47QiN7Q==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.37.1.tgz#69ab51dc699eef56478da115789999dedb762e07"
-  integrity sha512-DEgaC5noRaY7WHM2XKEDRKbO01LtI4TVYxdbEgZQUmQX7FV1Ql27otHtEGiMBKe8JqoRHYm+Q3J9ZRtblMDERQ==
+"@sentry-internal/typescript@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.38.0.tgz#0016c9f9e26ee662d764597969ec8b29d84669a2"
+  integrity sha512-RdT121kNtsfcWE2pm4ONr9OAVSSsNSojIj9IpGFk8qk9tpMS0pWmzow9btnohqjCu6ClD1ppd4AhV4DnzwRThA==
 
-"@sentry/browser@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.37.1.tgz#d452ebed7f974f20872d34744e67d856ab54a41b"
-  integrity sha512-MfVbKzEVHKVH6ZyMCKLtPXvMtRCvxqQzrnK735sYW6EyMpcMYhukBU0pq7ws1E/KaCZjAJi1wDx2nqf2yPIVdQ==
+"@sentry/browser@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.38.0.tgz#cdb39da23f9ee2ce47395b2c12542acb4969efa7"
+  integrity sha512-rPJr+2jRYL29PeMYA2JgzYKTZQx6bc3T9evbAdIh0n+popSjpVyOpOMV/3l6A7KZeeix3dpp6eUZUxTJukqriQ==
   dependencies:
-    "@sentry/core" "7.37.1"
-    "@sentry/replay" "7.37.1"
-    "@sentry/types" "7.37.1"
-    "@sentry/utils" "7.37.1"
+    "@sentry/core" "7.38.0"
+    "@sentry/replay" "7.38.0"
+    "@sentry/types" "7.38.0"
+    "@sentry/utils" "7.38.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.37.1.tgz#6d8d151b3d6ae0d6f81c7f4da92cd2e7cb5bf1fa"
-  integrity sha512-eS5hoFDjAOl7POZg6K77J0oiypiqR1782oVSB49UkjK+D8tCZzZ5PxPMv0b/O0310p7x4oZ3WGRJaWEN3vY4KQ==
+"@sentry/core@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.38.0.tgz#52f1f1f2ba5e88ab7b33c3abb0ea9730c78d953d"
+  integrity sha512-+hXh/SO3Ie6WC2b+wi01xLhyVREdkRXS5QBmCiv3z2ks2HvYXp7PoKSXJvNKiwCP+pBD+enOnM1YEzM2yEy5yw==
   dependencies:
-    "@sentry/types" "7.37.1"
-    "@sentry/utils" "7.37.1"
+    "@sentry/types" "7.38.0"
+    "@sentry/utils" "7.38.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.37.1.tgz#c234e8711090b7532358bb1d6ab3fcca75356e98"
-  integrity sha512-nGerngIo5JwinJgl7m0SaL/xI+YRBlhb53gbkuLSAAcnoitBFzbp7LjywsqYFTWuWDIyk7O2t124GNxtolBAgA==
+"@sentry/node@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.38.0.tgz#957524fa4764dc19ef970ccdffb802d62e0db3ae"
+  integrity sha512-jNIN6NZvgzn/oms8RQzffjX8Z0LQDTN6N28nnhzqGCvnfmS1QtTt0FlU+pTuFXZNNSjfGy4XMXMYvLlbvhm2bg==
   dependencies:
-    "@sentry/core" "7.37.1"
-    "@sentry/types" "7.37.1"
-    "@sentry/utils" "7.37.1"
+    "@sentry/core" "7.38.0"
+    "@sentry/types" "7.38.0"
+    "@sentry/utils" "7.38.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.37.1.tgz#8ab4588b28baa07e35c417d3ffc6aaf934c58c45"
-  integrity sha512-3sHOE/oPirdvJbOn0IA/wpds12Sm2WaEtiAeC0+5Gg5mxQzFBLRrsA1Mz/ifzPGwr+ETn3sCyPCnd9b3PWaWMQ==
+"@sentry/replay@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.38.0.tgz#48d240b67de6b4ab41c951d19abeceb0d3f7706d"
+  integrity sha512-Ai78/OIYedny605x8uS0n/a5uj7qnuevogGD6agLat9lGc8DFvC07m2iS+EFyGOwtQzyDlRYJvYkHL8peR3crQ==
   dependencies:
-    "@sentry/core" "7.37.1"
-    "@sentry/types" "7.37.1"
-    "@sentry/utils" "7.37.1"
+    "@sentry/core" "7.38.0"
+    "@sentry/types" "7.38.0"
+    "@sentry/utils" "7.38.0"
 
-"@sentry/tracing@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.37.1.tgz#f5db7990f09be8d3c6b621b3718c268fff163ba0"
-  integrity sha512-3mQG2XtMCGqDkgfzhKpRJAIfRaokNAOF8WafgAmFmZQwEDsRAFjZ3pLoO+KiBUeQE5E5et7HyWBOl9rqHCkWnQ==
+"@sentry/tracing@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.38.0.tgz#ba28f15f526e87df167de206fd4fb0a39277dac6"
+  integrity sha512-ejXJp8oOT64MVtBzqdECUUaNzKbpu25St8Klub1i4Sm7xO+ZjDQDI4TIHvWojZvtkwQ3F4jcsCclc8KuyJunyQ==
   dependencies:
-    "@sentry/core" "7.37.1"
-    "@sentry/types" "7.37.1"
-    "@sentry/utils" "7.37.1"
+    "@sentry/core" "7.38.0"
+    "@sentry/types" "7.38.0"
+    "@sentry/utils" "7.38.0"
     tslib "^1.9.3"
 
-"@sentry/types@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.37.1.tgz#269da7da39c1a5243bf5f9a35370291b5cc205bb"
-  integrity sha512-c2HWyWSgVA0V4+DSW2qVb0yjftrb1X/q2CzCom+ayjGHO72qyWC+9Tc+7ZfotU1mapRjqUWBgkXkbGmao8N8Ug==
+"@sentry/types@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.38.0.tgz#6e2611544446271ed237440b12de782805aefe25"
+  integrity sha512-NKOALR6pNUMzUrsk2m+dkPrO8uGNvNh1LD0BCPswKNjC2qHo1h1mDGCgBmF9+EWyii8ZoACTIsxvsda+MBf97Q==
 
-"@sentry/utils@7.37.1":
-  version "7.37.1"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.37.1.tgz#7695d6e30d6178723f3fa446a9553893bca85e96"
-  integrity sha512-/4mJOyDsfysx+5TXyJgSI+Ihw2/0EVJbrHjCyXPDXW5ADwbtU8VdBZ0unOmF0hk4QfftqwM9cyEu3BN4iBJsEA==
+"@sentry/utils@7.38.0":
+  version "7.38.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.38.0.tgz#d10716e730108301f58766970493e9c5da0ba502"
+  integrity sha512-MgbI3YmYuyyhUtvcXkgGBqjOW+nuLLNGUdWCK+C4kObf8VbLt3dSE/7SEMT6TSHLYQmxs2BxFgx5Agn97m68kQ==
   dependencies:
-    "@sentry/types" "7.37.1"
+    "@sentry/types" "7.38.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From dac72f96ac9fcf143d945b3e69c4c30b1dafa0bf Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 23 Feb 2023 10:38:52 +0000
Subject: [PATCH 085/239] test: New Electron versions (#647)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index f8356b70..ce7df3c2 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.1","22.3.0","23.1.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.2","22.3.1","23.1.1"]

From 0d2eb16bf8daf9e330da85a9a823d20c80ad16ac Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 8 Mar 2023 20:19:44 +0000
Subject: [PATCH 086/239] test: New Electron versions (#650)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index ce7df3c2..0d0460cf 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.2","22.3.1","23.1.1"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.2","22.3.2","23.1.3"]

From 17634acabe755f471057d0f564e707282559d6c8 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 17 Mar 2023 10:12:54 +0000
Subject: [PATCH 087/239] test: New Electron versions (#654)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 0d0460cf..2b5476b3 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.2","22.3.2","23.1.3"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.3","23.1.4"]

From a625a18f700b4ed483c305ea4759676cd8822370 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 23 Mar 2023 17:56:48 +0000
Subject: [PATCH 088/239] test: New Electron versions (#655)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 2b5476b3..a11eef02 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.3","23.1.4"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.3","23.2.0"]

From 792263c77cdd9e7fcffbf4b01274ae083afb73fa Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 24 Mar 2023 13:30:23 +0000
Subject: [PATCH 089/239] test: New Electron versions (#656)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index a11eef02..b29954d2 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.3","23.2.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.4","23.2.0"]

From 49b661ede014147aec19ba1ef1c6f72d87463229 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 31 Mar 2023 14:48:50 +0100
Subject: [PATCH 090/239] feat: Update to v7.46.0 of JavaScript SDKs (#657)

---
 package.json                                  |  15 +--
 src/common/normalize.ts                       |   4 -
 src/index.ts                                  |   2 +
 src/renderer/index.ts                         |   2 +-
 src/renderer/sdk.ts                           |   2 +-
 src/renderer/stack-parse.ts                   |   6 +
 test/e2e/recipe/index.ts                      |   1 -
 .../other/browser-tracing/package.json        |   3 +-
 .../other/browser-tracing/src/index.html      |   3 +-
 .../other/custom-tracing/package.json         |   3 +-
 .../other/custom-tracing/src/main.js          |   1 -
 .../net-breadcrumbs-tracing/package.json      |   1 -
 .../other/net-breadcrumbs-tracing/src/main.js |   1 -
 .../other/net-breadcrumbs/package.json        |   1 -
 test/unit/stack-parse.test.ts                 |  12 --
 yarn.lock                                     | 126 +++++++++---------
 16 files changed, 84 insertions(+), 99 deletions(-)

diff --git a/package.json b/package.json
index 56c4f9c3..cb3545fa 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.38.0",
-    "@sentry/core": "7.38.0",
-    "@sentry/node": "7.38.0",
-    "@sentry/types": "7.38.0",
-    "@sentry/utils": "7.38.0",
+    "@sentry/browser": "7.46.0",
+    "@sentry/core": "7.46.0",
+    "@sentry/node": "7.46.0",
+    "@sentry/types": "7.46.0",
+    "@sentry/utils": "7.46.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.38.0",
-    "@sentry-internal/typescript": "7.38.0",
-    "@sentry/tracing": "7.38.0",
+    "@sentry-internal/eslint-config-sdk": "7.46.0",
+    "@sentry-internal/typescript": "7.46.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/common/normalize.ts b/src/common/normalize.ts
index 7f4ae4f9..68e708fd 100644
--- a/src/common/normalize.ts
+++ b/src/common/normalize.ts
@@ -42,10 +42,6 @@ export function normalizeEvent(event: Event, basePath: string): Event {
       if (frame.filename) {
         frame.filename = normalizeUrl(frame.filename, basePath);
       }
-
-      if (frame.abs_path) {
-        frame.abs_path = normalizeUrl(frame.abs_path, basePath);
-      }
     }
   }
 
diff --git a/src/index.ts b/src/index.ts
index 8261bb4e..28e105b8 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -30,6 +30,7 @@ export {
   captureMessage,
   configureScope,
   createTransport,
+  getActiveTransaction,
   getHubFromCarrier,
   getCurrentHub,
   Hub,
@@ -45,6 +46,7 @@ export {
   withScope,
   FunctionToString,
   InboundFilters,
+  trace,
 } from '@sentry/core';
 
 export const Integrations = getIntegrations();
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 1d81528c..d3f5a14c 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -45,7 +45,7 @@ export {
   InboundFilters,
 } from '@sentry/core';
 
-export { BrowserClient, lastEventId, showReportDialog, Replay } from '@sentry/browser';
+export { BrowserClient, BrowserTracing, lastEventId, showReportDialog, Replay } from '@sentry/browser';
 export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser';
 
 export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations };
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 32d9c0e1..6d45e0fb 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_38_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_46_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/src/renderer/stack-parse.ts b/src/renderer/stack-parse.ts
index 85f7f320..f49e21b8 100644
--- a/src/renderer/stack-parse.ts
+++ b/src/renderer/stack-parse.ts
@@ -2,6 +2,8 @@ import { chromeStackLineParser } from '@sentry/browser';
 import { StackFrame, StackParser } from '@sentry/types';
 import { dropUndefinedKeys, nodeStackLineParser, stripSentryFramesAndReverse } from '@sentry/utils';
 
+const STACKTRACE_FRAME_LIMIT = 50;
+
 const [, chrome] = chromeStackLineParser;
 const [, node] = nodeStackLineParser();
 
@@ -21,6 +23,10 @@ export const electronRendererStackParser: StackParser = (stack: string, skipFirs
     } else if (nodeFrame) {
       frames.push(dropUndefinedKeys(nodeFrame));
     }
+
+    if (frames.length >= STACKTRACE_FRAME_LIMIT) {
+      break;
+    }
   }
 
   return stripSentryFramesAndReverse(frames);
diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index 511dcbe5..f71e1e32 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -127,7 +127,6 @@ export class RecipeRunner {
           )
           // We replace the Sentry JavaScript dependency versions to match that of @sentry/electron
           .replace(/"@sentry\/replay": ".*"/, `"@sentry/replay": "${JS_VERSION}"`)
-          .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${JS_VERSION}"`)
           .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`)
           .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`);
       }
diff --git a/test/e2e/test-apps/other/browser-tracing/package.json b/test/e2e/test-apps/other/browser-tracing/package.json
index 2bc9ff1f..a092ed02 100644
--- a/test/e2e/test-apps/other/browser-tracing/package.json
+++ b/test/e2e/test-apps/other/browser-tracing/package.json
@@ -3,7 +3,6 @@
   "version": "1.0.0",
   "main": "src/main.js",
   "dependencies": {
-    "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.12.1"
+    "@sentry/electron": "3.0.0"
   }
 }
diff --git a/test/e2e/test-apps/other/browser-tracing/src/index.html b/test/e2e/test-apps/other/browser-tracing/src/index.html
index 9bd66428..4a2e6477 100644
--- a/test/e2e/test-apps/other/browser-tracing/src/index.html
+++ b/test/e2e/test-apps/other/browser-tracing/src/index.html
@@ -5,8 +5,7 @@
   </head>
   <body>
     <script>
-      const { init } = require('@sentry/electron');
-      const { BrowserTracing } = require('@sentry/tracing');
+      const { init, BrowserTracing } = require('@sentry/electron/renderer');
 
       init({
         debug: true,
diff --git a/test/e2e/test-apps/other/custom-tracing/package.json b/test/e2e/test-apps/other/custom-tracing/package.json
index 223d8ef3..20317371 100644
--- a/test/e2e/test-apps/other/custom-tracing/package.json
+++ b/test/e2e/test-apps/other/custom-tracing/package.json
@@ -3,7 +3,6 @@
   "version": "1.0.0",
   "main": "src/main.js",
   "dependencies": {
-    "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.12.1"
+    "@sentry/electron": "3.0.0"
   }
 }
diff --git a/test/e2e/test-apps/other/custom-tracing/src/main.js b/test/e2e/test-apps/other/custom-tracing/src/main.js
index 8e4c581b..69bd80c7 100644
--- a/test/e2e/test-apps/other/custom-tracing/src/main.js
+++ b/test/e2e/test-apps/other/custom-tracing/src/main.js
@@ -2,7 +2,6 @@
 const { app } = require('electron');
 
 const Sentry = require('@sentry/electron');
-require('@sentry/tracing');
 
 Sentry.init({
   dsn: '__DSN__',
diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
index f8991b67..c1e040bb 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
+++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json
@@ -4,7 +4,6 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.12.1",
     "electron-fetch": "1.7.4"
   }
 }
diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/src/main.js b/test/e2e/test-apps/other/net-breadcrumbs-tracing/src/main.js
index f87526af..aa5b1873 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/src/main.js
+++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/src/main.js
@@ -1,6 +1,5 @@
 const { app } = require('electron');
 const { init, startTransaction, getCurrentHub } = require('@sentry/electron');
-require('@sentry/tracing');
 const fetch = require('electron-fetch');
 
 init({
diff --git a/test/e2e/test-apps/other/net-breadcrumbs/package.json b/test/e2e/test-apps/other/net-breadcrumbs/package.json
index b77f256e..5a225de1 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs/package.json
+++ b/test/e2e/test-apps/other/net-breadcrumbs/package.json
@@ -4,7 +4,6 @@
   "main": "src/main.js",
   "dependencies": {
     "@sentry/electron": "3.0.0",
-    "@sentry/tracing": "7.12.1",
     "electron-fetch": "1.7.4"
   }
 }
diff --git a/test/unit/stack-parse.test.ts b/test/unit/stack-parse.test.ts
index 120c2555..9549c4e1 100644
--- a/test/unit/stack-parse.test.ts
+++ b/test/unit/stack-parse.test.ts
@@ -22,8 +22,6 @@ describe('Parse mixed renderer stack traces', () => {
 
     expect(frames).to.eql([
       {
-        abs_path:
-          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'global.setTimeout',
@@ -32,8 +30,6 @@ describe('Parse mixed renderer stack traces', () => {
         colno: 9,
       },
       {
-        abs_path:
-          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'one',
@@ -42,8 +38,6 @@ describe('Parse mixed renderer stack traces', () => {
         colno: 9,
       },
       {
-        abs_path:
-          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'two',
@@ -97,8 +91,6 @@ describe('Parse mixed renderer stack traces', () => {
 
     expect(frames).to.eql([
       {
-        abs_path:
-          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: '?',
@@ -107,8 +99,6 @@ describe('Parse mixed renderer stack traces', () => {
         colno: 9,
       },
       {
-        abs_path:
-          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'one',
@@ -117,8 +107,6 @@ describe('Parse mixed renderer stack traces', () => {
         colno: 9,
       },
       {
-        abs_path:
-          'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         filename:
           'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html',
         function: 'two',
diff --git a/yarn.lock b/yarn.lock
index 79db392d..bb8b3553 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.38.0.tgz#a7c0c59e13d9b04895c2b5d1ac4d675fd692b449"
-  integrity sha512-qKw2Vcs+K7s16tgHlHzbaM821e34p+PsNtxndRiOFq3o+f9aCZYO1vAVTV9Qx7o/yB2dIBapI0ua8bWm8fHcMw==
+"@sentry-internal/eslint-config-sdk@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.46.0.tgz#a9b3a66503e0a68e8e227bf40c6d908e736ef722"
+  integrity sha512-72EZMjr//l8P8iWRIyIxI3a7INfkmCY779hKjXW5xTu0I98cA59qYoBmQJbJba7Q798FdZ5vSh6fMpxz4Ka3+Q==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.38.0"
-    "@sentry-internal/typescript" "7.38.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.46.0"
+    "@sentry-internal/typescript" "7.46.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,81 +143,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.38.0.tgz#c149722c148ee69aed363da41bd6de7301447263"
-  integrity sha512-kBql/7x8jveC6bgOL5664odpKcVLnLcW5khKQV453C8vvyBwzBpbk4mWYS4xDI/o64XJCdI866Sh8bN47QiN7Q==
+"@sentry-internal/eslint-plugin-sdk@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.46.0.tgz#abf1a08038197bb7bfa857a856501b25f0008d4a"
+  integrity sha512-83Zz+UrxEZu2njOJ0AQ7sadMjBL6PsD3LI6TQFN9RPpWNpuX7+sQKeaDne9MwP5LxO5HlTaPFGU89mlN0lXnIQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/typescript@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.38.0.tgz#0016c9f9e26ee662d764597969ec8b29d84669a2"
-  integrity sha512-RdT121kNtsfcWE2pm4ONr9OAVSSsNSojIj9IpGFk8qk9tpMS0pWmzow9btnohqjCu6ClD1ppd4AhV4DnzwRThA==
-
-"@sentry/browser@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.38.0.tgz#cdb39da23f9ee2ce47395b2c12542acb4969efa7"
-  integrity sha512-rPJr+2jRYL29PeMYA2JgzYKTZQx6bc3T9evbAdIh0n+popSjpVyOpOMV/3l6A7KZeeix3dpp6eUZUxTJukqriQ==
+"@sentry-internal/tracing@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.46.0.tgz#26febabe21a2c2cab45a3de75809d88753ec07eb"
+  integrity sha512-KYoppa7PPL8Er7bdPoxTNUfIY804JL7hhOEomQHYD22rLynwQ4AaLm3YEY75QWwcGb0B7ZDMV+tSumW7Rxuwuw==
   dependencies:
-    "@sentry/core" "7.38.0"
-    "@sentry/replay" "7.38.0"
-    "@sentry/types" "7.38.0"
-    "@sentry/utils" "7.38.0"
+    "@sentry/core" "7.46.0"
+    "@sentry/types" "7.46.0"
+    "@sentry/utils" "7.46.0"
+    tslib "^1.9.3"
+
+"@sentry-internal/typescript@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.46.0.tgz#e96119414363758b08880834aa11515f8acd733d"
+  integrity sha512-cMXz5XDNHYzDix9DH0SfZCHl9WFe2o7Ik6Dln9Cd+Q2hBrFvAxClg9s9sCM1Ogfiu8u1NlPIXE29+sIdDGykcA==
+
+"@sentry/browser@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.46.0.tgz#27b291ddd3c61cc1073cbbb5c48c450b438ed83c"
+  integrity sha512-4rX9hKPjxzfH5LhZzO5DlS5NXQ8qZg2ibepaqEgcDHrpYh5813mjjnE4OQA8wiZ6WuG3xKFgHBrGeliD5jXz9w==
+  dependencies:
+    "@sentry-internal/tracing" "7.46.0"
+    "@sentry/core" "7.46.0"
+    "@sentry/replay" "7.46.0"
+    "@sentry/types" "7.46.0"
+    "@sentry/utils" "7.46.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.38.0.tgz#52f1f1f2ba5e88ab7b33c3abb0ea9730c78d953d"
-  integrity sha512-+hXh/SO3Ie6WC2b+wi01xLhyVREdkRXS5QBmCiv3z2ks2HvYXp7PoKSXJvNKiwCP+pBD+enOnM1YEzM2yEy5yw==
+"@sentry/core@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.46.0.tgz#f377e556d8679f29bde1cce15b1682b6c689d6b7"
+  integrity sha512-BnNHGh/ZTztqQedFko7vb2u6yLs/kWesOQNivav32ZbsEpVCjcmG1gOJXh2YmGIvj3jXOC9a4xfIuh+lYFcA6A==
   dependencies:
-    "@sentry/types" "7.38.0"
-    "@sentry/utils" "7.38.0"
+    "@sentry/types" "7.46.0"
+    "@sentry/utils" "7.46.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.38.0.tgz#957524fa4764dc19ef970ccdffb802d62e0db3ae"
-  integrity sha512-jNIN6NZvgzn/oms8RQzffjX8Z0LQDTN6N28nnhzqGCvnfmS1QtTt0FlU+pTuFXZNNSjfGy4XMXMYvLlbvhm2bg==
+"@sentry/node@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.46.0.tgz#f85ee74926372d19d6b6a23f68f19023d7a528a7"
+  integrity sha512-+GrgJMCye2WXGarRiU5IJHCK27xg7xbPc2XjGojBKbBoZfqxVAWbXEK4bnBQgRGP1pCmrU/M6ZhVgR3dP580xA==
   dependencies:
-    "@sentry/core" "7.38.0"
-    "@sentry/types" "7.38.0"
-    "@sentry/utils" "7.38.0"
+    "@sentry-internal/tracing" "7.46.0"
+    "@sentry/core" "7.46.0"
+    "@sentry/types" "7.46.0"
+    "@sentry/utils" "7.46.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.38.0.tgz#48d240b67de6b4ab41c951d19abeceb0d3f7706d"
-  integrity sha512-Ai78/OIYedny605x8uS0n/a5uj7qnuevogGD6agLat9lGc8DFvC07m2iS+EFyGOwtQzyDlRYJvYkHL8peR3crQ==
+"@sentry/replay@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.46.0.tgz#c5e595d0c2d8d4db2c95d68f518510c42eb122a3"
+  integrity sha512-rHsAFdeEu47JRy6mEwwN+M+zTTWlOFWw9sR/eDCvik2lxAXBN2mXvf/N/MN9zQB3+QnS13ke+SvwVW7CshLOXg==
   dependencies:
-    "@sentry/core" "7.38.0"
-    "@sentry/types" "7.38.0"
-    "@sentry/utils" "7.38.0"
-
-"@sentry/tracing@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.38.0.tgz#ba28f15f526e87df167de206fd4fb0a39277dac6"
-  integrity sha512-ejXJp8oOT64MVtBzqdECUUaNzKbpu25St8Klub1i4Sm7xO+ZjDQDI4TIHvWojZvtkwQ3F4jcsCclc8KuyJunyQ==
-  dependencies:
-    "@sentry/core" "7.38.0"
-    "@sentry/types" "7.38.0"
-    "@sentry/utils" "7.38.0"
-    tslib "^1.9.3"
+    "@sentry/core" "7.46.0"
+    "@sentry/types" "7.46.0"
+    "@sentry/utils" "7.46.0"
 
-"@sentry/types@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.38.0.tgz#6e2611544446271ed237440b12de782805aefe25"
-  integrity sha512-NKOALR6pNUMzUrsk2m+dkPrO8uGNvNh1LD0BCPswKNjC2qHo1h1mDGCgBmF9+EWyii8ZoACTIsxvsda+MBf97Q==
+"@sentry/types@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.46.0.tgz#8573ba8676342c594fcfefff4552123278cfec51"
+  integrity sha512-2FMEMgt2h6u7AoELhNhu9L54GAh67KKfK2pJ1kEXJHmWxM9FSCkizjLs/t+49xtY7jEXr8qYq8bV967VfDPQ9g==
 
-"@sentry/utils@7.38.0":
-  version "7.38.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.38.0.tgz#d10716e730108301f58766970493e9c5da0ba502"
-  integrity sha512-MgbI3YmYuyyhUtvcXkgGBqjOW+nuLLNGUdWCK+C4kObf8VbLt3dSE/7SEMT6TSHLYQmxs2BxFgx5Agn97m68kQ==
+"@sentry/utils@7.46.0":
+  version "7.46.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.46.0.tgz#7a713724db3d1c8bc0aef6d19a7fe2c76db0bdf2"
+  integrity sha512-elRezDAF84guMG0OVIIZEWm6wUpgbda4HGks98CFnPsrnMm3N1bdBI9XdlxYLtf+ir5KsGR5YlEIf/a0kRUwAQ==
   dependencies:
-    "@sentry/types" "7.38.0"
+    "@sentry/types" "7.46.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From db739f57dba8b1a18edf033cdd5568a57db63163 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 31 Mar 2023 15:33:49 +0100
Subject: [PATCH 091/239] chore: Update changelog for release (#659)

---
 CHANGELOG.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9b6c9506..62e6e3de 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ## Unreleased
 
+## 4.4.0
+
+- feat: Update to [v7.46.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.46.0) of JavaScript SDKs (#657)
+
 ## 4.3.0
 
 - fix: Add 2 second timeout to session flushing (#644)

From ddc94f884063edbf94ae0717de3f94fa06af7468 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Fri, 31 Mar 2023 14:35:33 +0000
Subject: [PATCH 092/239] release: 4.4.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index cb3545fa..83df688b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.3.0",
+  "version": "4.4.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 22a6eb5d6f7e4faff44cf8f2c7afe3684281b97d Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 18 Apr 2023 10:29:30 +0200
Subject: [PATCH 093/239] test: New Sentry SDK version (#662)

---
 package.json        |  16 +++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 124 ++++++++++++++++++++++----------------------
 3 files changed, 71 insertions(+), 71 deletions(-)

diff --git a/package.json b/package.json
index 83df688b..5eabf668 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.46.0",
-    "@sentry/core": "7.46.0",
-    "@sentry/node": "7.46.0",
-    "@sentry/types": "7.46.0",
-    "@sentry/utils": "7.46.0",
+    "@sentry/browser": "7.48.0",
+    "@sentry/core": "7.48.0",
+    "@sentry/node": "7.48.0",
+    "@sentry/types": "7.48.0",
+    "@sentry/utils": "7.48.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.46.0",
-    "@sentry-internal/typescript": "7.46.0",
+    "@sentry-internal/eslint-config-sdk": "7.48.0",
+    "@sentry-internal/typescript": "7.48.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 6d45e0fb..59814ae8 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_46_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_48_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index bb8b3553..6a001315 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.46.0.tgz#a9b3a66503e0a68e8e227bf40c6d908e736ef722"
-  integrity sha512-72EZMjr//l8P8iWRIyIxI3a7INfkmCY779hKjXW5xTu0I98cA59qYoBmQJbJba7Q798FdZ5vSh6fMpxz4Ka3+Q==
+"@sentry-internal/eslint-config-sdk@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.48.0.tgz#9e0725da7da6f92e20630997fccb1903d96a35df"
+  integrity sha512-M3LOE51Wst5raQnS+hWi3q1Wi2omRRhtfn3AmyyYqLy65RY5EdiuU/Rjrea4H5AepTT2UAzX4EPhASjaBLehOA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.46.0"
-    "@sentry-internal/typescript" "7.46.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.48.0"
+    "@sentry-internal/typescript" "7.48.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,83 +143,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.46.0.tgz#abf1a08038197bb7bfa857a856501b25f0008d4a"
-  integrity sha512-83Zz+UrxEZu2njOJ0AQ7sadMjBL6PsD3LI6TQFN9RPpWNpuX7+sQKeaDne9MwP5LxO5HlTaPFGU89mlN0lXnIQ==
+"@sentry-internal/eslint-plugin-sdk@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.48.0.tgz#4810513571d820e4b16d85c1f81f0bbca5d4389a"
+  integrity sha512-yHyArKCgg8rgLjeUMxo4EQ8YSO4pKZBl0QP2oI375+fN1sqW1Wk7VGD6oe2QvFN+xp5eqQCfZLpbB/SlnnACqg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.46.0.tgz#26febabe21a2c2cab45a3de75809d88753ec07eb"
-  integrity sha512-KYoppa7PPL8Er7bdPoxTNUfIY804JL7hhOEomQHYD22rLynwQ4AaLm3YEY75QWwcGb0B7ZDMV+tSumW7Rxuwuw==
+"@sentry-internal/tracing@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.48.0.tgz#d0c1eac1c046fda5c79d16dc1c918fee3bae3e9d"
+  integrity sha512-MFAPDTrvCtfSm0/Zbmx7HA0Q5uCfRadOUpN8Y8rP1ndz+329h2kA3mZRCuC+3/aXL11zs2CHUhcAkGjwH2vogg==
   dependencies:
-    "@sentry/core" "7.46.0"
-    "@sentry/types" "7.46.0"
-    "@sentry/utils" "7.46.0"
+    "@sentry/core" "7.48.0"
+    "@sentry/types" "7.48.0"
+    "@sentry/utils" "7.48.0"
     tslib "^1.9.3"
 
-"@sentry-internal/typescript@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.46.0.tgz#e96119414363758b08880834aa11515f8acd733d"
-  integrity sha512-cMXz5XDNHYzDix9DH0SfZCHl9WFe2o7Ik6Dln9Cd+Q2hBrFvAxClg9s9sCM1Ogfiu8u1NlPIXE29+sIdDGykcA==
-
-"@sentry/browser@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.46.0.tgz#27b291ddd3c61cc1073cbbb5c48c450b438ed83c"
-  integrity sha512-4rX9hKPjxzfH5LhZzO5DlS5NXQ8qZg2ibepaqEgcDHrpYh5813mjjnE4OQA8wiZ6WuG3xKFgHBrGeliD5jXz9w==
-  dependencies:
-    "@sentry-internal/tracing" "7.46.0"
-    "@sentry/core" "7.46.0"
-    "@sentry/replay" "7.46.0"
-    "@sentry/types" "7.46.0"
-    "@sentry/utils" "7.46.0"
+"@sentry-internal/typescript@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.48.0.tgz#27ba755a1414b3518f820086e447eba8ecdeb794"
+  integrity sha512-kD+ZsvuZw0r7LnwS4naWQj0pbUcBhy2WUSu1gpWtW6YsVCbOTEmGEyv/WinzmVQeO14QsG9bROQABAmRxsV7NQ==
+
+"@sentry/browser@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.48.0.tgz#03f39bec6949ff48e343c5862c5d54dfd4a2f9ff"
+  integrity sha512-tdx/2nhuiykncmXFlV4Dpp+Hxgt/v31LiyXE79IcM560wc+QmWKtzoW9azBWQ0xt5KOO3ERMib9qPE4/ql1/EQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.48.0"
+    "@sentry/core" "7.48.0"
+    "@sentry/replay" "7.48.0"
+    "@sentry/types" "7.48.0"
+    "@sentry/utils" "7.48.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.46.0.tgz#f377e556d8679f29bde1cce15b1682b6c689d6b7"
-  integrity sha512-BnNHGh/ZTztqQedFko7vb2u6yLs/kWesOQNivav32ZbsEpVCjcmG1gOJXh2YmGIvj3jXOC9a4xfIuh+lYFcA6A==
+"@sentry/core@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.48.0.tgz#1a5ec347ab7212d73a99583c2e64989e34e3263a"
+  integrity sha512-8FYuJTMpyuxRZvlen3gQ3rpOtVInSDmSyXqWEhCLuG/w34AtWoTiW7G516rsAAh6Hy1TP91GooMWbonP3XQNTQ==
   dependencies:
-    "@sentry/types" "7.46.0"
-    "@sentry/utils" "7.46.0"
+    "@sentry/types" "7.48.0"
+    "@sentry/utils" "7.48.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.46.0.tgz#f85ee74926372d19d6b6a23f68f19023d7a528a7"
-  integrity sha512-+GrgJMCye2WXGarRiU5IJHCK27xg7xbPc2XjGojBKbBoZfqxVAWbXEK4bnBQgRGP1pCmrU/M6ZhVgR3dP580xA==
+"@sentry/node@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.48.0.tgz#b2f15502b77796bf7bcaa29f2e9ce1420f7c49d1"
+  integrity sha512-DJyyZaVhv/pUzJPof7es6zYDHeWbNqE0T3tQfLCkShdyfR+Ew8In8W/x2s7S8vq0cfRq0rqv1E6B2/HpVdYO7g==
   dependencies:
-    "@sentry-internal/tracing" "7.46.0"
-    "@sentry/core" "7.46.0"
-    "@sentry/types" "7.46.0"
-    "@sentry/utils" "7.46.0"
+    "@sentry-internal/tracing" "7.48.0"
+    "@sentry/core" "7.48.0"
+    "@sentry/types" "7.48.0"
+    "@sentry/utils" "7.48.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.46.0.tgz#c5e595d0c2d8d4db2c95d68f518510c42eb122a3"
-  integrity sha512-rHsAFdeEu47JRy6mEwwN+M+zTTWlOFWw9sR/eDCvik2lxAXBN2mXvf/N/MN9zQB3+QnS13ke+SvwVW7CshLOXg==
+"@sentry/replay@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.48.0.tgz#ca8f1543bad4717dcd65739bf1256a1933bba757"
+  integrity sha512-8fRHMGJ0NJeIZi6UucxUTvfDPaBa7+jU1kCTLjCcuH3X/UVz5PtGLMtFSO5U8HP+mUDlPs97MP1uoDvMa4S2Ng==
   dependencies:
-    "@sentry/core" "7.46.0"
-    "@sentry/types" "7.46.0"
-    "@sentry/utils" "7.46.0"
+    "@sentry/core" "7.48.0"
+    "@sentry/types" "7.48.0"
+    "@sentry/utils" "7.48.0"
 
-"@sentry/types@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.46.0.tgz#8573ba8676342c594fcfefff4552123278cfec51"
-  integrity sha512-2FMEMgt2h6u7AoELhNhu9L54GAh67KKfK2pJ1kEXJHmWxM9FSCkizjLs/t+49xtY7jEXr8qYq8bV967VfDPQ9g==
+"@sentry/types@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.48.0.tgz#57f3c9cf331a5621e82dda04eefcf8c19ee42bc9"
+  integrity sha512-kkAszZwQ5/v4n7Yyw/DPNRWx7h724mVNRGZIJa9ggUMvTgMe7UKCZZ5wfQmYiKVlGbwd9pxXAcP8Oq15EbByFQ==
 
-"@sentry/utils@7.46.0":
-  version "7.46.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.46.0.tgz#7a713724db3d1c8bc0aef6d19a7fe2c76db0bdf2"
-  integrity sha512-elRezDAF84guMG0OVIIZEWm6wUpgbda4HGks98CFnPsrnMm3N1bdBI9XdlxYLtf+ir5KsGR5YlEIf/a0kRUwAQ==
+"@sentry/utils@7.48.0":
+  version "7.48.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.48.0.tgz#2866975ea8899aba35b083dd0558cbbe29ee8de1"
+  integrity sha512-d977sghkFVMfld0LrEyyY2gYrfayLPdDEpUDT+hg5y79r7zZDCFyHtdB86699E5K89MwDZahW7Erk+a1nk4x5w==
   dependencies:
-    "@sentry/types" "7.46.0"
+    "@sentry/types" "7.48.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From a4014ff91ce3aefe5c4cc4f7cc5772fef16bcde2 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 19 Apr 2023 08:32:21 +0100
Subject: [PATCH 094/239] fix: IPC protocol should be registered as secure
 (#664)

---
 src/main/ipc.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 6f8ed30b..be52b6f4 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -131,7 +131,7 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
   protocol.registerSchemesAsPrivileged([
     {
       scheme: PROTOCOL_SCHEME,
-      privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true },
+      privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true, secure: true },
     },
   ]);
 

From cdb680c0fe54174460a1c3a521f1559dad02e6d9 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 25 Apr 2023 20:34:03 +0200
Subject: [PATCH 095/239] chore: Update changelog for release (#665)

---
 CHANGELOG.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 62e6e3de..87c20b43 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## Unreleased
 
+## 4.5.0
+- feat: Update to [v7.48.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.48.0) of JavaScript SDKs
+  (#662)
+- fix: IPC protocol should be registered as secure (#664)
+
 ## 4.4.0
 
 - feat: Update to [v7.46.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.46.0) of JavaScript SDKs (#657)

From 9b3c157b751a215a9d1537ceafb2499de1b2ba4e Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 25 Apr 2023 18:34:40 +0000
Subject: [PATCH 096/239] release: 4.5.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 5eabf668..8631a22e 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.4.0",
+  "version": "4.5.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From 8e9bc125c0c2a1c1ef68a9967f4ca82ac4d7726b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 26 Apr 2023 18:02:03 +0200
Subject: [PATCH 097/239] chore(deps-dev): bump yaml from 2.2.1 to 2.2.2 (#668)

---
 yarn.lock | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/yarn.lock b/yarn.lock
index 6a001315..14c52170 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3636,9 +3636,9 @@ yallist@^4.0.0:
   integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
 
 yaml@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4"
-  integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073"
+  integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==
 
 yargs-parser@20.2.4:
   version "20.2.4"

From 41e0a305d41656fde75076f4a8f35db2d125ee8a Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 26 Apr 2023 18:38:38 +0200
Subject: [PATCH 098/239] test: New Sentry SDK version (#667)

---
 package.json        |  14 ++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 124 ++++++++++++++++++++++----------------------
 3 files changed, 70 insertions(+), 70 deletions(-)

diff --git a/package.json b/package.json
index 8631a22e..14b1367d 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.48.0",
-    "@sentry/core": "7.48.0",
-    "@sentry/node": "7.48.0",
-    "@sentry/types": "7.48.0",
-    "@sentry/utils": "7.48.0",
+    "@sentry/browser": "7.49.0",
+    "@sentry/core": "7.49.0",
+    "@sentry/node": "7.49.0",
+    "@sentry/types": "7.49.0",
+    "@sentry/utils": "7.49.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.48.0",
-    "@sentry-internal/typescript": "7.48.0",
+    "@sentry-internal/eslint-config-sdk": "7.49.0",
+    "@sentry-internal/typescript": "7.49.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 59814ae8..61c3faee 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_48_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_49_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 14c52170..14cae854 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.48.0.tgz#9e0725da7da6f92e20630997fccb1903d96a35df"
-  integrity sha512-M3LOE51Wst5raQnS+hWi3q1Wi2omRRhtfn3AmyyYqLy65RY5EdiuU/Rjrea4H5AepTT2UAzX4EPhASjaBLehOA==
+"@sentry-internal/eslint-config-sdk@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.49.0.tgz#61450f76a178e6757c31b6438a498b17dca62314"
+  integrity sha512-5/Mb8mjduNCni1hRQD0gLTAfLIVWL1rfyS/TVhoZg/x3qz6DLO/upOyk/PpbHoJuvXXyiYixobultycm3iO7FQ==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.48.0"
-    "@sentry-internal/typescript" "7.48.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.49.0"
+    "@sentry-internal/typescript" "7.49.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,83 +143,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.48.0.tgz#4810513571d820e4b16d85c1f81f0bbca5d4389a"
-  integrity sha512-yHyArKCgg8rgLjeUMxo4EQ8YSO4pKZBl0QP2oI375+fN1sqW1Wk7VGD6oe2QvFN+xp5eqQCfZLpbB/SlnnACqg==
+"@sentry-internal/eslint-plugin-sdk@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.49.0.tgz#936cbb99b972d5ebda45a1fbd7058bb57f3baee1"
+  integrity sha512-mh4wEXk0DIUd2kZe+nhym0K9cAHJSF54gd0p0GF53jPXU1u7/gltW3eEQP+CLtT60IezZxYTO9cvnUmzDSh7uQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.48.0.tgz#d0c1eac1c046fda5c79d16dc1c918fee3bae3e9d"
-  integrity sha512-MFAPDTrvCtfSm0/Zbmx7HA0Q5uCfRadOUpN8Y8rP1ndz+329h2kA3mZRCuC+3/aXL11zs2CHUhcAkGjwH2vogg==
+"@sentry-internal/tracing@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.49.0.tgz#f589de565370884b9a13f82c98463de9b2d25dcd"
+  integrity sha512-ESh3+ZneQk/3HESTUmIPNrW5GVPu/HrRJU+eAJJto74vm+6vP7zDn2YV2gJ1w18O/37nc7W/bVCgZJlhZ3cwew==
   dependencies:
-    "@sentry/core" "7.48.0"
-    "@sentry/types" "7.48.0"
-    "@sentry/utils" "7.48.0"
+    "@sentry/core" "7.49.0"
+    "@sentry/types" "7.49.0"
+    "@sentry/utils" "7.49.0"
     tslib "^1.9.3"
 
-"@sentry-internal/typescript@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.48.0.tgz#27ba755a1414b3518f820086e447eba8ecdeb794"
-  integrity sha512-kD+ZsvuZw0r7LnwS4naWQj0pbUcBhy2WUSu1gpWtW6YsVCbOTEmGEyv/WinzmVQeO14QsG9bROQABAmRxsV7NQ==
-
-"@sentry/browser@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.48.0.tgz#03f39bec6949ff48e343c5862c5d54dfd4a2f9ff"
-  integrity sha512-tdx/2nhuiykncmXFlV4Dpp+Hxgt/v31LiyXE79IcM560wc+QmWKtzoW9azBWQ0xt5KOO3ERMib9qPE4/ql1/EQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.48.0"
-    "@sentry/core" "7.48.0"
-    "@sentry/replay" "7.48.0"
-    "@sentry/types" "7.48.0"
-    "@sentry/utils" "7.48.0"
+"@sentry-internal/typescript@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.49.0.tgz#af70ffbf8bb4e70906cb9913a5ff34ed3d9286ce"
+  integrity sha512-u3heGxVyQuty8IkKSTOiH1meNPRzzDcnSFbnMuJE9jGiJ/22WSruMH7BX2JQQnwzu8E1VlSVtPrHnsMJkSU8MA==
+
+"@sentry/browser@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.49.0.tgz#5ce1cdb8d883c129d9a4e313c08a54c5ada4661b"
+  integrity sha512-x2DekKkQoY7/dhBzE4J25mdQ978NtPBTVQb+uZqlF/t5mp4K44TAszmPqy8lC/CmVHkp7qcpRGSCIzeboUL4KA==
+  dependencies:
+    "@sentry-internal/tracing" "7.49.0"
+    "@sentry/core" "7.49.0"
+    "@sentry/replay" "7.49.0"
+    "@sentry/types" "7.49.0"
+    "@sentry/utils" "7.49.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.48.0.tgz#1a5ec347ab7212d73a99583c2e64989e34e3263a"
-  integrity sha512-8FYuJTMpyuxRZvlen3gQ3rpOtVInSDmSyXqWEhCLuG/w34AtWoTiW7G516rsAAh6Hy1TP91GooMWbonP3XQNTQ==
+"@sentry/core@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.49.0.tgz#340d059f5efeff1a3359fef66d0c8e34e79ac992"
+  integrity sha512-AlSnCYgfEbvK8pkNluUkmdW/cD9UpvOVCa+ERQswXNRkAv5aDGCL6Ihv6fnIajE++BYuwZh0+HwZUBVKTFzoZg==
   dependencies:
-    "@sentry/types" "7.48.0"
-    "@sentry/utils" "7.48.0"
+    "@sentry/types" "7.49.0"
+    "@sentry/utils" "7.49.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.48.0.tgz#b2f15502b77796bf7bcaa29f2e9ce1420f7c49d1"
-  integrity sha512-DJyyZaVhv/pUzJPof7es6zYDHeWbNqE0T3tQfLCkShdyfR+Ew8In8W/x2s7S8vq0cfRq0rqv1E6B2/HpVdYO7g==
+"@sentry/node@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.49.0.tgz#95c28848b5c27940b079c08e9987088e2bf9d821"
+  integrity sha512-KLIrqcbKk4yR3g8fjl87Eyv4M9j4YI6b7sqVAZYj3FrX3mC6JQyGdlDfUpSKy604n1iAdr6OuUp5f9x7jPJaeQ==
   dependencies:
-    "@sentry-internal/tracing" "7.48.0"
-    "@sentry/core" "7.48.0"
-    "@sentry/types" "7.48.0"
-    "@sentry/utils" "7.48.0"
+    "@sentry-internal/tracing" "7.49.0"
+    "@sentry/core" "7.49.0"
+    "@sentry/types" "7.49.0"
+    "@sentry/utils" "7.49.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.48.0.tgz#ca8f1543bad4717dcd65739bf1256a1933bba757"
-  integrity sha512-8fRHMGJ0NJeIZi6UucxUTvfDPaBa7+jU1kCTLjCcuH3X/UVz5PtGLMtFSO5U8HP+mUDlPs97MP1uoDvMa4S2Ng==
+"@sentry/replay@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.49.0.tgz#c7f16bc3ca0c5911f641738f8894eb596c5da00d"
+  integrity sha512-UY3bHoBDPOu4Dpq3m3oxNjLrq09NiFVYUfrTN4QOq1Am2SA04XbuCj/YZ+jNVy/NrFtoz9cTovK6oQbNw53jog==
   dependencies:
-    "@sentry/core" "7.48.0"
-    "@sentry/types" "7.48.0"
-    "@sentry/utils" "7.48.0"
+    "@sentry/core" "7.49.0"
+    "@sentry/types" "7.49.0"
+    "@sentry/utils" "7.49.0"
 
-"@sentry/types@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.48.0.tgz#57f3c9cf331a5621e82dda04eefcf8c19ee42bc9"
-  integrity sha512-kkAszZwQ5/v4n7Yyw/DPNRWx7h724mVNRGZIJa9ggUMvTgMe7UKCZZ5wfQmYiKVlGbwd9pxXAcP8Oq15EbByFQ==
+"@sentry/types@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.49.0.tgz#2c217091e13dc373682f5be2e9b5baed9d2ae695"
+  integrity sha512-9yXXh7iv76+O6h2ONUVx0wsL1auqJFWez62mTjWk4350SgMmWp/zUkBxnVXhmcYqscz/CepC+Loz9vITLXtgxg==
 
-"@sentry/utils@7.48.0":
-  version "7.48.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.48.0.tgz#2866975ea8899aba35b083dd0558cbbe29ee8de1"
-  integrity sha512-d977sghkFVMfld0LrEyyY2gYrfayLPdDEpUDT+hg5y79r7zZDCFyHtdB86699E5K89MwDZahW7Erk+a1nk4x5w==
+"@sentry/utils@7.49.0":
+  version "7.49.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.49.0.tgz#b1b3a2af52067dd27e660c7c3062a31cdf4b94f9"
+  integrity sha512-JdC9yGnOgev4ISJVwmIoFsk8Zx0psDZJAj2DV7x4wMZsO6QK+YjC7G3mUED/S5D5lsrkBZ/3uvQQhr8DQI4UcQ==
   dependencies:
-    "@sentry/types" "7.48.0"
+    "@sentry/types" "7.49.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 8100be4e1ed538851d9074cb72c9931eaf98ac5b Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 3 May 2023 13:39:11 +0200
Subject: [PATCH 099/239] feat: Update to v7.50.0 of JavaScript SDKs (#671)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 package.json                                  |  14 +-
 src/renderer/sdk.ts                           |   2 +-
 .../other/browser-replay/event-replay.json    |   2 +-
 yarn.lock                                     | 124 +++++++++---------
 4 files changed, 71 insertions(+), 71 deletions(-)

diff --git a/package.json b/package.json
index 14b1367d..ae31926c 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.49.0",
-    "@sentry/core": "7.49.0",
-    "@sentry/node": "7.49.0",
-    "@sentry/types": "7.49.0",
-    "@sentry/utils": "7.49.0",
+    "@sentry/browser": "7.50.0",
+    "@sentry/core": "7.50.0",
+    "@sentry/node": "7.50.0",
+    "@sentry/types": "7.50.0",
+    "@sentry/utils": "7.50.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.49.0",
-    "@sentry-internal/typescript": "7.49.0",
+    "@sentry-internal/eslint-config-sdk": "7.50.0",
+    "@sentry-internal/typescript": "7.50.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 61c3faee..dacf2332 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_49_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_50_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/test-apps/other/browser-replay/event-replay.json b/test/e2e/test-apps/other/browser-replay/event-replay.json
index 221294a7..e5389c24 100644
--- a/test/e2e/test-apps/other/browser-replay/event-replay.json
+++ b/test/e2e/test-apps/other/browser-replay/event-replay.json
@@ -12,7 +12,7 @@
     ],
     "replay_id": "{{id}}",
     "segment_id": 0,
-    "replay_type": "error",
+    "replay_type": "buffer",
     "event_id": "{{id}}",
     "environment": "production",
     "sdk": {
diff --git a/yarn.lock b/yarn.lock
index 14cae854..4a906036 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.49.0.tgz#61450f76a178e6757c31b6438a498b17dca62314"
-  integrity sha512-5/Mb8mjduNCni1hRQD0gLTAfLIVWL1rfyS/TVhoZg/x3qz6DLO/upOyk/PpbHoJuvXXyiYixobultycm3iO7FQ==
+"@sentry-internal/eslint-config-sdk@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.50.0.tgz#b4210244f1bf69e035cf924f34f8cb8b0e50be31"
+  integrity sha512-jge0KvAH9kUcphiWftLqIYmKM0Wm0/cZUWPBtnc8ApNDGCOZhj0uX8zTEWSAZb2YOXv5AikCEfshPGuftlXYBg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.49.0"
-    "@sentry-internal/typescript" "7.49.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.50.0"
+    "@sentry-internal/typescript" "7.50.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,83 +143,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.49.0.tgz#936cbb99b972d5ebda45a1fbd7058bb57f3baee1"
-  integrity sha512-mh4wEXk0DIUd2kZe+nhym0K9cAHJSF54gd0p0GF53jPXU1u7/gltW3eEQP+CLtT60IezZxYTO9cvnUmzDSh7uQ==
+"@sentry-internal/eslint-plugin-sdk@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.50.0.tgz#a42a9acad3fc87af5f9d82d5c02adc8bc69c69b6"
+  integrity sha512-DFDqs43Pc6sIYHGysYO9E+Z4hkUs4cbmo9e+vWnRKlsQDfHs/+BirsX6pH07m/sbWxKwwdUbel3I+yOXJF9jxQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.49.0.tgz#f589de565370884b9a13f82c98463de9b2d25dcd"
-  integrity sha512-ESh3+ZneQk/3HESTUmIPNrW5GVPu/HrRJU+eAJJto74vm+6vP7zDn2YV2gJ1w18O/37nc7W/bVCgZJlhZ3cwew==
+"@sentry-internal/tracing@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.50.0.tgz#74454af99a03d81762993835d2687c881e14f41e"
+  integrity sha512-4TQ4vN0aMBWsUXfJWk2xbe4x7fKfwCXgXKTtHC/ocwwKM+0EefV5Iw9YFG8IrIQN4vMtuRzktqcs9q0/Sbv7tg==
   dependencies:
-    "@sentry/core" "7.49.0"
-    "@sentry/types" "7.49.0"
-    "@sentry/utils" "7.49.0"
+    "@sentry/core" "7.50.0"
+    "@sentry/types" "7.50.0"
+    "@sentry/utils" "7.50.0"
     tslib "^1.9.3"
 
-"@sentry-internal/typescript@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.49.0.tgz#af70ffbf8bb4e70906cb9913a5ff34ed3d9286ce"
-  integrity sha512-u3heGxVyQuty8IkKSTOiH1meNPRzzDcnSFbnMuJE9jGiJ/22WSruMH7BX2JQQnwzu8E1VlSVtPrHnsMJkSU8MA==
-
-"@sentry/browser@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.49.0.tgz#5ce1cdb8d883c129d9a4e313c08a54c5ada4661b"
-  integrity sha512-x2DekKkQoY7/dhBzE4J25mdQ978NtPBTVQb+uZqlF/t5mp4K44TAszmPqy8lC/CmVHkp7qcpRGSCIzeboUL4KA==
-  dependencies:
-    "@sentry-internal/tracing" "7.49.0"
-    "@sentry/core" "7.49.0"
-    "@sentry/replay" "7.49.0"
-    "@sentry/types" "7.49.0"
-    "@sentry/utils" "7.49.0"
+"@sentry-internal/typescript@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.50.0.tgz#31d76a36bba025ca35edefc6d1dae6afac26d4f1"
+  integrity sha512-cCWBqAcKWByS7z9x2oqsFl6/fT4EhFgb6OYShPlsOwP5UYthIJqDDFZJiFb9qSejQeENgSyWE63dIMVMtUI5sQ==
+
+"@sentry/browser@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.50.0.tgz#16c995c336322c8aec65570f90f50288678004ec"
+  integrity sha512-a+UYbP89+SAvW47/p9wxEi9eWlyp/SkYl52OCdZNXnplQY4kQIOVyiaIs5nnCxIxZgXKrhAX4eo1E9ykleFuNQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.50.0"
+    "@sentry/core" "7.50.0"
+    "@sentry/replay" "7.50.0"
+    "@sentry/types" "7.50.0"
+    "@sentry/utils" "7.50.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.49.0.tgz#340d059f5efeff1a3359fef66d0c8e34e79ac992"
-  integrity sha512-AlSnCYgfEbvK8pkNluUkmdW/cD9UpvOVCa+ERQswXNRkAv5aDGCL6Ihv6fnIajE++BYuwZh0+HwZUBVKTFzoZg==
+"@sentry/core@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.50.0.tgz#88bc9cbfc0cb429a28489ece6f0be7a7006436c4"
+  integrity sha512-6oD1a3fYs4aiNK7tuJSd88LHjYJAetd7ZK/AfJniU7zWKj4jxIYfO8nhm0qdnhEDs81RcweVDmPhWm3Kwrzzsg==
   dependencies:
-    "@sentry/types" "7.49.0"
-    "@sentry/utils" "7.49.0"
+    "@sentry/types" "7.50.0"
+    "@sentry/utils" "7.50.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.49.0.tgz#95c28848b5c27940b079c08e9987088e2bf9d821"
-  integrity sha512-KLIrqcbKk4yR3g8fjl87Eyv4M9j4YI6b7sqVAZYj3FrX3mC6JQyGdlDfUpSKy604n1iAdr6OuUp5f9x7jPJaeQ==
+"@sentry/node@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.50.0.tgz#d6adab136d87f7dca614ea0d77944f902fa45626"
+  integrity sha512-11UJBKoQFMp7f8sbzeO2gENsKIUkVCNBTzuPRib7l2K1HMjSfacXmwwma7ZEs0mc3ofIZ1UYuyONAXmI1lK9cQ==
   dependencies:
-    "@sentry-internal/tracing" "7.49.0"
-    "@sentry/core" "7.49.0"
-    "@sentry/types" "7.49.0"
-    "@sentry/utils" "7.49.0"
+    "@sentry-internal/tracing" "7.50.0"
+    "@sentry/core" "7.50.0"
+    "@sentry/types" "7.50.0"
+    "@sentry/utils" "7.50.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.49.0.tgz#c7f16bc3ca0c5911f641738f8894eb596c5da00d"
-  integrity sha512-UY3bHoBDPOu4Dpq3m3oxNjLrq09NiFVYUfrTN4QOq1Am2SA04XbuCj/YZ+jNVy/NrFtoz9cTovK6oQbNw53jog==
+"@sentry/replay@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.50.0.tgz#dd29f063492d91e708629ff8dd95a59d4b7180f1"
+  integrity sha512-EYRk+DTZ5luwfkiCaDpBC3YBKIEdkReTUNZtWDVUytSVjsCnttkAipx/y6bxy3HN+rSXungMd3XKQT5RNMRUNA==
   dependencies:
-    "@sentry/core" "7.49.0"
-    "@sentry/types" "7.49.0"
-    "@sentry/utils" "7.49.0"
+    "@sentry/core" "7.50.0"
+    "@sentry/types" "7.50.0"
+    "@sentry/utils" "7.50.0"
 
-"@sentry/types@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.49.0.tgz#2c217091e13dc373682f5be2e9b5baed9d2ae695"
-  integrity sha512-9yXXh7iv76+O6h2ONUVx0wsL1auqJFWez62mTjWk4350SgMmWp/zUkBxnVXhmcYqscz/CepC+Loz9vITLXtgxg==
+"@sentry/types@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.50.0.tgz#52a035cad83a80ca26fa53c09eb1241250c3df3e"
+  integrity sha512-Zo9vyI98QNeYT0K0y57Rb4JRWDaPEgmp+QkQ4CRQZFUTWetO5fvPZ4Gb/R7TW16LajuHZlbJBHmvmNj2pkL2kw==
 
-"@sentry/utils@7.49.0":
-  version "7.49.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.49.0.tgz#b1b3a2af52067dd27e660c7c3062a31cdf4b94f9"
-  integrity sha512-JdC9yGnOgev4ISJVwmIoFsk8Zx0psDZJAj2DV7x4wMZsO6QK+YjC7G3mUED/S5D5lsrkBZ/3uvQQhr8DQI4UcQ==
+"@sentry/utils@7.50.0":
+  version "7.50.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.50.0.tgz#2b93a48024651436e95b7c8e2066aee7c2234d57"
+  integrity sha512-iyPwwC6fwJsiPhH27ZbIiSsY5RaccHBqADS2zEjgKYhmP4P9WGgHRDrvLEnkOjqQyKNb6c0yfmv83n0uxYnolw==
   dependencies:
-    "@sentry/types" "7.49.0"
+    "@sentry/types" "7.50.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 686e2ce8bf05af7b30118b299db00557262e3006 Mon Sep 17 00:00:00 2001
From: Luca Forstner <luca.forstner@sentry.io>
Date: Fri, 26 May 2023 11:15:45 +0200
Subject: [PATCH 100/239] fix: Fix debug ID matching by normalizing
 `debug_meta` paths (#676)

---
 examples/electron-forge-webpack/event.json    |    8 +
 examples/electron-forge-webpack/package.json  |    1 +
 .../webpack.main.config.js                    |   22 +-
 .../webpack.renderer.config.js                |   20 +
 examples/electron-forge-webpack/yarn.lock     | 5421 +++++++++++++++++
 examples/electron-vite/event.json             |    8 +
 examples/electron-vite/package.json           |   11 +-
 examples/electron-vite/vite.config.main.js    |   19 +
 .../electron-vite/vite.config.renderer.js     |   26 +-
 examples/electron-vite/yarn.lock              | 1363 +++++
 .../event.json                                |    8 +
 .../package.json                              |    5 +-
 .../webpack.config.js                         |   24 +-
 .../yarn.lock                                 | 1496 +++++
 examples/webpack-context-isolation/event.json |    8 +
 .../webpack-context-isolation/package.json    |    7 +-
 .../webpack.config.js                         |   21 +-
 examples/webpack-context-isolation/yarn.lock  | 1595 +++++
 src/common/normalize.ts                       |    7 +
 19 files changed, 10054 insertions(+), 16 deletions(-)
 create mode 100644 examples/electron-forge-webpack/yarn.lock
 create mode 100644 examples/electron-vite/yarn.lock
 create mode 100644 examples/webpack-context-isolation-preload/yarn.lock
 create mode 100644 examples/webpack-context-isolation/yarn.lock

diff --git a/examples/electron-forge-webpack/event.json b/examples/electron-forge-webpack/event.json
index 16bb6c29..130fafd8 100644
--- a/examples/electron-forge-webpack/event.json
+++ b/examples/electron-forge-webpack/event.json
@@ -58,6 +58,14 @@
     "user": {
       "ip_address": "{{auto}}"
     },
+    "debug_meta": {
+      "images": [
+        {
+          "code_file": "app:///.webpack/renderer/main_window/index.js",
+          "type": "sourcemap"
+        }
+      ]
+    },
     "exception": {
       "values": [
         {
diff --git a/examples/electron-forge-webpack/package.json b/examples/electron-forge-webpack/package.json
index effe250b..12599d36 100644
--- a/examples/electron-forge-webpack/package.json
+++ b/examples/electron-forge-webpack/package.json
@@ -30,6 +30,7 @@
   "devDependencies": {
     "@electron-forge/cli": "6.0.0-beta.63",
     "@electron-forge/plugin-webpack": "6.0.0-beta.63",
+    "@sentry/webpack-plugin": "^2.2.0",
     "@vercel/webpack-asset-relocator-loader": "1.6.0",
     "electron": "23.0.0",
     "node-loader": "^2.0.0"
diff --git a/examples/electron-forge-webpack/webpack.main.config.js b/examples/electron-forge-webpack/webpack.main.config.js
index 641eed0f..8402398f 100644
--- a/examples/electron-forge-webpack/webpack.main.config.js
+++ b/examples/electron-forge-webpack/webpack.main.config.js
@@ -1,3 +1,5 @@
+const { sentryWebpackPlugin } = require('@sentry/webpack-plugin');
+
 module.exports = {
   /**
    * This is the main entry point for your application, it's the first file
@@ -8,4 +10,22 @@ module.exports = {
   module: {
     rules: require('./webpack.rules'),
   },
-};
\ No newline at end of file
+  plugins: [
+    sentryWebpackPlugin({
+      authToken: 'some invalid auth token',
+      org: 'some invalid org',
+      project: 'some invalid project',
+      telemetry: false,
+      sourcemaps: {
+        assets: [], // no assets to upload - we just care about injecting debug IDs
+      },
+      release: {
+        inject: false,
+      },
+      errorHandler() {
+        // do nothing on errors :)
+        // They will happen because of the invalid auth token
+      },
+    }),
+  ],
+};
diff --git a/examples/electron-forge-webpack/webpack.renderer.config.js b/examples/electron-forge-webpack/webpack.renderer.config.js
index b2e54d7c..0b7be694 100644
--- a/examples/electron-forge-webpack/webpack.renderer.config.js
+++ b/examples/electron-forge-webpack/webpack.renderer.config.js
@@ -1,3 +1,23 @@
+const { sentryWebpackPlugin } = require('@sentry/webpack-plugin');
+
 module.exports = {
   // Put your normal webpack config below here
+  plugins: [
+    sentryWebpackPlugin({
+      authToken: 'some invalid auth token',
+      org: 'some invalid org',
+      project: 'some invalid project',
+      telemetry: false,
+      sourcemaps: {
+        assets: [], // no assets to upload - we just care about injecting debug IDs
+      },
+      release: {
+        inject: false,
+      },
+      errorHandler() {
+        // do nothing on errors :)
+        // They will happen because of the invalid auth token
+      },
+    }),
+  ],
 };
diff --git a/examples/electron-forge-webpack/yarn.lock b/examples/electron-forge-webpack/yarn.lock
new file mode 100644
index 00000000..53498d70
--- /dev/null
+++ b/examples/electron-forge-webpack/yarn.lock
@@ -0,0 +1,5421 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@electron-forge/async-ora@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/async-ora/-/async-ora-6.0.0-beta.63.tgz#b72343f204f7c74605df658d31cc4c137ad3009c"
+  integrity sha512-e1BbeUV20yWZWeRJ3LDLcloPPgHwTXV1wAJXpAdDbmTmcRyAGx9iVx2Qyh6t878c7zX36XXlqfCIOvODsgiuOQ==
+  dependencies:
+    chalk "^4.0.0"
+    debug "^4.3.1"
+    log-symbols "^4.0.0"
+    ora "^5.0.0"
+    pretty-ms "^7.0.0"
+
+"@electron-forge/cli@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/cli/-/cli-6.0.0-beta.63.tgz#8a668da150c7729bf16cf0a9952c85ffbd4fa0ca"
+  integrity sha512-I2B/hX16IDbuc2ip6JjAxrTF8XSQfuoIkb/EoqzEluPrdCx6VTzEahOQlUH+CvPohpwD/LDsH4Usd9/krKlkfg==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    "@electron-forge/core" "6.0.0-beta.63"
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+    "@electron/get" "^1.9.0"
+    chalk "^4.0.0"
+    commander "^4.1.1"
+    debug "^4.3.1"
+    fs-extra "^10.0.0"
+    inquirer "^8.0.0"
+    semver "^7.2.1"
+
+"@electron-forge/core@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/core/-/core-6.0.0-beta.63.tgz#511a89080664c5c661d6571e449c1a8a216b6d96"
+  integrity sha512-NuiWRXUfpv6/PwP8AgPxcmRPiWvQMfllTHz163wmBWz8UBclzhu7Brpu6dwmszAJG68erW15ym+cUlpvGDEltg==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    "@electron-forge/installer-base" "6.0.0-beta.63"
+    "@electron-forge/installer-deb" "6.0.0-beta.63"
+    "@electron-forge/installer-dmg" "6.0.0-beta.63"
+    "@electron-forge/installer-exe" "6.0.0-beta.63"
+    "@electron-forge/installer-rpm" "6.0.0-beta.63"
+    "@electron-forge/installer-zip" "6.0.0-beta.63"
+    "@electron-forge/maker-base" "6.0.0-beta.63"
+    "@electron-forge/plugin-base" "6.0.0-beta.63"
+    "@electron-forge/publisher-base" "6.0.0-beta.63"
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+    "@electron-forge/template-base" "6.0.0-beta.63"
+    "@electron-forge/template-typescript" "6.0.0-beta.63"
+    "@electron-forge/template-typescript-webpack" "6.0.0-beta.63"
+    "@electron-forge/template-webpack" "6.0.0-beta.63"
+    "@electron/get" "^1.9.0"
+    "@malept/cross-spawn-promise" "^2.0.0"
+    chalk "^4.0.0"
+    debug "^4.3.1"
+    electron-packager "^15.4.0"
+    electron-rebuild "^3.2.6"
+    fast-glob "^3.2.7"
+    find-up "^5.0.0"
+    fs-extra "^10.0.0"
+    lodash "^4.17.20"
+    log-symbols "^4.0.0"
+    node-fetch "^2.6.0"
+    nugget "^2.0.1"
+    resolve-package "^1.0.1"
+    semver "^7.2.1"
+    source-map-support "^0.5.13"
+    sudo-prompt "^9.1.1"
+    username "^5.1.0"
+    yarn-or-npm "^3.0.1"
+
+"@electron-forge/installer-base@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/installer-base/-/installer-base-6.0.0-beta.63.tgz#9ce2542a604526b585b2e874d891196b2beff8ce"
+  integrity sha512-y4SKJZaxE8lnfwicWuAiUZBpBY6UB/mE/dA+w6uigKEffZzRPbrbBUIuknII6wEaFnnScmCrQaBRjxy+zsEihQ==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+
+"@electron-forge/installer-darwin@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/installer-darwin/-/installer-darwin-6.0.0-beta.63.tgz#6ea0f1d169d878416c6fb545292a4a6cb14962c6"
+  integrity sha512-LQE6UKPP7tJ+Ki3tPzYUIBRAAzEpalqkz8zYUh+2pS/nk9w2BgQeOJ84NzWUfoeLWZnsWtjp8kox8xTS8/BsSQ==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    "@electron-forge/installer-base" "6.0.0-beta.63"
+    fs-extra "^10.0.0"
+    sudo-prompt "^9.1.1"
+
+"@electron-forge/installer-deb@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/installer-deb/-/installer-deb-6.0.0-beta.63.tgz#9ae9c761335bf0f11ba971296a26acde4413d331"
+  integrity sha512-gvjCXdGXBxC/O8QuwNHKsLIlfOwVc9y/e5pURcuFRvPf7Ibw7e53w3pfR2pquWHNzAccrw8P5WBEuPSeDPBlLw==
+  dependencies:
+    "@electron-forge/installer-linux" "6.0.0-beta.63"
+
+"@electron-forge/installer-dmg@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/installer-dmg/-/installer-dmg-6.0.0-beta.63.tgz#245b6fd39679c49e404317b6e95b48432fde07cc"
+  integrity sha512-o+Zd2CmpoMQOk9SfuUPIoQ4GONVNHdlmI4mMIJ22OrLQnZJYAdsQUFO87jtxmJuippTpEbnqaKc9yl6mLh89TQ==
+  dependencies:
+    "@electron-forge/installer-darwin" "6.0.0-beta.63"
+    "@malept/cross-spawn-promise" "^2.0.0"
+    debug "^4.3.1"
+    fs-extra "^10.0.0"
+
+"@electron-forge/installer-exe@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/installer-exe/-/installer-exe-6.0.0-beta.63.tgz#8d89bb8bb0d94bd2694c6e7192d57d43a3f0074a"
+  integrity sha512-HhogUMTTgOXTEMQE+A20USamuAcnClSSWzlInzVQ2cGT5AdZio6zqNJ/et7zPx7Jz71gmJ/cfhNstzc/ew1IAA==
+  dependencies:
+    "@electron-forge/installer-base" "6.0.0-beta.63"
+    open "^8.1.0"
+
+"@electron-forge/installer-linux@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/installer-linux/-/installer-linux-6.0.0-beta.63.tgz#cf47e247ec1b507dcb586e08cf9e95cc81b7da06"
+  integrity sha512-yC2wYQ3uXGnvWEG4AdjSmas5qaXXtXIoxO6/cXJrywMT9ujWlp2GB1i+I5xrFCusgbjdvdzJ3JhLRmIAKpW6ZA==
+  dependencies:
+    "@electron-forge/installer-base" "6.0.0-beta.63"
+    sudo-prompt "^9.1.1"
+
+"@electron-forge/installer-rpm@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/installer-rpm/-/installer-rpm-6.0.0-beta.63.tgz#faf2cecac309971fc0cb4fa94f83ad1764af0aee"
+  integrity sha512-4p+zDInl6sMnx1jdIcRSXgRAGFSwtcBPBStAlVuxPMefM8ElBPhskUyHrk33TqMZUdzbr+vYA+pQGj/6jlET4A==
+  dependencies:
+    "@electron-forge/installer-linux" "6.0.0-beta.63"
+
+"@electron-forge/installer-zip@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/installer-zip/-/installer-zip-6.0.0-beta.63.tgz#4d6e6cbd8c0c45438a16b2f349971b58311dbe6f"
+  integrity sha512-ZORm3jVvswvKSv+iuufTVXwIM/OOtBSQPeAay8hVubf6MudWBdntWv1Xg/BAUAcdRbAH/EIbMv83LZvmt7cufw==
+  dependencies:
+    "@electron-forge/installer-darwin" "6.0.0-beta.63"
+    "@malept/cross-spawn-promise" "^2.0.0"
+    fs-extra "^10.0.0"
+
+"@electron-forge/maker-base@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/maker-base/-/maker-base-6.0.0-beta.63.tgz#4e9cbff3775bea08938dd3aa5a48c3e9479b9be6"
+  integrity sha512-0Fh6OOjS/1sXIGReKgU5NCMf8ZUyaCUSjd190oUNaX8OSxGDbHrbWO3CgIbsAOsxRnxzhYY1UtPo6VkexjCQBA==
+  dependencies:
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+    fs-extra "^10.0.0"
+    which "^2.0.2"
+
+"@electron-forge/plugin-base@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/plugin-base/-/plugin-base-6.0.0-beta.63.tgz#4895d846d5c643296db9892af2a74238bc8637d7"
+  integrity sha512-K9nyGRI9NY2kax7aS/1eWxGrOSwNO3JnmbfvFQf5I0Yl/HKClrfGJq4o3q4N9lf55arPRJBROP8+rHJ115VCrA==
+  dependencies:
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+
+"@electron-forge/plugin-webpack@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/plugin-webpack/-/plugin-webpack-6.0.0-beta.63.tgz#2d81cd8765381e2dea80f0a4103e772b2ed06fef"
+  integrity sha512-ITDN6Be0Z/JgwXmN4aXfT+B8TUg5AcvSW2j/NTkATiqUaVyaqq97UxqJ+gx15ouraKW92szEvL2Mo2JwG7bXYg==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    "@electron-forge/core" "6.0.0-beta.63"
+    "@electron-forge/plugin-base" "6.0.0-beta.63"
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+    "@electron-forge/web-multi-logger" "6.0.0-beta.63"
+    chalk "^4.0.0"
+    debug "^4.3.1"
+    fs-extra "^10.0.0"
+    global "^4.3.2"
+    html-webpack-plugin "^5.3.1"
+    webpack "^5.37.0"
+    webpack-dev-server "^4.0.0"
+    webpack-merge "^5.7.3"
+
+"@electron-forge/publisher-base@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/publisher-base/-/publisher-base-6.0.0-beta.63.tgz#b7327eaa446995c8d7243757829d7fd92d1c2d77"
+  integrity sha512-ag+/e6eqM6k1jxUhXg8618IbUa1IsF8OcbZtjcLSZSp/ZEGLAlZ3IpfIrk5C9cRUdibhDJyT6oFLfbG7KUhpRg==
+  dependencies:
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+
+"@electron-forge/shared-types@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/shared-types/-/shared-types-6.0.0-beta.63.tgz#d15aec5698f6e22b61060a4064955a04c2cedc39"
+  integrity sha512-ayw8IBtHKZ1oIN3y3t3Jm80TTvstvKrPASCXMEJ/fh4gHah8pUmDFZEvyAsGgy/XFHqsjlpTmD2hdOtQqCRpMQ==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    electron-packager "^15.4.0"
+    electron-rebuild "^3.2.6"
+    ora "^5.0.0"
+
+"@electron-forge/template-base@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/template-base/-/template-base-6.0.0-beta.63.tgz#62f929faa210727863e56402f2b83d9d61d3b2f2"
+  integrity sha512-u1rPlrc8bqajkiKe2tmGROL9/o0xx8OzMBHsT7i2+oAFPicSZoyrELCxx9htCeLgUf0iR0K0EzLsFjdyRjTBkg==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+    "@malept/cross-spawn-promise" "^2.0.0"
+    debug "^4.3.1"
+    fs-extra "^10.0.0"
+    username "^5.1.0"
+
+"@electron-forge/template-typescript-webpack@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/template-typescript-webpack/-/template-typescript-webpack-6.0.0-beta.63.tgz#4eff34f0ba5d87ba8a3e57f70153aa4c0e782c56"
+  integrity sha512-8S3GW2MRmYF6BsgozCm0CPqAuqaK48MZvJJ3v3XbO1tWPtz4vvw21XxQeOqRMpECdNbqnRBtil4QxVditEx3Kw==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+    "@electron-forge/template-base" "6.0.0-beta.63"
+    fs-extra "^10.0.0"
+
+"@electron-forge/template-typescript@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/template-typescript/-/template-typescript-6.0.0-beta.63.tgz#87d06f9f1f866d921d9fed0913e4b9d03b5f09b5"
+  integrity sha512-npFOyak+F+p086GoSifCWwhBxRSJqzzvEwztnONpbjp7BasvtWUyOVpXyyzvt7GaawjRg5Gx/NUgVi5Oi9BIfg==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+    "@electron-forge/template-base" "6.0.0-beta.63"
+    fs-extra "^10.0.0"
+
+"@electron-forge/template-webpack@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack/-/template-webpack-6.0.0-beta.63.tgz#090203523f58a31354921cde2e1ba3f21ac74b43"
+  integrity sha512-CE5zjnyfmHlapwQSJ54kUeTNsvhx/7HAjvfMXpE689LxlFnr0VhiTxuc5kwEetPcxsXhei7IBy/PdJ41v4dswA==
+  dependencies:
+    "@electron-forge/async-ora" "6.0.0-beta.63"
+    "@electron-forge/shared-types" "6.0.0-beta.63"
+    "@electron-forge/template-base" "6.0.0-beta.63"
+    fs-extra "^10.0.0"
+
+"@electron-forge/web-multi-logger@6.0.0-beta.63":
+  version "6.0.0-beta.63"
+  resolved "https://registry.yarnpkg.com/@electron-forge/web-multi-logger/-/web-multi-logger-6.0.0-beta.63.tgz#4d349ef929cc7a01ee7de5edbd7bc75583b604b2"
+  integrity sha512-FRo/7+oolFaSGu8XP+ukXXxDKcWOb5DSUiGWzFtYKIYc6HHGy/ErGNuxh3NQf3PMTM3nxfFwbAEtthSulW1Wrw==
+  dependencies:
+    express "^4.17.1"
+    express-ws "^5.0.2"
+    xterm "^4.9.0"
+    xterm-addon-fit "^0.5.0"
+    xterm-addon-search "^0.8.0"
+
+"@electron/asar@^3.2.1":
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864"
+  integrity sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g==
+  dependencies:
+    chromium-pickle-js "^0.2.0"
+    commander "^5.0.0"
+    glob "^7.1.6"
+    minimatch "^3.0.4"
+
+"@electron/get@^1.6.0", "@electron/get@^1.9.0":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40"
+  integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==
+  dependencies:
+    debug "^4.1.1"
+    env-paths "^2.2.0"
+    fs-extra "^8.1.0"
+    got "^9.6.0"
+    progress "^2.0.3"
+    semver "^6.2.0"
+    sumchecker "^3.0.1"
+  optionalDependencies:
+    global-agent "^3.0.0"
+    global-tunnel-ng "^2.7.1"
+
+"@electron/get@^2.0.0":
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e"
+  integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==
+  dependencies:
+    debug "^4.1.1"
+    env-paths "^2.2.0"
+    fs-extra "^8.1.0"
+    got "^11.8.5"
+    progress "^2.0.3"
+    semver "^6.2.0"
+    sumchecker "^3.0.1"
+  optionalDependencies:
+    global-agent "^3.0.0"
+
+"@electron/universal@^1.2.1":
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777"
+  integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==
+  dependencies:
+    "@electron/asar" "^3.2.1"
+    "@malept/cross-spawn-promise" "^1.1.0"
+    debug "^4.3.1"
+    dir-compare "^3.0.0"
+    fs-extra "^9.0.1"
+    minimatch "^3.0.4"
+    plist "^3.0.4"
+
+"@gar/promisify@^1.1.3":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
+  integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
+
+"@jridgewell/gen-mapping@^0.3.0":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/set-array@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/source-map@^0.3.2":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
+  integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/sourcemap-codec@1.4.14":
+  version "1.4.14"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
+  version "1.4.15"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.18"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
+  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
+  dependencies:
+    "@jridgewell/resolve-uri" "3.1.0"
+    "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@leichtgewicht/ip-codec@^2.0.1":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
+  integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
+
+"@malept/cross-spawn-promise@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
+  integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==
+  dependencies:
+    cross-spawn "^7.0.1"
+
+"@malept/cross-spawn-promise@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d"
+  integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==
+  dependencies:
+    cross-spawn "^7.0.1"
+
+"@nodelib/fs.scandir@2.1.5":
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+  dependencies:
+    "@nodelib/fs.stat" "2.0.5"
+    run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+  dependencies:
+    "@nodelib/fs.scandir" "2.1.5"
+    fastq "^1.6.0"
+
+"@npmcli/fs@^2.1.0":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865"
+  integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==
+  dependencies:
+    "@gar/promisify" "^1.1.3"
+    semver "^7.3.5"
+
+"@npmcli/move-file@^2.0.0":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4"
+  integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==
+  dependencies:
+    mkdirp "^1.0.4"
+    rimraf "^3.0.2"
+
+"@sentry-internal/tracing@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d"
+  integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ==
+  dependencies:
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/browser@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e"
+  integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/bundler-plugin-core@2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a"
+  integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA==
+  dependencies:
+    "@sentry/cli" "^2.17.0"
+    "@sentry/node" "7.53.1"
+    find-up "5.0.0"
+    glob "9.3.2"
+    magic-string "0.27.0"
+    unplugin "1.0.1"
+
+"@sentry/cli@^2.17.0":
+  version "2.18.1"
+  resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308"
+  integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw==
+  dependencies:
+    https-proxy-agent "^5.0.0"
+    node-fetch "^2.6.7"
+    progress "^2.0.3"
+    proxy-from-env "^1.1.0"
+    which "^2.0.2"
+
+"@sentry/core@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88"
+  integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/core@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c"
+  integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/electron@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11"
+  integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A==
+  dependencies:
+    "@sentry/browser" "6.17.2"
+    "@sentry/core" "6.17.2"
+    "@sentry/node" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    deepmerge "^4.2.2"
+    tslib "^2.3.1"
+
+"@sentry/hub@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b"
+  integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/minimal@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120"
+  integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/node@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1"
+  integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/hub" "6.17.2"
+    "@sentry/tracing" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/node@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7"
+  integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA==
+  dependencies:
+    "@sentry-internal/tracing" "7.53.1"
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/tracing@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b"
+  integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/types@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30"
+  integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==
+
+"@sentry/types@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41"
+  integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw==
+
+"@sentry/utils@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732"
+  integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/utils@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486"
+  integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/webpack-plugin@^2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.2.0.tgz#bd7a28a7132f139f74aa1068b168ab735fb9ddea"
+  integrity sha512-GzwoIQ2ygau0u76uKBK7gAyJAi6Te9zgJuP//OBfmJoXupm6HIUWC6RmPFy0yMlsK4gq1Ak/KziX7PZIe5NLaA==
+  dependencies:
+    "@sentry/bundler-plugin-core" "2.2.0"
+    unplugin "1.0.1"
+    uuid "^9.0.0"
+
+"@sindresorhus/is@^0.14.0":
+  version "0.14.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
+  integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+
+"@sindresorhus/is@^4.0.0":
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+  integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
+"@szmarczak/http-timer@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
+  integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+  dependencies:
+    defer-to-connect "^1.0.1"
+
+"@szmarczak/http-timer@^4.0.5":
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
+  integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
+  dependencies:
+    defer-to-connect "^2.0.0"
+
+"@tootallnate/once@2":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+  integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
+"@types/body-parser@*":
+  version "1.19.2"
+  resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
+  integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
+  dependencies:
+    "@types/connect" "*"
+    "@types/node" "*"
+
+"@types/bonjour@^3.5.9":
+  version "3.5.10"
+  resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275"
+  integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/cacheable-request@^6.0.1":
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
+  integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
+  dependencies:
+    "@types/http-cache-semantics" "*"
+    "@types/keyv" "^3.1.4"
+    "@types/node" "*"
+    "@types/responselike" "^1.0.0"
+
+"@types/connect-history-api-fallback@^1.3.5":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41"
+  integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==
+  dependencies:
+    "@types/express-serve-static-core" "*"
+    "@types/node" "*"
+
+"@types/connect@*":
+  version "3.4.35"
+  resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
+  integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
+  dependencies:
+    "@types/node" "*"
+
+"@types/eslint-scope@^3.7.3":
+  version "3.7.4"
+  resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
+  integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
+  dependencies:
+    "@types/eslint" "*"
+    "@types/estree" "*"
+
+"@types/eslint@*":
+  version "8.40.0"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23"
+  integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*", "@types/estree@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
+  integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
+
+"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33":
+  version "4.17.35"
+  resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f"
+  integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==
+  dependencies:
+    "@types/node" "*"
+    "@types/qs" "*"
+    "@types/range-parser" "*"
+    "@types/send" "*"
+
+"@types/express@*", "@types/express@^4.17.13":
+  version "4.17.17"
+  resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4"
+  integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==
+  dependencies:
+    "@types/body-parser" "*"
+    "@types/express-serve-static-core" "^4.17.33"
+    "@types/qs" "*"
+    "@types/serve-static" "*"
+
+"@types/glob@^7.1.1":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
+  integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
+  dependencies:
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
+"@types/html-minifier-terser@^6.0.0":
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
+  integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+
+"@types/http-cache-semantics@*":
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
+  integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
+
+"@types/http-proxy@^1.17.8":
+  version "1.17.11"
+  resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293"
+  integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==
+  dependencies:
+    "@types/node" "*"
+
+"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+  version "7.0.11"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
+"@types/keyv@^3.1.4":
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+  integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+  dependencies:
+    "@types/node" "*"
+
+"@types/mime@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
+  integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
+
+"@types/mime@^1":
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
+  integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
+
+"@types/minimatch@*":
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
+  integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
+
+"@types/node@*":
+  version "20.2.3"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878"
+  integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==
+
+"@types/node@^16.11.26":
+  version "16.18.32"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.32.tgz#5b5becc5da76fc055b2a601c8a3adbf13891227e"
+  integrity sha512-zpnXe4dEz6PrWz9u7dqyRoq9VxwCvoXRPy/ewhmMa1CgEyVmtL1NJPQ2MX+4pf97vetquVKkpiMx0MwI8pjNOw==
+
+"@types/qs@*":
+  version "6.9.7"
+  resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
+  integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
+
+"@types/range-parser@*":
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
+  integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
+
+"@types/responselike@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
+  integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
+  dependencies:
+    "@types/node" "*"
+
+"@types/retry@0.12.0":
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
+  integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+
+"@types/send@*":
+  version "0.17.1"
+  resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301"
+  integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==
+  dependencies:
+    "@types/mime" "^1"
+    "@types/node" "*"
+
+"@types/serve-index@^1.9.1":
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278"
+  integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==
+  dependencies:
+    "@types/express" "*"
+
+"@types/serve-static@*", "@types/serve-static@^1.13.10":
+  version "1.15.1"
+  resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d"
+  integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==
+  dependencies:
+    "@types/mime" "*"
+    "@types/node" "*"
+
+"@types/sockjs@^0.3.33":
+  version "0.3.33"
+  resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f"
+  integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/ws@^8.5.1":
+  version "8.5.4"
+  resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5"
+  integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==
+  dependencies:
+    "@types/node" "*"
+
+"@types/yauzl@^2.9.1":
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
+  integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
+  dependencies:
+    "@types/node" "*"
+
+"@vercel/webpack-asset-relocator-loader@1.6.0":
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.6.0.tgz#5c1359187a1f88fbf212c05ba8291bc17441e510"
+  integrity sha512-Iy7uTSeiYn78Gc0flRHxlBFLn32/q9i70Ss8MKO37g2fYHdCYhbLbZg1cfQ5DgXv0SQqBdWimF4Md4hcgH/jhw==
+
+"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
+  integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
+  dependencies:
+    "@webassemblyjs/helper-numbers" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
+  integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
+
+"@webassemblyjs/helper-api-error@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
+  integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
+
+"@webassemblyjs/helper-buffer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093"
+  integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
+
+"@webassemblyjs/helper-numbers@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
+  integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
+  dependencies:
+    "@webassemblyjs/floating-point-hex-parser" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
+  integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
+
+"@webassemblyjs/helper-wasm-section@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577"
+  integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+
+"@webassemblyjs/ieee754@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
+  integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
+  integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
+  integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
+
+"@webassemblyjs/wasm-edit@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab"
+  integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/helper-wasm-section" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-opt" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+    "@webassemblyjs/wast-printer" "1.11.6"
+
+"@webassemblyjs/wasm-gen@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268"
+  integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wasm-opt@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2"
+  integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+
+"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1"
+  integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wast-printer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20"
+  integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abbrev@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+  integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+  dependencies:
+    mime-types "~2.1.34"
+    negotiator "0.6.3"
+
+acorn-import-assertions@^1.9.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
+  integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
+
+acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1:
+  version "8.8.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+
+agent-base@6, agent-base@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+agentkeepalive@^4.2.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255"
+  integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==
+  dependencies:
+    debug "^4.1.0"
+    depd "^2.0.0"
+    humanize-ms "^1.2.1"
+
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
+ajv-formats@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+  integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+  dependencies:
+    ajv "^8.0.0"
+
+ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv-keywords@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
+  integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+
+ajv@^6.12.3, ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ajv@^8.0.0, ajv@^8.9.0:
+  version "8.12.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
+  integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    json-schema-traverse "^1.0.0"
+    require-from-string "^2.0.2"
+    uri-js "^4.2.2"
+
+ansi-escapes@^4.2.1:
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+  dependencies:
+    type-fest "^0.21.3"
+
+ansi-html-community@^0.0.8:
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
+  integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
+
+ansi-regex@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+"aproba@^1.0.3 || ^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+  integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+
+are-we-there-yet@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
+  integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^3.6.0"
+
+array-flatten@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+  integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
+
+array-flatten@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+  integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+asar@^3.1.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221"
+  integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==
+  dependencies:
+    chromium-pickle-js "^0.2.0"
+    commander "^5.0.0"
+    glob "^7.1.6"
+    minimatch "^3.0.4"
+  optionalDependencies:
+    "@types/glob" "^7.1.1"
+
+asn1@~0.2.3:
+  version "0.2.6"
+  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+  integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
+  dependencies:
+    safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+  integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+author-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450"
+  integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==
+
+aws-sign2@~0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+  integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==
+
+aws4@^1.8.0:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3"
+  integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base64-js@^1.3.1, base64-js@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+batch@0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+  integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+
+bcrypt-pbkdf@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+  integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
+  dependencies:
+    tweetnacl "^0.14.3"
+
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bl@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+  integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+  dependencies:
+    buffer "^5.5.0"
+    inherits "^2.0.4"
+    readable-stream "^3.4.0"
+
+bluebird@^3.1.1, bluebird@^3.5.0:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+body-parser@1.20.1:
+  version "1.20.1"
+  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
+  integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
+  dependencies:
+    bytes "3.1.2"
+    content-type "~1.0.4"
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    on-finished "2.4.1"
+    qs "6.11.0"
+    raw-body "2.5.1"
+    type-is "~1.6.18"
+    unpipe "1.0.0"
+
+bonjour-service@^1.0.11:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135"
+  integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==
+  dependencies:
+    array-flatten "^2.1.2"
+    dns-equal "^1.0.0"
+    fast-deep-equal "^3.1.3"
+    multicast-dns "^7.2.5"
+
+boolbase@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+boolean@^3.0.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
+  integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+braces@^3.0.2, braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+browserslist@^4.14.5:
+  version "4.21.5"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7"
+  integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
+  dependencies:
+    caniuse-lite "^1.0.30001449"
+    electron-to-chromium "^1.4.284"
+    node-releases "^2.0.8"
+    update-browserslist-db "^1.0.10"
+
+buffer-alloc-unsafe@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+  integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+  integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+  dependencies:
+    buffer-alloc-unsafe "^1.1.0"
+    buffer-fill "^1.0.0"
+
+buffer-crc32@~0.2.3:
+  version "0.2.13"
+  resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+  integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
+buffer-equal@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90"
+  integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==
+
+buffer-fill@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+  integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer@^5.5.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+  integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.1.13"
+
+bytes@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
+
+bytes@3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+cacache@^16.1.0:
+  version "16.1.3"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e"
+  integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==
+  dependencies:
+    "@npmcli/fs" "^2.1.0"
+    "@npmcli/move-file" "^2.0.0"
+    chownr "^2.0.0"
+    fs-minipass "^2.1.0"
+    glob "^8.0.1"
+    infer-owner "^1.0.4"
+    lru-cache "^7.7.1"
+    minipass "^3.1.6"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    mkdirp "^1.0.4"
+    p-map "^4.0.0"
+    promise-inflight "^1.0.1"
+    rimraf "^3.0.2"
+    ssri "^9.0.0"
+    tar "^6.1.11"
+    unique-filename "^2.0.0"
+
+cacheable-lookup@^5.0.3:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+  integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
+cacheable-request@^6.0.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
+  integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+  dependencies:
+    clone-response "^1.0.2"
+    get-stream "^5.1.0"
+    http-cache-semantics "^4.0.0"
+    keyv "^3.0.0"
+    lowercase-keys "^2.0.0"
+    normalize-url "^4.1.0"
+    responselike "^1.0.2"
+
+cacheable-request@^7.0.2:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
+  integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
+  dependencies:
+    clone-response "^1.0.2"
+    get-stream "^5.1.0"
+    http-cache-semantics "^4.0.0"
+    keyv "^4.0.0"
+    lowercase-keys "^2.0.0"
+    normalize-url "^6.0.1"
+    responselike "^2.0.0"
+
+call-bind@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+  dependencies:
+    function-bind "^1.1.1"
+    get-intrinsic "^1.0.2"
+
+camel-case@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+  dependencies:
+    pascal-case "^3.1.2"
+    tslib "^2.0.3"
+
+caniuse-lite@^1.0.30001449:
+  version "1.0.30001489"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8"
+  integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==
+
+caseless@~0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+  integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
+
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+chardet@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+chokidar@^3.5.3:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+chromium-pickle-js@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
+  integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==
+
+clean-css@^5.2.2:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224"
+  integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==
+  dependencies:
+    source-map "~0.6.0"
+
+clean-stack@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+  dependencies:
+    restore-cursor "^3.1.0"
+
+cli-spinners@^2.5.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
+  integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
+
+cli-width@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
+  integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
+
+cliui@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+  integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+  dependencies:
+    string-width "^4.2.0"
+    strip-ansi "^6.0.1"
+    wrap-ansi "^7.0.0"
+
+clone-deep@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+  dependencies:
+    is-plain-object "^2.0.4"
+    kind-of "^6.0.2"
+    shallow-clone "^3.0.0"
+
+clone-response@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
+  integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
+  dependencies:
+    mimic-response "^1.0.0"
+
+clone@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+  integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
+
+code-point-at@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+  integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==
+
+color-convert@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  dependencies:
+    color-name "~1.1.4"
+
+color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-support@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+  integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
+colorette@^2.0.10:
+  version "2.0.20"
+  resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+  integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+  integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+commander@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+  integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
+commander@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+compare-version@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
+  integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==
+
+compressible@~2.0.16:
+  version "2.0.18"
+  resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+  integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+  dependencies:
+    mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+  integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+  dependencies:
+    accepts "~1.3.5"
+    bytes "3.0.0"
+    compressible "~2.0.16"
+    debug "2.6.9"
+    on-headers "~1.0.2"
+    safe-buffer "5.1.2"
+    vary "~1.1.2"
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+config-chain@^1.1.11:
+  version "1.1.13"
+  resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
+  integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
+  dependencies:
+    ini "^1.3.4"
+    proto-list "~1.2.1"
+
+connect-history-api-fallback@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
+  integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==
+
+console-control-strings@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+
+content-disposition@0.5.4:
+  version "0.5.4"
+  resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+  integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+  dependencies:
+    safe-buffer "5.2.1"
+
+content-type@~1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
+  integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
+
+cookie-signature@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+  integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+
+cookie@0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+  integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
+cookie@^0.4.1:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+  integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
+core-util-is@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+
+core-util-is@~1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz#46253b0f497676e766faf4a7061004618b5ac5ec"
+  integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==
+  dependencies:
+    "@malept/cross-spawn-promise" "^1.1.0"
+    is-wsl "^2.2.0"
+    which "^2.0.2"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  dependencies:
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+cross-spawn@^7.0.1, cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+css-select@^4.1.3:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.0.1"
+    domhandler "^4.3.1"
+    domutils "^2.8.0"
+    nth-check "^2.0.1"
+
+css-what@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+dashdash@^1.12.0:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+  integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==
+  dependencies:
+    assert-plus "^1.0.0"
+
+debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.6.8:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+debug@^3.1.0:
+  version "3.2.7"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+  dependencies:
+    ms "^2.1.1"
+
+decompress-response@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+  integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==
+  dependencies:
+    mimic-response "^1.0.0"
+
+decompress-response@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+  integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+  dependencies:
+    mimic-response "^3.1.0"
+
+deepmerge@^4.2.2:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+default-gateway@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71"
+  integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==
+  dependencies:
+    execa "^5.0.0"
+
+defaults@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
+  integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
+  dependencies:
+    clone "^1.0.2"
+
+defer-to-connect@^1.0.1:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
+  integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+
+defer-to-connect@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+  integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
+define-lazy-prop@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+  integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
+define-properties@^1.1.3:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+  integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+delegates@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
+
+depd@2.0.0, depd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+depd@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+  integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+
+destroy@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+  integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+
+detect-libc@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd"
+  integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==
+
+detect-node@^2.0.4:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+  integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+dir-compare@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416"
+  integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==
+  dependencies:
+    buffer-equal "^1.0.0"
+    minimatch "^3.0.4"
+
+dns-equal@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+  integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==
+
+dns-packet@^5.2.2:
+  version "5.6.0"
+  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d"
+  integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==
+  dependencies:
+    "@leichtgewicht/ip-codec" "^2.0.1"
+
+dom-converter@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
+dom-serializer@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+dom-walk@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
+  integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
+
+domelementtype@^2.0.1, domelementtype@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domutils@^2.5.2, domutils@^2.8.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+dot-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+duplexer3@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e"
+  integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==
+
+ecc-jsbn@~0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+  integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==
+  dependencies:
+    jsbn "~0.1.0"
+    safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+  integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
+
+electron-notarize@^1.1.1:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.2.2.tgz#ebf2b258e8e08c1c9f8ff61dc53d5b16b439daf4"
+  integrity sha512-ZStVWYcWI7g87/PgjPJSIIhwQXOaw4/XeXU+pWqMMktSLHaGMLHdyPPN7Cmao7+Cr7fYufA16npdtMndYciHNw==
+  dependencies:
+    debug "^4.1.1"
+    fs-extra "^9.0.1"
+
+electron-osx-sign@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz#fc258c5e896859904bbe3d01da06902c04b51c3a"
+  integrity sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==
+  dependencies:
+    bluebird "^3.5.0"
+    compare-version "^0.1.2"
+    debug "^2.6.8"
+    isbinaryfile "^3.0.2"
+    minimist "^1.2.0"
+    plist "^3.0.1"
+
+electron-packager@^15.4.0:
+  version "15.5.2"
+  resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.5.2.tgz#9864796b8af63aa87b43151d0b6990ba7093e6b8"
+  integrity sha512-8zUdkSONn0jomu/efqoxApGzgqIb56ooMs671HeB/BXTPnWcWvqpEY08g16PL6ok2ymA5zPj8vmUszLrq99F0Q==
+  dependencies:
+    "@electron/get" "^1.6.0"
+    "@electron/universal" "^1.2.1"
+    asar "^3.1.0"
+    cross-spawn-windows-exe "^1.2.0"
+    debug "^4.0.1"
+    electron-notarize "^1.1.1"
+    electron-osx-sign "^0.5.0"
+    extract-zip "^2.0.0"
+    filenamify "^4.1.0"
+    fs-extra "^10.1.0"
+    galactus "^0.2.1"
+    get-package-info "^1.0.0"
+    junk "^3.1.0"
+    parse-author "^2.0.0"
+    plist "^3.0.0"
+    rcedit "^3.0.1"
+    resolve "^1.1.6"
+    semver "^7.1.3"
+    yargs-parser "^20.2.9"
+
+electron-rebuild@^3.2.6:
+  version "3.2.9"
+  resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-3.2.9.tgz#ea372be15f591f8d6d978ee9bca6526dadbcf20f"
+  integrity sha512-FkEZNFViUem3P0RLYbZkUjC8LUFIK+wKq09GHoOITSJjfDAVQv964hwaNseTTWt58sITQX3/5fHNYcTefqaCWw==
+  dependencies:
+    "@malept/cross-spawn-promise" "^2.0.0"
+    chalk "^4.0.0"
+    debug "^4.1.1"
+    detect-libc "^2.0.1"
+    fs-extra "^10.0.0"
+    got "^11.7.0"
+    lzma-native "^8.0.5"
+    node-abi "^3.0.0"
+    node-api-version "^0.1.4"
+    node-gyp "^9.0.0"
+    ora "^5.1.0"
+    semver "^7.3.5"
+    tar "^6.0.5"
+    yargs "^17.0.1"
+
+electron-squirrel-startup@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz#19b4e55933fa0ef8f556784b9c660f772546a0b8"
+  integrity sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q==
+  dependencies:
+    debug "^2.2.0"
+
+electron-to-chromium@^1.4.284:
+  version "1.4.407"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz#087e2ab97b3eb092aa6217c05986086b7dd370cc"
+  integrity sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg==
+
+electron@23.0.0:
+  version "23.0.0"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-23.0.0.tgz#4da457d7585149bb1a98ea8bddb286e72322a309"
+  integrity sha512-S6hVtTAjauMiiWP9sBVR5RpcUC464cNZ06I2EMUjeZBq+KooS6tLmNsfw0zLpAXDp1qosjlBP3v71NTZ3gd9iA==
+  dependencies:
+    "@electron/get" "^2.0.0"
+    "@types/node" "^16.11.26"
+    extract-zip "^2.0.1"
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+encodeurl@^1.0.2, encodeurl@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+  integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+
+encoding@^0.1.13:
+  version "0.1.13"
+  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+  dependencies:
+    iconv-lite "^0.6.2"
+
+end-of-stream@^1.1.0:
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+enhanced-resolve@^5.14.1:
+  version "5.14.1"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3"
+  integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+env-paths@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+  integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+err-code@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+  integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
+error-ex@^1.2.0:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+es-module-lexer@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527"
+  integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==
+
+es6-error@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+  integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-html@~1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+  integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-scope@5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^4.1.1"
+
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+etag@~1.8.1:
+  version "1.8.1"
+  resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+  integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+
+eventemitter3@^4.0.0:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@^3.2.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+execa@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+  dependencies:
+    cross-spawn "^6.0.0"
+    get-stream "^4.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+execa@^5.0.0:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+  dependencies:
+    cross-spawn "^7.0.3"
+    get-stream "^6.0.0"
+    human-signals "^2.1.0"
+    is-stream "^2.0.0"
+    merge-stream "^2.0.0"
+    npm-run-path "^4.0.1"
+    onetime "^5.1.2"
+    signal-exit "^3.0.3"
+    strip-final-newline "^2.0.0"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+  integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==
+  dependencies:
+    homedir-polyfill "^1.0.1"
+
+express-ws@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/express-ws/-/express-ws-5.0.2.tgz#5b02d41b937d05199c6c266d7cc931c823bda8eb"
+  integrity sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==
+  dependencies:
+    ws "^7.4.6"
+
+express@^4.17.1, express@^4.17.3:
+  version "4.18.2"
+  resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
+  integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
+  dependencies:
+    accepts "~1.3.8"
+    array-flatten "1.1.1"
+    body-parser "1.20.1"
+    content-disposition "0.5.4"
+    content-type "~1.0.4"
+    cookie "0.5.0"
+    cookie-signature "1.0.6"
+    debug "2.6.9"
+    depd "2.0.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    finalhandler "1.2.0"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    merge-descriptors "1.0.1"
+    methods "~1.1.2"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    path-to-regexp "0.1.7"
+    proxy-addr "~2.0.7"
+    qs "6.11.0"
+    range-parser "~1.2.1"
+    safe-buffer "5.2.1"
+    send "0.18.0"
+    serve-static "1.15.0"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    type-is "~1.6.18"
+    utils-merge "1.0.1"
+    vary "~1.1.2"
+
+extend@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^3.0.3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+  integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+  dependencies:
+    chardet "^0.7.0"
+    iconv-lite "^0.4.24"
+    tmp "^0.0.33"
+
+extract-zip@^2.0.0, extract-zip@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+  integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
+  dependencies:
+    debug "^4.1.1"
+    get-stream "^5.1.0"
+    yauzl "^2.10.0"
+  optionalDependencies:
+    "@types/yauzl" "^2.9.1"
+
+extsprintf@1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+  integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
+
+extsprintf@^1.2.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+  integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.7:
+  version "3.2.12"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
+  dependencies:
+    "@nodelib/fs.stat" "^2.0.2"
+    "@nodelib/fs.walk" "^1.2.3"
+    glob-parent "^5.1.2"
+    merge2 "^1.3.0"
+    micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fastq@^1.6.0:
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
+  integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+  dependencies:
+    reusify "^1.0.4"
+
+faye-websocket@^0.11.3:
+  version "0.11.4"
+  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
+  integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
+  dependencies:
+    websocket-driver ">=0.5.1"
+
+fd-slicer@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+  integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+  dependencies:
+    pend "~1.2.0"
+
+figures@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+  integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+  dependencies:
+    escape-string-regexp "^1.0.5"
+
+filename-reserved-regex@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
+  integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==
+
+filenamify@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106"
+  integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==
+  dependencies:
+    filename-reserved-regex "^2.0.0"
+    strip-outer "^1.0.1"
+    trim-repeated "^1.0.0"
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+finalhandler@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+  integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
+  dependencies:
+    debug "2.6.9"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    statuses "2.0.1"
+    unpipe "~1.0.0"
+
+find-up@5.0.0, find-up@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+  dependencies:
+    locate-path "^6.0.0"
+    path-exists "^4.0.0"
+
+find-up@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+  integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==
+  dependencies:
+    locate-path "^2.0.0"
+
+find-up@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+  dependencies:
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
+
+flora-colossus@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.1.tgz#aba198425a8185341e64f9d2a6a96fd9a3cbdb93"
+  integrity sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==
+  dependencies:
+    debug "^4.1.1"
+    fs-extra "^7.0.0"
+
+follow-redirects@^1.0.0:
+  version "1.15.2"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
+  integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+
+forever-agent@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+  integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
+
+form-data@~2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.6"
+    mime-types "^2.1.12"
+
+forwarded@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+  integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fresh@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+  integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+
+fs-extra@^10.0.0, fs-extra@^10.1.0:
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+  integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fs-extra@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
+  integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+  dependencies:
+    graceful-fs "^4.1.2"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
+fs-extra@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+  integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+  dependencies:
+    graceful-fs "^4.1.2"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
+fs-extra@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
+fs-extra@^9.0.1:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+  integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+  dependencies:
+    at-least-node "^1.0.0"
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fs-minipass@^2.0.0, fs-minipass@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+  dependencies:
+    minipass "^3.0.0"
+
+fs-monkey@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
+  integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+galactus@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9"
+  integrity sha512-mDc8EQJKtxjp9PMYS3PbpjjbX3oXhBTxoGaPahw620XZBIHJ4+nvw5KN/tRtmmSDR9dypstGNvqQ3C29QGoGHQ==
+  dependencies:
+    debug "^3.1.0"
+    flora-colossus "^1.0.0"
+    fs-extra "^4.0.0"
+
+gauge@^4.0.3:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
+  integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
+  dependencies:
+    aproba "^1.0.3 || ^2.0.0"
+    color-support "^1.1.3"
+    console-control-strings "^1.1.0"
+    has-unicode "^2.0.1"
+    signal-exit "^3.0.7"
+    string-width "^4.2.3"
+    strip-ansi "^6.0.1"
+    wide-align "^1.1.5"
+
+get-caller-file@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-installed-path@^2.0.3:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/get-installed-path/-/get-installed-path-2.1.1.tgz#a1f33dc6b8af542c9331084e8edbe37fe2634152"
+  integrity sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA==
+  dependencies:
+    global-modules "1.0.0"
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+  integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
+  dependencies:
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-proto "^1.0.1"
+    has-symbols "^1.0.3"
+
+get-package-info@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/get-package-info/-/get-package-info-1.0.0.tgz#6432796563e28113cd9474dbbd00052985a4999c"
+  integrity sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==
+  dependencies:
+    bluebird "^3.1.1"
+    debug "^2.2.0"
+    lodash.get "^4.0.0"
+    read-pkg-up "^2.0.0"
+
+get-stream@^4.0.0, get-stream@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+  dependencies:
+    pump "^3.0.0"
+
+get-stream@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+  dependencies:
+    pump "^3.0.0"
+
+get-stream@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+getpass@^0.1.1:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+  integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==
+  dependencies:
+    assert-plus "^1.0.0"
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob-to-regexp@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@9.3.2:
+  version "9.3.2"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda"
+  integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    minimatch "^7.4.1"
+    minipass "^4.2.4"
+    path-scurry "^1.6.1"
+
+glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+  version "7.2.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.1.1"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+glob@^8.0.1:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
+  integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^5.0.1"
+    once "^1.3.0"
+
+global-agent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
+  integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
+  dependencies:
+    boolean "^3.0.1"
+    es6-error "^4.1.1"
+    matcher "^3.0.0"
+    roarr "^2.15.3"
+    semver "^7.3.2"
+    serialize-error "^7.0.1"
+
+global-modules@1.0.0, global-modules@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+  integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+  dependencies:
+    global-prefix "^1.0.1"
+    is-windows "^1.0.1"
+    resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+  integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==
+  dependencies:
+    expand-tilde "^2.0.2"
+    homedir-polyfill "^1.0.1"
+    ini "^1.3.4"
+    is-windows "^1.0.1"
+    which "^1.2.14"
+
+global-tunnel-ng@^2.7.1:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f"
+  integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==
+  dependencies:
+    encodeurl "^1.0.2"
+    lodash "^4.17.10"
+    npm-conf "^1.1.3"
+    tunnel "^0.0.6"
+
+global@^4.3.2:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
+  integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
+  dependencies:
+    min-document "^2.19.0"
+    process "^0.11.10"
+
+globalthis@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+  dependencies:
+    define-properties "^1.1.3"
+
+got@^11.7.0, got@^11.8.5:
+  version "11.8.6"
+  resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
+  integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
+  dependencies:
+    "@sindresorhus/is" "^4.0.0"
+    "@szmarczak/http-timer" "^4.0.5"
+    "@types/cacheable-request" "^6.0.1"
+    "@types/responselike" "^1.0.0"
+    cacheable-lookup "^5.0.3"
+    cacheable-request "^7.0.2"
+    decompress-response "^6.0.0"
+    http2-wrapper "^1.0.0-beta.5.2"
+    lowercase-keys "^2.0.0"
+    p-cancelable "^2.0.0"
+    responselike "^2.0.0"
+
+got@^9.6.0:
+  version "9.6.0"
+  resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
+  integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+  dependencies:
+    "@sindresorhus/is" "^0.14.0"
+    "@szmarczak/http-timer" "^1.1.2"
+    cacheable-request "^6.0.0"
+    decompress-response "^3.3.0"
+    duplexer3 "^0.1.4"
+    get-stream "^4.1.0"
+    lowercase-keys "^1.0.1"
+    mimic-response "^1.0.1"
+    p-cancelable "^1.0.0"
+    to-readable-stream "^1.0.0"
+    url-parse-lax "^3.0.0"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+handle-thing@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
+  integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+
+har-schema@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+  integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==
+
+har-validator@~5.1.3:
+  version "5.1.5"
+  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+  integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+  dependencies:
+    ajv "^6.12.3"
+    har-schema "^2.0.0"
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-unicode@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+he@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+homedir-polyfill@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+  integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+  dependencies:
+    parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+  version "2.8.9"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+  integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+
+hpack.js@^2.1.6:
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+  integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==
+  dependencies:
+    inherits "^2.0.1"
+    obuf "^1.0.0"
+    readable-stream "^2.0.1"
+    wbuf "^1.1.0"
+
+html-entities@^2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46"
+  integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==
+
+html-minifier-terser@^6.0.2:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+  integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+  dependencies:
+    camel-case "^4.1.2"
+    clean-css "^5.2.2"
+    commander "^8.3.0"
+    he "^1.2.0"
+    param-case "^3.0.4"
+    relateurl "^0.2.7"
+    terser "^5.10.0"
+
+html-webpack-plugin@^5.3.1:
+  version "5.5.1"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763"
+  integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==
+  dependencies:
+    "@types/html-minifier-terser" "^6.0.0"
+    html-minifier-terser "^6.0.2"
+    lodash "^4.17.21"
+    pretty-error "^4.0.0"
+    tapable "^2.0.0"
+
+htmlparser2@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+  integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.0.0"
+    domutils "^2.5.2"
+    entities "^2.0.0"
+
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+  integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
+http-deceiver@^1.2.7:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+  integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==
+
+http-errors@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+  integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+  dependencies:
+    depd "2.0.0"
+    inherits "2.0.4"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    toidentifier "1.0.1"
+
+http-errors@~1.6.2:
+  version "1.6.3"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+  integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
+  dependencies:
+    depd "~1.1.2"
+    inherits "2.0.3"
+    setprototypeof "1.1.0"
+    statuses ">= 1.4.0 < 2"
+
+http-parser-js@>=0.5.1:
+  version "0.5.8"
+  resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3"
+  integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==
+
+http-proxy-agent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+  integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+  dependencies:
+    "@tootallnate/once" "2"
+    agent-base "6"
+    debug "4"
+
+http-proxy-middleware@^2.0.3:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f"
+  integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
+  dependencies:
+    "@types/http-proxy" "^1.17.8"
+    http-proxy "^1.18.1"
+    is-glob "^4.0.1"
+    is-plain-obj "^3.0.0"
+    micromatch "^4.0.2"
+
+http-proxy@^1.18.1:
+  version "1.18.1"
+  resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+  integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+  dependencies:
+    eventemitter3 "^4.0.0"
+    follow-redirects "^1.0.0"
+    requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+  integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==
+  dependencies:
+    assert-plus "^1.0.0"
+    jsprim "^1.2.2"
+    sshpk "^1.7.0"
+
+http2-wrapper@^1.0.0-beta.5.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+  integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+  dependencies:
+    quick-lru "^5.1.1"
+    resolve-alpn "^1.0.0"
+
+https-proxy-agent@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+human-signals@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+humanize-ms@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+  dependencies:
+    ms "^2.0.0"
+
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@^0.6.2:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+ieee754@^1.1.13:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+infer-owner@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+  integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
+
+ini@^1.3.4:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+inquirer@^8.0.0:
+  version "8.2.5"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8"
+  integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==
+  dependencies:
+    ansi-escapes "^4.2.1"
+    chalk "^4.1.1"
+    cli-cursor "^3.1.0"
+    cli-width "^3.0.0"
+    external-editor "^3.0.3"
+    figures "^3.0.0"
+    lodash "^4.17.21"
+    mute-stream "0.0.8"
+    ora "^5.4.1"
+    run-async "^2.4.0"
+    rxjs "^7.5.5"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+    through "^2.3.6"
+    wrap-ansi "^7.0.0"
+
+ip@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
+  integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
+
+ipaddr.js@1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+ipaddr.js@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
+  integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-core-module@^2.11.0:
+  version "2.12.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+  dependencies:
+    has "^1.0.3"
+
+is-docker@^2.0.0, is-docker@^2.1.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+  integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==
+  dependencies:
+    number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-interactive@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+  integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
+is-lambda@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
+  integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-obj@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
+  integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
+
+is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+is-stream@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
+
+is-stream@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-typedarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+is-unicode-supported@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-windows@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+  dependencies:
+    is-docker "^2.0.0"
+
+isarray@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
+
+isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isbinaryfile@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80"
+  integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==
+  dependencies:
+    buffer-alloc "^1.2.0"
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+isstream@~0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+  integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
+
+jest-worker@^27.4.5:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+  integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+jsbn@~0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+  integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+
+json-buffer@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
+  integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==
+
+json-buffer@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+  integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-parse-even-better-errors@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-schema@0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+  integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
+
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+json5@^2.1.2:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonfile@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+  integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+  dependencies:
+    universalify "^2.0.0"
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsprim@^1.2.2:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
+  integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
+  dependencies:
+    assert-plus "1.0.0"
+    extsprintf "1.3.0"
+    json-schema "0.4.0"
+    verror "1.10.0"
+
+junk@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1"
+  integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==
+
+keyv@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
+  integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
+  dependencies:
+    json-buffer "3.0.0"
+
+keyv@^4.0.0:
+  version "4.5.2"
+  resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56"
+  integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==
+  dependencies:
+    json-buffer "3.0.1"
+
+kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+launch-editor@^2.6.0:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7"
+  integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==
+  dependencies:
+    picocolors "^1.0.0"
+    shell-quote "^1.7.3"
+
+load-json-file@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+  integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^2.2.0"
+    pify "^2.0.0"
+    strip-bom "^3.0.0"
+
+loader-runner@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+loader-utils@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
+  integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
+locate-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+  integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==
+  dependencies:
+    p-locate "^2.0.0"
+    path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+  dependencies:
+    p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+  dependencies:
+    p-locate "^5.0.0"
+
+lodash.get@^4.0.0:
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+  integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==
+
+lodash@^4.17.10, lodash@^4.17.20, lodash@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^4.0.0, log-symbols@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+  integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+  dependencies:
+    chalk "^4.1.0"
+    is-unicode-supported "^0.1.0"
+
+lower-case@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+  dependencies:
+    tslib "^2.0.3"
+
+lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+  integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lowercase-keys@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+  integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+  dependencies:
+    yallist "^4.0.0"
+
+lru-cache@^7.7.1:
+  version "7.18.3"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+  integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
+lru-cache@^9.1.1:
+  version "9.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1"
+  integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==
+
+lru_map@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
+  integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
+
+lzma-native@^8.0.5:
+  version "8.0.6"
+  resolved "https://registry.yarnpkg.com/lzma-native/-/lzma-native-8.0.6.tgz#3ea456209d643bafd9b5d911781bdf0b396b2665"
+  integrity sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA==
+  dependencies:
+    node-addon-api "^3.1.0"
+    node-gyp-build "^4.2.1"
+    readable-stream "^3.6.0"
+
+magic-string@0.27.0:
+  version "0.27.0"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3"
+  integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.4.13"
+
+make-fetch-happen@^10.0.3:
+  version "10.2.1"
+  resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164"
+  integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==
+  dependencies:
+    agentkeepalive "^4.2.1"
+    cacache "^16.1.0"
+    http-cache-semantics "^4.1.0"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.0"
+    is-lambda "^1.0.1"
+    lru-cache "^7.7.1"
+    minipass "^3.1.6"
+    minipass-collect "^1.0.2"
+    minipass-fetch "^2.0.3"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    negotiator "^0.6.3"
+    promise-retry "^2.0.1"
+    socks-proxy-agent "^7.0.0"
+    ssri "^9.0.0"
+
+map-age-cleaner@^0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+  integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+  dependencies:
+    p-defer "^1.0.0"
+
+matcher@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
+  integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
+  dependencies:
+    escape-string-regexp "^4.0.0"
+
+media-typer@0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+  integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
+
+mem@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+  integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+  dependencies:
+    map-age-cleaner "^0.1.1"
+    mimic-fn "^2.0.0"
+    p-is-promise "^2.0.0"
+
+memfs@^3.4.3:
+  version "3.5.1"
+  resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.1.tgz#f0cd1e2bfaef58f6fe09bfb9c2288f07fea099ec"
+  integrity sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA==
+  dependencies:
+    fs-monkey "^1.0.3"
+
+merge-descriptors@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+  integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+methods@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+  integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+
+micromatch@^4.0.2, micromatch@^4.0.4:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+  dependencies:
+    braces "^3.0.2"
+    picomatch "^2.3.1"
+
+mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mime@1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^1.0.0, mimic-response@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+  integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+  integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+min-document@^2.19.0:
+  version "2.19.0"
+  resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+  integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==
+  dependencies:
+    dom-walk "^0.1.0"
+
+minimalistic-assert@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimatch@^3.0.4, minimatch@^3.1.1:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimatch@^5.0.1:
+  version "5.1.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+  integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimatch@^7.4.1:
+  version "7.4.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb"
+  integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimist@^1.1.0, minimist@^1.2.0:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-fetch@^2.0.3:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add"
+  integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==
+  dependencies:
+    minipass "^3.1.6"
+    minipass-sized "^1.0.3"
+    minizlib "^2.1.2"
+  optionalDependencies:
+    encoding "^0.1.13"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+  integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6:
+  version "3.3.6"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+  integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+  dependencies:
+    yallist "^4.0.0"
+
+minipass@^4.2.4:
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a"
+  integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==
+
+minipass@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+  integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
+"minipass@^5.0.0 || ^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81"
+  integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==
+
+minizlib@^2.1.1, minizlib@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
+mkdirp@^1.0.3, mkdirp@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3, ms@^2.0.0, ms@^2.1.1:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multicast-dns@^7.2.5:
+  version "7.2.5"
+  resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
+  integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==
+  dependencies:
+    dns-packet "^5.2.2"
+    thunky "^1.0.2"
+
+mute-stream@0.0.8:
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+  integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+negotiator@0.6.3, negotiator@^0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+neo-async@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+no-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+  dependencies:
+    lower-case "^2.0.2"
+    tslib "^2.0.3"
+
+node-abi@^3.0.0:
+  version "3.40.0"
+  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.40.0.tgz#51d8ed44534f70ff1357dfbc3a89717b1ceac1b4"
+  integrity sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==
+  dependencies:
+    semver "^7.3.5"
+
+node-addon-api@^3.1.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161"
+  integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
+
+node-api-version@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080"
+  integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==
+  dependencies:
+    semver "^7.3.5"
+
+node-fetch@^2.6.0, node-fetch@^2.6.7:
+  version "2.6.11"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
+  integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-forge@^1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+  integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
+
+node-gyp-build@^4.2.1:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055"
+  integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==
+
+node-gyp@^9.0.0:
+  version "9.3.1"
+  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4"
+  integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==
+  dependencies:
+    env-paths "^2.2.0"
+    glob "^7.1.4"
+    graceful-fs "^4.2.6"
+    make-fetch-happen "^10.0.3"
+    nopt "^6.0.0"
+    npmlog "^6.0.0"
+    rimraf "^3.0.2"
+    semver "^7.3.5"
+    tar "^6.1.2"
+    which "^2.0.2"
+
+node-loader@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-2.0.0.tgz#9109a6d828703fd3e0aa03c1baec12a798071562"
+  integrity sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q==
+  dependencies:
+    loader-utils "^2.0.0"
+
+node-releases@^2.0.8:
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
+  integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
+
+nopt@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
+  integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
+  dependencies:
+    abbrev "^1.0.0"
+
+normalize-package-data@^2.3.2:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+  dependencies:
+    hosted-git-info "^2.1.4"
+    resolve "^1.10.0"
+    semver "2 || 3 || 4 || 5"
+    validate-npm-package-license "^3.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-url@^4.1.0:
+  version "4.5.1"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
+  integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
+
+normalize-url@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+  integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+npm-conf@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
+  integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
+  dependencies:
+    config-chain "^1.1.11"
+    pify "^3.0.0"
+
+npm-run-path@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+  integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
+  dependencies:
+    path-key "^2.0.0"
+
+npm-run-path@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+  dependencies:
+    path-key "^3.0.0"
+
+npmlog@^6.0.0:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
+  integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
+  dependencies:
+    are-we-there-yet "^3.0.0"
+    console-control-strings "^1.1.0"
+    gauge "^4.0.3"
+    set-blocking "^2.0.0"
+
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
+nugget@^2.0.1:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.2.0.tgz#ad6feeeda912dfe839e35efe713bc1ce67f1f5b6"
+  integrity sha512-I4Yt4dRPes82Tx/s7qDn8z1cA2pmZy2bOJiTdcb/BZJ1LJkEYd9GqunQD37unPUPjdmW6dkkVZmxN+8Gxt6Xlg==
+  dependencies:
+    debug "^2.1.3"
+    minimist "^1.1.0"
+    pretty-bytes "^4.0.2"
+    progress-stream "^1.1.0"
+    request "^2.45.0"
+    single-line-log "^1.1.2"
+    throttleit "0.0.2"
+
+number-is-nan@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+  integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==
+
+oauth-sign@~0.9.0:
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-inspect@^1.9.0:
+  version "1.12.3"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
+  integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
+
+object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-keys@~0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+  integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==
+
+obuf@^1.0.0, obuf@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+  integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+on-finished@2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+  integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
+  dependencies:
+    ee-first "1.1.1"
+
+on-headers@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+  integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+  dependencies:
+    wrappy "1"
+
+onetime@^5.1.0, onetime@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+  dependencies:
+    mimic-fn "^2.1.0"
+
+open@^8.0.9, open@^8.1.0:
+  version "8.4.2"
+  resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
+  integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
+  dependencies:
+    define-lazy-prop "^2.0.0"
+    is-docker "^2.1.1"
+    is-wsl "^2.2.0"
+
+ora@^5.0.0, ora@^5.1.0, ora@^5.4.1:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+  integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+  dependencies:
+    bl "^4.1.0"
+    chalk "^4.1.0"
+    cli-cursor "^3.1.0"
+    cli-spinners "^2.5.0"
+    is-interactive "^1.0.0"
+    is-unicode-supported "^0.1.0"
+    log-symbols "^4.1.0"
+    strip-ansi "^6.0.0"
+    wcwidth "^1.0.1"
+
+os-tmpdir@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+  integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+
+p-cancelable@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
+  integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+
+p-cancelable@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+  integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
+
+p-defer@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+  integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-is-promise@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+  integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^1.1.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+  dependencies:
+    p-try "^1.0.0"
+
+p-limit@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+  dependencies:
+    yocto-queue "^0.1.0"
+
+p-locate@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+  integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==
+  dependencies:
+    p-limit "^1.1.0"
+
+p-locate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+  dependencies:
+    p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+  dependencies:
+    p-limit "^3.0.2"
+
+p-map@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+  dependencies:
+    aggregate-error "^3.0.0"
+
+p-retry@^4.5.0:
+  version "4.6.2"
+  resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
+  integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
+  dependencies:
+    "@types/retry" "0.12.0"
+    retry "^0.13.1"
+
+p-try@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+  integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+param-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+  dependencies:
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
+
+parse-author@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f"
+  integrity sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==
+  dependencies:
+    author-regex "^1.0.0"
+
+parse-json@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+  integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==
+  dependencies:
+    error-ex "^1.2.0"
+
+parse-ms@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d"
+  integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==
+
+parse-passwd@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+  integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascal-case@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
+
+path-exists@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^2.0.0, path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
+
+path-key@^3.0.0, path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.6.1:
+  version "1.9.2"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
+  integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
+  dependencies:
+    lru-cache "^9.1.1"
+    minipass "^5.0.0 || ^6.0.2"
+
+path-to-regexp@0.1.7:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+  integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+
+path-type@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+  integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==
+  dependencies:
+    pify "^2.0.0"
+
+pend@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
+performance-now@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+  integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
+
+pkg-dir@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
+plist@^3.0.0, plist@^3.0.1, plist@^3.0.4:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.6.tgz#7cfb68a856a7834bca6dbfe3218eb9c7740145d3"
+  integrity sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==
+  dependencies:
+    base64-js "^1.5.1"
+    xmlbuilder "^15.1.1"
+
+prepend-http@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
+  integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==
+
+pretty-bytes@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+  integrity sha512-yJAF+AjbHKlxQ8eezMd/34Mnj/YTQ3i6kLzvVsH4l/BfIFtp444n0wVbnsn66JimZ9uBofv815aRp1zCppxlWw==
+
+pretty-error@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
+  integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==
+  dependencies:
+    lodash "^4.17.20"
+    renderkid "^3.0.0"
+
+pretty-ms@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8"
+  integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==
+  dependencies:
+    parse-ms "^2.1.0"
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+  version "0.11.10"
+  resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+  integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+
+progress-stream@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77"
+  integrity sha512-MIBPjZz6oGNSw5rn2mSp+nP9FGoaVo6QsPyPVEaD4puilz5hZNa3kfnrlqRNYFsugslbU3An4mnkLLtZOaWvrA==
+  dependencies:
+    speedometer "~0.1.2"
+    through2 "~0.2.3"
+
+progress@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+  integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
+
+promise-retry@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+  integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+  dependencies:
+    err-code "^2.0.2"
+    retry "^0.12.0"
+
+proto-list@~1.2.1:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+  integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
+
+proxy-addr@~2.0.7:
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+  integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+  dependencies:
+    forwarded "0.2.0"
+    ipaddr.js "1.9.1"
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+psl@^1.1.28:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+  integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+punycode@^2.1.0, punycode@^2.1.1:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
+qs@6.11.0:
+  version "6.11.0"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
+  integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
+  dependencies:
+    side-channel "^1.0.4"
+
+qs@~6.5.2:
+  version "6.5.3"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
+  integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
+
+queue-microtask@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+randombytes@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.5.1:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
+  integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+  dependencies:
+    bytes "3.1.2"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    unpipe "1.0.0"
+
+rcedit@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-3.0.1.tgz#ae21b43e49c075f4d84df1929832a12c302f3c90"
+  integrity sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw==
+  dependencies:
+    cross-spawn-windows-exe "^1.1.0"
+
+read-pkg-up@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+  integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==
+  dependencies:
+    find-up "^2.0.0"
+    read-pkg "^2.0.0"
+
+read-pkg@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+  integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==
+  dependencies:
+    load-json-file "^2.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^2.0.0"
+
+readable-stream@^2.0.1:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+  integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+readable-stream@~1.1.9:
+  version "1.1.14"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+  integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.1"
+    isarray "0.0.1"
+    string_decoder "~0.10.x"
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+relateurl@^0.2.7:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+renderkid@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
+  integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==
+  dependencies:
+    css-select "^4.1.3"
+    dom-converter "^0.2.0"
+    htmlparser2 "^6.1.0"
+    lodash "^4.17.21"
+    strip-ansi "^6.0.1"
+
+request@^2.45.0:
+  version "2.88.2"
+  resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+  integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+  dependencies:
+    aws-sign2 "~0.7.0"
+    aws4 "^1.8.0"
+    caseless "~0.12.0"
+    combined-stream "~1.0.6"
+    extend "~3.0.2"
+    forever-agent "~0.6.1"
+    form-data "~2.3.2"
+    har-validator "~5.1.3"
+    http-signature "~1.2.0"
+    is-typedarray "~1.0.0"
+    isstream "~0.1.2"
+    json-stringify-safe "~5.0.1"
+    mime-types "~2.1.19"
+    oauth-sign "~0.9.0"
+    performance-now "^2.1.0"
+    qs "~6.5.2"
+    safe-buffer "^5.1.2"
+    tough-cookie "~2.5.0"
+    tunnel-agent "^0.6.0"
+    uuid "^3.3.2"
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-from-string@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+requires-port@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+resolve-alpn@^1.0.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+  integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
+resolve-dir@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+  integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==
+  dependencies:
+    expand-tilde "^2.0.0"
+    global-modules "^1.0.0"
+
+resolve-package@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/resolve-package/-/resolve-package-1.0.1.tgz#686f70b188bd7d675f5bbc4282ccda060abb9d27"
+  integrity sha512-rzB7NnQpOkPHBWFPP3prUMqOP6yg3HkRGgcvR+lDyvyHoY3fZLFLYDkPXh78SPVBAE6VTCk/V+j8we4djg6o4g==
+  dependencies:
+    get-installed-path "^2.0.3"
+
+resolve@^1.1.6, resolve@^1.10.0:
+  version "1.22.2"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
+  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
+  dependencies:
+    is-core-module "^2.11.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+responselike@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
+  integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==
+  dependencies:
+    lowercase-keys "^1.0.0"
+
+responselike@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
+  integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
+  dependencies:
+    lowercase-keys "^2.0.0"
+
+restore-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+  dependencies:
+    onetime "^5.1.0"
+    signal-exit "^3.0.2"
+
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
+retry@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
+  integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
+
+reusify@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+  dependencies:
+    glob "^7.1.3"
+
+roarr@^2.15.3:
+  version "2.15.4"
+  resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
+  integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
+  dependencies:
+    boolean "^3.0.1"
+    detect-node "^2.0.4"
+    globalthis "^1.0.1"
+    json-stringify-safe "^5.0.1"
+    semver-compare "^1.0.0"
+    sprintf-js "^1.1.2"
+
+run-async@^2.4.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+  integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
+run-parallel@^1.1.9:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+  dependencies:
+    queue-microtask "^1.2.2"
+
+rxjs@^7.5.5:
+  version "7.8.1"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
+  integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
+  dependencies:
+    tslib "^2.1.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+schema-utils@^3.1.1, schema-utils@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99"
+  integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
+schema-utils@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.1.tgz#eb2d042df8b01f4b5c276a2dfd41ba0faab72e8d"
+  integrity sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    ajv "^8.9.0"
+    ajv-formats "^2.1.1"
+    ajv-keywords "^5.1.0"
+
+select-hose@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+  integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==
+
+selfsigned@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61"
+  integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==
+  dependencies:
+    node-forge "^1"
+
+semver-compare@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+  integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
+
+"semver@2 || 3 || 4 || 5", semver@^5.5.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.2.0:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
+  version "7.5.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
+  integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
+  dependencies:
+    lru-cache "^6.0.0"
+
+send@0.18.0:
+  version "0.18.0"
+  resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+  integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+  dependencies:
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    mime "1.6.0"
+    ms "2.1.3"
+    on-finished "2.4.1"
+    range-parser "~1.2.1"
+    statuses "2.0.1"
+
+serialize-error@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
+  integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
+  dependencies:
+    type-fest "^0.13.1"
+
+serialize-javascript@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
+  integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
+  dependencies:
+    randombytes "^2.1.0"
+
+serve-index@^1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+  integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==
+  dependencies:
+    accepts "~1.3.4"
+    batch "0.6.1"
+    debug "2.6.9"
+    escape-html "~1.0.3"
+    http-errors "~1.6.2"
+    mime-types "~2.1.17"
+    parseurl "~1.3.2"
+
+serve-static@1.15.0:
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+  integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+  dependencies:
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    parseurl "~1.3.3"
+    send "0.18.0"
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
+setprototypeof@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+shallow-clone@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+  dependencies:
+    kind-of "^6.0.2"
+
+shebang-command@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
+  dependencies:
+    shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@^1.7.3:
+  version "1.8.1"
+  resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
+  integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
+
+side-channel@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+  dependencies:
+    call-bind "^1.0.0"
+    get-intrinsic "^1.0.2"
+    object-inspect "^1.9.0"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+single-line-log@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
+  integrity sha512-awzaaIPtYFdexLr6TBpcZSGPB6D1RInNO/qNetgaJloPDF/D0GkVtLvGEp8InfmLV7CyLyQ5fIRP+tVN/JmWQA==
+  dependencies:
+    string-width "^1.0.1"
+
+smart-buffer@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+  integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+sockjs@^0.3.24:
+  version "0.3.24"
+  resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
+  integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
+  dependencies:
+    faye-websocket "^0.11.3"
+    uuid "^8.3.2"
+    websocket-driver "^0.7.4"
+
+socks-proxy-agent@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6"
+  integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==
+  dependencies:
+    agent-base "^6.0.2"
+    debug "^4.3.3"
+    socks "^2.6.2"
+
+socks@^2.6.2:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
+  integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
+  dependencies:
+    ip "^2.0.0"
+    smart-buffer "^4.2.0"
+
+source-map-support@^0.5.13, source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.0:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdx-correct@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
+  integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
+  dependencies:
+    spdx-expression-parse "^3.0.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+  version "3.0.13"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5"
+  integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==
+
+spdy-transport@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+  integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+  dependencies:
+    debug "^4.1.0"
+    detect-node "^2.0.4"
+    hpack.js "^2.1.6"
+    obuf "^1.1.2"
+    readable-stream "^3.0.6"
+    wbuf "^1.7.3"
+
+spdy@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
+  integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
+  dependencies:
+    debug "^4.1.0"
+    handle-thing "^2.0.0"
+    http-deceiver "^1.2.7"
+    select-hose "^2.0.0"
+    spdy-transport "^3.0.0"
+
+speedometer@~0.1.2:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d"
+  integrity sha512-phdEoDlA6EUIVtzwq1UiNMXDUogczp204aYF/yfOhjNePWFfIpBJ1k5wLMuXQhEOOMjuTJEcc4vdZa+vuP+n/Q==
+
+sprintf-js@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
+  integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
+
+sshpk@^1.7.0:
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
+  integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
+  dependencies:
+    asn1 "~0.2.3"
+    assert-plus "^1.0.0"
+    bcrypt-pbkdf "^1.0.0"
+    dashdash "^1.12.0"
+    ecc-jsbn "~0.1.1"
+    getpass "^0.1.1"
+    jsbn "~0.1.0"
+    safer-buffer "^2.0.2"
+    tweetnacl "~0.14.0"
+
+ssri@^9.0.0:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057"
+  integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==
+  dependencies:
+    minipass "^3.1.1"
+
+statuses@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+  integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+"statuses@>= 1.4.0 < 2":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+  integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+
+string-width@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+  integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==
+  dependencies:
+    code-point-at "^1.0.0"
+    is-fullwidth-code-point "^1.0.0"
+    strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+string_decoder@~0.10.x:
+  version "0.10.31"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+  integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+  integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==
+  dependencies:
+    ansi-regex "^2.0.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-eof@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
+
+strip-final-newline@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-outer@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
+  integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
+  dependencies:
+    escape-string-regexp "^1.0.2"
+
+sudo-prompt@^9.1.1:
+  version "9.2.1"
+  resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd"
+  integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==
+
+sumchecker@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
+  integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
+  dependencies:
+    debug "^4.1.0"
+
+supports-color@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+tar@^6.0.5, tar@^6.1.11, tar@^6.1.2:
+  version "6.1.15"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69"
+  integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^5.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
+terser-webpack-plugin@^5.3.7:
+  version "5.3.9"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
+  integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jest-worker "^27.4.5"
+    schema-utils "^3.1.1"
+    serialize-javascript "^6.0.1"
+    terser "^5.16.8"
+
+terser@^5.10.0, terser@^5.16.8:
+  version "5.17.6"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de"
+  integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==
+  dependencies:
+    "@jridgewell/source-map" "^0.3.2"
+    acorn "^8.5.0"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
+
+throttleit@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf"
+  integrity sha512-HtlTFeyYs1elDM2txiIGsdXHaq8kffVaZH/QEBRbo95zQqzlsBx5ELKhkPOZVad9OK9oxzwx6UrQN8Vfh/+yag==
+
+through2@~0.2.3:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f"
+  integrity sha512-mLa8Bn2mZurjyomGKWRu3Bo2mvoQojFks9NvOK8H+k4kDJNkdEqG522KFZsEFBEl6rKkxTgFbE5+OPcgfvPEHA==
+  dependencies:
+    readable-stream "~1.1.9"
+    xtend "~2.1.1"
+
+through@^2.3.6:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
+thunky@^1.0.2:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+  integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+tmp@^0.0.33:
+  version "0.0.33"
+  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+  dependencies:
+    os-tmpdir "~1.0.2"
+
+to-readable-stream@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
+  integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+toidentifier@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+  integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+tough-cookie@~2.5.0:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+  integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+  dependencies:
+    psl "^1.1.28"
+    punycode "^2.1.1"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+trim-repeated@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
+  integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==
+  dependencies:
+    escape-string-regexp "^1.0.2"
+
+tslib@^1.9.3:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338"
+  integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==
+
+tunnel-agent@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+  dependencies:
+    safe-buffer "^5.0.1"
+
+tunnel@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
+  integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+  version "0.14.5"
+  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+  integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+
+type-fest@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+  integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+
+type-fest@^0.21.3:
+  version "0.21.3"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+  integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-is@~1.6.18:
+  version "1.6.18"
+  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+  dependencies:
+    media-typer "0.3.0"
+    mime-types "~2.1.24"
+
+unique-filename@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2"
+  integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==
+  dependencies:
+    unique-slug "^3.0.0"
+
+unique-slug@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9"
+  integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==
+  dependencies:
+    imurmurhash "^0.1.4"
+
+universalify@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
+unplugin@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f"
+  integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==
+  dependencies:
+    acorn "^8.8.1"
+    chokidar "^3.5.3"
+    webpack-sources "^3.2.3"
+    webpack-virtual-modules "^0.5.0"
+
+update-browserslist-db@^1.0.10:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
+  integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+url-parse-lax@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
+  integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==
+  dependencies:
+    prepend-http "^2.0.0"
+
+username@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/username/-/username-5.1.0.tgz#a7f9325adce2d0166448cdd55d4985b1360f2508"
+  integrity sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==
+  dependencies:
+    execa "^1.0.0"
+    mem "^4.3.0"
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
+
+utils-merge@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+  integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
+
+uuid@^3.3.2:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+uuid@^8.3.2:
+  version "8.3.2"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+  integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+uuid@^9.0.0:
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
+  integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
+
+validate-npm-package-license@^3.0.1:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+  dependencies:
+    spdx-correct "^3.0.0"
+    spdx-expression-parse "^3.0.0"
+
+vary@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+  integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+
+verror@1.10.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+  integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
+watchpack@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
+  integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
+  dependencies:
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.1.2"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+  version "1.7.3"
+  resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+  integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+  dependencies:
+    minimalistic-assert "^1.0.0"
+
+wcwidth@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+  integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
+  dependencies:
+    defaults "^1.0.3"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+webpack-dev-middleware@^5.3.1:
+  version "5.3.3"
+  resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f"
+  integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==
+  dependencies:
+    colorette "^2.0.10"
+    memfs "^3.4.3"
+    mime-types "^2.1.31"
+    range-parser "^1.2.1"
+    schema-utils "^4.0.0"
+
+webpack-dev-server@^4.0.0:
+  version "4.15.0"
+  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21"
+  integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==
+  dependencies:
+    "@types/bonjour" "^3.5.9"
+    "@types/connect-history-api-fallback" "^1.3.5"
+    "@types/express" "^4.17.13"
+    "@types/serve-index" "^1.9.1"
+    "@types/serve-static" "^1.13.10"
+    "@types/sockjs" "^0.3.33"
+    "@types/ws" "^8.5.1"
+    ansi-html-community "^0.0.8"
+    bonjour-service "^1.0.11"
+    chokidar "^3.5.3"
+    colorette "^2.0.10"
+    compression "^1.7.4"
+    connect-history-api-fallback "^2.0.0"
+    default-gateway "^6.0.3"
+    express "^4.17.3"
+    graceful-fs "^4.2.6"
+    html-entities "^2.3.2"
+    http-proxy-middleware "^2.0.3"
+    ipaddr.js "^2.0.1"
+    launch-editor "^2.6.0"
+    open "^8.0.9"
+    p-retry "^4.5.0"
+    rimraf "^3.0.2"
+    schema-utils "^4.0.0"
+    selfsigned "^2.1.1"
+    serve-index "^1.9.1"
+    sockjs "^0.3.24"
+    spdy "^4.0.2"
+    webpack-dev-middleware "^5.3.1"
+    ws "^8.13.0"
+
+webpack-merge@^5.7.3:
+  version "5.9.0"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826"
+  integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==
+  dependencies:
+    clone-deep "^4.0.1"
+    wildcard "^2.0.0"
+
+webpack-sources@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack-virtual-modules@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c"
+  integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==
+
+webpack@^5.37.0:
+  version "5.84.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.84.0.tgz#011115617668744aece87a9eb68534487d84de1a"
+  integrity sha512-XezNK3kwJq6IyeoZmZ1uEqQs+42nTqIi4jYM/YjLwaJedUC1N3bwnCC0+UcnHJPfqWX0kGrQnMIvZZyWYaIZrA==
+  dependencies:
+    "@types/eslint-scope" "^3.7.3"
+    "@types/estree" "^1.0.0"
+    "@webassemblyjs/ast" "^1.11.5"
+    "@webassemblyjs/wasm-edit" "^1.11.5"
+    "@webassemblyjs/wasm-parser" "^1.11.5"
+    acorn "^8.7.1"
+    acorn-import-assertions "^1.9.0"
+    browserslist "^4.14.5"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^5.14.1"
+    es-module-lexer "^1.2.1"
+    eslint-scope "5.1.1"
+    events "^3.2.0"
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.2.9"
+    json-parse-even-better-errors "^2.3.1"
+    loader-runner "^4.2.0"
+    mime-types "^2.1.27"
+    neo-async "^2.6.2"
+    schema-utils "^3.1.2"
+    tapable "^2.1.1"
+    terser-webpack-plugin "^5.3.7"
+    watchpack "^2.4.0"
+    webpack-sources "^3.2.3"
+
+websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
+  version "0.7.4"
+  resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
+  integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
+  dependencies:
+    http-parser-js ">=0.5.1"
+    safe-buffer ">=5.1.0"
+    websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
+  integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+which@^1.2.14, which@^1.2.9:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+which@^2.0.1, which@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wide-align@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
+  integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
+  dependencies:
+    string-width "^1.0.2 || 2 || 3 || 4"
+
+wildcard@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+  integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+
+wrap-ansi@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+ws@^7.4.6:
+  version "7.5.9"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
+  integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+
+ws@^8.13.0:
+  version "8.13.0"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
+  integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
+
+xmlbuilder@^15.1.1:
+  version "15.1.1"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
+  integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
+
+xtend@~2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+  integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==
+  dependencies:
+    object-keys "~0.4.0"
+
+xterm-addon-fit@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596"
+  integrity sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==
+
+xterm-addon-search@^0.8.0:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.2.tgz#be7aa74d5ff12c901707c6ff674229f214318032"
+  integrity sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg==
+
+xterm@^4.9.0:
+  version "4.19.0"
+  resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.19.0.tgz#c0f9d09cd61de1d658f43ca75f992197add9ef6d"
+  integrity sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ==
+
+y18n@^5.0.5:
+  version "5.0.8"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^20.2.9:
+  version "20.2.9"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+  integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs-parser@^21.1.1:
+  version "21.1.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+  integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@^17.0.1:
+  version "17.7.2"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+  integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+  dependencies:
+    cliui "^8.0.1"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.3"
+    y18n "^5.0.5"
+    yargs-parser "^21.1.1"
+
+yarn-or-npm@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/yarn-or-npm/-/yarn-or-npm-3.0.1.tgz#6336eea4dff7e23e226acc98c1a8ada17a1b8666"
+  integrity sha512-fTiQP6WbDAh5QZAVdbMQkecZoahnbOjClTQhzv74WX5h2Uaidj1isf9FDes11TKtsZ0/ZVfZsqZ+O3x6aLERHQ==
+  dependencies:
+    cross-spawn "^6.0.5"
+    pkg-dir "^4.2.0"
+
+yauzl@^2.10.0:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+  integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+  dependencies:
+    buffer-crc32 "~0.2.3"
+    fd-slicer "~1.1.0"
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/examples/electron-vite/event.json b/examples/electron-vite/event.json
index 3c7b1401..f500f344 100644
--- a/examples/electron-vite/event.json
+++ b/examples/electron-vite/event.json
@@ -58,6 +58,14 @@
     "user": {
       "ip_address": "{{auto}}"
     },
+    "debug_meta": {
+      "images": [
+        {
+          "code_file": "app:///dist/renderer/index.js",
+          "type": "sourcemap"
+        }
+      ]
+    },
     "exception": {
       "values": [
         {
diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json
index 6051ae5d..12cd405c 100644
--- a/examples/electron-vite/package.json
+++ b/examples/electron-vite/package.json
@@ -3,19 +3,20 @@
   "version": "1.0.0",
   "main": "dist/main/index.js",
   "scripts": {
-    "build":"yarn run build:main && yarn run build:renderer",
+    "build": "yarn run build:main && yarn run build:renderer",
     "build:main": "vite build --config vite.config.main.js",
     "build:renderer": "vite build --config vite.config.renderer.js"
   },
   "dependencies": {
-    "electron-squirrel-startup": "^1.0.0",
     "@sentry/electron": "3.0.0",
-    "@sentry/vue": "7.15.0",
+    "@sentry/vite-plugin": "^2.2.0",
+    "@sentry/vue": "7.53.1",
+    "electron-squirrel-startup": "^1.0.0",
     "vue": "^3.2.40"
   },
   "devDependencies": {
     "@vitejs/plugin-vue": "^3.1.2",
-    "vite": "^3.1.8",
-    "electron": "23.0.0"
+    "electron": "23.0.0",
+    "vite": "^3.1.8"
   }
 }
diff --git a/examples/electron-vite/vite.config.main.js b/examples/electron-vite/vite.config.main.js
index e31a90c2..ec076c1f 100644
--- a/examples/electron-vite/vite.config.main.js
+++ b/examples/electron-vite/vite.config.main.js
@@ -1,5 +1,6 @@
 import { join } from 'path';
 import { builtinModules } from 'module';
+import { sentryVitePlugin } from '@sentry/vite-plugin';
 
 const PACKAGE_ROOT = __dirname;
 
@@ -12,6 +13,24 @@ const config = {
       '/@/': `${join(PACKAGE_ROOT, 'src')}/`,
     },
   },
+  plugins: [
+    sentryVitePlugin({
+      authToken: 'some invalid auth token',
+      org: 'some invalid org',
+      project: 'some invalid project',
+      telemetry: false,
+      sourcemaps: {
+        assets: [], // no assets to upload - we just care about injecting debug IDs
+      },
+      release: {
+        inject: false,
+      },
+      errorHandler() {
+        // do nothing on errors :)
+        // They will happen because of the invalid auth token
+      },
+    }),
+  ],
   build: {
     target: `node8`,
     outDir: 'dist/main',
diff --git a/examples/electron-vite/vite.config.renderer.js b/examples/electron-vite/vite.config.renderer.js
index 14b8eb38..0fd7727f 100644
--- a/examples/electron-vite/vite.config.renderer.js
+++ b/examples/electron-vite/vite.config.renderer.js
@@ -1,5 +1,6 @@
 import { join } from 'path';
 import vue from '@vitejs/plugin-vue';
+import { sentryVitePlugin } from '@sentry/vite-plugin';
 
 const PACKAGE_ROOT = __dirname;
 
@@ -17,7 +18,25 @@ const config = {
       strict: true,
     },
   },
-  plugins: [vue()],
+  plugins: [
+    vue(),
+    sentryVitePlugin({
+      authToken: 'some invalid auth token',
+      org: 'some invalid org',
+      project: 'some invalid project',
+      telemetry: false,
+      sourcemaps: {
+        assets: [], // no assets to upload - we just care about injecting debug IDs
+      },
+      release: {
+        inject: false,
+      },
+      errorHandler() {
+        // do nothing on errors :)
+        // They will happen because of the invalid auth token
+      },
+    }),
+  ],
   build: {
     sourcemap: true,
     target: `chrome61`,
@@ -25,6 +44,11 @@ const config = {
     assetsDir: '.',
     emptyOutDir: true,
     brotliSize: false,
+    rollupOptions: {
+      output: {
+        entryFileNames: '[name].js',
+      },
+    },
   },
 };
 
diff --git a/examples/electron-vite/yarn.lock b/examples/electron-vite/yarn.lock
new file mode 100644
index 00000000..586ad2d5
--- /dev/null
+++ b/examples/electron-vite/yarn.lock
@@ -0,0 +1,1363 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/parser@^7.20.15", "@babel/parser@^7.21.3":
+  version "7.21.9"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.9.tgz#ab18ea3b85b4bc33ba98a8d4c2032c557d23cf14"
+  integrity sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==
+
+"@electron/get@^2.0.0":
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e"
+  integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==
+  dependencies:
+    debug "^4.1.1"
+    env-paths "^2.2.0"
+    fs-extra "^8.1.0"
+    got "^11.8.5"
+    progress "^2.0.3"
+    semver "^6.2.0"
+    sumchecker "^3.0.1"
+  optionalDependencies:
+    global-agent "^3.0.0"
+
+"@esbuild/android-arm@0.15.18":
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80"
+  integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==
+
+"@esbuild/linux-loong64@0.15.18":
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239"
+  integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==
+
+"@jridgewell/sourcemap-codec@^1.4.13":
+  version "1.4.15"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@sentry-internal/tracing@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d"
+  integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ==
+  dependencies:
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/browser@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e"
+  integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/browser@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.53.1.tgz#1efd94cd9a56360fc401b99043eeaaac3da2e70e"
+  integrity sha512-1zas2R6riJaj0k7FoeieCW0SuC7UyKaBGA6jEG2LsgIqyD7IDOlF3BPZ4Yt08GFav0ImpyhGn5Vbrq5JLbeQdw==
+  dependencies:
+    "@sentry-internal/tracing" "7.53.1"
+    "@sentry/core" "7.53.1"
+    "@sentry/replay" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/bundler-plugin-core@2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a"
+  integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA==
+  dependencies:
+    "@sentry/cli" "^2.17.0"
+    "@sentry/node" "7.53.1"
+    find-up "5.0.0"
+    glob "9.3.2"
+    magic-string "0.27.0"
+    unplugin "1.0.1"
+
+"@sentry/cli@^2.17.0":
+  version "2.18.1"
+  resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308"
+  integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw==
+  dependencies:
+    https-proxy-agent "^5.0.0"
+    node-fetch "^2.6.7"
+    progress "^2.0.3"
+    proxy-from-env "^1.1.0"
+    which "^2.0.2"
+
+"@sentry/core@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88"
+  integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/core@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c"
+  integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/electron@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11"
+  integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A==
+  dependencies:
+    "@sentry/browser" "6.17.2"
+    "@sentry/core" "6.17.2"
+    "@sentry/node" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    deepmerge "^4.2.2"
+    tslib "^2.3.1"
+
+"@sentry/hub@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b"
+  integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/minimal@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120"
+  integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/node@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1"
+  integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/hub" "6.17.2"
+    "@sentry/tracing" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/node@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7"
+  integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA==
+  dependencies:
+    "@sentry-internal/tracing" "7.53.1"
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/replay@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.53.1.tgz#543272827d3ca034c62b0a822503d0a57c9229e7"
+  integrity sha512-5He5JLJiYLeWtXHC53z2ZzfbgAedafbHNZVS4+MBCOtydCk7cnuyJ0gGV6Rfxej/lZSNXZxOdW7HeMhzBtZCxw==
+  dependencies:
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+
+"@sentry/tracing@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b"
+  integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/types@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30"
+  integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==
+
+"@sentry/types@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41"
+  integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw==
+
+"@sentry/utils@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732"
+  integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/utils@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486"
+  integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/vite-plugin@^2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/vite-plugin/-/vite-plugin-2.2.0.tgz#658b936dc1fd17502a75c16db0bdda1d169da708"
+  integrity sha512-4J7MHLZ10o8jf2SM7ug2XfgoSgUrF32mobmEIA10d4jk8JTk4hvWvkxC+2HUF4ecHCMrtViwRTUZLbIzarVkmA==
+  dependencies:
+    "@sentry/bundler-plugin-core" "2.2.0"
+    unplugin "1.0.1"
+
+"@sentry/vue@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/vue/-/vue-7.53.1.tgz#d23bf60d54c7ab68ecea31592d8acbdee01a7750"
+  integrity sha512-E8KY02a6yDSkvnNOfDFe5K5h6sNoRS1sdEpe4hVfnW7m3wXDvLa2ipTwrlljokCp1sY2xQm5TL9whsNJXlR2KQ==
+  dependencies:
+    "@sentry/browser" "7.53.1"
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sindresorhus/is@^4.0.0":
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+  integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
+"@szmarczak/http-timer@^4.0.5":
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
+  integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
+  dependencies:
+    defer-to-connect "^2.0.0"
+
+"@types/cacheable-request@^6.0.1":
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
+  integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
+  dependencies:
+    "@types/http-cache-semantics" "*"
+    "@types/keyv" "^3.1.4"
+    "@types/node" "*"
+    "@types/responselike" "^1.0.0"
+
+"@types/http-cache-semantics@*":
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
+  integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
+
+"@types/keyv@^3.1.4":
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+  integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+  dependencies:
+    "@types/node" "*"
+
+"@types/node@*":
+  version "20.2.3"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878"
+  integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==
+
+"@types/node@^16.11.26":
+  version "16.18.32"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.32.tgz#5b5becc5da76fc055b2a601c8a3adbf13891227e"
+  integrity sha512-zpnXe4dEz6PrWz9u7dqyRoq9VxwCvoXRPy/ewhmMa1CgEyVmtL1NJPQ2MX+4pf97vetquVKkpiMx0MwI8pjNOw==
+
+"@types/responselike@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
+  integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
+  dependencies:
+    "@types/node" "*"
+
+"@types/yauzl@^2.9.1":
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
+  integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
+  dependencies:
+    "@types/node" "*"
+
+"@vitejs/plugin-vue@^3.1.2":
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz#a1484089dd85d6528f435743f84cdd0d215bbb54"
+  integrity sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==
+
+"@vue/compiler-core@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128"
+  integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==
+  dependencies:
+    "@babel/parser" "^7.21.3"
+    "@vue/shared" "3.3.4"
+    estree-walker "^2.0.2"
+    source-map-js "^1.0.2"
+
+"@vue/compiler-dom@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151"
+  integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==
+  dependencies:
+    "@vue/compiler-core" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+"@vue/compiler-sfc@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df"
+  integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==
+  dependencies:
+    "@babel/parser" "^7.20.15"
+    "@vue/compiler-core" "3.3.4"
+    "@vue/compiler-dom" "3.3.4"
+    "@vue/compiler-ssr" "3.3.4"
+    "@vue/reactivity-transform" "3.3.4"
+    "@vue/shared" "3.3.4"
+    estree-walker "^2.0.2"
+    magic-string "^0.30.0"
+    postcss "^8.1.10"
+    source-map-js "^1.0.2"
+
+"@vue/compiler-ssr@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777"
+  integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==
+  dependencies:
+    "@vue/compiler-dom" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+"@vue/reactivity-transform@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929"
+  integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==
+  dependencies:
+    "@babel/parser" "^7.20.15"
+    "@vue/compiler-core" "3.3.4"
+    "@vue/shared" "3.3.4"
+    estree-walker "^2.0.2"
+    magic-string "^0.30.0"
+
+"@vue/reactivity@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253"
+  integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==
+  dependencies:
+    "@vue/shared" "3.3.4"
+
+"@vue/runtime-core@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1"
+  integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==
+  dependencies:
+    "@vue/reactivity" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+"@vue/runtime-dom@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566"
+  integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==
+  dependencies:
+    "@vue/runtime-core" "3.3.4"
+    "@vue/shared" "3.3.4"
+    csstype "^3.1.1"
+
+"@vue/server-renderer@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c"
+  integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==
+  dependencies:
+    "@vue/compiler-ssr" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+"@vue/shared@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780"
+  integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==
+
+acorn@^8.8.1:
+  version "8.8.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+
+agent-base@6:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+boolean@^3.0.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
+  integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+buffer-crc32@~0.2.3:
+  version "0.2.13"
+  resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+  integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
+cacheable-lookup@^5.0.3:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+  integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
+cacheable-request@^7.0.2:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
+  integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
+  dependencies:
+    clone-response "^1.0.2"
+    get-stream "^5.1.0"
+    http-cache-semantics "^4.0.0"
+    keyv "^4.0.0"
+    lowercase-keys "^2.0.0"
+    normalize-url "^6.0.1"
+    responselike "^2.0.0"
+
+chokidar@^3.5.3:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+clone-response@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
+  integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
+  dependencies:
+    mimic-response "^1.0.0"
+
+cookie@^0.4.1:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+  integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
+csstype@^3.1.1:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
+  integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+
+debug@4, debug@^4.1.0, debug@^4.1.1:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+debug@^2.2.0:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+decompress-response@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+  integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+  dependencies:
+    mimic-response "^3.1.0"
+
+deepmerge@^4.2.2:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+defer-to-connect@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+  integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
+define-properties@^1.1.3:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+  integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+detect-node@^2.0.4:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+  integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+electron-squirrel-startup@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz#19b4e55933fa0ef8f556784b9c660f772546a0b8"
+  integrity sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q==
+  dependencies:
+    debug "^2.2.0"
+
+electron@23.0.0:
+  version "23.0.0"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-23.0.0.tgz#4da457d7585149bb1a98ea8bddb286e72322a309"
+  integrity sha512-S6hVtTAjauMiiWP9sBVR5RpcUC464cNZ06I2EMUjeZBq+KooS6tLmNsfw0zLpAXDp1qosjlBP3v71NTZ3gd9iA==
+  dependencies:
+    "@electron/get" "^2.0.0"
+    "@types/node" "^16.11.26"
+    extract-zip "^2.0.1"
+
+end-of-stream@^1.1.0:
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+env-paths@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+  integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+es6-error@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+  integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+
+esbuild-android-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5"
+  integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==
+
+esbuild-android-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04"
+  integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==
+
+esbuild-darwin-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410"
+  integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==
+
+esbuild-darwin-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337"
+  integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==
+
+esbuild-freebsd-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2"
+  integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==
+
+esbuild-freebsd-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635"
+  integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==
+
+esbuild-linux-32@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce"
+  integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==
+
+esbuild-linux-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c"
+  integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==
+
+esbuild-linux-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d"
+  integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==
+
+esbuild-linux-arm@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc"
+  integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==
+
+esbuild-linux-mips64le@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb"
+  integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==
+
+esbuild-linux-ppc64le@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507"
+  integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==
+
+esbuild-linux-riscv64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6"
+  integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==
+
+esbuild-linux-s390x@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb"
+  integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==
+
+esbuild-netbsd-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998"
+  integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==
+
+esbuild-openbsd-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8"
+  integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==
+
+esbuild-sunos-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971"
+  integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==
+
+esbuild-windows-32@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3"
+  integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==
+
+esbuild-windows-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0"
+  integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==
+
+esbuild-windows-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7"
+  integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==
+
+esbuild@^0.15.9:
+  version "0.15.18"
+  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d"
+  integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==
+  optionalDependencies:
+    "@esbuild/android-arm" "0.15.18"
+    "@esbuild/linux-loong64" "0.15.18"
+    esbuild-android-64 "0.15.18"
+    esbuild-android-arm64 "0.15.18"
+    esbuild-darwin-64 "0.15.18"
+    esbuild-darwin-arm64 "0.15.18"
+    esbuild-freebsd-64 "0.15.18"
+    esbuild-freebsd-arm64 "0.15.18"
+    esbuild-linux-32 "0.15.18"
+    esbuild-linux-64 "0.15.18"
+    esbuild-linux-arm "0.15.18"
+    esbuild-linux-arm64 "0.15.18"
+    esbuild-linux-mips64le "0.15.18"
+    esbuild-linux-ppc64le "0.15.18"
+    esbuild-linux-riscv64 "0.15.18"
+    esbuild-linux-s390x "0.15.18"
+    esbuild-netbsd-64 "0.15.18"
+    esbuild-openbsd-64 "0.15.18"
+    esbuild-sunos-64 "0.15.18"
+    esbuild-windows-32 "0.15.18"
+    esbuild-windows-64 "0.15.18"
+    esbuild-windows-arm64 "0.15.18"
+
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+estree-walker@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+extract-zip@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+  integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
+  dependencies:
+    debug "^4.1.1"
+    get-stream "^5.1.0"
+    yauzl "^2.10.0"
+  optionalDependencies:
+    "@types/yauzl" "^2.9.1"
+
+fd-slicer@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+  integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+  dependencies:
+    pend "~1.2.0"
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+find-up@5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+  dependencies:
+    locate-path "^6.0.0"
+    path-exists "^4.0.0"
+
+fs-extra@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+get-intrinsic@^1.1.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+  integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
+  dependencies:
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-proto "^1.0.1"
+    has-symbols "^1.0.3"
+
+get-stream@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+  dependencies:
+    pump "^3.0.0"
+
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob@9.3.2:
+  version "9.3.2"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda"
+  integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    minimatch "^7.4.1"
+    minipass "^4.2.4"
+    path-scurry "^1.6.1"
+
+global-agent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
+  integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
+  dependencies:
+    boolean "^3.0.1"
+    es6-error "^4.1.1"
+    matcher "^3.0.0"
+    roarr "^2.15.3"
+    semver "^7.3.2"
+    serialize-error "^7.0.1"
+
+globalthis@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+  dependencies:
+    define-properties "^1.1.3"
+
+got@^11.8.5:
+  version "11.8.6"
+  resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
+  integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
+  dependencies:
+    "@sindresorhus/is" "^4.0.0"
+    "@szmarczak/http-timer" "^4.0.5"
+    "@types/cacheable-request" "^6.0.1"
+    "@types/responselike" "^1.0.0"
+    cacheable-lookup "^5.0.3"
+    cacheable-request "^7.0.2"
+    decompress-response "^6.0.0"
+    http2-wrapper "^1.0.0-beta.5.2"
+    lowercase-keys "^2.0.0"
+    p-cancelable "^2.0.0"
+    responselike "^2.0.0"
+
+graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+http-cache-semantics@^4.0.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+  integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
+http2-wrapper@^1.0.0-beta.5.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+  integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+  dependencies:
+    quick-lru "^5.1.1"
+    resolve-alpn "^1.0.0"
+
+https-proxy-agent@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-core-module@^2.11.0:
+  version "2.12.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+  dependencies:
+    has "^1.0.3"
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+json-buffer@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+  integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-stringify-safe@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+jsonfile@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+  integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+keyv@^4.0.0:
+  version "4.5.2"
+  resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56"
+  integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==
+  dependencies:
+    json-buffer "3.0.1"
+
+locate-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+  dependencies:
+    p-locate "^5.0.0"
+
+lowercase-keys@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+  integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+  dependencies:
+    yallist "^4.0.0"
+
+lru-cache@^9.1.1:
+  version "9.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1"
+  integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==
+
+lru_map@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
+  integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
+
+magic-string@0.27.0:
+  version "0.27.0"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3"
+  integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.4.13"
+
+magic-string@^0.30.0:
+  version "0.30.0"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529"
+  integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.4.13"
+
+matcher@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
+  integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
+  dependencies:
+    escape-string-regexp "^4.0.0"
+
+mimic-response@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+  integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+  integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+minimatch@^7.4.1:
+  version "7.4.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb"
+  integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minipass@^4.2.4:
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a"
+  integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==
+
+"minipass@^5.0.0 || ^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81"
+  integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+nanoid@^3.3.6:
+  version "3.3.6"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
+  integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+
+node-fetch@^2.6.7:
+  version "2.6.11"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
+  integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-url@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+  integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+once@^1.3.1, once@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+  dependencies:
+    wrappy "1"
+
+p-cancelable@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+  integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
+
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+  dependencies:
+    yocto-queue "^0.1.0"
+
+p-locate@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+  dependencies:
+    p-limit "^3.0.2"
+
+path-exists@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.6.1:
+  version "1.9.2"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
+  integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
+  dependencies:
+    lru-cache "^9.1.1"
+    minipass "^5.0.0 || ^6.0.2"
+
+pend@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+postcss@^8.1.10, postcss@^8.4.18:
+  version "8.4.23"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab"
+  integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==
+  dependencies:
+    nanoid "^3.3.6"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
+progress@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+resolve-alpn@^1.0.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+  integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
+resolve@^1.22.1:
+  version "1.22.2"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
+  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
+  dependencies:
+    is-core-module "^2.11.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+responselike@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
+  integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
+  dependencies:
+    lowercase-keys "^2.0.0"
+
+roarr@^2.15.3:
+  version "2.15.4"
+  resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
+  integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
+  dependencies:
+    boolean "^3.0.1"
+    detect-node "^2.0.4"
+    globalthis "^1.0.1"
+    json-stringify-safe "^5.0.1"
+    semver-compare "^1.0.0"
+    sprintf-js "^1.1.2"
+
+rollup@^2.79.1:
+  version "2.79.1"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
+  integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+semver-compare@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+  integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
+
+semver@^6.2.0:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.2:
+  version "7.5.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
+  integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
+  dependencies:
+    lru-cache "^6.0.0"
+
+serialize-error@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
+  integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
+  dependencies:
+    type-fest "^0.13.1"
+
+source-map-js@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+sprintf-js@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
+  integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
+
+sumchecker@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
+  integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
+  dependencies:
+    debug "^4.1.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+tslib@^1.9.3:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.3.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338"
+  integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==
+
+type-fest@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+  integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+
+universalify@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unplugin@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f"
+  integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==
+  dependencies:
+    acorn "^8.8.1"
+    chokidar "^3.5.3"
+    webpack-sources "^3.2.3"
+    webpack-virtual-modules "^0.5.0"
+
+vite@^3.1.8:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.6.tgz#a0538710e69532225d9c0ba6a23f4158b51267fd"
+  integrity sha512-nTXTxYVvaQNLoW5BQ8PNNQ3lPia57gzsQU/Khv+JvzKPku8kNZL6NMUR/qwXhMG6E+g1idqEPanomJ+VZgixEg==
+  dependencies:
+    esbuild "^0.15.9"
+    postcss "^8.4.18"
+    resolve "^1.22.1"
+    rollup "^2.79.1"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+vue@^3.2.40:
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6"
+  integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
+  dependencies:
+    "@vue/compiler-dom" "3.3.4"
+    "@vue/compiler-sfc" "3.3.4"
+    "@vue/runtime-dom" "3.3.4"
+    "@vue/server-renderer" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+webpack-sources@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack-virtual-modules@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c"
+  integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+which@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yauzl@^2.10.0:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+  integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+  dependencies:
+    buffer-crc32 "~0.2.3"
+    fd-slicer "~1.1.0"
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/examples/webpack-context-isolation-preload/event.json b/examples/webpack-context-isolation-preload/event.json
index 61d37b24..ee81c538 100644
--- a/examples/webpack-context-isolation-preload/event.json
+++ b/examples/webpack-context-isolation-preload/event.json
@@ -59,6 +59,14 @@
       "ip_address": "{{auto}}",
       "id": "abc-123"
     },
+    "debug_meta": {
+      "images": [
+        {
+          "code_file": "app:///dist/renderer.js",
+          "type": "sourcemap"
+        }
+      ]
+    },
     "exception": {
       "values": [
         {
diff --git a/examples/webpack-context-isolation-preload/package.json b/examples/webpack-context-isolation-preload/package.json
index 5837b7d2..9789ae56 100644
--- a/examples/webpack-context-isolation-preload/package.json
+++ b/examples/webpack-context-isolation-preload/package.json
@@ -7,10 +7,11 @@
   },
   "main": "dist/main.js",
   "devDependencies": {
+    "@sentry/webpack-plugin": "^2.2.0",
     "html-webpack-plugin": "^5.3.2",
+    "warnings-to-errors-webpack-plugin": "^2.0.1",
     "webpack": "^5.48.0",
-    "webpack-cli": "^4.7.2",
-    "warnings-to-errors-webpack-plugin": "^2.0.1"
+    "webpack-cli": "^4.7.2"
   },
   "dependencies": {
     "@sentry/electron": "3.0.0"
diff --git a/examples/webpack-context-isolation-preload/webpack.config.js b/examples/webpack-context-isolation-preload/webpack.config.js
index c9f420ea..167d7e64 100644
--- a/examples/webpack-context-isolation-preload/webpack.config.js
+++ b/examples/webpack-context-isolation-preload/webpack.config.js
@@ -1,5 +1,23 @@
 const HtmlWebpackPlugin = require('html-webpack-plugin');
 const WarningsToErrorsPlugin = require('warnings-to-errors-webpack-plugin');
+const { sentryWebpackPlugin } = require('@sentry/webpack-plugin');
+
+const sentryWebpackPluginOptions = {
+  authToken: 'some invalid auth token',
+  org: 'some invalid org',
+  project: 'some invalid project',
+  telemetry: false,
+  sourcemaps: {
+    assets: [], // no assets to upload - we just care about injecting debug IDs
+  },
+  release: {
+    inject: false,
+  },
+  errorHandler() {
+    // do nothing on errors :)
+    // They will happen because of the invalid auth token
+  },
+};
 
 module.exports = [
   {
@@ -10,7 +28,7 @@ module.exports = [
       libraryTarget: 'commonjs2',
       filename: 'main.js',
     },
-    plugins: [new WarningsToErrorsPlugin()],
+    plugins: [new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)],
   },
   {
     mode: 'production',
@@ -19,7 +37,7 @@ module.exports = [
     output: {
       filename: 'preload.js',
     },
-    plugins: [new WarningsToErrorsPlugin()],
+    plugins: [new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)],
   },
   {
     mode: 'production',
@@ -28,6 +46,6 @@ module.exports = [
     output: {
       filename: 'renderer.js',
     },
-    plugins: [new HtmlWebpackPlugin(), new WarningsToErrorsPlugin()],
+    plugins: [new HtmlWebpackPlugin(), new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)],
   },
 ];
diff --git a/examples/webpack-context-isolation-preload/yarn.lock b/examples/webpack-context-isolation-preload/yarn.lock
new file mode 100644
index 00000000..1d1506de
--- /dev/null
+++ b/examples/webpack-context-isolation-preload/yarn.lock
@@ -0,0 +1,1496 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@discoveryjs/json-ext@^0.5.0":
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
+  integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
+
+"@jridgewell/gen-mapping@^0.3.0":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/set-array@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/source-map@^0.3.2":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
+  integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/sourcemap-codec@1.4.14":
+  version "1.4.14"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
+  version "1.4.15"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.18"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
+  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
+  dependencies:
+    "@jridgewell/resolve-uri" "3.1.0"
+    "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@sentry-internal/tracing@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d"
+  integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ==
+  dependencies:
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/browser@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e"
+  integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/bundler-plugin-core@2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a"
+  integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA==
+  dependencies:
+    "@sentry/cli" "^2.17.0"
+    "@sentry/node" "7.53.1"
+    find-up "5.0.0"
+    glob "9.3.2"
+    magic-string "0.27.0"
+    unplugin "1.0.1"
+
+"@sentry/cli@^2.17.0":
+  version "2.18.1"
+  resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308"
+  integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw==
+  dependencies:
+    https-proxy-agent "^5.0.0"
+    node-fetch "^2.6.7"
+    progress "^2.0.3"
+    proxy-from-env "^1.1.0"
+    which "^2.0.2"
+
+"@sentry/core@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88"
+  integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/core@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c"
+  integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/electron@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11"
+  integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A==
+  dependencies:
+    "@sentry/browser" "6.17.2"
+    "@sentry/core" "6.17.2"
+    "@sentry/node" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    deepmerge "^4.2.2"
+    tslib "^2.3.1"
+
+"@sentry/hub@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b"
+  integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/minimal@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120"
+  integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/node@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1"
+  integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/hub" "6.17.2"
+    "@sentry/tracing" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/node@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7"
+  integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA==
+  dependencies:
+    "@sentry-internal/tracing" "7.53.1"
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/tracing@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b"
+  integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/types@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30"
+  integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==
+
+"@sentry/types@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41"
+  integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw==
+
+"@sentry/utils@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732"
+  integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/utils@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486"
+  integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/webpack-plugin@^2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.2.0.tgz#bd7a28a7132f139f74aa1068b168ab735fb9ddea"
+  integrity sha512-GzwoIQ2ygau0u76uKBK7gAyJAi6Te9zgJuP//OBfmJoXupm6HIUWC6RmPFy0yMlsK4gq1Ak/KziX7PZIe5NLaA==
+  dependencies:
+    "@sentry/bundler-plugin-core" "2.2.0"
+    unplugin "1.0.1"
+    uuid "^9.0.0"
+
+"@types/eslint-scope@^3.7.3":
+  version "3.7.4"
+  resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
+  integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
+  dependencies:
+    "@types/eslint" "*"
+    "@types/estree" "*"
+
+"@types/eslint@*":
+  version "8.40.0"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23"
+  integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*", "@types/estree@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
+  integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
+
+"@types/html-minifier-terser@^6.0.0":
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
+  integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+
+"@types/json-schema@*", "@types/json-schema@^7.0.8":
+  version "7.0.11"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
+"@types/node@*":
+  version "20.2.3"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878"
+  integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==
+
+"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
+  integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
+  dependencies:
+    "@webassemblyjs/helper-numbers" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
+  integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
+
+"@webassemblyjs/helper-api-error@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
+  integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
+
+"@webassemblyjs/helper-buffer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093"
+  integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
+
+"@webassemblyjs/helper-numbers@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
+  integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
+  dependencies:
+    "@webassemblyjs/floating-point-hex-parser" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
+  integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
+
+"@webassemblyjs/helper-wasm-section@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577"
+  integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+
+"@webassemblyjs/ieee754@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
+  integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
+  integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
+  integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
+
+"@webassemblyjs/wasm-edit@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab"
+  integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/helper-wasm-section" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-opt" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+    "@webassemblyjs/wast-printer" "1.11.6"
+
+"@webassemblyjs/wasm-gen@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268"
+  integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wasm-opt@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2"
+  integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+
+"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1"
+  integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wast-printer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20"
+  integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webpack-cli/configtest@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5"
+  integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==
+
+"@webpack-cli/info@^1.5.0":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1"
+  integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==
+  dependencies:
+    envinfo "^7.7.3"
+
+"@webpack-cli/serve@^1.7.0":
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1"
+  integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+acorn-import-assertions@^1.9.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
+  integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
+
+acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1:
+  version "8.8.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+
+agent-base@6:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+boolbase@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+browserslist@^4.14.5:
+  version "4.21.5"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7"
+  integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
+  dependencies:
+    caniuse-lite "^1.0.30001449"
+    electron-to-chromium "^1.4.284"
+    node-releases "^2.0.8"
+    update-browserslist-db "^1.0.10"
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+camel-case@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+  dependencies:
+    pascal-case "^3.1.2"
+    tslib "^2.0.3"
+
+caniuse-lite@^1.0.30001449:
+  version "1.0.30001489"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8"
+  integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==
+
+chokidar@^3.5.3:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+clean-css@^5.2.2:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224"
+  integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==
+  dependencies:
+    source-map "~0.6.0"
+
+clone-deep@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+  dependencies:
+    is-plain-object "^2.0.4"
+    kind-of "^6.0.2"
+    shallow-clone "^3.0.0"
+
+colorette@^2.0.14:
+  version "2.0.20"
+  resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+  integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^7.0.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+cookie@^0.4.1:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+  integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
+cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+css-select@^4.1.3:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.0.1"
+    domhandler "^4.3.1"
+    domutils "^2.8.0"
+    nth-check "^2.0.1"
+
+css-what@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+debug@4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+deepmerge@^4.2.2:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+dom-converter@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
+dom-serializer@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+domelementtype@^2.0.1, domelementtype@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domutils@^2.5.2, domutils@^2.8.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+dot-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+electron-to-chromium@^1.4.284:
+  version "1.4.407"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz#087e2ab97b3eb092aa6217c05986086b7dd370cc"
+  integrity sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg==
+
+enhanced-resolve@^5.14.1:
+  version "5.14.1"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3"
+  integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+envinfo@^7.7.3:
+  version "7.8.1"
+  resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
+  integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
+
+es-module-lexer@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527"
+  integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+eslint-scope@5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^4.1.1"
+
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+events@^3.2.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+fast-deep-equal@^3.1.1:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fastest-levenshtein@^1.0.12:
+  version "1.0.16"
+  resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
+  integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+find-up@5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+  dependencies:
+    locate-path "^6.0.0"
+    path-exists "^4.0.0"
+
+find-up@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+  dependencies:
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob-to-regexp@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@9.3.2:
+  version "9.3.2"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda"
+  integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    minimatch "^7.4.1"
+    minipass "^4.2.4"
+    path-scurry "^1.6.1"
+
+graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+he@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+html-minifier-terser@^6.0.2:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+  integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+  dependencies:
+    camel-case "^4.1.2"
+    clean-css "^5.2.2"
+    commander "^8.3.0"
+    he "^1.2.0"
+    param-case "^3.0.4"
+    relateurl "^0.2.7"
+    terser "^5.10.0"
+
+html-webpack-plugin@^5.3.2:
+  version "5.5.1"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763"
+  integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==
+  dependencies:
+    "@types/html-minifier-terser" "^6.0.0"
+    html-minifier-terser "^6.0.2"
+    lodash "^4.17.21"
+    pretty-error "^4.0.0"
+    tapable "^2.0.0"
+
+htmlparser2@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+  integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.0.0"
+    domutils "^2.5.2"
+    entities "^2.0.0"
+
+https-proxy-agent@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+import-local@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+  integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+  dependencies:
+    pkg-dir "^4.2.0"
+    resolve-cwd "^3.0.0"
+
+interpret@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
+  integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-core-module@^2.11.0:
+  version "2.12.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+  dependencies:
+    has "^1.0.3"
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+jest-worker@^27.4.5:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+  integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+json-parse-even-better-errors@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+loader-runner@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+locate-path@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+  dependencies:
+    p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+  dependencies:
+    p-locate "^5.0.0"
+
+lodash@^4.17.20, lodash@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+lower-case@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+  dependencies:
+    tslib "^2.0.3"
+
+lru-cache@^9.1.1:
+  version "9.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1"
+  integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==
+
+lru_map@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
+  integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
+
+magic-string@0.27.0:
+  version "0.27.0"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3"
+  integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.4.13"
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.27:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+minimatch@^7.4.1:
+  version "7.4.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb"
+  integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minipass@^4.2.4:
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a"
+  integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==
+
+"minipass@^5.0.0 || ^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81"
+  integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+neo-async@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+no-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+  dependencies:
+    lower-case "^2.0.2"
+    tslib "^2.0.3"
+
+node-fetch@^2.6.7:
+  version "2.6.11"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
+  integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-releases@^2.0.8:
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
+  integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
+p-limit@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+  dependencies:
+    yocto-queue "^0.1.0"
+
+p-locate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+  dependencies:
+    p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+  dependencies:
+    p-limit "^3.0.2"
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+param-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+  dependencies:
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
+
+pascal-case@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+path-exists@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.6.1:
+  version "1.9.2"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
+  integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
+  dependencies:
+    lru-cache "^9.1.1"
+    minipass "^5.0.0 || ^6.0.2"
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pkg-dir@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
+pretty-error@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
+  integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==
+  dependencies:
+    lodash "^4.17.20"
+    renderkid "^3.0.0"
+
+progress@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+punycode@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
+randombytes@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+rechoir@^0.7.0:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
+  integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
+  dependencies:
+    resolve "^1.9.0"
+
+relateurl@^0.2.7:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+renderkid@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
+  integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==
+  dependencies:
+    css-select "^4.1.3"
+    dom-converter "^0.2.0"
+    htmlparser2 "^6.1.0"
+    lodash "^4.17.21"
+    strip-ansi "^6.0.1"
+
+resolve-cwd@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+  dependencies:
+    resolve-from "^5.0.0"
+
+resolve-from@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve@^1.9.0:
+  version "1.22.2"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
+  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
+  dependencies:
+    is-core-module "^2.11.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+safe-buffer@^5.1.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+schema-utils@^3.1.1, schema-utils@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99"
+  integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
+serialize-javascript@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
+  integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
+  dependencies:
+    randombytes "^2.1.0"
+
+shallow-clone@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+  dependencies:
+    kind-of "^6.0.2"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.0:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+supports-color@^8.0.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+terser-webpack-plugin@^5.3.7:
+  version "5.3.9"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
+  integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jest-worker "^27.4.5"
+    schema-utils "^3.1.1"
+    serialize-javascript "^6.0.1"
+    terser "^5.16.8"
+
+terser@^5.10.0, terser@^5.16.8:
+  version "5.17.6"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de"
+  integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==
+  dependencies:
+    "@jridgewell/source-map" "^0.3.2"
+    acorn "^8.5.0"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+tslib@^1.9.3:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.3, tslib@^2.3.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338"
+  integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==
+
+unplugin@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f"
+  integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==
+  dependencies:
+    acorn "^8.8.1"
+    chokidar "^3.5.3"
+    webpack-sources "^3.2.3"
+    webpack-virtual-modules "^0.5.0"
+
+update-browserslist-db@^1.0.10:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
+  integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
+
+uuid@^9.0.0:
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
+  integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
+
+warnings-to-errors-webpack-plugin@^2.0.1:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/warnings-to-errors-webpack-plugin/-/warnings-to-errors-webpack-plugin-2.3.0.tgz#5f9a58aaec458feafabe0f7a2b88a492db263a30"
+  integrity sha512-fzOyw+Ctr2MqJ+4UXKobDiOLzMMSBAdvGMWvZ4NRgTBCofAL2mmdfr6/Of3Bqz9Sq6R6xT5dLs6nnLLCtmppeQ==
+
+watchpack@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
+  integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
+  dependencies:
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.1.2"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+webpack-cli@^4.7.2:
+  version "4.10.0"
+  resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31"
+  integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==
+  dependencies:
+    "@discoveryjs/json-ext" "^0.5.0"
+    "@webpack-cli/configtest" "^1.2.0"
+    "@webpack-cli/info" "^1.5.0"
+    "@webpack-cli/serve" "^1.7.0"
+    colorette "^2.0.14"
+    commander "^7.0.0"
+    cross-spawn "^7.0.3"
+    fastest-levenshtein "^1.0.12"
+    import-local "^3.0.2"
+    interpret "^2.2.0"
+    rechoir "^0.7.0"
+    webpack-merge "^5.7.3"
+
+webpack-merge@^5.7.3:
+  version "5.9.0"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826"
+  integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==
+  dependencies:
+    clone-deep "^4.0.1"
+    wildcard "^2.0.0"
+
+webpack-sources@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack-virtual-modules@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c"
+  integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==
+
+webpack@^5.48.0:
+  version "5.84.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.84.0.tgz#011115617668744aece87a9eb68534487d84de1a"
+  integrity sha512-XezNK3kwJq6IyeoZmZ1uEqQs+42nTqIi4jYM/YjLwaJedUC1N3bwnCC0+UcnHJPfqWX0kGrQnMIvZZyWYaIZrA==
+  dependencies:
+    "@types/eslint-scope" "^3.7.3"
+    "@types/estree" "^1.0.0"
+    "@webassemblyjs/ast" "^1.11.5"
+    "@webassemblyjs/wasm-edit" "^1.11.5"
+    "@webassemblyjs/wasm-parser" "^1.11.5"
+    acorn "^8.7.1"
+    acorn-import-assertions "^1.9.0"
+    browserslist "^4.14.5"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^5.14.1"
+    es-module-lexer "^1.2.1"
+    eslint-scope "5.1.1"
+    events "^3.2.0"
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.2.9"
+    json-parse-even-better-errors "^2.3.1"
+    loader-runner "^4.2.0"
+    mime-types "^2.1.27"
+    neo-async "^2.6.2"
+    schema-utils "^3.1.2"
+    tapable "^2.1.1"
+    terser-webpack-plugin "^5.3.7"
+    watchpack "^2.4.0"
+    webpack-sources "^3.2.3"
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+which@^2.0.1, which@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wildcard@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+  integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/examples/webpack-context-isolation/event.json b/examples/webpack-context-isolation/event.json
index a2a16a44..84f75ff9 100644
--- a/examples/webpack-context-isolation/event.json
+++ b/examples/webpack-context-isolation/event.json
@@ -59,6 +59,14 @@
       "ip_address": "{{auto}}",
       "id": "abc-123"
     },
+    "debug_meta": {
+      "images": [
+        {
+          "code_file": "app:///dist/renderer.js",
+          "type": "sourcemap"
+        }
+      ]
+    },
     "exception": {
       "values": [
         {
diff --git a/examples/webpack-context-isolation/package.json b/examples/webpack-context-isolation/package.json
index 213141ef..77b11a43 100644
--- a/examples/webpack-context-isolation/package.json
+++ b/examples/webpack-context-isolation/package.json
@@ -7,11 +7,12 @@
   },
   "main": "dist/main.js",
   "devDependencies": {
+    "@sentry/webpack-plugin": "^2.2.0",
+    "csp-html-webpack-plugin": "^5.1.0",
     "html-webpack-plugin": "^5.3.2",
-    "webpack": "^5.48.0",
-    "webpack-cli": "^4.7.2",
     "warnings-to-errors-webpack-plugin": "^2.0.1",
-    "csp-html-webpack-plugin": "^5.1.0"
+    "webpack": "^5.48.0",
+    "webpack-cli": "^4.7.2"
   },
   "dependencies": {
     "@sentry/electron": "3.0.0"
diff --git a/examples/webpack-context-isolation/webpack.config.js b/examples/webpack-context-isolation/webpack.config.js
index 44f20600..52e930a7 100644
--- a/examples/webpack-context-isolation/webpack.config.js
+++ b/examples/webpack-context-isolation/webpack.config.js
@@ -1,6 +1,24 @@
 const HtmlWebpackPlugin = require('html-webpack-plugin');
 const CspHtmlWebpackPlugin = require('csp-html-webpack-plugin');
 const WarningsToErrorsPlugin = require('warnings-to-errors-webpack-plugin');
+const { sentryWebpackPlugin } = require('@sentry/webpack-plugin');
+
+const sentryWebpackPluginOptions = {
+  authToken: 'some invalid auth token',
+  org: 'some invalid org',
+  project: 'some invalid project',
+  telemetry: false,
+  sourcemaps: {
+    assets: [], // no assets to upload - we just care about injecting debug IDs
+  },
+  release: {
+    inject: false,
+  },
+  errorHandler() {
+    // do nothing on errors :)
+    // They will happen because of the invalid auth token
+  },
+};
 
 module.exports = [
   {
@@ -11,7 +29,7 @@ module.exports = [
       libraryTarget: 'commonjs2',
       filename: 'main.js',
     },
-    plugins: [new WarningsToErrorsPlugin()],
+    plugins: [new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)],
   },
   {
     mode: 'production',
@@ -27,6 +45,7 @@ module.exports = [
         'default-src': "'self'",
         'script-src': "'self'",
       }),
+      sentryWebpackPlugin(sentryWebpackPluginOptions),
     ],
   },
 ];
diff --git a/examples/webpack-context-isolation/yarn.lock b/examples/webpack-context-isolation/yarn.lock
new file mode 100644
index 00000000..2c012a8f
--- /dev/null
+++ b/examples/webpack-context-isolation/yarn.lock
@@ -0,0 +1,1595 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@discoveryjs/json-ext@^0.5.0":
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
+  integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
+
+"@jridgewell/gen-mapping@^0.3.0":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/set-array@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/source-map@^0.3.2":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
+  integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/sourcemap-codec@1.4.14":
+  version "1.4.14"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
+  version "1.4.15"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.18"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
+  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
+  dependencies:
+    "@jridgewell/resolve-uri" "3.1.0"
+    "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@sentry-internal/tracing@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d"
+  integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ==
+  dependencies:
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/browser@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e"
+  integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/bundler-plugin-core@2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a"
+  integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA==
+  dependencies:
+    "@sentry/cli" "^2.17.0"
+    "@sentry/node" "7.53.1"
+    find-up "5.0.0"
+    glob "9.3.2"
+    magic-string "0.27.0"
+    unplugin "1.0.1"
+
+"@sentry/cli@^2.17.0":
+  version "2.18.1"
+  resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308"
+  integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw==
+  dependencies:
+    https-proxy-agent "^5.0.0"
+    node-fetch "^2.6.7"
+    progress "^2.0.3"
+    proxy-from-env "^1.1.0"
+    which "^2.0.2"
+
+"@sentry/core@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88"
+  integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/core@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c"
+  integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/electron@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11"
+  integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A==
+  dependencies:
+    "@sentry/browser" "6.17.2"
+    "@sentry/core" "6.17.2"
+    "@sentry/node" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    deepmerge "^4.2.2"
+    tslib "^2.3.1"
+
+"@sentry/hub@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b"
+  integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/minimal@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120"
+  integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/node@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1"
+  integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/hub" "6.17.2"
+    "@sentry/tracing" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/node@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7"
+  integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA==
+  dependencies:
+    "@sentry-internal/tracing" "7.53.1"
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/tracing@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b"
+  integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/types@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30"
+  integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==
+
+"@sentry/types@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41"
+  integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw==
+
+"@sentry/utils@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732"
+  integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/utils@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486"
+  integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/webpack-plugin@^2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.2.0.tgz#bd7a28a7132f139f74aa1068b168ab735fb9ddea"
+  integrity sha512-GzwoIQ2ygau0u76uKBK7gAyJAi6Te9zgJuP//OBfmJoXupm6HIUWC6RmPFy0yMlsK4gq1Ak/KziX7PZIe5NLaA==
+  dependencies:
+    "@sentry/bundler-plugin-core" "2.2.0"
+    unplugin "1.0.1"
+    uuid "^9.0.0"
+
+"@types/eslint-scope@^3.7.3":
+  version "3.7.4"
+  resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
+  integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
+  dependencies:
+    "@types/eslint" "*"
+    "@types/estree" "*"
+
+"@types/eslint@*":
+  version "8.40.0"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23"
+  integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*", "@types/estree@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
+  integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
+
+"@types/html-minifier-terser@^6.0.0":
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
+  integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+
+"@types/json-schema@*", "@types/json-schema@^7.0.8":
+  version "7.0.11"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
+"@types/node@*":
+  version "20.2.3"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878"
+  integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==
+
+"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
+  integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
+  dependencies:
+    "@webassemblyjs/helper-numbers" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
+  integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
+
+"@webassemblyjs/helper-api-error@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
+  integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
+
+"@webassemblyjs/helper-buffer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093"
+  integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
+
+"@webassemblyjs/helper-numbers@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
+  integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
+  dependencies:
+    "@webassemblyjs/floating-point-hex-parser" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
+  integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
+
+"@webassemblyjs/helper-wasm-section@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577"
+  integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+
+"@webassemblyjs/ieee754@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
+  integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
+  integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
+  integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
+
+"@webassemblyjs/wasm-edit@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab"
+  integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/helper-wasm-section" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-opt" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+    "@webassemblyjs/wast-printer" "1.11.6"
+
+"@webassemblyjs/wasm-gen@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268"
+  integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wasm-opt@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2"
+  integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+
+"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1"
+  integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wast-printer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20"
+  integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webpack-cli/configtest@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5"
+  integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==
+
+"@webpack-cli/info@^1.5.0":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1"
+  integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==
+  dependencies:
+    envinfo "^7.7.3"
+
+"@webpack-cli/serve@^1.7.0":
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1"
+  integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+acorn-import-assertions@^1.9.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
+  integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
+
+acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1:
+  version "8.8.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+
+agent-base@6:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+boolbase@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+browserslist@^4.14.5:
+  version "4.21.5"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7"
+  integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
+  dependencies:
+    caniuse-lite "^1.0.30001449"
+    electron-to-chromium "^1.4.284"
+    node-releases "^2.0.8"
+    update-browserslist-db "^1.0.10"
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+camel-case@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+  dependencies:
+    pascal-case "^3.1.2"
+    tslib "^2.0.3"
+
+caniuse-lite@^1.0.30001449:
+  version "1.0.30001489"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8"
+  integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==
+
+cheerio-select@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
+  integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
+  dependencies:
+    boolbase "^1.0.0"
+    css-select "^5.1.0"
+    css-what "^6.1.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+
+cheerio@^1.0.0-rc.5:
+  version "1.0.0-rc.12"
+  resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
+  integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
+  dependencies:
+    cheerio-select "^2.1.0"
+    dom-serializer "^2.0.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+    htmlparser2 "^8.0.1"
+    parse5 "^7.0.0"
+    parse5-htmlparser2-tree-adapter "^7.0.0"
+
+chokidar@^3.5.3:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+clean-css@^5.2.2:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224"
+  integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==
+  dependencies:
+    source-map "~0.6.0"
+
+clone-deep@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+  dependencies:
+    is-plain-object "^2.0.4"
+    kind-of "^6.0.2"
+    shallow-clone "^3.0.0"
+
+colorette@^2.0.14:
+  version "2.0.20"
+  resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+  integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^7.0.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+cookie@^0.4.1:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+  integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
+cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+csp-html-webpack-plugin@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/csp-html-webpack-plugin/-/csp-html-webpack-plugin-5.1.0.tgz#b3bfa5a50d207fe5b6bb4839dc33aa59621a35a0"
+  integrity sha512-6l/s6hACE+UA01PLReNKZfgLZWM98f7ewWmE79maDWIbEXiPcIWQGB3LQR/Zw+hPBj4XPZZ5zNrrO+aygqaLaQ==
+  dependencies:
+    cheerio "^1.0.0-rc.5"
+    lodash "^4.17.20"
+
+css-select@^4.1.3:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.0.1"
+    domhandler "^4.3.1"
+    domutils "^2.8.0"
+    nth-check "^2.0.1"
+
+css-select@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+  integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.1.0"
+    domhandler "^5.0.2"
+    domutils "^3.0.1"
+    nth-check "^2.0.1"
+
+css-what@^6.0.1, css-what@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+debug@4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+deepmerge@^4.2.2:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+dom-converter@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
+dom-serializer@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+dom-serializer@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+  integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.2"
+    entities "^4.2.0"
+
+domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domhandler@^5.0.2, domhandler@^5.0.3:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+  integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+  dependencies:
+    domelementtype "^2.3.0"
+
+domutils@^2.5.2, domutils@^2.8.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+domutils@^3.0.1:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+  integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+  dependencies:
+    dom-serializer "^2.0.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+
+dot-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+electron-to-chromium@^1.4.284:
+  version "1.4.407"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz#087e2ab97b3eb092aa6217c05986086b7dd370cc"
+  integrity sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg==
+
+enhanced-resolve@^5.14.1:
+  version "5.14.1"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3"
+  integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+entities@^4.2.0, entities@^4.4.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+envinfo@^7.7.3:
+  version "7.8.1"
+  resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
+  integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
+
+es-module-lexer@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527"
+  integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+eslint-scope@5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^4.1.1"
+
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+events@^3.2.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+fast-deep-equal@^3.1.1:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fastest-levenshtein@^1.0.12:
+  version "1.0.16"
+  resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
+  integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+find-up@5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+  dependencies:
+    locate-path "^6.0.0"
+    path-exists "^4.0.0"
+
+find-up@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+  dependencies:
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob-to-regexp@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@9.3.2:
+  version "9.3.2"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda"
+  integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    minimatch "^7.4.1"
+    minipass "^4.2.4"
+    path-scurry "^1.6.1"
+
+graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+he@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+html-minifier-terser@^6.0.2:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+  integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+  dependencies:
+    camel-case "^4.1.2"
+    clean-css "^5.2.2"
+    commander "^8.3.0"
+    he "^1.2.0"
+    param-case "^3.0.4"
+    relateurl "^0.2.7"
+    terser "^5.10.0"
+
+html-webpack-plugin@^5.3.2:
+  version "5.5.1"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763"
+  integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==
+  dependencies:
+    "@types/html-minifier-terser" "^6.0.0"
+    html-minifier-terser "^6.0.2"
+    lodash "^4.17.21"
+    pretty-error "^4.0.0"
+    tapable "^2.0.0"
+
+htmlparser2@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+  integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.0.0"
+    domutils "^2.5.2"
+    entities "^2.0.0"
+
+htmlparser2@^8.0.1:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+  integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+    entities "^4.4.0"
+
+https-proxy-agent@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+import-local@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+  integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+  dependencies:
+    pkg-dir "^4.2.0"
+    resolve-cwd "^3.0.0"
+
+interpret@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
+  integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-core-module@^2.11.0:
+  version "2.12.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+  dependencies:
+    has "^1.0.3"
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+jest-worker@^27.4.5:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+  integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+json-parse-even-better-errors@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+loader-runner@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+locate-path@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+  dependencies:
+    p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+  dependencies:
+    p-locate "^5.0.0"
+
+lodash@^4.17.20, lodash@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+lower-case@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+  dependencies:
+    tslib "^2.0.3"
+
+lru-cache@^9.1.1:
+  version "9.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1"
+  integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==
+
+lru_map@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
+  integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
+
+magic-string@0.27.0:
+  version "0.27.0"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3"
+  integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.4.13"
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.27:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+minimatch@^7.4.1:
+  version "7.4.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb"
+  integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minipass@^4.2.4:
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a"
+  integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==
+
+"minipass@^5.0.0 || ^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81"
+  integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+neo-async@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+no-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+  dependencies:
+    lower-case "^2.0.2"
+    tslib "^2.0.3"
+
+node-fetch@^2.6.7:
+  version "2.6.11"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
+  integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-releases@^2.0.8:
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
+  integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
+p-limit@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+  dependencies:
+    yocto-queue "^0.1.0"
+
+p-locate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+  dependencies:
+    p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+  dependencies:
+    p-limit "^3.0.2"
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+param-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+  dependencies:
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
+
+parse5-htmlparser2-tree-adapter@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
+  integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==
+  dependencies:
+    domhandler "^5.0.2"
+    parse5 "^7.0.0"
+
+parse5@^7.0.0:
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+  integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+  dependencies:
+    entities "^4.4.0"
+
+pascal-case@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+path-exists@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.6.1:
+  version "1.9.2"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
+  integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
+  dependencies:
+    lru-cache "^9.1.1"
+    minipass "^5.0.0 || ^6.0.2"
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pkg-dir@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
+pretty-error@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
+  integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==
+  dependencies:
+    lodash "^4.17.20"
+    renderkid "^3.0.0"
+
+progress@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+punycode@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
+randombytes@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+rechoir@^0.7.0:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
+  integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
+  dependencies:
+    resolve "^1.9.0"
+
+relateurl@^0.2.7:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+renderkid@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
+  integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==
+  dependencies:
+    css-select "^4.1.3"
+    dom-converter "^0.2.0"
+    htmlparser2 "^6.1.0"
+    lodash "^4.17.21"
+    strip-ansi "^6.0.1"
+
+resolve-cwd@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+  dependencies:
+    resolve-from "^5.0.0"
+
+resolve-from@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve@^1.9.0:
+  version "1.22.2"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
+  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
+  dependencies:
+    is-core-module "^2.11.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+safe-buffer@^5.1.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+schema-utils@^3.1.1, schema-utils@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99"
+  integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
+serialize-javascript@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
+  integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
+  dependencies:
+    randombytes "^2.1.0"
+
+shallow-clone@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+  dependencies:
+    kind-of "^6.0.2"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.0:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+supports-color@^8.0.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+terser-webpack-plugin@^5.3.7:
+  version "5.3.9"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
+  integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jest-worker "^27.4.5"
+    schema-utils "^3.1.1"
+    serialize-javascript "^6.0.1"
+    terser "^5.16.8"
+
+terser@^5.10.0, terser@^5.16.8:
+  version "5.17.6"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de"
+  integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==
+  dependencies:
+    "@jridgewell/source-map" "^0.3.2"
+    acorn "^8.5.0"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+tslib@^1.9.3:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.3, tslib@^2.3.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338"
+  integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==
+
+unplugin@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f"
+  integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==
+  dependencies:
+    acorn "^8.8.1"
+    chokidar "^3.5.3"
+    webpack-sources "^3.2.3"
+    webpack-virtual-modules "^0.5.0"
+
+update-browserslist-db@^1.0.10:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
+  integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
+
+uuid@^9.0.0:
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
+  integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
+
+warnings-to-errors-webpack-plugin@^2.0.1:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/warnings-to-errors-webpack-plugin/-/warnings-to-errors-webpack-plugin-2.3.0.tgz#5f9a58aaec458feafabe0f7a2b88a492db263a30"
+  integrity sha512-fzOyw+Ctr2MqJ+4UXKobDiOLzMMSBAdvGMWvZ4NRgTBCofAL2mmdfr6/Of3Bqz9Sq6R6xT5dLs6nnLLCtmppeQ==
+
+watchpack@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
+  integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
+  dependencies:
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.1.2"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+webpack-cli@^4.7.2:
+  version "4.10.0"
+  resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31"
+  integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==
+  dependencies:
+    "@discoveryjs/json-ext" "^0.5.0"
+    "@webpack-cli/configtest" "^1.2.0"
+    "@webpack-cli/info" "^1.5.0"
+    "@webpack-cli/serve" "^1.7.0"
+    colorette "^2.0.14"
+    commander "^7.0.0"
+    cross-spawn "^7.0.3"
+    fastest-levenshtein "^1.0.12"
+    import-local "^3.0.2"
+    interpret "^2.2.0"
+    rechoir "^0.7.0"
+    webpack-merge "^5.7.3"
+
+webpack-merge@^5.7.3:
+  version "5.9.0"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826"
+  integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==
+  dependencies:
+    clone-deep "^4.0.1"
+    wildcard "^2.0.0"
+
+webpack-sources@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack-virtual-modules@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c"
+  integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==
+
+webpack@^5.48.0:
+  version "5.84.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.84.0.tgz#011115617668744aece87a9eb68534487d84de1a"
+  integrity sha512-XezNK3kwJq6IyeoZmZ1uEqQs+42nTqIi4jYM/YjLwaJedUC1N3bwnCC0+UcnHJPfqWX0kGrQnMIvZZyWYaIZrA==
+  dependencies:
+    "@types/eslint-scope" "^3.7.3"
+    "@types/estree" "^1.0.0"
+    "@webassemblyjs/ast" "^1.11.5"
+    "@webassemblyjs/wasm-edit" "^1.11.5"
+    "@webassemblyjs/wasm-parser" "^1.11.5"
+    acorn "^8.7.1"
+    acorn-import-assertions "^1.9.0"
+    browserslist "^4.14.5"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^5.14.1"
+    es-module-lexer "^1.2.1"
+    eslint-scope "5.1.1"
+    events "^3.2.0"
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.2.9"
+    json-parse-even-better-errors "^2.3.1"
+    loader-runner "^4.2.0"
+    mime-types "^2.1.27"
+    neo-async "^2.6.2"
+    schema-utils "^3.1.2"
+    tapable "^2.1.1"
+    terser-webpack-plugin "^5.3.7"
+    watchpack "^2.4.0"
+    webpack-sources "^3.2.3"
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+which@^2.0.1, which@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wildcard@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+  integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/src/common/normalize.ts b/src/common/normalize.ts
index 68e708fd..4ccb50d9 100644
--- a/src/common/normalize.ts
+++ b/src/common/normalize.ts
@@ -45,6 +45,13 @@ export function normalizeEvent(event: Event, basePath: string): Event {
     }
   }
 
+  // We need to normalize debug ID images the same way as the stack frames for symbolicator to match them correctly
+  for (const debugImage of event.debug_meta?.images || []) {
+    if (debugImage.type === 'sourcemap') {
+      debugImage.code_file = normalizeUrl(debugImage.code_file, basePath);
+    }
+  }
+
   if (event.transaction) {
     event.transaction = normalizeUrl(event.transaction, basePath);
   }

From e3ae8aa8a023abd9d023e1014b4413524fde7c93 Mon Sep 17 00:00:00 2001
From: Luca Forstner <luca.forstner@sentry.io>
Date: Fri, 26 May 2023 14:05:52 +0200
Subject: [PATCH 101/239] chore: Update changelog for release (#678)

---
 CHANGELOG.md | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 87c20b43..48904e24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,14 +2,22 @@
 
 ## Unreleased
 
+## 4.6.0
+
+- feat: Update to [v7.50.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.50.0) of JavaScript SDKs
+  (#671)
+- fix: Fix debug ID matching by normalizing `debug_meta` paths (#676)
+
 ## 4.5.0
+
 - feat: Update to [v7.48.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.48.0) of JavaScript SDKs
   (#662)
 - fix: IPC protocol should be registered as secure (#664)
 
 ## 4.4.0
 
-- feat: Update to [v7.46.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.46.0) of JavaScript SDKs (#657)
+- feat: Update to [v7.46.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.46.0) of JavaScript SDKs
+  (#657)
 
 ## 4.3.0
 

From a7d8818d2f2e10d8a1fcb6c7794689c77101b341 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Fri, 26 May 2023 13:53:07 +0000
Subject: [PATCH 102/239] release: 4.6.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index ae31926c..24d820f1 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.5.0",
+  "version": "4.6.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 1300dfc41f41d6e958c38d831638a7132f192852 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 6 Jun 2023 11:35:33 +0200
Subject: [PATCH 103/239] chore(deps-dev): bump vite from 3.2.6 to 3.2.7 in
 /examples/electron-vite (#681)

---
 examples/electron-vite/package.json | 2 +-
 examples/electron-vite/yarn.lock    | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json
index 12cd405c..58951181 100644
--- a/examples/electron-vite/package.json
+++ b/examples/electron-vite/package.json
@@ -17,6 +17,6 @@
   "devDependencies": {
     "@vitejs/plugin-vue": "^3.1.2",
     "electron": "23.0.0",
-    "vite": "^3.1.8"
+    "vite": "^3.2.7"
   }
 }
diff --git a/examples/electron-vite/yarn.lock b/examples/electron-vite/yarn.lock
index 586ad2d5..15a81a39 100644
--- a/examples/electron-vite/yarn.lock
+++ b/examples/electron-vite/yarn.lock
@@ -1286,10 +1286,10 @@ unplugin@1.0.1:
     webpack-sources "^3.2.3"
     webpack-virtual-modules "^0.5.0"
 
-vite@^3.1.8:
-  version "3.2.6"
-  resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.6.tgz#a0538710e69532225d9c0ba6a23f4158b51267fd"
-  integrity sha512-nTXTxYVvaQNLoW5BQ8PNNQ3lPia57gzsQU/Khv+JvzKPku8kNZL6NMUR/qwXhMG6E+g1idqEPanomJ+VZgixEg==
+vite@^3.2.7:
+  version "3.2.7"
+  resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.7.tgz#35a62826bd4d6b778ae5db8766d023bcd4e7bef3"
+  integrity sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==
   dependencies:
     esbuild "^0.15.9"
     postcss "^8.4.18"

From a5e770cfa35a9400e495946c18deb1ca3491d594 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 6 Jun 2023 14:45:20 +0200
Subject: [PATCH 104/239] ci: Use `setup-node` rather than `volta` (#684)

---
 .github/workflows/build.yml                    | 16 ++++++++++++----
 .github/workflows/new-electron-versions-pr.yml |  4 +++-
 .github/workflows/new-sdk-versions-pr.yml      |  4 +++-
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6e53ab99..f870740c 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -15,7 +15,9 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
-      - uses: volta-cli/action@v3
+      - uses: actions/setup-node@v3
+        with:
+          node-version-file: 'package.json'
       - name: Install
         run: yarn install
       - name: Build
@@ -38,7 +40,9 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
-      - uses: volta-cli/action@v3
+      - uses: actions/setup-node@v3
+        with:
+          node-version-file: 'package.json'
       - run: yarn install
       - name: Run Linter
         run: yarn lint
@@ -54,7 +58,9 @@ jobs:
         os: [ubuntu-latest, macos-latest, windows-latest]
     steps:
       - uses: actions/checkout@v3
-      - uses: volta-cli/action@v3
+      - uses: actions/setup-node@v3
+        with:
+          node-version-file: 'package.json'
       - run: yarn install
       - name: Run Unit Tests
         run: yarn test
@@ -72,7 +78,9 @@ jobs:
       ELECTRON_VERSION: ${{ matrix.electron }}
     steps:
       - uses: actions/checkout@v3
-      - uses: volta-cli/action@v3
+      - uses: actions/setup-node@v3
+        with:
+          node-version-file: 'package.json'
       - run: yarn install
       - name: Run E2E Tests
         run: yarn e2e
diff --git a/.github/workflows/new-electron-versions-pr.yml b/.github/workflows/new-electron-versions-pr.yml
index ca7abfc1..9b6c8f64 100644
--- a/.github/workflows/new-electron-versions-pr.yml
+++ b/.github/workflows/new-electron-versions-pr.yml
@@ -10,7 +10,9 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
-      - uses: volta-cli/action@v3
+      - uses: actions/setup-node@v3
+        with:
+          node-version-file: 'package.json'
       - run: yarn install
       - name: Update Versions
         run: yarn update-electron-versions
diff --git a/.github/workflows/new-sdk-versions-pr.yml b/.github/workflows/new-sdk-versions-pr.yml
index 32b2c2e1..616eaef2 100644
--- a/.github/workflows/new-sdk-versions-pr.yml
+++ b/.github/workflows/new-sdk-versions-pr.yml
@@ -10,7 +10,9 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
-      - uses: volta-cli/action@v3
+      - uses: actions/setup-node@v3
+        with:
+          node-version-file: 'package.json'
       - run: yarn install
       - name: Update Versions
         run: yarn update-sdk-versions

From 5f9ee2c6355204de4c7fb92a0ca5c518c81c26ea Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 13 Jun 2023 19:48:49 +0200
Subject: [PATCH 105/239] feat: Update to v7.55.0 of Sentry JavaScript SDKs
 (#682)

---
 package.json                               |  14 +--
 src/main/integrations/electron-minidump.ts |  16 ++-
 src/renderer/sdk.ts                        |   2 +-
 test/unit/stack-parse.test.ts              |   4 +-
 yarn.lock                                  | 124 ++++++++++-----------
 5 files changed, 85 insertions(+), 75 deletions(-)

diff --git a/package.json b/package.json
index 24d820f1..06372e52 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.50.0",
-    "@sentry/core": "7.50.0",
-    "@sentry/node": "7.50.0",
-    "@sentry/types": "7.50.0",
-    "@sentry/utils": "7.50.0",
+    "@sentry/browser": "7.55.0",
+    "@sentry/core": "7.55.0",
+    "@sentry/node": "7.55.0",
+    "@sentry/types": "7.55.0",
+    "@sentry/utils": "7.55.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.50.0",
-    "@sentry-internal/typescript": "7.50.0",
+    "@sentry-internal/eslint-config-sdk": "7.55.0",
+    "@sentry-internal/typescript": "7.55.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index bc4706ba..989ed382 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -42,8 +42,12 @@ function getScope(options: NodeOptions): Event {
  * Returns the minidump endpoint in Sentry
  * @param dsn Dsn
  */
-export function minidumpUrlFromDsn(dsn: string): string {
-  const { host, path, projectId, port, protocol, publicKey } = makeDsn(dsn);
+export function minidumpUrlFromDsn(dsn: string): string | undefined {
+  const dsnComponents = makeDsn(dsn);
+  if (!dsnComponents) {
+    return undefined;
+  }
+  const { host, path, projectId, port, protocol, publicKey } = dsnComponents;
   return `${protocol}://${host}${port !== '' ? `:${port}` : ''}${
     path !== '' ? `/${path}` : ''
   }/api/${projectId}/minidump/?sentry_key=${publicKey}`;
@@ -106,6 +110,12 @@ export class ElectronMinidump implements Integration {
    * Starts the native crash reporter
    */
   private _startCrashReporter(options: NodeOptions): void {
+    const submitURL = minidumpUrlFromDsn(options.dsn || '');
+    if (!submitURL) {
+      logger.log('Invalid DSN. Cannot start Electron crashReporter');
+      return;
+    }
+
     // We don't add globalExtra when Breakpad is in use because it doesn't support JSON like strings:
     // https://github.com/electron/electron/issues/29711
     const globalExtra = usesCrashpad() ? { sentry___initialScope: JSON.stringify(getScope(options)) } : undefined;
@@ -116,7 +126,7 @@ export class ElectronMinidump implements Integration {
       companyName: '',
       ignoreSystemCrashHandler: true,
       productName: app.name || app.getName(),
-      submitURL: minidumpUrlFromDsn(options.dsn || ''),
+      submitURL,
       uploadToServer: true,
       compress: true,
       globalExtra,
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index dacf2332..16375335 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_50_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_55_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/unit/stack-parse.test.ts b/test/unit/stack-parse.test.ts
index 9549c4e1..d9f8276d 100644
--- a/test/unit/stack-parse.test.ts
+++ b/test/unit/stack-parse.test.ts
@@ -156,14 +156,14 @@ describe('Parse mixed renderer stack traces', () => {
       {
         filename: 'http://localhost:12345/src/index.html',
         function: 'one',
-        in_app: false,
+        in_app: true,
         lineno: 24,
         colno: 9,
       },
       {
         filename: 'http://localhost:12345/src/index.html',
         function: 'two',
-        in_app: false,
+        in_app: true,
         lineno: 17,
         colno: 11,
       },
diff --git a/yarn.lock b/yarn.lock
index 4a906036..13036d38 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.50.0.tgz#b4210244f1bf69e035cf924f34f8cb8b0e50be31"
-  integrity sha512-jge0KvAH9kUcphiWftLqIYmKM0Wm0/cZUWPBtnc8ApNDGCOZhj0uX8zTEWSAZb2YOXv5AikCEfshPGuftlXYBg==
+"@sentry-internal/eslint-config-sdk@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.55.0.tgz#31f306269eba5d9c93baf94d88b18eeffefb0c8a"
+  integrity sha512-NMGvnhvNIw10JvCb6ftxf2no509UQD55Z+bSOeIrz+NyOsw1Ain8WeO2M+xu/cuRALUx29fn2/tGI8gqvBRlXg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.50.0"
-    "@sentry-internal/typescript" "7.50.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.55.0"
+    "@sentry-internal/typescript" "7.55.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,83 +143,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.50.0.tgz#a42a9acad3fc87af5f9d82d5c02adc8bc69c69b6"
-  integrity sha512-DFDqs43Pc6sIYHGysYO9E+Z4hkUs4cbmo9e+vWnRKlsQDfHs/+BirsX6pH07m/sbWxKwwdUbel3I+yOXJF9jxQ==
+"@sentry-internal/eslint-plugin-sdk@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.55.0.tgz#f44fbaf761e9cf22c14eb81985246e080e0f5a4c"
+  integrity sha512-DeotHRe1d9JPuPqYgKJjsJdjxZibDco8L99MMiYonIfYBZgwTLc/eaM3bf5uFqRx+MWd2sFphzfFGyBN4QA11w==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.50.0.tgz#74454af99a03d81762993835d2687c881e14f41e"
-  integrity sha512-4TQ4vN0aMBWsUXfJWk2xbe4x7fKfwCXgXKTtHC/ocwwKM+0EefV5Iw9YFG8IrIQN4vMtuRzktqcs9q0/Sbv7tg==
+"@sentry-internal/tracing@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.55.0.tgz#4ecdc1e62590b19c51b6b0d8f4cd09d13fe4beca"
+  integrity sha512-Bm82Z2tHcz4BF8CQDfYT5LeZPpuePWNHcxTSknJImPpPlQnol++2WQtloZZOs5FxllXL08UjN3LphRKmiEQsVQ==
   dependencies:
-    "@sentry/core" "7.50.0"
-    "@sentry/types" "7.50.0"
-    "@sentry/utils" "7.50.0"
+    "@sentry/core" "7.55.0"
+    "@sentry/types" "7.55.0"
+    "@sentry/utils" "7.55.0"
     tslib "^1.9.3"
 
-"@sentry-internal/typescript@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.50.0.tgz#31d76a36bba025ca35edefc6d1dae6afac26d4f1"
-  integrity sha512-cCWBqAcKWByS7z9x2oqsFl6/fT4EhFgb6OYShPlsOwP5UYthIJqDDFZJiFb9qSejQeENgSyWE63dIMVMtUI5sQ==
-
-"@sentry/browser@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.50.0.tgz#16c995c336322c8aec65570f90f50288678004ec"
-  integrity sha512-a+UYbP89+SAvW47/p9wxEi9eWlyp/SkYl52OCdZNXnplQY4kQIOVyiaIs5nnCxIxZgXKrhAX4eo1E9ykleFuNQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.50.0"
-    "@sentry/core" "7.50.0"
-    "@sentry/replay" "7.50.0"
-    "@sentry/types" "7.50.0"
-    "@sentry/utils" "7.50.0"
+"@sentry-internal/typescript@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.55.0.tgz#7bd1dcd8f4795a410a999fd8afa0011b037c6ada"
+  integrity sha512-bbhkdEmEfZu3WZKjd+IIBwjhwDLpCE8lx/noFKp/Fq7AOHxM8xA93THY2CR9ZZCvoQgoWLzwx5GFpPdVsdspXw==
+
+"@sentry/browser@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.55.0.tgz#b3219e03c8f4579c5f8e101fe4c285ed7bbe5f73"
+  integrity sha512-ukwj7MBkZx0IBDL5MfNcerZp8p5M85m+AZ7LFEw2aMVFSt4HEmp1CPQYpubORMcP+oq+BHGJ6khkvNQlM4D7+g==
+  dependencies:
+    "@sentry-internal/tracing" "7.55.0"
+    "@sentry/core" "7.55.0"
+    "@sentry/replay" "7.55.0"
+    "@sentry/types" "7.55.0"
+    "@sentry/utils" "7.55.0"
     tslib "^1.9.3"
 
-"@sentry/core@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.50.0.tgz#88bc9cbfc0cb429a28489ece6f0be7a7006436c4"
-  integrity sha512-6oD1a3fYs4aiNK7tuJSd88LHjYJAetd7ZK/AfJniU7zWKj4jxIYfO8nhm0qdnhEDs81RcweVDmPhWm3Kwrzzsg==
+"@sentry/core@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.55.0.tgz#0a02f8bf7f083a52b344e03f1fe0b8bd092765af"
+  integrity sha512-ClOcxdAlX7aS52UQQFc7zAIoqyV24wZnDamJTNtnygETGhrjsj4sUyhelF0xecn5gyYJQ0pfT55iBTGacms8Ag==
   dependencies:
-    "@sentry/types" "7.50.0"
-    "@sentry/utils" "7.50.0"
+    "@sentry/types" "7.55.0"
+    "@sentry/utils" "7.55.0"
     tslib "^1.9.3"
 
-"@sentry/node@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.50.0.tgz#d6adab136d87f7dca614ea0d77944f902fa45626"
-  integrity sha512-11UJBKoQFMp7f8sbzeO2gENsKIUkVCNBTzuPRib7l2K1HMjSfacXmwwma7ZEs0mc3ofIZ1UYuyONAXmI1lK9cQ==
+"@sentry/node@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.55.0.tgz#ee4df42dda1c38f27708f078daaa1f8062583c6b"
+  integrity sha512-X7v1LoZu6mlZAg7eDz+gU4V0QdfcKcZjI/4bxl6E9yKX6VH5ORuNaNujWXMfzu7Yvu8Dtp+JZ0ZDa+9nEmXbZQ==
   dependencies:
-    "@sentry-internal/tracing" "7.50.0"
-    "@sentry/core" "7.50.0"
-    "@sentry/types" "7.50.0"
-    "@sentry/utils" "7.50.0"
+    "@sentry-internal/tracing" "7.55.0"
+    "@sentry/core" "7.55.0"
+    "@sentry/types" "7.55.0"
+    "@sentry/utils" "7.55.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^1.9.3"
 
-"@sentry/replay@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.50.0.tgz#dd29f063492d91e708629ff8dd95a59d4b7180f1"
-  integrity sha512-EYRk+DTZ5luwfkiCaDpBC3YBKIEdkReTUNZtWDVUytSVjsCnttkAipx/y6bxy3HN+rSXungMd3XKQT5RNMRUNA==
+"@sentry/replay@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.55.0.tgz#9332bf749a01c418ebc1b392358ca4a335471f31"
+  integrity sha512-SRWYNgSTGjUBONRJk939MJTynk6fxK524J5Sa/ABHHo+Gow1O8F1q9GY4OIIGkh0Giz8rO6vePWBwuDE6F7B2Q==
   dependencies:
-    "@sentry/core" "7.50.0"
-    "@sentry/types" "7.50.0"
-    "@sentry/utils" "7.50.0"
+    "@sentry/core" "7.55.0"
+    "@sentry/types" "7.55.0"
+    "@sentry/utils" "7.55.0"
 
-"@sentry/types@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.50.0.tgz#52a035cad83a80ca26fa53c09eb1241250c3df3e"
-  integrity sha512-Zo9vyI98QNeYT0K0y57Rb4JRWDaPEgmp+QkQ4CRQZFUTWetO5fvPZ4Gb/R7TW16LajuHZlbJBHmvmNj2pkL2kw==
+"@sentry/types@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.55.0.tgz#97baff0d9fc2e2946366ff2569f0a44cc0dd9d37"
+  integrity sha512-e8VLiR0NIYd1Y5SlATp3eSARTYmbpNEYsX2b3a1E0NDZj+G5eOqef7k6ab6Y30LUrqrqmkDE0VJqTtnI3pMzzg==
 
-"@sentry/utils@7.50.0":
-  version "7.50.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.50.0.tgz#2b93a48024651436e95b7c8e2066aee7c2234d57"
-  integrity sha512-iyPwwC6fwJsiPhH27ZbIiSsY5RaccHBqADS2zEjgKYhmP4P9WGgHRDrvLEnkOjqQyKNb6c0yfmv83n0uxYnolw==
+"@sentry/utils@7.55.0":
+  version "7.55.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.55.0.tgz#cb1ab6a5534755a27611257edafe09ae1df01375"
+  integrity sha512-18YU0fLhlr/e7lUyMkh/BEE05N8DG9lzWToz6c9DOYw6pTyt2EXZrxho+BcYufd7IayU0Twb0sp8EX/wfggYxA==
   dependencies:
-    "@sentry/types" "7.50.0"
+    "@sentry/types" "7.55.0"
     tslib "^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 26b4461116048f2a1b34d27d45379c2d53fa2936 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 29 Jun 2023 19:16:57 +0200
Subject: [PATCH 106/239] test: New Electron Versions (#689)

---
 test/e2e/test-apps/other/browser-tracing/recipe.yml | 4 +++-
 test/e2e/versions.json                              | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/test/e2e/test-apps/other/browser-tracing/recipe.yml b/test/e2e/test-apps/other/browser-tracing/recipe.yml
index 3a5a812a..90bd04f6 100644
--- a/test/e2e/test-apps/other/browser-tracing/recipe.yml
+++ b/test/e2e/test-apps/other/browser-tracing/recipe.yml
@@ -1,3 +1,5 @@
 description: Browser Tracing
 command: yarn
-condition: version.major >= 3
+# Browser Tracing fails on Electron v24
+condition: version.major >= 3 && version.major != 24
+```
diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index b29954d2..b0f63cc9 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.4","23.2.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.15","23.3.9","24.6.1","25.2.0"]

From 902d85f57eac76bfa6b8f24fc65951740ffb4c92 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 29 Jun 2023 19:17:12 +0200
Subject: [PATCH 107/239] feat: Update to v7.57.0 of Sentry JavaScript SDKs
 (#690)

---
 package.json                                |  14 +-
 src/main/context.ts                         |   2 +-
 src/main/store.ts                           |   2 +-
 src/main/transports/electron-offline-net.ts |   2 +-
 src/renderer/sdk.ts                         |   2 +-
 yarn.lock                                   | 153 ++++++++++----------
 6 files changed, 90 insertions(+), 85 deletions(-)

diff --git a/package.json b/package.json
index 06372e52..10905278 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.55.0",
-    "@sentry/core": "7.55.0",
-    "@sentry/node": "7.55.0",
-    "@sentry/types": "7.55.0",
-    "@sentry/utils": "7.55.0",
+    "@sentry/browser": "7.57.0",
+    "@sentry/core": "7.57.0",
+    "@sentry/node": "7.57.0",
+    "@sentry/types": "7.57.0",
+    "@sentry/utils": "7.57.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.55.0",
-    "@sentry-internal/typescript": "7.55.0",
+    "@sentry-internal/eslint-config-sdk": "7.57.0",
+    "@sentry-internal/typescript": "7.57.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/main/context.ts b/src/main/context.ts
index 8062dc03..6bff27e9 100644
--- a/src/main/context.ts
+++ b/src/main/context.ts
@@ -330,5 +330,5 @@ export async function getEventDefaults(release?: string, environment?: string):
     cachedDefaultsPromise = _getEventDefaults(release, environment);
   }
 
-  return await cachedDefaultsPromise;
+  return cachedDefaultsPromise;
 }
diff --git a/src/main/store.ts b/src/main/store.ts
index 291de428..94887d00 100644
--- a/src/main/store.ts
+++ b/src/main/store.ts
@@ -77,7 +77,7 @@ export class Store<T> {
    * constructor is used.
    */
   public async get(): Promise<T> {
-    return await this._lock.runExclusive(async () => {
+    return this._lock.runExclusive(async () => {
       if (this._data === undefined) {
         try {
           this._data = JSON.parse(await readFileAsync(this._path, 'utf8'), dateReviver) as T;
diff --git a/src/main/transports/electron-offline-net.ts b/src/main/transports/electron-offline-net.ts
index 3edea316..ef45dd6b 100644
--- a/src/main/transports/electron-offline-net.ts
+++ b/src/main/transports/electron-offline-net.ts
@@ -140,7 +140,7 @@ export function makeElectronOfflineTransport(options: ElectronOfflineTransportOp
     }
 
     if (action == 'queue') {
-      return await queueRequest(request);
+      return queueRequest(request);
     }
 
     logger.log('Dropping request');
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 16375335..05bf87f6 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_55_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_57_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 13036d38..6e122406 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.55.0.tgz#31f306269eba5d9c93baf94d88b18eeffefb0c8a"
-  integrity sha512-NMGvnhvNIw10JvCb6ftxf2no509UQD55Z+bSOeIrz+NyOsw1Ain8WeO2M+xu/cuRALUx29fn2/tGI8gqvBRlXg==
+"@sentry-internal/eslint-config-sdk@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.57.0.tgz#8448eb63869aa618ebb6082e3e2f50660d6260f0"
+  integrity sha512-uuKNIkVxkA69c08j90RJ3nVGVY26vt0KXC0ApvC3UsjDM9mtzksOIf/epKY4PyuRw5y3BcQUXE36zhM02Dk+OA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.55.0"
-    "@sentry-internal/typescript" "7.55.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.57.0"
+    "@sentry-internal/typescript" "7.57.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,84 +143,84 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.55.0.tgz#f44fbaf761e9cf22c14eb81985246e080e0f5a4c"
-  integrity sha512-DeotHRe1d9JPuPqYgKJjsJdjxZibDco8L99MMiYonIfYBZgwTLc/eaM3bf5uFqRx+MWd2sFphzfFGyBN4QA11w==
+"@sentry-internal/eslint-plugin-sdk@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.57.0.tgz#bbab4ceed6f722d956107b5982db4747c00d56a1"
+  integrity sha512-c1Lz5sFSLlaxQoveCgxTLlvta+uW9DeJzHQWdNn0Q5IxzUo418k0BrxTT2V0P6Ch0i/d+QyaucFEhoKHk/YJJg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.55.0.tgz#4ecdc1e62590b19c51b6b0d8f4cd09d13fe4beca"
-  integrity sha512-Bm82Z2tHcz4BF8CQDfYT5LeZPpuePWNHcxTSknJImPpPlQnol++2WQtloZZOs5FxllXL08UjN3LphRKmiEQsVQ==
-  dependencies:
-    "@sentry/core" "7.55.0"
-    "@sentry/types" "7.55.0"
-    "@sentry/utils" "7.55.0"
-    tslib "^1.9.3"
-
-"@sentry-internal/typescript@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.55.0.tgz#7bd1dcd8f4795a410a999fd8afa0011b037c6ada"
-  integrity sha512-bbhkdEmEfZu3WZKjd+IIBwjhwDLpCE8lx/noFKp/Fq7AOHxM8xA93THY2CR9ZZCvoQgoWLzwx5GFpPdVsdspXw==
-
-"@sentry/browser@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.55.0.tgz#b3219e03c8f4579c5f8e101fe4c285ed7bbe5f73"
-  integrity sha512-ukwj7MBkZx0IBDL5MfNcerZp8p5M85m+AZ7LFEw2aMVFSt4HEmp1CPQYpubORMcP+oq+BHGJ6khkvNQlM4D7+g==
-  dependencies:
-    "@sentry-internal/tracing" "7.55.0"
-    "@sentry/core" "7.55.0"
-    "@sentry/replay" "7.55.0"
-    "@sentry/types" "7.55.0"
-    "@sentry/utils" "7.55.0"
-    tslib "^1.9.3"
-
-"@sentry/core@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.55.0.tgz#0a02f8bf7f083a52b344e03f1fe0b8bd092765af"
-  integrity sha512-ClOcxdAlX7aS52UQQFc7zAIoqyV24wZnDamJTNtnygETGhrjsj4sUyhelF0xecn5gyYJQ0pfT55iBTGacms8Ag==
-  dependencies:
-    "@sentry/types" "7.55.0"
-    "@sentry/utils" "7.55.0"
-    tslib "^1.9.3"
-
-"@sentry/node@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.55.0.tgz#ee4df42dda1c38f27708f078daaa1f8062583c6b"
-  integrity sha512-X7v1LoZu6mlZAg7eDz+gU4V0QdfcKcZjI/4bxl6E9yKX6VH5ORuNaNujWXMfzu7Yvu8Dtp+JZ0ZDa+9nEmXbZQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.55.0"
-    "@sentry/core" "7.55.0"
-    "@sentry/types" "7.55.0"
-    "@sentry/utils" "7.55.0"
+"@sentry-internal/tracing@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551"
+  integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A==
+  dependencies:
+    "@sentry/core" "7.57.0"
+    "@sentry/types" "7.57.0"
+    "@sentry/utils" "7.57.0"
+    tslib "^2.4.1 || ^1.9.3"
+
+"@sentry-internal/typescript@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.57.0.tgz#2f0d226cd23aca5e451a7192354d0244a1ec4224"
+  integrity sha512-vj49MhqOnd+VLKlOoGpTCE7N3dWxyaBFuqpy1vkOFkP/r/n4PCJpbeqM4HQ1dKAeKKK6lV/FvZTdy5vZWnE9VA==
+
+"@sentry/browser@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.57.0.tgz#6e724c9eac680dba99ced0fdf81be8d1e3b3bceb"
+  integrity sha512-E0HaYYlaqHFiIRZXxcvOO8Odvlt+TR1vFFXzqUWXPOvDRxURglTOCQ3EN/u6bxtAGJ6y/Zc2obgihTtypuel/w==
+  dependencies:
+    "@sentry-internal/tracing" "7.57.0"
+    "@sentry/core" "7.57.0"
+    "@sentry/replay" "7.57.0"
+    "@sentry/types" "7.57.0"
+    "@sentry/utils" "7.57.0"
+    tslib "^2.4.1 || ^1.9.3"
+
+"@sentry/core@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb"
+  integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw==
+  dependencies:
+    "@sentry/types" "7.57.0"
+    "@sentry/utils" "7.57.0"
+    tslib "^2.4.1 || ^1.9.3"
+
+"@sentry/node@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.57.0.tgz#31052f5988ed4496d7f3ff925240cf9b02d09941"
+  integrity sha512-63mjyUVM6sfJFVQ5TGVRVGUsoEfESl5ABzIW1W0s9gUiQPaG8SOdaQJglb2VNrkMYxnRHgD8Q9LUh/qcmUyPGw==
+  dependencies:
+    "@sentry-internal/tracing" "7.57.0"
+    "@sentry/core" "7.57.0"
+    "@sentry/types" "7.57.0"
+    "@sentry/utils" "7.57.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
-    tslib "^1.9.3"
+    tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.55.0.tgz#9332bf749a01c418ebc1b392358ca4a335471f31"
-  integrity sha512-SRWYNgSTGjUBONRJk939MJTynk6fxK524J5Sa/ABHHo+Gow1O8F1q9GY4OIIGkh0Giz8rO6vePWBwuDE6F7B2Q==
+"@sentry/replay@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.57.0.tgz#c8f7eae7b7edc9d32c3d2955b337f3b3c76dff39"
+  integrity sha512-pN4ryNS3J5EYbkXvR+O/+hseAJha7XDl8mPFtK0OGTHG10JzCi4tQJazblHQdpb5QBaMMPCeZ+isyfoQLDNXnw==
   dependencies:
-    "@sentry/core" "7.55.0"
-    "@sentry/types" "7.55.0"
-    "@sentry/utils" "7.55.0"
+    "@sentry/core" "7.57.0"
+    "@sentry/types" "7.57.0"
+    "@sentry/utils" "7.57.0"
 
-"@sentry/types@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.55.0.tgz#97baff0d9fc2e2946366ff2569f0a44cc0dd9d37"
-  integrity sha512-e8VLiR0NIYd1Y5SlATp3eSARTYmbpNEYsX2b3a1E0NDZj+G5eOqef7k6ab6Y30LUrqrqmkDE0VJqTtnI3pMzzg==
+"@sentry/types@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce"
+  integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w==
 
-"@sentry/utils@7.55.0":
-  version "7.55.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.55.0.tgz#cb1ab6a5534755a27611257edafe09ae1df01375"
-  integrity sha512-18YU0fLhlr/e7lUyMkh/BEE05N8DG9lzWToz6c9DOYw6pTyt2EXZrxho+BcYufd7IayU0Twb0sp8EX/wfggYxA==
+"@sentry/utils@7.57.0":
+  version "7.57.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8"
+  integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg==
   dependencies:
-    "@sentry/types" "7.55.0"
-    tslib "^1.9.3"
+    "@sentry/types" "7.57.0"
+    tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"
@@ -3430,7 +3430,7 @@ tsconfig-paths@^3.14.1:
     minimist "^1.2.6"
     strip-bom "^3.0.0"
 
-tslib@^1.8.1, tslib@^1.9.3:
+tslib@^1.8.1:
   version "1.14.1"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@@ -3440,6 +3440,11 @@ tslib@^2.3.1, tslib@^2.5.0:
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
   integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
 
+"tslib@^2.4.1 || ^1.9.3":
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
+  integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
+
 tsscmp@1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"

From 029b9ef151b1fd4c69fff863107c5c1fd88f424b Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 30 Jun 2023 16:22:58 +0200
Subject: [PATCH 108/239] chore: Update CHANGELOG for release (#691)

---
 CHANGELOG.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 48904e24..97943a57 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## Unreleased
 
+## 4.7.0
+
+- feat: Update to [v7.57.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.57.0) of JavaScript SDKs
+  (#690)
+
 ## 4.6.0
 
 - feat: Update to [v7.50.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.50.0) of JavaScript SDKs

From e305ddc71d595ff9ef30e7bf61b4da9a1d797416 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Fri, 30 Jun 2023 14:23:28 +0000
Subject: [PATCH 109/239] release: 4.7.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 10905278..2046c23d 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.6.0",
+  "version": "4.7.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 09f82e63a26aef5fc935b88ba8fb23307bd75e9b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 12 Jul 2023 12:23:23 +0100
Subject: [PATCH 110/239] chore(deps): bump semver from 5.7.1 to 5.7.2 (#693)

---
 yarn.lock | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/yarn.lock b/yarn.lock
index 6e122406..7aadcae6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3137,19 +3137,19 @@ semver-compare@^1.0.0:
   integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
 
 "semver@2 || 3 || 4 || 5", semver@^5.5.0:
-  version "5.7.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
-  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+  version "5.7.2"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+  integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
 
 semver@^6.2.0, semver@^6.3.0:
-  version "6.3.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
-  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
 
 semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8:
-  version "7.3.8"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
-  integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
+  version "7.5.4"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+  integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
   dependencies:
     lru-cache "^6.0.0"
 

From 0fa7104c59a6eef85b758ebfd90951b085ddb0d9 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 12 Jul 2023 19:04:09 +0100
Subject: [PATCH 111/239] test: New Electron versions (#692)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index b0f63cc9..0b6ff07f 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.15","23.3.9","24.6.1","25.2.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.16","23.3.10","24.6.2","25.2.0"]

From 3064e99c9b84b71f6de7006f477658483df40dc8 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 13 Jul 2023 15:21:58 +0100
Subject: [PATCH 112/239] fix: Normalize filename before parsing module name
 (#699)

---
 package.json                                  |   14 +-
 src/main/sdk.ts                               |    5 +
 src/main/stack-parse.ts                       |   20 +
 src/renderer/sdk.ts                           |    2 +-
 .../other/browser-tracing/recipe.yml          |    1 -
 .../other/main-process-module/event.json      |  143 ++
 .../other/main-process-module/package.json    |   20 +
 .../other/main-process-module/recipe.yml      |    4 +
 .../other/main-process-module/src/main.js     |   36 +
 .../other/main-process-module/src/renderer.js |   10 +
 .../main-process-module/webpack.config.js     |   51 +
 .../other/main-process-module/yarn.lock       | 1595 +++++++++++++++++
 yarn.lock                                     |  124 +-
 13 files changed, 1954 insertions(+), 71 deletions(-)
 create mode 100644 src/main/stack-parse.ts
 create mode 100644 test/e2e/test-apps/other/main-process-module/event.json
 create mode 100644 test/e2e/test-apps/other/main-process-module/package.json
 create mode 100644 test/e2e/test-apps/other/main-process-module/recipe.yml
 create mode 100644 test/e2e/test-apps/other/main-process-module/src/main.js
 create mode 100644 test/e2e/test-apps/other/main-process-module/src/renderer.js
 create mode 100644 test/e2e/test-apps/other/main-process-module/webpack.config.js
 create mode 100644 test/e2e/test-apps/other/main-process-module/yarn.lock

diff --git a/package.json b/package.json
index 2046c23d..b03dd3e3 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.57.0",
-    "@sentry/core": "7.57.0",
-    "@sentry/node": "7.57.0",
-    "@sentry/types": "7.57.0",
-    "@sentry/utils": "7.57.0",
+    "@sentry/browser": "7.58.0",
+    "@sentry/core": "7.58.0",
+    "@sentry/node": "7.58.0",
+    "@sentry/types": "7.58.0",
+    "@sentry/utils": "7.58.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.57.0",
-    "@sentry-internal/typescript": "7.57.0",
+    "@sentry-internal/eslint-config-sdk": "7.58.0",
+    "@sentry-internal/typescript": "7.58.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index 9584dc31..80e84d07 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -19,6 +19,7 @@ import {
   SentryMinidump,
 } from './integrations';
 import { configureIPC } from './ipc';
+import { defaultStackParser } from './stack-parse';
 import { ElectronOfflineTransportOptions, makeElectronOfflineTransport } from './transports/electron-offline-net';
 import { SDK_VERSION } from './version';
 
@@ -113,6 +114,10 @@ export function init(userOptions: ElectronMainOptions): void {
     options.autoSessionTracking = false;
   }
 
+  if (options.stackParser === undefined) {
+    options.stackParser = defaultStackParser;
+  }
+
   setDefaultIntegrations(defaults, options);
 
   if (options.dsn && options.transport === undefined) {
diff --git a/src/main/stack-parse.ts b/src/main/stack-parse.ts
new file mode 100644
index 00000000..78f51a0d
--- /dev/null
+++ b/src/main/stack-parse.ts
@@ -0,0 +1,20 @@
+import { getModuleFromFilename as getModuleFromFilenameNode } from '@sentry/node';
+import { StackParser } from '@sentry/types';
+import { createStackParser, nodeStackLineParser } from '@sentry/utils';
+import { app } from 'electron';
+
+import { normalizeUrl } from '../common';
+
+/** Parses the module name form a filename */
+function getModuleFromFilename(filename: string | undefined): string | undefined {
+  if (!filename) {
+    return;
+  }
+
+  const normalizedFilename = normalizeUrl(filename, app.getAppPath());
+
+  return getModuleFromFilenameNode(normalizedFilename);
+}
+
+// node.js stack parser but filename normalized before parsing the module
+export const defaultStackParser: StackParser = createStackParser(nodeStackLineParser(getModuleFromFilename));
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 05bf87f6..c40831ac 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_57_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_58_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/test-apps/other/browser-tracing/recipe.yml b/test/e2e/test-apps/other/browser-tracing/recipe.yml
index 90bd04f6..e4bf4955 100644
--- a/test/e2e/test-apps/other/browser-tracing/recipe.yml
+++ b/test/e2e/test-apps/other/browser-tracing/recipe.yml
@@ -2,4 +2,3 @@ description: Browser Tracing
 command: yarn
 # Browser Tracing fails on Electron v24
 condition: version.major >= 3 && version.major != 24
-```
diff --git a/test/e2e/test-apps/other/main-process-module/event.json b/test/e2e/test-apps/other/main-process-module/event.json
new file mode 100644
index 00000000..5bc2297e
--- /dev/null
+++ b/test/e2e/test-apps/other/main-process-module/event.json
@@ -0,0 +1,143 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "webpack-main-process",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution":"{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "release": "webpack-main-process@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}",
+      "id": "abc-123"
+    },
+    "debug_meta": {
+      "images": [
+        {
+          "code_file": "app:///dist/main.js",
+          "type": "sourcemap"
+        }
+      ]
+    },
+    "exception": {
+      "values": [
+        {
+          "type": "Error",
+          "value": "Some main error",
+          "stacktrace": {
+            "frames": [
+              {
+                "colno": 0,
+                "filename": "app:///dist/main.js",
+                "function": "{{function}}",
+                "in_app": true,
+                "lineno": 0,
+                "module": "main"
+              }
+            ]
+          },
+          "mechanism": {
+            "handled": true,
+            "type": "generic"
+          }
+        }
+      ]
+    },
+    "level": "fatal",
+    "event_id": "{{id}}",
+    "platform": "node",
+    "timestamp": 0,
+    "breadcrumbs": [
+      {
+        "timestamp": 0,
+        "category": "electron",
+        "message": "app.will-finish-launching",
+        "type": "ui"
+      },
+      {
+        "timestamp": 0,
+        "category": "electron",
+        "message": "app.ready",
+        "type": "ui"
+      },
+      {
+        "timestamp": 0,
+        "category": "electron",
+        "message": "app.session-created",
+        "type": "ui"
+      },
+      {
+        "timestamp": 0,
+        "category": "electron",
+        "message": "app.web-contents-created",
+        "type": "ui"
+      },
+      {
+        "timestamp": 0,
+        "category": "electron",
+        "message": "app.browser-window-created",
+        "type": "ui"
+      },
+      {
+        "timestamp": 0,
+        "category": "electron",
+        "message": "renderer.dom-ready",
+        "type": "ui"
+      }
+    ],
+    "tags": {
+      "event.environment": "javascript",
+      "event.origin": "electron",
+      "event.process": "browser",
+      "event_type": "javascript"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/other/main-process-module/package.json b/test/e2e/test-apps/other/main-process-module/package.json
new file mode 100644
index 00000000..f4f81e58
--- /dev/null
+++ b/test/e2e/test-apps/other/main-process-module/package.json
@@ -0,0 +1,20 @@
+{
+  "name": "webpack-main-process",
+  "version": "1.0.0",
+  "scripts": {
+    "start": "electron .",
+    "build": "webpack"
+  },
+  "main": "dist/main.js",
+  "devDependencies": {
+    "@sentry/webpack-plugin": "^2.2.0",
+    "csp-html-webpack-plugin": "^5.1.0",
+    "html-webpack-plugin": "^5.3.2",
+    "warnings-to-errors-webpack-plugin": "^2.0.1",
+    "webpack": "^5.48.0",
+    "webpack-cli": "^4.7.2"
+  },
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/main-process-module/recipe.yml b/test/e2e/test-apps/other/main-process-module/recipe.yml
new file mode 100644
index 00000000..fdd7322b
--- /dev/null
+++ b/test/e2e/test-apps/other/main-process-module/recipe.yml
@@ -0,0 +1,4 @@
+description: Webpack app with error in main process
+command: yarn && yarn build
+condition: supportsContextIsolation && supportsSandbox
+timeout: 120
diff --git a/test/e2e/test-apps/other/main-process-module/src/main.js b/test/e2e/test-apps/other/main-process-module/src/main.js
new file mode 100644
index 00000000..5aa1da82
--- /dev/null
+++ b/test/e2e/test-apps/other/main-process-module/src/main.js
@@ -0,0 +1,36 @@
+import * as path from 'path';
+import * as url from 'url';
+
+import { app, BrowserWindow } from 'electron';
+// eslint-disable-next-line import/no-unresolved
+import { init } from '@sentry/electron';
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const window = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: false,
+      contextIsolation: true,
+      sandbox: true,
+    },
+  });
+
+  window.loadURL(
+    url.format({
+      pathname: path.join(__dirname, 'index.html'),
+      protocol: 'file:',
+      slashes: true,
+    }),
+  );
+
+  setTimeout(() => {
+    throw new Error('Some main error');
+  }, 500);
+});
diff --git a/test/e2e/test-apps/other/main-process-module/src/renderer.js b/test/e2e/test-apps/other/main-process-module/src/renderer.js
new file mode 100644
index 00000000..60d14a41
--- /dev/null
+++ b/test/e2e/test-apps/other/main-process-module/src/renderer.js
@@ -0,0 +1,10 @@
+// eslint-disable-next-line import/no-unresolved
+import { init, configureScope } from '@sentry/electron';
+
+init({
+  debug: true,
+});
+
+configureScope((scope) => {
+  scope.setUser({ id: 'abc-123' });
+});
diff --git a/test/e2e/test-apps/other/main-process-module/webpack.config.js b/test/e2e/test-apps/other/main-process-module/webpack.config.js
new file mode 100644
index 00000000..52e930a7
--- /dev/null
+++ b/test/e2e/test-apps/other/main-process-module/webpack.config.js
@@ -0,0 +1,51 @@
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const CspHtmlWebpackPlugin = require('csp-html-webpack-plugin');
+const WarningsToErrorsPlugin = require('warnings-to-errors-webpack-plugin');
+const { sentryWebpackPlugin } = require('@sentry/webpack-plugin');
+
+const sentryWebpackPluginOptions = {
+  authToken: 'some invalid auth token',
+  org: 'some invalid org',
+  project: 'some invalid project',
+  telemetry: false,
+  sourcemaps: {
+    assets: [], // no assets to upload - we just care about injecting debug IDs
+  },
+  release: {
+    inject: false,
+  },
+  errorHandler() {
+    // do nothing on errors :)
+    // They will happen because of the invalid auth token
+  },
+};
+
+module.exports = [
+  {
+    mode: 'production',
+    entry: './src/main.js',
+    target: 'electron-main',
+    output: {
+      libraryTarget: 'commonjs2',
+      filename: 'main.js',
+    },
+    plugins: [new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)],
+  },
+  {
+    mode: 'production',
+    entry: './src/renderer.js',
+    target: 'web',
+    output: {
+      filename: 'renderer.js',
+    },
+    plugins: [
+      new HtmlWebpackPlugin(),
+      new WarningsToErrorsPlugin(),
+      new CspHtmlWebpackPlugin({
+        'default-src': "'self'",
+        'script-src': "'self'",
+      }),
+      sentryWebpackPlugin(sentryWebpackPluginOptions),
+    ],
+  },
+];
diff --git a/test/e2e/test-apps/other/main-process-module/yarn.lock b/test/e2e/test-apps/other/main-process-module/yarn.lock
new file mode 100644
index 00000000..2c012a8f
--- /dev/null
+++ b/test/e2e/test-apps/other/main-process-module/yarn.lock
@@ -0,0 +1,1595 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@discoveryjs/json-ext@^0.5.0":
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
+  integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
+
+"@jridgewell/gen-mapping@^0.3.0":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/set-array@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/source-map@^0.3.2":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
+  integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/sourcemap-codec@1.4.14":
+  version "1.4.14"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
+  version "1.4.15"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.18"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
+  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
+  dependencies:
+    "@jridgewell/resolve-uri" "3.1.0"
+    "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@sentry-internal/tracing@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d"
+  integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ==
+  dependencies:
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/browser@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e"
+  integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/bundler-plugin-core@2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a"
+  integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA==
+  dependencies:
+    "@sentry/cli" "^2.17.0"
+    "@sentry/node" "7.53.1"
+    find-up "5.0.0"
+    glob "9.3.2"
+    magic-string "0.27.0"
+    unplugin "1.0.1"
+
+"@sentry/cli@^2.17.0":
+  version "2.18.1"
+  resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308"
+  integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw==
+  dependencies:
+    https-proxy-agent "^5.0.0"
+    node-fetch "^2.6.7"
+    progress "^2.0.3"
+    proxy-from-env "^1.1.0"
+    which "^2.0.2"
+
+"@sentry/core@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88"
+  integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/core@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c"
+  integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/electron@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11"
+  integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A==
+  dependencies:
+    "@sentry/browser" "6.17.2"
+    "@sentry/core" "6.17.2"
+    "@sentry/node" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    deepmerge "^4.2.2"
+    tslib "^2.3.1"
+
+"@sentry/hub@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b"
+  integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/minimal@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120"
+  integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/node@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1"
+  integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ==
+  dependencies:
+    "@sentry/core" "6.17.2"
+    "@sentry/hub" "6.17.2"
+    "@sentry/tracing" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/node@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7"
+  integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA==
+  dependencies:
+    "@sentry-internal/tracing" "7.53.1"
+    "@sentry/core" "7.53.1"
+    "@sentry/types" "7.53.1"
+    "@sentry/utils" "7.53.1"
+    cookie "^0.4.1"
+    https-proxy-agent "^5.0.0"
+    lru_map "^0.3.3"
+    tslib "^1.9.3"
+
+"@sentry/tracing@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b"
+  integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw==
+  dependencies:
+    "@sentry/hub" "6.17.2"
+    "@sentry/minimal" "6.17.2"
+    "@sentry/types" "6.17.2"
+    "@sentry/utils" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/types@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30"
+  integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==
+
+"@sentry/types@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41"
+  integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw==
+
+"@sentry/utils@6.17.2":
+  version "6.17.2"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732"
+  integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA==
+  dependencies:
+    "@sentry/types" "6.17.2"
+    tslib "^1.9.3"
+
+"@sentry/utils@7.53.1":
+  version "7.53.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486"
+  integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg==
+  dependencies:
+    "@sentry/types" "7.53.1"
+    tslib "^1.9.3"
+
+"@sentry/webpack-plugin@^2.2.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.2.0.tgz#bd7a28a7132f139f74aa1068b168ab735fb9ddea"
+  integrity sha512-GzwoIQ2ygau0u76uKBK7gAyJAi6Te9zgJuP//OBfmJoXupm6HIUWC6RmPFy0yMlsK4gq1Ak/KziX7PZIe5NLaA==
+  dependencies:
+    "@sentry/bundler-plugin-core" "2.2.0"
+    unplugin "1.0.1"
+    uuid "^9.0.0"
+
+"@types/eslint-scope@^3.7.3":
+  version "3.7.4"
+  resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
+  integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
+  dependencies:
+    "@types/eslint" "*"
+    "@types/estree" "*"
+
+"@types/eslint@*":
+  version "8.40.0"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23"
+  integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*", "@types/estree@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
+  integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
+
+"@types/html-minifier-terser@^6.0.0":
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
+  integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+
+"@types/json-schema@*", "@types/json-schema@^7.0.8":
+  version "7.0.11"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
+"@types/node@*":
+  version "20.2.3"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878"
+  integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==
+
+"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
+  integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
+  dependencies:
+    "@webassemblyjs/helper-numbers" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
+  integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
+
+"@webassemblyjs/helper-api-error@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
+  integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
+
+"@webassemblyjs/helper-buffer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093"
+  integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
+
+"@webassemblyjs/helper-numbers@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
+  integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
+  dependencies:
+    "@webassemblyjs/floating-point-hex-parser" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
+  integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
+
+"@webassemblyjs/helper-wasm-section@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577"
+  integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+
+"@webassemblyjs/ieee754@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
+  integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
+  integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
+  integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
+
+"@webassemblyjs/wasm-edit@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab"
+  integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/helper-wasm-section" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-opt" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+    "@webassemblyjs/wast-printer" "1.11.6"
+
+"@webassemblyjs/wasm-gen@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268"
+  integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wasm-opt@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2"
+  integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+
+"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1"
+  integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wast-printer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20"
+  integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webpack-cli/configtest@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5"
+  integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==
+
+"@webpack-cli/info@^1.5.0":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1"
+  integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==
+  dependencies:
+    envinfo "^7.7.3"
+
+"@webpack-cli/serve@^1.7.0":
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1"
+  integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+acorn-import-assertions@^1.9.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
+  integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
+
+acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1:
+  version "8.8.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+
+agent-base@6:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+boolbase@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+browserslist@^4.14.5:
+  version "4.21.5"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7"
+  integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
+  dependencies:
+    caniuse-lite "^1.0.30001449"
+    electron-to-chromium "^1.4.284"
+    node-releases "^2.0.8"
+    update-browserslist-db "^1.0.10"
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+camel-case@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+  dependencies:
+    pascal-case "^3.1.2"
+    tslib "^2.0.3"
+
+caniuse-lite@^1.0.30001449:
+  version "1.0.30001489"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8"
+  integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==
+
+cheerio-select@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
+  integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
+  dependencies:
+    boolbase "^1.0.0"
+    css-select "^5.1.0"
+    css-what "^6.1.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+
+cheerio@^1.0.0-rc.5:
+  version "1.0.0-rc.12"
+  resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
+  integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
+  dependencies:
+    cheerio-select "^2.1.0"
+    dom-serializer "^2.0.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+    htmlparser2 "^8.0.1"
+    parse5 "^7.0.0"
+    parse5-htmlparser2-tree-adapter "^7.0.0"
+
+chokidar@^3.5.3:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+clean-css@^5.2.2:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224"
+  integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==
+  dependencies:
+    source-map "~0.6.0"
+
+clone-deep@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+  dependencies:
+    is-plain-object "^2.0.4"
+    kind-of "^6.0.2"
+    shallow-clone "^3.0.0"
+
+colorette@^2.0.14:
+  version "2.0.20"
+  resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+  integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^7.0.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+cookie@^0.4.1:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+  integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
+cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+csp-html-webpack-plugin@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/csp-html-webpack-plugin/-/csp-html-webpack-plugin-5.1.0.tgz#b3bfa5a50d207fe5b6bb4839dc33aa59621a35a0"
+  integrity sha512-6l/s6hACE+UA01PLReNKZfgLZWM98f7ewWmE79maDWIbEXiPcIWQGB3LQR/Zw+hPBj4XPZZ5zNrrO+aygqaLaQ==
+  dependencies:
+    cheerio "^1.0.0-rc.5"
+    lodash "^4.17.20"
+
+css-select@^4.1.3:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.0.1"
+    domhandler "^4.3.1"
+    domutils "^2.8.0"
+    nth-check "^2.0.1"
+
+css-select@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+  integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.1.0"
+    domhandler "^5.0.2"
+    domutils "^3.0.1"
+    nth-check "^2.0.1"
+
+css-what@^6.0.1, css-what@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+debug@4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+deepmerge@^4.2.2:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+dom-converter@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
+dom-serializer@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+dom-serializer@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+  integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.2"
+    entities "^4.2.0"
+
+domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domhandler@^5.0.2, domhandler@^5.0.3:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+  integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+  dependencies:
+    domelementtype "^2.3.0"
+
+domutils@^2.5.2, domutils@^2.8.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+domutils@^3.0.1:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+  integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+  dependencies:
+    dom-serializer "^2.0.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+
+dot-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+electron-to-chromium@^1.4.284:
+  version "1.4.407"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz#087e2ab97b3eb092aa6217c05986086b7dd370cc"
+  integrity sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg==
+
+enhanced-resolve@^5.14.1:
+  version "5.14.1"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3"
+  integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+entities@^4.2.0, entities@^4.4.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+envinfo@^7.7.3:
+  version "7.8.1"
+  resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
+  integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
+
+es-module-lexer@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527"
+  integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+eslint-scope@5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^4.1.1"
+
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+events@^3.2.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+fast-deep-equal@^3.1.1:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fastest-levenshtein@^1.0.12:
+  version "1.0.16"
+  resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
+  integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+find-up@5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+  dependencies:
+    locate-path "^6.0.0"
+    path-exists "^4.0.0"
+
+find-up@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+  dependencies:
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob-to-regexp@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@9.3.2:
+  version "9.3.2"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda"
+  integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    minimatch "^7.4.1"
+    minipass "^4.2.4"
+    path-scurry "^1.6.1"
+
+graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+he@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+html-minifier-terser@^6.0.2:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+  integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+  dependencies:
+    camel-case "^4.1.2"
+    clean-css "^5.2.2"
+    commander "^8.3.0"
+    he "^1.2.0"
+    param-case "^3.0.4"
+    relateurl "^0.2.7"
+    terser "^5.10.0"
+
+html-webpack-plugin@^5.3.2:
+  version "5.5.1"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763"
+  integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==
+  dependencies:
+    "@types/html-minifier-terser" "^6.0.0"
+    html-minifier-terser "^6.0.2"
+    lodash "^4.17.21"
+    pretty-error "^4.0.0"
+    tapable "^2.0.0"
+
+htmlparser2@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+  integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.0.0"
+    domutils "^2.5.2"
+    entities "^2.0.0"
+
+htmlparser2@^8.0.1:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+  integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+    entities "^4.4.0"
+
+https-proxy-agent@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+import-local@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+  integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+  dependencies:
+    pkg-dir "^4.2.0"
+    resolve-cwd "^3.0.0"
+
+interpret@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
+  integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-core-module@^2.11.0:
+  version "2.12.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+  dependencies:
+    has "^1.0.3"
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+jest-worker@^27.4.5:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+  integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+json-parse-even-better-errors@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+loader-runner@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+locate-path@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+  dependencies:
+    p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+  dependencies:
+    p-locate "^5.0.0"
+
+lodash@^4.17.20, lodash@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+lower-case@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+  dependencies:
+    tslib "^2.0.3"
+
+lru-cache@^9.1.1:
+  version "9.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1"
+  integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==
+
+lru_map@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
+  integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
+
+magic-string@0.27.0:
+  version "0.27.0"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3"
+  integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.4.13"
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.27:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+minimatch@^7.4.1:
+  version "7.4.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb"
+  integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minipass@^4.2.4:
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a"
+  integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==
+
+"minipass@^5.0.0 || ^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81"
+  integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+neo-async@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+no-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+  dependencies:
+    lower-case "^2.0.2"
+    tslib "^2.0.3"
+
+node-fetch@^2.6.7:
+  version "2.6.11"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
+  integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-releases@^2.0.8:
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
+  integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
+p-limit@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+  dependencies:
+    yocto-queue "^0.1.0"
+
+p-locate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+  dependencies:
+    p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+  dependencies:
+    p-limit "^3.0.2"
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+param-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+  dependencies:
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
+
+parse5-htmlparser2-tree-adapter@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
+  integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==
+  dependencies:
+    domhandler "^5.0.2"
+    parse5 "^7.0.0"
+
+parse5@^7.0.0:
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+  integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+  dependencies:
+    entities "^4.4.0"
+
+pascal-case@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+path-exists@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.6.1:
+  version "1.9.2"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
+  integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
+  dependencies:
+    lru-cache "^9.1.1"
+    minipass "^5.0.0 || ^6.0.2"
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pkg-dir@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
+pretty-error@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
+  integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==
+  dependencies:
+    lodash "^4.17.20"
+    renderkid "^3.0.0"
+
+progress@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+punycode@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
+randombytes@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+rechoir@^0.7.0:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
+  integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
+  dependencies:
+    resolve "^1.9.0"
+
+relateurl@^0.2.7:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+renderkid@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
+  integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==
+  dependencies:
+    css-select "^4.1.3"
+    dom-converter "^0.2.0"
+    htmlparser2 "^6.1.0"
+    lodash "^4.17.21"
+    strip-ansi "^6.0.1"
+
+resolve-cwd@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+  dependencies:
+    resolve-from "^5.0.0"
+
+resolve-from@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve@^1.9.0:
+  version "1.22.2"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
+  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
+  dependencies:
+    is-core-module "^2.11.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+safe-buffer@^5.1.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+schema-utils@^3.1.1, schema-utils@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99"
+  integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
+serialize-javascript@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
+  integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
+  dependencies:
+    randombytes "^2.1.0"
+
+shallow-clone@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+  dependencies:
+    kind-of "^6.0.2"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.0:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+supports-color@^8.0.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+terser-webpack-plugin@^5.3.7:
+  version "5.3.9"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
+  integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jest-worker "^27.4.5"
+    schema-utils "^3.1.1"
+    serialize-javascript "^6.0.1"
+    terser "^5.16.8"
+
+terser@^5.10.0, terser@^5.16.8:
+  version "5.17.6"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de"
+  integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==
+  dependencies:
+    "@jridgewell/source-map" "^0.3.2"
+    acorn "^8.5.0"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+tslib@^1.9.3:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.3, tslib@^2.3.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338"
+  integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==
+
+unplugin@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f"
+  integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==
+  dependencies:
+    acorn "^8.8.1"
+    chokidar "^3.5.3"
+    webpack-sources "^3.2.3"
+    webpack-virtual-modules "^0.5.0"
+
+update-browserslist-db@^1.0.10:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
+  integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
+
+uuid@^9.0.0:
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
+  integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
+
+warnings-to-errors-webpack-plugin@^2.0.1:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/warnings-to-errors-webpack-plugin/-/warnings-to-errors-webpack-plugin-2.3.0.tgz#5f9a58aaec458feafabe0f7a2b88a492db263a30"
+  integrity sha512-fzOyw+Ctr2MqJ+4UXKobDiOLzMMSBAdvGMWvZ4NRgTBCofAL2mmdfr6/Of3Bqz9Sq6R6xT5dLs6nnLLCtmppeQ==
+
+watchpack@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
+  integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
+  dependencies:
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.1.2"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+webpack-cli@^4.7.2:
+  version "4.10.0"
+  resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31"
+  integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==
+  dependencies:
+    "@discoveryjs/json-ext" "^0.5.0"
+    "@webpack-cli/configtest" "^1.2.0"
+    "@webpack-cli/info" "^1.5.0"
+    "@webpack-cli/serve" "^1.7.0"
+    colorette "^2.0.14"
+    commander "^7.0.0"
+    cross-spawn "^7.0.3"
+    fastest-levenshtein "^1.0.12"
+    import-local "^3.0.2"
+    interpret "^2.2.0"
+    rechoir "^0.7.0"
+    webpack-merge "^5.7.3"
+
+webpack-merge@^5.7.3:
+  version "5.9.0"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826"
+  integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==
+  dependencies:
+    clone-deep "^4.0.1"
+    wildcard "^2.0.0"
+
+webpack-sources@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack-virtual-modules@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c"
+  integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==
+
+webpack@^5.48.0:
+  version "5.84.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.84.0.tgz#011115617668744aece87a9eb68534487d84de1a"
+  integrity sha512-XezNK3kwJq6IyeoZmZ1uEqQs+42nTqIi4jYM/YjLwaJedUC1N3bwnCC0+UcnHJPfqWX0kGrQnMIvZZyWYaIZrA==
+  dependencies:
+    "@types/eslint-scope" "^3.7.3"
+    "@types/estree" "^1.0.0"
+    "@webassemblyjs/ast" "^1.11.5"
+    "@webassemblyjs/wasm-edit" "^1.11.5"
+    "@webassemblyjs/wasm-parser" "^1.11.5"
+    acorn "^8.7.1"
+    acorn-import-assertions "^1.9.0"
+    browserslist "^4.14.5"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^5.14.1"
+    es-module-lexer "^1.2.1"
+    eslint-scope "5.1.1"
+    events "^3.2.0"
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.2.9"
+    json-parse-even-better-errors "^2.3.1"
+    loader-runner "^4.2.0"
+    mime-types "^2.1.27"
+    neo-async "^2.6.2"
+    schema-utils "^3.1.2"
+    tapable "^2.1.1"
+    terser-webpack-plugin "^5.3.7"
+    watchpack "^2.4.0"
+    webpack-sources "^3.2.3"
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+which@^2.0.1, which@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wildcard@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+  integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/yarn.lock b/yarn.lock
index 7aadcae6..cfc1e2a9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.57.0.tgz#8448eb63869aa618ebb6082e3e2f50660d6260f0"
-  integrity sha512-uuKNIkVxkA69c08j90RJ3nVGVY26vt0KXC0ApvC3UsjDM9mtzksOIf/epKY4PyuRw5y3BcQUXE36zhM02Dk+OA==
+"@sentry-internal/eslint-config-sdk@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.58.0.tgz#cae7ca91bde98d90b2475678b41144eee97154e3"
+  integrity sha512-S4ue3YmsX9InBc94lxJAuBlrOdq3k7Y0QsUKbk2xYzV6OFGJ273U2XUvuuZpbc2jKlyG2Jxjvi8tdVE4p0g6Bw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.57.0"
-    "@sentry-internal/typescript" "7.57.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.58.0"
+    "@sentry-internal/typescript" "7.58.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,83 +143,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.57.0.tgz#bbab4ceed6f722d956107b5982db4747c00d56a1"
-  integrity sha512-c1Lz5sFSLlaxQoveCgxTLlvta+uW9DeJzHQWdNn0Q5IxzUo418k0BrxTT2V0P6Ch0i/d+QyaucFEhoKHk/YJJg==
+"@sentry-internal/eslint-plugin-sdk@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.58.0.tgz#acd67b8e812f4e4920996d1f94dd71d1f28ba720"
+  integrity sha512-TQtQDca/zRUfrWRKgjsn96FiePi7hWqZViZiOWofnIFUWT9pD2ju3wvAakdqm65aNxXO5ZJVUy7vArevBxHcFg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551"
-  integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A==
+"@sentry-internal/tracing@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.58.0.tgz#f6494ae212644b6d268decee6b660d9789b8db9a"
+  integrity sha512-7V/vkFFYCmSq25er3Y0wukkTM940Wvk9qjh7kWcCCeesKFHNGBCP7HVZhsymjPIJGGJTvRWc9MgBzRGe/c16Xg==
   dependencies:
-    "@sentry/core" "7.57.0"
-    "@sentry/types" "7.57.0"
-    "@sentry/utils" "7.57.0"
+    "@sentry/core" "7.58.0"
+    "@sentry/types" "7.58.0"
+    "@sentry/utils" "7.58.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.57.0.tgz#2f0d226cd23aca5e451a7192354d0244a1ec4224"
-  integrity sha512-vj49MhqOnd+VLKlOoGpTCE7N3dWxyaBFuqpy1vkOFkP/r/n4PCJpbeqM4HQ1dKAeKKK6lV/FvZTdy5vZWnE9VA==
-
-"@sentry/browser@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.57.0.tgz#6e724c9eac680dba99ced0fdf81be8d1e3b3bceb"
-  integrity sha512-E0HaYYlaqHFiIRZXxcvOO8Odvlt+TR1vFFXzqUWXPOvDRxURglTOCQ3EN/u6bxtAGJ6y/Zc2obgihTtypuel/w==
-  dependencies:
-    "@sentry-internal/tracing" "7.57.0"
-    "@sentry/core" "7.57.0"
-    "@sentry/replay" "7.57.0"
-    "@sentry/types" "7.57.0"
-    "@sentry/utils" "7.57.0"
+"@sentry-internal/typescript@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.58.0.tgz#98e3526ed636381834a523c3b595137c74158fff"
+  integrity sha512-60+lcEMRXKJXw3v0N+Fm8t1e9/Zfc7FAR+RknM140YN/XnlT5z8hNOruYpVswzEf4X1IOa4tBYktZc8Qzf+QUw==
+
+"@sentry/browser@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.58.0.tgz#75f6f0a39435327ec95ef38722161336ba9ded79"
+  integrity sha512-v+PaTuK4LOJ1/uAxNQHUMRLWdlIOdiKlZAgoZojixdFKajHAeguzok93d0u2SZJaGDaLmkJYSiGAPBs1d1jHhA==
+  dependencies:
+    "@sentry-internal/tracing" "7.58.0"
+    "@sentry/core" "7.58.0"
+    "@sentry/replay" "7.58.0"
+    "@sentry/types" "7.58.0"
+    "@sentry/utils" "7.58.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb"
-  integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw==
+"@sentry/core@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.58.0.tgz#5d800342225bb8a168635c13d27b2e2119dc0b0f"
+  integrity sha512-tdz+HOh9blnfJ4ZSfsaVaSh/i7pD2QfmC0///fWlNm+IvD+SAgYFP6M3PIsJMsaN5heZ9XMNY4wnxvd+vvJwPQ==
   dependencies:
-    "@sentry/types" "7.57.0"
-    "@sentry/utils" "7.57.0"
+    "@sentry/types" "7.58.0"
+    "@sentry/utils" "7.58.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.57.0.tgz#31052f5988ed4496d7f3ff925240cf9b02d09941"
-  integrity sha512-63mjyUVM6sfJFVQ5TGVRVGUsoEfESl5ABzIW1W0s9gUiQPaG8SOdaQJglb2VNrkMYxnRHgD8Q9LUh/qcmUyPGw==
+"@sentry/node@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.58.0.tgz#0e95a593f0a6b7a4cf46913ec7343f10397042da"
+  integrity sha512-Br6l0XuBEI13dektlPi0jvaVrUEirL7Z61SvbdjR8C/G6O9TXw0wKwc/BXf1GYV5JP7jsWHdRQEO2s45mtmNwQ==
   dependencies:
-    "@sentry-internal/tracing" "7.57.0"
-    "@sentry/core" "7.57.0"
-    "@sentry/types" "7.57.0"
-    "@sentry/utils" "7.57.0"
+    "@sentry-internal/tracing" "7.58.0"
+    "@sentry/core" "7.58.0"
+    "@sentry/types" "7.58.0"
+    "@sentry/utils" "7.58.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.57.0.tgz#c8f7eae7b7edc9d32c3d2955b337f3b3c76dff39"
-  integrity sha512-pN4ryNS3J5EYbkXvR+O/+hseAJha7XDl8mPFtK0OGTHG10JzCi4tQJazblHQdpb5QBaMMPCeZ+isyfoQLDNXnw==
+"@sentry/replay@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.58.0.tgz#aa2499f1cbff82b27ec370d8ff0b5b6b64fb058e"
+  integrity sha512-gzanY+Y+48ErQxFWl2t031awz/4fR6v0Pkvu7mZWl8ZraLiVRqk2T7aPyxcL2I7yFwFElJ6mZw7buce+R+IaTA==
   dependencies:
-    "@sentry/core" "7.57.0"
-    "@sentry/types" "7.57.0"
-    "@sentry/utils" "7.57.0"
+    "@sentry/core" "7.58.0"
+    "@sentry/types" "7.58.0"
+    "@sentry/utils" "7.58.0"
 
-"@sentry/types@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce"
-  integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w==
+"@sentry/types@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.58.0.tgz#d74e5c6cb7bfd0b98d561fc99d12f76d904c6496"
+  integrity sha512-uy8rww5R0WSxr9kB1R1BXWomkKXosK+jOFslbIda4CfTiAMEINi7rXkqTzPJKCIRLHFvKXDFUIkMCHNMkgYjwA==
 
-"@sentry/utils@7.57.0":
-  version "7.57.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8"
-  integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg==
+"@sentry/utils@7.58.0":
+  version "7.58.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.58.0.tgz#645ae4fdfe2af2d7020e895aa449e7c7dcd77442"
+  integrity sha512-EAknRDovGBnIVvGLJVxPbB1gUY/VCUoVov26Fk1BYLtUmWlzt+JYHsBJptHw15onu+M0em7z7Iax4wKoiNhhzA==
   dependencies:
-    "@sentry/types" "7.57.0"
+    "@sentry/types" "7.58.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 256abc6c395054cc824a408b628306205fea23f4 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 13 Jul 2023 18:16:56 +0100
Subject: [PATCH 113/239] chore(deps): bump semver from 5.7.1 to 5.7.2 in
 /examples/electron-forge-webpack (#695)

---
 examples/electron-forge-webpack/yarn.lock | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/examples/electron-forge-webpack/yarn.lock b/examples/electron-forge-webpack/yarn.lock
index 53498d70..65bcefa5 100644
--- a/examples/electron-forge-webpack/yarn.lock
+++ b/examples/electron-forge-webpack/yarn.lock
@@ -4491,19 +4491,19 @@ semver-compare@^1.0.0:
   integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
 
 "semver@2 || 3 || 4 || 5", semver@^5.5.0:
-  version "5.7.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
-  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+  version "5.7.2"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+  integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
 
 semver@^6.2.0:
-  version "6.3.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
-  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
 
 semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
-  version "7.5.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
-  integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
+  version "7.5.4"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+  integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
   dependencies:
     lru-cache "^6.0.0"
 

From fd2e72f92beb45ac928a34b1c1b30918c2f83236 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 13 Jul 2023 18:17:24 +0100
Subject: [PATCH 114/239] chore(deps): bump semver from 6.3.0 to 6.3.1 in
 /examples/electron-vite (#694)

---
 examples/electron-vite/yarn.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/examples/electron-vite/yarn.lock b/examples/electron-vite/yarn.lock
index 15a81a39..486488f1 100644
--- a/examples/electron-vite/yarn.lock
+++ b/examples/electron-vite/yarn.lock
@@ -1204,14 +1204,14 @@ semver-compare@^1.0.0:
   integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
 
 semver@^6.2.0:
-  version "6.3.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
-  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
 
 semver@^7.3.2:
-  version "7.5.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
-  integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
+  version "7.5.4"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+  integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
   dependencies:
     lru-cache "^6.0.0"
 

From edb0fe9e2fe8a3e79245698f2f53ad9c4fc35efd Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 13 Jul 2023 18:24:31 +0100
Subject: [PATCH 115/239] chore: Update changelog for release (#700)

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 97943a57..489cb5e5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 4.8.0
+
+- feat: Update to [v7.58.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.58.0) of JavaScript SDKs
+  (#699)
+- fix: Normalize filename before parsing into module name (#699)
+
 ## 4.7.0
 
 - feat: Update to [v7.57.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.57.0) of JavaScript SDKs

From de80c56a10c20cc853cd21d6e97cab7fc8c9a84d Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Thu, 13 Jul 2023 17:33:21 +0000
Subject: [PATCH 116/239] release: 4.8.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index b03dd3e3..696ac909 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.7.0",
+  "version": "4.8.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From b62696c4617b0ddbf77de1cf8a4e0323beb2b60b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 19 Jul 2023 01:12:40 +0200
Subject: [PATCH 117/239] test: New Electron versions (#698)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 0b6ff07f..775ae35b 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.16","23.3.10","24.6.2","25.2.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.17","23.3.10","24.6.3","25.3.0"]

From 7916072e52014273f76d51974bc2dc78480f834d Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 19 Jul 2023 12:57:55 +0200
Subject: [PATCH 118/239] test: Update Sentrys SDKs to v7.59.2 (#702)

---
 package.json        |  16 +++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 124 ++++++++++++++++++++++----------------------
 3 files changed, 71 insertions(+), 71 deletions(-)

diff --git a/package.json b/package.json
index 696ac909..421a0b3d 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.58.0",
-    "@sentry/core": "7.58.0",
-    "@sentry/node": "7.58.0",
-    "@sentry/types": "7.58.0",
-    "@sentry/utils": "7.58.0",
+    "@sentry/browser": "7.59.2",
+    "@sentry/core": "7.59.2",
+    "@sentry/node": "7.59.2",
+    "@sentry/types": "7.59.2",
+    "@sentry/utils": "7.59.2",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.58.0",
-    "@sentry-internal/typescript": "7.58.0",
+    "@sentry-internal/eslint-config-sdk": "7.59.2",
+    "@sentry-internal/typescript": "7.59.2",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index c40831ac..b69642a0 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_58_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_59_2: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index cfc1e2a9..ec09c2d4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -128,13 +128,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.58.0.tgz#cae7ca91bde98d90b2475678b41144eee97154e3"
-  integrity sha512-S4ue3YmsX9InBc94lxJAuBlrOdq3k7Y0QsUKbk2xYzV6OFGJ273U2XUvuuZpbc2jKlyG2Jxjvi8tdVE4p0g6Bw==
+"@sentry-internal/eslint-config-sdk@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.59.2.tgz#0dec2a2a8dabe4b5ffaf58ae96fb37623f857b45"
+  integrity sha512-p2+Y3InGQj48Cj3MbaBxCdX40ckmyCvd2M8loMMwTjLhXmv/p4NflIreAADNlaLP0RaFoiZ7IdnVGDCYQdnCzg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.58.0"
-    "@sentry-internal/typescript" "7.58.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.59.2"
+    "@sentry-internal/typescript" "7.59.2"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -143,83 +143,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.58.0.tgz#acd67b8e812f4e4920996d1f94dd71d1f28ba720"
-  integrity sha512-TQtQDca/zRUfrWRKgjsn96FiePi7hWqZViZiOWofnIFUWT9pD2ju3wvAakdqm65aNxXO5ZJVUy7vArevBxHcFg==
+"@sentry-internal/eslint-plugin-sdk@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.59.2.tgz#78226f235653bf25ae679266fc540754e17ca2e5"
+  integrity sha512-Q/yNLFpCo8qIZUQm7EVtwyLQt3q+MI3RHE3FlpFfqUwGvRZsIOOMCrpPjW1FZ2+3uSzZFof8dEGntoM9GfgqEA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.58.0.tgz#f6494ae212644b6d268decee6b660d9789b8db9a"
-  integrity sha512-7V/vkFFYCmSq25er3Y0wukkTM940Wvk9qjh7kWcCCeesKFHNGBCP7HVZhsymjPIJGGJTvRWc9MgBzRGe/c16Xg==
+"@sentry-internal/tracing@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.59.2.tgz#91c44a37151bb81fac0500b4e031f53583dff772"
+  integrity sha512-02gteChV/lMobWU06VlITq+myEWk0MzhnDCm8n/DMigB47I9HkWZFAJ+CYG6Ns0rTL+3+/c2V0bPyQkZwIC+Sg==
   dependencies:
-    "@sentry/core" "7.58.0"
-    "@sentry/types" "7.58.0"
-    "@sentry/utils" "7.58.0"
+    "@sentry/core" "7.59.2"
+    "@sentry/types" "7.59.2"
+    "@sentry/utils" "7.59.2"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.58.0.tgz#98e3526ed636381834a523c3b595137c74158fff"
-  integrity sha512-60+lcEMRXKJXw3v0N+Fm8t1e9/Zfc7FAR+RknM140YN/XnlT5z8hNOruYpVswzEf4X1IOa4tBYktZc8Qzf+QUw==
-
-"@sentry/browser@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.58.0.tgz#75f6f0a39435327ec95ef38722161336ba9ded79"
-  integrity sha512-v+PaTuK4LOJ1/uAxNQHUMRLWdlIOdiKlZAgoZojixdFKajHAeguzok93d0u2SZJaGDaLmkJYSiGAPBs1d1jHhA==
-  dependencies:
-    "@sentry-internal/tracing" "7.58.0"
-    "@sentry/core" "7.58.0"
-    "@sentry/replay" "7.58.0"
-    "@sentry/types" "7.58.0"
-    "@sentry/utils" "7.58.0"
+"@sentry-internal/typescript@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.59.2.tgz#df8e837c3580caf44864d88d0cd6721e59594b9a"
+  integrity sha512-0GIslPJpxTjPYA1zTh/wyz8majvQbn0bNZftv71Ng17y/HaZiGzYDyFG8OEjWgp7poIsOYrMAe7hsr6b5jniTA==
+
+"@sentry/browser@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.59.2.tgz#77f6c7af33448ec375d684442ef51f21f5c26ace"
+  integrity sha512-N1JiBs1VRR5DV0209TZgaMwRGiTYN1C34sFzIW7nuC82X4gHy3tuJjZPlMDTtgFrALBMJ24yQ7D4HJjXrS2+Dw==
+  dependencies:
+    "@sentry-internal/tracing" "7.59.2"
+    "@sentry/core" "7.59.2"
+    "@sentry/replay" "7.59.2"
+    "@sentry/types" "7.59.2"
+    "@sentry/utils" "7.59.2"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.58.0.tgz#5d800342225bb8a168635c13d27b2e2119dc0b0f"
-  integrity sha512-tdz+HOh9blnfJ4ZSfsaVaSh/i7pD2QfmC0///fWlNm+IvD+SAgYFP6M3PIsJMsaN5heZ9XMNY4wnxvd+vvJwPQ==
+"@sentry/core@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.59.2.tgz#5c69cc7b8321f47c3da353f51084e2f4c4170e7d"
+  integrity sha512-GRhoPw6b6GkvOsa060aREc9yyHjgAKITgITNbzUmn0GqIeWD5SMoCBAcENRHVgUnpQWOpnkEF1/sqxvwx+rf6Q==
   dependencies:
-    "@sentry/types" "7.58.0"
-    "@sentry/utils" "7.58.0"
+    "@sentry/types" "7.59.2"
+    "@sentry/utils" "7.59.2"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.58.0.tgz#0e95a593f0a6b7a4cf46913ec7343f10397042da"
-  integrity sha512-Br6l0XuBEI13dektlPi0jvaVrUEirL7Z61SvbdjR8C/G6O9TXw0wKwc/BXf1GYV5JP7jsWHdRQEO2s45mtmNwQ==
+"@sentry/node@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.59.2.tgz#ff68286770d6a647a4555c9f0351c7003c00f3bc"
+  integrity sha512-cvTW4VwQdvNeAtBGVGE5hGmsWstGK4PwWe5PccBWJBQGM/rYzwk2tM9ZQnM5M5+yDV4bZ+21sJhvyhsHoTjmzQ==
   dependencies:
-    "@sentry-internal/tracing" "7.58.0"
-    "@sentry/core" "7.58.0"
-    "@sentry/types" "7.58.0"
-    "@sentry/utils" "7.58.0"
+    "@sentry-internal/tracing" "7.59.2"
+    "@sentry/core" "7.59.2"
+    "@sentry/types" "7.59.2"
+    "@sentry/utils" "7.59.2"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.58.0.tgz#aa2499f1cbff82b27ec370d8ff0b5b6b64fb058e"
-  integrity sha512-gzanY+Y+48ErQxFWl2t031awz/4fR6v0Pkvu7mZWl8ZraLiVRqk2T7aPyxcL2I7yFwFElJ6mZw7buce+R+IaTA==
+"@sentry/replay@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.59.2.tgz#4fc9c455e0e3b933075afe1729d8ba42953c62d4"
+  integrity sha512-Ma72ofTdtSinBY5GH0zM7k8o/WsdaVdPP/1iyFbcWQDt8dnrcsJVUKK0t9+8gijpiSMUKE+vjFjQNL9/PGYekw==
   dependencies:
-    "@sentry/core" "7.58.0"
-    "@sentry/types" "7.58.0"
-    "@sentry/utils" "7.58.0"
+    "@sentry/core" "7.59.2"
+    "@sentry/types" "7.59.2"
+    "@sentry/utils" "7.59.2"
 
-"@sentry/types@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.58.0.tgz#d74e5c6cb7bfd0b98d561fc99d12f76d904c6496"
-  integrity sha512-uy8rww5R0WSxr9kB1R1BXWomkKXosK+jOFslbIda4CfTiAMEINi7rXkqTzPJKCIRLHFvKXDFUIkMCHNMkgYjwA==
+"@sentry/types@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.59.2.tgz#25b2ae0b2dc6733ca48621cf9167c9a7965852ae"
+  integrity sha512-rylG7UQ0cC/xbV6trSuaAE/bsruSZy92jxQ1/KSOYKwBBvRFPXJBuiBtA81b8eYa4THZ+mE/ol2qOTJYuuV4Ug==
 
-"@sentry/utils@7.58.0":
-  version "7.58.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.58.0.tgz#645ae4fdfe2af2d7020e895aa449e7c7dcd77442"
-  integrity sha512-EAknRDovGBnIVvGLJVxPbB1gUY/VCUoVov26Fk1BYLtUmWlzt+JYHsBJptHw15onu+M0em7z7Iax4wKoiNhhzA==
+"@sentry/utils@7.59.2":
+  version "7.59.2"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.59.2.tgz#c4c76b1ea2a7f9363d1203dedfeafec2387bf634"
+  integrity sha512-uxC8xH9wsB/tZUnjmaQ1uGtsumFOc19KWfedVHXzcNwqdt5uS3EB4+D1d8WwiJyLy2nm61DdmTC9SiB4HS+OSw==
   dependencies:
-    "@sentry/types" "7.58.0"
+    "@sentry/types" "7.59.2"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 69b8ab05921f89fef663db881b958f2984f9ed31 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 19 Jul 2023 12:58:11 +0200
Subject: [PATCH 119/239] chore(deps): bump word-wrap from 1.2.3 to 1.2.4
 (#705)

---
 yarn.lock | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/yarn.lock b/yarn.lock
index ec09c2d4..d5122574 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3594,9 +3594,9 @@ which@^1.2.4, which@^1.2.9:
     isexe "^2.0.0"
 
 word-wrap@^1.2.3:
-  version "1.2.3"
-  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
-  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f"
+  integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==
 
 workerpool@6.2.0:
   version "6.2.0"

From 675520ec739329b7b6b6113a2b23cea403d0b7bb Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sat, 22 Jul 2023 12:19:50 +0200
Subject: [PATCH 120/239] test: Update Sentry SDKs to v7.60.0 (#706)

---
 package.json        |  14 ++--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 187 +++++++++++++++++++++++++++++---------------
 3 files changed, 133 insertions(+), 70 deletions(-)

diff --git a/package.json b/package.json
index 421a0b3d..e906e89a 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.59.2",
-    "@sentry/core": "7.59.2",
-    "@sentry/node": "7.59.2",
-    "@sentry/types": "7.59.2",
-    "@sentry/utils": "7.59.2",
+    "@sentry/browser": "7.60.0",
+    "@sentry/core": "7.60.0",
+    "@sentry/node": "7.60.0",
+    "@sentry/types": "7.60.0",
+    "@sentry/utils": "7.60.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.59.2",
-    "@sentry-internal/typescript": "7.59.2",
+    "@sentry-internal/eslint-config-sdk": "7.60.0",
+    "@sentry-internal/typescript": "7.60.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index b69642a0..df1e7420 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_59_2: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_60_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index d5122574..349f1778 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -45,6 +45,13 @@
   optionalDependencies:
     global-agent "^3.0.0"
 
+"@eslint-community/eslint-utils@^4.2.0":
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+  integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+  dependencies:
+    eslint-visitor-keys "^3.3.0"
+
 "@eslint/eslintrc@^0.4.3":
   version "0.4.3"
   resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
@@ -128,98 +135,99 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.59.2.tgz#0dec2a2a8dabe4b5ffaf58ae96fb37623f857b45"
-  integrity sha512-p2+Y3InGQj48Cj3MbaBxCdX40ckmyCvd2M8loMMwTjLhXmv/p4NflIreAADNlaLP0RaFoiZ7IdnVGDCYQdnCzg==
+"@sentry-internal/eslint-config-sdk@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.60.0.tgz#11ba3c4991807a4e203e0cee83465e465e168087"
+  integrity sha512-Zj6OxzBRllZYGoZL6Qassmrv1a+RIKWAolfG+2z26lx6A9+GHjZq66m4uKUJyHDlJ+p+iOj5xsHHwKYkki3e9g==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.59.2"
-    "@sentry-internal/typescript" "7.59.2"
+    "@sentry-internal/eslint-plugin-sdk" "7.60.0"
+    "@sentry-internal/typescript" "7.60.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
     eslint-plugin-deprecation "^1.1.0"
     eslint-plugin-import "^2.22.0"
+    eslint-plugin-jest "^27.2.2"
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.59.2.tgz#78226f235653bf25ae679266fc540754e17ca2e5"
-  integrity sha512-Q/yNLFpCo8qIZUQm7EVtwyLQt3q+MI3RHE3FlpFfqUwGvRZsIOOMCrpPjW1FZ2+3uSzZFof8dEGntoM9GfgqEA==
+"@sentry-internal/eslint-plugin-sdk@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.60.0.tgz#bcf71a08ca2f0b785eb9f06b3ff1cffa593588a5"
+  integrity sha512-cOVTWuxG6mPZ+rv+NWre3b7PcEl0PqKGKecsp8hF9dsKH3lTFGSD1tccs7LWaM+COqCZBtFY53tB2/cXQxL90A==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.59.2.tgz#91c44a37151bb81fac0500b4e031f53583dff772"
-  integrity sha512-02gteChV/lMobWU06VlITq+myEWk0MzhnDCm8n/DMigB47I9HkWZFAJ+CYG6Ns0rTL+3+/c2V0bPyQkZwIC+Sg==
+"@sentry-internal/tracing@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.60.0.tgz#4f101d936a45965b086e042a3fba7ec7683cc034"
+  integrity sha512-2qvxmR954H+K7u4o92sS2u+hntzshem9XwfHAqDvBe51arNbFVy8LfJTJ5fffgZq/6jXlozCO0/6aR5yLR5mBg==
   dependencies:
-    "@sentry/core" "7.59.2"
-    "@sentry/types" "7.59.2"
-    "@sentry/utils" "7.59.2"
+    "@sentry/core" "7.60.0"
+    "@sentry/types" "7.60.0"
+    "@sentry/utils" "7.60.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.59.2.tgz#df8e837c3580caf44864d88d0cd6721e59594b9a"
-  integrity sha512-0GIslPJpxTjPYA1zTh/wyz8majvQbn0bNZftv71Ng17y/HaZiGzYDyFG8OEjWgp7poIsOYrMAe7hsr6b5jniTA==
-
-"@sentry/browser@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.59.2.tgz#77f6c7af33448ec375d684442ef51f21f5c26ace"
-  integrity sha512-N1JiBs1VRR5DV0209TZgaMwRGiTYN1C34sFzIW7nuC82X4gHy3tuJjZPlMDTtgFrALBMJ24yQ7D4HJjXrS2+Dw==
-  dependencies:
-    "@sentry-internal/tracing" "7.59.2"
-    "@sentry/core" "7.59.2"
-    "@sentry/replay" "7.59.2"
-    "@sentry/types" "7.59.2"
-    "@sentry/utils" "7.59.2"
+"@sentry-internal/typescript@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.60.0.tgz#546e2ffe259d08e9855e9cb7ddc13b1f737ce539"
+  integrity sha512-KbZlYgwBK0FXknjNGAklohAJDlJ17Sjrj6rseUOmePaR58emUpf/6SvKQXENGdr4yYS9QM5nvdj3Jp2Nk3+Xag==
+
+"@sentry/browser@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.60.0.tgz#feb49746c9b650a968cfa58fa8e6ae43448d7821"
+  integrity sha512-WznY6zrJxCUHZns8jTvDsZw3aaHriSP+jqD+wkXZG3ceooQwFn0RkAstUuoG7YyP4Foinznn3+caeQD4ZjWaXQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.60.0"
+    "@sentry/core" "7.60.0"
+    "@sentry/replay" "7.60.0"
+    "@sentry/types" "7.60.0"
+    "@sentry/utils" "7.60.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.59.2.tgz#5c69cc7b8321f47c3da353f51084e2f4c4170e7d"
-  integrity sha512-GRhoPw6b6GkvOsa060aREc9yyHjgAKITgITNbzUmn0GqIeWD5SMoCBAcENRHVgUnpQWOpnkEF1/sqxvwx+rf6Q==
+"@sentry/core@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.60.0.tgz#c256d1305b52210d608e71de8d8f365ca9377f15"
+  integrity sha512-B02OlFMoqdkfDZlbQfmk7tL2vObShofk7ySd/7mp+oRdUuCvX0tyrGlwI87YJvd8YWSZOCKINs3aVYivw/b6gg==
   dependencies:
-    "@sentry/types" "7.59.2"
-    "@sentry/utils" "7.59.2"
+    "@sentry/types" "7.60.0"
+    "@sentry/utils" "7.60.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.59.2.tgz#ff68286770d6a647a4555c9f0351c7003c00f3bc"
-  integrity sha512-cvTW4VwQdvNeAtBGVGE5hGmsWstGK4PwWe5PccBWJBQGM/rYzwk2tM9ZQnM5M5+yDV4bZ+21sJhvyhsHoTjmzQ==
+"@sentry/node@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.60.0.tgz#9db8fa0e71a4365b2a93a3504f2e48a38eeaae1b"
+  integrity sha512-I27gr7BSkdT1uwDPcbdPm7+w2yke5tojVGgothtvKfql1en4/cJZmk2bkvO2Di41+EF0UrTlUgLQff5X/q24WQ==
   dependencies:
-    "@sentry-internal/tracing" "7.59.2"
-    "@sentry/core" "7.59.2"
-    "@sentry/types" "7.59.2"
-    "@sentry/utils" "7.59.2"
+    "@sentry-internal/tracing" "7.60.0"
+    "@sentry/core" "7.60.0"
+    "@sentry/types" "7.60.0"
+    "@sentry/utils" "7.60.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.59.2.tgz#4fc9c455e0e3b933075afe1729d8ba42953c62d4"
-  integrity sha512-Ma72ofTdtSinBY5GH0zM7k8o/WsdaVdPP/1iyFbcWQDt8dnrcsJVUKK0t9+8gijpiSMUKE+vjFjQNL9/PGYekw==
+"@sentry/replay@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.60.0.tgz#9f59dfb8e7acff5b269ed8752a13c7b1d0f2bb75"
+  integrity sha512-iVSs+mhgjeK0qqLdCqbCa1P4I6hETHCUq14pTYp0bwGrI1D/a1Ho/6wLkwXv47Gnrwaba/7JFM+IxZcN4FzfmQ==
   dependencies:
-    "@sentry/core" "7.59.2"
-    "@sentry/types" "7.59.2"
-    "@sentry/utils" "7.59.2"
+    "@sentry/core" "7.60.0"
+    "@sentry/types" "7.60.0"
+    "@sentry/utils" "7.60.0"
 
-"@sentry/types@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.59.2.tgz#25b2ae0b2dc6733ca48621cf9167c9a7965852ae"
-  integrity sha512-rylG7UQ0cC/xbV6trSuaAE/bsruSZy92jxQ1/KSOYKwBBvRFPXJBuiBtA81b8eYa4THZ+mE/ol2qOTJYuuV4Ug==
+"@sentry/types@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.60.0.tgz#e3e5f16436feff802b1b126a16dba537000cef55"
+  integrity sha512-MSEuF9YjE0j+UKdqee2AzcNlMnShVNTkCB2Wnng6Bc5hHhn4fyYeTLbuFpNxL0ffN65lxblaWx6doDsMcvRxcA==
 
-"@sentry/utils@7.59.2":
-  version "7.59.2"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.59.2.tgz#c4c76b1ea2a7f9363d1203dedfeafec2387bf634"
-  integrity sha512-uxC8xH9wsB/tZUnjmaQ1uGtsumFOc19KWfedVHXzcNwqdt5uS3EB4+D1d8WwiJyLy2nm61DdmTC9SiB4HS+OSw==
+"@sentry/utils@7.60.0":
+  version "7.60.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.60.0.tgz#a96d772dcc2d007f73a5bcf67dcc66f6a7085736"
+  integrity sha512-Oc/PQqzeNDOSy4ZzVj6h9U+GEGRkg2PEVn9PC2V9/v3HDD20mndFqR/S2B5OOgDb/6pNGyz8XiZYI5rb29WFHA==
   dependencies:
-    "@sentry/types" "7.59.2"
+    "@sentry/types" "7.60.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":
@@ -533,6 +541,14 @@
     "@typescript-eslint/types" "5.51.0"
     "@typescript-eslint/visitor-keys" "5.51.0"
 
+"@typescript-eslint/scope-manager@5.62.0":
+  version "5.62.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
+  integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==
+  dependencies:
+    "@typescript-eslint/types" "5.62.0"
+    "@typescript-eslint/visitor-keys" "5.62.0"
+
 "@typescript-eslint/type-utils@5.51.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988"
@@ -548,6 +564,11 @@
   resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.51.0.tgz#e7c1622f46c7eea7e12bbf1edfb496d4dec37c90"
   integrity sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==
 
+"@typescript-eslint/types@5.62.0":
+  version "5.62.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
+  integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
+
 "@typescript-eslint/typescript-estree@5.51.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de"
@@ -561,6 +582,19 @@
     semver "^7.3.7"
     tsutils "^3.21.0"
 
+"@typescript-eslint/typescript-estree@5.62.0":
+  version "5.62.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
+  integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==
+  dependencies:
+    "@typescript-eslint/types" "5.62.0"
+    "@typescript-eslint/visitor-keys" "5.62.0"
+    debug "^4.3.4"
+    globby "^11.1.0"
+    is-glob "^4.0.3"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
+
 "@typescript-eslint/utils@5.51.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47"
@@ -575,6 +609,20 @@
     eslint-utils "^3.0.0"
     semver "^7.3.7"
 
+"@typescript-eslint/utils@^5.10.0":
+  version "5.62.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
+  integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==
+  dependencies:
+    "@eslint-community/eslint-utils" "^4.2.0"
+    "@types/json-schema" "^7.0.9"
+    "@types/semver" "^7.3.12"
+    "@typescript-eslint/scope-manager" "5.62.0"
+    "@typescript-eslint/types" "5.62.0"
+    "@typescript-eslint/typescript-estree" "5.62.0"
+    eslint-scope "^5.1.1"
+    semver "^7.3.7"
+
 "@typescript-eslint/visitor-keys@5.51.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87"
@@ -583,6 +631,14 @@
     "@typescript-eslint/types" "5.51.0"
     eslint-visitor-keys "^3.3.0"
 
+"@typescript-eslint/visitor-keys@5.62.0":
+  version "5.62.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
+  integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==
+  dependencies:
+    "@typescript-eslint/types" "5.62.0"
+    eslint-visitor-keys "^3.3.0"
+
 "@ungap/promise-all-settled@1.1.2":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
@@ -1444,6 +1500,13 @@ eslint-plugin-import@^2.22.0:
     semver "^6.3.0"
     tsconfig-paths "^3.14.1"
 
+eslint-plugin-jest@^27.2.2:
+  version "27.2.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.2.3.tgz#6f8a4bb2ca82c0c5d481d1b3be256ab001f5a3ec"
+  integrity sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==
+  dependencies:
+    "@typescript-eslint/utils" "^5.10.0"
+
 eslint-plugin-jsdoc@^30.0.3:
   version "30.7.13"
   resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.13.tgz#52e5c74fb806d3bbeb51d04a0c829508c3c6b563"

From 7582ded8afe6e09f22b40097197f9859a4a53ecf Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 25 Jul 2023 14:47:24 +0200
Subject: [PATCH 121/239] feat: Use `protocol.handle` on Electron >= v25 (#704)

---
 package.json                   |  2 +-
 src/main/electron-normalize.ts | 44 ++++++++++++++++++++++++++++++++++
 src/main/ipc.ts                |  8 +++----
 yarn.lock                      | 18 +++++++-------
 4 files changed, 57 insertions(+), 15 deletions(-)

diff --git a/package.json b/package.json
index e906e89a..54e8d564 100644
--- a/package.json
+++ b/package.json
@@ -83,7 +83,7 @@
     "chai-as-promised": "^7.1.1",
     "chai-subset": "^1.6.0",
     "cross-env": "^7.0.3",
-    "electron": "23.0.0",
+    "electron": "25.3.0",
     "electron-latest-versions": "^0.2.0",
     "electron-mocha": "^11.0.2",
     "eslint": "7.32.0",
diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts
index 8c0ca940..cbdf4d39 100644
--- a/src/main/electron-normalize.ts
+++ b/src/main/electron-normalize.ts
@@ -204,3 +204,47 @@ export function capturePage(window: BrowserWindow): Promise<NativeImage> {
 
   return window.capturePage();
 }
+
+/**
+ * Electron >= 25 support `protocol.handle`
+ */
+function supportsProtocolHandle(): boolean {
+  return version.major >= 25;
+}
+
+interface InternalRequest {
+  url: string;
+  body?: Buffer;
+}
+
+/**
+ * Registers a custom protocol to receive events from the renderer
+ *
+ * Uses `protocol.handle` if available, otherwise falls back to `protocol.registerStringProtocol`
+ */
+export function registerProtocol(
+  protocol: Electron.Protocol,
+  scheme: string,
+  callback: (request: InternalRequest) => void,
+): void {
+  if (supportsProtocolHandle()) {
+    protocol.handle(scheme, async (request) => {
+      callback({
+        url: request.url,
+        body: Buffer.from(await request.arrayBuffer()),
+      });
+
+      return new Response('');
+    });
+  } else {
+    // eslint-disable-next-line deprecation/deprecation
+    protocol.registerStringProtocol(scheme, (request, complete) => {
+      callback({
+        url: request.url,
+        body: request.uploadData?.[0]?.bytes,
+      });
+
+      complete('');
+    });
+  }
+}
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index be52b6f4..b80f9adb 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -5,7 +5,7 @@ import { app, ipcMain, protocol, WebContents } from 'electron';
 import { TextDecoder, TextEncoder } from 'util';
 
 import { IPCChannel, IPCMode, mergeEvents, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME } from '../common';
-import { supportsFullProtocol, whenAppReady } from './electron-normalize';
+import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize';
 import { ElectronMainOptionsInternal } from './sdk';
 
 function captureEventFromRenderer(
@@ -138,8 +138,8 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
   whenAppReady
     .then(() => {
       for (const sesh of options.getSessions()) {
-        sesh.protocol.registerStringProtocol(PROTOCOL_SCHEME, (request, callback) => {
-          const data = request.uploadData?.[0]?.bytes;
+        registerProtocol(sesh.protocol, PROTOCOL_SCHEME, (request) => {
+          const data = request.body;
 
           if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) {
             handleEvent(options, data.toString());
@@ -148,8 +148,6 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) {
             handleEnvelope(options, data);
           }
-
-          callback('');
         });
       }
     })
diff --git a/yarn.lock b/yarn.lock
index 349f1778..d73bd7c7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -453,10 +453,10 @@
   resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850"
   integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==
 
-"@types/node@^16.11.26":
-  version "16.18.12"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.12.tgz#e3bfea80e31523fde4292a6118f19ffa24fd6f65"
-  integrity sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==
+"@types/node@^18.11.18":
+  version "18.16.19"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.19.tgz#cb03fca8910fdeb7595b755126a8a78144714eea"
+  integrity sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==
 
 "@types/qs@*":
   version "6.9.7"
@@ -1313,13 +1313,13 @@ electron-window@^0.8.0:
   dependencies:
     is-electron-renderer "^2.0.0"
 
-electron@23.0.0:
-  version "23.0.0"
-  resolved "https://registry.yarnpkg.com/electron/-/electron-23.0.0.tgz#4da457d7585149bb1a98ea8bddb286e72322a309"
-  integrity sha512-S6hVtTAjauMiiWP9sBVR5RpcUC464cNZ06I2EMUjeZBq+KooS6tLmNsfw0zLpAXDp1qosjlBP3v71NTZ3gd9iA==
+electron@25.3.0:
+  version "25.3.0"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-25.3.0.tgz#e818ab3ebd3e7a45f8fca0f47e607c9af2dc92c7"
+  integrity sha512-cyqotxN+AroP5h2IxUsJsmehYwP5LrFAOO7O7k9tILME3Sa1/POAg3shrhx4XEnaAMyMqMLxzGvkzCVxzEErnA==
   dependencies:
     "@electron/get" "^2.0.0"
-    "@types/node" "^16.11.26"
+    "@types/node" "^18.11.18"
     extract-zip "^2.0.1"
 
 emoji-regex@^8.0.0:

From ecd978a63cb4899f64b9b67746f56f76be59317d Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Sat, 29 Jul 2023 12:02:26 +0200
Subject: [PATCH 122/239] feat: Deprecate `tracingOrigins` for
 `tracePropagationTargets` (#703)

---
 package.json                             |   1 +
 src/main/integrations/net-breadcrumbs.ts | 137 +++++++++-----
 test/unit/net.test.ts                    | 220 +++++++++++++++++++++++
 3 files changed, 314 insertions(+), 44 deletions(-)
 create mode 100644 test/unit/net.test.ts

diff --git a/package.json b/package.json
index 54e8d564..9176bb9b 100644
--- a/package.json
+++ b/package.json
@@ -64,6 +64,7 @@
     "@sentry/types": "7.60.0",
     "@sentry/utils": "7.60.0",
     "deepmerge": "4.3.0",
+    "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts
index f7453e95..08ba85bc 100644
--- a/src/main/integrations/net-breadcrumbs.ts
+++ b/src/main/integrations/net-breadcrumbs.ts
@@ -1,12 +1,11 @@
 /* eslint-disable deprecation/deprecation */
-import { getCurrentHub } from '@sentry/core';
-import { Integration, Span } from '@sentry/types';
-import { fill } from '@sentry/utils';
+import { getCurrentHub } from '@sentry/node';
+import { EventProcessor, Hub, Integration, Span, TracePropagationTargets } from '@sentry/types';
+import { fill, stringMatchesSomePattern } from '@sentry/utils';
 import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net } from 'electron';
+import { LRUMap } from 'lru_map';
 import * as urlModule from 'url';
 
-import { OrBool, OrFalse } from '../../common/types';
-
 type ShouldTraceFn = (method: string, url: string) => boolean;
 
 interface NetOptions {
@@ -15,37 +14,23 @@ interface NetOptions {
    *
    * Defaults to: true
    */
-  breadcrumbs: boolean;
+  breadcrumbs?: boolean;
   /**
    * Whether to capture transaction spans for net requests
    *
    * true | false | (method: string, url: string) => boolean
    * Defaults to: true
    */
-  tracing: ShouldTraceFn;
+  tracing?: ShouldTraceFn | boolean;
+
   /**
-   * Whether to add 'sentry-trace' headers to outgoing requests
+   * @deprecated Use `tracePropagationTargets` client option instead.
    *
-   * true | false | (method: string, url: string) => boolean
-   * Defaults to: true
+   * Sentry.init({
+   *   tracePropagationTargets: ['api.site.com'],
+   * })
    */
-  tracingOrigins: ShouldTraceFn;
-}
-
-const DEFAULT_OPTIONS: NetOptions = {
-  breadcrumbs: true,
-  tracing: (_method, _url) => true,
-  tracingOrigins: (_method, _url) => true,
-};
-
-/** Converts all user supplied options to T | false */
-export function normalizeOptions(options: Partial<OrBool<NetOptions>>): Partial<OrFalse<NetOptions>> {
-  return (Object.keys(options) as (keyof NetOptions)[]).reduce((obj, k) => {
-    if (typeof options[k] === 'function' || options[k] === false) {
-      obj[k] = options[k] as boolean & (false | ShouldTraceFn);
-    }
-    return obj;
-  }, {} as Partial<OrFalse<NetOptions>>);
+  tracingOrigins?: ShouldTraceFn | boolean;
 }
 
 /** http module integration */
@@ -56,22 +41,19 @@ export class Net implements Integration {
   /** @inheritDoc */
   public name: string = Net.id;
 
-  private readonly _options: OrFalse<NetOptions>;
-
   /** @inheritDoc */
-  public constructor(options: Partial<OrBool<NetOptions>> = {}) {
-    this._options = {
-      ...DEFAULT_OPTIONS,
-      ...normalizeOptions(options),
-    };
-  }
+  public constructor(private readonly _options: NetOptions = {}) {}
 
   /** @inheritDoc */
-  public setupOnce(): void {
+  public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {
+    const clientOptions = getCurrentHub().getClient()?.getOptions();
+
     // No need to instrument if we don't want to track anything
-    if (this._options.breadcrumbs || this._options.tracing) {
-      fill(net, 'request', createWrappedRequestFactory(this._options));
+    if (this._options.breadcrumbs === false && this._options.tracing === false) {
+      return;
     }
+
+    fill(net, 'request', createWrappedRequestFactory(this._options, clientOptions?.tracePropagationTargets));
   }
 }
 
@@ -125,7 +107,73 @@ type RequestMethod = (opt: RequestOptions) => ClientRequest;
 type WrappedRequestMethodFactory = (original: RequestMethod) => RequestMethod;
 
 /** */
-function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedRequestMethodFactory {
+function createWrappedRequestFactory(
+  options: NetOptions,
+  tracePropagationTargets: TracePropagationTargets | undefined,
+): WrappedRequestMethodFactory {
+  // We're caching results so we don't have to recompute regexp every time we create a request.
+  const createSpanUrlMap = new LRUMap<string, boolean>(100);
+  const headersUrlMap = new LRUMap<string, boolean>(100);
+
+  const shouldCreateSpan = (method: string, url: string): boolean => {
+    if (options.tracing === undefined) {
+      return true;
+    }
+
+    if (options.tracing === false) {
+      return false;
+    }
+
+    const key = `${method}:${url}`;
+
+    const cachedDecision = createSpanUrlMap.get(key);
+    if (cachedDecision !== undefined) {
+      return cachedDecision;
+    }
+
+    const decision = options.tracing === true || options.tracing(method, url);
+    createSpanUrlMap.set(key, decision);
+    return decision;
+  };
+
+  // This will be considerably simpler once `tracingOrigins` is removed in the next major release
+  const shouldAttachTraceData = (method: string, url: string): boolean => {
+    if (options.tracingOrigins === false) {
+      return false;
+    }
+
+    // Neither integration nor client options are set or integration option is set to true
+    if (
+      (options.tracingOrigins === undefined && tracePropagationTargets === undefined) ||
+      options.tracingOrigins === true
+    ) {
+      return true;
+    }
+
+    const key = `${method}:${url}`;
+
+    const cachedDecision = headersUrlMap.get(key);
+    if (cachedDecision !== undefined) {
+      return cachedDecision;
+    }
+
+    if (tracePropagationTargets) {
+      const decision = stringMatchesSomePattern(url, tracePropagationTargets);
+      headersUrlMap.set(key, decision);
+      return decision;
+    }
+
+    if (options.tracingOrigins) {
+      const decision = options.tracingOrigins(method, url);
+      headersUrlMap.set(key, decision);
+      return decision;
+    }
+
+    // We cannot reach here since either `tracePropagationTargets` or `tracingOrigins` will be defined but TypeScript
+    // cannot infer that
+    return true;
+  };
+
   return function wrappedRequestMethodFactory(originalRequestMethod: RequestMethod): RequestMethod {
     return function requestMethod(this: typeof net, reqOptions: RequestOptions): ClientRequest {
       // eslint-disable-next-line @typescript-eslint/no-this-alias
@@ -140,8 +188,9 @@ function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedReque
 
       let span: Span | undefined;
 
-      const scope = getCurrentHub().getScope();
-      if (scope && options.tracing && options.tracing(method, url)) {
+      const hub = getCurrentHub();
+      const scope = hub.getScope();
+      if (scope && shouldCreateSpan(method, url)) {
         const parentSpan = scope.getSpan();
 
         if (parentSpan) {
@@ -150,7 +199,7 @@ function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedReque
             op: 'http.client',
           });
 
-          if (options.tracingOrigins && options.tracingOrigins(method, url)) {
+          if (shouldAttachTraceData(method, url)) {
             request.setHeader('sentry-trace', span.toTraceparent());
           }
         }
@@ -160,7 +209,7 @@ function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedReque
         .once('response', function (this: ClientRequest, res: IncomingMessage): void {
           // eslint-disable-next-line @typescript-eslint/no-this-alias
           const req = this;
-          if (options.breadcrumbs) {
+          if (options.breadcrumbs !== false) {
             addRequestBreadcrumb('response', method, url, req, res);
           }
           if (span) {
@@ -174,7 +223,7 @@ function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedReque
           // eslint-disable-next-line @typescript-eslint/no-this-alias
           const req = this;
 
-          if (options.breadcrumbs) {
+          if (options.breadcrumbs !== false) {
             addRequestBreadcrumb('error', method, url, req, undefined);
           }
           if (span) {
diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts
new file mode 100644
index 00000000..d921cb8f
--- /dev/null
+++ b/test/unit/net.test.ts
@@ -0,0 +1,220 @@
+import { expect, should, use } from 'chai';
+import * as http from 'http';
+import chaiAsPromised = require('chai-as-promised');
+import { setAsyncContextStrategy, Span } from '@sentry/core';
+import { createTransport, Hub, NodeClient } from '@sentry/node';
+import { ClientOptions, Transaction, TransactionContext } from '@sentry/types';
+import { resolvedSyncPromise } from '@sentry/utils';
+import { net } from 'electron';
+
+import { Net } from '../../src/main/integrations/net-breadcrumbs';
+
+// eslint-disable-next-line @typescript-eslint/unbound-method
+const originalRequest = net.request;
+
+should();
+use(chaiAsPromised);
+
+const TEST_SERVER_PORT = 8123;
+
+function startServer(): http.Server<any, any> {
+  return http
+    .createServer(function (req, res) {
+      const headersJson = JSON.stringify(req.headers);
+      res.write(headersJson);
+      res.end();
+    })
+    .listen(TEST_SERVER_PORT);
+}
+
+async function makeRequest(): Promise<Record<string, string>> {
+  return net.fetch(`http://localhost:${TEST_SERVER_PORT}`).then((res) => res.json()) as Promise<Record<string, string>>;
+}
+
+function getDefaultNodeClientOptions(options: Partial<ClientOptions> = {}): ClientOptions {
+  return {
+    integrations: [],
+    transport: () => createTransport({ recordDroppedEvent: () => undefined }, (_) => resolvedSyncPromise({})),
+    stackParser: () => [],
+    instrumenter: 'sentry',
+    ...options,
+  };
+}
+
+function mockAsyncContextStrategy(getHub: () => Hub): void {
+  function getCurrentHub(): Hub | undefined {
+    return getHub();
+  }
+
+  function runWithAsyncContext<T>(fn: (hub: Hub) => T): T {
+    return fn(getHub());
+  }
+
+  setAsyncContextStrategy({ getCurrentHub, runWithAsyncContext });
+}
+
+function createTransactionOnScope(
+  customOptions: Partial<ClientOptions> = {},
+  customContext?: Partial<TransactionContext>,
+): [Transaction, Hub] {
+  const hub = new Hub();
+  mockAsyncContextStrategy(() => hub);
+
+  const options = getDefaultNodeClientOptions({
+    dsn: 'https://dogsarebadatkeepingsecrets@squirrelchasers.ingest.sentry.io/12312012',
+    debug: true,
+    tracesSampleRate: 1.0,
+    release: '1.0.0',
+    environment: 'production',
+    ...customOptions,
+  });
+
+  hub.bindClient(new NodeClient(options));
+
+  hub.configureScope((scope) =>
+    scope.setUser({
+      id: 'uid123',
+      segment: 'segmentA',
+    }),
+  );
+
+  const transaction = hub.startTransaction({
+    name: 'dogpark',
+    traceId: '12312012123120121231201212312012',
+    ...customContext,
+  });
+
+  hub.getScope().setSpan(transaction);
+
+  return [transaction, hub];
+}
+
+function getSpans(transaction: Transaction): Span[] {
+  return (transaction as unknown as Span).spanRecorder?.spans as Span[];
+}
+
+// eslint-disable-next-line jest/no-disabled-tests
+describe.skip('net integration', () => {
+  let server: http.Server<any, any> | undefined;
+
+  beforeEach(() => {
+    net.request = originalRequest;
+    server = startServer();
+  });
+
+  afterEach(() => {
+    if (server) {
+      server.close();
+    }
+  });
+
+  it('creates spans and adds headers by default', async () => {
+    const [transaction] = createTransactionOnScope({ integrations: [new Net()] });
+    const headers = await makeRequest();
+
+    const spans = getSpans(transaction);
+    expect(spans.length).to.equal(2);
+
+    // our span is at index 1 because the transaction itself is at index 0
+    expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+    expect(spans[1].op).to.equal('http.client');
+
+    expect(headers['sentry-trace']).not.to.be.empty;
+  });
+
+  describe('constructor options', () => {
+    it('tracing = false disables spans and headers', async () => {
+      const [transaction] = createTransactionOnScope({
+        integrations: [new Net({ tracing: false })],
+      });
+      const headers = await makeRequest();
+
+      const spans = getSpans(transaction);
+
+      // We should have the original transaction span, but no request span
+      expect(spans.length).to.equal(1);
+      expect(headers['sentry-trace']).to.be.undefined;
+    });
+
+    it('tracing = fn can disable spans and headers', async () => {
+      const [transaction] = createTransactionOnScope({
+        integrations: [new Net({ tracing: () => false })],
+      });
+      const headers = await makeRequest();
+
+      const spans = getSpans(transaction);
+
+      // We should have the original transaction span, but no request span
+      expect(spans.length).to.equal(1);
+      expect(headers['sentry-trace']).to.be.undefined;
+    });
+
+    it('tracing = fn can enable spans and headers', async () => {
+      const [transaction] = createTransactionOnScope({
+        integrations: [new Net({ tracing: () => true })],
+      });
+      const headers = await makeRequest();
+
+      const spans = getSpans(transaction);
+      expect(spans.length).to.equal(2);
+
+      // our span is at index 1 because the transaction itself is at index 0
+      expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      expect(spans[1].op).to.equal('http.client');
+
+      expect(headers['sentry-trace']).not.to.be.empty;
+    });
+
+    it('tracingOrigins = fn can disable headers', async () => {
+      const [transaction] = createTransactionOnScope({
+        integrations: [new Net({ tracing: () => true, tracingOrigins: () => false })],
+      });
+      const headers = await makeRequest();
+
+      const spans = getSpans(transaction);
+      expect(spans.length).to.equal(2);
+
+      // our span is at index 1 because the transaction itself is at index 0
+      expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      expect(spans[1].op).to.equal('http.client');
+
+      expect(headers['sentry-trace']).to.be.undefined;
+    });
+  });
+
+  describe('client options', () => {
+    it('tracePropagationTargets can enable headers', async () => {
+      const [transaction] = createTransactionOnScope({
+        tracePropagationTargets: ['localhost'],
+        integrations: [new Net()],
+      });
+      const headers = await makeRequest();
+
+      const spans = getSpans(transaction);
+      expect(spans.length).to.equal(2);
+
+      // our span is at index 1 because the transaction itself is at index 0
+      expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      expect(spans[1].op).to.equal('http.client');
+
+      expect(headers['sentry-trace']).not.to.be.empty;
+    });
+
+    it('tracePropagationTargets can disable headers', async () => {
+      const [transaction] = createTransactionOnScope({
+        tracePropagationTargets: ['api.localhost'],
+        integrations: [new Net()],
+      });
+      const headers = await makeRequest();
+
+      const spans = getSpans(transaction);
+      expect(spans.length).to.equal(2);
+
+      // our span is at index 1 because the transaction itself is at index 0
+      expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      expect(spans[1].op).to.equal('http.client');
+
+      expect(headers['sentry-trace']).to.be.undefined;
+    });
+  });
+});

From 9eaed5d01e3e139218e6f9efc2636ca94f8c1cec Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 2 Aug 2023 15:34:05 +0200
Subject: [PATCH 123/239] feat: Tracing without performance (#710)

---
 src/main/integrations/net-breadcrumbs.ts | 42 ++++++++++++++++++++++--
 test/unit/net.test.ts                    | 31 ++++++++++++++---
 2 files changed, 65 insertions(+), 8 deletions(-)

diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts
index 08ba85bc..898ea44f 100644
--- a/src/main/integrations/net-breadcrumbs.ts
+++ b/src/main/integrations/net-breadcrumbs.ts
@@ -1,7 +1,14 @@
 /* eslint-disable deprecation/deprecation */
+import { getDynamicSamplingContextFromClient } from '@sentry/core';
 import { getCurrentHub } from '@sentry/node';
-import { EventProcessor, Hub, Integration, Span, TracePropagationTargets } from '@sentry/types';
-import { fill, stringMatchesSomePattern } from '@sentry/utils';
+import { DynamicSamplingContext, EventProcessor, Hub, Integration, Span, TracePropagationTargets } from '@sentry/types';
+import {
+  dynamicSamplingContextToSentryBaggageHeader,
+  fill,
+  generateSentryTraceHeader,
+  logger,
+  stringMatchesSomePattern,
+} from '@sentry/utils';
 import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net } from 'electron';
 import { LRUMap } from 'lru_map';
 import * as urlModule from 'url';
@@ -102,6 +109,21 @@ function parseOptions(optionsIn: ClientRequestConstructorOptions | string): { me
   };
 }
 
+function addHeadersToRequest(
+  request: Electron.ClientRequest,
+  url: string,
+  sentryTraceHeader: string,
+  dynamicSamplingContext?: Partial<DynamicSamplingContext>,
+): void {
+  logger.log(`[Tracing] Adding sentry-trace header ${sentryTraceHeader} to outgoing request to "${url}": `);
+  request.setHeader('sentry-trace', sentryTraceHeader);
+
+  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);
+  if (sentryBaggageHeader) {
+    request.setHeader('baggage', sentryBaggageHeader);
+  }
+}
+
 type RequestOptions = string | ClientRequestConstructorOptions;
 type RequestMethod = (opt: RequestOptions) => ClientRequest;
 type WrappedRequestMethodFactory = (original: RequestMethod) => RequestMethod;
@@ -200,7 +222,21 @@ function createWrappedRequestFactory(
           });
 
           if (shouldAttachTraceData(method, url)) {
-            request.setHeader('sentry-trace', span.toTraceparent());
+            const sentryTraceHeader = span.toTraceparent();
+            const dynamicSamplingContext = span?.transaction?.getDynamicSamplingContext();
+
+            addHeadersToRequest(request, url, sentryTraceHeader, dynamicSamplingContext);
+          }
+        } else {
+          if (shouldAttachTraceData(method, url)) {
+            const { traceId, sampled, dsc } = scope.getPropagationContext();
+            const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled);
+
+            const client = hub.getClient();
+            const dynamicSamplingContext =
+              dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined);
+
+            addHeadersToRequest(request, url, sentryTraceHeader, dynamicSamplingContext);
           }
         }
       }
diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts
index d921cb8f..d4d98544 100644
--- a/test/unit/net.test.ts
+++ b/test/unit/net.test.ts
@@ -1,7 +1,7 @@
 import { expect, should, use } from 'chai';
 import * as http from 'http';
 import chaiAsPromised = require('chai-as-promised');
-import { setAsyncContextStrategy, Span } from '@sentry/core';
+import { getActiveTransaction, setAsyncContextStrategy, Span } from '@sentry/core';
 import { createTransport, Hub, NodeClient } from '@sentry/node';
 import { ClientOptions, Transaction, TransactionContext } from '@sentry/types';
 import { resolvedSyncPromise } from '@sentry/utils';
@@ -53,10 +53,7 @@ function mockAsyncContextStrategy(getHub: () => Hub): void {
   setAsyncContextStrategy({ getCurrentHub, runWithAsyncContext });
 }
 
-function createTransactionOnScope(
-  customOptions: Partial<ClientOptions> = {},
-  customContext?: Partial<TransactionContext>,
-): [Transaction, Hub] {
+function createHubOnScope(customOptions: Partial<ClientOptions> = {}): Hub {
   const hub = new Hub();
   mockAsyncContextStrategy(() => hub);
 
@@ -78,6 +75,15 @@ function createTransactionOnScope(
     }),
   );
 
+  return hub;
+}
+
+function createTransactionOnScope(
+  customOptions: Partial<ClientOptions> = {},
+  customContext?: Partial<TransactionContext>,
+): [Transaction, Hub] {
+  const hub = createHubOnScope(customOptions);
+
   const transaction = hub.startTransaction({
     name: 'dogpark',
     traceId: '12312012123120121231201212312012',
@@ -217,4 +223,19 @@ describe.skip('net integration', () => {
       expect(headers['sentry-trace']).to.be.undefined;
     });
   });
+
+  describe('tracing without performance', () => {
+    it('adds headers without transaction', async () => {
+      createHubOnScope({
+        tracePropagationTargets: ['localhost'],
+        integrations: [new Net()],
+      });
+      const headers = await makeRequest();
+      const transaction = getActiveTransaction();
+
+      expect(transaction).to.be.undefined;
+      expect(headers['sentry-trace']).not.to.be.empty;
+      expect(headers['baggage']).not.to.be.empty;
+    });
+  });
 });

From 85f82bc34baadb847ef0a1918dfcaf4b5f00449b Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 2 Aug 2023 21:55:48 +0200
Subject: [PATCH 124/239] fix: Ensure context from previous run is used for
 native main crashes (#683)

---
 .../integrations/sentry-minidump/index.ts     | 90 +++++++++++++------
 src/main/store.ts                             |  5 +-
 .../native-sentry/main-update/event.json      | 72 +++++++++++++++
 .../native-sentry/main-update/package.json    |  8 ++
 .../native-sentry/main-update/recipe.yml      |  4 +
 .../native-sentry/main-update/src/index.html  | 15 ++++
 .../native-sentry/main-update/src/main.js     | 32 +++++++
 .../test-apps/native-sentry/main/src/main.js  |  2 +-
 8 files changed, 195 insertions(+), 33 deletions(-)
 create mode 100644 test/e2e/test-apps/native-sentry/main-update/event.json
 create mode 100644 test/e2e/test-apps/native-sentry/main-update/package.json
 create mode 100644 test/e2e/test-apps/native-sentry/main-update/recipe.yml
 create mode 100644 test/e2e/test-apps/native-sentry/main-update/src/index.html
 create mode 100644 test/e2e/test-apps/native-sentry/main-update/src/main.js

diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index ca4367c8..c1f4b9cc 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -5,7 +5,7 @@ import { basename, logger, SentryError } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
 import { mergeEvents } from '../../../common';
-import { getEventDefaults } from '../../context';
+import { getDefaultEnvironment, getDefaultReleaseName, getEventDefaults } from '../../context';
 import { EXIT_REASONS, onChildProcessGone, onRendererProcessGone } from '../../electron-normalize';
 import { sentryCachePath } from '../../fs';
 import { getRendererProperties, trackRendererProperties } from '../../renderers';
@@ -14,6 +14,11 @@ import { checkPreviousSession, sessionCrashed } from '../../sessions';
 import { BufferedWriteStore } from '../../store';
 import { deleteMinidump, getMinidumpLoader, MinidumpLoader } from './minidump-loader';
 
+interface PreviousRun {
+  scope: Scope;
+  event?: Event;
+}
+
 /** Sends minidumps via the Sentry uploader */
 export class SentryMinidump implements Integration {
   /** @inheritDoc */
@@ -23,10 +28,10 @@ export class SentryMinidump implements Integration {
   public name: string = SentryMinidump.id;
 
   /** Store to persist context information beyond application crashes. */
-  private _scopeStore?: BufferedWriteStore<Scope>;
+  private _scopeStore?: BufferedWriteStore<PreviousRun>;
 
   /** Temp store for the scope of last run */
-  private _scopeLastRun?: Promise<Scope>;
+  private _scopeLastRun?: Promise<PreviousRun>;
 
   private _minidumpLoader?: MinidumpLoader;
 
@@ -41,15 +46,22 @@ export class SentryMinidump implements Integration {
 
     this._startCrashReporter();
 
-    this._scopeStore = new BufferedWriteStore<Scope>(sentryCachePath, 'scope_v2', new Scope());
+    this._scopeStore = new BufferedWriteStore<PreviousRun>(sentryCachePath, 'scope_v3', {
+      scope: new Scope(),
+    });
+
     // We need to store the scope in a variable here so it can be attached to minidumps
     this._scopeLastRun = this._scopeStore.get();
 
-    this._setupScopeListener();
-
-    const client = getCurrentHub().getClient<NodeClient>();
+    const hub = getCurrentHub();
+    const client = hub.getClient<NodeClient>();
     const options = client?.getOptions() as ElectronMainOptions;
 
+    const currentRelease = options?.release || getDefaultReleaseName();
+    const currentEnvironment = options?.environment || getDefaultEnvironment();
+
+    this._setupScopeListener(currentRelease, currentEnvironment);
+
     if (!options?.dsn) {
       throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied');
     }
@@ -169,22 +181,31 @@ export class SentryMinidump implements Integration {
   /**
    * Adds a scope listener to persist changes to disk.
    */
-  private _setupScopeListener(): void {
-    const hubScope = getCurrentHub().getScope();
-    if (hubScope) {
-      hubScope.addScopeListener((updatedScope) => {
-        const scope = Scope.clone(updatedScope);
-        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
-        (scope as any)._eventProcessors = [];
-        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
-        (scope as any)._scopeListeners = [];
-
-        // Since the initial scope read is async, we need to ensure that any writes do not beat that
-        // https://github.com/getsentry/sentry-electron/issues/585
-        setImmediate(() => {
-          void this._scopeStore?.set(scope);
+  private _setupScopeListener(currentRelease: string, currentEnvironment: string): void {
+    const scopeChanged = (updatedScope: Scope): void => {
+      const scope = Scope.clone(updatedScope);
+      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
+      (scope as any)._eventProcessors = [];
+      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
+      (scope as any)._scopeListeners = [];
+
+      // Since the initial scope read is async, we need to ensure that any writes do not beat that
+      // https://github.com/getsentry/sentry-electron/issues/585
+      setImmediate(async () => {
+        const event = await getEventDefaults(currentRelease, currentEnvironment);
+        void this._scopeStore?.set({
+          scope,
+          event,
         });
       });
+    };
+
+    const scope = getCurrentHub().getScope();
+
+    if (scope) {
+      scope.addScopeListener(scopeChanged);
+      // Ensure at least one event is written to disk
+      scopeChanged(scope);
     }
   }
 
@@ -193,7 +214,7 @@ export class SentryMinidump implements Integration {
    *
    * Returns true if one or more minidumps were found
    */
-  private async _sendNativeCrashes(event: Event): Promise<boolean> {
+  private async _sendNativeCrashes(eventIn: Event): Promise<boolean> {
     // Whenever we are called, assume that the crashes we are going to load down
     // below have occurred recently. This means, we can use the same event data
     // for all minidumps that we load now. There are two conditions:
@@ -206,6 +227,8 @@ export class SentryMinidump implements Integration {
     //     about it. Just use the breadcrumbs and context information we have
     //     right now and hope that the delay was not too long.
 
+    let event: Event | null = eventIn;
+
     if (this._minidumpLoader === undefined) {
       throw new SentryError('Invariant violation: Native crashes not enabled');
     }
@@ -224,19 +247,30 @@ export class SentryMinidump implements Integration {
         const enabled = client.getOptions().enabled;
 
         // If the SDK is not enabled, we delete the minidump files so they
-        // dont accumulate and/or get sent later
+        // don't accumulate and/or get sent later
         if (enabled === false) {
           minidumps.forEach(deleteMinidump);
           return false;
         }
 
-        const storedScope = Scope.clone(await this._scopeLastRun);
-        let newEvent = await storedScope.applyToEvent(event);
+        // If this is a native main process crash, we need to apply the scope and context from the previous run
+        if (event?.tags?.['event.process'] === 'browser') {
+          const previousRun = await this._scopeLastRun;
+
+          const storedScope = Scope.clone(previousRun?.scope);
+          event = await storedScope.applyToEvent(event);
+
+          if (event && previousRun) {
+            event.release = previousRun.event?.release || event.release;
+            event.environment = previousRun.event?.environment || event.environment;
+            event.contexts = previousRun.event?.contexts || event.contexts;
+          }
+        }
 
         const hubScope = hub.getScope();
-        newEvent = hubScope ? await hubScope.applyToEvent(event) : event;
+        event = hubScope && event ? await hubScope.applyToEvent(event) : event;
 
-        if (!newEvent) {
+        if (!event) {
           return false;
         }
 
@@ -244,7 +278,7 @@ export class SentryMinidump implements Integration {
           const data = await minidump.load();
 
           if (data) {
-            captureEvent(newEvent, {
+            captureEvent(event, {
               attachments: [
                 {
                   attachmentType: 'event.minidump',
diff --git a/src/main/store.ts b/src/main/store.ts
index 94887d00..bffb0f3c 100644
--- a/src/main/store.ts
+++ b/src/main/store.ts
@@ -117,8 +117,6 @@ export class Store<T> {
  * Extends Store to throttle writes.
  */
 export class BufferedWriteStore<T> extends Store<T> {
-  /** The minimum time between writes */
-  private readonly _throttleTime?: number;
   /** A write that hasn't been written to disk yet */
   private _pendingWrite: { data: T; timeout: NodeJS.Timeout } | undefined;
 
@@ -130,9 +128,8 @@ export class BufferedWriteStore<T> extends Store<T> {
    * @param initial An initial value to initialize data with.
    * @param throttleTime The minimum time between writes
    */
-  public constructor(path: string, id: string, initial: T, throttleTime: number = 500) {
+  public constructor(path: string, id: string, initial: T, private readonly _throttleTime: number = 500) {
     super(path, id, initial);
-    this._throttleTime = throttleTime;
   }
 
   /** @inheritdoc */
diff --git a/test/e2e/test-apps/native-sentry/main-update/event.json b/test/e2e/test-apps/native-sentry/main-update/event.json
new file mode 100644
index 00000000..203cd235
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/main-update/event.json
@@ -0,0 +1,72 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "native-sentry-main-update",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution":"{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "release": "native-sentry-main-update@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "event_id": "{{id}}",
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "tags": {
+      "event.environment": "native",
+      "event.origin": "electron",
+      "event.process": "browser",
+      "event_type": "native"
+    }
+  },
+  "attachments": [ { "attachment_type": "event.minidump" } ]
+}
diff --git a/test/e2e/test-apps/native-sentry/main-update/package.json b/test/e2e/test-apps/native-sentry/main-update/package.json
new file mode 100644
index 00000000..150ecdb8
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/main-update/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "native-sentry-main-update",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/native-sentry/main-update/recipe.yml b/test/e2e/test-apps/native-sentry/main-update/recipe.yml
new file mode 100644
index 00000000..8e3a25db
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/main-update/recipe.yml
@@ -0,0 +1,4 @@
+description: Native Main Crash (after update)
+category: Native (Sentry Uploader)
+command: yarn
+runTwice: true
diff --git a/test/e2e/test-apps/native-sentry/main-update/src/index.html b/test/e2e/test-apps/native-sentry/main-update/src/index.html
new file mode 100644
index 00000000..2707fc4f
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/main-update/src/index.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+
+      init({
+        debug: true,
+      });
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/e2e/test-apps/native-sentry/main-update/src/main.js b/test/e2e/test-apps/native-sentry/main-update/src/main.js
new file mode 100644
index 00000000..e2af00c9
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/main-update/src/main.js
@@ -0,0 +1,32 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  release: process.env.APP_FIRST_RUN ? 'native-sentry-main-update@1.0.0' : 'native-sentry-main-update@2.0.0',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+
+  // We only crash on the first run
+  // The second run is where the crash is uploaded
+  if (process.env.APP_FIRST_RUN) {
+    setTimeout(() => {
+      process.crash();
+    }, 1000);
+  }
+});
diff --git a/test/e2e/test-apps/native-sentry/main/src/main.js b/test/e2e/test-apps/native-sentry/main/src/main.js
index ae6a4a7a..c723921e 100644
--- a/test/e2e/test-apps/native-sentry/main/src/main.js
+++ b/test/e2e/test-apps/native-sentry/main/src/main.js
@@ -30,6 +30,6 @@ app.on('ready', () => {
   if (process.env.APP_FIRST_RUN) {
     setTimeout(() => {
       process.crash();
-    }, 500);
+    }, 1000);
   }
 });

From 03fcd2a996d63d92fcd13a172ad37b999d05af68 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 3 Aug 2023 17:38:40 +0200
Subject: [PATCH 125/239] test: New Sentry SDK version (#709)

---
 package.json        |  14 ++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 124 ++++++++++++++++++++++----------------------
 3 files changed, 70 insertions(+), 70 deletions(-)

diff --git a/package.json b/package.json
index 9176bb9b..898ab1dd 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.60.0",
-    "@sentry/core": "7.60.0",
-    "@sentry/node": "7.60.0",
-    "@sentry/types": "7.60.0",
-    "@sentry/utils": "7.60.0",
+    "@sentry/browser": "7.61.0",
+    "@sentry/core": "7.61.0",
+    "@sentry/node": "7.61.0",
+    "@sentry/types": "7.61.0",
+    "@sentry/utils": "7.61.0",
     "deepmerge": "4.3.0",
     "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.60.0",
-    "@sentry-internal/typescript": "7.60.0",
+    "@sentry-internal/eslint-config-sdk": "7.61.0",
+    "@sentry-internal/typescript": "7.61.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index df1e7420..6cb17b45 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_60_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_61_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index d73bd7c7..0d7880cc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -135,13 +135,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.60.0.tgz#11ba3c4991807a4e203e0cee83465e465e168087"
-  integrity sha512-Zj6OxzBRllZYGoZL6Qassmrv1a+RIKWAolfG+2z26lx6A9+GHjZq66m4uKUJyHDlJ+p+iOj5xsHHwKYkki3e9g==
+"@sentry-internal/eslint-config-sdk@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.61.0.tgz#ca4f48f2d441aa37d43304cce60ce0f2b4a4b0e7"
+  integrity sha512-ILhnFmHg/g6hRLs90kS27Gh5N1s8JVEgPGcWhotIew18NfGrdD+8KI1ZPExM8XKatwZxNHy3cOKYyxsFr4/Ydg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.60.0"
-    "@sentry-internal/typescript" "7.60.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.61.0"
+    "@sentry-internal/typescript" "7.61.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -151,83 +151,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.60.0.tgz#bcf71a08ca2f0b785eb9f06b3ff1cffa593588a5"
-  integrity sha512-cOVTWuxG6mPZ+rv+NWre3b7PcEl0PqKGKecsp8hF9dsKH3lTFGSD1tccs7LWaM+COqCZBtFY53tB2/cXQxL90A==
+"@sentry-internal/eslint-plugin-sdk@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.61.0.tgz#969f36b817b008c59892a4435969e16c167a1d4f"
+  integrity sha512-xc1V1vEEBQbox2S8VQDXHA0mNdNXeZ0lmSEYWfLd0z6VapQnvGuixNR+W+R4B0dfMr0lTAwV5UM3qTqGqKlDCQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.60.0.tgz#4f101d936a45965b086e042a3fba7ec7683cc034"
-  integrity sha512-2qvxmR954H+K7u4o92sS2u+hntzshem9XwfHAqDvBe51arNbFVy8LfJTJ5fffgZq/6jXlozCO0/6aR5yLR5mBg==
+"@sentry-internal/tracing@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.61.0.tgz#5a0dd4a9a0b41f2e22904430f3fe0216f36ee086"
+  integrity sha512-zTr+MXEG4SxNxif42LIgm2RQn+JRXL2NuGhRaKSD2i4lXKFqHVGlVdoWqY5UfqnnJPokiTWIj9ejR8I5HV8Ogw==
   dependencies:
-    "@sentry/core" "7.60.0"
-    "@sentry/types" "7.60.0"
-    "@sentry/utils" "7.60.0"
+    "@sentry/core" "7.61.0"
+    "@sentry/types" "7.61.0"
+    "@sentry/utils" "7.61.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.60.0.tgz#546e2ffe259d08e9855e9cb7ddc13b1f737ce539"
-  integrity sha512-KbZlYgwBK0FXknjNGAklohAJDlJ17Sjrj6rseUOmePaR58emUpf/6SvKQXENGdr4yYS9QM5nvdj3Jp2Nk3+Xag==
-
-"@sentry/browser@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.60.0.tgz#feb49746c9b650a968cfa58fa8e6ae43448d7821"
-  integrity sha512-WznY6zrJxCUHZns8jTvDsZw3aaHriSP+jqD+wkXZG3ceooQwFn0RkAstUuoG7YyP4Foinznn3+caeQD4ZjWaXQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.60.0"
-    "@sentry/core" "7.60.0"
-    "@sentry/replay" "7.60.0"
-    "@sentry/types" "7.60.0"
-    "@sentry/utils" "7.60.0"
+"@sentry-internal/typescript@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.61.0.tgz#44cea2d1cabc491549abcdce06ead7053abc08b6"
+  integrity sha512-Al5uvH/LTbGB2PJraO4kDKw5TyksOTOQHcvUgaWXXTB4Eb2df3op+8lTjARgwoSF/0eUpt428qKcPtfJL8n90w==
+
+"@sentry/browser@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.61.0.tgz#04f4122e444d8b5ffefed97af3cde2bc1c71bb80"
+  integrity sha512-IGEkJZRP16Oe5CkXkmhU3QdV5RugW6Vds16yJFFYsgp87NprWtRZgqzldFDYkINStfBHVdctj/Rh/ZrLf8QlkQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.61.0"
+    "@sentry/core" "7.61.0"
+    "@sentry/replay" "7.61.0"
+    "@sentry/types" "7.61.0"
+    "@sentry/utils" "7.61.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.60.0.tgz#c256d1305b52210d608e71de8d8f365ca9377f15"
-  integrity sha512-B02OlFMoqdkfDZlbQfmk7tL2vObShofk7ySd/7mp+oRdUuCvX0tyrGlwI87YJvd8YWSZOCKINs3aVYivw/b6gg==
+"@sentry/core@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.61.0.tgz#0de4f73055bd156c5c0cbac50bb814b272567188"
+  integrity sha512-zl0ZKRjIoYJQWYTd3K/U6zZfS4GDY9yGd2EH4vuYO4kfYtEp/nJ8A+tfAeDo0c9FGxZ0Q+5t5F4/SfwbgyyQzg==
   dependencies:
-    "@sentry/types" "7.60.0"
-    "@sentry/utils" "7.60.0"
+    "@sentry/types" "7.61.0"
+    "@sentry/utils" "7.61.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.60.0.tgz#9db8fa0e71a4365b2a93a3504f2e48a38eeaae1b"
-  integrity sha512-I27gr7BSkdT1uwDPcbdPm7+w2yke5tojVGgothtvKfql1en4/cJZmk2bkvO2Di41+EF0UrTlUgLQff5X/q24WQ==
+"@sentry/node@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.61.0.tgz#1309330f2ad136af532ad2a03b2a312e885705de"
+  integrity sha512-oTCqD/h92uvbRCrtCdiAqN6Mfe3vF7ywVHZ8Nq3hHmJp6XadUT+fCBwNQ7rjMyqJAOYAnx/vp6iN9n8C5qcYZQ==
   dependencies:
-    "@sentry-internal/tracing" "7.60.0"
-    "@sentry/core" "7.60.0"
-    "@sentry/types" "7.60.0"
-    "@sentry/utils" "7.60.0"
+    "@sentry-internal/tracing" "7.61.0"
+    "@sentry/core" "7.61.0"
+    "@sentry/types" "7.61.0"
+    "@sentry/utils" "7.61.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.60.0.tgz#9f59dfb8e7acff5b269ed8752a13c7b1d0f2bb75"
-  integrity sha512-iVSs+mhgjeK0qqLdCqbCa1P4I6hETHCUq14pTYp0bwGrI1D/a1Ho/6wLkwXv47Gnrwaba/7JFM+IxZcN4FzfmQ==
+"@sentry/replay@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.61.0.tgz#f816d6a2fc7511877efee2e328681d659433d147"
+  integrity sha512-1ugk0yZssOPkSg6uTVcysjxlBydycXiOgV0PCU7DsXCFOV1ua5YpyPZFReTz9iFTtwD0LwGFM1LW9wJeQ67Fzg==
   dependencies:
-    "@sentry/core" "7.60.0"
-    "@sentry/types" "7.60.0"
-    "@sentry/utils" "7.60.0"
+    "@sentry/core" "7.61.0"
+    "@sentry/types" "7.61.0"
+    "@sentry/utils" "7.61.0"
 
-"@sentry/types@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.60.0.tgz#e3e5f16436feff802b1b126a16dba537000cef55"
-  integrity sha512-MSEuF9YjE0j+UKdqee2AzcNlMnShVNTkCB2Wnng6Bc5hHhn4fyYeTLbuFpNxL0ffN65lxblaWx6doDsMcvRxcA==
+"@sentry/types@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.61.0.tgz#4243b5ef4658f6b0673bc4372c90e6ec920f78d8"
+  integrity sha512-/GLlIBNR35NKPE/SfWi9W10dK9hE8qTShzsuPVn5wAJxpT3Lb4+dkwmKCTLUYxdkmvRDEudkfOxgalsfQGTAWA==
 
-"@sentry/utils@7.60.0":
-  version "7.60.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.60.0.tgz#a96d772dcc2d007f73a5bcf67dcc66f6a7085736"
-  integrity sha512-Oc/PQqzeNDOSy4ZzVj6h9U+GEGRkg2PEVn9PC2V9/v3HDD20mndFqR/S2B5OOgDb/6pNGyz8XiZYI5rb29WFHA==
+"@sentry/utils@7.61.0":
+  version "7.61.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.61.0.tgz#16944afb2b851af045fb528c0c35b7dea3e1cd3b"
+  integrity sha512-jfj14d0XBFiCU0G6dZZ12SizATiF5Mt4stBGzkM5iS9nXFj8rh1oTT7/p+aZoYzP2JTF+sDzkNjWxyKZkcTo0Q==
   dependencies:
-    "@sentry/types" "7.60.0"
+    "@sentry/types" "7.61.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 3a7484a61ce7c9b9f3ac704b3c2cd2ad8b1283c2 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 3 Aug 2023 18:18:54 +0200
Subject: [PATCH 126/239] meta: changelog for release 4.9.0 (#714)

---
 CHANGELOG.md | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 489cb5e5..3966a949 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 
 ## Unreleased
 
+## 4.9.0
+
+- fix: Ensure context from previous run is used for native main crashes (#683)
+- feat: Tracing without performance (#710)
+- feat: Deprecate `tracingOrigins` for `tracePropagationTargets` (#703)
+- feat: Use `protocol.handle` on Electron >= v25 (#704)
+- test: Update from [v7.58.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.58.0) to [v7.61.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.61.0) of JavaScript SDKs (#709)
+
 ## 4.8.0
 
 - feat: Update to [v7.58.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.58.0) of JavaScript SDKs

From 66ca7b2540587e40fe544a6bf3dd40d2c0c6037a Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Thu, 3 Aug 2023 16:19:27 +0000
Subject: [PATCH 127/239] release: 4.9.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 898ab1dd..9fa402e3 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.8.0",
+  "version": "4.9.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -107,4 +107,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From 4072bd74b2f02d10c290d6b8f0c373d549ab7dd3 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 8 Aug 2023 12:45:48 +0200
Subject: [PATCH 128/239] feat: Optionally send sessions when they're created
 (#715)

---
 src/main/integrations/main-process-session.ts  | 13 ++++++++++++-
 src/main/sessions.ts                           | 10 ++++++++--
 .../session-1.json                             | 18 ++++++++++++++++++
 .../{session-previous.json => session-2.json}  |  2 +-
 .../session-3.json                             | 18 ++++++++++++++++++
 .../{session.json => session-4.json}           |  2 +-
 .../src/main.js                                | 10 +++++++---
 .../sessions/abnormal-exit/session-1.json      | 17 +++++++++++++++++
 .../{session-previous.json => session-2.json}  |  2 +-
 .../sessions/abnormal-exit/session-3.json      | 17 +++++++++++++++++
 .../{session.json => session-4.json}           |  2 +-
 .../sessions/abnormal-exit/src/main.js         |  7 ++++---
 .../test-apps/sessions/good/session-first.json | 17 +++++++++++++++++
 .../{session-next.json => session-fourth.json} |  2 +-
 .../good/{session.json => session-second.json} |  2 +-
 .../test-apps/sessions/good/session-third.json | 17 +++++++++++++++++
 test/e2e/test-apps/sessions/good/src/main.js   |  3 ++-
 .../javascript-error/session-error.json        |  2 +-
 .../javascript-error/session-start.json        | 17 +++++++++++++++++
 .../sessions/javascript-error/src/main.js      |  3 ++-
 .../session-1.json                             | 18 ++++++++++++++++++
 .../{session-previous.json => session-2.json}  |  2 +-
 .../session-3.json                             | 18 ++++++++++++++++++
 .../{session.json => session-4.json}           |  2 +-
 .../src/main.js                                |  8 ++++++--
 .../sessions/native-crash-main/session-0.json  | 17 +++++++++++++++++
 .../sessions/native-crash-main/session-1.json  |  2 +-
 .../sessions/native-crash-main/session-3.json  |  2 +-
 .../sessions/native-crash-main/session-4.json  | 17 +++++++++++++++++
 .../sessions/native-crash-main/src/main.js     |  7 ++++---
 .../{session.json => session-crash.json}       |  2 +-
 .../session-start.json                         | 17 +++++++++++++++++
 .../src/main.js                                |  6 +++++-
 .../{session.json => session-crash.json}       |  2 +-
 .../native-crash-renderer/session-start.json   | 17 +++++++++++++++++
 .../sessions/native-crash-renderer/src/main.js |  3 ++-
 36 files changed, 290 insertions(+), 31 deletions(-)
 create mode 100644 test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-1.json
 rename test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/{session-previous.json => session-2.json} (94%)
 create mode 100644 test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-3.json
 rename test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/{session.json => session-4.json} (94%)
 create mode 100644 test/e2e/test-apps/sessions/abnormal-exit/session-1.json
 rename test/e2e/test-apps/sessions/abnormal-exit/{session-previous.json => session-2.json} (94%)
 create mode 100644 test/e2e/test-apps/sessions/abnormal-exit/session-3.json
 rename test/e2e/test-apps/sessions/abnormal-exit/{session.json => session-4.json} (94%)
 create mode 100644 test/e2e/test-apps/sessions/good/session-first.json
 rename test/e2e/test-apps/sessions/good/{session-next.json => session-fourth.json} (93%)
 rename test/e2e/test-apps/sessions/good/{session.json => session-second.json} (93%)
 create mode 100644 test/e2e/test-apps/sessions/good/session-third.json
 create mode 100644 test/e2e/test-apps/sessions/javascript-error/session-start.json
 create mode 100644 test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-1.json
 rename test/e2e/test-apps/sessions/native-crash-main-electron-uploader/{session-previous.json => session-2.json} (94%)
 create mode 100644 test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-3.json
 rename test/e2e/test-apps/sessions/native-crash-main-electron-uploader/{session.json => session-4.json} (94%)
 create mode 100644 test/e2e/test-apps/sessions/native-crash-main/session-0.json
 create mode 100644 test/e2e/test-apps/sessions/native-crash-main/session-4.json
 rename test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/{session.json => session-crash.json} (94%)
 create mode 100644 test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-start.json
 rename test/e2e/test-apps/sessions/native-crash-renderer/{session.json => session-crash.json} (94%)
 create mode 100644 test/e2e/test-apps/sessions/native-crash-renderer/session-start.json

diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index b165c64b..9041129d 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -4,6 +4,15 @@ import { app } from 'electron';
 
 import { endSession, startSession } from '../sessions';
 
+interface Options {
+  /**
+   * Whether sessions should be sent immediately on creation
+   *
+   * @default false
+   */
+  sendOnCreate?: boolean;
+}
+
 /** Tracks sessions as the main process lifetime. */
 export class MainProcessSession implements Integration {
   /** @inheritDoc */
@@ -12,9 +21,11 @@ export class MainProcessSession implements Integration {
   /** @inheritDoc */
   public name: string = MainProcessSession.id;
 
+  public constructor(private readonly _options: Options = {}) {}
+
   /** @inheritDoc */
   public setupOnce(): void {
-    void startSession();
+    void startSession(!!this._options.sendOnCreate);
 
     // We track sessions via the 'will-quit' event which is the last event emitted before close.
     //
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index 36a159a7..f970b2db 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -17,9 +17,15 @@ let previousSession: Promise<Partial<Session> | undefined> | undefined = session
 let persistTimer: NodeJS.Timer | undefined;
 
 /** Starts a session */
-export async function startSession(): Promise<void> {
+export async function startSession(sendOnCreate: boolean): Promise<void> {
   const hub = getCurrentHub();
-  await sessionStore.set(hub.startSession());
+  const session = hub.startSession();
+
+  if (sendOnCreate) {
+    hub.captureSession();
+  }
+
+  await sessionStore.set(session);
 
   // Every PERSIST_INTERVAL, write the session to disk
   persistTimer = setInterval(async () => {
diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-1.json b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-1.json
new file mode 100644
index 00000000..fb38bd43
--- /dev/null
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-1.json
@@ -0,0 +1,18 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "did": "some_user",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-abnormal-exit-electron-uploader@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-previous.json b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-2.json
similarity index 94%
rename from test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-previous.json
rename to test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-2.json
index 77a97455..63e6675f 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-previous.json
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-2.json
@@ -5,7 +5,7 @@
   "data": {
     "sid": "{{id}}",
     "did": "some_user",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "abnormal",
diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-3.json b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-3.json
new file mode 100644
index 00000000..fb38bd43
--- /dev/null
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-3.json
@@ -0,0 +1,18 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "did": "some_user",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-abnormal-exit-electron-uploader@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session.json b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-4.json
similarity index 94%
rename from test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session.json
rename to test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-4.json
index 169b547b..84a849e1 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session.json
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-4.json
@@ -5,7 +5,7 @@
   "data": {
     "sid": "{{id}}",
     "did": "some_user",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "exited",
diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
index fe607f26..9fd8293d 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
@@ -8,7 +8,11 @@ app.commandLine.appendSwitch('enable-crashpad');
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: (defaults) => [new Integrations.ElectronMinidump(), ...defaults],
+  integrations: (defaults) => [
+    new Integrations.ElectronMinidump(),
+    new Integrations.MainProcessSession({ sendOnCreate: true }),
+    ...defaults,
+  ],
   initialScope: { user: { username: 'some_user' } },
   onFatalError: () => {},
 });
@@ -30,9 +34,9 @@ app.on('ready', () => {
 if (process.env.APP_FIRST_RUN) {
   setTimeout(() => {
     process.exit();
-  }, 1000);
+  }, 2000);
 } else {
   setTimeout(() => {
     app.quit();
-  }, 2000);
+  }, 4000);
 }
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/session-1.json b/test/e2e/test-apps/sessions/abnormal-exit/session-1.json
new file mode 100644
index 00000000..5a0fbf8a
--- /dev/null
+++ b/test/e2e/test-apps/sessions/abnormal-exit/session-1.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-abnormal-exit@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/session-previous.json b/test/e2e/test-apps/sessions/abnormal-exit/session-2.json
similarity index 94%
rename from test/e2e/test-apps/sessions/abnormal-exit/session-previous.json
rename to test/e2e/test-apps/sessions/abnormal-exit/session-2.json
index 12b29c83..5abc806e 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit/session-previous.json
+++ b/test/e2e/test-apps/sessions/abnormal-exit/session-2.json
@@ -4,7 +4,7 @@
   "method": "envelope",
   "data": {
     "sid": "{{id}}",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "abnormal",
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/session-3.json b/test/e2e/test-apps/sessions/abnormal-exit/session-3.json
new file mode 100644
index 00000000..5a0fbf8a
--- /dev/null
+++ b/test/e2e/test-apps/sessions/abnormal-exit/session-3.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-abnormal-exit@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/session.json b/test/e2e/test-apps/sessions/abnormal-exit/session-4.json
similarity index 94%
rename from test/e2e/test-apps/sessions/abnormal-exit/session.json
rename to test/e2e/test-apps/sessions/abnormal-exit/session-4.json
index 7ebc922e..ab4f7cc0 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit/session.json
+++ b/test/e2e/test-apps/sessions/abnormal-exit/session-4.json
@@ -4,7 +4,7 @@
   "method": "envelope",
   "data": {
     "sid": "{{id}}",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "exited",
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
index 221a4d02..ef301ad0 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
@@ -1,11 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init } = require('@sentry/electron');
+const { init, Integrations } = require('@sentry/electron');
 
 init({
   dsn: '__DSN__',
   debug: true,
+  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
@@ -26,9 +27,9 @@ app.on('ready', () => {
 if (process.env.APP_FIRST_RUN) {
   setTimeout(() => {
     process.exit();
-  }, 1000);
+  }, 2000);
 } else {
   setTimeout(() => {
     app.quit();
-  }, 2000);
+  }, 4000);
 }
diff --git a/test/e2e/test-apps/sessions/good/session-first.json b/test/e2e/test-apps/sessions/good/session-first.json
new file mode 100644
index 00000000..7362ab21
--- /dev/null
+++ b/test/e2e/test-apps/sessions/good/session-first.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "good-session@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/good/session-next.json b/test/e2e/test-apps/sessions/good/session-fourth.json
similarity index 93%
rename from test/e2e/test-apps/sessions/good/session-next.json
rename to test/e2e/test-apps/sessions/good/session-fourth.json
index 385a274b..e55639a8 100644
--- a/test/e2e/test-apps/sessions/good/session-next.json
+++ b/test/e2e/test-apps/sessions/good/session-fourth.json
@@ -4,7 +4,7 @@
   "method": "envelope",
   "data": {
     "sid": "{{id}}",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "exited",
diff --git a/test/e2e/test-apps/sessions/good/session.json b/test/e2e/test-apps/sessions/good/session-second.json
similarity index 93%
rename from test/e2e/test-apps/sessions/good/session.json
rename to test/e2e/test-apps/sessions/good/session-second.json
index 385a274b..e55639a8 100644
--- a/test/e2e/test-apps/sessions/good/session.json
+++ b/test/e2e/test-apps/sessions/good/session-second.json
@@ -4,7 +4,7 @@
   "method": "envelope",
   "data": {
     "sid": "{{id}}",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "exited",
diff --git a/test/e2e/test-apps/sessions/good/session-third.json b/test/e2e/test-apps/sessions/good/session-third.json
new file mode 100644
index 00000000..7362ab21
--- /dev/null
+++ b/test/e2e/test-apps/sessions/good/session-third.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "good-session@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/good/src/main.js b/test/e2e/test-apps/sessions/good/src/main.js
index 6e5aee86..caa82591 100644
--- a/test/e2e/test-apps/sessions/good/src/main.js
+++ b/test/e2e/test-apps/sessions/good/src/main.js
@@ -1,11 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init } = require('@sentry/electron');
+const { init, Integrations } = require('@sentry/electron');
 
 init({
   dsn: '__DSN__',
   debug: true,
+  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/javascript-error/session-error.json b/test/e2e/test-apps/sessions/javascript-error/session-error.json
index 8fe91fcc..b7e41c0d 100644
--- a/test/e2e/test-apps/sessions/javascript-error/session-error.json
+++ b/test/e2e/test-apps/sessions/javascript-error/session-error.json
@@ -4,7 +4,7 @@
   "method": "envelope",
   "data": {
     "sid": "{{id}}",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "ok",
diff --git a/test/e2e/test-apps/sessions/javascript-error/session-start.json b/test/e2e/test-apps/sessions/javascript-error/session-start.json
new file mode 100644
index 00000000..3cdb74c0
--- /dev/null
+++ b/test/e2e/test-apps/sessions/javascript-error/session-start.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "error-session@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/javascript-error/src/main.js b/test/e2e/test-apps/sessions/javascript-error/src/main.js
index 6e5aee86..caa82591 100644
--- a/test/e2e/test-apps/sessions/javascript-error/src/main.js
+++ b/test/e2e/test-apps/sessions/javascript-error/src/main.js
@@ -1,11 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init } = require('@sentry/electron');
+const { init, Integrations } = require('@sentry/electron');
 
 init({
   dsn: '__DSN__',
   debug: true,
+  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-1.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-1.json
new file mode 100644
index 00000000..490546e2
--- /dev/null
+++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-1.json
@@ -0,0 +1,18 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "did": "some_user",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-native-crash-main-electron-uploader@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-previous.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-2.json
similarity index 94%
rename from test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-previous.json
rename to test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-2.json
index 8072d2bd..4eda3f2c 100644
--- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-previous.json
+++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-2.json
@@ -5,7 +5,7 @@
   "data": {
     "sid": "{{id}}",
     "did": "some_user",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "crashed",
diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-3.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-3.json
new file mode 100644
index 00000000..490546e2
--- /dev/null
+++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-3.json
@@ -0,0 +1,18 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "did": "some_user",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-native-crash-main-electron-uploader@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-4.json
similarity index 94%
rename from test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session.json
rename to test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-4.json
index 9676e6a9..98ec7c28 100644
--- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session.json
+++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-4.json
@@ -5,7 +5,7 @@
   "data": {
     "sid": "{{id}}",
     "did": "some_user",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "exited",
diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
index 0f91fbf0..0b7294b6 100644
--- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
@@ -8,7 +8,11 @@ app.commandLine.appendSwitch('enable-crashpad');
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: (defaults) => [new Integrations.ElectronMinidump(), ...defaults],
+  integrations: (defaults) => [
+    new Integrations.ElectronMinidump(),
+    new Integrations.MainProcessSession({ sendOnCreate: true }),
+    ...defaults,
+  ],
   initialScope: { user: { username: 'some_user' } },
   onFatalError: () => {},
 });
@@ -33,4 +37,4 @@ setTimeout(() => {
   } else {
     app.quit();
   }
-}, 2000);
+}, 4000);
diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-0.json b/test/e2e/test-apps/sessions/native-crash-main/session-0.json
new file mode 100644
index 00000000..f3ebfdf9
--- /dev/null
+++ b/test/e2e/test-apps/sessions/native-crash-main/session-0.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-native-crash-main@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-1.json b/test/e2e/test-apps/sessions/native-crash-main/session-1.json
index 0bf33df4..c95e8cd9 100644
--- a/test/e2e/test-apps/sessions/native-crash-main/session-1.json
+++ b/test/e2e/test-apps/sessions/native-crash-main/session-1.json
@@ -4,7 +4,7 @@
   "method": "envelope",
   "data": {
     "sid": "{{id}}",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "crashed",
diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-3.json b/test/e2e/test-apps/sessions/native-crash-main/session-3.json
index 8c7a038a..f36ea69b 100644
--- a/test/e2e/test-apps/sessions/native-crash-main/session-3.json
+++ b/test/e2e/test-apps/sessions/native-crash-main/session-3.json
@@ -7,7 +7,7 @@
     "init": false,
     "started": 0,
     "timestamp": 0,
-    "status": "exited",
+    "status": "ok",
     "errors": 0,
     "duration": 0,
     "attrs": {
diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-4.json b/test/e2e/test-apps/sessions/native-crash-main/session-4.json
new file mode 100644
index 00000000..8c7a038a
--- /dev/null
+++ b/test/e2e/test-apps/sessions/native-crash-main/session-4.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": false,
+    "started": 0,
+    "timestamp": 0,
+    "status": "exited",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-native-crash-main@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/native-crash-main/src/main.js b/test/e2e/test-apps/sessions/native-crash-main/src/main.js
index 12a7d49a..fd7415dc 100644
--- a/test/e2e/test-apps/sessions/native-crash-main/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-main/src/main.js
@@ -1,11 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init } = require('@sentry/electron');
+const { init, Integrations } = require('@sentry/electron');
 
 init({
   dsn: '__DSN__',
   debug: true,
+  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
@@ -26,9 +27,9 @@ app.on('ready', () => {
 if (process.env.APP_FIRST_RUN) {
   setTimeout(() => {
     process.crash();
-  }, 1000);
+  }, 2000);
 } else {
   setTimeout(() => {
     app.quit();
-  }, 2000);
+  }, 4000);
 }
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session.json b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-crash.json
similarity index 94%
rename from test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session.json
rename to test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-crash.json
index d6ae7705..0e9f7445 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session.json
+++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-crash.json
@@ -4,7 +4,7 @@
   "method": "envelope",
   "data": {
     "sid": "{{id}}",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "crashed",
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-start.json b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-start.json
new file mode 100644
index 00000000..ee7e5752
--- /dev/null
+++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-start.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-native-crash-renderer-electron-uploader@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
index ad4825de..aa89b617 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
@@ -8,7 +8,11 @@ app.commandLine.appendSwitch('enable-crashpad');
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: (defaults) => [new Integrations.ElectronMinidump(), ...defaults],
+  integrations: (defaults) => [
+    new Integrations.ElectronMinidump(),
+    new Integrations.MainProcessSession({ sendOnCreate: true }),
+    ...defaults,
+  ],
   initialScope: { user: { username: 'some_user' } },
   onFatalError: () => {},
 });
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/session.json b/test/e2e/test-apps/sessions/native-crash-renderer/session-crash.json
similarity index 94%
rename from test/e2e/test-apps/sessions/native-crash-renderer/session.json
rename to test/e2e/test-apps/sessions/native-crash-renderer/session-crash.json
index 0d7812c5..71993664 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer/session.json
+++ b/test/e2e/test-apps/sessions/native-crash-renderer/session-crash.json
@@ -4,7 +4,7 @@
   "method": "envelope",
   "data": {
     "sid": "{{id}}",
-    "init": true,
+    "init": false,
     "started": 0,
     "timestamp": 0,
     "status": "crashed",
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/session-start.json b/test/e2e/test-apps/sessions/native-crash-renderer/session-start.json
new file mode 100644
index 00000000..47ed989a
--- /dev/null
+++ b/test/e2e/test-apps/sessions/native-crash-renderer/session-start.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-native-crash-renderer@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
index 3ac4d1b7..600e177b 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
@@ -1,11 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init } = require('@sentry/electron');
+const { init, Integrations } = require('@sentry/electron');
 
 init({
   dsn: '__DSN__',
   debug: true,
+  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 

From 9f7aba184d08f1ef9edc1106543e70be83514b3b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 8 Aug 2023 15:39:39 +0200
Subject: [PATCH 129/239] test: New Electron versions (#707)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 775ae35b..53b79731 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.17","23.3.10","24.6.3","25.3.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.18","23.3.12","24.7.0","25.4.0"]

From 87f7930e93eb69ad861d295f74f5513f02c2beea Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 11 Aug 2023 11:17:53 +0200
Subject: [PATCH 130/239] feat: Update to v7.63.0 of the JavaScript SDKs (#719)

---
 package.json                                  |  14 +-
 src/common/mutex.ts                           |  12 +-
 src/integrations.ts                           |   6 +-
 src/main/integrations/additional-context.ts   |   6 +-
 src/main/integrations/child-process.ts        |   3 +-
 src/main/integrations/electron-breadcrumbs.ts |   3 +-
 src/main/integrations/electron-minidump.ts    |   9 +-
 src/main/integrations/main-context.ts         |   6 +-
 src/main/integrations/main-process-session.ts |   6 +-
 src/main/integrations/net-breadcrumbs.ts      |   6 +-
 src/main/integrations/onuncaughtexception.ts  |   6 +-
 src/main/integrations/preload-injection.ts    |   6 +-
 src/main/integrations/screenshots.ts          |   6 +-
 .../integrations/sentry-minidump/index.ts     |   6 +-
 src/main/store.ts                             |   3 +-
 src/main/transports/queue.ts                  |  10 +-
 src/renderer/integrations/event-to-main.ts    |   6 +-
 src/renderer/integrations/scope-to-main.ts    |   6 +-
 src/renderer/sdk.ts                           |   2 +-
 yarn.lock                                     | 124 +++++++++---------
 20 files changed, 148 insertions(+), 98 deletions(-)

diff --git a/package.json b/package.json
index 9fa402e3..80af4ac7 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.61.0",
-    "@sentry/core": "7.61.0",
-    "@sentry/node": "7.61.0",
-    "@sentry/types": "7.61.0",
-    "@sentry/utils": "7.61.0",
+    "@sentry/browser": "7.63.0",
+    "@sentry/core": "7.63.0",
+    "@sentry/node": "7.63.0",
+    "@sentry/types": "7.63.0",
+    "@sentry/utils": "7.63.0",
     "deepmerge": "4.3.0",
     "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.61.0",
-    "@sentry-internal/typescript": "7.61.0",
+    "@sentry-internal/eslint-config-sdk": "7.63.0",
+    "@sentry-internal/typescript": "7.63.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/common/mutex.ts b/src/common/mutex.ts
index 602be804..1b527e4d 100644
--- a/src/common/mutex.ts
+++ b/src/common/mutex.ts
@@ -35,9 +35,15 @@ interface QueueEntry {
 
 /** An async mutex that queues up tasks for a shared resource */
 export class Mutex {
-  private _entries: Array<QueueEntry> = [];
-  private _waiters: Array<Releaser> = [];
-  private _value: number = 1;
+  private readonly _entries: Array<QueueEntry>;
+  private _waiters: Array<Releaser>;
+  private _value: number;
+
+  public constructor() {
+    this._entries = [];
+    this._waiters = [];
+    this._value = 1;
+  }
 
   /** Run a task when all pending tasks are complete */
   public async runExclusive<T>(task: () => Promise<T> | T): Promise<T> {
diff --git a/src/integrations.ts b/src/integrations.ts
index e542b3f9..6c467d99 100644
--- a/src/integrations.ts
+++ b/src/integrations.ts
@@ -78,7 +78,11 @@ class EmptyIntegration implements Integration {
   public static id: string = 'EmptyIntegration';
 
   /** @inheritDoc */
-  public name: string = EmptyIntegration.id;
+  public readonly name: string;
+
+  public constructor() {
+    this.name = EmptyIntegration.id;
+  }
 
   /** @inheritDoc */
   public setupOnce(): void {
diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts
index 9ad63f81..b2d4713b 100644
--- a/src/main/integrations/additional-context.ts
+++ b/src/main/integrations/additional-context.ts
@@ -25,12 +25,14 @@ export class AdditionalContext implements Integration {
   public static id: string = 'AdditionalContext';
 
   /** @inheritDoc */
-  public name: string = AdditionalContext.id;
+  public readonly name: string;
 
   private readonly _options: AdditionalContextOptions;
-  private _lazyDeviceContext: DeviceContext = {};
+  private readonly _lazyDeviceContext: DeviceContext;
 
   public constructor(options: Partial<AdditionalContextOptions> = {}) {
+    this._lazyDeviceContext = {};
+    this.name = AdditionalContext.id;
     this._options = {
       ...DEFAULT_OPTIONS,
       ...options,
diff --git a/src/main/integrations/child-process.ts b/src/main/integrations/child-process.ts
index adeddea9..7baa1f71 100644
--- a/src/main/integrations/child-process.ts
+++ b/src/main/integrations/child-process.ts
@@ -42,7 +42,7 @@ export class ChildProcess implements Integration {
   public static id: string = 'ChildProcess';
 
   /** @inheritDoc */
-  public name: string = ChildProcess.id;
+  public readonly name: string;
 
   private readonly _options: ChildProcessOptions;
 
@@ -50,6 +50,7 @@ export class ChildProcess implements Integration {
    * @param _options Integration options
    */
   public constructor(options: Partial<OrBool<ChildProcessOptions>> = {}) {
+    this.name = ChildProcess.id;
     const { breadcrumbs, events } = options;
     this._options = {
       breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs == false ? [] : DEFAULT_OPTIONS.breadcrumbs,
diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts
index d7b040f7..a9ebf36a 100644
--- a/src/main/integrations/electron-breadcrumbs.ts
+++ b/src/main/integrations/electron-breadcrumbs.ts
@@ -109,7 +109,7 @@ export class ElectronBreadcrumbs implements Integration {
   public static id: string = 'ElectronBreadcrumbs';
 
   /** @inheritDoc */
-  public name: string = ElectronBreadcrumbs.id;
+  public readonly name: string;
 
   private readonly _options: ElectronBreadcrumbsOptions<EventFunction | false>;
 
@@ -117,6 +117,7 @@ export class ElectronBreadcrumbs implements Integration {
    * @param _options Integration options
    */
   public constructor(options: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) {
+    this.name = ElectronBreadcrumbs.id;
     this._options = { ...DEFAULT_OPTIONS, ...normalizeOptions(options) };
   }
 
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index 989ed382..8e162c7f 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -59,13 +59,18 @@ export class ElectronMinidump implements Integration {
   public static id: string = 'ElectronMinidump';
 
   /** @inheritDoc */
-  public name: string = ElectronMinidump.id;
+  public readonly name: string;
 
   /** Counter used to ensure no race condition when updating extra params */
-  private _updateEpoch: number = 0;
+  private _updateEpoch: number;
 
   private _customRelease: string | undefined;
 
+  public constructor() {
+    this.name = ElectronMinidump.id;
+    this._updateEpoch = 0;
+  }
+
   /** @inheritDoc */
   public setupOnce(): void {
     // Mac AppStore builds cannot run the crash reporter due to the sandboxing
diff --git a/src/main/integrations/main-context.ts b/src/main/integrations/main-context.ts
index e6212b59..174beff7 100644
--- a/src/main/integrations/main-context.ts
+++ b/src/main/integrations/main-context.ts
@@ -12,7 +12,11 @@ export class MainContext implements Integration {
   public static id: string = 'MainContext';
 
   /** @inheritDoc */
-  public name: string = MainContext.id;
+  public readonly name: string;
+
+  public constructor() {
+    this.name = MainContext.id;
+  }
 
   /** @inheritDoc */
   public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void {
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index 9041129d..983900d3 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -19,9 +19,11 @@ export class MainProcessSession implements Integration {
   public static id: string = 'MainProcessSession';
 
   /** @inheritDoc */
-  public name: string = MainProcessSession.id;
+  public readonly name: string;
 
-  public constructor(private readonly _options: Options = {}) {}
+  public constructor(private readonly _options: Options = {}) {
+    this.name = MainProcessSession.id;
+  }
 
   /** @inheritDoc */
   public setupOnce(): void {
diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts
index 898ea44f..237abea8 100644
--- a/src/main/integrations/net-breadcrumbs.ts
+++ b/src/main/integrations/net-breadcrumbs.ts
@@ -46,10 +46,12 @@ export class Net implements Integration {
   public static id: string = 'Net';
 
   /** @inheritDoc */
-  public name: string = Net.id;
+  public readonly name: string;
 
   /** @inheritDoc */
-  public constructor(private readonly _options: NetOptions = {}) {}
+  public constructor(private readonly _options: NetOptions = {}) {
+    this.name = Net.id;
+  }
 
   /** @inheritDoc */
   public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {
diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts
index 8de4aa13..488aa717 100644
--- a/src/main/integrations/onuncaughtexception.ts
+++ b/src/main/integrations/onuncaughtexception.ts
@@ -9,7 +9,11 @@ export class OnUncaughtException implements Integration {
   public static id: string = 'OnUncaughtException';
 
   /** @inheritDoc */
-  public name: string = OnUncaughtException.id;
+  public readonly name: string;
+
+  public constructor() {
+    this.name = OnUncaughtException.id;
+  }
 
   /**
    * @inheritDoc
diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts
index d35fa7cb..99460f55 100644
--- a/src/main/integrations/preload-injection.ts
+++ b/src/main/integrations/preload-injection.ts
@@ -20,7 +20,11 @@ export class PreloadInjection implements Integration {
   public static id: string = 'PreloadInjection';
 
   /** @inheritDoc */
-  public name: string = PreloadInjection.id;
+  public readonly name: string;
+
+  public constructor() {
+    this.name = PreloadInjection.id;
+  }
 
   /** @inheritDoc */
   public setupOnce(): void {
diff --git a/src/main/integrations/screenshots.ts b/src/main/integrations/screenshots.ts
index cca119e2..751eb78e 100644
--- a/src/main/integrations/screenshots.ts
+++ b/src/main/integrations/screenshots.ts
@@ -12,7 +12,11 @@ export class Screenshots implements Integration {
   public static id: string = 'Screenshots';
 
   /** @inheritDoc */
-  public name: string = Screenshots.id;
+  public readonly name: string;
+
+  public constructor() {
+    this.name = Screenshots.id;
+  }
 
   /** @inheritDoc */
   public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void {
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index c1f4b9cc..efe1723b 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -25,7 +25,7 @@ export class SentryMinidump implements Integration {
   public static id: string = 'SentryMinidump';
 
   /** @inheritDoc */
-  public name: string = SentryMinidump.id;
+  public readonly name: string;
 
   /** Store to persist context information beyond application crashes. */
   private _scopeStore?: BufferedWriteStore<PreviousRun>;
@@ -35,6 +35,10 @@ export class SentryMinidump implements Integration {
 
   private _minidumpLoader?: MinidumpLoader;
 
+  public constructor() {
+    this.name = SentryMinidump.id;
+  }
+
   /** @inheritDoc */
   public setupOnce(): void {
     // Mac AppStore builds cannot run the crash reporter due to the sandboxing
diff --git a/src/main/store.ts b/src/main/store.ts
index bffb0f3c..359ffffe 100644
--- a/src/main/store.ts
+++ b/src/main/store.ts
@@ -27,7 +27,7 @@ export class Store<T> {
   /** Value used to initialize data for the first time. */
   private readonly _initial: T;
   /** A mutex to ensure that there aren't races while reading and writing files */
-  private _lock: Mutex = new Mutex();
+  private readonly _lock: Mutex;
 
   /**
    * Creates a new store.
@@ -37,6 +37,7 @@ export class Store<T> {
    * @param initial An initial value to initialize data with.
    */
   public constructor(path: string, id: string, initial: T) {
+    this._lock = new Mutex();
     this._path = join(path, `${id}.json`);
     this._initial = initial;
   }
diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts
index 9f020fe8..b65911fa 100644
--- a/src/main/transports/queue.ts
+++ b/src/main/transports/queue.ts
@@ -26,17 +26,15 @@ export interface QueuedTransportRequest extends TransportRequest {
 
 /** A request queue that is persisted to disk to survive app restarts */
 export class PersistedRequestQueue {
-  private readonly _queue: BufferedWriteStore<PersistedRequest[]> = new BufferedWriteStore(
-    this._queuePath,
-    'queue',
-    [],
-  );
+  private readonly _queue: BufferedWriteStore<PersistedRequest[]>;
 
   public constructor(
     private readonly _queuePath: string,
     private readonly _maxAgeDays: number = 30,
     private readonly _maxCount: number = 30,
-  ) {}
+  ) {
+    this._queue = new BufferedWriteStore(this._queuePath, 'queue', []);
+  }
 
   /** Adds a request to the queue */
   public async add(request: QueuedTransportRequest): Promise<number> {
diff --git a/src/renderer/integrations/event-to-main.ts b/src/renderer/integrations/event-to-main.ts
index cec7d7ca..a319e709 100644
--- a/src/renderer/integrations/event-to-main.ts
+++ b/src/renderer/integrations/event-to-main.ts
@@ -11,7 +11,11 @@ export class EventToMain implements Integration {
   public static id: string = 'EventToMain';
 
   /** @inheritDoc */
-  public name: string = EventToMain.id;
+  public readonly name: string;
+
+  public constructor() {
+    this.name = EventToMain.id;
+  }
 
   /** @inheritDoc */
   public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void {
diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts
index ba93bba8..37e527ba 100644
--- a/src/renderer/integrations/scope-to-main.ts
+++ b/src/renderer/integrations/scope-to-main.ts
@@ -12,7 +12,11 @@ export class ScopeToMain implements Integration {
   public static id: string = 'ScopeToMain';
 
   /** @inheritDoc */
-  public name: string = ScopeToMain.id;
+  public readonly name: string;
+
+  public constructor() {
+    this.name = ScopeToMain.id;
+  }
 
   /** @inheritDoc */
   public setupOnce(): void {
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 6cb17b45..eb7cb2fc 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_61_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_63_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 0d7880cc..4c8a5df8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -135,13 +135,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.61.0.tgz#ca4f48f2d441aa37d43304cce60ce0f2b4a4b0e7"
-  integrity sha512-ILhnFmHg/g6hRLs90kS27Gh5N1s8JVEgPGcWhotIew18NfGrdD+8KI1ZPExM8XKatwZxNHy3cOKYyxsFr4/Ydg==
+"@sentry-internal/eslint-config-sdk@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.63.0.tgz#b8f80ccf13051f3770347a507069a01ec407c4c7"
+  integrity sha512-H8VfcRu/Z8omSf5LeixeUiwfEYm4SQ6UlyjRAzzITWfgExySHxbD97V58q7AhoYOxsQ18B0UyR+m9piC9xkthA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.61.0"
-    "@sentry-internal/typescript" "7.61.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.63.0"
+    "@sentry-internal/typescript" "7.63.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -151,83 +151,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.61.0.tgz#969f36b817b008c59892a4435969e16c167a1d4f"
-  integrity sha512-xc1V1vEEBQbox2S8VQDXHA0mNdNXeZ0lmSEYWfLd0z6VapQnvGuixNR+W+R4B0dfMr0lTAwV5UM3qTqGqKlDCQ==
+"@sentry-internal/eslint-plugin-sdk@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.63.0.tgz#1ff0beb3866b124c072c50880fdabd8783b313cc"
+  integrity sha512-tDvNksUhvmh7bJSvocs0PNXffiM0aJ4TGlKl4jXUG2qLPbUALM2QxMhNs3CeXXf+qAvWidy0+nYz2jM0jQ6zQg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.61.0.tgz#5a0dd4a9a0b41f2e22904430f3fe0216f36ee086"
-  integrity sha512-zTr+MXEG4SxNxif42LIgm2RQn+JRXL2NuGhRaKSD2i4lXKFqHVGlVdoWqY5UfqnnJPokiTWIj9ejR8I5HV8Ogw==
+"@sentry-internal/tracing@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.63.0.tgz#58903b2205456034611cc5bc1b5b2479275f89c7"
+  integrity sha512-Fxpc53p6NGvLSURg3iRvZA0k10K9yfeVhtczvJnpX30POBuV41wxpkLHkb68fjksirjEma1K3Ut1iLOEEDpPQg==
   dependencies:
-    "@sentry/core" "7.61.0"
-    "@sentry/types" "7.61.0"
-    "@sentry/utils" "7.61.0"
+    "@sentry/core" "7.63.0"
+    "@sentry/types" "7.63.0"
+    "@sentry/utils" "7.63.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.61.0.tgz#44cea2d1cabc491549abcdce06ead7053abc08b6"
-  integrity sha512-Al5uvH/LTbGB2PJraO4kDKw5TyksOTOQHcvUgaWXXTB4Eb2df3op+8lTjARgwoSF/0eUpt428qKcPtfJL8n90w==
-
-"@sentry/browser@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.61.0.tgz#04f4122e444d8b5ffefed97af3cde2bc1c71bb80"
-  integrity sha512-IGEkJZRP16Oe5CkXkmhU3QdV5RugW6Vds16yJFFYsgp87NprWtRZgqzldFDYkINStfBHVdctj/Rh/ZrLf8QlkQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.61.0"
-    "@sentry/core" "7.61.0"
-    "@sentry/replay" "7.61.0"
-    "@sentry/types" "7.61.0"
-    "@sentry/utils" "7.61.0"
+"@sentry-internal/typescript@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.63.0.tgz#534413543109a68e692f3b4ad17481817c33b934"
+  integrity sha512-df3TIs6ZwinG5vJB/+DU243aj18x5rN+7XcjUFcebHomC/CM0ZewsX/7tqSU6nyEApDBi/w9rYjAB3gBio5MNQ==
+
+"@sentry/browser@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.63.0.tgz#d7eee4be7bfff015f050bca83cafb111dc13d40d"
+  integrity sha512-P1Iw/2281C/7CUCRsN4jgXvjMNKnrwKqxRg7JqN8eVeCDPMpOeEPHNJ6YatEXdVLTKVn0JB7L63Q1prhFr8+SQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.63.0"
+    "@sentry/core" "7.63.0"
+    "@sentry/replay" "7.63.0"
+    "@sentry/types" "7.63.0"
+    "@sentry/utils" "7.63.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.61.0.tgz#0de4f73055bd156c5c0cbac50bb814b272567188"
-  integrity sha512-zl0ZKRjIoYJQWYTd3K/U6zZfS4GDY9yGd2EH4vuYO4kfYtEp/nJ8A+tfAeDo0c9FGxZ0Q+5t5F4/SfwbgyyQzg==
+"@sentry/core@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.63.0.tgz#8c38da6ef3a1de6e364463a09bc703b196ecbba4"
+  integrity sha512-13Ljiq8hv6ieCkO+Am99/PljYJO5ynKT/hRQrWgGy9IIEgUr8sV3fW+1W6K4/3MCeOJou0HsiGBjOD1mASItVg==
   dependencies:
-    "@sentry/types" "7.61.0"
-    "@sentry/utils" "7.61.0"
+    "@sentry/types" "7.63.0"
+    "@sentry/utils" "7.63.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.61.0.tgz#1309330f2ad136af532ad2a03b2a312e885705de"
-  integrity sha512-oTCqD/h92uvbRCrtCdiAqN6Mfe3vF7ywVHZ8Nq3hHmJp6XadUT+fCBwNQ7rjMyqJAOYAnx/vp6iN9n8C5qcYZQ==
+"@sentry/node@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.63.0.tgz#38508a440c04c0e98d00f5a1855e5448ee70c8d6"
+  integrity sha512-tSMyfQNbfjX1w8vJDZtvWeaD4QQ/Z4zVW/TLXfL/JZFIIksPgDZmqLdF+NJS4bSGTU5JiHiUh4pYhME4mHgNBQ==
   dependencies:
-    "@sentry-internal/tracing" "7.61.0"
-    "@sentry/core" "7.61.0"
-    "@sentry/types" "7.61.0"
-    "@sentry/utils" "7.61.0"
+    "@sentry-internal/tracing" "7.63.0"
+    "@sentry/core" "7.63.0"
+    "@sentry/types" "7.63.0"
+    "@sentry/utils" "7.63.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.61.0.tgz#f816d6a2fc7511877efee2e328681d659433d147"
-  integrity sha512-1ugk0yZssOPkSg6uTVcysjxlBydycXiOgV0PCU7DsXCFOV1ua5YpyPZFReTz9iFTtwD0LwGFM1LW9wJeQ67Fzg==
+"@sentry/replay@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.63.0.tgz#989ae32ea028a5eca323786cc07294fedb1f0d45"
+  integrity sha512-ikeFVojuP9oDF103blZcj0Vvb4S50dV54BESMrMW2lYBoMMjvOd7AdL+iDHjn1OL05/mv1C6Oc8MovmvdjILVA==
   dependencies:
-    "@sentry/core" "7.61.0"
-    "@sentry/types" "7.61.0"
-    "@sentry/utils" "7.61.0"
+    "@sentry/core" "7.63.0"
+    "@sentry/types" "7.63.0"
+    "@sentry/utils" "7.63.0"
 
-"@sentry/types@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.61.0.tgz#4243b5ef4658f6b0673bc4372c90e6ec920f78d8"
-  integrity sha512-/GLlIBNR35NKPE/SfWi9W10dK9hE8qTShzsuPVn5wAJxpT3Lb4+dkwmKCTLUYxdkmvRDEudkfOxgalsfQGTAWA==
+"@sentry/types@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.63.0.tgz#8032029fee6f70e04b667646626a674b03e2f79b"
+  integrity sha512-pZNwJVW7RqNLGuTUAhoygt0c9zmc0js10eANAz0MstygJRhQI1tqPDuiELVdujPrbeL+IFKF+7NvRDAydR2Niw==
 
-"@sentry/utils@7.61.0":
-  version "7.61.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.61.0.tgz#16944afb2b851af045fb528c0c35b7dea3e1cd3b"
-  integrity sha512-jfj14d0XBFiCU0G6dZZ12SizATiF5Mt4stBGzkM5iS9nXFj8rh1oTT7/p+aZoYzP2JTF+sDzkNjWxyKZkcTo0Q==
+"@sentry/utils@7.63.0":
+  version "7.63.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.63.0.tgz#7c598553b4dbb6e3740dc96bc7f112ec32edbe69"
+  integrity sha512-7FQv1RYAwnuTuarruP+1+Jd6YQuN7i/Y7KltwPMVEwU7j5mzYQaexLr/Jz1XIdR2KYVdkbXQyP8jj8BmA6u9Jw==
   dependencies:
-    "@sentry/types" "7.61.0"
+    "@sentry/types" "7.63.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 6c7ecfc8349eca1480e12d36ec038027c7e119c3 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 14 Aug 2023 12:11:29 +0200
Subject: [PATCH 131/239] chore: Update Changelog for release (#720)

---
 CHANGELOG.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3966a949..c3a7ff73 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## Unreleased
 
+## 4.10.0
+
+- feat: Optionally send sessions when they're created (#715)
+- feat: Update from [v7.61.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.61.0) to [v7.63.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.63.0) of JavaScript SDKs (#719)
+
 ## 4.9.0
 
 - fix: Ensure context from previous run is used for native main crashes (#683)

From 26842870a05aaaee2c2b684627103a94d16e7baf Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Mon, 14 Aug 2023 10:12:06 +0000
Subject: [PATCH 132/239] release: 4.10.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 80af4ac7..aa95d647 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.9.0",
+  "version": "4.10.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 4605ce1198bc7613b0764db217c7e87d5e00b984 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 15 Aug 2023 13:22:29 +0200
Subject: [PATCH 133/239] test: Electron v26 (#718)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 53b79731..9eccc72b 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.18","23.3.12","24.7.0","25.4.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.20","23.3.12","24.7.1","25.5.0","26.0.0"]

From 5229617f0e0f4497960f5d4224a3666db9d24ec5 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 15 Aug 2023 13:23:17 +0200
Subject: [PATCH 134/239] test: Update to v7.64.0 of Sentry SDKs (#721)

---
 package.json        |  16 +++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 124 ++++++++++++++++++++++----------------------
 3 files changed, 71 insertions(+), 71 deletions(-)

diff --git a/package.json b/package.json
index aa95d647..6a36ad4d 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.63.0",
-    "@sentry/core": "7.63.0",
-    "@sentry/node": "7.63.0",
-    "@sentry/types": "7.63.0",
-    "@sentry/utils": "7.63.0",
+    "@sentry/browser": "7.64.0",
+    "@sentry/core": "7.64.0",
+    "@sentry/node": "7.64.0",
+    "@sentry/types": "7.64.0",
+    "@sentry/utils": "7.64.0",
     "deepmerge": "4.3.0",
     "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.63.0",
-    "@sentry-internal/typescript": "7.63.0",
+    "@sentry-internal/eslint-config-sdk": "7.64.0",
+    "@sentry-internal/typescript": "7.64.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -107,4 +107,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index eb7cb2fc..393dd691 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_63_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_64_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 4c8a5df8..3b7a98e6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -135,13 +135,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.63.0.tgz#b8f80ccf13051f3770347a507069a01ec407c4c7"
-  integrity sha512-H8VfcRu/Z8omSf5LeixeUiwfEYm4SQ6UlyjRAzzITWfgExySHxbD97V58q7AhoYOxsQ18B0UyR+m9piC9xkthA==
+"@sentry-internal/eslint-config-sdk@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.64.0.tgz#845d164656abc2a6a4920d5c138d5e6ca58c7231"
+  integrity sha512-lqzzu1p3sGfi8GIb+b9wdfw0hijgEYapLtgPxGgbCxn8Wqs8S2/9xTjnRzmZN2Mvo6njMXBsDcdv+Rh//laRtQ==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.63.0"
-    "@sentry-internal/typescript" "7.63.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.64.0"
+    "@sentry-internal/typescript" "7.64.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -151,83 +151,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.63.0.tgz#1ff0beb3866b124c072c50880fdabd8783b313cc"
-  integrity sha512-tDvNksUhvmh7bJSvocs0PNXffiM0aJ4TGlKl4jXUG2qLPbUALM2QxMhNs3CeXXf+qAvWidy0+nYz2jM0jQ6zQg==
+"@sentry-internal/eslint-plugin-sdk@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.64.0.tgz#95f1e4248bac3073d947557ae14c6a735a65d57f"
+  integrity sha512-2t90g8ljkF/+WQvMiOEZ2E6rTT6/dpqqc1Eg+Tnm73LkgUbVLv3vOuLtaHMKzDCvv8AAQGN5gYtPSLqoXiWpYw==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.63.0.tgz#58903b2205456034611cc5bc1b5b2479275f89c7"
-  integrity sha512-Fxpc53p6NGvLSURg3iRvZA0k10K9yfeVhtczvJnpX30POBuV41wxpkLHkb68fjksirjEma1K3Ut1iLOEEDpPQg==
+"@sentry-internal/tracing@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.64.0.tgz#3e110473b8edf805b799cc91d6ee592830237bb4"
+  integrity sha512-1XE8W6ki7hHyBvX9hfirnGkKDBKNq3bDJyXS86E0bYVDl94nvbRM9BD9DHsCFetqYkVm1yDGEK+6aUVs4CztoQ==
   dependencies:
-    "@sentry/core" "7.63.0"
-    "@sentry/types" "7.63.0"
-    "@sentry/utils" "7.63.0"
+    "@sentry/core" "7.64.0"
+    "@sentry/types" "7.64.0"
+    "@sentry/utils" "7.64.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.63.0.tgz#534413543109a68e692f3b4ad17481817c33b934"
-  integrity sha512-df3TIs6ZwinG5vJB/+DU243aj18x5rN+7XcjUFcebHomC/CM0ZewsX/7tqSU6nyEApDBi/w9rYjAB3gBio5MNQ==
-
-"@sentry/browser@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.63.0.tgz#d7eee4be7bfff015f050bca83cafb111dc13d40d"
-  integrity sha512-P1Iw/2281C/7CUCRsN4jgXvjMNKnrwKqxRg7JqN8eVeCDPMpOeEPHNJ6YatEXdVLTKVn0JB7L63Q1prhFr8+SQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.63.0"
-    "@sentry/core" "7.63.0"
-    "@sentry/replay" "7.63.0"
-    "@sentry/types" "7.63.0"
-    "@sentry/utils" "7.63.0"
+"@sentry-internal/typescript@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.64.0.tgz#b2aeb620e402dedaaa0de62bee9b901e809879ff"
+  integrity sha512-HvDvOOSfLBUnklg3h/808zHnfQqrzYwG2PrDH8p4fq6v4dZdm/C9jKZTh93MxDO10WdCEXchY4vR+BqAL6GHUw==
+
+"@sentry/browser@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.64.0.tgz#76db08a5d32ffe7c5aa907f258e6c845ce7f10d7"
+  integrity sha512-lB2IWUkZavEDclxfLBp554dY10ZNIEvlDZUWWathW+Ws2wRb6PNLtuPUNu12R7Q7z0xpkOLrM1kRNN0OdldgKA==
+  dependencies:
+    "@sentry-internal/tracing" "7.64.0"
+    "@sentry/core" "7.64.0"
+    "@sentry/replay" "7.64.0"
+    "@sentry/types" "7.64.0"
+    "@sentry/utils" "7.64.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.63.0.tgz#8c38da6ef3a1de6e364463a09bc703b196ecbba4"
-  integrity sha512-13Ljiq8hv6ieCkO+Am99/PljYJO5ynKT/hRQrWgGy9IIEgUr8sV3fW+1W6K4/3MCeOJou0HsiGBjOD1mASItVg==
+"@sentry/core@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.64.0.tgz#9d61cdc29ba299dedbdcbe01cfadf94bd0b7df48"
+  integrity sha512-IzmEyl5sNG7NyEFiyFHEHC+sizsZp9MEw1+RJRLX6U5RITvcsEgcajSkHQFafaBPzRrcxZMdm47Cwhl212LXcw==
   dependencies:
-    "@sentry/types" "7.63.0"
-    "@sentry/utils" "7.63.0"
+    "@sentry/types" "7.64.0"
+    "@sentry/utils" "7.64.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.63.0.tgz#38508a440c04c0e98d00f5a1855e5448ee70c8d6"
-  integrity sha512-tSMyfQNbfjX1w8vJDZtvWeaD4QQ/Z4zVW/TLXfL/JZFIIksPgDZmqLdF+NJS4bSGTU5JiHiUh4pYhME4mHgNBQ==
+"@sentry/node@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.64.0.tgz#c6f7a67c1442324298f0525e7191bc18572ee1ce"
+  integrity sha512-wRi0uTnp1WSa83X2yLD49tV9QPzGh5e42IKdIDBiQ7lV9JhLILlyb34BZY1pq6p4dp35yDasDrP3C7ubn7wo6A==
   dependencies:
-    "@sentry-internal/tracing" "7.63.0"
-    "@sentry/core" "7.63.0"
-    "@sentry/types" "7.63.0"
-    "@sentry/utils" "7.63.0"
+    "@sentry-internal/tracing" "7.64.0"
+    "@sentry/core" "7.64.0"
+    "@sentry/types" "7.64.0"
+    "@sentry/utils" "7.64.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.63.0.tgz#989ae32ea028a5eca323786cc07294fedb1f0d45"
-  integrity sha512-ikeFVojuP9oDF103blZcj0Vvb4S50dV54BESMrMW2lYBoMMjvOd7AdL+iDHjn1OL05/mv1C6Oc8MovmvdjILVA==
+"@sentry/replay@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.64.0.tgz#bdf09b0c4712f9dc6b24b3ebefa55a4ac76708e6"
+  integrity sha512-alaMCZDZhaAVmEyiUnszZnvfdbiZx5MmtMTGrlDd7tYq3K5OA9prdLqqlmfIJYBfYtXF3lD0iZFphOZQD+4CIw==
   dependencies:
-    "@sentry/core" "7.63.0"
-    "@sentry/types" "7.63.0"
-    "@sentry/utils" "7.63.0"
+    "@sentry/core" "7.64.0"
+    "@sentry/types" "7.64.0"
+    "@sentry/utils" "7.64.0"
 
-"@sentry/types@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.63.0.tgz#8032029fee6f70e04b667646626a674b03e2f79b"
-  integrity sha512-pZNwJVW7RqNLGuTUAhoygt0c9zmc0js10eANAz0MstygJRhQI1tqPDuiELVdujPrbeL+IFKF+7NvRDAydR2Niw==
+"@sentry/types@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.64.0.tgz#21fc545ea05c3c8c4c3e518583eca1a8c5429506"
+  integrity sha512-LqjQprWXjUFRmzIlUjyA+KL+38elgIYmAeoDrdyNVh8MK5IC1W2Lh1Q87b4yOiZeMiIhIVNBd7Ecoh2rodGrGA==
 
-"@sentry/utils@7.63.0":
-  version "7.63.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.63.0.tgz#7c598553b4dbb6e3740dc96bc7f112ec32edbe69"
-  integrity sha512-7FQv1RYAwnuTuarruP+1+Jd6YQuN7i/Y7KltwPMVEwU7j5mzYQaexLr/Jz1XIdR2KYVdkbXQyP8jj8BmA6u9Jw==
+"@sentry/utils@7.64.0":
+  version "7.64.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.64.0.tgz#6fe3ce9a56d3433ed32119f914907361a54cc184"
+  integrity sha512-HRlM1INzK66Gt+F4vCItiwGKAng4gqzCR4C5marsL3qv6SrKH98dQnCGYgXluSWaaa56h97FRQu7TxCk6jkSvQ==
   dependencies:
-    "@sentry/types" "7.63.0"
+    "@sentry/types" "7.64.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 8a389c53b3fb70f88792a84127de7310ff732a25 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 30 Aug 2023 19:58:44 +0200
Subject: [PATCH 135/239] test: New Electron versions (#723)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 9eccc72b..424c7c55 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.20","23.3.12","24.7.1","25.5.0","26.0.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.22","23.3.13","24.8.1","25.7.0","26.1.0"]

From 367dcade03743fb318a2a8ed0538dfad6d29255b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 31 Aug 2023 12:35:43 +0200
Subject: [PATCH 136/239] test: New Electron versions (#728)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 424c7c55..a5b79ea9 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.22","23.3.13","24.8.1","25.7.0","26.1.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.23","23.3.13","24.8.2","25.8.0","26.1.0"]

From 24bbeef183e2c1edda7248c21b1956d3727e819c Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 31 Aug 2023 15:41:30 +0200
Subject: [PATCH 137/239] feat: Update Sentry SDKs from v7.64.0 to v7.66.0
 (#726)

---
 package.json        |  14 ++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 124 ++++++++++++++++++++++----------------------
 3 files changed, 70 insertions(+), 70 deletions(-)

diff --git a/package.json b/package.json
index 6a36ad4d..51ae82cb 100644
--- a/package.json
+++ b/package.json
@@ -58,18 +58,18 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.64.0",
-    "@sentry/core": "7.64.0",
-    "@sentry/node": "7.64.0",
-    "@sentry/types": "7.64.0",
-    "@sentry/utils": "7.64.0",
+    "@sentry/browser": "7.66.0",
+    "@sentry/core": "7.66.0",
+    "@sentry/node": "7.66.0",
+    "@sentry/types": "7.66.0",
+    "@sentry/utils": "7.66.0",
     "deepmerge": "4.3.0",
     "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.64.0",
-    "@sentry-internal/typescript": "7.64.0",
+    "@sentry-internal/eslint-config-sdk": "7.66.0",
+    "@sentry-internal/typescript": "7.66.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 393dd691..7468d36a 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_64_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_66_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 3b7a98e6..32cbac31 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -135,13 +135,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.64.0.tgz#845d164656abc2a6a4920d5c138d5e6ca58c7231"
-  integrity sha512-lqzzu1p3sGfi8GIb+b9wdfw0hijgEYapLtgPxGgbCxn8Wqs8S2/9xTjnRzmZN2Mvo6njMXBsDcdv+Rh//laRtQ==
+"@sentry-internal/eslint-config-sdk@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.66.0.tgz#6785a2100e4bba69f6400a09e3a030582bc48441"
+  integrity sha512-gGSx26NKzFQKyYYHiN4cAhzp7VypFsfxMr6Pa4OFc1O5bNwSk0fD+YNylFFQ4/kQuVb1ccL+1KSSNVI+xjaqmg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.64.0"
-    "@sentry-internal/typescript" "7.64.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.66.0"
+    "@sentry-internal/typescript" "7.66.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -151,83 +151,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.64.0.tgz#95f1e4248bac3073d947557ae14c6a735a65d57f"
-  integrity sha512-2t90g8ljkF/+WQvMiOEZ2E6rTT6/dpqqc1Eg+Tnm73LkgUbVLv3vOuLtaHMKzDCvv8AAQGN5gYtPSLqoXiWpYw==
+"@sentry-internal/eslint-plugin-sdk@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.66.0.tgz#c111c9722253f18f7d1128933484e5b054a28dd3"
+  integrity sha512-Iqj1D1F3p91Xx34oyuI5uLMJou55E6ycT8l1p0tABcj9MxdTxhxHtBi2F8gJSe1zrGX8TRo4m3GqwMOn8BQOuQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.64.0.tgz#3e110473b8edf805b799cc91d6ee592830237bb4"
-  integrity sha512-1XE8W6ki7hHyBvX9hfirnGkKDBKNq3bDJyXS86E0bYVDl94nvbRM9BD9DHsCFetqYkVm1yDGEK+6aUVs4CztoQ==
+"@sentry-internal/tracing@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.66.0.tgz#45ea607917d55a5bcaa3229341387ff6ed9b3a2b"
+  integrity sha512-3vCgC2hC3T45pn53yTDVcRpHoJTBxelDPPZVsipAbZnoOVPkj7n6dNfDhj3I3kwWCBPahPkXmE+R4xViR8VqJg==
   dependencies:
-    "@sentry/core" "7.64.0"
-    "@sentry/types" "7.64.0"
-    "@sentry/utils" "7.64.0"
+    "@sentry/core" "7.66.0"
+    "@sentry/types" "7.66.0"
+    "@sentry/utils" "7.66.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.64.0.tgz#b2aeb620e402dedaaa0de62bee9b901e809879ff"
-  integrity sha512-HvDvOOSfLBUnklg3h/808zHnfQqrzYwG2PrDH8p4fq6v4dZdm/C9jKZTh93MxDO10WdCEXchY4vR+BqAL6GHUw==
-
-"@sentry/browser@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.64.0.tgz#76db08a5d32ffe7c5aa907f258e6c845ce7f10d7"
-  integrity sha512-lB2IWUkZavEDclxfLBp554dY10ZNIEvlDZUWWathW+Ws2wRb6PNLtuPUNu12R7Q7z0xpkOLrM1kRNN0OdldgKA==
-  dependencies:
-    "@sentry-internal/tracing" "7.64.0"
-    "@sentry/core" "7.64.0"
-    "@sentry/replay" "7.64.0"
-    "@sentry/types" "7.64.0"
-    "@sentry/utils" "7.64.0"
+"@sentry-internal/typescript@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.66.0.tgz#5185c131a2ae5089dc4b668961a84de7ef08d7a4"
+  integrity sha512-hWN1ErxtjrVfilW4UNRLUfSVVIvGDIJNZhWUg2NhEdh2CTub/WBLiYqe0DKRJf3rURBTVRmnJlh3YXmEkh5ynQ==
+
+"@sentry/browser@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.66.0.tgz#9aa3078f8914d2f8acb4ad9fc7b2011c80e357f5"
+  integrity sha512-rW037rf8jkhyykG38+HUdwkRCKHJEMM5NkCqPIO5zuuxfLKukKdI2rbvgJ93s3/9UfsTuDFcKFL1u43mCn6sDw==
+  dependencies:
+    "@sentry-internal/tracing" "7.66.0"
+    "@sentry/core" "7.66.0"
+    "@sentry/replay" "7.66.0"
+    "@sentry/types" "7.66.0"
+    "@sentry/utils" "7.66.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.64.0.tgz#9d61cdc29ba299dedbdcbe01cfadf94bd0b7df48"
-  integrity sha512-IzmEyl5sNG7NyEFiyFHEHC+sizsZp9MEw1+RJRLX6U5RITvcsEgcajSkHQFafaBPzRrcxZMdm47Cwhl212LXcw==
+"@sentry/core@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.66.0.tgz#8968f2a9e641d33e3750a8e24d1d39953680c4f2"
+  integrity sha512-WMAEPN86NeCJ1IT48Lqiz4MS5gdDjBwP4M63XP4msZn9aujSf2Qb6My5uT87AJr9zBtgk8MyJsuHr35F0P3q1w==
   dependencies:
-    "@sentry/types" "7.64.0"
-    "@sentry/utils" "7.64.0"
+    "@sentry/types" "7.66.0"
+    "@sentry/utils" "7.66.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.64.0.tgz#c6f7a67c1442324298f0525e7191bc18572ee1ce"
-  integrity sha512-wRi0uTnp1WSa83X2yLD49tV9QPzGh5e42IKdIDBiQ7lV9JhLILlyb34BZY1pq6p4dp35yDasDrP3C7ubn7wo6A==
+"@sentry/node@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.66.0.tgz#d3e08471e1ecae28d3cd0ba3c18487ecb2449881"
+  integrity sha512-PxqIqLr4Sh5xcDfECiBQ4PuZ7v8yTgLhaRkruWrZPYxQrcJFPkwbFkw/IskzVnhT2VwXUmeWEIlRMQKBJ0t83A==
   dependencies:
-    "@sentry-internal/tracing" "7.64.0"
-    "@sentry/core" "7.64.0"
-    "@sentry/types" "7.64.0"
-    "@sentry/utils" "7.64.0"
+    "@sentry-internal/tracing" "7.66.0"
+    "@sentry/core" "7.66.0"
+    "@sentry/types" "7.66.0"
+    "@sentry/utils" "7.66.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.64.0.tgz#bdf09b0c4712f9dc6b24b3ebefa55a4ac76708e6"
-  integrity sha512-alaMCZDZhaAVmEyiUnszZnvfdbiZx5MmtMTGrlDd7tYq3K5OA9prdLqqlmfIJYBfYtXF3lD0iZFphOZQD+4CIw==
+"@sentry/replay@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.66.0.tgz#5469144192824e7688c475ed29586a8cce6606f6"
+  integrity sha512-5Y2SlVTOFTo3uIycv0mRneBakQtLgWkOnsJaC5LB0Ip0TqVKiMCbQ578vvXp+yvRj4LcS1gNd98xTTNojBoQNg==
   dependencies:
-    "@sentry/core" "7.64.0"
-    "@sentry/types" "7.64.0"
-    "@sentry/utils" "7.64.0"
+    "@sentry/core" "7.66.0"
+    "@sentry/types" "7.66.0"
+    "@sentry/utils" "7.66.0"
 
-"@sentry/types@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.64.0.tgz#21fc545ea05c3c8c4c3e518583eca1a8c5429506"
-  integrity sha512-LqjQprWXjUFRmzIlUjyA+KL+38elgIYmAeoDrdyNVh8MK5IC1W2Lh1Q87b4yOiZeMiIhIVNBd7Ecoh2rodGrGA==
+"@sentry/types@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.66.0.tgz#4ec290cc6a3dd2024a61a0bffb468cedb409f7fb"
+  integrity sha512-uUMSoSiar6JhuD8p7ON/Ddp4JYvrVd2RpwXJRPH1A4H4Bd4DVt1mKJy1OLG6HdeQv39XyhB1lPZckKJg4tATPw==
 
-"@sentry/utils@7.64.0":
-  version "7.64.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.64.0.tgz#6fe3ce9a56d3433ed32119f914907361a54cc184"
-  integrity sha512-HRlM1INzK66Gt+F4vCItiwGKAng4gqzCR4C5marsL3qv6SrKH98dQnCGYgXluSWaaa56h97FRQu7TxCk6jkSvQ==
+"@sentry/utils@7.66.0":
+  version "7.66.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.66.0.tgz#2e37c96610f26bc79ac064fca4222ea91fece68d"
+  integrity sha512-9GYUVgXjK66uXXcLXVMXVzlptqMtq1eJENCuDeezQiEFrNA71KkLDg00wESp+LL+bl3wpVTBApArpbF6UEG5hQ==
   dependencies:
-    "@sentry/types" "7.64.0"
+    "@sentry/types" "7.66.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From 500cb0232d9373ef01a5bb32f17f206918cb6804 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 11 Sep 2023 11:58:57 +0200
Subject: [PATCH 138/239] test: New Electron versions (#737)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index a5b79ea9..8a51c0ec 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.23","23.3.13","24.8.2","25.8.0","26.1.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.23","23.3.13","24.8.2","25.8.0","26.2.0"]

From b0edb7101b8e402b5d80897cd33de1488a21ae80 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 11 Sep 2023 16:41:44 +0200
Subject: [PATCH 139/239] feat: Update Sentry SDKs to v7.68.0 (#738)

---
 examples/electron-forge-webpack/event.json    |   2 +-
 examples/electron-forge/event.json            |   2 +-
 .../electron-react-boilerplate/event.json     |   2 +-
 examples/electron-vite/event.json             |   2 +-
 .../event.json                                |   2 +-
 examples/webpack-context-isolation/event.json |   2 +-
 package.json                                  |  16 +--
 src/main/integrations/onuncaughtexception.ts  |  14 +-
 src/renderer/sdk.ts                           |   2 +-
 .../main-error-custom-release/event.json      |   2 +-
 .../javascript/main-error/event.json          |   2 +-
 .../preload-error-protocol/event.json         |   2 +-
 .../javascript/preload-error/event.json       |   2 +-
 .../renderer-error-custom-env/event.json      |   2 +-
 .../renderer-error-custom-release/event.json  |   2 +-
 .../renderer-error-protocol/event.json        |   2 +-
 .../javascript/renderer-error/event.json      |   2 +-
 .../offline/renderer-error/event.json         |   2 +-
 .../test-apps/other/browser-replay/event.json |   2 +-
 .../test-apps/other/child-process/event2.json |   2 +-
 .../other/custom-renderer-name/event.json     |   2 +-
 .../test-apps/other/error-iframe/event.json   |   2 +-
 .../other/main-process-module/event.json      |   2 +-
 .../other/net-breadcrumbs/event.json          |   2 +-
 .../other/scope-breadcrumbs/event.json        |   2 +-
 .../test-apps/other/screenshots/event.json    |   2 +-
 .../sessions/javascript-error/event.json      |   2 +-
 .../javascript-error/session-end.json         |  17 ---
 .../javascript-error/session-error.json       |   2 +-
 yarn.lock                                     | 124 +++++++++---------
 30 files changed, 109 insertions(+), 114 deletions(-)
 delete mode 100644 test/e2e/test-apps/sessions/javascript-error/session-end.json

diff --git a/examples/electron-forge-webpack/event.json b/examples/electron-forge-webpack/event.json
index 130fafd8..05cc7046 100644
--- a/examples/electron-forge-webpack/event.json
+++ b/examples/electron-forge-webpack/event.json
@@ -90,7 +90,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/examples/electron-forge/event.json b/examples/electron-forge/event.json
index 0182666a..a631763a 100644
--- a/examples/electron-forge/event.json
+++ b/examples/electron-forge/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/examples/electron-react-boilerplate/event.json b/examples/electron-react-boilerplate/event.json
index 0574cfee..36c407c6 100644
--- a/examples/electron-react-boilerplate/event.json
+++ b/examples/electron-react-boilerplate/event.json
@@ -67,7 +67,7 @@
             "frames": []
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/examples/electron-vite/event.json b/examples/electron-vite/event.json
index f500f344..45d17dd0 100644
--- a/examples/electron-vite/event.json
+++ b/examples/electron-vite/event.json
@@ -75,7 +75,7 @@
             "frames": []
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/examples/webpack-context-isolation-preload/event.json b/examples/webpack-context-isolation-preload/event.json
index ee81c538..96c94aa4 100644
--- a/examples/webpack-context-isolation-preload/event.json
+++ b/examples/webpack-context-isolation-preload/event.json
@@ -91,7 +91,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/examples/webpack-context-isolation/event.json b/examples/webpack-context-isolation/event.json
index 84f75ff9..4b7316b3 100644
--- a/examples/webpack-context-isolation/event.json
+++ b/examples/webpack-context-isolation/event.json
@@ -91,7 +91,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/package.json b/package.json
index 51ae82cb..2128245e 100644
--- a/package.json
+++ b/package.json
@@ -54,22 +54,22 @@
     "fix:eslint": "eslint . --format stylish --fix",
     "pretest": "yarn build",
     "test": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 120000 ./test/unit/**/*.ts",
-    "pree2e": "rimraf test/e2e/dist/**/node_modules/@sentry/** test/e2e/dist/**/yarn.lock && node scripts/clean-cache.js && yarn build && npm pack",
+    "pree2e": "rimraf test/e2e/dist/**/node_modules/@sentry/** test/e2e/dist/**/yarn.lock test/e2e/dist/**/package-lock.json && node scripts/clean-cache.js && yarn build && npm pack",
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.66.0",
-    "@sentry/core": "7.66.0",
-    "@sentry/node": "7.66.0",
-    "@sentry/types": "7.66.0",
-    "@sentry/utils": "7.66.0",
+    "@sentry/browser": "7.68.0",
+    "@sentry/core": "7.68.0",
+    "@sentry/node": "7.68.0",
+    "@sentry/types": "7.68.0",
+    "@sentry/utils": "7.68.0",
     "deepmerge": "4.3.0",
     "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
-    "@sentry-internal/eslint-config-sdk": "7.66.0",
-    "@sentry-internal/typescript": "7.66.0",
+    "@sentry-internal/eslint-config-sdk": "7.68.0",
+    "@sentry-internal/typescript": "7.68.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts
index 488aa717..8a4d4798 100644
--- a/src/main/integrations/onuncaughtexception.ts
+++ b/src/main/integrations/onuncaughtexception.ts
@@ -31,7 +31,19 @@ export class OnUncaughtException implements Integration {
           }));
 
           const nodeClient = getCurrentHub().getClient() as NodeClient;
-          nodeClient.captureException(error, { originalException: error }, getCurrentHub().getScope());
+          nodeClient.captureException(
+            error,
+            {
+              originalException: error,
+              data: {
+                mechanism: {
+                  handled: false,
+                  type: 'generic',
+                },
+              },
+            },
+            getCurrentHub().getScope(),
+          );
           await nodeClient.flush(nodeClient.getOptions().shutdownTimeout || 2000);
 
           if (options?.onFatalError) {
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 7468d36a..e576f03b 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_66_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_68_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/test-apps/javascript/main-error-custom-release/event.json b/test/e2e/test-apps/javascript/main-error-custom-release/event.json
index e525525e..68b0c4b0 100644
--- a/test/e2e/test-apps/javascript/main-error-custom-release/event.json
+++ b/test/e2e/test-apps/javascript/main-error-custom-release/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "generic"
           }
         }
diff --git a/test/e2e/test-apps/javascript/main-error/event.json b/test/e2e/test-apps/javascript/main-error/event.json
index c96b01fe..fa14bfaf 100644
--- a/test/e2e/test-apps/javascript/main-error/event.json
+++ b/test/e2e/test-apps/javascript/main-error/event.json
@@ -76,7 +76,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "generic"
           }
         }
diff --git a/test/e2e/test-apps/javascript/preload-error-protocol/event.json b/test/e2e/test-apps/javascript/preload-error-protocol/event.json
index ee81ccf8..8151bcc1 100644
--- a/test/e2e/test-apps/javascript/preload-error-protocol/event.json
+++ b/test/e2e/test-apps/javascript/preload-error-protocol/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/javascript/preload-error/event.json b/test/e2e/test-apps/javascript/preload-error/event.json
index 91cf8b47..5793b256 100644
--- a/test/e2e/test-apps/javascript/preload-error/event.json
+++ b/test/e2e/test-apps/javascript/preload-error/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json b/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json
index d24eb797..b93a57cb 100644
--- a/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json
+++ b/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json b/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json
index 6aec9824..08d0476a 100644
--- a/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json
+++ b/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/javascript/renderer-error-protocol/event.json b/test/e2e/test-apps/javascript/renderer-error-protocol/event.json
index 76536610..0fc3d7ab 100644
--- a/test/e2e/test-apps/javascript/renderer-error-protocol/event.json
+++ b/test/e2e/test-apps/javascript/renderer-error-protocol/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/javascript/renderer-error/event.json b/test/e2e/test-apps/javascript/renderer-error/event.json
index 43157ee2..75185856 100644
--- a/test/e2e/test-apps/javascript/renderer-error/event.json
+++ b/test/e2e/test-apps/javascript/renderer-error/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/offline/renderer-error/event.json b/test/e2e/test-apps/offline/renderer-error/event.json
index e05c1f90..798fd7ac 100644
--- a/test/e2e/test-apps/offline/renderer-error/event.json
+++ b/test/e2e/test-apps/offline/renderer-error/event.json
@@ -66,7 +66,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/other/browser-replay/event.json b/test/e2e/test-apps/other/browser-replay/event.json
index 17c18c26..383ea0b9 100644
--- a/test/e2e/test-apps/other/browser-replay/event.json
+++ b/test/e2e/test-apps/other/browser-replay/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/other/child-process/event2.json b/test/e2e/test-apps/other/child-process/event2.json
index 3d633f20..0fb66d2c 100644
--- a/test/e2e/test-apps/other/child-process/event2.json
+++ b/test/e2e/test-apps/other/child-process/event2.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/other/custom-renderer-name/event.json b/test/e2e/test-apps/other/custom-renderer-name/event.json
index 6be2c020..d99354a1 100644
--- a/test/e2e/test-apps/other/custom-renderer-name/event.json
+++ b/test/e2e/test-apps/other/custom-renderer-name/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/other/error-iframe/event.json b/test/e2e/test-apps/other/error-iframe/event.json
index 8a410346..c298be28 100644
--- a/test/e2e/test-apps/other/error-iframe/event.json
+++ b/test/e2e/test-apps/other/error-iframe/event.json
@@ -83,7 +83,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/other/main-process-module/event.json b/test/e2e/test-apps/other/main-process-module/event.json
index 5bc2297e..805e3cb8 100644
--- a/test/e2e/test-apps/other/main-process-module/event.json
+++ b/test/e2e/test-apps/other/main-process-module/event.json
@@ -85,7 +85,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "generic"
           }
         }
diff --git a/test/e2e/test-apps/other/net-breadcrumbs/event.json b/test/e2e/test-apps/other/net-breadcrumbs/event.json
index a2836063..7246d8ff 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs/event.json
+++ b/test/e2e/test-apps/other/net-breadcrumbs/event.json
@@ -66,7 +66,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "generic"
           }
         }
diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/event.json b/test/e2e/test-apps/other/scope-breadcrumbs/event.json
index 3884bb8f..f6aa0711 100644
--- a/test/e2e/test-apps/other/scope-breadcrumbs/event.json
+++ b/test/e2e/test-apps/other/scope-breadcrumbs/event.json
@@ -76,7 +76,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/other/screenshots/event.json b/test/e2e/test-apps/other/screenshots/event.json
index ed62d1a4..6cdd9b93 100644
--- a/test/e2e/test-apps/other/screenshots/event.json
+++ b/test/e2e/test-apps/other/screenshots/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/sessions/javascript-error/event.json b/test/e2e/test-apps/sessions/javascript-error/event.json
index 57228daa..9fe8b65c 100644
--- a/test/e2e/test-apps/sessions/javascript-error/event.json
+++ b/test/e2e/test-apps/sessions/javascript-error/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/sessions/javascript-error/session-end.json b/test/e2e/test-apps/sessions/javascript-error/session-end.json
deleted file mode 100644
index f67467db..00000000
--- a/test/e2e/test-apps/sessions/javascript-error/session-end.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "appId": "277345",
-  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
-  "method": "envelope",
-  "data": {
-    "sid": "{{id}}",
-    "init": false,
-    "started": 0,
-    "timestamp": 0,
-    "status": "exited",
-    "errors": 1,
-    "duration": 0,
-    "attrs": {
-      "release": "error-session@1.0.0"
-    }
-  }
-}
diff --git a/test/e2e/test-apps/sessions/javascript-error/session-error.json b/test/e2e/test-apps/sessions/javascript-error/session-error.json
index b7e41c0d..5b631358 100644
--- a/test/e2e/test-apps/sessions/javascript-error/session-error.json
+++ b/test/e2e/test-apps/sessions/javascript-error/session-error.json
@@ -7,7 +7,7 @@
     "init": false,
     "started": 0,
     "timestamp": 0,
-    "status": "ok",
+    "status": "crashed",
     "errors": 1,
     "duration": 0,
     "attrs": {
diff --git a/yarn.lock b/yarn.lock
index 32cbac31..f882142a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -135,13 +135,13 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
-"@sentry-internal/eslint-config-sdk@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.66.0.tgz#6785a2100e4bba69f6400a09e3a030582bc48441"
-  integrity sha512-gGSx26NKzFQKyYYHiN4cAhzp7VypFsfxMr6Pa4OFc1O5bNwSk0fD+YNylFFQ4/kQuVb1ccL+1KSSNVI+xjaqmg==
+"@sentry-internal/eslint-config-sdk@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.68.0.tgz#6154af30c5b1125419fb3192c97d96a8ddb98310"
+  integrity sha512-24TdQxg/sneTbPV3gBr9wE5hjhTGSQ4b6H8f069DwdJ8BUKmPXMWkX7/3NmgfOqieccLrgsxIMfbkvLveeVBTA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.66.0"
-    "@sentry-internal/typescript" "7.66.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.68.0"
+    "@sentry-internal/typescript" "7.68.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -151,83 +151,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.66.0.tgz#c111c9722253f18f7d1128933484e5b054a28dd3"
-  integrity sha512-Iqj1D1F3p91Xx34oyuI5uLMJou55E6ycT8l1p0tABcj9MxdTxhxHtBi2F8gJSe1zrGX8TRo4m3GqwMOn8BQOuQ==
+"@sentry-internal/eslint-plugin-sdk@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.68.0.tgz#41691a39fa10e66869bbe0418121d8051258433f"
+  integrity sha512-XYv33e+9KiB+uEghilBoGlve3UhbrXGGVnnhVppoeAQQek/RxnjHSwwZWo98UqxzYLLW4G9XofUUIxNI2AISCg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.66.0.tgz#45ea607917d55a5bcaa3229341387ff6ed9b3a2b"
-  integrity sha512-3vCgC2hC3T45pn53yTDVcRpHoJTBxelDPPZVsipAbZnoOVPkj7n6dNfDhj3I3kwWCBPahPkXmE+R4xViR8VqJg==
+"@sentry-internal/tracing@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.68.0.tgz#cb83a797baa671702cf43caf2280868850a0ef04"
+  integrity sha512-nNKS/q21+Iqzxs2K7T/l3dZi8Z9s/uxsAazpk2AYhFzx9mFnPj1Xfe3dgbFoygNifE+IrpUuldr6D5HQamTDPQ==
   dependencies:
-    "@sentry/core" "7.66.0"
-    "@sentry/types" "7.66.0"
-    "@sentry/utils" "7.66.0"
+    "@sentry/core" "7.68.0"
+    "@sentry/types" "7.68.0"
+    "@sentry/utils" "7.68.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.66.0.tgz#5185c131a2ae5089dc4b668961a84de7ef08d7a4"
-  integrity sha512-hWN1ErxtjrVfilW4UNRLUfSVVIvGDIJNZhWUg2NhEdh2CTub/WBLiYqe0DKRJf3rURBTVRmnJlh3YXmEkh5ynQ==
-
-"@sentry/browser@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.66.0.tgz#9aa3078f8914d2f8acb4ad9fc7b2011c80e357f5"
-  integrity sha512-rW037rf8jkhyykG38+HUdwkRCKHJEMM5NkCqPIO5zuuxfLKukKdI2rbvgJ93s3/9UfsTuDFcKFL1u43mCn6sDw==
-  dependencies:
-    "@sentry-internal/tracing" "7.66.0"
-    "@sentry/core" "7.66.0"
-    "@sentry/replay" "7.66.0"
-    "@sentry/types" "7.66.0"
-    "@sentry/utils" "7.66.0"
+"@sentry-internal/typescript@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.68.0.tgz#8b38e213b0d6ec98617ab6c9bc42ca529fe93bc4"
+  integrity sha512-9jE/pYmSJndyKZ1y/95rVzwwDN3CGR1Fm30fvgdKdVcf4cIaLQMk50XVCHPhB5D7omXOeChOIwShJq21C1/KfA==
+
+"@sentry/browser@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.68.0.tgz#b94be6385f3b1450e928bacf64479d06c452ff42"
+  integrity sha512-1RIPLzKcBeUeG8CQc4OIRfQ6F1zmGKku1am7P9QTz0bz//Mu7bEjm75DM69LBoUlP/Ab9cQQA3fZFUvrH0j1Tg==
+  dependencies:
+    "@sentry-internal/tracing" "7.68.0"
+    "@sentry/core" "7.68.0"
+    "@sentry/replay" "7.68.0"
+    "@sentry/types" "7.68.0"
+    "@sentry/utils" "7.68.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.66.0.tgz#8968f2a9e641d33e3750a8e24d1d39953680c4f2"
-  integrity sha512-WMAEPN86NeCJ1IT48Lqiz4MS5gdDjBwP4M63XP4msZn9aujSf2Qb6My5uT87AJr9zBtgk8MyJsuHr35F0P3q1w==
+"@sentry/core@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.68.0.tgz#323817afea06b1fc22db37620bf74f3f8a46dbcf"
+  integrity sha512-mT3ObBWgvAky/QF3dZy4KBoXbRXbNsD6evn+mYi9UEeIZQ5NpnQYDEp78mapiEjI/TAHZIhTIuaBhj1Jk0qUUA==
   dependencies:
-    "@sentry/types" "7.66.0"
-    "@sentry/utils" "7.66.0"
+    "@sentry/types" "7.68.0"
+    "@sentry/utils" "7.68.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.66.0.tgz#d3e08471e1ecae28d3cd0ba3c18487ecb2449881"
-  integrity sha512-PxqIqLr4Sh5xcDfECiBQ4PuZ7v8yTgLhaRkruWrZPYxQrcJFPkwbFkw/IskzVnhT2VwXUmeWEIlRMQKBJ0t83A==
+"@sentry/node@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.68.0.tgz#da3407ba7455109cf625c9a134a3f74ec5f5ca6b"
+  integrity sha512-gtcHoi6Xu6Iu8MpPgKJA4E0nozqLvYF0fKtt+27T0QBzWioO6lkxSQkKGWMyJGL0AmpLCex0E28fck/rlbt0LA==
   dependencies:
-    "@sentry-internal/tracing" "7.66.0"
-    "@sentry/core" "7.66.0"
-    "@sentry/types" "7.66.0"
-    "@sentry/utils" "7.66.0"
+    "@sentry-internal/tracing" "7.68.0"
+    "@sentry/core" "7.68.0"
+    "@sentry/types" "7.68.0"
+    "@sentry/utils" "7.68.0"
     cookie "^0.4.1"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.66.0.tgz#5469144192824e7688c475ed29586a8cce6606f6"
-  integrity sha512-5Y2SlVTOFTo3uIycv0mRneBakQtLgWkOnsJaC5LB0Ip0TqVKiMCbQ578vvXp+yvRj4LcS1gNd98xTTNojBoQNg==
+"@sentry/replay@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.68.0.tgz#ad6e91586c2c6ac81a42705e846eb74f4d068e76"
+  integrity sha512-be8QT2pxcLOTuX6HBRkK0mCVwM97dU5ZLCeofI+xJEWcRnoJdbx00nFwvBXvvoCizbtf4YIMCGwaT2k5LrVxsQ==
   dependencies:
-    "@sentry/core" "7.66.0"
-    "@sentry/types" "7.66.0"
-    "@sentry/utils" "7.66.0"
+    "@sentry/core" "7.68.0"
+    "@sentry/types" "7.68.0"
+    "@sentry/utils" "7.68.0"
 
-"@sentry/types@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.66.0.tgz#4ec290cc6a3dd2024a61a0bffb468cedb409f7fb"
-  integrity sha512-uUMSoSiar6JhuD8p7ON/Ddp4JYvrVd2RpwXJRPH1A4H4Bd4DVt1mKJy1OLG6HdeQv39XyhB1lPZckKJg4tATPw==
+"@sentry/types@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.68.0.tgz#6134511106eed90bf033dc2ce76955f61582b48f"
+  integrity sha512-5J2pH1Pjx/029zTm3CNY9MaE8Aui81nG7JCtlMp7uEfQ//9Ja4d4Sliz/kV4ARbkIKUZerSgaRAm3xCy5XOXLg==
 
-"@sentry/utils@7.66.0":
-  version "7.66.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.66.0.tgz#2e37c96610f26bc79ac064fca4222ea91fece68d"
-  integrity sha512-9GYUVgXjK66uXXcLXVMXVzlptqMtq1eJENCuDeezQiEFrNA71KkLDg00wESp+LL+bl3wpVTBApArpbF6UEG5hQ==
+"@sentry/utils@7.68.0":
+  version "7.68.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.68.0.tgz#e9fd33f4e856cf6ef3843ae11af3c836d88cbb88"
+  integrity sha512-NecnQegvKARyeFmBx7mYmbI17mTvjARWs1nfzY5jhPyNc3Zk4M3bQsgIdnJ1t+jo93UYudlNND7hxhDzjcBAVg==
   dependencies:
-    "@sentry/types" "7.66.0"
+    "@sentry/types" "7.68.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":

From b247856826cb935b62a6574160f4f742c263972a Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 11 Sep 2023 18:04:21 +0200
Subject: [PATCH 140/239] feat: Add integration to track sessions as app in
 foreground (#725)

---
 src/main/electron-normalize.ts                |  2 +
 .../integrations/browser-window-session.ts    | 96 ++++++++++++++++++
 src/main/integrations/index.ts                |  1 +
 src/main/integrations/main-process-session.ts | 46 +--------
 src/main/sdk.ts                               | 27 +++--
 src/main/sessions.ts                          | 41 +++++++-
 .../test-apps/sessions/window-bad/event.json  | 99 +++++++++++++++++++
 .../sessions/window-bad/package.json          |  8 ++
 .../test-apps/sessions/window-bad/recipe.yml  |  4 +
 .../sessions/window-bad/session-first.json    | 17 ++++
 .../sessions/window-bad/session-second.json   | 17 ++++
 .../sessions/window-bad/session-third.json    | 17 ++++
 .../sessions/window-bad/src/index.html        | 19 ++++
 .../test-apps/sessions/window-bad/src/main.js | 27 +++++
 .../sessions/window-good/package.json         |  8 ++
 .../test-apps/sessions/window-good/recipe.yml |  4 +
 .../sessions/window-good/session-first.json   | 17 ++++
 .../sessions/window-good/session-fourth.json  | 17 ++++
 .../sessions/window-good/session-second.json  | 17 ++++
 .../sessions/window-good/session-third.json   | 17 ++++
 .../sessions/window-good/src/index.html       | 15 +++
 .../sessions/window-good/src/main.js          | 35 +++++++
 22 files changed, 498 insertions(+), 53 deletions(-)
 create mode 100644 src/main/integrations/browser-window-session.ts
 create mode 100644 test/e2e/test-apps/sessions/window-bad/event.json
 create mode 100644 test/e2e/test-apps/sessions/window-bad/package.json
 create mode 100644 test/e2e/test-apps/sessions/window-bad/recipe.yml
 create mode 100644 test/e2e/test-apps/sessions/window-bad/session-first.json
 create mode 100644 test/e2e/test-apps/sessions/window-bad/session-second.json
 create mode 100644 test/e2e/test-apps/sessions/window-bad/session-third.json
 create mode 100644 test/e2e/test-apps/sessions/window-bad/src/index.html
 create mode 100644 test/e2e/test-apps/sessions/window-bad/src/main.js
 create mode 100644 test/e2e/test-apps/sessions/window-good/package.json
 create mode 100644 test/e2e/test-apps/sessions/window-good/recipe.yml
 create mode 100644 test/e2e/test-apps/sessions/window-good/session-first.json
 create mode 100644 test/e2e/test-apps/sessions/window-good/session-fourth.json
 create mode 100644 test/e2e/test-apps/sessions/window-good/session-second.json
 create mode 100644 test/e2e/test-apps/sessions/window-good/session-third.json
 create mode 100644 test/e2e/test-apps/sessions/window-good/src/index.html
 create mode 100644 test/e2e/test-apps/sessions/window-good/src/main.js

diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts
index cbdf4d39..e4f698c7 100644
--- a/src/main/electron-normalize.ts
+++ b/src/main/electron-normalize.ts
@@ -7,6 +7,8 @@ import { Optional } from '../common/types';
 const parsed = parseSemver(process.versions.electron);
 const version = { major: parsed.major || 0, minor: parsed.minor || 0, patch: parsed.patch || 0 };
 
+export const ELECTRON_MAJOR_VERSION = version.major;
+
 /** Returns if the app is packaged. Copied from Electron to support < v3 */
 export const isPackaged = (() => {
   const execFile = basename(process.execPath).toLowerCase();
diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts
new file mode 100644
index 00000000..142cdf45
--- /dev/null
+++ b/src/main/integrations/browser-window-session.ts
@@ -0,0 +1,96 @@
+import { Integration } from '@sentry/types';
+import { app, BrowserWindow } from 'electron';
+
+import { ELECTRON_MAJOR_VERSION } from '../electron-normalize';
+import { endSession, endSessionOnExit, startSession } from '../sessions';
+
+interface Options {
+  /**
+   * Number of seconds to wait before ending a session after the app loses focus.
+   *
+   * Default: 10 seconds
+   */
+  backgroundTimeoutSeconds?: number;
+}
+
+// The state can be, active, inactive, or waiting for a timeout
+type SessionState = { name: 'active' } | { name: 'inactive' } | { name: 'timeout'; timer: NodeJS.Timeout };
+
+/**
+ * Tracks sessions as BrowserWindows focused.
+ *
+ * Supports Electron >= v12
+ */
+export class BrowserWindowSession implements Integration {
+  /** @inheritDoc */
+  public static id: string = 'BrowserWindowSession';
+
+  /** @inheritDoc */
+  public readonly name: string;
+
+  private _state: SessionState;
+
+  public constructor(private readonly _options: Options = {}) {
+    if (ELECTRON_MAJOR_VERSION < 12) {
+      throw new Error('BrowserWindowSession requires Electron >= v12');
+    }
+
+    this.name = BrowserWindowSession.id;
+    this._state = { name: 'inactive' };
+  }
+
+  /** @inheritDoc */
+  public setupOnce(): void {
+    app.on('browser-window-created', (_event, window) => {
+      window.on('focus', this._windowStateChanged);
+      window.on('blur', this._windowStateChanged);
+      window.on('show', this._windowStateChanged);
+      window.on('hide', this._windowStateChanged);
+
+      // when the window is closed we need to remove the listeners
+      window.once('closed', () => {
+        window.removeListener('focus', this._windowStateChanged);
+        window.removeListener('blur', this._windowStateChanged);
+        window.removeListener('show', this._windowStateChanged);
+        window.removeListener('hide', this._windowStateChanged);
+      });
+    });
+
+    // if the app exits while the session is active, end the session
+    endSessionOnExit();
+  }
+
+  private _windowStateChanged = (): void => {
+    const aWindowIsActive = !!BrowserWindow.getFocusedWindow();
+
+    if (aWindowIsActive) {
+      // We are now active
+      if (this._state.name === 'inactive') {
+        // If we were inactive, start a new session
+        void startSession(true);
+      } else if (this._state.name === 'timeout') {
+        // Clear the timeout since the app has become active again
+        clearTimeout(this._state.timer);
+      }
+
+      this._state = { name: 'active' };
+    } else {
+      if (this._state.name === 'active') {
+        // We have become inactive, start the timeout
+        const timeout = (this._options.backgroundTimeoutSeconds ?? 30) * 1_000;
+
+        const timer = setTimeout(() => {
+          // if the state says we're still waiting for the timeout, end the session
+          if (this._state.name === 'timeout') {
+            this._state = { name: 'inactive' };
+            void endSession();
+          }
+        }, timeout)
+          // unref so this timer doesn't block app exit
+          .unref();
+
+        this._state = { name: 'timeout', timer };
+      }
+    }
+  };
+}
diff --git a/src/main/integrations/index.ts b/src/main/integrations/index.ts
index 313bb41f..e723f064 100644
--- a/src/main/integrations/index.ts
+++ b/src/main/integrations/index.ts
@@ -5,6 +5,7 @@ export { SentryMinidump } from './sentry-minidump';
 export { ElectronMinidump } from './electron-minidump';
 export { PreloadInjection } from './preload-injection';
 export { MainProcessSession } from './main-process-session';
+export { BrowserWindowSession } from './browser-window-session';
 export { AdditionalContext } from './additional-context';
 export { Net } from './net-breadcrumbs';
 export { ChildProcess } from './child-process';
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index 983900d3..3d161681 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -1,8 +1,6 @@
 import { Integration } from '@sentry/types';
-import { logger } from '@sentry/utils';
-import { app } from 'electron';
 
-import { endSession, startSession } from '../sessions';
+import { endSessionOnExit, startSession } from '../sessions';
 
 interface Options {
   /**
@@ -29,46 +27,6 @@ export class MainProcessSession implements Integration {
   public setupOnce(): void {
     void startSession(!!this._options.sendOnCreate);
 
-    // We track sessions via the 'will-quit' event which is the last event emitted before close.
-    //
-    // We need to be the last 'will-quit' listener so as not to interfere with any user defined listeners which may
-    // call `event.preventDefault()`.
-    this._ensureExitHandlerLast();
-
-    // 'before-quit' is always called before 'will-quit' so we listen there and ensure our 'will-quit' handler is still
-    // the last listener
-    app.on('before-quit', () => {
-      this._ensureExitHandlerLast();
-    });
-  }
-
-  /**
-   * Hooks 'will-quit' and ensures the handler is always last
-   */
-  private _ensureExitHandlerLast(): void {
-    app.removeListener('will-quit', this._exitHandler);
-    app.on('will-quit', this._exitHandler);
+    endSessionOnExit();
   }
-
-  /** Handles the exit */
-  private _exitHandler: (event: Electron.Event) => Promise<void> = async (event: Electron.Event) => {
-    if (event.defaultPrevented) {
-      return;
-    }
-
-    logger.log('[MainProcessSession] Exit Handler');
-
-    // Stop the exit so we have time to send the session
-    event.preventDefault();
-
-    try {
-      // End the session
-      await endSession();
-    } catch (e) {
-      // Ignore and log any errors which would prevent app exit
-      logger.warn('[MainProcessSession] Error ending session:', e);
-    }
-
-    app.exit();
-  };
 }
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index 80e84d07..94b645d9 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -128,21 +128,32 @@ export function init(userOptions: ElectronMainOptions): void {
   nodeInit(options);
 }
 
-/** Sets the default integrations and ensures that multiple minidump integrations are not enabled */
+/** A list of integrations which cause default integrations to be removed */
+const INTEGRATION_OVERRIDES = [
+  { override: 'ElectronMinidump', remove: 'SentryMinidump' },
+  { override: 'BrowserWindowSession', remove: 'MainProcessSession' },
+];
+
+/** Sets the default integrations and ensures that multiple minidump or session integrations are not enabled */
 function setDefaultIntegrations(defaults: Integration[], options: ElectronMainOptions): void {
   if (options.defaultIntegrations === undefined) {
-    // If ElectronMinidump has been included, automatically remove SentryMinidump
-    if (Array.isArray(options.integrations) && options.integrations.some((i) => i.name === 'ElectronMinidump')) {
-      options.defaultIntegrations = defaults.filter((integration) => integration.name !== 'SentryMinidump');
+    const removeDefaultsMatching = (user: Integration[], defaults: Integration[]): Integration[] => {
+      const toRemove = INTEGRATION_OVERRIDES.filter(({ override }) => user.some((i) => i.name === override)).map(
+        ({ remove }) => remove,
+      );
+
+      return defaults.filter((i) => !toRemove.includes(i.name));
+    };
+
+    if (Array.isArray(options.integrations)) {
+      options.defaultIntegrations = removeDefaultsMatching(options.integrations, defaults);
       return;
     } else if (typeof options.integrations === 'function') {
       const originalFn = options.integrations;
 
       options.integrations = (integrations) => {
-        const userIntegrations = originalFn(integrations);
-        return userIntegrations.some((i) => i.name === 'ElectronMinidump')
-          ? userIntegrations.filter((integration) => integration.name !== 'SentryMinidump')
-          : userIntegrations;
+        const resultIntegrations = originalFn(integrations);
+        return removeDefaultsMatching(resultIntegrations, resultIntegrations);
       };
     }
 
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index f970b2db..080a8522 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -2,6 +2,7 @@ import { getCurrentHub, makeSession, updateSession } from '@sentry/core';
 import { flush, NodeClient } from '@sentry/node';
 import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';
 import { logger } from '@sentry/utils';
+import { app } from 'electron';
 
 import { sentryCachePath } from './fs';
 import { Store } from './store';
@@ -11,7 +12,7 @@ const PERSIST_INTERVAL_MS = 60_000;
 /** Stores the app session in case of termination due to main process crash or app killed */
 const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined);
 
-/** Previous session that did not exit cleanly */
+/** Previous session if it did not exit cleanly */
 let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get();
 
 let persistTimer: NodeJS.Timer | undefined;
@@ -145,3 +146,41 @@ export function sessionCrashed(): void {
 
   hub.captureSession();
 }
+
+/**
+ * End the current session on app exit
+ */
+export function endSessionOnExit(): void {
+  // 'before-quit' is always called before 'will-quit' so we listen there and ensure our 'will-quit' handler is still
+  // the last listener
+  app.on('before-quit', () => {
+    // We track the end of sessions via the 'will-quit' event which is the last event emitted before close.
+    //
+    // We need to be the last 'will-quit' listener so as not to interfere with any user defined listeners which may
+    // call `event.preventDefault()` to abort the exit.
+    app.removeListener('will-quit', exitHandler);
+    app.on('will-quit', exitHandler);
+  });
+}
+
+/** Handles the exit */
+const exitHandler: (event: Electron.Event) => Promise<void> = async (event: Electron.Event) => {
+  if (event.defaultPrevented) {
+    return;
+  }
+
+  logger.log('[Session] Exit Handler');
+
+  // Stop the exit so we have time to send the session
+  event.preventDefault();
+
+  try {
+    // End the session
+    await endSession();
+  } catch (e) {
+    // Ignore and log any errors which would prevent app exit
+    logger.warn('[Session] Error ending session:', e);
+  }
+
+  app.exit();
+};
diff --git a/test/e2e/test-apps/sessions/window-bad/event.json b/test/e2e/test-apps/sessions/window-bad/event.json
new file mode 100644
index 00000000..1d07c6b5
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-bad/event.json
@@ -0,0 +1,99 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "bad-session-window",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution":"{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "release": "bad-session-window@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "exception": {
+      "values": [
+        {
+          "type": "Error",
+          "value": "Some renderer error",
+          "stacktrace": {
+            "frames": [
+              {
+                "colno": 0,
+                "filename": "app:///src/index.html",
+                "function": "{{function}}",
+                "in_app": true,
+                "lineno": 0
+              }
+            ]
+          },
+          "mechanism": {
+            "handled": true,
+            "type": "instrument"
+          }
+        }
+      ]
+    },
+    "level": "error",
+    "event_id": "{{id}}",
+    "platform": "javascript",
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "request": {
+      "url": "app:///src/index.html"
+    },
+    "tags": {
+      "event.environment": "javascript",
+      "event.origin": "electron",
+      "event.process": "renderer",
+      "event_type": "javascript"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-bad/package.json b/test/e2e/test-apps/sessions/window-bad/package.json
new file mode 100644
index 00000000..8dce09ae
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-bad/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "bad-session-window",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-bad/recipe.yml b/test/e2e/test-apps/sessions/window-bad/recipe.yml
new file mode 100644
index 00000000..990c6571
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-bad/recipe.yml
@@ -0,0 +1,4 @@
+description: Bad Session - Window
+category: Sessions
+command: yarn
+condition: version.major >= 12
diff --git a/test/e2e/test-apps/sessions/window-bad/session-first.json b/test/e2e/test-apps/sessions/window-bad/session-first.json
new file mode 100644
index 00000000..83434cfa
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-bad/session-first.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "bad-session-window@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-bad/session-second.json b/test/e2e/test-apps/sessions/window-bad/session-second.json
new file mode 100644
index 00000000..ca4ea31d
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-bad/session-second.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": false,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 1,
+    "duration": 0,
+    "attrs": {
+      "release": "bad-session-window@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-bad/session-third.json b/test/e2e/test-apps/sessions/window-bad/session-third.json
new file mode 100644
index 00000000..11b6d849
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-bad/session-third.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": false,
+    "started": 0,
+    "timestamp": 0,
+    "status": "exited",
+    "errors": 1,
+    "duration": 0,
+    "attrs": {
+      "release": "bad-session-window@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-bad/src/index.html b/test/e2e/test-apps/sessions/window-bad/src/index.html
new file mode 100644
index 00000000..c30b5ca8
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-bad/src/index.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+
+      init({
+        debug: true,
+      });
+
+      setTimeout(() => {
+        throw new Error('Some renderer error');
+      }, 1000);
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/sessions/window-bad/src/main.js b/test/e2e/test-apps/sessions/window-bad/src/main.js
new file mode 100644
index 00000000..c542d786
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-bad/src/main.js
@@ -0,0 +1,27 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init, Integrations } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  integrations: [new Integrations.BrowserWindowSession({ backgroundTimeoutSeconds: 1 })],
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: true,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+
+  setTimeout(() => {
+    app.quit();
+  }, 2000);
+});
diff --git a/test/e2e/test-apps/sessions/window-good/package.json b/test/e2e/test-apps/sessions/window-good/package.json
new file mode 100644
index 00000000..bdabd15f
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-good/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "good-session-window",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-good/recipe.yml b/test/e2e/test-apps/sessions/window-good/recipe.yml
new file mode 100644
index 00000000..e3e3a34f
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-good/recipe.yml
@@ -0,0 +1,4 @@
+description: Good Session - Window
+category: Sessions
+command: yarn
+condition: version.major >= 12
diff --git a/test/e2e/test-apps/sessions/window-good/session-first.json b/test/e2e/test-apps/sessions/window-good/session-first.json
new file mode 100644
index 00000000..9ae61330
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-good/session-first.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "good-session-window@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-good/session-fourth.json b/test/e2e/test-apps/sessions/window-good/session-fourth.json
new file mode 100644
index 00000000..aaec8549
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-good/session-fourth.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": false,
+    "started": 0,
+    "timestamp": 0,
+    "status": "exited",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "good-session-window@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-good/session-second.json b/test/e2e/test-apps/sessions/window-good/session-second.json
new file mode 100644
index 00000000..aaec8549
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-good/session-second.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": false,
+    "started": 0,
+    "timestamp": 0,
+    "status": "exited",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "good-session-window@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-good/session-third.json b/test/e2e/test-apps/sessions/window-good/session-third.json
new file mode 100644
index 00000000..9ae61330
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-good/session-third.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "good-session-window@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/window-good/src/index.html b/test/e2e/test-apps/sessions/window-good/src/index.html
new file mode 100644
index 00000000..b43f77af
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-good/src/index.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+
+      init({
+        debug: true,
+      });
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/sessions/window-good/src/main.js b/test/e2e/test-apps/sessions/window-good/src/main.js
new file mode 100644
index 00000000..6e6e5e65
--- /dev/null
+++ b/test/e2e/test-apps/sessions/window-good/src/main.js
@@ -0,0 +1,35 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init, Integrations } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  integrations: [new Integrations.BrowserWindowSession({ backgroundTimeoutSeconds: 1 })],
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: true,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+
+  setTimeout(() => {
+    mainWindow.hide();
+
+    setTimeout(() => {
+      mainWindow.show();
+
+      setTimeout(() => {
+        app.quit();
+      }, 2000);
+    }, 2000);
+  }, 2000);
+});

From cda58862b6f4f82a59bfe0fd6833615e7a4a2c9c Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 12 Sep 2023 16:03:27 +0200
Subject: [PATCH 141/239] test: Fix test failure after merge (#741)

---
 .../test-apps/sessions/window-bad/event.json    |  2 +-
 .../sessions/window-bad/session-second.json     |  2 +-
 .../sessions/window-bad/session-third.json      | 17 -----------------
 3 files changed, 2 insertions(+), 19 deletions(-)
 delete mode 100644 test/e2e/test-apps/sessions/window-bad/session-third.json

diff --git a/test/e2e/test-apps/sessions/window-bad/event.json b/test/e2e/test-apps/sessions/window-bad/event.json
index 1d07c6b5..e9fff737 100644
--- a/test/e2e/test-apps/sessions/window-bad/event.json
+++ b/test/e2e/test-apps/sessions/window-bad/event.json
@@ -75,7 +75,7 @@
             ]
           },
           "mechanism": {
-            "handled": true,
+            "handled": false,
             "type": "instrument"
           }
         }
diff --git a/test/e2e/test-apps/sessions/window-bad/session-second.json b/test/e2e/test-apps/sessions/window-bad/session-second.json
index ca4ea31d..450f4e5a 100644
--- a/test/e2e/test-apps/sessions/window-bad/session-second.json
+++ b/test/e2e/test-apps/sessions/window-bad/session-second.json
@@ -7,7 +7,7 @@
     "init": false,
     "started": 0,
     "timestamp": 0,
-    "status": "ok",
+    "status": "crashed",
     "errors": 1,
     "duration": 0,
     "attrs": {
diff --git a/test/e2e/test-apps/sessions/window-bad/session-third.json b/test/e2e/test-apps/sessions/window-bad/session-third.json
deleted file mode 100644
index 11b6d849..00000000
--- a/test/e2e/test-apps/sessions/window-bad/session-third.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "appId": "277345",
-  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
-  "method": "envelope",
-  "data": {
-    "sid": "{{id}}",
-    "init": false,
-    "started": 0,
-    "timestamp": 0,
-    "status": "exited",
-    "errors": 1,
-    "duration": 0,
-    "attrs": {
-      "release": "bad-session-window@1.0.0"
-    }
-  }
-}

From 8100264a60d5b5490c103dee0c7ebdf84371a28a Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 12 Sep 2023 16:03:55 +0200
Subject: [PATCH 142/239] test: Fix test failure after merge (#741)


From 91d4380ede98bea7e7e9b426c240905ba46a78e2 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 12 Sep 2023 16:58:40 +0200
Subject: [PATCH 143/239] chore: changelog for release (#742)

---
 CHANGELOG.md | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index c3a7ff73..5aaab531 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,24 @@
 
 ## Unreleased
 
+## 4.11.0
+
+- feat: Add optional `BrowserWindowSession` to track sessions as window in foreground (#725)
+- feat: Update from [v7.63.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.63.0) to
+  [v7.68.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.68.0) of JavaScript SDKs (#738)
+- **feat: Mark errors caught by the SDK as unhandled**
+
+As per the changes in the JavaScript SDKs [for
+v7.67.0](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md#7670), this release fixes inconsistent
+behaviour of when our SDKs classify captured errors as unhandled. Previously, some of our instrumentations correctly set
+unhandled, while others set handled.
+
+Going forward, all errors caught automatically from our SDKs will be marked as unhandled.
+If you manually capture errors (e.g. by calling `Sentry.captureException`), your errors will continue to be reported as handled.
+
+This change might lead to a decrease in reported crash-free sessions and consequently in your release health score.
+If you have concerns about this, feel free to open an issue.
+
 ## 4.10.0
 
 - feat: Optionally send sessions when they're created (#715)

From 08339bd1da5581deea2cb4b4ed100ded25a8e645 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 13 Sep 2023 02:36:01 +0200
Subject: [PATCH 144/239] fix: `BrowserWindowSession` should check visibility
 to work in Electron v12-13 (#744)

---
 src/main/integrations/browser-window-session.ts | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts
index 142cdf45..02e1e0ab 100644
--- a/src/main/integrations/browser-window-session.ts
+++ b/src/main/integrations/browser-window-session.ts
@@ -4,6 +4,19 @@ import { app, BrowserWindow } from 'electron';
 import { ELECTRON_MAJOR_VERSION } from '../electron-normalize';
 import { endSession, endSessionOnExit, startSession } from '../sessions';
 
+function focusedWindow(): boolean {
+  for (const window of BrowserWindow.getAllWindows()) {
+    if (!window.isDestroyed() && window.webContents && !window.webContents.isDestroyed()) {
+      // It's important to test both isVisible and isFocused, since
+      // Electron v12-13 do not report hidden as a loss of focus
+      if (window.isFocused() && window.isVisible()) {
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
 interface Options {
   /**
    * Number of seconds to wait before ending a session after the app loses focus.
@@ -61,9 +74,9 @@ export class BrowserWindowSession implements Integration {
   }
 
   private _windowStateChanged = (): void => {
-    const aWindowIsActive = !!BrowserWindow.getFocusedWindow();
+    const hasFocusedWindow = focusedWindow();
 
-    if (aWindowIsActive) {
+    if (hasFocusedWindow) {
       // We are now active
       if (this._state.name === 'inactive') {
         // If we were inactive, start a new session

From ab8b0580745d58254776e6f087f3b0ff47b61216 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Wed, 13 Sep 2023 00:36:42 +0000
Subject: [PATCH 145/239] release: 4.11.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 2128245e..61e97690 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.10.0",
+  "version": "4.11.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -107,4 +107,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From 1c18341a6f025f8213a814b8d1be6415a9157ce1 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 18 Sep 2023 20:41:12 +0200
Subject: [PATCH 146/239] fix: Don't send minidumps that are likely invalid
 (#748)

---
 .../integrations/sentry-minidump/minidump-loader.ts  | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts
index 93022868..20318b95 100644
--- a/src/main/integrations/sentry-minidump/minidump-loader.ts
+++ b/src/main/integrations/sentry-minidump/minidump-loader.ts
@@ -50,10 +50,18 @@ function createMinidumpLoader(fetchMinidumpsImpl: MinidumpLoader): MinidumpLoade
       // remove it from the file system.
       knownPaths.push(dump.path);
 
+      const stats = await statAsync(dump.path);
+
       // We do not want to upload minidumps that have been generated before a
       // certain threshold. Those old files can be deleted immediately.
-      const stats = await statAsync(dump.path);
-      if (stats.birthtimeMs < oldestMs) {
+      const tooOld = stats.birthtimeMs < oldestMs;
+      const tooSmall = stats.size < 1024;
+
+      if (tooSmall) {
+        logger.log('Minidump too small to be valid', dump.path);
+      }
+
+      if (tooOld || tooSmall) {
         await deleteMinidump(dump);
         knownPaths.splice(knownPaths.indexOf(dump.path), 1);
         return false;

From 92642faf9a4faff6027b53d3326b39aa58786a59 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 19 Sep 2023 16:37:38 +0100
Subject: [PATCH 147/239] test: New Electron versions (#745)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 8a51c0ec..896b7d46 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.23","23.3.13","24.8.2","25.8.0","26.2.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.24","23.3.13","24.8.3","25.8.1","26.2.1"]

From f3a10cd7888f9c2e3c8f32c86e23ac652f44609d Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 28 Sep 2023 21:09:31 +0200
Subject: [PATCH 148/239] chore: Update changelog for release (#754)

---
 CHANGELOG.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5aaab531..7f4e30f8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ## Unreleased
 
+## 4.11.1
+
+fix: Don't send minidumps that are too small to be valid (#748)
+
 ## 4.11.0
 
 - feat: Add optional `BrowserWindowSession` to track sessions as window in foreground (#725)

From f7d1adc2aae47128fad3151977767333c9f162a4 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Thu, 28 Sep 2023 19:10:04 +0000
Subject: [PATCH 149/239] release: 4.11.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 61e97690..e7a36d0b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.11.0",
+  "version": "4.11.1",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From a4278bda7f63d7e132c9d0184ef54aa8b6042652 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 29 Sep 2023 15:03:08 +0200
Subject: [PATCH 150/239] test: New Electron versions (#750)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 896b7d46..013b4af1 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.24","23.3.13","24.8.3","25.8.1","26.2.1"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.25","23.3.13","24.8.5","25.8.4","26.2.4"]

From bb5d05f66365e0d3bb31c4524abf26d73b493c3b Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 29 Sep 2023 15:58:09 +0200
Subject: [PATCH 151/239] fix: Flakey session e2e test on Windows (#757)

---
 .../sessions/abnormal-exit-electron-uploader/src/main.js        | 2 +-
 test/e2e/test-apps/sessions/abnormal-exit/src/main.js           | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
index 9fd8293d..d4596d9a 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
@@ -34,7 +34,7 @@ app.on('ready', () => {
 if (process.env.APP_FIRST_RUN) {
   setTimeout(() => {
     process.exit();
-  }, 2000);
+  }, 4000);
 } else {
   setTimeout(() => {
     app.quit();
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
index ef301ad0..65ada825 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
@@ -27,7 +27,7 @@ app.on('ready', () => {
 if (process.env.APP_FIRST_RUN) {
   setTimeout(() => {
     process.exit();
-  }, 2000);
+  }, 4000);
 } else {
   setTimeout(() => {
     app.quit();

From f701b8323fbe8f779aa17873da7c8a73e35dddce Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 29 Sep 2023 18:22:12 +0200
Subject: [PATCH 152/239] test: Extend more test times (#758)

---
 .../abnormal-exit-electron-uploader/src/main.js      | 12 +++++-------
 .../e2e/test-apps/sessions/abnormal-exit/src/main.js | 12 +++++-------
 .../test-apps/sessions/native-crash-main/src/main.js | 12 +++++-------
 test/e2e/test-apps/sessions/window-bad/src/main.js   |  2 +-
 4 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
index d4596d9a..ee658220 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
@@ -31,12 +31,10 @@ app.on('ready', () => {
 
 // We only exit abnormally on the first run
 // The second run is where the session is uploaded
-if (process.env.APP_FIRST_RUN) {
-  setTimeout(() => {
+setTimeout(() => {
+  if (process.env.APP_FIRST_RUN) {
     process.exit();
-  }, 4000);
-} else {
-  setTimeout(() => {
+  } else {
     app.quit();
-  }, 4000);
-}
+  }
+}, 2000);
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
index 65ada825..3611302d 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
@@ -24,12 +24,10 @@ app.on('ready', () => {
 
 // We only exit abnormally on the first run
 // The second run is where the session is uploaded
-if (process.env.APP_FIRST_RUN) {
-  setTimeout(() => {
+setTimeout(() => {
+  if (process.env.APP_FIRST_RUN) {
     process.exit();
-  }, 4000);
-} else {
-  setTimeout(() => {
+  } else {
     app.quit();
-  }, 4000);
-}
+  }
+}, 2000);
diff --git a/test/e2e/test-apps/sessions/native-crash-main/src/main.js b/test/e2e/test-apps/sessions/native-crash-main/src/main.js
index fd7415dc..3861e739 100644
--- a/test/e2e/test-apps/sessions/native-crash-main/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-main/src/main.js
@@ -24,12 +24,10 @@ app.on('ready', () => {
 
 // We only crash on the first run
 // The second run is where the crash is uploaded
-if (process.env.APP_FIRST_RUN) {
-  setTimeout(() => {
+setTimeout(() => {
+  if (process.env.APP_FIRST_RUN) {
     process.crash();
-  }, 2000);
-} else {
-  setTimeout(() => {
+  } else {
     app.quit();
-  }, 4000);
-}
+  }
+}, 4000);
diff --git a/test/e2e/test-apps/sessions/window-bad/src/main.js b/test/e2e/test-apps/sessions/window-bad/src/main.js
index c542d786..47675838 100644
--- a/test/e2e/test-apps/sessions/window-bad/src/main.js
+++ b/test/e2e/test-apps/sessions/window-bad/src/main.js
@@ -23,5 +23,5 @@ app.on('ready', () => {
 
   setTimeout(() => {
     app.quit();
-  }, 2000);
+  }, 4000);
 });

From 82ae79fc20dc121182998363b4ed2b255a9f471a Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 29 Sep 2023 18:28:52 +0200
Subject: [PATCH 153/239] fix: Deprecate `EventToMain` integration (#759)

---
 src/integrations.ts                        | 1 +
 src/renderer/integrations/event-to-main.ts | 3 +++
 src/renderer/integrations/index.ts         | 1 +
 3 files changed, 5 insertions(+)

diff --git a/src/integrations.ts b/src/integrations.ts
index 6c467d99..764f1363 100644
--- a/src/integrations.ts
+++ b/src/integrations.ts
@@ -31,6 +31,7 @@ export interface Integrations {
   Screenshots: Screenshots;
   // For renderer process
   ScopeToMain: ScopeToMain;
+  // eslint-disable-next-line deprecation/deprecation
   EventToMain: EventToMain;
 }
 
diff --git a/src/renderer/integrations/event-to-main.ts b/src/renderer/integrations/event-to-main.ts
index a319e709..0d8949b8 100644
--- a/src/renderer/integrations/event-to-main.ts
+++ b/src/renderer/integrations/event-to-main.ts
@@ -4,6 +4,8 @@ import { normalize } from '@sentry/utils';
 import { getIPC } from '../ipc';
 
 /**
+ * @deprecated Events are now sent to the main process via a custom transport.
+ *
  * Passes events to the main process.
  */
 export class EventToMain implements Integration {
@@ -14,6 +16,7 @@ export class EventToMain implements Integration {
   public readonly name: string;
 
   public constructor() {
+    // eslint-disable-next-line deprecation/deprecation
     this.name = EventToMain.id;
   }
 
diff --git a/src/renderer/integrations/index.ts b/src/renderer/integrations/index.ts
index 4b5b55f7..d8fe8850 100644
--- a/src/renderer/integrations/index.ts
+++ b/src/renderer/integrations/index.ts
@@ -1,2 +1,3 @@
 export { ScopeToMain } from './scope-to-main';
+// eslint-disable-next-line deprecation/deprecation
 export { EventToMain } from './event-to-main';

From 4397d77cad2f2d2472eab9a0af5689ff8ed1325e Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 29 Sep 2023 19:04:07 +0200
Subject: [PATCH 154/239] CI: Add CI job which can be used to block merging
 (#760)

---
 .github/workflows/build.yml | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f870740c..95388eca 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -84,3 +84,15 @@ jobs:
       - run: yarn install
       - name: Run E2E Tests
         run: yarn e2e
+
+  required_jobs_passed:
+    name: All required jobs passed or were skipped
+    needs: [build, lint, test, e2e]
+    # Always run this, even if a dependent job failed
+    if: always()
+    runs-on: ubuntu-20.04
+    steps:
+      - name: Check for failures
+        if: contains(needs.*.result, 'failure')
+        run: |
+          echo "One of the dependent jobs have failed. You may need to re-run it." && exit 1

From e52864a95ab095480525bbb080dbda46150c10ad Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 2 Oct 2023 16:50:19 +0200
Subject: [PATCH 155/239] feat: Node compatible ESM build (#756)

---
 .../electron-react-boilerplate/package.json   |  4 +-
 package.json                                  | 24 +++---
 rollup.config.js                              | 77 +++++++++++++++++++
 scripts/build-preload.js                      | 45 -----------
 src/main/electron-normalize.ts                | 16 ++--
 src/main/fs.ts                                |  5 +-
 src/main/integrations/preload-injection.ts    | 33 +++++---
 src/preload/index.ts                          |  2 -
 src/preload/legacy.ts                         |  2 -
 tsconfig.build.json                           | 20 ++---
 tsconfig.esm.json                             |  8 --
 tsconfig.json                                 | 12 +--
 tsconfig.preload.json                         |  9 +++
 tsconfig.test.json                            |  9 +++
 yarn.lock                                     | 73 ++++++++++++++++++
 15 files changed, 226 insertions(+), 113 deletions(-)
 create mode 100644 rollup.config.js
 delete mode 100644 scripts/build-preload.js
 delete mode 100644 tsconfig.esm.json
 create mode 100644 tsconfig.preload.json
 create mode 100644 tsconfig.test.json

diff --git a/examples/electron-react-boilerplate/package.json b/examples/electron-react-boilerplate/package.json
index c6d46bee..b94bd1ce 100644
--- a/examples/electron-react-boilerplate/package.json
+++ b/examples/electron-react-boilerplate/package.json
@@ -2,8 +2,8 @@
   "name": "electron-react-boilerplate",
   "scripts": {
     "build": "concurrently \"npm run build:main\" \"npm run build:renderer\"",
-    "build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts",
-    "build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts"
+    "build:main": "cross-env NODE_ENV=production TS_NODE_PROJECT=tsconfig.json TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts",
+    "build:renderer": "cross-env NODE_ENV=production TS_NODE_PROJECT=tsconfig.json TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts"
   },
   "devDependencies": {
     "@pmmmwh/react-refresh-webpack-plugin": "0.5.4",
diff --git a/package.json b/package.json
index e7a36d0b..dbcd87cb 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,10 @@
       "require": "./renderer/index.js",
       "import": "./esm/renderer/index.js"
     },
-    "./preload": "./preload/index.js"
+    "./preload": {
+      "require": "./preload/index.js",
+      "import": "./esm/preload/index.js"
+    }
   },
   "repository": "https://github.com/getsentry/sentry-electron.git",
   "author": "Sentry",
@@ -35,27 +38,21 @@
   },
   "scripts": {
     "prebuild": "yarn clean && node scripts/update-version.js",
-    "build": "run-p build:es6 build:esm build:preload",
-    "build:es6": "tsc -p tsconfig.build.json",
-    "build:esm": "tsc -p tsconfig.esm.json",
-    "build:preload": "node scripts/build-preload.js",
-    "build:watch": "run-p build:watch:es6 build:watch:esm",
-    "build:watch:es6": "tsc -p tsconfig.build.json -w --preserveWatchOutput",
-    "build:watch:esm": "tsc -p tsconfig.esm.json -w --preserveWatchOutput",
+    "build": "rollup --config rollup.config.js",
     "clean": "rimraf coverage esm main preload renderer index.* integrations.* ipc.* sentry-electron*.tgz",
     "prelint": "node scripts/update-version.js",
-    "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json",
-    "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs",
     "lint": "run-s lint:prettier lint:eslint",
     "lint:prettier": "prettier --check \"{src,test}/**/*.ts\"",
     "lint:eslint": "eslint . --cache --format stylish",
     "fix": "run-s fix:eslint fix:prettier",
     "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"",
     "fix:eslint": "eslint . --format stylish --fix",
+    "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json",
+    "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs",
     "pretest": "yarn build",
-    "test": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 120000 ./test/unit/**/*.ts",
+    "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 120000 ./test/unit/**/*.ts",
     "pree2e": "rimraf test/e2e/dist/**/node_modules/@sentry/** test/e2e/dist/**/yarn.lock test/e2e/dist/**/package-lock.json && node scripts/clean-cache.js && yarn build && npm pack",
-    "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
+    "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
     "@sentry/browser": "7.68.0",
@@ -68,6 +65,8 @@
     "tslib": "^2.5.0"
   },
   "devDependencies": {
+    "@rollup/plugin-node-resolve": "^15.2.1",
+    "@rollup/plugin-typescript": "^11.1.4",
     "@sentry-internal/eslint-config-sdk": "7.68.0",
     "@sentry-internal/typescript": "7.68.0",
     "@types/busboy": "^0.2.3",
@@ -97,6 +96,7 @@
     "npm-run-all": "^4.1.5",
     "prettier": "^2.8.4",
     "rimraf": "^3.0.2",
+    "rollup": "^3.29.4",
     "tmp": "^0.2.1",
     "ts-node": "^10.9.1",
     "typescript": "^4.9.5",
diff --git a/rollup.config.js b/rollup.config.js
new file mode 100644
index 00000000..89734665
--- /dev/null
+++ b/rollup.config.js
@@ -0,0 +1,77 @@
+const { builtinModules } = require('module');
+const { resolve } = require('path');
+
+const typescript = require('@rollup/plugin-typescript');
+
+const dependencies = Object.keys(require(resolve(process.cwd(), 'package.json')).dependencies || {});
+const external = [...builtinModules, 'electron', ...dependencies];
+
+const outputOptions = {
+  sourcemap: true,
+  strict: false,
+  freeze: false,
+  externalLiveBindings: false,
+  generatedCode: {
+    preset: 'es2015',
+    symbols: false,
+  },
+};
+
+// a simple plugin that adds a package.json file with type: module
+const modulePackageJson = {
+  name: 'package-json-module-type',
+  generateBundle(_, __) {
+    this.emitFile({
+      type: 'asset',
+      fileName: 'package.json',
+      source: '{"type": "module"}',
+    });
+  },
+};
+
+function transpileFiles(format, input, outDir) {
+  return {
+    input,
+    output: {
+      ...outputOptions,
+      format,
+      dir: outDir,
+      preserveModules: true,
+    },
+    treeshake: { moduleSideEffects: false },
+    plugins: [
+      typescript({
+        outDir,
+        tsconfig: './tsconfig.build.json',
+      }),
+      format === 'esm' ? modulePackageJson : {},
+    ],
+    external,
+  };
+}
+
+function bundlePreload(format, input, output) {
+  return {
+    input,
+    output: {
+      ...outputOptions,
+      format,
+      file: output,
+    },
+    plugins: [
+      typescript({
+        tsconfig: './tsconfig.preload.json',
+      }),
+    ],
+    external,
+  };
+}
+
+module.exports = [
+  transpileFiles('cjs', ['src/index.ts', 'src/main/index.ts', 'src/renderer/index.ts'], '.'),
+  transpileFiles('esm', ['src/index.ts', 'src/main/index.ts', 'src/renderer/index.ts'], './esm'),
+  bundlePreload('cjs', 'src/preload/index.ts', './preload/index.js'),
+  bundlePreload('cjs', 'src/preload/legacy.ts', './preload/legacy.js'),
+  bundlePreload('esm', 'src/preload/index.ts', './esm/preload/index.js'),
+  bundlePreload('esm', 'src/preload/legacy.ts', './esm/preload/legacy.js'),
+];
diff --git a/scripts/build-preload.js b/scripts/build-preload.js
deleted file mode 100644
index e13b0b34..00000000
--- a/scripts/build-preload.js
+++ /dev/null
@@ -1,45 +0,0 @@
-const { readFileSync, writeFileSync, mkdirSync } = require('fs');
-const { join, dirname } = require('path');
-const ts = require('typescript');
-
-function readFile(path) {
-  return readFileSync(join(__dirname, path), { encoding: 'utf8' });
-}
-
-function ensureOnlyRequiresElectron(code) {
-  const result = code.match(/require\("(\S+?)"\)/g);
-  if (result) {
-    if (!result.every((r) => r === 'require("electron")')) {
-      throw new Error('Bundling error. The preload script should only require electron!');
-    }
-  }
-}
-
-const ipcModule = readFile('../src/common/ipc.ts').replace(/export/g, '');
-
-function transpileFile(input, output, esm) {
-  const module = esm ? ts.ModuleKind.ES2020 : ts.ModuleKind.CommonJS;
-
-  // Because we're not using a proper bundler, we need to replace the import for ipc with inlined code
-  const file = readFile(input).replace("import { IPCChannel } from '../common/ipc'", ipcModule);
-  const code = ts.transpile(file, { removeComments: true, module });
-
-  if (!esm) {
-    ensureOnlyRequiresElectron(code);
-  }
-
-  const outPath = join(__dirname, output);
-  try {
-    mkdirSync(dirname(outPath), { recursive: true });
-  } catch (_) {}
-  writeFileSync(outPath, code);
-}
-
-// Output to ./preload so '@sentry/electron/preload' can be resolved
-transpileFile('../src/preload/index.ts', '../preload/index.js', false);
-transpileFile('../src/preload/legacy.ts', '../preload/legacy.js', false);
-
-// The ESM output will never get used, but they need to be there for when webpack tries to
-// find them due to `require.resolve('../../preload/index.js')` from esm/main code
-transpileFile('../src/preload/index.ts', '../esm/preload/index.js', true);
-transpileFile('../src/preload/legacy.ts', '../esm/preload/legacy.js', true);
diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts
index e4f698c7..8917e1be 100644
--- a/src/main/electron-normalize.ts
+++ b/src/main/electron-normalize.ts
@@ -20,13 +20,17 @@ export const isPackaged = (() => {
 
 /** A promise that is resolved when the app is ready */
 export const whenAppReady: Promise<void> = (() => {
-  return app.isReady()
-    ? Promise.resolve()
-    : new Promise<void>((resolve) => {
-        app.once('ready', () => {
-          resolve();
+  if (app) {
+    return app.isReady()
+      ? Promise.resolve()
+      : new Promise<void>((resolve) => {
+          app.once('ready', () => {
+            resolve();
+          });
         });
-      });
+  } else {
+    return Promise.resolve();
+  }
 })();
 
 /**
diff --git a/src/main/fs.ts b/src/main/fs.ts
index d174effc..29d01507 100644
--- a/src/main/fs.ts
+++ b/src/main/fs.ts
@@ -1,9 +1,9 @@
 import { app } from 'electron';
-import { mkdir, readdir, readFile, rename, stat, statSync, unlink, writeFile } from 'fs';
+import { mkdir, readdir, readFile, stat, statSync, unlink, writeFile } from 'fs';
 import { dirname, join, resolve } from 'path';
 import { promisify } from 'util';
 
-export const sentryCachePath = join(app.getPath('userData'), 'sentry');
+export const sentryCachePath = join(app ? app.getPath('userData') : '', 'sentry');
 
 export const writeFileAsync = promisify(writeFile);
 export const readFileAsync = promisify(readFile);
@@ -11,7 +11,6 @@ export const mkdirAsync = promisify(mkdir);
 export const statAsync = promisify(stat);
 export const unlinkAsync = promisify(unlink);
 export const readDirAsync = promisify(readdir);
-export const renameAsync = promisify(rename);
 
 // mkdir with recursive was only added in Node 10+
 
diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts
index 99460f55..7fc04a9e 100644
--- a/src/main/integrations/preload-injection.ts
+++ b/src/main/integrations/preload-injection.ts
@@ -4,12 +4,34 @@ import { Integration } from '@sentry/types';
 import { logger } from '@sentry/utils';
 import { app } from 'electron';
 import { existsSync } from 'fs';
-import { isAbsolute } from 'path';
+import { isAbsolute, resolve } from 'path';
+import { fileURLToPath } from 'url';
 
 import { IPCMode } from '../../common';
 import { rendererRequiresCrashReporterStart } from '../electron-normalize';
 import { ElectronMainOptionsInternal } from '../sdk';
 
+// After bundling with webpack, require.resolve can return number so we include that in the types
+// to ensure we check for that!
+function getPreloadPath(): string | number | undefined {
+  try {
+    return rendererRequiresCrashReporterStart()
+      ? require.resolve('../../preload/legacy.js')
+      : require.resolve('../../preload/index.js');
+  } catch (_) {
+    try {
+      // This could be ESM
+      const currentDir = fileURLToPath(import.meta.url);
+      // Use the CJS preload
+      return resolve(currentDir, '..', '..', '..', '..', 'preload', 'index.js');
+    } catch (_) {
+      //
+    }
+  }
+
+  return undefined;
+}
+
 /**
  * Injects the preload script into the provided sessions.
  *
@@ -45,14 +67,7 @@ export class PreloadInjection implements Integration {
    * Attempts to add the preload script the the provided sessions
    */
   private _addPreloadToSessions(options: ElectronMainOptionsInternal): void {
-    let path = undefined;
-    try {
-      path = rendererRequiresCrashReporterStart()
-        ? require.resolve('../../preload/legacy.js')
-        : require.resolve('../../preload/index.js');
-    } catch (_) {
-      //
-    }
+    const path = getPreloadPath();
 
     if (path && typeof path === 'string' && isAbsolute(path) && existsSync(path)) {
       for (const sesh of options.getSessions()) {
diff --git a/src/preload/index.ts b/src/preload/index.ts
index e7cb8617..99391f04 100644
--- a/src/preload/index.ts
+++ b/src/preload/index.ts
@@ -1,7 +1,5 @@
 /**
  * This preload script may be used with sandbox mode enabled which means regular require is not available.
- *
- * npm script `build:preload` calls `node ./scripts/build-preload.js` which inlines ipc and transpiles to JavaScript
  */
 
 import { contextBridge, ipcRenderer } from 'electron';
diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts
index 38ea7b31..e9d367b0 100644
--- a/src/preload/legacy.ts
+++ b/src/preload/legacy.ts
@@ -1,7 +1,5 @@
 /**
  * This preload script may be used with sandbox mode enabled which means regular require is not available.
- *
- * npm script `build:preload` calls `node ./scripts/build-preload.js` which inlines ipc and transpiles to JavaScript
  */
 
 import { contextBridge, crashReporter, ipcRenderer } from 'electron';
diff --git a/tsconfig.build.json b/tsconfig.build.json
index e5d3482a..71c012f2 100644
--- a/tsconfig.build.json
+++ b/tsconfig.build.json
@@ -1,23 +1,15 @@
 {
   "extends": "./node_modules/@sentry-internal/typescript/tsconfig.json",
-  "include": [
-    "src/**/*.ts"
-  ],
-  "exclude": [
-    "node_modules",
-    "src/preload/*.ts"
-  ],
+  "include": ["src/**/*.ts"],
+  "exclude": ["node_modules", "src/preload/**/*.ts"],
   "compilerOptions": {
     "skipLibCheck": true,
     "baseUrl": ".",
-    "lib": [
-      "es7",
-      "dom"
-    ],
-    "module": "commonjs",
+    "lib": ["ES7", "DOM"],
+    "module": "ESNext",
     "outDir": ".",
     "rootDir": "src",
-    "target": "es6",
-    "esModuleInterop": true,
+    "target": "ES6",
+    "esModuleInterop": true
   }
 }
diff --git a/tsconfig.esm.json b/tsconfig.esm.json
deleted file mode 100644
index b4713d16..00000000
--- a/tsconfig.esm.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "extends": "./tsconfig.build.json",
-  "compilerOptions": {
-    "outDir": "esm",
-    "module": "es6",
-    "esModuleInterop": true,
-  }
-}
diff --git a/tsconfig.json b/tsconfig.json
index 4c6c154d..fe78169b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,13 +1,5 @@
 {
   "extends": "./tsconfig.build.json",
-  "include": [
-    "src/**/*.ts",
-    "test/**/*.ts"
-  ],
-  "exclude": [
-    "dist"
-  ],
-  "compilerOptions": {
-    "rootDir": ".",
-  }
+  "include": ["src/**/*.ts", "test/**/*.ts"],
+  "exclude": ["node_modules"]
 }
diff --git a/tsconfig.preload.json b/tsconfig.preload.json
new file mode 100644
index 00000000..067a5bbd
--- /dev/null
+++ b/tsconfig.preload.json
@@ -0,0 +1,9 @@
+{
+  "extends": "./tsconfig.build.json",
+  "include": ["src/preload/**/*.ts"],
+  "exclude": ["node_modules"],
+  "compilerOptions": {
+    "declaration": false,
+    "declarationMap": false
+  }
+}
diff --git a/tsconfig.test.json b/tsconfig.test.json
new file mode 100644
index 00000000..b3f843b4
--- /dev/null
+++ b/tsconfig.test.json
@@ -0,0 +1,9 @@
+{
+  "extends": "./tsconfig.build.json",
+  "include": ["src/**/*.ts", "test/**/*.ts"],
+  "exclude": ["node_modules"],
+  "compilerOptions": {
+    "module": "CommonJS",
+    "rootDir": "."
+  }
+}
diff --git a/yarn.lock b/yarn.lock
index f882142a..e5cf4dd9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -135,6 +135,35 @@
     "@pnpm/network.ca-file" "^1.0.1"
     config-chain "^1.1.11"
 
+"@rollup/plugin-node-resolve@^15.2.1":
+  version "15.2.1"
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.1.tgz#a15b14fb7969229e26a30feff2816d39eff503f0"
+  integrity sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w==
+  dependencies:
+    "@rollup/pluginutils" "^5.0.1"
+    "@types/resolve" "1.20.2"
+    deepmerge "^4.2.2"
+    is-builtin-module "^3.2.1"
+    is-module "^1.0.0"
+    resolve "^1.22.1"
+
+"@rollup/plugin-typescript@^11.1.4":
+  version "11.1.4"
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.4.tgz#cecb82180563e143481d979e5191953cbd0ee4c9"
+  integrity sha512-WZRh5LBVLQXdKFICUId5J3eIpmjGURaBqntfg3GSZACgeOAFS+lOSMGTwfzDkELTaZVp/lWdMVNU3UkwCUBg/Q==
+  dependencies:
+    "@rollup/pluginutils" "^5.0.1"
+    resolve "^1.22.1"
+
+"@rollup/pluginutils@^5.0.1":
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba"
+  integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    estree-walker "^2.0.2"
+    picomatch "^2.3.1"
+
 "@sentry-internal/eslint-config-sdk@7.68.0":
   version "7.68.0"
   resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.68.0.tgz#6154af30c5b1125419fb3192c97d96a8ddb98310"
@@ -347,6 +376,11 @@
     "@types/keygrip" "*"
     "@types/node" "*"
 
+"@types/estree@^1.0.0":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.2.tgz#ff02bc3dc8317cd668dfec247b750ba1f1d62453"
+  integrity sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==
+
 "@types/express-serve-static-core@^4.17.33":
   version "4.17.33"
   resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543"
@@ -468,6 +502,11 @@
   resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
   integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
 
+"@types/resolve@1.20.2":
+  version "1.20.2"
+  resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975"
+  integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
+
 "@types/responselike@^1.0.0":
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
@@ -856,6 +895,11 @@ buffer-crc32@~0.2.3:
   resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
   integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
 
+builtin-modules@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
+  integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
+
 busboy@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
@@ -1201,6 +1245,11 @@ deepmerge@4.3.0:
   resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b"
   integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==
 
+deepmerge@^4.2.2:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
 defer-to-connect@^2.0.0, defer-to-connect@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
@@ -1646,6 +1695,11 @@ estraverse@^5.1.0, estraverse@^5.2.0:
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
   integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
 
+estree-walker@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
 esutils@^2.0.2:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@@ -2203,6 +2257,13 @@ is-boolean-object@^1.1.0:
     call-bind "^1.0.2"
     has-tostringtag "^1.0.0"
 
+is-builtin-module@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169"
+  integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==
+  dependencies:
+    builtin-modules "^3.3.0"
+
 is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
   version "1.2.7"
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
@@ -2251,6 +2312,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
   dependencies:
     is-extglob "^2.1.1"
 
+is-module@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+  integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
+
 is-negative-zero@^2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
@@ -3168,6 +3234,13 @@ roarr@^2.15.3:
     semver-compare "^1.0.0"
     sprintf-js "^1.1.2"
 
+rollup@^3.29.4:
+  version "3.29.4"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
+  integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
+  optionalDependencies:
+    fsevents "~2.3.2"
+
 run-parallel@^1.1.9:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"

From a6bf684d079e2db616eec6e6d2c8c06c6613a6f4 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 2 Oct 2023 18:27:11 +0200
Subject: [PATCH 156/239] feat: Identify `webContents` of renderers via custom
 protocol  (#762)

---
 src/common/ipc.ts                             |   6 +-
 src/main/electron-normalize.ts                |   4 +
 src/main/ipc.ts                               |  63 ++++++++++-
 src/preload/index.ts                          |   1 +
 src/preload/legacy.ts                         |   1 +
 src/renderer/ipc.ts                           |  71 +++++++-----
 .../custom-renderer-name-protocol/event.json  | 106 ++++++++++++++++++
 .../package.json                              |   8 ++
 .../custom-renderer-name-protocol/recipe.yml  |   3 +
 .../src/index.html                            |  19 ++++
 .../custom-renderer-name-protocol/src/main.js |  27 +++++
 11 files changed, 273 insertions(+), 36 deletions(-)
 create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/event.json
 create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/package.json
 create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/recipe.yml
 create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/src/index.html
 create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/src/main.js

diff --git a/src/common/ipc.ts b/src/common/ipc.ts
index 0203d5e2..80934a0e 100644
--- a/src/common/ipc.ts
+++ b/src/common/ipc.ts
@@ -2,7 +2,7 @@ export const PROTOCOL_SCHEME = 'sentry-ipc';
 
 export enum IPCChannel {
   /** IPC to check main process is listening */
-  PING = 'sentry-electron.ping',
+  RENDERER_START = 'sentry-electron.renderer-start',
   /** IPC to send a captured event to Sentry. */
   EVENT = 'sentry-electron.event',
   /** IPC to pass scope changes to main process. */
@@ -12,11 +12,14 @@ export enum IPCChannel {
 }
 
 export interface IPCInterface {
+  sendRendererStart: () => void;
   sendScope: (scope: string) => void;
   sendEvent: (event: string) => void;
   sendEnvelope: (evn: Uint8Array | string) => void;
 }
 
+export const RENDERER_ID_HEADER = 'sentry-electron-renderer-id';
+
 /**
  * We store the IPC interface on window so it's the same for both regular and isolated contexts
  */
@@ -24,5 +27,6 @@ declare global {
   interface Window {
     __SENTRY_IPC__?: IPCInterface;
     __SENTRY__RENDERER_INIT__?: boolean;
+    __SENTRY_RENDERER_ID__?: string;
   }
 }
diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts
index 8917e1be..96866665 100644
--- a/src/main/electron-normalize.ts
+++ b/src/main/electron-normalize.ts
@@ -2,6 +2,7 @@ import { parseSemver } from '@sentry/utils';
 import { app, BrowserWindow, crashReporter, NativeImage, WebContents } from 'electron';
 import { basename } from 'path';
 
+import { RENDERER_ID_HEADER } from '../common/ipc';
 import { Optional } from '../common/types';
 
 const parsed = parseSemver(process.versions.electron);
@@ -219,6 +220,7 @@ function supportsProtocolHandle(): boolean {
 }
 
 interface InternalRequest {
+  windowId?: string;
   url: string;
   body?: Buffer;
 }
@@ -236,6 +238,7 @@ export function registerProtocol(
   if (supportsProtocolHandle()) {
     protocol.handle(scheme, async (request) => {
       callback({
+        windowId: request.headers.get(RENDERER_ID_HEADER) || undefined,
         url: request.url,
         body: Buffer.from(await request.arrayBuffer()),
       });
@@ -246,6 +249,7 @@ export function registerProtocol(
     // eslint-disable-next-line deprecation/deprecation
     protocol.registerStringProtocol(scheme, (request, complete) => {
       callback({
+        windowId: request.headers[RENDERER_ID_HEADER],
         url: request.url,
         body: request.uploadData?.[0]?.bytes,
       });
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index b80f9adb..cc8abda1 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -1,13 +1,46 @@
 import { captureEvent, configureScope, getCurrentHub, Scope } from '@sentry/core';
 import { Attachment, AttachmentItem, Envelope, Event, EventItem } from '@sentry/types';
 import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils';
-import { app, ipcMain, protocol, WebContents } from 'electron';
+import { app, ipcMain, protocol, WebContents, webContents } from 'electron';
 import { TextDecoder, TextEncoder } from 'util';
 
 import { IPCChannel, IPCMode, mergeEvents, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME } from '../common';
 import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize';
 import { ElectronMainOptionsInternal } from './sdk';
 
+let KNOWN_RENDERERS: Set<number> | undefined;
+let WINDOW_ID_TO_WEB_CONTENTS: Map<string, number> | undefined;
+
+async function newProtocolRenderer(): Promise<void> {
+  KNOWN_RENDERERS = KNOWN_RENDERERS || new Set();
+  WINDOW_ID_TO_WEB_CONTENTS = WINDOW_ID_TO_WEB_CONTENTS || new Map();
+
+  for (const wc of webContents.getAllWebContents()) {
+    const wcId = wc.id;
+    if (KNOWN_RENDERERS.has(wcId)) {
+      continue;
+    }
+
+    if (!wc.isDestroyed()) {
+      try {
+        const windowId: string | undefined = await wc.executeJavaScript('window.__SENTRY_RENDERER_ID__');
+
+        if (windowId) {
+          KNOWN_RENDERERS.add(wcId);
+          WINDOW_ID_TO_WEB_CONTENTS.set(windowId, wcId);
+
+          wc.once('destroyed', () => {
+            KNOWN_RENDERERS?.delete(wcId);
+            WINDOW_ID_TO_WEB_CONTENTS?.delete(windowId);
+          });
+        }
+      } catch (_) {
+        // ignore
+      }
+    }
+  }
+}
+
 function captureEventFromRenderer(
   options: ElectronMainOptionsInternal,
   event: Event,
@@ -139,14 +172,20 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
     .then(() => {
       for (const sesh of options.getSessions()) {
         registerProtocol(sesh.protocol, PROTOCOL_SCHEME, (request) => {
-          const data = request.body;
+          const getWebContents = (): WebContents | undefined => {
+            const webContentsId = request.windowId ? WINDOW_ID_TO_WEB_CONTENTS?.get(request.windowId) : undefined;
+            return webContentsId ? webContents.fromId(webContentsId) : undefined;
+          };
 
-          if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) {
-            handleEvent(options, data.toString());
+          const data = request.body;
+          if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.RENDERER_START}`)) {
+            void newProtocolRenderer();
+          } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) {
+            handleEvent(options, data.toString(), getWebContents());
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}`) && data) {
             handleScope(options, data.toString());
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) {
-            handleEnvelope(options, data);
+            handleEnvelope(options, data, getWebContents());
           }
         });
       }
@@ -158,6 +197,20 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
  * Hooks IPC for communication with the renderer processes
  */
 function configureClassic(options: ElectronMainOptionsInternal): void {
+  ipcMain.on(IPCChannel.RENDERER_START, ({ sender }) => {
+    const id = sender.id;
+
+    // In older Electron, sender can be destroyed before this callback is called
+    if (!sender.isDestroyed()) {
+      // Keep track of renderers that are using IPC
+      KNOWN_RENDERERS = KNOWN_RENDERERS || new Set();
+      KNOWN_RENDERERS.add(id);
+
+      sender.once('destroyed', () => {
+        KNOWN_RENDERERS?.delete(id);
+      });
+    }
+  });
   ipcMain.on(IPCChannel.EVENT, ({ sender }, jsonEvent: string) => handleEvent(options, jsonEvent, sender));
   ipcMain.on(IPCChannel.SCOPE, (_, jsonScope: string) => handleScope(options, jsonScope));
   ipcMain.on(IPCChannel.ENVELOPE, ({ sender }, env: Uint8Array | string) => handleEnvelope(options, env, sender));
diff --git a/src/preload/index.ts b/src/preload/index.ts
index 99391f04..87c80cb7 100644
--- a/src/preload/index.ts
+++ b/src/preload/index.ts
@@ -12,6 +12,7 @@ if (window.__SENTRY_IPC__) {
   console.log('Sentry Electron preload has already been run');
 } else {
   const ipcObject = {
+    sendRendererStart: () => ipcRenderer.send(IPCChannel.RENDERER_START),
     sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson),
     sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson),
     sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope),
diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts
index e9d367b0..4fa233b7 100644
--- a/src/preload/legacy.ts
+++ b/src/preload/legacy.ts
@@ -23,6 +23,7 @@ if (window.__SENTRY_IPC__) {
   });
 
   const ipcObject = {
+    sendRendererStart: () => ipcRenderer.send(IPCChannel.RENDERER_START),
     sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson),
     sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson),
     sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope),
diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts
index 1de7d225..f018a8dd 100644
--- a/src/renderer/ipc.ts
+++ b/src/renderer/ipc.ts
@@ -1,44 +1,54 @@
 /* eslint-disable no-restricted-globals */
 /* eslint-disable no-console */
-import { logger } from '@sentry/utils';
+import { logger, uuid4 } from '@sentry/utils';
 
-import { IPCChannel, IPCInterface, PROTOCOL_SCHEME } from '../common';
+import { IPCChannel, IPCInterface, PROTOCOL_SCHEME, RENDERER_ID_HEADER } from '../common/ipc';
+
+function buildUrl(channel: IPCChannel): string {
+  // We include sentry_key in the URL so these don't end up in fetch breadcrumbs
+  // https://github.com/getsentry/sentry-javascript/blob/a3f70d8869121183bec037571a3ee78efaf26b0b/packages/browser/src/integrations/breadcrumbs.ts#L240
+  return `${PROTOCOL_SCHEME}://${channel}/sentry_key`;
+}
 
 /** Gets the available IPC implementation */
 function getImplementation(): IPCInterface {
   // Favour IPC if it's been exposed by a preload script
   if (window.__SENTRY_IPC__) {
     return window.__SENTRY_IPC__;
-  }
+  } else {
+    logger.log('IPC was not configured in preload script, falling back to custom protocol and fetch');
 
-  logger.log('IPC was not configured in preload script, falling back to custom protocol and fetch');
+    // A unique ID used to identify this renderer and is send in the headers of every request
+    // Because it added as a global, this can be fetched from the main process via executeJavaScript
+    const id = (window.__SENTRY_RENDERER_ID__ = uuid4());
+    const headers: Record<string, string> = { [RENDERER_ID_HEADER]: id };
 
-  fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}/sentry_key`, { method: 'POST', body: '' }).catch(() =>
-    console.error(`Sentry SDK failed to establish connection with the Electron main process.
- - Ensure you have initialized the SDK in the main process
- - If your renderers use custom sessions, be sure to set 'getSessions' in the main process options
- - If you are bundling your main process code and using Electron < v5, you'll need to manually configure a preload script`),
-  );
-
-  // We include sentry_key in the URL so these dont end up in fetch breadcrumbs
-  // https://github.com/getsentry/sentry-javascript/blob/a3f70d8869121183bec037571a3ee78efaf26b0b/packages/browser/src/integrations/breadcrumbs.ts#L240
-  return {
-    sendScope: (body) => {
-      fetch(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}/sentry_key`, { method: 'POST', body }).catch(() => {
-        // ignore
-      });
-    },
-    sendEvent: (body) => {
-      fetch(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}/sentry_key`, { method: 'POST', body }).catch(() => {
-        // ignore
-      });
-    },
-    sendEnvelope: (body) => {
-      fetch(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}/sentry_key`, { method: 'POST', body }).catch(() => {
-        // ignore
-      });
-    },
-  };
+    return {
+      sendRendererStart: () => {
+        fetch(buildUrl(IPCChannel.RENDERER_START), { method: 'POST', body: '', headers }).catch(() => {
+          console.error(`Sentry SDK failed to establish connection with the Electron main process.
+  - Ensure you have initialized the SDK in the main process
+  - If your renderers use custom sessions, be sure to set 'getSessions' in the main process options
+  - If you are bundling your main process code and using Electron < v5, you'll need to manually configure a preload script`);
+        });
+      },
+      sendScope: (body: string) => {
+        fetch(buildUrl(IPCChannel.SCOPE), { method: 'POST', body, headers }).catch(() => {
+          // ignore
+        });
+      },
+      sendEvent: (body: string) => {
+        fetch(buildUrl(IPCChannel.EVENT), { method: 'POST', body, headers }).catch(() => {
+          // ignore
+        });
+      },
+      sendEnvelope: (body: string | Uint8Array) => {
+        fetch(buildUrl(IPCChannel.ENVELOPE), { method: 'POST', body, headers }).catch(() => {
+          // ignore
+        });
+      },
+    };
+  }
 }
 
 let cachedInterface: IPCInterface | undefined;
@@ -52,6 +62,7 @@ let cachedInterface: IPCInterface | undefined;
 export function getIPC(): IPCInterface {
   if (!cachedInterface) {
     cachedInterface = getImplementation();
+    cachedInterface.sendRendererStart();
   }
 
   return cachedInterface;
diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/event.json b/test/e2e/test-apps/other/custom-renderer-name-protocol/event.json
new file mode 100644
index 00000000..95dbe935
--- /dev/null
+++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/event.json
@@ -0,0 +1,106 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "custom-renderer-name-protocol",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution":"{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "release": "custom-renderer-name-protocol@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "exception": {
+      "values": [
+        {
+          "type": "Error",
+          "value": "Some renderer error",
+          "stacktrace": {
+            "frames": [
+              {
+                "colno": 0,
+                "filename": "app:///src/index.html",
+                "function": "{{function}}",
+                "in_app": true,
+                "lineno": 0
+              }
+            ]
+          },
+          "mechanism": {
+            "handled": false,
+            "type": "instrument"
+          }
+        }
+      ]
+    },
+    "level": "error",
+    "event_id": "{{id}}",
+    "platform": "javascript",
+    "timestamp": 0,
+    "breadcrumbs": [
+      {
+        "timestamp": 0,
+        "category": "electron",
+        "message": "SomeWindow.dom-ready",
+        "type": "ui"
+      }
+    ],
+    "request": {
+      "url": "app:///src/index.html"
+    },
+    "tags": {
+      "event.environment": "javascript",
+      "event.origin": "electron",
+      "event.process": "SomeWindow",
+      "event_type": "javascript"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/package.json b/test/e2e/test-apps/other/custom-renderer-name-protocol/package.json
new file mode 100644
index 00000000..d11ae966
--- /dev/null
+++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "custom-renderer-name-protocol",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/recipe.yml b/test/e2e/test-apps/other/custom-renderer-name-protocol/recipe.yml
new file mode 100644
index 00000000..1cdc0b03
--- /dev/null
+++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/recipe.yml
@@ -0,0 +1,3 @@
+description: Custom Renderer Name via Protocol
+command: yarn
+condition: version.major >= 5
diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/src/index.html b/test/e2e/test-apps/other/custom-renderer-name-protocol/src/index.html
new file mode 100644
index 00000000..dd1d6fc5
--- /dev/null
+++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/src/index.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+
+      init({
+        debug: true,
+      });
+
+      setTimeout(() => {
+        throw new Error('Some renderer error');
+      }, 500);
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/src/main.js b/test/e2e/test-apps/other/custom-renderer-name-protocol/src/main.js
new file mode 100644
index 00000000..27cb3111
--- /dev/null
+++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/src/main.js
@@ -0,0 +1,27 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init, IPCMode } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  ipcMode: IPCMode.Protocol,
+  onFatalError: () => {},
+  getRendererName(_) {
+    return 'SomeWindow';
+  },
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+});

From 7cf7b47f8bc145f8c3b54b6f03eef6786c551f2b Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 2 Oct 2023 18:57:38 +0200
Subject: [PATCH 157/239] fix: Re-work Sentry minidump loader (#761)

---
 package.json                                  |   2 +-
 .../integrations/sentry-minidump/index.ts     | 110 ++++-------
 .../sentry-minidump/minidump-loader.ts        | 176 ++++++++++--------
 test/e2e/context.ts                           |   2 +-
 .../other/main-process-module/event.json      |  39 +---
 .../other/main-process-module/src/main.js     |   2 +-
 .../src/main.js                               |   2 +-
 .../sessions/abnormal-exit/src/main.js        |   2 +-
 .../src/main.js                               |   2 +-
 .../src/main.js                               |   2 +-
 .../native-crash-renderer/session-next.json   |  17 ++
 .../native-crash-renderer/src/main.js         |   2 +-
 test/unit/minidump-loader.test.ts             | 151 +++++++++++++++
 13 files changed, 314 insertions(+), 195 deletions(-)
 create mode 100644 test/e2e/test-apps/sessions/native-crash-renderer/session-next.json
 create mode 100644 test/unit/minidump-loader.test.ts

diff --git a/package.json b/package.json
index dbcd87cb..2b8f8619 100644
--- a/package.json
+++ b/package.json
@@ -50,7 +50,7 @@
     "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json",
     "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs",
     "pretest": "yarn build",
-    "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 120000 ./test/unit/**/*.ts",
+    "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 12000 ./test/unit/**/*.ts",
     "pree2e": "rimraf test/e2e/dist/**/node_modules/@sentry/** test/e2e/dist/**/yarn.lock test/e2e/dist/**/package-lock.json && node scripts/clean-cache.js && yarn build && npm pack",
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index efe1723b..a285460b 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -1,7 +1,7 @@
 import { captureEvent, getCurrentHub, Scope } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
 import { Event, Integration } from '@sentry/types';
-import { basename, logger, SentryError } from '@sentry/utils';
+import { logger, SentryError } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
 import { mergeEvents } from '../../../common';
@@ -12,7 +12,7 @@ import { getRendererProperties, trackRendererProperties } from '../../renderers'
 import { ElectronMainOptions } from '../../sdk';
 import { checkPreviousSession, sessionCrashed } from '../../sessions';
 import { BufferedWriteStore } from '../../store';
-import { deleteMinidump, getMinidumpLoader, MinidumpLoader } from './minidump-loader';
+import { getMinidumpLoader, MinidumpLoader } from './minidump-loader';
 
 interface PreviousRun {
   scope: Scope;
@@ -231,79 +231,51 @@ export class SentryMinidump implements Integration {
     //     about it. Just use the breadcrumbs and context information we have
     //     right now and hope that the delay was not too long.
 
-    let event: Event | null = eventIn;
-
     if (this._minidumpLoader === undefined) {
       throw new SentryError('Invariant violation: Native crashes not enabled');
     }
 
-    try {
-      const minidumps = await this._minidumpLoader();
-
-      if (minidumps.length > 0) {
-        const hub = getCurrentHub();
-        const client = hub.getClient();
-
-        if (!client) {
-          return true;
-        }
-
-        const enabled = client.getOptions().enabled;
-
-        // If the SDK is not enabled, we delete the minidump files so they
-        // don't accumulate and/or get sent later
-        if (enabled === false) {
-          minidumps.forEach(deleteMinidump);
-          return false;
-        }
-
-        // If this is a native main process crash, we need to apply the scope and context from the previous run
-        if (event?.tags?.['event.process'] === 'browser') {
-          const previousRun = await this._scopeLastRun;
-
-          const storedScope = Scope.clone(previousRun?.scope);
-          event = await storedScope.applyToEvent(event);
-
-          if (event && previousRun) {
-            event.release = previousRun.event?.release || event.release;
-            event.environment = previousRun.event?.environment || event.environment;
-            event.contexts = previousRun.event?.contexts || event.contexts;
-          }
-        }
-
-        const hubScope = hub.getScope();
-        event = hubScope && event ? await hubScope.applyToEvent(event) : event;
-
-        if (!event) {
-          return false;
-        }
-
-        for (const minidump of minidumps) {
-          const data = await minidump.load();
-
-          if (data) {
-            captureEvent(event, {
-              attachments: [
-                {
-                  attachmentType: 'event.minidump',
-                  filename: basename(minidump.path),
-                  data,
-                },
-              ],
-            });
-          }
-
-          void deleteMinidump(minidump);
-        }
-
-        // Unset to recover memory
-        this._scopeLastRun = undefined;
-        return true;
+    const hub = getCurrentHub();
+    const client = hub.getClient();
+
+    if (!client) {
+      return true;
+    }
+
+    let event: Event | null = eventIn;
+
+    // If this is a native main process crash, we need to apply the scope and context from the previous run
+    if (event.tags?.['event.process'] === 'browser') {
+      const previousRun = await this._scopeLastRun;
+
+      const storedScope = Scope.clone(previousRun?.scope);
+      event = await storedScope.applyToEvent(event);
+
+      if (event && previousRun) {
+        event.release = previousRun.event?.release || event.release;
+        event.environment = previousRun.event?.environment || event.environment;
+        event.contexts = previousRun.event?.contexts || event.contexts;
       }
-    } catch (_oO) {
-      logger.error('Error while sending native crash.');
     }
 
-    return false;
+    const hubScope = hub.getScope();
+    event = hubScope && event ? await hubScope.applyToEvent(event) : event;
+
+    if (!event) {
+      return false;
+    }
+
+    // If the SDK is not enabled, tell the loader to delete all minidumps
+    const deleteAll = client.getOptions().enabled === false;
+
+    let minidumpSent = false;
+    await this._minidumpLoader(deleteAll, (attachment) => {
+      captureEvent(event as Event, { attachments: [attachment] });
+      minidumpSent = true;
+    });
+
+    // Unset to recover memory
+    this._scopeLastRun = undefined;
+    return minidumpSent;
   }
 }
diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts
index 20318b95..e46b9d80 100644
--- a/src/main/integrations/sentry-minidump/minidump-loader.ts
+++ b/src/main/integrations/sentry-minidump/minidump-loader.ts
@@ -1,73 +1,112 @@
-import { logger } from '@sentry/utils';
+import { Attachment } from '@sentry/types';
+import { basename, logger } from '@sentry/utils';
 import { join } from 'path';
 
+import { Mutex } from '../../../common/mutex';
 import { getCrashesDirectory, usesCrashpad } from '../../electron-normalize';
 import { readDirAsync, readFileAsync, statAsync, unlinkAsync } from '../../fs';
 
 /** Maximum number of days to keep a minidump before deleting it. */
-const MAX_AGE = 30;
-
-export interface MinidumpFile {
-  path: string;
-  load(): Promise<Uint8Array | undefined>;
+const MAX_AGE_DAYS = 30;
+const MS_PER_DAY = 24 * 3_600 * 1_000;
+/** Minimum number of milliseconds a minidump should not be modified for before we assume writing is complete */
+const NOT_MODIFIED_MS = 1_000;
+const MAX_RETRY_MS = 5_000;
+const RETRY_DELAY_MS = 500;
+const MAX_RETRIES = MAX_RETRY_MS / RETRY_DELAY_MS;
+
+const MINIDUMP_HEADER = 'MDMP';
+
+function delay(ms: number): Promise<void> {
+  return new Promise((resolve) => setTimeout(resolve, ms));
 }
 
-export type MinidumpLoader = () => Promise<MinidumpFile[]>;
+/**
+ * A function that loads minidumps
+ * @param deleteAll Whether to just delete all minidumps
+ * @param callback A callback to call with the attachment ready to send
+ */
+export type MinidumpLoader = (deleteAll: boolean, callback: (attachment: Attachment) => void) => Promise<void>;
 
-async function filterAsync<T>(
-  array: T[],
-  predicate: (item: T) => Promise<boolean> | boolean,
-  thisArg?: any,
-): Promise<T[]> {
-  const verdicts = await Promise.all(array.map(predicate, thisArg));
-  return array.filter((_, index) => verdicts[index]);
-}
+/**
+ * Creates a minidump loader
+ * @param getMinidumpPaths A function that returns paths to minidumps
+ * @param preProcessFile A function that pre-processes the minidump file
+ * @returns A function to fetch minidumps
+ */
+export function createMinidumpLoader(
+  getMinidumpPaths: () => Promise<string[]>,
+  preProcessFile: (file: Buffer) => Buffer = (file) => file,
+): MinidumpLoader {
+  // The mutex protects against a whole host of reentrancy issues and race conditions.
+  const mutex = new Mutex();
+
+  return async (deleteAll, callback) => {
+    // any calls to this function will be queued and run exclusively
+    await mutex.runExclusive(async () => {
+      for (const path of await getMinidumpPaths()) {
+        try {
+          if (deleteAll) {
+            continue;
+          }
 
-/** Deletes a minidump */
-export async function deleteMinidump(dump: MinidumpFile): Promise<void> {
-  try {
-    await unlinkAsync(dump.path);
-  } catch (e) {
-    logger.warn('Could not delete', dump.path);
-  }
-}
+          logger.log('Found minidump', path);
 
-function createMinidumpLoader(fetchMinidumpsImpl: MinidumpLoader): MinidumpLoader {
-  const knownPaths: string[] = [];
+          let stats = await statAsync(path);
 
-  return async () => {
-    const minidumps = await fetchMinidumpsImpl();
-    logger.log(`Found ${minidumps.length} minidumps`);
+          const thirtyDaysAgo = new Date().getTime() - MAX_AGE_DAYS * MS_PER_DAY;
 
-    const oldestMs = new Date().getTime() - MAX_AGE * 24 * 3_600 * 1_000;
-    return filterAsync(minidumps, async (dump) => {
-      // Skip files that we have seen before
-      if (knownPaths.indexOf(dump.path) >= 0) {
-        return false;
-      }
+          if (stats.mtimeMs < thirtyDaysAgo) {
+            logger.log(`Ignoring minidump as it is over ${MAX_AGE_DAYS} days old`);
+            continue;
+          }
 
-      // Lock this minidump until we have uploaded it or an error occurs and we
-      // remove it from the file system.
-      knownPaths.push(dump.path);
+          let retries = 0;
 
-      const stats = await statAsync(dump.path);
+          while (retries <= MAX_RETRIES) {
+            const twoSecondsAgo = new Date().getTime() - NOT_MODIFIED_MS;
 
-      // We do not want to upload minidumps that have been generated before a
-      // certain threshold. Those old files can be deleted immediately.
-      const tooOld = stats.birthtimeMs < oldestMs;
-      const tooSmall = stats.size < 1024;
+            if (stats.mtimeMs < twoSecondsAgo) {
+              const file = await readFileAsync(path);
+              const data = preProcessFile(file);
 
-      if (tooSmall) {
-        logger.log('Minidump too small to be valid', dump.path);
-      }
+              if (data.length < 10_000 || data.subarray(0, 4).toString() !== MINIDUMP_HEADER) {
+                logger.warn('Dropping minidump as it appears invalid.');
+                break;
+              }
 
-      if (tooOld || tooSmall) {
-        await deleteMinidump(dump);
-        knownPaths.splice(knownPaths.indexOf(dump.path), 1);
-        return false;
-      }
+              logger.log('Sending minidump');
 
-      return true;
+              callback({
+                attachmentType: 'event.minidump',
+                filename: basename(path),
+                data,
+              });
+
+              break;
+            }
+
+            logger.log(`Waiting. Minidump has been modified in the last ${NOT_MODIFIED_MS} milliseconds.`);
+            retries += 1;
+            await delay(RETRY_DELAY_MS);
+            // update the stats
+            stats = await statAsync(path);
+          }
+
+          if (retries >= MAX_RETRIES) {
+            logger.warn('Timed out waiting for minidump to stop being modified');
+          }
+        } catch (e) {
+          logger.error('Failed to load minidump', e);
+        } finally {
+          // We always attempt to delete the minidump
+          try {
+            await unlinkAsync(path);
+          } catch (e) {
+            logger.warn('Could not delete minidump', path);
+          }
+        }
+      }
     });
   };
 }
@@ -119,24 +158,16 @@ function crashpadMinidumpLoader(): MinidumpLoader {
 
   return createMinidumpLoader(async () => {
     await deleteCrashpadMetadataFile(crashesDirectory).catch((error) => logger.error(error));
-
     const files = await readDirsAsync(dumpDirectories);
-    return files
-      .filter((file) => file.endsWith('.dmp'))
-      .map((path) => {
-        return {
-          path,
-          load: () => readFileAsync(path),
-        };
-      });
+    return files.filter((file) => file.endsWith('.dmp'));
   });
 }
 
 /** Crudely parses the minidump from the Breakpad multipart file */
-function minidumpFromBreakpadMultipart(file: Buffer): Buffer | undefined {
+function minidumpFromBreakpadMultipart(file: Buffer): Buffer {
   const binaryStart = file.lastIndexOf('Content-Type: application/octet-stream');
   if (binaryStart > 0) {
-    const dumpStart = file.indexOf('MDMP', binaryStart);
+    const dumpStart = file.indexOf(MINIDUMP_HEADER, binaryStart);
     const dumpEnd = file.lastIndexOf('----------------------------');
 
     if (dumpStart > 0 && dumpEnd > 0 && dumpEnd > dumpStart) {
@@ -144,7 +175,7 @@ function minidumpFromBreakpadMultipart(file: Buffer): Buffer | undefined {
     }
   }
 
-  return undefined;
+  return file;
 }
 
 function removeBreakpadMetadata(crashesDirectory: string, paths: string[]): void {
@@ -170,24 +201,9 @@ function breakpadMinidumpLoader(): MinidumpLoader {
     // Breakpad stores all minidump files along with a metadata file directly in
     // the crashes directory.
     const files = await readDirAsync(crashesDirectory);
-
     removeBreakpadMetadata(crashesDirectory, files);
-
-    return files
-      .filter((file) => file.endsWith('.dmp'))
-      .map((file) => {
-        const path = join(crashesDirectory, file);
-
-        return {
-          path,
-          load: async () => {
-            const file = await readFileAsync(path);
-            return minidumpFromBreakpadMultipart(file) || file;
-          },
-        };
-      })
-      .filter((m) => !!m);
-  });
+    return files.filter((file) => file.endsWith('.dmp')).map((file) => join(crashesDirectory, file));
+  }, minidumpFromBreakpadMultipart);
 }
 
 /**
diff --git a/test/e2e/context.ts b/test/e2e/context.ts
index 028482d2..80a7ed2c 100644
--- a/test/e2e/context.ts
+++ b/test/e2e/context.ts
@@ -136,7 +136,7 @@ export class TestContext {
   public async waitForTrue(
     method: () => boolean | Promise<boolean>,
     message: () => string = () => 'Timeout',
-    timeout: number = 8_000,
+    timeout: number = 12_000,
   ): Promise<void> {
     if (!this.mainProcess) {
       throw new Error('Invariant violation: Call .start() first');
diff --git a/test/e2e/test-apps/other/main-process-module/event.json b/test/e2e/test-apps/other/main-process-module/event.json
index 805e3cb8..9557d8f7 100644
--- a/test/e2e/test-apps/other/main-process-module/event.json
+++ b/test/e2e/test-apps/other/main-process-module/event.json
@@ -95,44 +95,7 @@
     "event_id": "{{id}}",
     "platform": "node",
     "timestamp": 0,
-    "breadcrumbs": [
-      {
-        "timestamp": 0,
-        "category": "electron",
-        "message": "app.will-finish-launching",
-        "type": "ui"
-      },
-      {
-        "timestamp": 0,
-        "category": "electron",
-        "message": "app.ready",
-        "type": "ui"
-      },
-      {
-        "timestamp": 0,
-        "category": "electron",
-        "message": "app.session-created",
-        "type": "ui"
-      },
-      {
-        "timestamp": 0,
-        "category": "electron",
-        "message": "app.web-contents-created",
-        "type": "ui"
-      },
-      {
-        "timestamp": 0,
-        "category": "electron",
-        "message": "app.browser-window-created",
-        "type": "ui"
-      },
-      {
-        "timestamp": 0,
-        "category": "electron",
-        "message": "renderer.dom-ready",
-        "type": "ui"
-      }
-    ],
+    "breadcrumbs": [],
     "tags": {
       "event.environment": "javascript",
       "event.origin": "electron",
diff --git a/test/e2e/test-apps/other/main-process-module/src/main.js b/test/e2e/test-apps/other/main-process-module/src/main.js
index 5aa1da82..bd094b99 100644
--- a/test/e2e/test-apps/other/main-process-module/src/main.js
+++ b/test/e2e/test-apps/other/main-process-module/src/main.js
@@ -32,5 +32,5 @@ app.on('ready', () => {
 
   setTimeout(() => {
     throw new Error('Some main error');
-  }, 500);
+  }, 2000);
 });
diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
index ee658220..3004ed38 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
@@ -37,4 +37,4 @@ setTimeout(() => {
   } else {
     app.quit();
   }
-}, 2000);
+}, 4000);
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
index 3611302d..ccb41cd2 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
@@ -30,4 +30,4 @@ setTimeout(() => {
   } else {
     app.quit();
   }
-}, 2000);
+}, 4000);
diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
index 0b7294b6..4f168635 100644
--- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
@@ -37,4 +37,4 @@ setTimeout(() => {
   } else {
     app.quit();
   }
-}, 4000);
+}, 6000);
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
index aa89b617..958d8ca5 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
@@ -31,4 +31,4 @@ app.on('ready', () => {
 
 setTimeout(() => {
   app.quit();
-}, 4000);
+}, 6000);
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json b/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json
new file mode 100644
index 00000000..71a106c7
--- /dev/null
+++ b/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json
@@ -0,0 +1,17 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": false,
+    "started": 0,
+    "timestamp": 0,
+    "status": "ok",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "session-native-crash-renderer@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
index 600e177b..529b0d6d 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
@@ -24,4 +24,4 @@ app.on('ready', () => {
 
 setTimeout(() => {
   app.quit();
-}, 4000);
+}, 6000);
diff --git a/test/unit/minidump-loader.test.ts b/test/unit/minidump-loader.test.ts
new file mode 100644
index 00000000..cac2f525
--- /dev/null
+++ b/test/unit/minidump-loader.test.ts
@@ -0,0 +1,151 @@
+import { uuid4 } from '@sentry/utils';
+import { expect } from 'chai';
+import { closeSync, existsSync, openSync, utimesSync, writeFileSync, writeSync } from 'fs';
+import { join } from 'path';
+import * as tmp from 'tmp';
+
+import { createMinidumpLoader } from '../../src/main/integrations/sentry-minidump/minidump-loader';
+
+function dumpFileName(): string {
+  return `${uuid4()}.dmp`;
+}
+
+const VALID_LOOKING_MINIDUMP = Buffer.from(`MDMP${'X'.repeat(12_000)}`);
+const LOOKS_NOTHING_LIKE_A_MINIDUMP = Buffer.from('X'.repeat(12_000));
+const MINIDUMP_HEADER_BUT_TOO_SMALL = Buffer.from('MDMPdflahfalfhalkfnaklsfnalfkn');
+
+describe('createMinidumpLoader', () => {
+  let tempDir: tmp.DirResult;
+  before(() => {
+    tempDir = tmp.dirSync({ unsafeCleanup: true });
+  });
+
+  after(() => {
+    if (tempDir) {
+      tempDir.removeCallback();
+    }
+  });
+
+  it('creates attachment from minidump', (done) => {
+    const name = dumpFileName();
+    const dumpPath = join(tempDir.name, name);
+    writeFileSync(dumpPath, VALID_LOOKING_MINIDUMP);
+
+    const loader = createMinidumpLoader(() => Promise.resolve([dumpPath]));
+
+    void loader(false, (attachment) => {
+      expect(attachment).to.eql({
+        data: VALID_LOOKING_MINIDUMP,
+        filename: name,
+        attachmentType: 'event.minidump',
+      });
+
+      setTimeout(() => {
+        expect(existsSync(dumpPath)).to.be.false;
+        done();
+      }, 1_000);
+    });
+  });
+
+  it("doesn't send invalid minidumps", (done) => {
+    const missingHeaderDump = join(tempDir.name, dumpFileName());
+    writeFileSync(missingHeaderDump, LOOKS_NOTHING_LIKE_A_MINIDUMP);
+    const tooSmallDump = join(tempDir.name, dumpFileName());
+    writeFileSync(tooSmallDump, MINIDUMP_HEADER_BUT_TOO_SMALL);
+
+    const loader = createMinidumpLoader(() => Promise.resolve([missingHeaderDump, tooSmallDump]));
+
+    let passedAttachment = false;
+    void loader(false, () => {
+      passedAttachment = true;
+    });
+
+    setTimeout(() => {
+      expect(passedAttachment).to.be.false;
+      expect(existsSync(missingHeaderDump)).to.be.false;
+      expect(existsSync(tooSmallDump)).to.be.false;
+      done();
+    }, 2_000);
+  });
+
+  it("doesn't send minidumps that are over 30 days old", (done) => {
+    const dumpPath = join(tempDir.name, dumpFileName());
+    writeFileSync(dumpPath, VALID_LOOKING_MINIDUMP);
+    const thirtyOneDaysAgo = new Date(new Date().getTime() - 31 * 24 * 3_600 * 1_000);
+    utimesSync(dumpPath, thirtyOneDaysAgo, thirtyOneDaysAgo);
+
+    const loader = createMinidumpLoader(() => Promise.resolve([dumpPath]));
+
+    let passedAttachment = false;
+    void loader(false, () => {
+      passedAttachment = true;
+    });
+
+    setTimeout(() => {
+      expect(passedAttachment).to.be.false;
+      expect(existsSync(dumpPath)).to.be.false;
+      done();
+    }, 2_000);
+  });
+
+  it('deletes minidumps when sdk is disabled', (done) => {
+    const dumpPath = join(tempDir.name, dumpFileName());
+    writeFileSync(dumpPath, VALID_LOOKING_MINIDUMP);
+
+    const loader = createMinidumpLoader(() => Promise.resolve([dumpPath]));
+
+    let passedAttachment = false;
+    void loader(true, () => {
+      passedAttachment = true;
+    });
+
+    setTimeout(() => {
+      expect(passedAttachment).to.be.false;
+      expect(existsSync(dumpPath)).to.be.false;
+      done();
+    }, 2_000);
+  });
+
+  it('waits for minidump to stop being modified', (done) => {
+    const dumpPath = join(tempDir.name, dumpFileName());
+    const file = openSync(dumpPath, 'w');
+    writeSync(file, VALID_LOOKING_MINIDUMP);
+
+    let count = 0;
+    // Write the file every 500ms
+    const timer = setInterval(() => {
+      count += 500;
+      writeSync(file, 'X');
+    }, 500);
+
+    setTimeout(() => {
+      clearInterval(timer);
+      closeSync(file);
+    }, 4_200);
+
+    const loader = createMinidumpLoader(() => Promise.resolve([dumpPath]));
+
+    void loader(false, (_) => {
+      expect(count).to.be.greaterThanOrEqual(3_000);
+      done();
+    });
+  });
+
+  it('sending continues after loading failures', (done) => {
+    const missingPath = join(tempDir.name, dumpFileName());
+    const name = dumpFileName();
+    const dumpPath = join(tempDir.name, name);
+    writeFileSync(dumpPath, VALID_LOOKING_MINIDUMP);
+
+    const loader = createMinidumpLoader(() => Promise.resolve([missingPath, dumpPath]));
+
+    void loader(false, (attachment) => {
+      expect(attachment.filename).to.eql(name);
+
+      setTimeout(() => {
+        expect(existsSync(dumpPath)).to.be.false;
+        done();
+      }, 1_000);
+    });
+  });
+});

From ed57db8e65227504be822e8efec225bdaf2329a9 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 2 Oct 2023 21:45:29 +0200
Subject: [PATCH 158/239] chore: Changelog for 4.12.0 release (#764)

Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
---
 CHANGELOG.md | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7f4e30f8..efe9a5f5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 
 ## Unreleased
 
+## 4.12.0
+
+- feat: Identify `webContents` of renderers via custom protocol (#762)
+- fix: Re-work Sentry minidump loader (#761)
+- feat: Node compatible ESM build for main process (#756)
+
+**Note:** Node ESM support is in beta until Electron v28 has a beta release and can be tested with the full test suite.
+
 ## 4.11.1
 
 fix: Don't send minidumps that are too small to be valid (#748)

From d840e72ebe89016e2495b1f70bd790aa1bdb0b39 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Mon, 2 Oct 2023 19:46:30 +0000
Subject: [PATCH 159/239] release: 4.12.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 2b8f8619..867a186b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.11.1",
+  "version": "4.12.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From e9942948b5d3bb78b537a02e2abc16952b455532 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 3 Oct 2023 12:29:39 +0200
Subject: [PATCH 160/239] test: New Sentry SDK version (#746)

---
 package.json        |  16 +++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 134 ++++++++++++++++++++++----------------------
 3 files changed, 76 insertions(+), 76 deletions(-)

diff --git a/package.json b/package.json
index 2b8f8619..1ccdc357 100644
--- a/package.json
+++ b/package.json
@@ -55,11 +55,11 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.68.0",
-    "@sentry/core": "7.68.0",
-    "@sentry/node": "7.68.0",
-    "@sentry/types": "7.68.0",
-    "@sentry/utils": "7.68.0",
+    "@sentry/browser": "7.73.0",
+    "@sentry/core": "7.73.0",
+    "@sentry/node": "7.73.0",
+    "@sentry/types": "7.73.0",
+    "@sentry/utils": "7.73.0",
     "deepmerge": "4.3.0",
     "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
@@ -67,8 +67,8 @@
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.68.0",
-    "@sentry-internal/typescript": "7.68.0",
+    "@sentry-internal/eslint-config-sdk": "7.73.0",
+    "@sentry-internal/typescript": "7.73.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -107,4 +107,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index e576f03b..bf062ada 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_68_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_73_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index e5cf4dd9..8d5dfcc6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.68.0.tgz#6154af30c5b1125419fb3192c97d96a8ddb98310"
-  integrity sha512-24TdQxg/sneTbPV3gBr9wE5hjhTGSQ4b6H8f069DwdJ8BUKmPXMWkX7/3NmgfOqieccLrgsxIMfbkvLveeVBTA==
+"@sentry-internal/eslint-config-sdk@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.73.0.tgz#b2c480aebe86b033697492c1232a4db29f5e64e9"
+  integrity sha512-tC+GlHtXs2iwkul34WnCYLzMXakLmVY6/ODnkr+25nNo4TSwSqVON4X/98w2IPTbArzU4dLqDzuTmYgbV7TsHg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.68.0"
-    "@sentry-internal/typescript" "7.68.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.73.0"
+    "@sentry-internal/typescript" "7.73.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,83 +180,83 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.68.0.tgz#41691a39fa10e66869bbe0418121d8051258433f"
-  integrity sha512-XYv33e+9KiB+uEghilBoGlve3UhbrXGGVnnhVppoeAQQek/RxnjHSwwZWo98UqxzYLLW4G9XofUUIxNI2AISCg==
+"@sentry-internal/eslint-plugin-sdk@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.73.0.tgz#80b421924b823fd6fe487b014048362577660a15"
+  integrity sha512-V53mpXiKXQOC3qw8LbAoVfvpDqSDT2L9Zfwctz2+URbny4A8pRMpZ7jOgu2R4ZOu8z7WZYPuCH6P7ZZL8b0iXg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.68.0.tgz#cb83a797baa671702cf43caf2280868850a0ef04"
-  integrity sha512-nNKS/q21+Iqzxs2K7T/l3dZi8Z9s/uxsAazpk2AYhFzx9mFnPj1Xfe3dgbFoygNifE+IrpUuldr6D5HQamTDPQ==
+"@sentry-internal/tracing@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.73.0.tgz#4838f31e41d23a6041ef4520519b80f788bf1cac"
+  integrity sha512-ig3WL/Nqp8nRQ52P205NaypGKNfIl/G+cIqge9xPW6zfRb5kJdM1YParw9GSJ1SPjEZBkBORGAML0on5H2FILw==
   dependencies:
-    "@sentry/core" "7.68.0"
-    "@sentry/types" "7.68.0"
-    "@sentry/utils" "7.68.0"
+    "@sentry/core" "7.73.0"
+    "@sentry/types" "7.73.0"
+    "@sentry/utils" "7.73.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.68.0.tgz#8b38e213b0d6ec98617ab6c9bc42ca529fe93bc4"
-  integrity sha512-9jE/pYmSJndyKZ1y/95rVzwwDN3CGR1Fm30fvgdKdVcf4cIaLQMk50XVCHPhB5D7omXOeChOIwShJq21C1/KfA==
-
-"@sentry/browser@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.68.0.tgz#b94be6385f3b1450e928bacf64479d06c452ff42"
-  integrity sha512-1RIPLzKcBeUeG8CQc4OIRfQ6F1zmGKku1am7P9QTz0bz//Mu7bEjm75DM69LBoUlP/Ab9cQQA3fZFUvrH0j1Tg==
-  dependencies:
-    "@sentry-internal/tracing" "7.68.0"
-    "@sentry/core" "7.68.0"
-    "@sentry/replay" "7.68.0"
-    "@sentry/types" "7.68.0"
-    "@sentry/utils" "7.68.0"
+"@sentry-internal/typescript@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.73.0.tgz#5fc4b1a90a024b95e0033ec025bd76c6bfe850cc"
+  integrity sha512-0QUhxUVmktBCfeGwqqM7zKH+RTaR7wuj+aKhSdxVK9+NJnguRqYJZRwUSVqYCMiWCAzNJBztee4GstHDvcVlhw==
+
+"@sentry/browser@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.73.0.tgz#a8eaeb50cf16ca32f0039a81719c503d7045495f"
+  integrity sha512-e301hUixcJ5+HNKCJwajFF5smF4opXEFSclyWsJuFNufv5J/1C1SDhbwG2JjBt5zzdSoKWJKT1ewR6vpICyoDw==
+  dependencies:
+    "@sentry-internal/tracing" "7.73.0"
+    "@sentry/core" "7.73.0"
+    "@sentry/replay" "7.73.0"
+    "@sentry/types" "7.73.0"
+    "@sentry/utils" "7.73.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.68.0.tgz#323817afea06b1fc22db37620bf74f3f8a46dbcf"
-  integrity sha512-mT3ObBWgvAky/QF3dZy4KBoXbRXbNsD6evn+mYi9UEeIZQ5NpnQYDEp78mapiEjI/TAHZIhTIuaBhj1Jk0qUUA==
+"@sentry/core@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.73.0.tgz#1caeeec44f42c4d58c06cc05dec39e5497b65aa3"
+  integrity sha512-9FEz4Gq848LOgVN2OxJGYuQqxv7cIVw69VlAzWHEm3njt8mjvlTq+7UiFsGRo84+59V2FQuHxzA7vVjl90WfSg==
   dependencies:
-    "@sentry/types" "7.68.0"
-    "@sentry/utils" "7.68.0"
+    "@sentry/types" "7.73.0"
+    "@sentry/utils" "7.73.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.68.0.tgz#da3407ba7455109cf625c9a134a3f74ec5f5ca6b"
-  integrity sha512-gtcHoi6Xu6Iu8MpPgKJA4E0nozqLvYF0fKtt+27T0QBzWioO6lkxSQkKGWMyJGL0AmpLCex0E28fck/rlbt0LA==
+"@sentry/node@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.73.0.tgz#7eecf06689cd8f9d21587ca5cbfdc74543cc8c09"
+  integrity sha512-i50bRfmgkRRx0XXUbg9jGD/RuznDJxJXc4rBILhoJuhl+BjRIaoXA3ayplfJn8JLZxsNh75uJaCq4IUK70SORw==
   dependencies:
-    "@sentry-internal/tracing" "7.68.0"
-    "@sentry/core" "7.68.0"
-    "@sentry/types" "7.68.0"
-    "@sentry/utils" "7.68.0"
-    cookie "^0.4.1"
+    "@sentry-internal/tracing" "7.73.0"
+    "@sentry/core" "7.73.0"
+    "@sentry/types" "7.73.0"
+    "@sentry/utils" "7.73.0"
+    cookie "^0.5.0"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.68.0.tgz#ad6e91586c2c6ac81a42705e846eb74f4d068e76"
-  integrity sha512-be8QT2pxcLOTuX6HBRkK0mCVwM97dU5ZLCeofI+xJEWcRnoJdbx00nFwvBXvvoCizbtf4YIMCGwaT2k5LrVxsQ==
+"@sentry/replay@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.73.0.tgz#4e6c522bac5c12f596ef76afe15ecb3807407669"
+  integrity sha512-a8IC9SowBisLYD2IdLkXzx7gN4iVwHDJhQvLp2B8ARs1PyPjJ7gCxSMHeGrYp94V0gOXtorNYkrxvuX8ayPROA==
   dependencies:
-    "@sentry/core" "7.68.0"
-    "@sentry/types" "7.68.0"
-    "@sentry/utils" "7.68.0"
+    "@sentry/core" "7.73.0"
+    "@sentry/types" "7.73.0"
+    "@sentry/utils" "7.73.0"
 
-"@sentry/types@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.68.0.tgz#6134511106eed90bf033dc2ce76955f61582b48f"
-  integrity sha512-5J2pH1Pjx/029zTm3CNY9MaE8Aui81nG7JCtlMp7uEfQ//9Ja4d4Sliz/kV4ARbkIKUZerSgaRAm3xCy5XOXLg==
+"@sentry/types@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.73.0.tgz#6d811bbe413d319df0a592a672d6d72a94a8e716"
+  integrity sha512-/v8++bly8jW7r4cP2wswYiiVpn7eLLcqwnfPUMeCQze4zj3F3nTRIKc9BGHzU0V+fhHa3RwRC2ksqTGq1oJMDg==
 
-"@sentry/utils@7.68.0":
-  version "7.68.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.68.0.tgz#e9fd33f4e856cf6ef3843ae11af3c836d88cbb88"
-  integrity sha512-NecnQegvKARyeFmBx7mYmbI17mTvjARWs1nfzY5jhPyNc3Zk4M3bQsgIdnJ1t+jo93UYudlNND7hxhDzjcBAVg==
+"@sentry/utils@7.73.0":
+  version "7.73.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.73.0.tgz#530cf023f7c395aa7708cd3824e5a45948449c10"
+  integrity sha512-h3ZK/qpf4k76FhJV9uiSbvMz3V/0Ovy94C+5/9UgPMVCJXFmVsdw8n/dwANJ7LupVPfYP23xFGgebDMFlK1/2w==
   dependencies:
-    "@sentry/types" "7.68.0"
+    "@sentry/types" "7.73.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":
@@ -1128,10 +1128,10 @@ content-type@^1.0.4:
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
   integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
 
-cookie@^0.4.1:
-  version "0.4.2"
-  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
-  integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+cookie@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+  integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
 
 cookies@~0.8.0:
   version "0.8.0"

From 3ba8684209b30dbfe75421207fefb5dc131c10e6 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 5 Oct 2023 14:45:07 +0200
Subject: [PATCH 161/239] test: New Electron versions (#766)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 013b4af1..d7806e21 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.25","23.3.13","24.8.5","25.8.4","26.2.4"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.26","23.3.13","24.8.6","25.9.0","26.3.0"]

From 871d57f732e5b09ce4966de00362fa96eca4d4c2 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 5 Oct 2023 16:16:04 +0200
Subject: [PATCH 162/239] feat: Add ANR detection for main process (#753)

---
 src/index.ts                                 | 36 ++++++++
 src/main/anr.ts                              | 59 ++++++++++++
 src/main/index.ts                            |  1 +
 src/main/sdk.ts                              |  5 ++
 test/e2e/test-apps/anr/anr-main/event.json   | 94 ++++++++++++++++++++
 test/e2e/test-apps/anr/anr-main/package.json |  8 ++
 test/e2e/test-apps/anr/anr-main/recipe.yml   |  4 +
 test/e2e/test-apps/anr/anr-main/src/main.js  | 28 ++++++
 8 files changed, 235 insertions(+)
 create mode 100644 src/main/anr.ts
 create mode 100644 test/e2e/test-apps/anr/anr-main/event.json
 create mode 100644 test/e2e/test-apps/anr/anr-main/package.json
 create mode 100644 test/e2e/test-apps/anr/anr-main/recipe.yml
 create mode 100644 test/e2e/test-apps/anr/anr-main/src/main.js

diff --git a/src/index.ts b/src/index.ts
index 28e105b8..358c4638 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -49,6 +49,8 @@ export {
   trace,
 } from '@sentry/core';
 
+import type { enableAnrDetection as enableNodeAnrDetection } from '@sentry/node';
+
 export const Integrations = getIntegrations();
 
 // eslint-disable-next-line @typescript-eslint/no-empty-interface
@@ -62,6 +64,7 @@ interface ProcessEntryPoint {
   init: (options: Partial<ElectronOptions>) => void;
   close?: (timeout?: number) => Promise<boolean>;
   flush?: (timeout?: number) => Promise<boolean>;
+  enableAnrDetection?(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void>;
 }
 
 /** Fetches the SDK entry point for the current process */
@@ -165,3 +168,36 @@ export async function flush(timeout?: number): Promise<boolean> {
 
   throw new Error('The Electron SDK should be flushed from the main process');
 }
+
+/**
+ * **Note** This feature is still in beta so there may be breaking changes in future releases.
+ *
+ * Starts a child process that detects Application Not Responding (ANR) errors.
+ *
+ * It's important to await on the returned promise before your app code to ensure this code does not run in the ANR
+ * child process.
+ *
+ * ```js
+ * import { init, enableAnrDetection } from '@sentry/electron';
+ *
+ * init({ dsn: "__DSN__" });
+ *
+ * // with ESM + Electron v28+
+ * await enableAnrDetection({ captureStackTrace: true });
+ * runApp();
+ *
+ * // with CJS
+ * enableAnrDetection({ captureStackTrace: true }).then(() => {
+ *   runApp();
+ * });
+ * ```
+ */
+export async function enableAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> {
+  const entryPoint = getEntryPoint();
+
+  if (entryPoint.enableAnrDetection) {
+    return entryPoint.enableAnrDetection(options);
+  }
+
+  throw new Error('ANR detection should be started in the main process');
+}
diff --git a/src/main/anr.ts b/src/main/anr.ts
new file mode 100644
index 00000000..6ed2738d
--- /dev/null
+++ b/src/main/anr.ts
@@ -0,0 +1,59 @@
+import { enableAnrDetection as enableNodeAnrDetection } from '@sentry/node';
+import { app } from 'electron';
+
+import { ELECTRON_MAJOR_VERSION } from './electron-normalize';
+
+type MainProcessOptions = Parameters<typeof enableNodeAnrDetection>[0];
+
+interface Options {
+  /**
+   * Main process ANR options.
+   *
+   * Set to false to disable ANR detection in the main process.
+   */
+  mainProcess?: MainProcessOptions | false;
+}
+
+function enableAnrMainProcess(options: MainProcessOptions): Promise<void> {
+  if (ELECTRON_MAJOR_VERSION < 4) {
+    throw new Error('Main process ANR detection is only supported on Electron v4+');
+  }
+
+  const mainOptions = {
+    entryScript: app.getAppPath(),
+    ...options,
+  };
+
+  return enableNodeAnrDetection(mainOptions);
+}
+
+/**
+ * **Note** This feature is still in beta so there may be breaking changes in future releases.
+ *
+ * Starts a child process that detects Application Not Responding (ANR) errors.
+ *
+ * It's important to await on the returned promise before your app code to ensure this code does not run in the ANR
+ * child process.
+ *
+ * ```js
+ * import { init, enableAnrDetection } from '@sentry/electron';
+ *
+ * init({ dsn: "__DSN__" });
+ *
+ * // with ESM + Electron v28+
+ * await enableAnrDetection({ mainProcess: { captureStackTrace: true }});
+ * runApp();
+ *
+ * // with CJS
+ * enableAnrDetection({ mainProcess: { captureStackTrace: true }}).then(() => {
+ *   runApp();
+ * });
+ * ```
+ */
+export async function enableAnrDetection(options: Options = {}): Promise<void> {
+  if (options.mainProcess !== false) {
+    return enableAnrMainProcess(options.mainProcess || {});
+  }
+
+  return Promise.resolve();
+}
diff --git a/src/main/index.ts b/src/main/index.ts
index 7a566c4d..393df934 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -58,3 +58,4 @@ export const Integrations = { ...ElectronMainIntegrations, ...NodeIntegrations }
 export type { ElectronMainOptions } from './sdk';
 export { init, defaultIntegrations } from './sdk';
 export { IPCMode } from '../common';
+export { enableAnrDetection } from './anr';
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index 94b645d9..68f48559 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -96,6 +96,11 @@ export function init(userOptions: ElectronMainOptions): void {
   const options: ElectronMainOptionsInternal = Object.assign(defaultOptions, userOptions);
   const defaults = defaultIntegrations;
 
+  if (process.env.SENTRY_ANR_CHILD_PROCESS) {
+    options.autoSessionTracking = false;
+    options.tracesSampleRate = 0;
+  }
+
   // If we don't set a release, @sentry/node will automatically fetch from environment variables
   if (options.release === undefined) {
     options.release = getDefaultReleaseName();
diff --git a/test/e2e/test-apps/anr/anr-main/event.json b/test/e2e/test-apps/anr/anr-main/event.json
new file mode 100644
index 00000000..58c95e39
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-main/event.json
@@ -0,0 +1,94 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "anr-main",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution": "{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "release": "anr-main@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "exception": {
+      "values": [
+        {
+          "type": "ApplicationNotResponding",
+          "value": "Application Not Responding for at least 1000 ms",
+          "mechanism": { "type": "ANR" },
+          "stacktrace": {
+            "frames": [
+              {
+                "colno": 0,
+                "function": "{{function}}",
+                "in_app": false,
+                "lineno": 0,
+                "module": "pbkdf2"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    "level": "error",
+    "event_id": "{{id}}",
+    "platform": "node",
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "tags": {
+      "event.environment": "javascript",
+      "event.origin": "electron",
+      "event.process": "browser",
+      "event_type": "javascript",
+      "process.name": "ANR"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/anr/anr-main/package.json b/test/e2e/test-apps/anr/anr-main/package.json
new file mode 100644
index 00000000..7fc3834f
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-main/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "anr-main",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/anr/anr-main/recipe.yml b/test/e2e/test-apps/anr/anr-main/recipe.yml
new file mode 100644
index 00000000..d65df596
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-main/recipe.yml
@@ -0,0 +1,4 @@
+description: ANR Main Event
+category: ANR
+command: yarn
+condition: version.major >= 4
diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js
new file mode 100644
index 00000000..d622faca
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-main/src/main.js
@@ -0,0 +1,28 @@
+const crypto = require('crypto');
+
+const { app } = require('electron');
+const { init, enableAnrDetection } = require('@sentry/electron/main');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+function longWork() {
+  for (let i = 0; i < 100; i++) {
+    const salt = crypto.randomBytes(128).toString('base64');
+    // eslint-disable-next-line no-unused-vars
+    const hash = crypto.pbkdf2Sync('myPassword', salt, 10000, 512, 'sha512');
+  }
+}
+
+enableAnrDetection({ mainProcess: { debug: true, anrThreshold: 1000, captureStackTrace: true } }).then(() => {
+  console.log('main app code');
+  app.on('ready', () => {
+    setTimeout(() => {
+      longWork();
+    }, 1000);
+  });
+});

From 8d3b3e004eac1ea2dc777ed6c58aa1da5e1ffe09 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 5 Oct 2023 16:19:53 +0200
Subject: [PATCH 163/239] chore: Update changelog for 4.13.0 release (#767)

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index efe9a5f5..1317d618 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 4.13.0
+
+- feat: Add App Not Responding detection for main process (#753)
+- feat: Update from [v7.68.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.68.0) to
+  [v7.73.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.73.0) of JavaScript SDKs (#766)
+
 ## 4.12.0
 
 - feat: Identify `webContents` of renderers via custom protocol (#762)

From 760ef617ac6195c37a49f19fc657365e8199623f Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Thu, 5 Oct 2023 14:23:06 +0000
Subject: [PATCH 164/239] release: 4.13.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 30816909..bf14bb3c 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.12.0",
+  "version": "4.13.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -107,4 +107,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From c0f780e9334954032f3387245de1883f49064c87 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 10 Oct 2023 13:00:54 +0200
Subject: [PATCH 165/239] test: New Electron versions (#771)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index d7806e21..35d037d7 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.26","23.3.13","24.8.6","25.9.0","26.3.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.7","25.9.0","26.3.0","27.0.0"]

From a788a0fbccbd347334ac41b7d7968341541e6b33 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 16 Oct 2023 23:49:52 +0200
Subject: [PATCH 166/239] test: New Sentry SDK version (#775)

---
 package.json        |  16 ++--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 214 ++++++++++++++++++++++++++++----------------
 3 files changed, 146 insertions(+), 86 deletions(-)

diff --git a/package.json b/package.json
index bf14bb3c..a1ac776a 100644
--- a/package.json
+++ b/package.json
@@ -55,11 +55,11 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.73.0",
-    "@sentry/core": "7.73.0",
-    "@sentry/node": "7.73.0",
-    "@sentry/types": "7.73.0",
-    "@sentry/utils": "7.73.0",
+    "@sentry/browser": "7.74.0",
+    "@sentry/core": "7.74.0",
+    "@sentry/node": "7.74.0",
+    "@sentry/types": "7.74.0",
+    "@sentry/utils": "7.74.0",
     "deepmerge": "4.3.0",
     "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
@@ -67,8 +67,8 @@
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.73.0",
-    "@sentry-internal/typescript": "7.73.0",
+    "@sentry-internal/eslint-config-sdk": "7.74.0",
+    "@sentry-internal/typescript": "7.74.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -107,4 +107,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index bf062ada..131423c7 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa
 export function init<O extends BrowserOptions>(
   options: BrowserOptions & O = {} as BrowserOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_73_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_74_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 8d5dfcc6..9a194ea1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -45,7 +45,7 @@
   optionalDependencies:
     global-agent "^3.0.0"
 
-"@eslint-community/eslint-utils@^4.2.0":
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
   integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
@@ -164,99 +164,99 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.73.0.tgz#b2c480aebe86b033697492c1232a4db29f5e64e9"
-  integrity sha512-tC+GlHtXs2iwkul34WnCYLzMXakLmVY6/ODnkr+25nNo4TSwSqVON4X/98w2IPTbArzU4dLqDzuTmYgbV7TsHg==
+"@sentry-internal/eslint-config-sdk@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.74.0.tgz#dade78c180cad8aaeb1e239bc5451b15b8a3a7c0"
+  integrity sha512-ornnUt2BOD/5R5nzKgoExACrLFPfp04cyC2hcGa6U3DPvYb4aQsO2A3xeftsGZRiQ0OfAACvtajIKNkn61nppQ==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.73.0"
-    "@sentry-internal/typescript" "7.73.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.74.0"
+    "@sentry-internal/typescript" "7.74.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
-    eslint-plugin-deprecation "^1.1.0"
+    eslint-plugin-deprecation "^1.5.0"
     eslint-plugin-import "^2.22.0"
     eslint-plugin-jest "^27.2.2"
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.73.0.tgz#80b421924b823fd6fe487b014048362577660a15"
-  integrity sha512-V53mpXiKXQOC3qw8LbAoVfvpDqSDT2L9Zfwctz2+URbny4A8pRMpZ7jOgu2R4ZOu8z7WZYPuCH6P7ZZL8b0iXg==
+"@sentry-internal/eslint-plugin-sdk@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.74.0.tgz#4ceecc6e84ed2a8e07c41d5f52b15188ce251908"
+  integrity sha512-j0rTZKn4Mj0ywOIco8SxfI2f0xXo0O7dWlw8jfuPrYtn3BBtJc0/7lilz1ZwYTYKDAbDuhxKITaVP1V1R0ADDg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.73.0.tgz#4838f31e41d23a6041ef4520519b80f788bf1cac"
-  integrity sha512-ig3WL/Nqp8nRQ52P205NaypGKNfIl/G+cIqge9xPW6zfRb5kJdM1YParw9GSJ1SPjEZBkBORGAML0on5H2FILw==
+"@sentry-internal/tracing@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.74.0.tgz#11b0762d0b18b01cc18dfb1e40bbaa41c6f97452"
+  integrity sha512-JK6IRGgdtZjswGfaGIHNWIThffhOHzVIIaGmglui+VFIzOsOqePjoxaDV0MEvzafxXZD7eWqGE5RGuZ0n6HFVg==
   dependencies:
-    "@sentry/core" "7.73.0"
-    "@sentry/types" "7.73.0"
-    "@sentry/utils" "7.73.0"
+    "@sentry/core" "7.74.0"
+    "@sentry/types" "7.74.0"
+    "@sentry/utils" "7.74.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry-internal/typescript@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.73.0.tgz#5fc4b1a90a024b95e0033ec025bd76c6bfe850cc"
-  integrity sha512-0QUhxUVmktBCfeGwqqM7zKH+RTaR7wuj+aKhSdxVK9+NJnguRqYJZRwUSVqYCMiWCAzNJBztee4GstHDvcVlhw==
-
-"@sentry/browser@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.73.0.tgz#a8eaeb50cf16ca32f0039a81719c503d7045495f"
-  integrity sha512-e301hUixcJ5+HNKCJwajFF5smF4opXEFSclyWsJuFNufv5J/1C1SDhbwG2JjBt5zzdSoKWJKT1ewR6vpICyoDw==
-  dependencies:
-    "@sentry-internal/tracing" "7.73.0"
-    "@sentry/core" "7.73.0"
-    "@sentry/replay" "7.73.0"
-    "@sentry/types" "7.73.0"
-    "@sentry/utils" "7.73.0"
+"@sentry-internal/typescript@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.74.0.tgz#2dec70a1eec2684c8fc7abdc6b3ba03944c059c3"
+  integrity sha512-Xq71bUhZ2GIT76VfhNyJb9k5lmSDVFuaj9uy8PZ0W1DkY0fE4FEx2xWQUXuYy7M5+2QAHesGjCzHxZO2cx1HAQ==
+
+"@sentry/browser@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.74.0.tgz#4a01bccb34059894007b9a22a89892f2c4dff130"
+  integrity sha512-Njr8216Z1dFUcl6NqBOk20dssK9SjoVddY74Xq+Q4p3NfXBG3lkMcACXor7SFoJRZXq8CZWGS13Cc5KwViRw4g==
+  dependencies:
+    "@sentry-internal/tracing" "7.74.0"
+    "@sentry/core" "7.74.0"
+    "@sentry/replay" "7.74.0"
+    "@sentry/types" "7.74.0"
+    "@sentry/utils" "7.74.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/core@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.73.0.tgz#1caeeec44f42c4d58c06cc05dec39e5497b65aa3"
-  integrity sha512-9FEz4Gq848LOgVN2OxJGYuQqxv7cIVw69VlAzWHEm3njt8mjvlTq+7UiFsGRo84+59V2FQuHxzA7vVjl90WfSg==
+"@sentry/core@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.74.0.tgz#2cfcb5133a4a3f82fbac09d3573ea9f508fb7c67"
+  integrity sha512-83NRuqn7nDZkSVBN5yJQqcpXDG4yMYiB7TkYUKrGTzBpRy6KUOrkCdybuKk0oraTIGiGSe5WEwCFySiNgR9FzA==
   dependencies:
-    "@sentry/types" "7.73.0"
-    "@sentry/utils" "7.73.0"
+    "@sentry/types" "7.74.0"
+    "@sentry/utils" "7.74.0"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/node@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.73.0.tgz#7eecf06689cd8f9d21587ca5cbfdc74543cc8c09"
-  integrity sha512-i50bRfmgkRRx0XXUbg9jGD/RuznDJxJXc4rBILhoJuhl+BjRIaoXA3ayplfJn8JLZxsNh75uJaCq4IUK70SORw==
+"@sentry/node@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.74.0.tgz#c6b6704a3a238155f047972fd4c6944004347aba"
+  integrity sha512-uBmW2/z0cz/WFIG74ZF7lSipO0XNzMf9yrdqnZXnGDYsUZE4I4QiqDN0hNi6fkTgf9MYRC8uFem2OkAvyPJ74Q==
   dependencies:
-    "@sentry-internal/tracing" "7.73.0"
-    "@sentry/core" "7.73.0"
-    "@sentry/types" "7.73.0"
-    "@sentry/utils" "7.73.0"
+    "@sentry-internal/tracing" "7.74.0"
+    "@sentry/core" "7.74.0"
+    "@sentry/types" "7.74.0"
+    "@sentry/utils" "7.74.0"
     cookie "^0.5.0"
     https-proxy-agent "^5.0.0"
     lru_map "^0.3.3"
     tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.73.0.tgz#4e6c522bac5c12f596ef76afe15ecb3807407669"
-  integrity sha512-a8IC9SowBisLYD2IdLkXzx7gN4iVwHDJhQvLp2B8ARs1PyPjJ7gCxSMHeGrYp94V0gOXtorNYkrxvuX8ayPROA==
+"@sentry/replay@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.74.0.tgz#618d40f7c9ecc7589dd14df0c560b20a24839d3f"
+  integrity sha512-GoYa3cHTTFVI/J1cnZ0i4X128mf/JljaswO3PWNTe2k3lSHq/LM5aV0keClRvwM0W8hlix8oOTT06nnenOUmmw==
   dependencies:
-    "@sentry/core" "7.73.0"
-    "@sentry/types" "7.73.0"
-    "@sentry/utils" "7.73.0"
+    "@sentry/core" "7.74.0"
+    "@sentry/types" "7.74.0"
+    "@sentry/utils" "7.74.0"
 
-"@sentry/types@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.73.0.tgz#6d811bbe413d319df0a592a672d6d72a94a8e716"
-  integrity sha512-/v8++bly8jW7r4cP2wswYiiVpn7eLLcqwnfPUMeCQze4zj3F3nTRIKc9BGHzU0V+fhHa3RwRC2ksqTGq1oJMDg==
+"@sentry/types@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.74.0.tgz#810a62cd28db21c5f15f131da6525d7ddf7a29db"
+  integrity sha512-rI5eIRbUycWjn6s6o3yAjjWtIvYSxZDdnKv5je2EZINfLKcMPj1dkl6wQd2F4y7gLfD/N6Y0wZYIXC3DUdJQQg==
 
-"@sentry/utils@7.73.0":
-  version "7.73.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.73.0.tgz#530cf023f7c395aa7708cd3824e5a45948449c10"
-  integrity sha512-h3ZK/qpf4k76FhJV9uiSbvMz3V/0Ovy94C+5/9UgPMVCJXFmVsdw8n/dwANJ7LupVPfYP23xFGgebDMFlK1/2w==
+"@sentry/utils@7.74.0":
+  version "7.74.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.74.0.tgz#e0a16d345b2af6f8b09d157c8c8a3145d7a2070a"
+  integrity sha512-k3np8nuTPtx5KDODPtULfFln4UXdE56MZCcF19Jv6Ljxf+YN/Ady1+0Oi3e0XoSvFpWNyWnglauT7M65qCE6kg==
   dependencies:
-    "@sentry/types" "7.73.0"
+    "@sentry/types" "7.74.0"
     tslib "^2.4.1 || ^1.9.3"
 
 "@sindresorhus/is@^4.0.0":
@@ -422,6 +422,11 @@
   resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65"
   integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==
 
+"@types/json-schema@^7.0.12":
+  version "7.0.13"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85"
+  integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==
+
 "@types/json-schema@^7.0.9":
   version "7.0.11"
   resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
@@ -519,6 +524,11 @@
   resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
   integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
 
+"@types/semver@^7.5.0":
+  version "7.5.3"
+  resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04"
+  integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==
+
 "@types/serve-static@*":
   version "1.15.0"
   resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155"
@@ -555,13 +565,6 @@
     semver "^7.3.7"
     tsutils "^3.21.0"
 
-"@typescript-eslint/experimental-utils@^5.0.0":
-  version "5.51.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.51.0.tgz#936124843a9221863f027a08063b737578838bea"
-  integrity sha512-8/3+ZyBENl2aog1/QB3S39ptkZ2oRhDB+sJt15UWXBE3skgwL1C8BN9RjpOyhTejwR2hVrvqEjcYcNY6qtZ7nw==
-  dependencies:
-    "@typescript-eslint/utils" "5.51.0"
-
 "@typescript-eslint/parser@^5.48.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.51.0.tgz#2d74626652096d966ef107f44b9479f02f51f271"
@@ -588,6 +591,14 @@
     "@typescript-eslint/types" "5.62.0"
     "@typescript-eslint/visitor-keys" "5.62.0"
 
+"@typescript-eslint/scope-manager@6.7.5":
+  version "6.7.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz#1cf33b991043886cd67f4f3600b8e122fc14e711"
+  integrity sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==
+  dependencies:
+    "@typescript-eslint/types" "6.7.5"
+    "@typescript-eslint/visitor-keys" "6.7.5"
+
 "@typescript-eslint/type-utils@5.51.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988"
@@ -608,6 +619,11 @@
   resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
   integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
 
+"@typescript-eslint/types@6.7.5":
+  version "6.7.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.5.tgz#4571320fb9cf669de9a95d9849f922c3af809790"
+  integrity sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==
+
 "@typescript-eslint/typescript-estree@5.51.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de"
@@ -634,6 +650,19 @@
     semver "^7.3.7"
     tsutils "^3.21.0"
 
+"@typescript-eslint/typescript-estree@6.7.5":
+  version "6.7.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz#4578de1a26e9f24950f029a4f00d1bfe41f15a39"
+  integrity sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==
+  dependencies:
+    "@typescript-eslint/types" "6.7.5"
+    "@typescript-eslint/visitor-keys" "6.7.5"
+    debug "^4.3.4"
+    globby "^11.1.0"
+    is-glob "^4.0.3"
+    semver "^7.5.4"
+    ts-api-utils "^1.0.1"
+
 "@typescript-eslint/utils@5.51.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47"
@@ -662,6 +691,19 @@
     eslint-scope "^5.1.1"
     semver "^7.3.7"
 
+"@typescript-eslint/utils@^6.0.0":
+  version "6.7.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.5.tgz#ab847b53d6b65e029314b8247c2336843dba81ab"
+  integrity sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==
+  dependencies:
+    "@eslint-community/eslint-utils" "^4.4.0"
+    "@types/json-schema" "^7.0.12"
+    "@types/semver" "^7.5.0"
+    "@typescript-eslint/scope-manager" "6.7.5"
+    "@typescript-eslint/types" "6.7.5"
+    "@typescript-eslint/typescript-estree" "6.7.5"
+    semver "^7.5.4"
+
 "@typescript-eslint/visitor-keys@5.51.0":
   version "5.51.0"
   resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87"
@@ -678,6 +720,14 @@
     "@typescript-eslint/types" "5.62.0"
     eslint-visitor-keys "^3.3.0"
 
+"@typescript-eslint/visitor-keys@6.7.5":
+  version "6.7.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz#84c68d6ceb5b12d5246b918b84f2b79affd6c2f1"
+  integrity sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==
+  dependencies:
+    "@typescript-eslint/types" "6.7.5"
+    eslint-visitor-keys "^3.4.1"
+
 "@ungap/promise-all-settled@1.1.2":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
@@ -1519,12 +1569,12 @@ eslint-module-utils@^2.7.4:
   dependencies:
     debug "^3.2.7"
 
-eslint-plugin-deprecation@^1.1.0:
-  version "1.3.3"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.3.tgz#065b5d36ff220afe139f2b19af57454a13464731"
-  integrity sha512-Bbkv6ZN2cCthVXz/oZKPwsSY5S/CbgTLRG4Q2s2gpPpgNsT0uJ0dB5oLNiWzFYY8AgKX4ULxXFG1l/rDav9QFA==
+eslint-plugin-deprecation@^1.5.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.6.0.tgz#b12d0c5a9baf3bcde0752ff6337703c059a4ae23"
+  integrity sha512-rld+Vrneh/NXRtDB0vQifOvgUy0HJYoejaxWlVnsk/LK7iij2tCWQIFcCKG4uzQb+Ef86bDke39w1lh4wnon4Q==
   dependencies:
-    "@typescript-eslint/experimental-utils" "^5.0.0"
+    "@typescript-eslint/utils" "^6.0.0"
     tslib "^2.3.1"
     tsutils "^3.21.0"
 
@@ -1611,6 +1661,11 @@ eslint-visitor-keys@^3.3.0:
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
   integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
 
+eslint-visitor-keys@^3.4.1:
+  version "3.4.3"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+  integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
 eslint@7.32.0:
   version "7.32.0"
   resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
@@ -3282,7 +3337,7 @@ semver@^6.2.0, semver@^6.3.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
   integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
 
-semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8:
+semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8, semver@^7.5.4:
   version "7.5.4"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
   integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
@@ -3537,6 +3592,11 @@ toidentifier@1.0.1:
   resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
   integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
 
+ts-api-utils@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331"
+  integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==
+
 ts-node@^10.9.1:
   version "10.9.1"
   resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"

From eb1f60b6b8beb794e9a90b071fc0328b5b853a98 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 17 Oct 2023 14:55:53 +0100
Subject: [PATCH 167/239] fix: Hide ANR child process from dock (#777)

---
 src/main/sdk.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index 68f48559..4ca7e730 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -3,7 +3,7 @@ ensureProcess('main');
 
 import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit, NodeOptions } from '@sentry/node';
 import { Integration, Options } from '@sentry/types';
-import { Session, session, WebContents } from 'electron';
+import { app, Session, session, WebContents } from 'electron';
 
 import { getDefaultEnvironment, getDefaultReleaseName } from './context';
 import {
@@ -97,6 +97,7 @@ export function init(userOptions: ElectronMainOptions): void {
   const defaults = defaultIntegrations;
 
   if (process.env.SENTRY_ANR_CHILD_PROCESS) {
+    app.dock?.hide();
     options.autoSessionTracking = false;
     options.tracesSampleRate = 0;
   }

From d5279b2e0615517ec498663a1b1bd3583c0ef144 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 17 Oct 2023 15:08:39 +0100
Subject: [PATCH 168/239] test: Electron v28 main process ESM (#773)

---
 examples/electron-forge-webpack/recipe.yml    |  1 +
 examples/electron-forge/recipe.yml            |  1 +
 .../electron-react-boilerplate/recipe.yml     |  1 +
 examples/electron-vite/recipe.yml             |  1 +
 .../recipe.yml                                |  1 +
 examples/webpack-context-isolation/recipe.yml |  1 +
 package.json                                  |  2 +-
 test/e2e/recipe/index.ts                      | 59 +++++++++++++++++--
 test/e2e/recipe/normalize.ts                  |  1 +
 test/e2e/recipe/parser.ts                     |  1 +
 .../other/error-entry-point/recipe.yml        |  1 +
 .../test-apps/other/error-iframe/recipe.yml   |  1 +
 .../other/main-process-module/recipe.yml      |  1 +
 .../other/net-breadcrumbs-tracing/recipe.yml  |  1 +
 .../other/net-breadcrumbs/recipe.yml          |  1 +
 test/e2e/versions.json                        |  2 +-
 16 files changed, 70 insertions(+), 6 deletions(-)

diff --git a/examples/electron-forge-webpack/recipe.yml b/examples/electron-forge-webpack/recipe.yml
index d40dea6d..bc7a12a8 100644
--- a/examples/electron-forge-webpack/recipe.yml
+++ b/examples/electron-forge-webpack/recipe.yml
@@ -2,3 +2,4 @@ description: Electron Forge Webpack with contextIsolation and sandbox
 command: yarn && yarn package
 condition: supportsContextIsolation && supportsSandbox
 timeout: 120
+skipEsmAutoTransform: true
diff --git a/examples/electron-forge/recipe.yml b/examples/electron-forge/recipe.yml
index 74f484b7..4e3e7233 100644
--- a/examples/electron-forge/recipe.yml
+++ b/examples/electron-forge/recipe.yml
@@ -1,3 +1,4 @@
 description: Electron Forge
 command: yarn
 timeout: 120
+skipEsmAutoTransform: true
diff --git a/examples/electron-react-boilerplate/recipe.yml b/examples/electron-react-boilerplate/recipe.yml
index 9d2d90f2..ec2fb3a6 100644
--- a/examples/electron-react-boilerplate/recipe.yml
+++ b/examples/electron-react-boilerplate/recipe.yml
@@ -3,3 +3,4 @@ command: npm install && npm run build
 condition: version.major >= 16
 timeout: 120
 distPath: release/app
+skipEsmAutoTransform: true
diff --git a/examples/electron-vite/recipe.yml b/examples/electron-vite/recipe.yml
index 38e08e40..48e62d3d 100644
--- a/examples/electron-vite/recipe.yml
+++ b/examples/electron-vite/recipe.yml
@@ -2,3 +2,4 @@ description: Electron Vite
 command: yarn && yarn build
 condition: version.major >= 7
 timeout: 120
+skipEsmAutoTransform: true
diff --git a/examples/webpack-context-isolation-preload/recipe.yml b/examples/webpack-context-isolation-preload/recipe.yml
index 07abca78..02299da2 100644
--- a/examples/webpack-context-isolation-preload/recipe.yml
+++ b/examples/webpack-context-isolation-preload/recipe.yml
@@ -2,3 +2,4 @@ description: Webpack 5 app with contextIsolation and sandbox with preload
 command: yarn && yarn build
 condition: supportsContextIsolation && supportsSandbox
 timeout: 120
+skipEsmAutoTransform: true
diff --git a/examples/webpack-context-isolation/recipe.yml b/examples/webpack-context-isolation/recipe.yml
index 18407171..2b9066a5 100644
--- a/examples/webpack-context-isolation/recipe.yml
+++ b/examples/webpack-context-isolation/recipe.yml
@@ -2,3 +2,4 @@ description: Webpack 5 app with contextIsolation and sandbox
 command: yarn && yarn build
 condition: supportsContextIsolation && supportsSandbox
 timeout: 120
+skipEsmAutoTransform: true
diff --git a/package.json b/package.json
index a1ac776a..d46b0f81 100644
--- a/package.json
+++ b/package.json
@@ -47,7 +47,7 @@
     "fix": "run-s fix:eslint fix:prettier",
     "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"",
     "fix:eslint": "eslint . --format stylish --fix",
-    "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json",
+    "update-electron-versions": "electron-latest-versions --start 2 --alpha --beta > ./test/e2e/versions.json",
     "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs",
     "pretest": "yarn build",
     "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 12000 ./test/unit/**/*.ts",
diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index f71e1e32..f18088fd 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -1,4 +1,5 @@
 import { Event } from '@sentry/types';
+import { parseSemver } from '@sentry/utils';
 import { expect } from 'chai';
 import { spawnSync } from 'child_process';
 import { mkdirSync, writeFileSync } from 'fs';
@@ -53,6 +54,51 @@ export function getCategorisedTestRecipes(electronVersion: string): Record<strin
   }, {} as Record<string, RecipeRunner[]>);
 }
 
+function insertAfterLastImport(content: string, insert: string): string {
+  const lines = content.split('\n');
+  const importCount = lines.filter((l) => l.startsWith('import ')).length;
+
+  let output = '';
+  let count = 0;
+  for (const line of lines) {
+    output += `${line}\n`;
+
+    if (line.startsWith('import ')) {
+      count += 1;
+    }
+
+    if (count === importCount) {
+      output += `${insert}\n`;
+      count += 1;
+    }
+  }
+
+  return output;
+}
+
+function convertToEsm(filename: string, content: string): [string, string] {
+  if (filename.endsWith('package.json')) {
+    const obj = JSON.parse(content);
+    obj.main = obj.main.replace(/\.js$/, '.mjs');
+    return [filename, JSON.stringify(obj)];
+  }
+
+  if (filename.endsWith('main.js')) {
+    return [
+      filename.replace(/\.js$/, '.mjs'),
+      insertAfterLastImport(
+        content
+          .replace(/(?:const|var) (\{[\s\S]*?\}) = require\((\S*?)\)/g, 'import $1 from $2')
+          .replace(/(?:const|var) (\S*) = require\((\S*)\)/g, 'import * as $1 from $2'),
+        `import * as url from 'url';
+const __dirname = url.fileURLToPath(new url.URL('.', import.meta.url));`,
+      ),
+    ];
+  }
+
+  return [filename, content];
+}
+
 export class RecipeRunner {
   private constructor(private readonly _electronVersion: string, private readonly _recipe: TestRecipe) {}
 
@@ -105,9 +151,6 @@ export class RecipeRunner {
     for (const file of Object.keys(this._recipe.files)) {
       log(`Writing file '${file}'`);
 
-      const path = join(appPath, file);
-
-      mkdirSync(dirname(path), { recursive: true });
       let content = this._recipe.files[file];
 
       // Replace with the test server localhost DSN
@@ -125,12 +168,20 @@ export class RecipeRunner {
             /"@sentry\/electron": ".*"/,
             `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`,
           )
-          // We replace the Sentry JavaScript dependency versions to match that of @sentry/electron
+          // We replace the Sentry JavaScript dependency versions to match that of @sentry/core
           .replace(/"@sentry\/replay": ".*"/, `"@sentry/replay": "${JS_VERSION}"`)
           .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`)
           .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`);
       }
 
+      let filename = file;
+
+      if (!this._recipe.metadata.skipEsmAutoTransform && (parseSemver(this._electronVersion).major || 0) >= 28) {
+        [filename, content] = convertToEsm(file, content);
+      }
+
+      const path = join(appPath, filename);
+      mkdirSync(dirname(path), { recursive: true });
       writeFileSync(path, content);
     }
 
diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts
index ee2ac75a..f65a3ab0 100644
--- a/test/e2e/recipe/normalize.ts
+++ b/test/e2e/recipe/normalize.ts
@@ -151,6 +151,7 @@ function normalizeEvent(event: Event & ReplayEvent): Event {
       frame.colno = 0;
       frame.lineno = 0;
       frame.function = '{{function}}';
+      frame.filename = frame.filename?.replace(/\.mjs$/, '.js');
     }
   }
 
diff --git a/test/e2e/recipe/parser.ts b/test/e2e/recipe/parser.ts
index 96235670..31608fb9 100644
--- a/test/e2e/recipe/parser.ts
+++ b/test/e2e/recipe/parser.ts
@@ -17,6 +17,7 @@ export interface TestMetadata {
   runTwice?: boolean;
   expectedError?: string;
   distPath?: string;
+  skipEsmAutoTransform?: boolean;
 }
 
 export interface TestRecipe {
diff --git a/test/e2e/test-apps/other/error-entry-point/recipe.yml b/test/e2e/test-apps/other/error-entry-point/recipe.yml
index d623ac1f..88f76052 100644
--- a/test/e2e/test-apps/other/error-entry-point/recipe.yml
+++ b/test/e2e/test-apps/other/error-entry-point/recipe.yml
@@ -3,3 +3,4 @@ command: yarn && yarn build
 condition: version.major >= 15
 timeout: 120
 expectedError: This code is intended to run in the Electron renderer
+skipEsmAutoTransform: true
diff --git a/test/e2e/test-apps/other/error-iframe/recipe.yml b/test/e2e/test-apps/other/error-iframe/recipe.yml
index 73bace15..593c850d 100644
--- a/test/e2e/test-apps/other/error-iframe/recipe.yml
+++ b/test/e2e/test-apps/other/error-iframe/recipe.yml
@@ -2,3 +2,4 @@ description: JavaScript Error from <iframe>
 command: yarn && yarn build
 condition: supportsContextIsolation && supportsSandbox
 timeout: 120
+skipEsmAutoTransform: true
diff --git a/test/e2e/test-apps/other/main-process-module/recipe.yml b/test/e2e/test-apps/other/main-process-module/recipe.yml
index fdd7322b..f2012988 100644
--- a/test/e2e/test-apps/other/main-process-module/recipe.yml
+++ b/test/e2e/test-apps/other/main-process-module/recipe.yml
@@ -2,3 +2,4 @@ description: Webpack app with error in main process
 command: yarn && yarn build
 condition: supportsContextIsolation && supportsSandbox
 timeout: 120
+skipEsmAutoTransform: true
diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/recipe.yml b/test/e2e/test-apps/other/net-breadcrumbs-tracing/recipe.yml
index 7880c43c..f52bac34 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/recipe.yml
+++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/recipe.yml
@@ -1,2 +1,3 @@
 description: Electron net Tracing
 command: yarn
+skipEsmAutoTransform: true
diff --git a/test/e2e/test-apps/other/net-breadcrumbs/recipe.yml b/test/e2e/test-apps/other/net-breadcrumbs/recipe.yml
index 9909938d..c9b3c50c 100644
--- a/test/e2e/test-apps/other/net-breadcrumbs/recipe.yml
+++ b/test/e2e/test-apps/other/net-breadcrumbs/recipe.yml
@@ -1,2 +1,3 @@
 description: Electron net Breadcrumbs
 command: yarn
+skipEsmAutoTransform: true
diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 35d037d7..21dd62de 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.7","25.9.0","26.3.0","27.0.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.1","26.4.0","27.0.0","28.0.0-alpha.3"]

From 2bf8a549416c1109104175356aa361e699484d9e Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 17 Oct 2023 18:39:24 +0200
Subject: [PATCH 169/239] feat: Renderer process ANR detection with stack
 traces (#770)

---
 src/common/ipc.ts                             |  29 ++++
 src/index.ts                                  |  14 +-
 src/main/anr.ts                               | 145 +++++++++++++++---
 src/main/index.ts                             |   2 +-
 src/main/ipc.ts                               |  21 ++-
 src/preload/index.ts                          |   3 +-
 src/preload/legacy.ts                         |   3 +-
 src/renderer/anr.ts                           |  27 ++++
 src/renderer/ipc.ts                           |   7 +-
 src/renderer/sdk.ts                           |  30 +++-
 test/e2e/test-apps/anr/anr-main/src/main.js   |   5 +-
 .../e2e/test-apps/anr/anr-renderer/event.json |  93 +++++++++++
 .../test-apps/anr/anr-renderer/package.json   |   8 +
 .../e2e/test-apps/anr/anr-renderer/recipe.yml |   4 +
 .../test-apps/anr/anr-renderer/src/index.html |  29 ++++
 .../test-apps/anr/anr-renderer/src/main.js    |  22 +++
 16 files changed, 398 insertions(+), 44 deletions(-)
 create mode 100644 src/renderer/anr.ts
 create mode 100644 test/e2e/test-apps/anr/anr-renderer/event.json
 create mode 100644 test/e2e/test-apps/anr/anr-renderer/package.json
 create mode 100644 test/e2e/test-apps/anr/anr-renderer/recipe.yml
 create mode 100644 test/e2e/test-apps/anr/anr-renderer/src/index.html
 create mode 100644 test/e2e/test-apps/anr/anr-renderer/src/main.js

diff --git a/src/common/ipc.ts b/src/common/ipc.ts
index 80934a0e..ac26f837 100644
--- a/src/common/ipc.ts
+++ b/src/common/ipc.ts
@@ -9,6 +9,34 @@ export enum IPCChannel {
   SCOPE = 'sentry-electron.scope',
   /** IPC to pass envelopes to the main process. */
   ENVELOPE = 'sentry-electron.envelope',
+  /** IPC to pass renderer status updates */
+  STATUS = 'sentry-electron.status',
+}
+
+export interface RendererProcessAnrOptions {
+  /**
+   * Interval to send heartbeat messages to the child process.
+   *
+   * Defaults to 1000ms.
+   */
+  pollInterval: number;
+  /**
+   * The number of milliseconds to wait before considering the renderer process to be unresponsive.
+   *
+   * Defaults to 5000ms.
+   */
+  anrThreshold: number;
+  /**
+   * Whether to capture a stack trace when the renderer process is unresponsive.
+   *
+   * Defaults to `false`.
+   */
+  captureStackTrace: boolean;
+}
+
+export interface RendererStatus {
+  status: 'alive' | 'visible' | 'hidden';
+  config: RendererProcessAnrOptions;
 }
 
 export interface IPCInterface {
@@ -16,6 +44,7 @@ export interface IPCInterface {
   sendScope: (scope: string) => void;
   sendEvent: (event: string) => void;
   sendEnvelope: (evn: Uint8Array | string) => void;
+  sendStatus: (state: RendererStatus) => void;
 }
 
 export const RENDERER_ID_HEADER = 'sentry-electron-renderer-id';
diff --git a/src/index.ts b/src/index.ts
index 358c4638..2984eaa4 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -64,7 +64,7 @@ interface ProcessEntryPoint {
   init: (options: Partial<ElectronOptions>) => void;
   close?: (timeout?: number) => Promise<boolean>;
   flush?: (timeout?: number) => Promise<boolean>;
-  enableAnrDetection?(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void>;
+  enableMainProcessAnrDetection?(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void>;
 }
 
 /** Fetches the SDK entry point for the current process */
@@ -178,25 +178,25 @@ export async function flush(timeout?: number): Promise<boolean> {
  * child process.
  *
  * ```js
- * import { init, enableAnrDetection } from '@sentry/electron';
+ * import { init, enableMainProcessAnrDetection } from '@sentry/electron';
  *
  * init({ dsn: "__DSN__" });
  *
  * // with ESM + Electron v28+
- * await enableAnrDetection({ captureStackTrace: true });
+ * await enableMainProcessAnrDetection({ captureStackTrace: true });
  * runApp();
  *
  * // with CJS
- * enableAnrDetection({ captureStackTrace: true }).then(() => {
+ * enableMainProcessAnrDetection({ captureStackTrace: true }).then(() => {
  *   runApp();
  * });
  * ```
  */
-export async function enableAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> {
+export function enableMainProcessAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> {
   const entryPoint = getEntryPoint();
 
-  if (entryPoint.enableAnrDetection) {
-    return entryPoint.enableAnrDetection(options);
+  if (entryPoint.enableMainProcessAnrDetection) {
+    return entryPoint.enableMainProcessAnrDetection(options);
   }
 
   throw new Error('ANR detection should be started in the main process');
diff --git a/src/main/anr.ts b/src/main/anr.ts
index 6ed2738d..d74a70d4 100644
--- a/src/main/anr.ts
+++ b/src/main/anr.ts
@@ -1,30 +1,120 @@
-import { enableAnrDetection as enableNodeAnrDetection } from '@sentry/node';
-import { app } from 'electron';
+import {
+  captureEvent,
+  enableAnrDetection as enableNodeAnrDetection,
+  getCurrentHub,
+  getModuleFromFilename,
+  StackFrame,
+} from '@sentry/node';
+import { Event } from '@sentry/types';
+import { createDebugPauseMessageHandler, logger, watchdogTimer } from '@sentry/utils';
+import { app, WebContents } from 'electron';
 
+import { RendererStatus } from '../common';
 import { ELECTRON_MAJOR_VERSION } from './electron-normalize';
+import { ElectronMainOptions } from './sdk';
 
-type MainProcessOptions = Parameters<typeof enableNodeAnrDetection>[0];
+function getRendererName(contents: WebContents): string | undefined {
+  const options = getCurrentHub().getClient()?.getOptions() as ElectronMainOptions | undefined;
+  return options?.getRendererName?.(contents);
+}
+
+function sendRendererAnrEvent(contents: WebContents, blockedMs: number, frames?: StackFrame[]): void {
+  const rendererName = getRendererName(contents) || 'renderer';
 
-interface Options {
-  /**
-   * Main process ANR options.
-   *
-   * Set to false to disable ANR detection in the main process.
-   */
-  mainProcess?: MainProcessOptions | false;
+  const event: Event = {
+    level: 'error',
+    exception: {
+      values: [
+        {
+          type: 'ApplicationNotResponding',
+          value: `Application Not Responding for at least ${blockedMs} ms`,
+          stacktrace: { frames },
+          mechanism: {
+            // This ensures the UI doesn't say 'Crashed in' for the stack trace
+            type: 'ANR',
+          },
+        },
+      ],
+    },
+    tags: {
+      'event.process': rendererName,
+    },
+  };
+
+  captureEvent(event);
 }
 
-function enableAnrMainProcess(options: MainProcessOptions): Promise<void> {
-  if (ELECTRON_MAJOR_VERSION < 4) {
-    throw new Error('Main process ANR detection is only supported on Electron v4+');
-  }
+function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFrame[]) => void): () => void {
+  contents.debugger.attach('1.3');
 
-  const mainOptions = {
-    entryScript: app.getAppPath(),
-    ...options,
+  const messageHandler = createDebugPauseMessageHandler(
+    (cmd) => contents.debugger.sendCommand(cmd),
+    getModuleFromFilename,
+    pausedStack,
+  );
+
+  contents.debugger.on('message', (_, method, params) => {
+    messageHandler({ method, params } as Parameters<typeof messageHandler>[0]);
+  });
+
+  // In node, we enable just before pausing but for Chrome, the debugger must be enabled before he ANR event occurs
+  void contents.debugger.sendCommand('Debugger.enable');
+
+  return () => {
+    return contents.debugger.sendCommand('Debugger.pause');
   };
+}
 
-  return enableNodeAnrDetection(mainOptions);
+let rendererWatchdogTimers: Map<WebContents, ReturnType<typeof watchdogTimer>> | undefined;
+
+/** Creates a renderer ANR status hook */
+export function createRendererAnrStatusHook(): (status: RendererStatus, contents: WebContents) => void {
+  function log(message: string, ...args: unknown[]): void {
+    logger.log(`[Renderer ANR] ${message}`, ...args);
+  }
+
+  return (message: RendererStatus, contents: WebContents): void => {
+    rendererWatchdogTimers = rendererWatchdogTimers || new Map();
+
+    let watchdog = rendererWatchdogTimers.get(contents);
+
+    if (watchdog === undefined) {
+      log('Renderer sent first status message', message.config);
+      let pauseAndCapture: (() => void) | undefined;
+
+      if (message.config.captureStackTrace) {
+        log('Connecting to debugger');
+        pauseAndCapture = rendererDebugger(contents, (frames) => {
+          log('Event captured with stack frames');
+          sendRendererAnrEvent(contents, message.config.anrThreshold, frames);
+        });
+      }
+
+      watchdog = watchdogTimer(100, message.config.anrThreshold, async () => {
+        log('Watchdog timeout');
+        if (pauseAndCapture) {
+          log('Pausing debugger to capture stack trace');
+          pauseAndCapture();
+        } else {
+          log('Capturing event');
+          sendRendererAnrEvent(contents, message.config.anrThreshold);
+        }
+      });
+
+      contents.once('destroyed', () => {
+        rendererWatchdogTimers?.delete(contents);
+      });
+
+      rendererWatchdogTimers.set(contents, watchdog);
+    }
+
+    watchdog.poll();
+
+    if (message.status !== 'alive') {
+      log('Renderer visibility changed', message.status);
+      watchdog.enabled(message.status === 'visible');
+    }
+  };
 }
 
 /**
@@ -36,24 +126,29 @@ function enableAnrMainProcess(options: MainProcessOptions): Promise<void> {
  * child process.
  *
  * ```js
- * import { init, enableAnrDetection } from '@sentry/electron';
+ * import { init, enableMainProcessAnrDetection } from '@sentry/electron';
  *
  * init({ dsn: "__DSN__" });
  *
  * // with ESM + Electron v28+
- * await enableAnrDetection({ mainProcess: { captureStackTrace: true }});
+ * await enableMainProcessAnrDetection({ captureStackTrace: true });
  * runApp();
  *
  * // with CJS
- * enableAnrDetection({ mainProcess: { captureStackTrace: true }}).then(() => {
+ * enableMainProcessAnrDetection({ captureStackTrace: true }).then(() => {
  *   runApp();
  * });
  * ```
  */
-export async function enableAnrDetection(options: Options = {}): Promise<void> {
-  if (options.mainProcess !== false) {
-    return enableAnrMainProcess(options.mainProcess || {});
+export function enableMainProcessAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> {
+  if (ELECTRON_MAJOR_VERSION < 4) {
+    throw new Error('Main process ANR detection is only supported on Electron v4+');
   }
 
-  return Promise.resolve();
+  const mainOptions = {
+    entryScript: app.getAppPath(),
+    ...options,
+  };
+
+  return enableNodeAnrDetection(mainOptions);
 }
diff --git a/src/main/index.ts b/src/main/index.ts
index 393df934..4f17eedf 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -58,4 +58,4 @@ export const Integrations = { ...ElectronMainIntegrations, ...NodeIntegrations }
 export type { ElectronMainOptions } from './sdk';
 export { init, defaultIntegrations } from './sdk';
 export { IPCMode } from '../common';
-export { enableAnrDetection } from './anr';
+export { enableMainProcessAnrDetection } from './anr';
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index cc8abda1..4d8bb460 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -4,7 +4,15 @@ import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry
 import { app, ipcMain, protocol, WebContents, webContents } from 'electron';
 import { TextDecoder, TextEncoder } from 'util';
 
-import { IPCChannel, IPCMode, mergeEvents, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME } from '../common';
+import {
+  IPCChannel,
+  IPCMode,
+  mergeEvents,
+  normalizeUrlsInReplayEnvelope,
+  PROTOCOL_SCHEME,
+  RendererStatus,
+} from '../common';
+import { createRendererAnrStatusHook } from './anr';
 import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize';
 import { ElectronMainOptionsInternal } from './sdk';
 
@@ -168,6 +176,8 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
     },
   ]);
 
+  const rendererStatusChanged = createRendererAnrStatusHook();
+
   whenAppReady
     .then(() => {
       for (const sesh of options.getSessions()) {
@@ -186,6 +196,12 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
             handleScope(options, data.toString());
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) {
             handleEnvelope(options, data, getWebContents());
+          } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.STATUS}`) && data) {
+            const contents = getWebContents();
+            if (contents) {
+              const status = (JSON.parse(data.toString()) as { status: RendererStatus }).status;
+              rendererStatusChanged(status, contents);
+            }
           }
         });
       }
@@ -214,6 +230,9 @@ function configureClassic(options: ElectronMainOptionsInternal): void {
   ipcMain.on(IPCChannel.EVENT, ({ sender }, jsonEvent: string) => handleEvent(options, jsonEvent, sender));
   ipcMain.on(IPCChannel.SCOPE, (_, jsonScope: string) => handleScope(options, jsonScope));
   ipcMain.on(IPCChannel.ENVELOPE, ({ sender }, env: Uint8Array | string) => handleEnvelope(options, env, sender));
+
+  const rendererStatusChanged = createRendererAnrStatusHook();
+  ipcMain.on(IPCChannel.STATUS, ({ sender }, status: RendererStatus) => rendererStatusChanged(status, sender));
 }
 
 /** Sets up communication channels with the renderer */
diff --git a/src/preload/index.ts b/src/preload/index.ts
index 87c80cb7..78f91f99 100644
--- a/src/preload/index.ts
+++ b/src/preload/index.ts
@@ -4,7 +4,7 @@
 
 import { contextBridge, ipcRenderer } from 'electron';
 
-import { IPCChannel } from '../common/ipc';
+import { IPCChannel, RendererStatus } from '../common/ipc';
 
 // eslint-disable-next-line no-restricted-globals
 if (window.__SENTRY_IPC__) {
@@ -16,6 +16,7 @@ if (window.__SENTRY_IPC__) {
     sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson),
     sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson),
     sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope),
+    sendStatus: (status: RendererStatus) => ipcRenderer.send(IPCChannel.STATUS, status),
   };
 
   // eslint-disable-next-line no-restricted-globals
diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts
index 4fa233b7..9a9d4d15 100644
--- a/src/preload/legacy.ts
+++ b/src/preload/legacy.ts
@@ -5,7 +5,7 @@
 import { contextBridge, crashReporter, ipcRenderer } from 'electron';
 import * as electron from 'electron';
 
-import { IPCChannel } from '../common/ipc';
+import { IPCChannel, RendererStatus } from '../common/ipc';
 
 // eslint-disable-next-line no-restricted-globals
 if (window.__SENTRY_IPC__) {
@@ -27,6 +27,7 @@ if (window.__SENTRY_IPC__) {
     sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson),
     sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson),
     sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope),
+    sendStatus: (status: RendererStatus) => ipcRenderer.send(IPCChannel.STATUS, status),
   };
 
   // eslint-disable-next-line no-restricted-globals
diff --git a/src/renderer/anr.ts b/src/renderer/anr.ts
new file mode 100644
index 00000000..cfe073c4
--- /dev/null
+++ b/src/renderer/anr.ts
@@ -0,0 +1,27 @@
+/* eslint-disable no-restricted-globals */
+import { RendererProcessAnrOptions } from '../common/ipc';
+import { getIPC } from './ipc';
+
+/**
+ * Enables the sending of ANR messages to the main process.
+ */
+export function enableAnrRendererMessages(options: Partial<RendererProcessAnrOptions>): void {
+  const config: RendererProcessAnrOptions = {
+    pollInterval: 1_000,
+    anrThreshold: 5_000,
+    captureStackTrace: false,
+    ...options,
+  };
+
+  const ipc = getIPC();
+
+  document.addEventListener('visibilitychange', () => {
+    ipc.sendStatus({ status: document.visibilityState, config });
+  });
+
+  ipc.sendStatus({ status: document.visibilityState, config });
+
+  setInterval(() => {
+    ipc.sendStatus({ status: 'alive', config });
+  }, config.pollInterval);
+}
diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts
index f018a8dd..549874aa 100644
--- a/src/renderer/ipc.ts
+++ b/src/renderer/ipc.ts
@@ -2,7 +2,7 @@
 /* eslint-disable no-console */
 import { logger, uuid4 } from '@sentry/utils';
 
-import { IPCChannel, IPCInterface, PROTOCOL_SCHEME, RENDERER_ID_HEADER } from '../common/ipc';
+import { IPCChannel, IPCInterface, PROTOCOL_SCHEME, RENDERER_ID_HEADER, RendererStatus } from '../common/ipc';
 
 function buildUrl(channel: IPCChannel): string {
   // We include sentry_key in the URL so these don't end up in fetch breadcrumbs
@@ -47,6 +47,11 @@ function getImplementation(): IPCInterface {
           // ignore
         });
       },
+      sendStatus: (status: RendererStatus) => {
+        fetch(buildUrl(IPCChannel.STATUS), { method: 'POST', body: JSON.stringify({ status }), headers }).catch(() => {
+          // ignore
+        });
+      },
     };
   }
 }
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 131423c7..19e864bf 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -6,21 +6,39 @@ import {
 } from '@sentry/browser';
 import { logger } from '@sentry/utils';
 
-import { ensureProcess } from '../common';
+import { ensureProcess, RendererProcessAnrOptions } from '../common';
+import { enableAnrRendererMessages } from './anr';
 import { ScopeToMain } from './integrations';
 import { electronRendererStackParser } from './stack-parse';
 import { makeRendererTransport } from './transport';
 
 export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain()];
 
+interface ElectronRendererOptions extends BrowserOptions {
+  /**
+   * Enables ANR detection in this renderer process.
+   *
+   * Optionally accepts an object of options to configure ANR detection.
+   *
+   * {
+   *   pollInterval: number; // Defaults to 1000ms
+   *   anrThreshold: number; // Defaults to 5000ms
+   *   captureStackTrace: boolean; // Defaults to false
+   * }
+   *
+   * Defaults to 'false'.
+   */
+  anrDetection?: Partial<RendererProcessAnrOptions> | boolean;
+}
+
 /**
  * Initialize Sentry in the Electron renderer process
  * @param options SDK options
  * @param originalInit Optional init function for a specific framework SDK
  * @returns
  */
-export function init<O extends BrowserOptions>(
-  options: BrowserOptions & O = {} as BrowserOptions & O,
+export function init<O extends ElectronRendererOptions>(
+  options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
   originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_74_0: O) => void = browserInit,
 ): void {
@@ -36,7 +54,7 @@ If init has been called in the preload and contextIsolation is disabled, is not
   window.__SENTRY__RENDERER_INIT__ = true;
 
   // We don't want browser session tracking enabled by default because we already have Electron
-  // specific session tracking
+  // specific session tracking from the main process.
   if (options.autoSessionTracking === undefined) {
     options.autoSessionTracking = false;
   }
@@ -62,6 +80,10 @@ If init has been called in the preload and contextIsolation is disabled, is not
     options.transport = makeRendererTransport;
   }
 
+  if (options.anrDetection) {
+    enableAnrRendererMessages(options.anrDetection === true ? {} : options.anrDetection);
+  }
+
   // We only handle initialScope in the main process otherwise it can cause race conditions over IPC
   delete options.initialScope;
 
diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js
index d622faca..c733ffd7 100644
--- a/test/e2e/test-apps/anr/anr-main/src/main.js
+++ b/test/e2e/test-apps/anr/anr-main/src/main.js
@@ -1,7 +1,7 @@
 const crypto = require('crypto');
 
 const { app } = require('electron');
-const { init, enableAnrDetection } = require('@sentry/electron/main');
+const { init, enableMainProcessAnrDetection } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
@@ -18,8 +18,7 @@ function longWork() {
   }
 }
 
-enableAnrDetection({ mainProcess: { debug: true, anrThreshold: 1000, captureStackTrace: true } }).then(() => {
-  console.log('main app code');
+enableMainProcessAnrDetection({ anrThreshold: 1000, captureStackTrace: true }).then(() => {
   app.on('ready', () => {
     setTimeout(() => {
       longWork();
diff --git a/test/e2e/test-apps/anr/anr-renderer/event.json b/test/e2e/test-apps/anr/anr-renderer/event.json
new file mode 100644
index 00000000..2d99078d
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-renderer/event.json
@@ -0,0 +1,93 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "anr-renderer",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution": "{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "release": "anr-renderer@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "exception": {
+      "values": [
+        {
+          "type": "ApplicationNotResponding",
+          "value": "Application Not Responding for at least 1000 ms",
+          "mechanism": { "type": "ANR" },
+          "stacktrace": {
+            "frames": [
+              {
+                "colno": 0,
+                "function": "{{function}}",
+                "in_app": false,
+                "lineno": 0,
+                "module": "pbkdf2"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    "level": "error",
+    "event_id": "{{id}}",
+    "platform": "node",
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "tags": {
+      "event.environment": "javascript",
+      "event.origin": "electron",
+      "event.process": "renderer",
+      "event_type": "javascript"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/anr/anr-renderer/package.json b/test/e2e/test-apps/anr/anr-renderer/package.json
new file mode 100644
index 00000000..c31e4fc1
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-renderer/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "anr-renderer",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/anr/anr-renderer/recipe.yml b/test/e2e/test-apps/anr/anr-renderer/recipe.yml
new file mode 100644
index 00000000..dc3ac921
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-renderer/recipe.yml
@@ -0,0 +1,4 @@
+description: ANR Renderer Event
+category: ANR
+command: yarn
+condition: version.major >= 4
diff --git a/test/e2e/test-apps/anr/anr-renderer/src/index.html b/test/e2e/test-apps/anr/anr-renderer/src/index.html
new file mode 100644
index 00000000..a160c47c
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-renderer/src/index.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const crypto = require('crypto');
+      const { init } = require('@sentry/electron');
+
+      function longWork() {
+        for (let i = 0; i < 100; i++) {
+          const salt = crypto.randomBytes(128).toString('base64');
+          // eslint-disable-next-line no-unused-vars
+          const hash = crypto.pbkdf2Sync('myPassword', salt, 10000, 512, 'sha512');
+        }
+      }
+
+      init({
+        debug: true,
+        anrDetection: { pollInterval: 200, anrThreshold: 1000, captureStackTrace: true },
+      });
+
+      setTimeout(() => {
+        longWork();
+      }, 2000);
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/anr/anr-renderer/src/main.js b/test/e2e/test-apps/anr/anr-renderer/src/main.js
new file mode 100644
index 00000000..06a7431a
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-renderer/src/main.js
@@ -0,0 +1,22 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron/main');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+});

From 9717ee3530c92a2b6c1dc25b5e0186d983b309c1 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 17 Oct 2023 21:47:24 +0200
Subject: [PATCH 170/239] chore: Changelog for 4.14.0 (#778)

---
 CHANGELOG.md | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1317d618..38d5a593 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 
 ## Unreleased
 
+## 4.14.0
+
+- feat: Renderer process ANR detection with stack traces (#770)
+  - Update from [v7.73.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.73.0) to
+  [v7.74.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.74.0) of JavaScript SDKs
+- fix: Hide ANR child process from dock (#777)
+- test: Electron v28 main process ESM (#773)
+
 ## 4.13.0
 
 - feat: Add App Not Responding detection for main process (#753)

From 47b21bd2f9055d17ce102d5cb4302020c27f290b Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 17 Oct 2023 20:14:31 +0000
Subject: [PATCH 171/239] release: 4.14.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index d46b0f81..0ea2d041 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.13.0",
+  "version": "4.14.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -107,4 +107,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From 6105fb58709fe0ccdcb3e06b213ac44c3cc9897d Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 19 Oct 2023 19:28:59 +0200
Subject: [PATCH 172/239] test: New Electron versions (#780)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 21dd62de..6b914678 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.1","26.4.0","27.0.0","28.0.0-alpha.3"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.2","26.4.1","27.0.1","28.0.0-alpha.3"]

From 060747dc7011c3f916534eafe2db51504c7b33cc Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 1 Nov 2023 10:25:04 +1300
Subject: [PATCH 173/239] feat: Update JavaScript SDKs to 7.76.0 (#783)

---
 package.json                                  |  15 +-
 src/main/anr.ts                               |  24 ++-
 src/main/integrations/net-breadcrumbs.ts      |   2 +-
 src/main/sdk.ts                               |   3 +-
 src/main/sessions.ts                          |  27 +++
 src/renderer/sdk.ts                           |   2 +-
 test/e2e/test-apps/anr/anr-main/session.json  |  18 ++
 test/e2e/test-apps/anr/anr-main/src/main.js   |   1 -
 .../test-apps/anr/anr-renderer/session.json   |  18 ++
 .../test-apps/anr/anr-renderer/src/main.js    |   1 -
 yarn.lock                                     | 159 ++++++++----------
 11 files changed, 166 insertions(+), 104 deletions(-)
 create mode 100644 test/e2e/test-apps/anr/anr-main/session.json
 create mode 100644 test/e2e/test-apps/anr/anr-renderer/session.json

diff --git a/package.json b/package.json
index 0ea2d041..b6533d9c 100644
--- a/package.json
+++ b/package.json
@@ -55,20 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.74.0",
-    "@sentry/core": "7.74.0",
-    "@sentry/node": "7.74.0",
-    "@sentry/types": "7.74.0",
-    "@sentry/utils": "7.74.0",
+    "@sentry/browser": "7.76.0",
+    "@sentry/core": "7.76.0",
+    "@sentry/node": "7.76.0",
+    "@sentry/types": "7.76.0",
+    "@sentry/utils": "7.76.0",
     "deepmerge": "4.3.0",
-    "lru_map": "^0.3.3",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.74.0",
-    "@sentry-internal/typescript": "7.74.0",
+    "@sentry-internal/eslint-config-sdk": "7.76.0",
+    "@sentry-internal/typescript": "7.76.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/main/anr.ts b/src/main/anr.ts
index d74a70d4..a6c8f68e 100644
--- a/src/main/anr.ts
+++ b/src/main/anr.ts
@@ -12,6 +12,7 @@ import { app, WebContents } from 'electron';
 import { RendererStatus } from '../common';
 import { ELECTRON_MAJOR_VERSION } from './electron-normalize';
 import { ElectronMainOptions } from './sdk';
+import { sessionAnr } from './sessions';
 
 function getRendererName(contents: WebContents): string | undefined {
   const options = getCurrentHub().getClient()?.getOptions() as ElectronMainOptions | undefined;
@@ -19,6 +20,8 @@ function getRendererName(contents: WebContents): string | undefined {
 }
 
 function sendRendererAnrEvent(contents: WebContents, blockedMs: number, frames?: StackFrame[]): void {
+  sessionAnr();
+
   const rendererName = getRendererName(contents) || 'renderer';
 
   const event: Event = {
@@ -67,6 +70,25 @@ function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFram
 
 let rendererWatchdogTimers: Map<WebContents, ReturnType<typeof watchdogTimer>> | undefined;
 
+function createHrTimer(): { getTimeMs: () => number; reset: () => void } {
+  let lastPoll = process.hrtime();
+
+  return {
+    getTimeMs: (): number => {
+      const [seconds, nanoSeconds] = process.hrtime(lastPoll);
+      return Math.floor(seconds * 1e3 + nanoSeconds / 1e6);
+    },
+    reset: (): void => {
+      lastPoll = process.hrtime();
+    },
+  };
+}
+
+/** Are we currently running in the ANR child process */
+export function isAnrChildProcess(): boolean {
+  return !!process.env.SENTRY_ANR_CHILD_PROCESS;
+}
+
 /** Creates a renderer ANR status hook */
 export function createRendererAnrStatusHook(): (status: RendererStatus, contents: WebContents) => void {
   function log(message: string, ...args: unknown[]): void {
@@ -90,7 +112,7 @@ export function createRendererAnrStatusHook(): (status: RendererStatus, contents
         });
       }
 
-      watchdog = watchdogTimer(100, message.config.anrThreshold, async () => {
+      watchdog = watchdogTimer(createHrTimer, 100, message.config.anrThreshold, async () => {
         log('Watchdog timeout');
         if (pauseAndCapture) {
           log('Pausing debugger to capture stack trace');
diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts
index 237abea8..a6cb4816 100644
--- a/src/main/integrations/net-breadcrumbs.ts
+++ b/src/main/integrations/net-breadcrumbs.ts
@@ -7,10 +7,10 @@ import {
   fill,
   generateSentryTraceHeader,
   logger,
+  LRUMap,
   stringMatchesSomePattern,
 } from '@sentry/utils';
 import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net } from 'electron';
-import { LRUMap } from 'lru_map';
 import * as urlModule from 'url';
 
 type ShouldTraceFn = (method: string, url: string) => boolean;
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index 4ca7e730..b0ab3c04 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -5,6 +5,7 @@ import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit, NodeO
 import { Integration, Options } from '@sentry/types';
 import { app, Session, session, WebContents } from 'electron';
 
+import { isAnrChildProcess } from './anr';
 import { getDefaultEnvironment, getDefaultReleaseName } from './context';
 import {
   AdditionalContext,
@@ -96,7 +97,7 @@ export function init(userOptions: ElectronMainOptions): void {
   const options: ElectronMainOptionsInternal = Object.assign(defaultOptions, userOptions);
   const defaults = defaultIntegrations;
 
-  if (process.env.SENTRY_ANR_CHILD_PROCESS) {
+  if (isAnrChildProcess()) {
     app.dock?.hide();
     options.autoSessionTracking = false;
     options.tracesSampleRate = 0;
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index 080a8522..51ec7736 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -4,6 +4,7 @@ import { SerializedSession, Session, SessionContext, SessionStatus } from '@sent
 import { logger } from '@sentry/utils';
 import { app } from 'electron';
 
+import { isAnrChildProcess } from './anr';
 import { sentryCachePath } from './fs';
 import { Store } from './store';
 
@@ -93,6 +94,11 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined):
 export async function checkPreviousSession(crashed: boolean): Promise<void> {
   const client = getCurrentHub().getClient<NodeClient>();
 
+  // We should not check the session storage if we are in an ANR child process
+  if (isAnrChildProcess()) {
+    return;
+  }
+
   const previous = await previousSession;
 
   if (previous && client) {
@@ -147,6 +153,27 @@ export function sessionCrashed(): void {
   hub.captureSession();
 }
 
+/** Sets the current session as ANR */
+export function sessionAnr(): void {
+  // stop persisting session
+  if (persistTimer) {
+    clearInterval(persistTimer);
+  }
+
+  const hub = getCurrentHub();
+  const session = hub.getScope()?.getSession();
+
+  if (!session) {
+    return;
+  }
+
+  if (session.status === 'ok') {
+    logger.log('Setting session as abnormal ANR');
+    updateSession(session, { status: 'abnormal', abnormal_mechanism: 'anr_foreground' });
+    hub.captureSession();
+  }
+}
+
 /**
  * End the current session on app exit
  */
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 19e864bf..a64b42c3 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_74_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_76_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/test-apps/anr/anr-main/session.json b/test/e2e/test-apps/anr/anr-main/session.json
new file mode 100644
index 00000000..aeee20e1
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-main/session.json
@@ -0,0 +1,18 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "abnormal",
+    "abnormal_mechanism": "anr_foreground",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "anr-main@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js
index c733ffd7..df404fc1 100644
--- a/test/e2e/test-apps/anr/anr-main/src/main.js
+++ b/test/e2e/test-apps/anr/anr-main/src/main.js
@@ -6,7 +6,6 @@ const { init, enableMainProcessAnrDetection } = require('@sentry/electron/main')
 init({
   dsn: '__DSN__',
   debug: true,
-  autoSessionTracking: false,
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/anr/anr-renderer/session.json b/test/e2e/test-apps/anr/anr-renderer/session.json
new file mode 100644
index 00000000..95a09dcb
--- /dev/null
+++ b/test/e2e/test-apps/anr/anr-renderer/session.json
@@ -0,0 +1,18 @@
+{
+  "appId": "277345",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "method": "envelope",
+  "data": {
+    "sid": "{{id}}",
+    "init": true,
+    "started": 0,
+    "timestamp": 0,
+    "status": "abnormal",
+    "abnormal_mechanism": "anr_foreground",
+    "errors": 0,
+    "duration": 0,
+    "attrs": {
+      "release": "anr-renderer@1.0.0"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/anr/anr-renderer/src/main.js b/test/e2e/test-apps/anr/anr-renderer/src/main.js
index 06a7431a..f0468b6d 100644
--- a/test/e2e/test-apps/anr/anr-renderer/src/main.js
+++ b/test/e2e/test-apps/anr/anr-renderer/src/main.js
@@ -6,7 +6,6 @@ const { init } = require('@sentry/electron/main');
 init({
   dsn: '__DSN__',
   debug: true,
-  autoSessionTracking: false,
   onFatalError: () => {},
 });
 
diff --git a/yarn.lock b/yarn.lock
index 9a194ea1..5181de8a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.74.0.tgz#dade78c180cad8aaeb1e239bc5451b15b8a3a7c0"
-  integrity sha512-ornnUt2BOD/5R5nzKgoExACrLFPfp04cyC2hcGa6U3DPvYb4aQsO2A3xeftsGZRiQ0OfAACvtajIKNkn61nppQ==
+"@sentry-internal/eslint-config-sdk@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.76.0.tgz#40888c53176c95fd46ff805a5c88207b1e554e8e"
+  integrity sha512-kUiJhUx2/OgMAiKZ2pfKI9HHmgIdj6DGWSF3Uyzcd+IGix+Gk/Or84D6whyq0+bwvDfi+VcVW/zDxG63lvAYZw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.74.0"
-    "@sentry-internal/typescript" "7.74.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.76.0"
+    "@sentry-internal/typescript" "7.76.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,84 +180,78 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.74.0.tgz#4ceecc6e84ed2a8e07c41d5f52b15188ce251908"
-  integrity sha512-j0rTZKn4Mj0ywOIco8SxfI2f0xXo0O7dWlw8jfuPrYtn3BBtJc0/7lilz1ZwYTYKDAbDuhxKITaVP1V1R0ADDg==
+"@sentry-internal/eslint-plugin-sdk@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.76.0.tgz#a0cca6254fd1e3e9cefdd40b9e3a9f4257b5bf44"
+  integrity sha512-/F7LcVpiPUfgz2roC3TwoLrQ9y2/lihRNy6xUUGlWlKs41qOvG2LFJCRa0gKpYCodWbWsRsZ2C8kI32vpCOnpw==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.74.0.tgz#11b0762d0b18b01cc18dfb1e40bbaa41c6f97452"
-  integrity sha512-JK6IRGgdtZjswGfaGIHNWIThffhOHzVIIaGmglui+VFIzOsOqePjoxaDV0MEvzafxXZD7eWqGE5RGuZ0n6HFVg==
-  dependencies:
-    "@sentry/core" "7.74.0"
-    "@sentry/types" "7.74.0"
-    "@sentry/utils" "7.74.0"
-    tslib "^2.4.1 || ^1.9.3"
-
-"@sentry-internal/typescript@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.74.0.tgz#2dec70a1eec2684c8fc7abdc6b3ba03944c059c3"
-  integrity sha512-Xq71bUhZ2GIT76VfhNyJb9k5lmSDVFuaj9uy8PZ0W1DkY0fE4FEx2xWQUXuYy7M5+2QAHesGjCzHxZO2cx1HAQ==
-
-"@sentry/browser@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.74.0.tgz#4a01bccb34059894007b9a22a89892f2c4dff130"
-  integrity sha512-Njr8216Z1dFUcl6NqBOk20dssK9SjoVddY74Xq+Q4p3NfXBG3lkMcACXor7SFoJRZXq8CZWGS13Cc5KwViRw4g==
-  dependencies:
-    "@sentry-internal/tracing" "7.74.0"
-    "@sentry/core" "7.74.0"
-    "@sentry/replay" "7.74.0"
-    "@sentry/types" "7.74.0"
-    "@sentry/utils" "7.74.0"
-    tslib "^2.4.1 || ^1.9.3"
-
-"@sentry/core@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.74.0.tgz#2cfcb5133a4a3f82fbac09d3573ea9f508fb7c67"
-  integrity sha512-83NRuqn7nDZkSVBN5yJQqcpXDG4yMYiB7TkYUKrGTzBpRy6KUOrkCdybuKk0oraTIGiGSe5WEwCFySiNgR9FzA==
-  dependencies:
-    "@sentry/types" "7.74.0"
-    "@sentry/utils" "7.74.0"
-    tslib "^2.4.1 || ^1.9.3"
-
-"@sentry/node@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.74.0.tgz#c6b6704a3a238155f047972fd4c6944004347aba"
-  integrity sha512-uBmW2/z0cz/WFIG74ZF7lSipO0XNzMf9yrdqnZXnGDYsUZE4I4QiqDN0hNi6fkTgf9MYRC8uFem2OkAvyPJ74Q==
-  dependencies:
-    "@sentry-internal/tracing" "7.74.0"
-    "@sentry/core" "7.74.0"
-    "@sentry/types" "7.74.0"
-    "@sentry/utils" "7.74.0"
-    cookie "^0.5.0"
+"@sentry-internal/tracing@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.76.0.tgz#36c54425bc20c08e569e6da52e13d325611cad66"
+  integrity sha512-QQVIv+LS2sbGf/e5P2dRisHzXpy02dAcLqENLPG4sZ9otRaFNjdFYEqnlJ4qko+ORpJGQEQp/BX7Q/qzZQHlAg==
+  dependencies:
+    "@sentry/core" "7.76.0"
+    "@sentry/types" "7.76.0"
+    "@sentry/utils" "7.76.0"
+
+"@sentry-internal/typescript@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.76.0.tgz#0a9845859d6a05a372a3c1bd869ecc9b3085fb84"
+  integrity sha512-zQUX7ptLml27Qze+BVWtpiujVhRXLaCjI85d7EbySbVXAM3oz1Dp9IEPKXryrqlxD+41O/qcLNG21F01u6866g==
+
+"@sentry/browser@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.76.0.tgz#7d73573790023523f7d9c3757b8424b7ad60d664"
+  integrity sha512-83xA+cWrBhhkNuMllW5ucFsEO2NlUh2iBYtmg07lp3fyVW+6+b1yMKRnc4RFArJ+Wcq6UO+qk2ZEvrSAts1wEw==
+  dependencies:
+    "@sentry-internal/tracing" "7.76.0"
+    "@sentry/core" "7.76.0"
+    "@sentry/replay" "7.76.0"
+    "@sentry/types" "7.76.0"
+    "@sentry/utils" "7.76.0"
+
+"@sentry/core@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.76.0.tgz#b0d1dc399a862ea8a1c8a1c60a409e92eaf8e9e1"
+  integrity sha512-M+ptkCTeCNf6fn7p2MmEb1Wd9/JXUWxIT/0QEc+t11DNR4FYy1ZP2O9Zb3Zp2XacO7ORrlL3Yc+VIfl5JTgjfw==
+  dependencies:
+    "@sentry/types" "7.76.0"
+    "@sentry/utils" "7.76.0"
+
+"@sentry/node@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.76.0.tgz#9efc8bbe4825b4a5a4f853210364d21980dd790e"
+  integrity sha512-C+YZ5S5W9oTphdWTBgV+3nDdcV1ldnupIHylHzf2Co+xNtJ76V06N5NjdJ/l9+qvQjMn0DdSp7Uu7KCEeNBT/g==
+  dependencies:
+    "@sentry-internal/tracing" "7.76.0"
+    "@sentry/core" "7.76.0"
+    "@sentry/types" "7.76.0"
+    "@sentry/utils" "7.76.0"
     https-proxy-agent "^5.0.0"
-    lru_map "^0.3.3"
-    tslib "^2.4.1 || ^1.9.3"
 
-"@sentry/replay@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.74.0.tgz#618d40f7c9ecc7589dd14df0c560b20a24839d3f"
-  integrity sha512-GoYa3cHTTFVI/J1cnZ0i4X128mf/JljaswO3PWNTe2k3lSHq/LM5aV0keClRvwM0W8hlix8oOTT06nnenOUmmw==
+"@sentry/replay@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.76.0.tgz#bccf9ea4a6efc332a79d6a78f923697b9b283371"
+  integrity sha512-OACT7MfMHC/YGKnKST8SF1d6znr3Yu8fpUpfVVh2t9TNeh3+cQJVTOliHDqLy+k9Ljd5FtitgSn4IHtseCHDLQ==
   dependencies:
-    "@sentry/core" "7.74.0"
-    "@sentry/types" "7.74.0"
-    "@sentry/utils" "7.74.0"
+    "@sentry-internal/tracing" "7.76.0"
+    "@sentry/core" "7.76.0"
+    "@sentry/types" "7.76.0"
+    "@sentry/utils" "7.76.0"
 
-"@sentry/types@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.74.0.tgz#810a62cd28db21c5f15f131da6525d7ddf7a29db"
-  integrity sha512-rI5eIRbUycWjn6s6o3yAjjWtIvYSxZDdnKv5je2EZINfLKcMPj1dkl6wQd2F4y7gLfD/N6Y0wZYIXC3DUdJQQg==
+"@sentry/types@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.76.0.tgz#628c9899bfa82ea762708314c50fd82f2138587d"
+  integrity sha512-vj6z+EAbVrKAXmJPxSv/clpwS9QjPqzkraMFk2hIdE/kii8s8kwnkBwTSpIrNc8GnzV3qYC4r3qD+BXDxAGPaw==
 
-"@sentry/utils@7.74.0":
-  version "7.74.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.74.0.tgz#e0a16d345b2af6f8b09d157c8c8a3145d7a2070a"
-  integrity sha512-k3np8nuTPtx5KDODPtULfFln4UXdE56MZCcF19Jv6Ljxf+YN/Ady1+0Oi3e0XoSvFpWNyWnglauT7M65qCE6kg==
+"@sentry/utils@7.76.0":
+  version "7.76.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.76.0.tgz#6b540b387d3ac539abd20978f4d3ae235114f6ab"
+  integrity sha512-40jFD+yfQaKpFYINghdhovzec4IEpB7aAuyH/GtE7E0gLpcqnC72r55krEIVILfqIR2Mlr5OKUzyeoCyWAU/yw==
   dependencies:
-    "@sentry/types" "7.74.0"
-    tslib "^2.4.1 || ^1.9.3"
+    "@sentry/types" "7.76.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"
@@ -1178,11 +1172,6 @@ content-type@^1.0.4:
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
   integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
 
-cookie@^0.5.0:
-  version "0.5.0"
-  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
-  integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
-
 cookies@~0.8.0:
   version "0.8.0"
   resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90"
@@ -2680,11 +2669,6 @@ lru-cache@^6.0.0:
   dependencies:
     yallist "^4.0.0"
 
-lru_map@^0.3.3:
-  version "0.3.3"
-  resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
-  integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
-
 make-error@^1.1.1:
   version "1.3.6"
   resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
@@ -3636,11 +3620,6 @@ tslib@^2.3.1, tslib@^2.5.0:
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
   integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
 
-"tslib@^2.4.1 || ^1.9.3":
-  version "2.6.0"
-  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
-  integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
-
 tsscmp@1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"

From eb5f061065a3bf425e1a8b12ddfb7e347c21df7e Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 12 Nov 2023 22:29:02 +1300
Subject: [PATCH 174/239] test: New Sentry SDK version (#779)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 package.json        |  16 ++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 138 ++++++++++++++++++++++----------------------
 3 files changed, 78 insertions(+), 78 deletions(-)

diff --git a/package.json b/package.json
index b6533d9c..6dee5f8e 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.76.0",
-    "@sentry/core": "7.76.0",
-    "@sentry/node": "7.76.0",
-    "@sentry/types": "7.76.0",
-    "@sentry/utils": "7.76.0",
+    "@sentry/browser": "7.80.0",
+    "@sentry/core": "7.80.0",
+    "@sentry/node": "7.80.0",
+    "@sentry/types": "7.80.0",
+    "@sentry/utils": "7.80.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.76.0",
-    "@sentry-internal/typescript": "7.76.0",
+    "@sentry-internal/eslint-config-sdk": "7.80.0",
+    "@sentry-internal/typescript": "7.80.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index a64b42c3..32cc1c16 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_76_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_80_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 5181de8a..224854ea 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.76.0.tgz#40888c53176c95fd46ff805a5c88207b1e554e8e"
-  integrity sha512-kUiJhUx2/OgMAiKZ2pfKI9HHmgIdj6DGWSF3Uyzcd+IGix+Gk/Or84D6whyq0+bwvDfi+VcVW/zDxG63lvAYZw==
+"@sentry-internal/eslint-config-sdk@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.80.0.tgz#100f164097aaeac99db2e88d8f87e4667920b9ed"
+  integrity sha512-2jHITL4JQPfKUNIB49Mmcc3NRXIcQoeIYWTeIEldm7BQlWr0H3eMMnd6QdQ8VIXC6t1LAve9See1zB0bqDitlw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.76.0"
-    "@sentry-internal/typescript" "7.76.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.80.0"
+    "@sentry-internal/typescript" "7.80.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,78 +180,78 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.76.0.tgz#a0cca6254fd1e3e9cefdd40b9e3a9f4257b5bf44"
-  integrity sha512-/F7LcVpiPUfgz2roC3TwoLrQ9y2/lihRNy6xUUGlWlKs41qOvG2LFJCRa0gKpYCodWbWsRsZ2C8kI32vpCOnpw==
+"@sentry-internal/eslint-plugin-sdk@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.80.0.tgz#4824350ea3cd9bc0656398384724745e17291231"
+  integrity sha512-AmfeuXMjOp3MA6BM3xaAhRDQVtXz0lDjg9ACi7s/mgF2oJm12gkqZ/QJNDtyNOldIlo/UfCcQRPeu7zSNBWOng==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.76.0.tgz#36c54425bc20c08e569e6da52e13d325611cad66"
-  integrity sha512-QQVIv+LS2sbGf/e5P2dRisHzXpy02dAcLqENLPG4sZ9otRaFNjdFYEqnlJ4qko+ORpJGQEQp/BX7Q/qzZQHlAg==
-  dependencies:
-    "@sentry/core" "7.76.0"
-    "@sentry/types" "7.76.0"
-    "@sentry/utils" "7.76.0"
-
-"@sentry-internal/typescript@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.76.0.tgz#0a9845859d6a05a372a3c1bd869ecc9b3085fb84"
-  integrity sha512-zQUX7ptLml27Qze+BVWtpiujVhRXLaCjI85d7EbySbVXAM3oz1Dp9IEPKXryrqlxD+41O/qcLNG21F01u6866g==
-
-"@sentry/browser@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.76.0.tgz#7d73573790023523f7d9c3757b8424b7ad60d664"
-  integrity sha512-83xA+cWrBhhkNuMllW5ucFsEO2NlUh2iBYtmg07lp3fyVW+6+b1yMKRnc4RFArJ+Wcq6UO+qk2ZEvrSAts1wEw==
-  dependencies:
-    "@sentry-internal/tracing" "7.76.0"
-    "@sentry/core" "7.76.0"
-    "@sentry/replay" "7.76.0"
-    "@sentry/types" "7.76.0"
-    "@sentry/utils" "7.76.0"
-
-"@sentry/core@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.76.0.tgz#b0d1dc399a862ea8a1c8a1c60a409e92eaf8e9e1"
-  integrity sha512-M+ptkCTeCNf6fn7p2MmEb1Wd9/JXUWxIT/0QEc+t11DNR4FYy1ZP2O9Zb3Zp2XacO7ORrlL3Yc+VIfl5JTgjfw==
-  dependencies:
-    "@sentry/types" "7.76.0"
-    "@sentry/utils" "7.76.0"
-
-"@sentry/node@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.76.0.tgz#9efc8bbe4825b4a5a4f853210364d21980dd790e"
-  integrity sha512-C+YZ5S5W9oTphdWTBgV+3nDdcV1ldnupIHylHzf2Co+xNtJ76V06N5NjdJ/l9+qvQjMn0DdSp7Uu7KCEeNBT/g==
-  dependencies:
-    "@sentry-internal/tracing" "7.76.0"
-    "@sentry/core" "7.76.0"
-    "@sentry/types" "7.76.0"
-    "@sentry/utils" "7.76.0"
+"@sentry-internal/tracing@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.80.0.tgz#f9a6c0456b3cbf4a53c986a0b9208572d80e0756"
+  integrity sha512-P1Ab9gamHLsbH9D82i1HY8xfq9dP8runvc4g50AAd6OXRKaJ45f2KGRZUmnMEVqBQ7YoPYp2LFMkrhNYbcZEoQ==
+  dependencies:
+    "@sentry/core" "7.80.0"
+    "@sentry/types" "7.80.0"
+    "@sentry/utils" "7.80.0"
+
+"@sentry-internal/typescript@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.80.0.tgz#30cae7c5bd8049f1a4083de351f396091d749e60"
+  integrity sha512-CXXh8vm4a0ZJhlMv4YcapeDmJh1pGtlO7wsdmur4Pu2YF+32z8lDxE5sKrItSdgu7RX5eR7aGQGiJI+YKZgsDQ==
+
+"@sentry/browser@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.80.0.tgz#385fb59ac1d52b67919087f3d7044575ae0abbdd"
+  integrity sha512-Ngwjc+yyf/aH5q7iQM1LeDNlhM1Ilt4ZLUogTghZR/guwNWmCtk3OHcjOLz7fxBBj9wGFUc2pHPyeYM6bQhrEw==
+  dependencies:
+    "@sentry-internal/tracing" "7.80.0"
+    "@sentry/core" "7.80.0"
+    "@sentry/replay" "7.80.0"
+    "@sentry/types" "7.80.0"
+    "@sentry/utils" "7.80.0"
+
+"@sentry/core@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.80.0.tgz#7b8a460c19160b81ade20080333189f1a80c1410"
+  integrity sha512-nJiiymdTSEyI035/rdD3VOq6FlOZ2wWLR5bit9LK8a3rzHU3UXkwScvEo6zYgs0Xp1sC0yu1S9+0BEiYkmi29A==
+  dependencies:
+    "@sentry/types" "7.80.0"
+    "@sentry/utils" "7.80.0"
+
+"@sentry/node@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.80.0.tgz#7e060bc934a58a442b786246d46a5a0dd822ae44"
+  integrity sha512-J35fqe8J5ac/17ZXT0ML3opYGTOclqYNE9Sybs1y9n6BqacHyzH8By72YrdI03F7JJDHwrcGw+/H8hGpkCwi0Q==
+  dependencies:
+    "@sentry-internal/tracing" "7.80.0"
+    "@sentry/core" "7.80.0"
+    "@sentry/types" "7.80.0"
+    "@sentry/utils" "7.80.0"
     https-proxy-agent "^5.0.0"
 
-"@sentry/replay@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.76.0.tgz#bccf9ea4a6efc332a79d6a78f923697b9b283371"
-  integrity sha512-OACT7MfMHC/YGKnKST8SF1d6znr3Yu8fpUpfVVh2t9TNeh3+cQJVTOliHDqLy+k9Ljd5FtitgSn4IHtseCHDLQ==
+"@sentry/replay@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.80.0.tgz#0626d85af1d8573038d52ae9e244e3e95fa47385"
+  integrity sha512-wWnpuJq3OaDLp1LutE4oxWXnau04fvwuzBjuaFvOXOV+pB/kn+pDPuVOC5+FH/RMRZ5ftwX5+dF6fojfcLVGCg==
   dependencies:
-    "@sentry-internal/tracing" "7.76.0"
-    "@sentry/core" "7.76.0"
-    "@sentry/types" "7.76.0"
-    "@sentry/utils" "7.76.0"
+    "@sentry-internal/tracing" "7.80.0"
+    "@sentry/core" "7.80.0"
+    "@sentry/types" "7.80.0"
+    "@sentry/utils" "7.80.0"
 
-"@sentry/types@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.76.0.tgz#628c9899bfa82ea762708314c50fd82f2138587d"
-  integrity sha512-vj6z+EAbVrKAXmJPxSv/clpwS9QjPqzkraMFk2hIdE/kii8s8kwnkBwTSpIrNc8GnzV3qYC4r3qD+BXDxAGPaw==
+"@sentry/types@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.80.0.tgz#f6896de2d231a7f8d814cf1c981c474240e96d8a"
+  integrity sha512-4bpMO+2jWiWLDa8zbTASWWNLWe6yhjfPsa7/6VH5y9x1NGtL8oRbqUsTgsvjF3nmeHEMkHQsC8NHPaQ/ibFmZQ==
 
-"@sentry/utils@7.76.0":
-  version "7.76.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.76.0.tgz#6b540b387d3ac539abd20978f4d3ae235114f6ab"
-  integrity sha512-40jFD+yfQaKpFYINghdhovzec4IEpB7aAuyH/GtE7E0gLpcqnC72r55krEIVILfqIR2Mlr5OKUzyeoCyWAU/yw==
+"@sentry/utils@7.80.0":
+  version "7.80.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.80.0.tgz#5bd682fa9a382eea952d4fa3628f0f33e4240ff3"
+  integrity sha512-XbBCEl6uLvE50ftKwrEo6XWdDaZXHXu+kkHXTPWQEcnbvfZKLuG9V0Hxtxxq3xQgyWmuF05OH1GcqYqiO+v5Yg==
   dependencies:
-    "@sentry/types" "7.76.0"
+    "@sentry/types" "7.80.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 37e0b6976d43fc7a740fd2c09d9717b2d621aab6 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 12 Nov 2023 22:29:24 +1300
Subject: [PATCH 175/239] test: New Electron versions (#781)

Co-authored-by: timfish <timfish@users.noreply.github.com>
---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 6b914678..fdfff451 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.2","26.4.1","27.0.1","28.0.0-alpha.3"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.4","26.5.0","27.0.4","28.0.0-beta.4"]

From a7071338af7fee07d0435c31ef4e4b99c3bd35b6 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 30 Nov 2023 10:38:28 +0100
Subject: [PATCH 176/239] test: New Sentry SDK version (#786)

---
 package.json        |  14 ++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 138 ++++++++++++++++++++++----------------------
 3 files changed, 77 insertions(+), 77 deletions(-)

diff --git a/package.json b/package.json
index 6dee5f8e..1e4d8aaf 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.80.0",
-    "@sentry/core": "7.80.0",
-    "@sentry/node": "7.80.0",
-    "@sentry/types": "7.80.0",
-    "@sentry/utils": "7.80.0",
+    "@sentry/browser": "7.83.0",
+    "@sentry/core": "7.83.0",
+    "@sentry/node": "7.83.0",
+    "@sentry/types": "7.83.0",
+    "@sentry/utils": "7.83.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.80.0",
-    "@sentry-internal/typescript": "7.80.0",
+    "@sentry-internal/eslint-config-sdk": "7.83.0",
+    "@sentry-internal/typescript": "7.83.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 32cc1c16..29fdc8b3 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_80_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_83_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 224854ea..3b1764aa 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.80.0.tgz#100f164097aaeac99db2e88d8f87e4667920b9ed"
-  integrity sha512-2jHITL4JQPfKUNIB49Mmcc3NRXIcQoeIYWTeIEldm7BQlWr0H3eMMnd6QdQ8VIXC6t1LAve9See1zB0bqDitlw==
+"@sentry-internal/eslint-config-sdk@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.83.0.tgz#8b738e56bce49d312bc1088d8208215e2ef5773b"
+  integrity sha512-PndLHW4sKITkSgvB41EGm24XGeEQg8IOun7wgaUF7jlyrHuwGF5kf565nVItWsnfP2tAXlAwqxW+/YBOwETIPA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.80.0"
-    "@sentry-internal/typescript" "7.80.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.83.0"
+    "@sentry-internal/typescript" "7.83.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,78 +180,78 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.80.0.tgz#4824350ea3cd9bc0656398384724745e17291231"
-  integrity sha512-AmfeuXMjOp3MA6BM3xaAhRDQVtXz0lDjg9ACi7s/mgF2oJm12gkqZ/QJNDtyNOldIlo/UfCcQRPeu7zSNBWOng==
+"@sentry-internal/eslint-plugin-sdk@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.83.0.tgz#d7e050b8b713443af6c69e3c6192289218599c6b"
+  integrity sha512-IToQTETQEQucmtrKuPnJIwOfZcXCqtnk6OxIeHmUI4lRKMPUiUuiTI3doTKXiyFVmgZPjPvZjpjHUDmKngNQlw==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.80.0.tgz#f9a6c0456b3cbf4a53c986a0b9208572d80e0756"
-  integrity sha512-P1Ab9gamHLsbH9D82i1HY8xfq9dP8runvc4g50AAd6OXRKaJ45f2KGRZUmnMEVqBQ7YoPYp2LFMkrhNYbcZEoQ==
-  dependencies:
-    "@sentry/core" "7.80.0"
-    "@sentry/types" "7.80.0"
-    "@sentry/utils" "7.80.0"
-
-"@sentry-internal/typescript@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.80.0.tgz#30cae7c5bd8049f1a4083de351f396091d749e60"
-  integrity sha512-CXXh8vm4a0ZJhlMv4YcapeDmJh1pGtlO7wsdmur4Pu2YF+32z8lDxE5sKrItSdgu7RX5eR7aGQGiJI+YKZgsDQ==
-
-"@sentry/browser@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.80.0.tgz#385fb59ac1d52b67919087f3d7044575ae0abbdd"
-  integrity sha512-Ngwjc+yyf/aH5q7iQM1LeDNlhM1Ilt4ZLUogTghZR/guwNWmCtk3OHcjOLz7fxBBj9wGFUc2pHPyeYM6bQhrEw==
-  dependencies:
-    "@sentry-internal/tracing" "7.80.0"
-    "@sentry/core" "7.80.0"
-    "@sentry/replay" "7.80.0"
-    "@sentry/types" "7.80.0"
-    "@sentry/utils" "7.80.0"
-
-"@sentry/core@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.80.0.tgz#7b8a460c19160b81ade20080333189f1a80c1410"
-  integrity sha512-nJiiymdTSEyI035/rdD3VOq6FlOZ2wWLR5bit9LK8a3rzHU3UXkwScvEo6zYgs0Xp1sC0yu1S9+0BEiYkmi29A==
-  dependencies:
-    "@sentry/types" "7.80.0"
-    "@sentry/utils" "7.80.0"
-
-"@sentry/node@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.80.0.tgz#7e060bc934a58a442b786246d46a5a0dd822ae44"
-  integrity sha512-J35fqe8J5ac/17ZXT0ML3opYGTOclqYNE9Sybs1y9n6BqacHyzH8By72YrdI03F7JJDHwrcGw+/H8hGpkCwi0Q==
-  dependencies:
-    "@sentry-internal/tracing" "7.80.0"
-    "@sentry/core" "7.80.0"
-    "@sentry/types" "7.80.0"
-    "@sentry/utils" "7.80.0"
+"@sentry-internal/tracing@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.83.0.tgz#8f69d339569b020c495f8350a8ea527c369586e8"
+  integrity sha512-fY1ZyOiQaaUTuoq5rO+G4/5Ov3n8BnfNK7ck97yAGxy3w+E1CwhVZkXHEvTngNfdYV3ArxvlrtPRb9STFRqXvQ==
+  dependencies:
+    "@sentry/core" "7.83.0"
+    "@sentry/types" "7.83.0"
+    "@sentry/utils" "7.83.0"
+
+"@sentry-internal/typescript@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.83.0.tgz#88cd4f541b0d65f1fc65a88a2e005dc9874ec058"
+  integrity sha512-ZN8314Ra5Zxaeeag032D7OUFCmkfloLxNws51YXJ9BRWzKwSlOW8pXplo21t0c73hQv3hlBbqDrPCn+o+88z2A==
+
+"@sentry/browser@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.83.0.tgz#01e8ba0d3f4d4652e67c8b0d955d2f3903a19ab0"
+  integrity sha512-8v7QEaC/fVAHn8pi59ZlJznr7ZdOQIgtz8DAOJeJsC2vHTAxQ9nVkoMkJWjTp/qaDHUjSe5ob6eqaChuhi6t2g==
+  dependencies:
+    "@sentry-internal/tracing" "7.83.0"
+    "@sentry/core" "7.83.0"
+    "@sentry/replay" "7.83.0"
+    "@sentry/types" "7.83.0"
+    "@sentry/utils" "7.83.0"
+
+"@sentry/core@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.83.0.tgz#29bdd5aba40a6f25c01c68387b6a9aa13e27f20a"
+  integrity sha512-fglvpw8aWM6nWXzCjAVXIMTiTEAQ9G9b85IpDd/7L8fuwaFTPQAUSJXupF2PfbpQ3FUYbJt80dxshbERVJG8vQ==
+  dependencies:
+    "@sentry/types" "7.83.0"
+    "@sentry/utils" "7.83.0"
+
+"@sentry/node@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.83.0.tgz#199965f4c0cb3cd0d2ae590faa260d2505c38528"
+  integrity sha512-ibnON+5ovoGOsvcLxcWQu5XAc4rbkvDkzCP74YGnME3/NzRuo3cKam8bUL5Wlm15h68QzxskyNOLuj6BEJ6AfQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.83.0"
+    "@sentry/core" "7.83.0"
+    "@sentry/types" "7.83.0"
+    "@sentry/utils" "7.83.0"
     https-proxy-agent "^5.0.0"
 
-"@sentry/replay@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.80.0.tgz#0626d85af1d8573038d52ae9e244e3e95fa47385"
-  integrity sha512-wWnpuJq3OaDLp1LutE4oxWXnau04fvwuzBjuaFvOXOV+pB/kn+pDPuVOC5+FH/RMRZ5ftwX5+dF6fojfcLVGCg==
+"@sentry/replay@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.83.0.tgz#14fd39a638911f60b780d232d2056f0d19ed478e"
+  integrity sha512-B/rzmjmQ3ZWE68m4Z9rHIN3Fa/wkfVVTK+iSQtqErFflyMETMNwtWRNd6P9FhXnphEINZEbcn/UZF5w5xu/DfA==
   dependencies:
-    "@sentry-internal/tracing" "7.80.0"
-    "@sentry/core" "7.80.0"
-    "@sentry/types" "7.80.0"
-    "@sentry/utils" "7.80.0"
+    "@sentry-internal/tracing" "7.83.0"
+    "@sentry/core" "7.83.0"
+    "@sentry/types" "7.83.0"
+    "@sentry/utils" "7.83.0"
 
-"@sentry/types@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.80.0.tgz#f6896de2d231a7f8d814cf1c981c474240e96d8a"
-  integrity sha512-4bpMO+2jWiWLDa8zbTASWWNLWe6yhjfPsa7/6VH5y9x1NGtL8oRbqUsTgsvjF3nmeHEMkHQsC8NHPaQ/ibFmZQ==
+"@sentry/types@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.83.0.tgz#117e45900603190c547e52bba35e1b3d539d47fb"
+  integrity sha512-Bd+zJcy8p1VgCfQqUprmUaw0QPWUV+GmCt6zJRHrHTb2pwLahXv6sHJvQ8F8Va6S7Keuy088U+kHzUFGQLMZMQ==
 
-"@sentry/utils@7.80.0":
-  version "7.80.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.80.0.tgz#5bd682fa9a382eea952d4fa3628f0f33e4240ff3"
-  integrity sha512-XbBCEl6uLvE50ftKwrEo6XWdDaZXHXu+kkHXTPWQEcnbvfZKLuG9V0Hxtxxq3xQgyWmuF05OH1GcqYqiO+v5Yg==
+"@sentry/utils@7.83.0":
+  version "7.83.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.83.0.tgz#ec0fc0a468ec35ab9623603f1ba218dd58233eda"
+  integrity sha512-7SrZtgAn3pHFBqSSvV/VL0CWTBQ7VenJjok4+WGWd6/FhP3fKrEEd9rjVTUb2Pzq9WLJJYzdvxAG8RlggG+H4g==
   dependencies:
-    "@sentry/types" "7.80.0"
+    "@sentry/types" "7.83.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From c6f8118ce2fe003062977b2f863f146178f4a6a5 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 30 Nov 2023 10:38:53 +0100
Subject: [PATCH 177/239] test: New Electron versions (#785)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index fdfff451..02ca32c5 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.4","26.5.0","27.0.4","28.0.0-beta.4"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.6","26.6.1","27.1.2","28.0.0-beta.10"]

From c098afa57da4e3c9d563635ceca40b7a64c1836f Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 30 Nov 2023 18:02:46 +0100
Subject: [PATCH 178/239] fix: Patch `registerSchemesAsPrivileged` so sentry
 scheme isn't overwritten (#787)

---
 src/main/anr.ts                               |  2 +-
 src/main/ipc.ts                               | 24 ++++++++++++-------
 .../renderer-error-protocol/src/main.js       | 14 ++++++++++-
 3 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/main/anr.ts b/src/main/anr.ts
index a6c8f68e..01913d15 100644
--- a/src/main/anr.ts
+++ b/src/main/anr.ts
@@ -90,7 +90,7 @@ export function isAnrChildProcess(): boolean {
 }
 
 /** Creates a renderer ANR status hook */
-export function createRendererAnrStatusHook(): (status: RendererStatus, contents: WebContents) => void {
+export function createRendererAnrStatusHandler(): (status: RendererStatus, contents: WebContents) => void {
   function log(message: string, ...args: unknown[]): void {
     logger.log(`[Renderer ANR] ${message}`, ...args);
   }
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 4d8bb460..4a4772de 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -12,13 +12,18 @@ import {
   PROTOCOL_SCHEME,
   RendererStatus,
 } from '../common';
-import { createRendererAnrStatusHook } from './anr';
+import { createRendererAnrStatusHandler } from './anr';
 import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize';
 import { ElectronMainOptionsInternal } from './sdk';
 
 let KNOWN_RENDERERS: Set<number> | undefined;
 let WINDOW_ID_TO_WEB_CONTENTS: Map<string, number> | undefined;
 
+const SENTRY_CUSTOM_SCHEME = {
+  scheme: PROTOCOL_SCHEME,
+  privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true, secure: true },
+};
+
 async function newProtocolRenderer(): Promise<void> {
   KNOWN_RENDERERS = KNOWN_RENDERERS || new Set();
   WINDOW_ID_TO_WEB_CONTENTS = WINDOW_ID_TO_WEB_CONTENTS || new Map();
@@ -169,14 +174,17 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
     throw new SentryError("Sentry SDK should be initialized before the Electron app 'ready' event is fired");
   }
 
-  protocol.registerSchemesAsPrivileged([
-    {
-      scheme: PROTOCOL_SCHEME,
-      privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true, secure: true },
+  protocol.registerSchemesAsPrivileged([SENTRY_CUSTOM_SCHEME]);
+
+  // We Proxy this function so that later user calls to registerSchemesAsPrivileged don't overwrite our custom scheme
+  // eslint-disable-next-line @typescript-eslint/unbound-method
+  protocol.registerSchemesAsPrivileged = new Proxy(protocol.registerSchemesAsPrivileged, {
+    apply: (target, __, args: Parameters<typeof protocol.registerSchemesAsPrivileged>) => {
+      target([...args[0], SENTRY_CUSTOM_SCHEME]);
     },
-  ]);
+  });
 
-  const rendererStatusChanged = createRendererAnrStatusHook();
+  const rendererStatusChanged = createRendererAnrStatusHandler();
 
   whenAppReady
     .then(() => {
@@ -231,7 +239,7 @@ function configureClassic(options: ElectronMainOptionsInternal): void {
   ipcMain.on(IPCChannel.SCOPE, (_, jsonScope: string) => handleScope(options, jsonScope));
   ipcMain.on(IPCChannel.ENVELOPE, ({ sender }, env: Uint8Array | string) => handleEnvelope(options, env, sender));
 
-  const rendererStatusChanged = createRendererAnrStatusHook();
+  const rendererStatusChanged = createRendererAnrStatusHandler();
   ipcMain.on(IPCChannel.STATUS, ({ sender }, status: RendererStatus) => rendererStatusChanged(status, sender));
 }
 
diff --git a/test/e2e/test-apps/javascript/renderer-error-protocol/src/main.js b/test/e2e/test-apps/javascript/renderer-error-protocol/src/main.js
index 72ca4f53..84c3fbd8 100644
--- a/test/e2e/test-apps/javascript/renderer-error-protocol/src/main.js
+++ b/test/e2e/test-apps/javascript/renderer-error-protocol/src/main.js
@@ -1,6 +1,6 @@
 const path = require('path');
 
-const { app, BrowserWindow } = require('electron');
+const { app, BrowserWindow, protocol } = require('electron');
 const { init, IPCMode } = require('@sentry/electron');
 
 init({
@@ -11,6 +11,18 @@ init({
   onFatalError: () => {},
 });
 
+// Since we patch registerSchemesAsPrivileged, this should not overwrite the sentry scheme
+protocol.registerSchemesAsPrivileged([
+  {
+    scheme: 'custom1',
+    privileges: {
+      standard: true,
+      secure: true,
+      supportFetchAPI: true,
+    },
+  },
+]);
+
 app.on('ready', () => {
   const mainWindow = new BrowserWindow({
     show: false,

From 2beef37d467f767642d84c61c6721fbd657f2f2d Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 1 Dec 2023 13:42:25 +0100
Subject: [PATCH 179/239] test: New Sentry SDK version (#788)

---
 package.json        |  14 ++---
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 138 ++++++++++++++++++++++----------------------
 3 files changed, 77 insertions(+), 77 deletions(-)

diff --git a/package.json b/package.json
index 1e4d8aaf..58398e4b 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.83.0",
-    "@sentry/core": "7.83.0",
-    "@sentry/node": "7.83.0",
-    "@sentry/types": "7.83.0",
-    "@sentry/utils": "7.83.0",
+    "@sentry/browser": "7.84.0",
+    "@sentry/core": "7.84.0",
+    "@sentry/node": "7.84.0",
+    "@sentry/types": "7.84.0",
+    "@sentry/utils": "7.84.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.83.0",
-    "@sentry-internal/typescript": "7.83.0",
+    "@sentry-internal/eslint-config-sdk": "7.84.0",
+    "@sentry-internal/typescript": "7.84.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 29fdc8b3..bdadcef4 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_83_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_84_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 3b1764aa..2df3a98d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.83.0.tgz#8b738e56bce49d312bc1088d8208215e2ef5773b"
-  integrity sha512-PndLHW4sKITkSgvB41EGm24XGeEQg8IOun7wgaUF7jlyrHuwGF5kf565nVItWsnfP2tAXlAwqxW+/YBOwETIPA==
+"@sentry-internal/eslint-config-sdk@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.84.0.tgz#235e2cab61f7ee31e83798369d28af0928e8e952"
+  integrity sha512-p+W1WmFNtgY1iO8Metk4HHlrJqJ2CpDHQbYWuS4kc8Ry+wuyhWdYs/zD4H80rao6Thl0S6x5ywiv/M4lsaQrMw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.83.0"
-    "@sentry-internal/typescript" "7.83.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.84.0"
+    "@sentry-internal/typescript" "7.84.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,78 +180,78 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.83.0.tgz#d7e050b8b713443af6c69e3c6192289218599c6b"
-  integrity sha512-IToQTETQEQucmtrKuPnJIwOfZcXCqtnk6OxIeHmUI4lRKMPUiUuiTI3doTKXiyFVmgZPjPvZjpjHUDmKngNQlw==
+"@sentry-internal/eslint-plugin-sdk@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.84.0.tgz#e2fc9aeef835adcc358311fa73a937e90642e060"
+  integrity sha512-RiJPEhzaC8LUMPnxG5QcxPqVKmTCOypzkXH+6RfGQusYYiQHQxr4PzaKKnHlCTMRelRTiiPoJ/SJLMv0NbMDbw==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.83.0.tgz#8f69d339569b020c495f8350a8ea527c369586e8"
-  integrity sha512-fY1ZyOiQaaUTuoq5rO+G4/5Ov3n8BnfNK7ck97yAGxy3w+E1CwhVZkXHEvTngNfdYV3ArxvlrtPRb9STFRqXvQ==
-  dependencies:
-    "@sentry/core" "7.83.0"
-    "@sentry/types" "7.83.0"
-    "@sentry/utils" "7.83.0"
-
-"@sentry-internal/typescript@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.83.0.tgz#88cd4f541b0d65f1fc65a88a2e005dc9874ec058"
-  integrity sha512-ZN8314Ra5Zxaeeag032D7OUFCmkfloLxNws51YXJ9BRWzKwSlOW8pXplo21t0c73hQv3hlBbqDrPCn+o+88z2A==
-
-"@sentry/browser@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.83.0.tgz#01e8ba0d3f4d4652e67c8b0d955d2f3903a19ab0"
-  integrity sha512-8v7QEaC/fVAHn8pi59ZlJznr7ZdOQIgtz8DAOJeJsC2vHTAxQ9nVkoMkJWjTp/qaDHUjSe5ob6eqaChuhi6t2g==
-  dependencies:
-    "@sentry-internal/tracing" "7.83.0"
-    "@sentry/core" "7.83.0"
-    "@sentry/replay" "7.83.0"
-    "@sentry/types" "7.83.0"
-    "@sentry/utils" "7.83.0"
-
-"@sentry/core@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.83.0.tgz#29bdd5aba40a6f25c01c68387b6a9aa13e27f20a"
-  integrity sha512-fglvpw8aWM6nWXzCjAVXIMTiTEAQ9G9b85IpDd/7L8fuwaFTPQAUSJXupF2PfbpQ3FUYbJt80dxshbERVJG8vQ==
-  dependencies:
-    "@sentry/types" "7.83.0"
-    "@sentry/utils" "7.83.0"
-
-"@sentry/node@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.83.0.tgz#199965f4c0cb3cd0d2ae590faa260d2505c38528"
-  integrity sha512-ibnON+5ovoGOsvcLxcWQu5XAc4rbkvDkzCP74YGnME3/NzRuo3cKam8bUL5Wlm15h68QzxskyNOLuj6BEJ6AfQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.83.0"
-    "@sentry/core" "7.83.0"
-    "@sentry/types" "7.83.0"
-    "@sentry/utils" "7.83.0"
+"@sentry-internal/tracing@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.84.0.tgz#430da253ee5b075be4ef57f20ea842c0208bc6b0"
+  integrity sha512-y9bGYA0OM6PEREfd+nk4UURZy29tpIw+7vQwpxWfEVs2fqq0/5TBFX/tKFb8AKUI9lVM8v0bcF0bNSCnuPQZHQ==
+  dependencies:
+    "@sentry/core" "7.84.0"
+    "@sentry/types" "7.84.0"
+    "@sentry/utils" "7.84.0"
+
+"@sentry-internal/typescript@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.84.0.tgz#d7c29d8791c75f639fe6fdf5bacff146a5e7295f"
+  integrity sha512-Ls/2JCwjrROwaMcJwMwjkqlM5akjXX4SoYD7BwEpie/N7EkPIxM+gQTBS1lX7I7AUMVclyEu2xnDXSfb017aIQ==
+
+"@sentry/browser@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.84.0.tgz#7c82470f0afbb6178f26127894e40e9ce2b1e6d6"
+  integrity sha512-X50TlTKY9WzAnHsYc4FYrCWgm+CdVo0h02ggmodVBUpRLUBjj+cs5Q1plov/v/XeorSwmorNEMUu/n+XZNSsrA==
+  dependencies:
+    "@sentry-internal/tracing" "7.84.0"
+    "@sentry/core" "7.84.0"
+    "@sentry/replay" "7.84.0"
+    "@sentry/types" "7.84.0"
+    "@sentry/utils" "7.84.0"
+
+"@sentry/core@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.84.0.tgz#01d33fc452044ffd8ea57b20f60304b9cfa2b9e1"
+  integrity sha512-tbuwunbBx2kSex15IHCqHDnrMfIlqPc6w/76fwkGqokz3oh9GSEGlLICwmBWL8AypWimUg13IDtFpD0TJTriWA==
+  dependencies:
+    "@sentry/types" "7.84.0"
+    "@sentry/utils" "7.84.0"
+
+"@sentry/node@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.84.0.tgz#c06167106796b2b83c0a9b52fa56f8ca820034ca"
+  integrity sha512-Xm3fIXT3TZOQi+6uQBavI8iOehD3PkY7v0y3hog0d4lQTH88vQK9BBsI+jZEq81Em+RG/u7vZNiFo6YMTnWF7Q==
+  dependencies:
+    "@sentry-internal/tracing" "7.84.0"
+    "@sentry/core" "7.84.0"
+    "@sentry/types" "7.84.0"
+    "@sentry/utils" "7.84.0"
     https-proxy-agent "^5.0.0"
 
-"@sentry/replay@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.83.0.tgz#14fd39a638911f60b780d232d2056f0d19ed478e"
-  integrity sha512-B/rzmjmQ3ZWE68m4Z9rHIN3Fa/wkfVVTK+iSQtqErFflyMETMNwtWRNd6P9FhXnphEINZEbcn/UZF5w5xu/DfA==
+"@sentry/replay@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.84.0.tgz#7e17876d9a1802ee33800e2b2cbda4e026c0a2af"
+  integrity sha512-c4PxT0ZpvkR9zXNfmAk3ojkm6eZ9+NlDze09RFBOCNo69QwIN90hnvbjXFC1+vRIJsfgo78Zr0ya/Wzb3Rog7Q==
   dependencies:
-    "@sentry-internal/tracing" "7.83.0"
-    "@sentry/core" "7.83.0"
-    "@sentry/types" "7.83.0"
-    "@sentry/utils" "7.83.0"
+    "@sentry-internal/tracing" "7.84.0"
+    "@sentry/core" "7.84.0"
+    "@sentry/types" "7.84.0"
+    "@sentry/utils" "7.84.0"
 
-"@sentry/types@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.83.0.tgz#117e45900603190c547e52bba35e1b3d539d47fb"
-  integrity sha512-Bd+zJcy8p1VgCfQqUprmUaw0QPWUV+GmCt6zJRHrHTb2pwLahXv6sHJvQ8F8Va6S7Keuy088U+kHzUFGQLMZMQ==
+"@sentry/types@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.84.0.tgz#e8db86c36c61659c3b2558f0aa8b6a073a756117"
+  integrity sha512-VqGLIF3JOUrk7yIXjLXJvAORkZL1e3dDX0Q1okRehwyt/5CRE+mdUTeJZkBo9P9mBwgMyvtwklzOGGrzjb4eMA==
 
-"@sentry/utils@7.83.0":
-  version "7.83.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.83.0.tgz#ec0fc0a468ec35ab9623603f1ba218dd58233eda"
-  integrity sha512-7SrZtgAn3pHFBqSSvV/VL0CWTBQ7VenJjok4+WGWd6/FhP3fKrEEd9rjVTUb2Pzq9WLJJYzdvxAG8RlggG+H4g==
+"@sentry/utils@7.84.0":
+  version "7.84.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.84.0.tgz#32861d922fa31e86dd2863a1d9dfc5a369e98952"
+  integrity sha512-qdUVuxnRBvaf05AU+28R+xYtZmi/Ymf8os3Njq9g4XuA+QEkZLbzmIpRK5W9Ja7vUtjOeg29Xgg43A8znde9LQ==
   dependencies:
-    "@sentry/types" "7.83.0"
+    "@sentry/types" "7.84.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From c643b47db1247cc638fdb8a8ecd5ca7859270514 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 1 Dec 2023 15:36:43 +0100
Subject: [PATCH 180/239] fix: Add missing exports (#790)

---
 src/index.ts          | 12 ++++++++++--
 src/main/index.ts     |  7 +++++++
 src/renderer/index.ts | 17 ++++++++++++++++-
 3 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/src/index.ts b/src/index.ts
index 2984eaa4..8c05fdd2 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -19,24 +19,32 @@ export type {
   StackFrame,
   Stacktrace,
   Thread,
+  Transaction,
   User,
 } from '@sentry/types';
 
 export {
   addGlobalEventProcessor,
   addBreadcrumb,
+  addIntegration,
   captureException,
   captureEvent,
   captureMessage,
   configureScope,
   createTransport,
-  getActiveTransaction,
   getHubFromCarrier,
   getCurrentHub,
   Hub,
+  lastEventId,
   makeMain,
   Scope,
   startTransaction,
+  getActiveSpan,
+  startSpan,
+  startInactiveSpan,
+  startSpanManual,
+  continueTrace,
+  SDK_VERSION,
   setContext,
   setExtra,
   setExtras,
@@ -46,8 +54,8 @@ export {
   withScope,
   FunctionToString,
   InboundFilters,
-  trace,
 } from '@sentry/core';
+export type { SpanStatusType } from '@sentry/core';
 
 import type { enableAnrDetection as enableNodeAnrDetection } from '@sentry/node';
 
diff --git a/src/main/index.ts b/src/main/index.ts
index 4f17eedf..8e637f32 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -26,6 +26,7 @@ export type {
 export {
   addGlobalEventProcessor,
   addBreadcrumb,
+  addIntegration,
   captureException,
   captureEvent,
   captureMessage,
@@ -37,6 +38,11 @@ export {
   makeMain,
   Scope,
   startTransaction,
+  getActiveSpan,
+  startSpan,
+  startInactiveSpan,
+  startSpanManual,
+  continueTrace,
   setContext,
   setExtra,
   setExtras,
@@ -47,6 +53,7 @@ export {
   FunctionToString,
   InboundFilters,
 } from '@sentry/core';
+export type { SpanStatusType } from '@sentry/core';
 
 export type { NodeOptions } from '@sentry/node';
 export { flush, close, NodeClient, lastEventId } from '@sentry/node';
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index d3f5a14c..6e267b84 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -23,6 +23,7 @@ export type {
 export {
   addGlobalEventProcessor,
   addBreadcrumb,
+  addIntegration,
   captureException,
   captureEvent,
   captureMessage,
@@ -34,6 +35,11 @@ export {
   makeMain,
   Scope,
   startTransaction,
+  getActiveSpan,
+  startSpan,
+  startInactiveSpan,
+  startSpanManual,
+  continueTrace,
   setContext,
   setExtra,
   setExtras,
@@ -44,8 +50,17 @@ export {
   FunctionToString,
   InboundFilters,
 } from '@sentry/core';
+export type { SpanStatusType } from '@sentry/core';
 
-export { BrowserClient, BrowserTracing, lastEventId, showReportDialog, Replay } from '@sentry/browser';
+export {
+  addTracingExtensions,
+  BrowserClient,
+  BrowserTracing,
+  BrowserProfilingIntegration,
+  lastEventId,
+  showReportDialog,
+  Replay,
+} from '@sentry/browser';
 export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser';
 
 export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations };

From b7cf8b46637c4bae0a307781f5de7c01e895331b Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 1 Dec 2023 15:59:43 +0100
Subject: [PATCH 181/239] meta: Update changelog for 4.15.0 release (#791)

---
 CHANGELOG.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 38d5a593..4c0035a3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
 
 ## Unreleased
 
+## 4.15.0
+
+- feat: Update from [v7.74.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.74.0) to
+  [v7.84.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.84.0) of JavaScript SDKs (#779, #786, #788)
+- fix: Patch registerSchemesAsPrivileged so sentry scheme isn't overwritten (#787)
+- fix: Add missing exports (#790)
+
 ## 4.14.0
 
 - feat: Renderer process ANR detection with stack traces (#770)

From 7e351a72b2dacfdcd7495ce08a06f2c8a65dc046 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 1 Dec 2023 19:04:01 +0100
Subject: [PATCH 182/239] test: Only test ANR on newer versions of Electron
 (#793)

---
 test/e2e/test-apps/anr/anr-main/recipe.yml     | 2 +-
 test/e2e/test-apps/anr/anr-renderer/recipe.yml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/test/e2e/test-apps/anr/anr-main/recipe.yml b/test/e2e/test-apps/anr/anr-main/recipe.yml
index d65df596..db0bca0a 100644
--- a/test/e2e/test-apps/anr/anr-main/recipe.yml
+++ b/test/e2e/test-apps/anr/anr-main/recipe.yml
@@ -1,4 +1,4 @@
 description: ANR Main Event
 category: ANR
 command: yarn
-condition: version.major >= 4
+condition: version.major >= 13
diff --git a/test/e2e/test-apps/anr/anr-renderer/recipe.yml b/test/e2e/test-apps/anr/anr-renderer/recipe.yml
index dc3ac921..e88f26b5 100644
--- a/test/e2e/test-apps/anr/anr-renderer/recipe.yml
+++ b/test/e2e/test-apps/anr/anr-renderer/recipe.yml
@@ -1,4 +1,4 @@
 description: ANR Renderer Event
 category: ANR
 command: yarn
-condition: version.major >= 4
+condition: version.major >= 13

From 7c7323d06c6b50a6b0b0e58e1e2507aa75d9ec03 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Fri, 1 Dec 2023 18:38:30 +0000
Subject: [PATCH 183/239] release: 4.15.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 58398e4b..eb62ea3c 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.14.0",
+  "version": "4.15.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From e84a302694d1aff52cd1019f3724f6bf343792a8 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 5 Dec 2023 11:32:31 +0100
Subject: [PATCH 184/239] fix: Don't call `app.getPath('userData')` before SDK
 `init` (#797)

---
 CHANGELOG.md                                  |  4 ++++
 src/main/fs.ts                                |  5 +++-
 .../integrations/sentry-minidump/index.ts     |  4 ++--
 src/main/sessions.ts                          | 24 ++++++++++++-------
 src/main/transports/electron-offline-net.ts   |  4 ++--
 test/unit/getPath-test-app/main.js            | 13 ++++++++++
 test/unit/getPath-test-app/package.json       |  9 +++++++
 test/unit/getPath.test.ts                     | 13 ++++++++++
 8 files changed, 63 insertions(+), 13 deletions(-)
 create mode 100644 test/unit/getPath-test-app/main.js
 create mode 100644 test/unit/getPath-test-app/package.json
 create mode 100644 test/unit/getPath.test.ts

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4c0035a3..9a133eb7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ## Unreleased
 
+## 4.15.1
+
+- fix: Don't call `app.getPath('userData')` before SDK `init` (#797)
+
 ## 4.15.0
 
 - feat: Update from [v7.74.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.74.0) to
diff --git a/src/main/fs.ts b/src/main/fs.ts
index 29d01507..3539ffe0 100644
--- a/src/main/fs.ts
+++ b/src/main/fs.ts
@@ -3,7 +3,10 @@ import { mkdir, readdir, readFile, stat, statSync, unlink, writeFile } from 'fs'
 import { dirname, join, resolve } from 'path';
 import { promisify } from 'util';
 
-export const sentryCachePath = join(app ? app.getPath('userData') : '', 'sentry');
+/** Gets the Sentry Cache path */
+export function getSentryCachePath(): string {
+  return join(app.getPath('userData'), 'sentry');
+}
 
 export const writeFileAsync = promisify(writeFile);
 export const readFileAsync = promisify(readFile);
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index a285460b..94b72158 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -7,7 +7,7 @@ import { app, crashReporter } from 'electron';
 import { mergeEvents } from '../../../common';
 import { getDefaultEnvironment, getDefaultReleaseName, getEventDefaults } from '../../context';
 import { EXIT_REASONS, onChildProcessGone, onRendererProcessGone } from '../../electron-normalize';
-import { sentryCachePath } from '../../fs';
+import { getSentryCachePath } from '../../fs';
 import { getRendererProperties, trackRendererProperties } from '../../renderers';
 import { ElectronMainOptions } from '../../sdk';
 import { checkPreviousSession, sessionCrashed } from '../../sessions';
@@ -50,7 +50,7 @@ export class SentryMinidump implements Integration {
 
     this._startCrashReporter();
 
-    this._scopeStore = new BufferedWriteStore<PreviousRun>(sentryCachePath, 'scope_v3', {
+    this._scopeStore = new BufferedWriteStore<PreviousRun>(getSentryCachePath(), 'scope_v3', {
       scope: new Scope(),
     });
 
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index 51ec7736..df78b67c 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -5,16 +5,24 @@ import { logger } from '@sentry/utils';
 import { app } from 'electron';
 
 import { isAnrChildProcess } from './anr';
-import { sentryCachePath } from './fs';
+import { getSentryCachePath } from './fs';
 import { Store } from './store';
 
 const PERSIST_INTERVAL_MS = 60_000;
 
 /** Stores the app session in case of termination due to main process crash or app killed */
-const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined);
-
+let sessionStore: Store<SessionContext | undefined> | undefined;
 /** Previous session if it did not exit cleanly */
-let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get();
+let previousSession: Promise<Partial<Session> | undefined> | undefined;
+
+function getSessionStore(): Store<SessionContext | undefined> {
+  if (!sessionStore) {
+    sessionStore = new Store<SessionContext | undefined>(getSentryCachePath(), 'session', undefined);
+    previousSession = sessionStore.get();
+  }
+
+  return sessionStore;
+}
 
 let persistTimer: NodeJS.Timer | undefined;
 
@@ -27,14 +35,14 @@ export async function startSession(sendOnCreate: boolean): Promise<void> {
     hub.captureSession();
   }
 
-  await sessionStore.set(session);
+  await getSessionStore().set(session);
 
   // Every PERSIST_INTERVAL, write the session to disk
   persistTimer = setInterval(async () => {
     const currentSession = hub.getScope()?.getSession();
     // Only bother saving if it hasn't already ended
     if (currentSession && currentSession.status === 'ok') {
-      await sessionStore.set(currentSession);
+      await getSessionStore().set(currentSession);
     }
   }, PERSIST_INTERVAL_MS);
 }
@@ -60,7 +68,7 @@ export async function endSession(): Promise<void> {
     logger.log('No session');
   }
 
-  await sessionStore.clear();
+  await getSessionStore().clear();
 
   await flush(2_000);
 }
@@ -71,7 +79,7 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined):
     return false;
   }
 
-  const previousSessionModified = await sessionStore.getModifiedDate();
+  const previousSessionModified = await getSessionStore().getModifiedDate();
   // There is no previous session
   if (previousSessionModified == undefined) {
     return false;
diff --git a/src/main/transports/electron-offline-net.ts b/src/main/transports/electron-offline-net.ts
index ef45dd6b..ac59a014 100644
--- a/src/main/transports/electron-offline-net.ts
+++ b/src/main/transports/electron-offline-net.ts
@@ -4,7 +4,7 @@ import { logger } from '@sentry/utils';
 import { net } from 'electron';
 import { join } from 'path';
 
-import { sentryCachePath } from '../fs';
+import { getSentryCachePath } from '../fs';
 import { createElectronNetRequestExecutor, ElectronNetTransportOptions } from './electron-net';
 import { PersistedRequestQueue } from './queue';
 
@@ -59,7 +59,7 @@ function isRateLimited(result: TransportMakeRequestResponse): boolean {
 export function makeElectronOfflineTransport(options: ElectronOfflineTransportOptions): Transport {
   const netMakeRequest = createElectronNetRequestExecutor(options.url, options.headers || {});
   const queue: PersistedRequestQueue = new PersistedRequestQueue(
-    join(sentryCachePath, 'queue'),
+    join(getSentryCachePath(), 'queue'),
     options.maxQueueAgeDays,
     options.maxQueueCount,
   );
diff --git a/test/unit/getPath-test-app/main.js b/test/unit/getPath-test-app/main.js
new file mode 100644
index 00000000..8355bfbf
--- /dev/null
+++ b/test/unit/getPath-test-app/main.js
@@ -0,0 +1,13 @@
+const { app } = require('electron');
+
+process.on('uncaughtException', () => {
+  app.exit(1);
+});
+
+app.getPath = () => {
+  app.exit(1);
+};
+
+require('../../../main');
+
+app.exit(0);
diff --git a/test/unit/getPath-test-app/package.json b/test/unit/getPath-test-app/package.json
new file mode 100644
index 00000000..a3e1e5fc
--- /dev/null
+++ b/test/unit/getPath-test-app/package.json
@@ -0,0 +1,9 @@
+{
+  "name": "electron-test",
+  "version": "1.0.0",
+  "main": "main.js",
+  "scripts": {
+
+    "start": "../../../node_modules/.bin/electron ."
+  }
+}
diff --git a/test/unit/getPath.test.ts b/test/unit/getPath.test.ts
new file mode 100644
index 00000000..945a3349
--- /dev/null
+++ b/test/unit/getPath.test.ts
@@ -0,0 +1,13 @@
+import { expect } from 'chai';
+import { spawnSync } from 'child_process';
+import { join } from 'path';
+
+describe('app.getPath', () => {
+  it('not called before init', () => {
+    const result = spawnSync('yarn', ['start'], { cwd: join(__dirname, 'getPath-test-app') });
+    // status is null on Windows in CI for some unknown reason
+    if (process.platform !== 'win32') {
+      expect(result.status).to.equal(0);
+    }
+  });
+});

From 3101a2da137d733a48042e83cfa62581b2cd03dc Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 5 Dec 2023 10:33:05 +0000
Subject: [PATCH 185/239] release: 4.15.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index eb62ea3c..2b6245b4 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.15.0",
+  "version": "4.15.1",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 85c6177279f6ff16c26e38fd7194db5e0c63db2e Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 6 Dec 2023 08:53:41 +0100
Subject: [PATCH 186/239] test: Test less old Electron versions (#794)

---
 scripts/e2e-test-versions.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/e2e-test-versions.js b/scripts/e2e-test-versions.js
index ff6f32a7..37d406b7 100644
--- a/scripts/e2e-test-versions.js
+++ b/scripts/e2e-test-versions.js
@@ -6,6 +6,7 @@ if (process.env.GITHUB_REF && process.env.GITHUB_REF.includes('release/')) {
   // For release builds we test all versions
   console.log(JSON.stringify(versions));
 } else {
+  const versionCount = process.platform === 'darwin' ? -3 : -7;
   // Otherwise we test the oldest version and the last 10 versions
-  console.log(JSON.stringify([versions[0], ...versions.slice(-10)]));
+  console.log(JSON.stringify([versions[0], ...versions.slice(versionCount)]));
 }

From b279708a5b3b28151d6abd83ac48cfd1fbb08717 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 18 Dec 2023 13:01:55 +0100
Subject: [PATCH 187/239] feat: Browser profiling (#799)

---
 src/common/normalize.ts                       |  13 +-
 src/main/integrations/index.ts                |   1 +
 src/main/integrations/renderer-profiling.ts   | 136 +++++++++++++++++
 src/main/ipc.ts                               |  19 ++-
 src/main/sdk.ts                               |   9 ++
 test/e2e/recipe/index.ts                      |   2 +-
 test/e2e/recipe/normalize.ts                  |  29 ++--
 test/e2e/server/index.ts                      |  10 +-
 .../other/browser-profiling/event.json        | 141 ++++++++++++++++++
 .../other/browser-profiling/package.json      |   8 +
 .../other/browser-profiling/recipe.yml        |   4 +
 .../other/browser-profiling/src/index.html    |  47 ++++++
 .../other/browser-profiling/src/main.js       |  25 ++++
 13 files changed, 427 insertions(+), 17 deletions(-)
 create mode 100644 src/main/integrations/renderer-profiling.ts
 create mode 100644 test/e2e/test-apps/other/browser-profiling/event.json
 create mode 100644 test/e2e/test-apps/other/browser-profiling/package.json
 create mode 100644 test/e2e/test-apps/other/browser-profiling/recipe.yml
 create mode 100644 test/e2e/test-apps/other/browser-profiling/src/index.html
 create mode 100644 test/e2e/test-apps/other/browser-profiling/src/main.js

diff --git a/src/common/normalize.ts b/src/common/normalize.ts
index 4ccb50d9..c2eda157 100644
--- a/src/common/normalize.ts
+++ b/src/common/normalize.ts
@@ -1,4 +1,4 @@
-import { Envelope, Event, ReplayEvent } from '@sentry/types';
+import { Envelope, Event, Profile, ReplayEvent } from '@sentry/types';
 import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem } from '@sentry/utils';
 
 /**
@@ -111,3 +111,14 @@ export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: stri
 
   return isReplay ? modifiedEnvelope : envelope;
 }
+
+/**
+ * Normalizes all URLs in a profile
+ */
+export function normaliseProfile(profile: Profile, basePath: string): void {
+  for (const frame of profile.profile.frames) {
+    if (frame.abs_path) {
+      frame.abs_path = normalizeUrl(frame.abs_path, basePath);
+    }
+  }
+}
diff --git a/src/main/integrations/index.ts b/src/main/integrations/index.ts
index e723f064..9c3a5fd3 100644
--- a/src/main/integrations/index.ts
+++ b/src/main/integrations/index.ts
@@ -10,3 +10,4 @@ export { AdditionalContext } from './additional-context';
 export { Net } from './net-breadcrumbs';
 export { ChildProcess } from './child-process';
 export { Screenshots } from './screenshots';
+export { RendererProfiling } from './renderer-profiling';
diff --git a/src/main/integrations/renderer-profiling.ts b/src/main/integrations/renderer-profiling.ts
new file mode 100644
index 00000000..84ff10e5
--- /dev/null
+++ b/src/main/integrations/renderer-profiling.ts
@@ -0,0 +1,136 @@
+import { NodeClient } from '@sentry/node';
+import { Event, Integration, Profile } from '@sentry/types';
+import { forEachEnvelopeItem, LRUMap } from '@sentry/utils';
+import { app } from 'electron';
+
+import { normaliseProfile } from '../../common';
+import { getDefaultEnvironment, getDefaultReleaseName } from '../context';
+import { ELECTRON_MAJOR_VERSION } from '../electron-normalize';
+import { ElectronMainOptionsInternal } from '../sdk';
+
+const DOCUMENT_POLICY_HEADER = 'Document-Policy';
+const JS_PROFILING_HEADER = 'js-profiling';
+
+// A cache of renderer profiles which need attaching to events
+let RENDERER_PROFILES: LRUMap<string, Profile> | undefined;
+
+/**
+ * Caches a profile to later be re-attached to an event
+ */
+export function rendererProfileFromIpc(event: Event, profile: Profile): void {
+  if (!RENDERER_PROFILES) {
+    return;
+  }
+
+  const profile_id = profile.event_id;
+  RENDERER_PROFILES.set(profile_id, profile);
+
+  if (event) {
+    event.contexts = {
+      ...event.contexts,
+      // Re-add the profile context which we can later use to find the correct profile
+      profile: {
+        profile_id,
+      },
+    };
+  }
+}
+
+function addJsProfilingHeader(
+  responseHeaders: Record<string, string | string[]> = {},
+): Electron.HeadersReceivedResponse {
+  if (responseHeaders[DOCUMENT_POLICY_HEADER]) {
+    const docPolicy = responseHeaders[DOCUMENT_POLICY_HEADER];
+
+    if (Array.isArray(docPolicy)) {
+      docPolicy.push(JS_PROFILING_HEADER);
+    } else {
+      responseHeaders[DOCUMENT_POLICY_HEADER] = [docPolicy, JS_PROFILING_HEADER];
+    }
+  } else {
+    responseHeaders[DOCUMENT_POLICY_HEADER] = JS_PROFILING_HEADER;
+  }
+
+  return { responseHeaders };
+}
+
+/**
+ * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions
+ */
+export class RendererProfiling implements Integration {
+  /** @inheritDoc */
+  public static id: string = 'RendererProfiling';
+
+  /** @inheritDoc */
+  public readonly name: string;
+
+  public constructor() {
+    this.name = RendererProfiling.id;
+  }
+
+  /** @inheritDoc */
+  public setupOnce(): void {
+    //
+  }
+
+  /** @inheritDoc */
+  public setup(client: NodeClient): void {
+    const options = client.getOptions() as ElectronMainOptionsInternal;
+    if (!options.enableRendererProfiling) {
+      return;
+    }
+
+    if (ELECTRON_MAJOR_VERSION < 15) {
+      throw new Error('Renderer profiling requires Electron 15+ (Chromium 94+)');
+    }
+
+    RENDERER_PROFILES = new LRUMap(10);
+
+    app.on('ready', () => {
+      // Ensure the correct headers are set to enable the browser profiler
+      for (const sesh of options.getSessions()) {
+        sesh.webRequest.onHeadersReceived((details, callback) => {
+          callback(addJsProfilingHeader(details.responseHeaders));
+        });
+      }
+    });
+
+    // Copy the profiles back into the event envelopes
+    client.on('beforeEnvelope', (envelope) => {
+      let profile_id: string | undefined;
+
+      forEachEnvelopeItem(envelope, (item, type) => {
+        if (type !== 'transaction') {
+          return;
+        }
+
+        for (let j = 1; j < item.length; j++) {
+          const event = item[j] as Event;
+
+          if (event && event.contexts && event.contexts.profile && event.contexts.profile.profile_id) {
+            profile_id = event.contexts.profile.profile_id as string;
+            // This can be removed as it's no longer needed
+            delete event.contexts.profile;
+          }
+        }
+      });
+
+      if (!profile_id) {
+        return;
+      }
+
+      const profile = RENDERER_PROFILES?.remove(profile_id);
+
+      if (!profile) {
+        return;
+      }
+
+      normaliseProfile(profile, app.getAppPath());
+      profile.release = options.release || getDefaultReleaseName();
+      profile.environment = options.environment || getDefaultEnvironment();
+
+      // @ts-expect-error untyped envelope
+      envelope[1].push([{ type: 'profile' }, profile]);
+    });
+  }
+}
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 4a4772de..8d80a37a 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -1,5 +1,5 @@
 import { captureEvent, configureScope, getCurrentHub, Scope } from '@sentry/core';
-import { Attachment, AttachmentItem, Envelope, Event, EventItem } from '@sentry/types';
+import { Attachment, AttachmentItem, Envelope, Event, EventItem, Profile } from '@sentry/types';
 import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils';
 import { app, ipcMain, protocol, WebContents, webContents } from 'electron';
 import { TextDecoder, TextEncoder } from 'util';
@@ -14,6 +14,7 @@ import {
 } from '../common';
 import { createRendererAnrStatusHandler } from './anr';
 import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize';
+import { rendererProfileFromIpc } from './integrations/renderer-profiling';
 import { ElectronMainOptionsInternal } from './sdk';
 
 let KNOWN_RENDERERS: Set<number> | undefined;
@@ -88,9 +89,10 @@ function handleEvent(options: ElectronMainOptionsInternal, jsonEvent: string, co
   captureEventFromRenderer(options, event, [], contents);
 }
 
-function eventFromEnvelope(envelope: Envelope): [Event, Attachment[]] | undefined {
+function eventFromEnvelope(envelope: Envelope): [Event, Attachment[], Profile | undefined] | undefined {
   let event: Event | undefined;
   const attachments: Attachment[] = [];
+  let profile: Profile | undefined;
 
   forEachEnvelopeItem(envelope, (item, type) => {
     if (type === 'event' || type === 'transaction') {
@@ -104,10 +106,12 @@ function eventFromEnvelope(envelope: Envelope): [Event, Attachment[]] | undefine
         contentType: headers.content_type,
         data,
       });
+    } else if (type === 'profile') {
+      profile = item[1] as unknown as Profile;
     }
   });
 
-  return event ? [event, attachments] : undefined;
+  return event ? [event, attachments, profile] : undefined;
 }
 
 function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array | string, contents?: WebContents): void {
@@ -115,7 +119,14 @@ function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array |
 
   const eventAndAttachments = eventFromEnvelope(envelope);
   if (eventAndAttachments) {
-    const [event, attachments] = eventAndAttachments;
+    const [event, attachments, profile] = eventAndAttachments;
+
+    if (profile) {
+      // We have a 'profile' item and there is no way for us to pass this through event capture
+      // so store them in a cache and reattach them via the `beforeEnvelope` hook before sending
+      rendererProfileFromIpc(event, profile);
+    }
+
     captureEventFromRenderer(options, event, attachments, contents);
   } else {
     const normalizedEnvelope = normalizeUrlsInReplayEnvelope(envelope, app.getAppPath());
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index b0ab3c04..81755ff6 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -16,6 +16,7 @@ import {
   Net,
   OnUncaughtException,
   PreloadInjection,
+  RendererProfiling,
   Screenshots,
   SentryMinidump,
 } from './integrations';
@@ -34,6 +35,7 @@ export const defaultIntegrations: Integration[] = [
   new PreloadInjection(),
   new AdditionalContext(),
   new Screenshots(),
+  new RendererProfiling(),
   ...defaultNodeIntegrations.filter(
     (integration) => integration.name !== 'OnUncaughtException' && integration.name !== 'Context',
   ),
@@ -77,6 +79,13 @@ export interface ElectronMainOptionsInternal extends Options<ElectronOfflineTran
    * renderers.
    */
   attachScreenshot?: boolean;
+
+  /**
+   * Enables injection of 'js-profiling' document policy headers and ensure profiles are forwarded with transactions
+   *
+   * Requires Electron 15+
+   */
+  enableRendererProfiling?: boolean;
 }
 
 // getSessions and ipcMode properties are optional because they have defaults
diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index f18088fd..4f37dca1 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -257,7 +257,7 @@ export class RecipeRunner {
     }
 
     for (const event of testServer.events) {
-      event.data = normalize(event.data);
+      normalize(event);
     }
 
     for (const [i, expectedEvent] of expectedEvents.entries()) {
diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts
index f65a3ab0..69a1bb46 100644
--- a/test/e2e/recipe/normalize.ts
+++ b/test/e2e/recipe/normalize.ts
@@ -1,14 +1,18 @@
 /* eslint-disable complexity */
-import { Event, ReplayEvent, Session, Transaction } from '@sentry/types';
+import { Event, Profile, ReplayEvent, Session, Transaction } from '@sentry/types';
+
+import { TestServerEvent } from '../server';
 
 type EventOrSession = Event | Transaction | Session;
 
-export function normalize(event: EventOrSession): EventOrSession {
-  if (eventIsSession(event)) {
-    return normalizeSession(event as Session);
+export function normalize(event: TestServerEvent<Event | Transaction | Session>): void {
+  if (eventIsSession(event.data)) {
+    normalizeSession(event.data as Session);
   } else {
-    return normalizeEvent(event as Event & ReplayEvent);
+    normalizeEvent(event.data as Event & ReplayEvent);
   }
+
+  normalizeProfile(event.profile);
 }
 
 export function eventIsSession(data: EventOrSession): boolean {
@@ -21,7 +25,7 @@ export function eventIsSession(data: EventOrSession): boolean {
  * All properties that are timestamps, versions, ids or variables that may vary
  * by platform are replaced with placeholder strings
  */
-function normalizeSession(session: Session): Session {
+function normalizeSession(session: Session): void {
   if (session.sid) {
     session.sid = '{{id}}';
   }
@@ -37,8 +41,6 @@ function normalizeSession(session: Session): Session {
   if (session.duration) {
     session.duration = 0;
   }
-
-  return session;
 }
 
 /**
@@ -47,7 +49,7 @@ function normalizeSession(session: Session): Session {
  * All properties that are timestamps, versions, ids or variables that may vary
  * by platform are replaced with placeholder strings
  */
-function normalizeEvent(event: Event & ReplayEvent): Event {
+function normalizeEvent(event: Event & ReplayEvent): void {
   if (event.sdk?.version) {
     event.sdk.version = '{{version}}';
   }
@@ -193,6 +195,13 @@ function normalizeEvent(event: Event & ReplayEvent): Event {
       breadcrumb.timestamp = 0;
     }
   }
+}
+
+export function normalizeProfile(profile: Profile | undefined): void {
+  if (!profile) {
+    return;
+  }
 
-  return event;
+  profile.event_id = '{{id}}';
+  profile.timestamp = '{{time}}';
 }
diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts
index aee950a9..00e501f3 100644
--- a/test/e2e/server/index.ts
+++ b/test/e2e/server/index.ts
@@ -1,4 +1,4 @@
-import { Event, ReplayEvent, Session, Transaction } from '@sentry/types';
+import { Event, Profile, ReplayEvent, Session, Transaction } from '@sentry/types';
 import { forEachEnvelopeItem, parseEnvelope } from '@sentry/utils';
 import { Server } from 'http';
 import Koa from 'koa';
@@ -38,6 +38,8 @@ export interface TestServerEvent<T = unknown> {
   namespacedData?: Record<string, any>;
   /** Attachments */
   attachments?: Attachment[];
+  /** Profiling data */
+  profile?: Profile;
   /** API method used for submission */
   method: 'envelope' | 'minidump' | 'store';
 }
@@ -121,6 +123,7 @@ export class TestServer {
 
       let data: Event | Transaction | Session | ReplayEvent | undefined;
       const attachments: Attachment[] = [];
+      let profile: Profile | undefined;
 
       forEachEnvelopeItem(envelope, ([headers, item]) => {
         if (headers.type === 'event' || headers.type === 'transaction' || headers.type === 'session') {
@@ -138,12 +141,17 @@ export class TestServer {
         if (headers.type === 'attachment') {
           attachments.push(headers);
         }
+
+        if (headers.type === 'profile') {
+          profile = item as unknown as Profile;
+        }
       });
 
       if (data) {
         this._addEvent({
           data,
           attachments,
+          profile,
           appId: ctx.params.id,
           sentryKey: keyMatch[1],
           method: 'envelope',
diff --git a/test/e2e/test-apps/other/browser-profiling/event.json b/test/e2e/test-apps/other/browser-profiling/event.json
new file mode 100644
index 00000000..b2e74eaf
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-profiling/event.json
@@ -0,0 +1,141 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "browser-profiling",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution": "{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "spans": [
+      {
+        "description": "PBKDF2",
+        "origin": "manual",
+        "parent_span_id": "{{id}}",
+        "span_id": "{{id}}",
+        "start_timestamp": 0,
+        "timestamp": 0,
+        "trace_id": "{{id}}"
+      },
+      {
+        "description": "PBKDF2",
+        "origin": "manual",
+        "parent_span_id": "{{id}}",
+        "span_id": "{{id}}",
+        "start_timestamp": 0,
+        "timestamp": 0,
+        "trace_id": "{{id}}"
+      },
+      {
+        "description": "PBKDF2",
+        "origin": "manual",
+        "parent_span_id": "{{id}}",
+        "span_id": "{{id}}",
+        "start_timestamp": 0,
+        "timestamp": 0,
+        "trace_id": "{{id}}"
+      },
+      {
+        "description": "PBKDF2",
+        "origin": "manual",
+        "parent_span_id": "{{id}}",
+        "span_id": "{{id}}",
+        "start_timestamp": 0,
+        "timestamp": 0,
+        "trace_id": "{{id}}"
+      }
+    ],
+    "release": "some-release",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "event_id": "{{id}}",
+    "platform": "javascript",
+    "start_timestamp": 0,
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "request": {
+      "url": "app:///src/index.html"
+    },
+    "tags": {
+      "event.environment": "javascript",
+      "event.origin": "electron",
+      "event_type": "javascript"
+    }
+  },
+  "profile": {
+    "event_id": "{{id}}",
+    "timestamp": "{{time}}",
+    "release": "some-release",
+    "environment": "development",
+    "profile": {
+      "samples": [
+        {
+          "stack_id": 0,
+          "thread_id": "0"
+        },
+        {
+          "stack_id": 0,
+          "thread_id": "0"
+        },
+        {
+          "stack_id": 0,
+          "thread_id": "0"
+        }
+      ],
+      "thread_metadata": { "0": { "name": "main" } }
+    },
+    "transactions": [
+      {
+        "name": "Long work"
+      }
+    ]
+  }
+}
diff --git a/test/e2e/test-apps/other/browser-profiling/package.json b/test/e2e/test-apps/other/browser-profiling/package.json
new file mode 100644
index 00000000..a9f501c7
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-profiling/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "browser-profiling",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/browser-profiling/recipe.yml b/test/e2e/test-apps/other/browser-profiling/recipe.yml
new file mode 100644
index 00000000..ea4705f3
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-profiling/recipe.yml
@@ -0,0 +1,4 @@
+description: Browser Profiling
+command: yarn
+# Browser Tracing fails on Electron v24
+condition: version.major >= 15
diff --git a/test/e2e/test-apps/other/browser-profiling/src/index.html b/test/e2e/test-apps/other/browser-profiling/src/index.html
new file mode 100644
index 00000000..4b296c44
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-profiling/src/index.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const crypto = require('crypto');
+      const {
+        addTracingExtensions,
+        init,
+        BrowserProfilingIntegration,
+        startSpan,
+      } = require('@sentry/electron/renderer');
+
+      addTracingExtensions();
+
+      init({
+        debug: true,
+        integrations: [new BrowserProfilingIntegration()],
+        tracesSampleRate: 1,
+        profilesSampleRate: 1,
+      });
+
+      function pbkdf2() {
+        return new Promise((resolve) => {
+          const salt = crypto.randomBytes(128).toString('base64');
+          crypto.pbkdf2('myPassword', salt, 10000, 512, 'sha512', resolve);
+        });
+      }
+
+      async function longWork() {
+        for (let i = 0; i < 10; i++) {
+          await startSpan({ name: 'PBKDF2' }, async () => {
+            await pbkdf2();
+          });
+        }
+      }
+
+      setTimeout(() => {
+        startSpan({ name: 'Long work' }, async () => {
+          await longWork();
+        });
+      }, 500);
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/other/browser-profiling/src/main.js b/test/e2e/test-apps/other/browser-profiling/src/main.js
new file mode 100644
index 00000000..21736f0d
--- /dev/null
+++ b/test/e2e/test-apps/other/browser-profiling/src/main.js
@@ -0,0 +1,25 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  release: 'some-release',
+  autoSessionTracking: false,
+  enableRendererProfiling: true,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+});

From 02e834132ce06e44d5382ee24d77c077eb9a9819 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 2 Jan 2024 11:47:14 +0100
Subject: [PATCH 188/239] feat: Update JavaScript SDKs to v7.90.0 (#800)

---
 package.json                                  |  14 +-
 src/index.ts                                  |  32 +++-
 src/main/anr.ts                               |   4 +-
 src/main/index.ts                             |  32 +++-
 src/main/integrations/additional-context.ts   |  29 ++--
 .../integrations/browser-window-session.ts    |   6 +-
 src/main/integrations/electron-breadcrumbs.ts |  23 +--
 src/main/integrations/electron-minidump.ts    |  25 ++-
 src/main/integrations/main-process-session.ts |   2 +-
 src/main/integrations/onuncaughtexception.ts  |  74 +++++----
 .../integrations/sentry-minidump/index.ts     |  34 ++--
 .../sentry-minidump/minidump-loader.ts        |   6 +-
 src/main/ipc.ts                               |  61 ++++----
 src/main/sessions.ts                          |   8 +-
 src/main/store.ts                             |   4 +-
 src/main/transports/queue.ts                  |  16 +-
 src/renderer/index.ts                         |  32 +++-
 src/renderer/integrations/scope-to-main.ts    |   2 +-
 src/renderer/sdk.ts                           |   2 +-
 .../main-custom-release/src/main.js           |   2 +-
 test/unit/net.test.ts                         |  10 +-
 yarn.lock                                     | 148 ++++++++++--------
 22 files changed, 315 insertions(+), 251 deletions(-)

diff --git a/package.json b/package.json
index 2b6245b4..bab79fe5 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.84.0",
-    "@sentry/core": "7.84.0",
-    "@sentry/node": "7.84.0",
-    "@sentry/types": "7.84.0",
-    "@sentry/utils": "7.84.0",
+    "@sentry/browser": "7.90.0",
+    "@sentry/core": "7.90.0",
+    "@sentry/node": "7.90.0",
+    "@sentry/types": "7.90.0",
+    "@sentry/utils": "7.90.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.84.0",
-    "@sentry-internal/typescript": "7.84.0",
+    "@sentry-internal/eslint-config-sdk": "7.90.0",
+    "@sentry-internal/typescript": "7.90.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/index.ts b/src/index.ts
index 8c05fdd2..5887fe37 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -7,6 +7,7 @@ import { BrowserOptions } from './renderer';
 export type {
   Breadcrumb,
   BreadcrumbHint,
+  PolymorphicRequest,
   Request,
   SdkInfo,
   Event,
@@ -16,6 +17,7 @@ export type {
   // eslint-disable-next-line deprecation/deprecation
   Severity,
   SeverityLevel,
+  Span,
   StackFrame,
   Stacktrace,
   Thread,
@@ -24,36 +26,50 @@ export type {
 } from '@sentry/types';
 
 export {
+  // eslint-disable-next-line deprecation/deprecation
   addGlobalEventProcessor,
+  addEventProcessor,
   addBreadcrumb,
   addIntegration,
   captureException,
   captureEvent,
   captureMessage,
+  // eslint-disable-next-line deprecation/deprecation
   configureScope,
   createTransport,
+  // eslint-disable-next-line deprecation/deprecation
+  extractTraceparentData,
+  getActiveTransaction,
   getHubFromCarrier,
   getCurrentHub,
+  getClient,
+  getCurrentScope,
   Hub,
   lastEventId,
   makeMain,
+  runWithAsyncContext,
   Scope,
   startTransaction,
-  getActiveSpan,
-  startSpan,
-  startInactiveSpan,
-  startSpanManual,
-  continueTrace,
-  SDK_VERSION,
   setContext,
   setExtra,
   setExtras,
   setTag,
   setTags,
   setUser,
+  spanStatusfromHttpCode,
+  trace,
   withScope,
-  FunctionToString,
-  InboundFilters,
+  captureCheckIn,
+  withMonitor,
+  setMeasurement,
+  getActiveSpan,
+  startSpan,
+  // eslint-disable-next-line deprecation/deprecation
+  startActiveSpan,
+  startInactiveSpan,
+  startSpanManual,
+  continueTrace,
+  metrics,
 } from '@sentry/core';
 export type { SpanStatusType } from '@sentry/core';
 
diff --git a/src/main/anr.ts b/src/main/anr.ts
index 01913d15..e6de9047 100644
--- a/src/main/anr.ts
+++ b/src/main/anr.ts
@@ -61,7 +61,9 @@ function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFram
   });
 
   // In node, we enable just before pausing but for Chrome, the debugger must be enabled before he ANR event occurs
-  void contents.debugger.sendCommand('Debugger.enable');
+  contents.debugger.sendCommand('Debugger.enable').catch(() => {
+    // ignore
+  });
 
   return () => {
     return contents.debugger.sendCommand('Debugger.pause');
diff --git a/src/main/index.ts b/src/main/index.ts
index 8e637f32..0b55870c 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -8,6 +8,7 @@ import * as ElectronMainIntegrations from './integrations';
 export type {
   Breadcrumb,
   BreadcrumbHint,
+  PolymorphicRequest,
   Request,
   SdkInfo,
   Event,
@@ -17,41 +18,58 @@ export type {
   // eslint-disable-next-line deprecation/deprecation
   Severity,
   SeverityLevel,
+  Span,
   StackFrame,
   Stacktrace,
   Thread,
+  Transaction,
   User,
 } from '@sentry/types';
 
 export {
+  // eslint-disable-next-line deprecation/deprecation
   addGlobalEventProcessor,
+  addEventProcessor,
   addBreadcrumb,
   addIntegration,
   captureException,
   captureEvent,
   captureMessage,
+  // eslint-disable-next-line deprecation/deprecation
   configureScope,
   createTransport,
+  // eslint-disable-next-line deprecation/deprecation
+  extractTraceparentData,
+  getActiveTransaction,
   getHubFromCarrier,
   getCurrentHub,
+  getClient,
+  getCurrentScope,
   Hub,
   makeMain,
+  runWithAsyncContext,
   Scope,
   startTransaction,
-  getActiveSpan,
-  startSpan,
-  startInactiveSpan,
-  startSpanManual,
-  continueTrace,
   setContext,
   setExtra,
   setExtras,
   setTag,
   setTags,
   setUser,
+  spanStatusfromHttpCode,
+  trace,
   withScope,
-  FunctionToString,
-  InboundFilters,
+  captureCheckIn,
+  withMonitor,
+  setMeasurement,
+  getActiveSpan,
+  startSpan,
+  // eslint-disable-next-line deprecation/deprecation
+  startActiveSpan,
+  startInactiveSpan,
+  startSpanManual,
+  continueTrace,
+  metrics,
 } from '@sentry/core';
 export type { SpanStatusType } from '@sentry/core';
 
diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts
index b2d4713b..32ebf7d3 100644
--- a/src/main/integrations/additional-context.ts
+++ b/src/main/integrations/additional-context.ts
@@ -44,21 +44,26 @@ export class AdditionalContext implements Integration {
     addGlobalEventProcessor(async (event: Event) => this._addAdditionalContext(event));
 
     // Some metrics are only available after app ready so we lazily load them
-    void whenAppReady.then(() => {
-      const { language, screen } = this._options;
+    whenAppReady.then(
+      () => {
+        const { language, screen } = this._options;
 
-      if (language) {
-        this._lazyDeviceContext.language = app.getLocale();
-      }
-
-      if (screen) {
-        this._setPrimaryDisplayInfo();
+        if (language) {
+          this._lazyDeviceContext.language = app.getLocale();
+        }
 
-        electronScreen.on('display-metrics-changed', () => {
+        if (screen) {
           this._setPrimaryDisplayInfo();
-        });
-      }
-    });
+
+          electronScreen.on('display-metrics-changed', () => {
+            this._setPrimaryDisplayInfo();
+          });
+        }
+      },
+      () => {
+        // ignore
+      },
+    );
   }
 
   /** Adds additional context to event */
diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts
index 02e1e0ab..5ce27244 100644
--- a/src/main/integrations/browser-window-session.ts
+++ b/src/main/integrations/browser-window-session.ts
@@ -80,7 +80,7 @@ export class BrowserWindowSession implements Integration {
       // We are now active
       if (this._state.name === 'inactive') {
         // If we were inactive, start a new session
-        void startSession(true);
+        startSession(true);
       } else if (this._state.name === 'timeout') {
         // Clear the timeout since the app has become active again
         clearTimeout(this._state.timer);
@@ -96,7 +96,9 @@ export class BrowserWindowSession implements Integration {
           // if the state says we're still waiting for the timeout, end the session
           if (this._state.name === 'timeout') {
             this._state = { name: 'inactive' };
-            void endSession();
+            endSession().catch(() => {
+              // ignore
+            });
           }
         }, timeout)
           // unref so this timer doesn't block app exit
diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts
index a9ebf36a..ebc2a0bc 100644
--- a/src/main/integrations/electron-breadcrumbs.ts
+++ b/src/main/integrations/electron-breadcrumbs.ts
@@ -127,16 +127,21 @@ export class ElectronBreadcrumbs implements Integration {
 
     trackRendererProperties();
 
-    void whenAppReady.then(() => {
-      // We can't access these until app 'ready'
-      if (this._options.screen) {
-        this._patchEventEmitter(screen, 'screen', this._options.screen);
-      }
+    whenAppReady.then(
+      () => {
+        // We can't access these until app 'ready'
+        if (this._options.screen) {
+          this._patchEventEmitter(screen, 'screen', this._options.screen);
+        }
 
-      if (this._options.powerMonitor) {
-        this._patchEventEmitter(powerMonitor, 'powerMonitor', this._options.powerMonitor);
-      }
-    });
+        if (this._options.powerMonitor) {
+          this._patchEventEmitter(powerMonitor, 'powerMonitor', this._options.powerMonitor);
+        }
+      },
+      () => {
+        // ignore
+      },
+    );
 
     if (this._options.app) {
       this._patchEventEmitter(app, 'app', this._options.app);
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index 8e162c7f..ad3be97c 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -1,6 +1,6 @@
-import { getCurrentHub, Scope } from '@sentry/core';
+import { applyScopeDataToEvent, getCurrentHub } from '@sentry/core';
 import { NodeClient, NodeOptions } from '@sentry/node';
-import { Event, Integration } from '@sentry/types';
+import { Event, Integration, ScopeData } from '@sentry/types';
 import { logger, makeDsn, SentryError } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
@@ -105,10 +105,10 @@ export class ElectronMinidump implements Integration {
     }
 
     // Check if last crash report was likely to have been unreported in the last session
-    void unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => {
+    unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => {
       // Check if a previous session was not closed
-      checkPreviousSession(crashed).catch((error) => logger.error(error));
-    });
+      return checkPreviousSession(crashed);
+    }, logger.error);
   }
 
   /**
@@ -145,19 +145,15 @@ export class ElectronMinidump implements Integration {
     const hubScope = getCurrentHub().getScope();
     if (hubScope) {
       hubScope.addScopeListener((updatedScope) => {
-        const scope = Scope.clone(updatedScope);
-        /* eslint-disable @typescript-eslint/no-unsafe-member-access */
-        (scope as any)._eventProcessors = [];
-        (scope as any)._scopeListeners = [];
-        /* eslint-enable @typescript-eslint/no-unsafe-member-access */
-
+        const scope = updatedScope.getScopeData();
+        scope.eventProcessors = [];
         this._updateExtraParams(scope);
       });
     }
   }
 
   /** Updates Electron uploader extra params */
-  private _updateExtraParams(scope: Scope): void {
+  private _updateExtraParams(scope: ScopeData): void {
     this._updateEpoch += 1;
     const currentEpoch = this._updateEpoch;
 
@@ -175,15 +171,14 @@ export class ElectronMinidump implements Integration {
   }
 
   /** Builds up an event to send with the native Electron uploader */
-  private async _getNativeUploaderEvent(scope: Scope): Promise<Event> {
+  private async _getNativeUploaderEvent(scope: ScopeData): Promise<Event> {
     const event = mergeEvents(await getEventDefaults(this._customRelease), {
       level: 'fatal',
       platform: 'native',
       tags: { 'event.environment': 'native', event_type: 'native' },
     });
 
-    // Apply the scope to the event
-    await scope.applyToEvent(event);
+    applyScopeDataToEvent(event, scope);
 
     delete event.sdkProcessingMetadata;
 
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index 3d161681..af12d8c0 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -25,7 +25,7 @@ export class MainProcessSession implements Integration {
 
   /** @inheritDoc */
   public setupOnce(): void {
-    void startSession(!!this._options.sendOnCreate);
+    startSession(!!this._options.sendOnCreate);
 
     endSessionOnExit();
   }
diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts
index 8a4d4798..7bd8bdaa 100644
--- a/src/main/integrations/onuncaughtexception.ts
+++ b/src/main/integrations/onuncaughtexception.ts
@@ -1,4 +1,4 @@
-import { getCurrentHub } from '@sentry/core';
+import { getCurrentHub, getCurrentScope } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
 import { Event, Integration } from '@sentry/types';
 import { dialog } from 'electron';
@@ -24,43 +24,49 @@ export class OnUncaughtException implements Integration {
     global.process.on('uncaughtException', (error: Error) => {
       const self = getCurrentHub().getIntegration(OnUncaughtException);
       if (self) {
-        getCurrentHub().withScope(async (scope) => {
-          scope.addEventProcessor(async (event: Event) => ({
-            ...event,
-            level: 'fatal',
-          }));
+        const scope = getCurrentScope();
 
-          const nodeClient = getCurrentHub().getClient() as NodeClient;
-          nodeClient.captureException(
-            error,
-            {
-              originalException: error,
-              data: {
-                mechanism: {
-                  handled: false,
-                  type: 'generic',
-                },
+        scope.addEventProcessor(async (event: Event) => ({
+          ...event,
+          level: 'fatal',
+        }));
+
+        const nodeClient = getCurrentHub().getClient() as NodeClient;
+        nodeClient.captureException(
+          error,
+          {
+            originalException: error,
+            data: {
+              mechanism: {
+                handled: false,
+                type: 'generic',
               },
             },
-            getCurrentHub().getScope(),
-          );
-          await nodeClient.flush(nodeClient.getOptions().shutdownTimeout || 2000);
+          },
+          getCurrentHub().getScope(),
+        );
 
-          if (options?.onFatalError) {
-            options.onFatalError(error);
-          } else if (global.process.listenerCount('uncaughtException') <= 2) {
-            // In addition to this handler there is always one in Electron
-            // The dialog is only shown if there are no other handlers
-            // eslint-disable-next-line no-console
-            console.error('Uncaught Exception:');
-            // eslint-disable-next-line no-console
-            console.error(error);
-            const ref = error.stack;
-            const stack = ref !== undefined ? ref : `${error.name}: ${error.message}`;
-            const message = `Uncaught Exception:\n${stack}`;
-            dialog.showErrorBox('A JavaScript error occurred in the main process', message);
-          }
-        });
+        nodeClient.flush(nodeClient.getOptions().shutdownTimeout || 2000).then(
+          () => {
+            if (options?.onFatalError) {
+              options.onFatalError(error);
+            } else if (global.process.listenerCount('uncaughtException') <= 2) {
+              // In addition to this handler there is always one in Electron
+              // The dialog is only shown if there are no other handlers
+              // eslint-disable-next-line no-console
+              console.error('Uncaught Exception:');
+              // eslint-disable-next-line no-console
+              console.error(error);
+              const ref = error.stack;
+              const stack = ref !== undefined ? ref : `${error.name}: ${error.message}`;
+              const message = `Uncaught Exception:\n${stack}`;
+              dialog.showErrorBox('A JavaScript error occurred in the main process', message);
+            }
+          },
+          () => {
+            // ignore
+          },
+        );
       }
     });
   }
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 94b72158..c3c8e69e 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -1,6 +1,6 @@
-import { captureEvent, getCurrentHub, Scope } from '@sentry/core';
+import { applyScopeDataToEvent, captureEvent, getCurrentHub, getCurrentScope, Scope } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { Event, Integration } from '@sentry/types';
+import { Event, Integration, ScopeData } from '@sentry/types';
 import { logger, SentryError } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
@@ -15,7 +15,7 @@ import { BufferedWriteStore } from '../../store';
 import { getMinidumpLoader, MinidumpLoader } from './minidump-loader';
 
 interface PreviousRun {
-  scope: Scope;
+  scope: ScopeData;
   event?: Event;
 }
 
@@ -51,7 +51,7 @@ export class SentryMinidump implements Integration {
     this._startCrashReporter();
 
     this._scopeStore = new BufferedWriteStore<PreviousRun>(getSentryCachePath(), 'scope_v3', {
-      scope: new Scope(),
+      scope: new Scope().getScopeData(),
     });
 
     // We need to store the scope in a variable here so it can be attached to minidumps
@@ -187,24 +187,17 @@ export class SentryMinidump implements Integration {
    */
   private _setupScopeListener(currentRelease: string, currentEnvironment: string): void {
     const scopeChanged = (updatedScope: Scope): void => {
-      const scope = Scope.clone(updatedScope);
-      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
-      (scope as any)._eventProcessors = [];
-      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
-      (scope as any)._scopeListeners = [];
-
       // Since the initial scope read is async, we need to ensure that any writes do not beat that
       // https://github.com/getsentry/sentry-electron/issues/585
       setImmediate(async () => {
-        const event = await getEventDefaults(currentRelease, currentEnvironment);
         void this._scopeStore?.set({
-          scope,
-          event,
+          scope: updatedScope.getScopeData(),
+          event: await getEventDefaults(currentRelease, currentEnvironment),
         });
       });
     };
 
-    const scope = getCurrentHub().getScope();
+    const scope = getCurrentScope();
 
     if (scope) {
       scope.addScopeListener(scopeChanged);
@@ -242,25 +235,22 @@ export class SentryMinidump implements Integration {
       return true;
     }
 
-    let event: Event | null = eventIn;
+    const event = eventIn;
 
     // If this is a native main process crash, we need to apply the scope and context from the previous run
     if (event.tags?.['event.process'] === 'browser') {
       const previousRun = await this._scopeLastRun;
+      if (previousRun) {
+        if (previousRun.scope) {
+          applyScopeDataToEvent(event, previousRun.scope);
+        }
 
-      const storedScope = Scope.clone(previousRun?.scope);
-      event = await storedScope.applyToEvent(event);
-
-      if (event && previousRun) {
         event.release = previousRun.event?.release || event.release;
         event.environment = previousRun.event?.environment || event.environment;
         event.contexts = previousRun.event?.contexts || event.contexts;
       }
     }
 
-    const hubScope = hub.getScope();
-    event = hubScope && event ? await hubScope.applyToEvent(event) : event;
-
     if (!event) {
       return false;
     }
diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts
index e46b9d80..135ef785 100644
--- a/src/main/integrations/sentry-minidump/minidump-loader.ts
+++ b/src/main/integrations/sentry-minidump/minidump-loader.ts
@@ -180,7 +180,7 @@ function minidumpFromBreakpadMultipart(file: Buffer): Buffer {
 
 function removeBreakpadMetadata(crashesDirectory: string, paths: string[]): void {
   // Remove all metadata files and forget about them.
-  void Promise.all(
+  Promise.all(
     paths
       .filter((file) => file.endsWith('.txt') && !file.endsWith('log.txt'))
       .map(async (file) => {
@@ -191,7 +191,9 @@ function removeBreakpadMetadata(crashesDirectory: string, paths: string[]): void
           logger.warn('Could not delete', path);
         }
       }),
-  );
+  ).catch(() => {
+    // ignore since we catch each unlink individually
+  });
 }
 
 function breakpadMinidumpLoader(): MinidumpLoader {
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 8d80a37a..49748cf7 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -1,5 +1,5 @@
-import { captureEvent, configureScope, getCurrentHub, Scope } from '@sentry/core';
-import { Attachment, AttachmentItem, Envelope, Event, EventItem, Profile } from '@sentry/types';
+import { captureEvent, getCurrentHub, getCurrentScope } from '@sentry/core';
+import { Attachment, AttachmentItem, Envelope, Event, EventItem, Profile, ScopeData } from '@sentry/types';
 import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils';
 import { app, ipcMain, protocol, WebContents, webContents } from 'electron';
 import { TextDecoder, TextEncoder } from 'util';
@@ -25,7 +25,7 @@ const SENTRY_CUSTOM_SCHEME = {
   privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true, secure: true },
 };
 
-async function newProtocolRenderer(): Promise<void> {
+function newProtocolRenderer(): void {
   KNOWN_RENDERERS = KNOWN_RENDERERS || new Set();
   WINDOW_ID_TO_WEB_CONTENTS = WINDOW_ID_TO_WEB_CONTENTS || new Map();
 
@@ -36,10 +36,8 @@ async function newProtocolRenderer(): Promise<void> {
     }
 
     if (!wc.isDestroyed()) {
-      try {
-        const windowId: string | undefined = await wc.executeJavaScript('window.__SENTRY_RENDERER_ID__');
-
-        if (windowId) {
+      wc.executeJavaScript('window.__SENTRY_RENDERER_ID__').then((windowId: string | undefined) => {
+        if (windowId && KNOWN_RENDERERS && WINDOW_ID_TO_WEB_CONTENTS) {
           KNOWN_RENDERERS.add(wcId);
           WINDOW_ID_TO_WEB_CONTENTS.set(windowId, wcId);
 
@@ -48,9 +46,7 @@ async function newProtocolRenderer(): Promise<void> {
             WINDOW_ID_TO_WEB_CONTENTS?.delete(windowId);
           });
         }
-      } catch (_) {
-        // ignore
-      }
+      }, logger.error);
     }
   }
 }
@@ -144,39 +140,36 @@ function hasKeys(obj: any): boolean {
  * Handle scope updates from renderer processes
  */
 function handleScope(options: ElectronMainOptionsInternal, jsonScope: string): void {
-  let rendererScope: Scope;
+  let sentScope: ScopeData;
   try {
-    rendererScope = JSON.parse(jsonScope) as Scope;
+    sentScope = JSON.parse(jsonScope) as ScopeData;
   } catch {
     logger.warn('sentry-electron received an invalid scope message');
     return;
   }
 
-  const sentScope = Scope.clone(rendererScope) as any;
-  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
-  configureScope((scope) => {
-    if (hasKeys(sentScope._user)) {
-      scope.setUser(sentScope._user);
-    }
+  const scope = getCurrentScope();
 
-    if (hasKeys(sentScope._tags)) {
-      scope.setTags(sentScope._tags);
-    }
+  if (hasKeys(sentScope.user)) {
+    scope.setUser(sentScope.user);
+  }
 
-    if (hasKeys(sentScope._extra)) {
-      scope.setExtras(sentScope._extra);
-    }
+  if (hasKeys(sentScope.tags)) {
+    scope.setTags(sentScope.tags);
+  }
 
-    for (const attachment of sentScope._attachments || []) {
-      scope.addAttachment(attachment);
-    }
+  if (hasKeys(sentScope.extra)) {
+    scope.setExtras(sentScope.extra);
+  }
 
-    const breadcrumb = sentScope._breadcrumbs.pop();
-    if (breadcrumb) {
-      scope.addBreadcrumb(breadcrumb, options?.maxBreadcrumbs || 100);
-    }
-  });
-  /* eslint-enable @typescript-eslint/no-unsafe-member-access */
+  for (const attachment of sentScope.attachments || []) {
+    scope.addAttachment(attachment);
+  }
+
+  const breadcrumb = sentScope.breadcrumbs.pop();
+  if (breadcrumb) {
+    scope.addBreadcrumb(breadcrumb, options?.maxBreadcrumbs || 100);
+  }
 }
 
 /** Enables Electron protocol handling */
@@ -208,7 +201,7 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
 
           const data = request.body;
           if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.RENDERER_START}`)) {
-            void newProtocolRenderer();
+            newProtocolRenderer();
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) {
             handleEvent(options, data.toString(), getWebContents());
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}`) && data) {
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index df78b67c..ac0ae9c9 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -27,7 +27,7 @@ function getSessionStore(): Store<SessionContext | undefined> {
 let persistTimer: NodeJS.Timer | undefined;
 
 /** Starts a session */
-export async function startSession(sendOnCreate: boolean): Promise<void> {
+export function startSession(sendOnCreate: boolean): void {
   const hub = getCurrentHub();
   const session = hub.startSession();
 
@@ -35,7 +35,11 @@ export async function startSession(sendOnCreate: boolean): Promise<void> {
     hub.captureSession();
   }
 
-  await getSessionStore().set(session);
+  getSessionStore()
+    .set(session)
+    .catch(() => {
+      // Does not throw
+    });
 
   // Every PERSIST_INTERVAL, write the session to disk
   persistTimer = setInterval(async () => {
diff --git a/src/main/store.ts b/src/main/store.ts
index 359ffffe..06a18651 100644
--- a/src/main/store.ts
+++ b/src/main/store.ts
@@ -151,7 +151,9 @@ export class BufferedWriteStore<T> extends Store<T> {
       const data = this._pendingWrite.data;
       // Clear the pending write immediately so that subsequent writes can be queued
       this._pendingWrite = undefined;
-      void super.set(data);
+      super.set(data).catch(() => {
+        // ignore
+      });
     }
   }
 }
diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts
index b65911fa..3f506579 100644
--- a/src/main/transports/queue.ts
+++ b/src/main/transports/queue.ts
@@ -50,7 +50,7 @@ export class PersistedRequestQueue {
       while (queue.length > this._maxCount) {
         const removed = queue.shift();
         if (removed) {
-          void this._removeBody(removed.bodyPath);
+          this._removeBody(removed.bodyPath);
         }
       }
 
@@ -78,7 +78,7 @@ export class PersistedRequestQueue {
         // We drop events created in v3 of the SDK or before the cut-off
         if ('type' in found || found.date.getTime() < cutOff) {
           // we're dropping this event so delete the body
-          void this._removeBody(found.bodyPath);
+          this._removeBody(found.bodyPath);
           found = undefined;
         } else {
           pendingCount = queue.length;
@@ -91,7 +91,7 @@ export class PersistedRequestQueue {
     if (found) {
       try {
         const body = await readFileAsync(join(this._queuePath, found.bodyPath));
-        void this._removeBody(found.bodyPath);
+        this._removeBody(found.bodyPath);
 
         return {
           request: {
@@ -109,11 +109,9 @@ export class PersistedRequestQueue {
   }
 
   /** Removes the body of the request */
-  private async _removeBody(bodyPath: string): Promise<void> {
-    try {
-      await unlinkAsync(join(this._queuePath, bodyPath));
-    } catch (_) {
-      //
-    }
+  private _removeBody(bodyPath: string): void {
+    unlinkAsync(join(this._queuePath, bodyPath)).catch(() => {
+      // ignore
+    });
   }
 }
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 6e267b84..03cdc3ef 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -5,6 +5,7 @@ import * as ElectronRendererIntegrations from './integrations';
 export type {
   Breadcrumb,
   BreadcrumbHint,
+  PolymorphicRequest,
   Request,
   SdkInfo,
   Event,
@@ -14,41 +15,58 @@ export type {
   // eslint-disable-next-line deprecation/deprecation
   Severity,
   SeverityLevel,
+  Span,
   StackFrame,
   Stacktrace,
   Thread,
+  Transaction,
   User,
 } from '@sentry/types';
 
 export {
+  // eslint-disable-next-line deprecation/deprecation
   addGlobalEventProcessor,
+  addEventProcessor,
   addBreadcrumb,
   addIntegration,
   captureException,
   captureEvent,
   captureMessage,
+  // eslint-disable-next-line deprecation/deprecation
   configureScope,
   createTransport,
+  // eslint-disable-next-line deprecation/deprecation
+  extractTraceparentData,
+  getActiveTransaction,
   getHubFromCarrier,
   getCurrentHub,
+  getClient,
+  getCurrentScope,
   Hub,
   makeMain,
+  runWithAsyncContext,
   Scope,
   startTransaction,
-  getActiveSpan,
-  startSpan,
-  startInactiveSpan,
-  startSpanManual,
-  continueTrace,
   setContext,
   setExtra,
   setExtras,
   setTag,
   setTags,
   setUser,
+  spanStatusfromHttpCode,
+  trace,
   withScope,
-  FunctionToString,
-  InboundFilters,
+  captureCheckIn,
+  withMonitor,
+  setMeasurement,
+  getActiveSpan,
+  startSpan,
+  // eslint-disable-next-line deprecation/deprecation
+  startActiveSpan,
+  startInactiveSpan,
+  startSpanManual,
+  continueTrace,
+  metrics,
 } from '@sentry/core';
 export type { SpanStatusType } from '@sentry/core';
 
diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts
index 37e527ba..c2ae4ff4 100644
--- a/src/renderer/integrations/scope-to-main.ts
+++ b/src/renderer/integrations/scope-to-main.ts
@@ -32,7 +32,7 @@ export class ScopeToMain implements Integration {
       const ipc = getIPC();
 
       scope.addScopeListener((updatedScope) => {
-        ipc.sendScope(JSON.stringify(normalize(updatedScope, 20, 2_000)));
+        ipc.sendScope(JSON.stringify(normalize(updatedScope.getScopeData(), 20, 2_000)));
         scope.clearBreadcrumbs();
         scope.clearAttachments();
       });
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index bdadcef4..d22e92ef 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_84_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_90_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/test-apps/native-sentry/main-custom-release/src/main.js b/test/e2e/test-apps/native-sentry/main-custom-release/src/main.js
index 396d9bf7..18952408 100644
--- a/test/e2e/test-apps/native-sentry/main-custom-release/src/main.js
+++ b/test/e2e/test-apps/native-sentry/main-custom-release/src/main.js
@@ -28,6 +28,6 @@ app.on('ready', () => {
   if (process.env.APP_FIRST_RUN) {
     setTimeout(() => {
       process.crash();
-    }, 500);
+    }, 1000);
   }
 });
diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts
index d4d98544..5e538911 100644
--- a/test/unit/net.test.ts
+++ b/test/unit/net.test.ts
@@ -68,12 +68,10 @@ function createHubOnScope(customOptions: Partial<ClientOptions> = {}): Hub {
 
   hub.bindClient(new NodeClient(options));
 
-  hub.configureScope((scope) =>
-    scope.setUser({
-      id: 'uid123',
-      segment: 'segmentA',
-    }),
-  );
+  hub.getScope().setUser({
+    id: 'uid123',
+    segment: 'segmentA',
+  });
 
   return hub;
 }
diff --git a/yarn.lock b/yarn.lock
index 2df3a98d..c00e6ca3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.84.0.tgz#235e2cab61f7ee31e83798369d28af0928e8e952"
-  integrity sha512-p+W1WmFNtgY1iO8Metk4HHlrJqJ2CpDHQbYWuS4kc8Ry+wuyhWdYs/zD4H80rao6Thl0S6x5ywiv/M4lsaQrMw==
+"@sentry-internal/eslint-config-sdk@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.90.0.tgz#0a765a209ca3499bbc08856b8228613ee4e715f9"
+  integrity sha512-PvjJ/Dsp9eofcZz6wBaPEDfc5R9mLMgDR8WfWECiMhfYu7KBT2GgMx1dWe2g0ylqDzoBmY15+8gGELhf90kfrA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.84.0"
-    "@sentry-internal/typescript" "7.84.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.90.0"
+    "@sentry-internal/typescript" "7.90.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,78 +180,88 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.84.0.tgz#e2fc9aeef835adcc358311fa73a937e90642e060"
-  integrity sha512-RiJPEhzaC8LUMPnxG5QcxPqVKmTCOypzkXH+6RfGQusYYiQHQxr4PzaKKnHlCTMRelRTiiPoJ/SJLMv0NbMDbw==
+"@sentry-internal/eslint-plugin-sdk@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.90.0.tgz#4e9238816011d8a22173644db7fe72ff54e1ceb4"
+  integrity sha512-4/1GA6KNyBm+721DGlVgKgUC8qbI9netOZLZetVOUQ2oNiJHHdYn0jHGZzB5zMcut+/S6Nr9MqiFgjLzI8E3PA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/tracing@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.84.0.tgz#430da253ee5b075be4ef57f20ea842c0208bc6b0"
-  integrity sha512-y9bGYA0OM6PEREfd+nk4UURZy29tpIw+7vQwpxWfEVs2fqq0/5TBFX/tKFb8AKUI9lVM8v0bcF0bNSCnuPQZHQ==
-  dependencies:
-    "@sentry/core" "7.84.0"
-    "@sentry/types" "7.84.0"
-    "@sentry/utils" "7.84.0"
-
-"@sentry-internal/typescript@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.84.0.tgz#d7c29d8791c75f639fe6fdf5bacff146a5e7295f"
-  integrity sha512-Ls/2JCwjrROwaMcJwMwjkqlM5akjXX4SoYD7BwEpie/N7EkPIxM+gQTBS1lX7I7AUMVclyEu2xnDXSfb017aIQ==
-
-"@sentry/browser@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.84.0.tgz#7c82470f0afbb6178f26127894e40e9ce2b1e6d6"
-  integrity sha512-X50TlTKY9WzAnHsYc4FYrCWgm+CdVo0h02ggmodVBUpRLUBjj+cs5Q1plov/v/XeorSwmorNEMUu/n+XZNSsrA==
-  dependencies:
-    "@sentry-internal/tracing" "7.84.0"
-    "@sentry/core" "7.84.0"
-    "@sentry/replay" "7.84.0"
-    "@sentry/types" "7.84.0"
-    "@sentry/utils" "7.84.0"
-
-"@sentry/core@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.84.0.tgz#01d33fc452044ffd8ea57b20f60304b9cfa2b9e1"
-  integrity sha512-tbuwunbBx2kSex15IHCqHDnrMfIlqPc6w/76fwkGqokz3oh9GSEGlLICwmBWL8AypWimUg13IDtFpD0TJTriWA==
-  dependencies:
-    "@sentry/types" "7.84.0"
-    "@sentry/utils" "7.84.0"
-
-"@sentry/node@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.84.0.tgz#c06167106796b2b83c0a9b52fa56f8ca820034ca"
-  integrity sha512-Xm3fIXT3TZOQi+6uQBavI8iOehD3PkY7v0y3hog0d4lQTH88vQK9BBsI+jZEq81Em+RG/u7vZNiFo6YMTnWF7Q==
-  dependencies:
-    "@sentry-internal/tracing" "7.84.0"
-    "@sentry/core" "7.84.0"
-    "@sentry/types" "7.84.0"
-    "@sentry/utils" "7.84.0"
+"@sentry-internal/feedback@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.90.0.tgz#053e36b4d01dd94c948e5eb6902f264c1d4436e6"
+  integrity sha512-ZIdpwK9KmiE/UYGUgNE3N9A5MWm92rbC/0u04LxQfZh0tGqN2EchwivQpFCWuu5QsKMlsza7aO6YQXsKvwt1Ww==
+  dependencies:
+    "@sentry/core" "7.90.0"
+    "@sentry/types" "7.90.0"
+    "@sentry/utils" "7.90.0"
+
+"@sentry-internal/tracing@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.90.0.tgz#cd21662dbfa3d90d34e91eabd875a1616717d3d3"
+  integrity sha512-74jEtpdio9aRkiVBcrY1ZJXek0oFMqxDJK6BkJNCA+aUK1z96V9viehANRk3Nbxm01rWjmH1U4e1siuo9FhjuQ==
+  dependencies:
+    "@sentry/core" "7.90.0"
+    "@sentry/types" "7.90.0"
+    "@sentry/utils" "7.90.0"
+
+"@sentry-internal/typescript@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.90.0.tgz#fcf4e9c35f56b9331d4dc93ce1f35a89bd3ad361"
+  integrity sha512-m8VDDATpnBgLfFLl1tISA2B5Yw5UUcHdoYlOGAVFnIV22wzM4M7mO8PP6vZ2teA7Rh9TINiTgJu8ZN06mkmATw==
+
+"@sentry/browser@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.90.0.tgz#a5a696a328364f3bf15405d03112c06f53bb2923"
+  integrity sha512-ik3Jwo+TYjoEesJlt3PlHDcPE9h//WwyUsVkV9ZsVx0MSXb8c1VC4uDMsyUqjA+gPImmw1l9KlWZtvaOooZEhg==
+  dependencies:
+    "@sentry-internal/feedback" "7.90.0"
+    "@sentry-internal/tracing" "7.90.0"
+    "@sentry/core" "7.90.0"
+    "@sentry/replay" "7.90.0"
+    "@sentry/types" "7.90.0"
+    "@sentry/utils" "7.90.0"
+
+"@sentry/core@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.90.0.tgz#dfd8e3e4eec4b140681ddb21a3fea848fcab7a01"
+  integrity sha512-HolpdHjULCwehKPWHR6IPQM0NBjmORhlBU7FtCh/e8TtSkZ9ztPsuofNBomMS1+mdbL+yxOIc9KUYEl0zRfeAQ==
+  dependencies:
+    "@sentry/types" "7.90.0"
+    "@sentry/utils" "7.90.0"
+
+"@sentry/node@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.90.0.tgz#083bbdc053426d491281bff6f8a238600dd93e99"
+  integrity sha512-VjDI2MCkidoFEzrMa1gqmwYt1sUhYnu+zoFF5P5jgapTVVJ5xc2b7k/lS62U6IsfxHNrIdTtQHsrbCS5+s0GvQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.90.0"
+    "@sentry/core" "7.90.0"
+    "@sentry/types" "7.90.0"
+    "@sentry/utils" "7.90.0"
     https-proxy-agent "^5.0.0"
 
-"@sentry/replay@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.84.0.tgz#7e17876d9a1802ee33800e2b2cbda4e026c0a2af"
-  integrity sha512-c4PxT0ZpvkR9zXNfmAk3ojkm6eZ9+NlDze09RFBOCNo69QwIN90hnvbjXFC1+vRIJsfgo78Zr0ya/Wzb3Rog7Q==
+"@sentry/replay@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.90.0.tgz#98e181c495422a13b088dcb030556511824eaa95"
+  integrity sha512-fsABtzQ5JQI7G5CC4fg05lVI5DTbd1uwKi41xVKFRmCB5NVTHvK7bHgP8n6uSbnle+gp9rUxVPLLBIPjKfaTmw==
   dependencies:
-    "@sentry-internal/tracing" "7.84.0"
-    "@sentry/core" "7.84.0"
-    "@sentry/types" "7.84.0"
-    "@sentry/utils" "7.84.0"
+    "@sentry-internal/tracing" "7.90.0"
+    "@sentry/core" "7.90.0"
+    "@sentry/types" "7.90.0"
+    "@sentry/utils" "7.90.0"
 
-"@sentry/types@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.84.0.tgz#e8db86c36c61659c3b2558f0aa8b6a073a756117"
-  integrity sha512-VqGLIF3JOUrk7yIXjLXJvAORkZL1e3dDX0Q1okRehwyt/5CRE+mdUTeJZkBo9P9mBwgMyvtwklzOGGrzjb4eMA==
+"@sentry/types@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.90.0.tgz#72797abd790fc3de546d42600752004a7f7d07d0"
+  integrity sha512-dA0Mtba5jYlcQ6xBsGILZuFq4NGrWLfr2ys036z2JE4H1+3PxOVERlD3Di7p+WKYM5gjFw10Hn3EgUV979E3dA==
 
-"@sentry/utils@7.84.0":
-  version "7.84.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.84.0.tgz#32861d922fa31e86dd2863a1d9dfc5a369e98952"
-  integrity sha512-qdUVuxnRBvaf05AU+28R+xYtZmi/Ymf8os3Njq9g4XuA+QEkZLbzmIpRK5W9Ja7vUtjOeg29Xgg43A8znde9LQ==
+"@sentry/utils@7.90.0":
+  version "7.90.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.90.0.tgz#d4eea6392af7498c7be03205151ad11ea8707915"
+  integrity sha512-6BpqAzONm/HQbdlL4TY2W2vBSmaG/eVvwUaHoz0wB49EkWwpF6j/SO9Kb/XkiA/qp9GoJVXpnGBFQLPx7kv/Yw==
   dependencies:
-    "@sentry/types" "7.84.0"
+    "@sentry/types" "7.90.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 70c640672c133dafb1070e4a10651132862da1d2 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 2 Jan 2024 13:42:06 +0100
Subject: [PATCH 189/239] meta: Update changelog for 4.16.0 release (#807)

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a133eb7..ed4bd981 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 4.16.0
+
+- feat: Update from [v7.84.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.84.0) to
+  [v7.90.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.90.0) of JavaScript SDKs (#800)
+- feat: Browser profiling (#799)
+
 ## 4.15.1
 
 - fix: Don't call `app.getPath('userData')` before SDK `init` (#797)

From 60531849242bad80750e3eba2024c11892a66b0b Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 2 Jan 2024 13:42:22 +0100
Subject: [PATCH 190/239] test: Update tested Electron versions (#806)

---
 package.json           | 2 +-
 test/e2e/versions.json | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index bab79fe5..901b6380 100644
--- a/package.json
+++ b/package.json
@@ -47,7 +47,7 @@
     "fix": "run-s fix:eslint fix:prettier",
     "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"",
     "fix:eslint": "eslint . --format stylish --fix",
-    "update-electron-versions": "electron-latest-versions --start 2 --alpha --beta > ./test/e2e/versions.json",
+    "update-electron-versions": "electron-latest-versions --start 2 --beta > ./test/e2e/versions.json",
     "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs",
     "pretest": "yarn build",
     "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 12000 ./test/unit/**/*.ts",
diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 02ca32c5..b3fcf09e 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.6","26.6.1","27.1.2","28.0.0-beta.10"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.3","27.2.0","28.1.0"]

From 25ebceac073e13a1a12594c54c4211036dcd7ff6 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 2 Jan 2024 12:42:52 +0000
Subject: [PATCH 191/239] release: 4.16.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 901b6380..d277597b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.15.1",
+  "version": "4.16.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 1453ec20b59704dc67eeddf977676e3521af993d Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 4 Jan 2024 14:16:41 +0100
Subject: [PATCH 192/239] feat: Migrate to functional integration APIs (#808)

---
 src/integrations.ts                           |  22 +-
 src/main/integrations/additional-context.ts   | 142 ++++-----
 .../integrations/browser-window-session.ts    | 101 +++---
 src/main/integrations/child-process.ts        | 144 +++++----
 src/main/integrations/electron-breadcrumbs.ts | 135 ++++----
 src/main/integrations/electron-minidump.ts    | 256 ++++++++--------
 src/main/integrations/main-context.ts         |  39 +--
 src/main/integrations/main-process-session.ts |  33 +-
 src/main/integrations/net-breadcrumbs.ts      |  56 ++--
 src/main/integrations/onuncaughtexception.ts  |  49 ++-
 src/main/integrations/preload-injection.ts    |  85 +++---
 src/main/integrations/renderer-profiling.ts   | 122 ++++----
 src/main/integrations/screenshots.ts          |  83 +++--
 .../integrations/sentry-minidump/index.ts     | 287 ++++++++----------
 src/renderer/integrations/scope-to-main.ts    |  58 ++--
 15 files changed, 742 insertions(+), 870 deletions(-)

diff --git a/src/integrations.ts b/src/integrations.ts
index 764f1363..0052a092 100644
--- a/src/integrations.ts
+++ b/src/integrations.ts
@@ -19,18 +19,18 @@ import { EventToMain, ScopeToMain } from './renderer/integrations';
 /** Convenience interface used to expose Integrations */
 export interface Integrations {
   // For main process
-  SentryMinidump: SentryMinidump;
-  ElectronMinidump: ElectronMinidump;
-  ElectronBreadcrumbs: ElectronBreadcrumbs;
-  MainContext: MainContext;
-  OnUncaughtExcept: OnUncaughtException;
-  PreloadInjection: PreloadInjection;
-  MainProcessSession: MainProcessSession;
-  AdditionalContext: AdditionalContext;
-  ChildProcess: ChildProcess;
-  Screenshots: Screenshots;
+  SentryMinidump: typeof SentryMinidump;
+  ElectronMinidump: typeof ElectronMinidump;
+  ElectronBreadcrumbs: typeof ElectronBreadcrumbs;
+  MainContext: typeof MainContext;
+  OnUncaughtExcept: typeof OnUncaughtException;
+  PreloadInjection: typeof PreloadInjection;
+  MainProcessSession: typeof MainProcessSession;
+  AdditionalContext: typeof AdditionalContext;
+  ChildProcess: typeof ChildProcess;
+  Screenshots: typeof Screenshots;
   // For renderer process
-  ScopeToMain: ScopeToMain;
+  ScopeToMain: typeof ScopeToMain;
   // eslint-disable-next-line deprecation/deprecation
   EventToMain: EventToMain;
 }
diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts
index 32ebf7d3..5c606838 100644
--- a/src/main/integrations/additional-context.ts
+++ b/src/main/integrations/additional-context.ts
@@ -1,4 +1,5 @@
-import { DeviceContext, Event, EventProcessor, Integration } from '@sentry/types';
+import { convertIntegrationFnToClass } from '@sentry/core';
+import { DeviceContext, IntegrationFn } from '@sentry/types';
 import { app, screen as electronScreen } from 'electron';
 import { CpuInfo, cpus } from 'os';
 
@@ -19,89 +20,80 @@ const DEFAULT_OPTIONS: AdditionalContextOptions = {
   language: true,
 };
 
-/** Adds Electron context to events and normalises paths. */
-export class AdditionalContext implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'AdditionalContext';
-
-  /** @inheritDoc */
-  public readonly name: string;
-
-  private readonly _options: AdditionalContextOptions;
-  private readonly _lazyDeviceContext: DeviceContext;
-
-  public constructor(options: Partial<AdditionalContextOptions> = {}) {
-    this._lazyDeviceContext = {};
-    this.name = AdditionalContext.id;
-    this._options = {
-      ...DEFAULT_OPTIONS,
-      ...options,
-    };
-  }
-
-  /** @inheritDoc */
-  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void {
-    addGlobalEventProcessor(async (event: Event) => this._addAdditionalContext(event));
+const INTEGRATION_NAME = 'AdditionalContext';
 
-    // Some metrics are only available after app ready so we lazily load them
-    whenAppReady.then(
-      () => {
-        const { language, screen } = this._options;
-
-        if (language) {
-          this._lazyDeviceContext.language = app.getLocale();
-        }
+const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContextOptions> = {}) => {
+  const _lazyDeviceContext: DeviceContext = {};
 
-        if (screen) {
-          this._setPrimaryDisplayInfo();
+  const options = {
+    ...DEFAULT_OPTIONS,
+    ...userOptions,
+  };
 
-          electronScreen.on('display-metrics-changed', () => {
-            this._setPrimaryDisplayInfo();
-          });
-        }
-      },
-      () => {
-        // ignore
-      },
-    );
+  function _setPrimaryDisplayInfo(): void {
+    const display = electronScreen.getPrimaryDisplay();
+    const width = Math.floor(display.size.width * display.scaleFactor);
+    const height = Math.floor(display.size.height * display.scaleFactor);
+    _lazyDeviceContext.screen_density = display.scaleFactor;
+    _lazyDeviceContext.screen_resolution = `${width}x${height}`;
   }
 
-  /** Adds additional context to event */
-  private _addAdditionalContext(event: Event): Event {
-    const device: DeviceContext = this._lazyDeviceContext;
-
-    const { memory, cpu } = this._options;
-
-    if (memory) {
-      const { total, free } = process.getSystemMemoryInfo();
-      device.memory_size = total * 1024;
-      device.free_memory = free * 1024;
-    }
+  return {
+    name: INTEGRATION_NAME,
+    setup() {
+      // Some metrics are only available after app ready so we lazily load them
+      whenAppReady.then(
+        () => {
+          const { language, screen } = options;
+
+          if (language) {
+            _lazyDeviceContext.language = app.getLocale();
+          }
+
+          if (screen) {
+            _setPrimaryDisplayInfo();
+
+            electronScreen.on('display-metrics-changed', () => {
+              _setPrimaryDisplayInfo();
+            });
+          }
+        },
+        () => {
+          // ignore
+        },
+      );
+    },
+    processEvent(event) {
+      const device: DeviceContext = _lazyDeviceContext;
+
+      const { memory, cpu } = options;
+
+      if (memory) {
+        const { total, free } = process.getSystemMemoryInfo();
+        device.memory_size = total * 1024;
+        device.free_memory = free * 1024;
+      }
 
-    if (cpu) {
-      const cpuInfo: CpuInfo[] | undefined = cpus();
-      if (cpuInfo && cpuInfo.length) {
-        const firstCpu = cpuInfo[0];
+      if (cpu) {
+        const cpuInfo: CpuInfo[] | undefined = cpus();
+        if (cpuInfo && cpuInfo.length) {
+          const firstCpu = cpuInfo[0];
 
-        device.processor_count = cpuInfo.length;
-        device.cpu_description = firstCpu.model;
-        device.processor_frequency = firstCpu.speed;
+          device.processor_count = cpuInfo.length;
+          device.cpu_description = firstCpu.model;
+          device.processor_frequency = firstCpu.speed;
 
-        if (app.runningUnderARM64Translation) {
-          device.machine_arch = 'arm64';
+          if (app.runningUnderARM64Translation) {
+            device.machine_arch = 'arm64';
+          }
         }
       }
-    }
 
-    return mergeEvents(event, { contexts: { device } });
-  }
+      return mergeEvents(event, { contexts: { device } });
+    },
+  };
+};
 
-  /** Sets the display info */
-  private _setPrimaryDisplayInfo(): void {
-    const display = electronScreen.getPrimaryDisplay();
-    const width = Math.floor(display.size.width * display.scaleFactor);
-    const height = Math.floor(display.size.height * display.scaleFactor);
-    this._lazyDeviceContext.screen_density = display.scaleFactor;
-    this._lazyDeviceContext.screen_resolution = `${width}x${height}`;
-  }
-}
+/** Adds Electron context to events and normalises paths. */
+// eslint-disable-next-line deprecation/deprecation
+export const AdditionalContext = convertIntegrationFnToClass(INTEGRATION_NAME, additionalContext);
diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts
index 5ce27244..c95b1097 100644
--- a/src/main/integrations/browser-window-session.ts
+++ b/src/main/integrations/browser-window-session.ts
@@ -1,4 +1,5 @@
-import { Integration } from '@sentry/types';
+import { convertIntegrationFnToClass } from '@sentry/core';
+import { IntegrationFn } from '@sentry/types';
 import { app, BrowserWindow } from 'electron';
 
 import { ELECTRON_MAJOR_VERSION } from '../electron-normalize';
@@ -29,73 +30,38 @@ interface Options {
 // The state can be, active, inactive, or waiting for a timeout
 type SessionState = { name: 'active' } | { name: 'inactive' } | { name: 'timeout'; timer: NodeJS.Timeout };
 
-/**
- * Tracks sessions as BrowserWindows focused.
- *
- * Supports Electron >= v12
- */
-export class BrowserWindowSession implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'BrowserWindowSession';
-
-  /** @inheritDoc */
-  public readonly name: string;
+const INTEGRATION_NAME = 'BrowserWindowSession';
 
-  private _state: SessionState;
-
-  public constructor(private readonly _options: Options = {}) {
-    if (ELECTRON_MAJOR_VERSION < 12) {
-      throw new Error('BrowserWindowSession requires Electron >= v12');
-    }
-
-    this.name = BrowserWindowSession.id;
-    this._state = { name: 'inactive' };
+const browserWindowSession: IntegrationFn = (options: Options = {}) => {
+  if (ELECTRON_MAJOR_VERSION < 12) {
+    throw new Error('BrowserWindowSession requires Electron >= v12');
   }
 
-  /** @inheritDoc */
-  public setupOnce(): void {
-    app.on('browser-window-created', (_event, window) => {
-      window.on('focus', this._windowStateChanged);
-      window.on('blur', this._windowStateChanged);
-      window.on('show', this._windowStateChanged);
-      window.on('hide', this._windowStateChanged);
-
-      // when the window is closed we need to remove the listeners
-      window.once('closed', () => {
-        window.removeListener('focus', this._windowStateChanged);
-        window.removeListener('blur', this._windowStateChanged);
-        window.removeListener('show', this._windowStateChanged);
-        window.removeListener('hide', this._windowStateChanged);
-      });
-    });
-
-    // if the app exits while the session is active, end the session
-    endSessionOnExit();
-  }
+  let _state: SessionState = { name: 'inactive' };
 
-  private _windowStateChanged = (): void => {
+  function windowStateChanged(): void {
     const hasFocusedWindow = focusedWindow();
 
     if (hasFocusedWindow) {
       // We are now active
-      if (this._state.name === 'inactive') {
+      if (_state.name === 'inactive') {
         // If we were inactive, start a new session
         startSession(true);
-      } else if (this._state.name === 'timeout') {
+      } else if (_state.name === 'timeout') {
         // Clear the timeout since the app has become active again
-        clearTimeout(this._state.timer);
+        clearTimeout(_state.timer);
       }
 
-      this._state = { name: 'active' };
+      _state = { name: 'active' };
     } else {
-      if (this._state.name === 'active') {
+      if (_state.name === 'active') {
         // We have become inactive, start the timeout
-        const timeout = (this._options.backgroundTimeoutSeconds ?? 30) * 1_000;
+        const timeout = (options.backgroundTimeoutSeconds ?? 30) * 1_000;
 
         const timer = setTimeout(() => {
           // if the state says we're still waiting for the timeout, end the session
-          if (this._state.name === 'timeout') {
-            this._state = { name: 'inactive' };
+          if (_state.name === 'timeout') {
+            _state = { name: 'inactive' };
             endSession().catch(() => {
               // ignore
             });
@@ -104,8 +70,39 @@ export class BrowserWindowSession implements Integration {
           // unref so this timer doesn't block app exit
           .unref();
 
-        this._state = { name: 'timeout', timer };
+        _state = { name: 'timeout', timer };
       }
     }
+  }
+
+  return {
+    name: INTEGRATION_NAME,
+    setup() {
+      app.on('browser-window-created', (_event, window) => {
+        window.on('focus', windowStateChanged);
+        window.on('blur', windowStateChanged);
+        window.on('show', windowStateChanged);
+        window.on('hide', windowStateChanged);
+
+        // when the window is closed we need to remove the listeners
+        window.once('closed', () => {
+          window.removeListener('focus', windowStateChanged);
+          window.removeListener('blur', windowStateChanged);
+          window.removeListener('show', windowStateChanged);
+          window.removeListener('hide', windowStateChanged);
+        });
+      });
+
+      // if the app exits while the session is active, end the session
+      endSessionOnExit();
+    },
   };
-}
+};
+
+/**
+ * Tracks sessions as BrowserWindows focused.
+ *
+ * Supports Electron >= v12
+ */
+// eslint-disable-next-line deprecation/deprecation
+export const BrowserWindowSession = convertIntegrationFnToClass(INTEGRATION_NAME, browserWindowSession);
diff --git a/src/main/integrations/child-process.ts b/src/main/integrations/child-process.ts
index 7baa1f71..d160fa14 100644
--- a/src/main/integrations/child-process.ts
+++ b/src/main/integrations/child-process.ts
@@ -1,6 +1,6 @@
-import { addBreadcrumb, captureMessage, getCurrentHub } from '@sentry/core';
+import { addBreadcrumb, captureMessage, convertIntegrationFnToClass } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { Integration, SeverityLevel } from '@sentry/types';
+import { IntegrationFn, SeverityLevel } from '@sentry/types';
 
 import { OrBool } from '../../common/types';
 import { EXIT_REASONS, ExitReason, onChildProcessGone, onRendererProcessGone } from '../electron-normalize';
@@ -36,77 +36,71 @@ function getMessageAndSeverity(reason: ExitReason, proc?: string): { message: st
   }
 }
 
-/** Adds breadcrumbs for Electron events. */
-export class ChildProcess implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'ChildProcess';
-
-  /** @inheritDoc */
-  public readonly name: string;
-
-  private readonly _options: ChildProcessOptions;
-
-  /**
-   * @param _options Integration options
-   */
-  public constructor(options: Partial<OrBool<ChildProcessOptions>> = {}) {
-    this.name = ChildProcess.id;
-    const { breadcrumbs, events } = options;
-    this._options = {
-      breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs == false ? [] : DEFAULT_OPTIONS.breadcrumbs,
-      events: Array.isArray(events) ? events : events == false ? [] : DEFAULT_OPTIONS.events,
-    };
-  }
+const INTEGRATION_NAME = 'ChildProcess';
+
+const childProcess: IntegrationFn = (userOptions: Partial<OrBool<ChildProcessOptions>> = {}) => {
+  const { breadcrumbs, events } = userOptions;
+
+  const options: ChildProcessOptions = {
+    breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs == false ? [] : DEFAULT_OPTIONS.breadcrumbs,
+    events: Array.isArray(events) ? events : events == false ? [] : DEFAULT_OPTIONS.events,
+  };
+
+  return {
+    name: INTEGRATION_NAME,
+    setup(client: NodeClient) {
+      const { breadcrumbs, events } = options;
+      const allReasons = Array.from(new Set([...breadcrumbs, ...events]));
+
+      // only hook these events if we're after more than just the unresponsive event
+      if (allReasons.length > 0) {
+        const clientOptions = client.getOptions() as ElectronMainOptions;
+
+        onChildProcessGone(allReasons, (details) => {
+          const { reason } = details;
+
+          // Capture message first
+          if (events.includes(reason)) {
+            const { message, level } = getMessageAndSeverity(details.reason, details.type);
+            captureMessage(message, { level, tags: { 'event.process': details.type } });
+          }
+
+          // And then add breadcrumbs for subsequent events
+          if (breadcrumbs.includes(reason)) {
+            addBreadcrumb({
+              type: 'process',
+              category: 'child-process',
+              ...getMessageAndSeverity(details.reason, details.type),
+              data: details,
+            });
+          }
+        });
+
+        onRendererProcessGone(allReasons, (contents, details) => {
+          const { reason } = details;
+          const name = clientOptions?.getRendererName?.(contents) || 'renderer';
+
+          // Capture message first
+          if (events.includes(reason)) {
+            const { message, level } = getMessageAndSeverity(details.reason, name);
+            captureMessage(message, level);
+          }
+
+          // And then add breadcrumbs for subsequent events
+          if (breadcrumbs.includes(reason)) {
+            addBreadcrumb({
+              type: 'process',
+              category: 'child-process',
+              ...getMessageAndSeverity(details.reason, name),
+              data: details,
+            });
+          }
+        });
+      }
+    },
+  };
+};
 
-  /** @inheritDoc */
-  public setupOnce(): void {
-    const { breadcrumbs, events } = this._options;
-    const allReasons = Array.from(new Set([...breadcrumbs, ...events]));
-
-    // only hook these events if we're after more than just the unresponsive event
-    if (allReasons.length > 0) {
-      const options = getCurrentHub().getClient<NodeClient>()?.getOptions() as ElectronMainOptions | undefined;
-
-      onChildProcessGone(allReasons, (details) => {
-        const { reason } = details;
-
-        // Capture message first
-        if (events.includes(reason)) {
-          const { message, level } = getMessageAndSeverity(details.reason, details.type);
-          captureMessage(message, { level, tags: { 'event.process': details.type } });
-        }
-
-        // And then add breadcrumbs for subsequent events
-        if (breadcrumbs.includes(reason)) {
-          addBreadcrumb({
-            type: 'process',
-            category: 'child-process',
-            ...getMessageAndSeverity(details.reason, details.type),
-            data: details,
-          });
-        }
-      });
-
-      onRendererProcessGone(allReasons, (contents, details) => {
-        const { reason } = details;
-        const name = options?.getRendererName?.(contents) || 'renderer';
-
-        // Capture message first
-        if (events.includes(reason)) {
-          const { message, level } = getMessageAndSeverity(details.reason, name);
-          captureMessage(message, level);
-        }
-
-        // And then add breadcrumbs for subsequent events
-        if (breadcrumbs.includes(reason)) {
-          addBreadcrumb({
-            type: 'process',
-            category: 'child-process',
-            ...getMessageAndSeverity(details.reason, name),
-            data: details,
-          });
-        }
-      });
-    }
-  }
-}
+/** Adds breadcrumbs for Electron events. */
+// eslint-disable-next-line deprecation/deprecation
+export const ChildProcess = convertIntegrationFnToClass(INTEGRATION_NAME, childProcess);
diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts
index ebc2a0bc..815740af 100644
--- a/src/main/integrations/electron-breadcrumbs.ts
+++ b/src/main/integrations/electron-breadcrumbs.ts
@@ -1,6 +1,6 @@
-import { addBreadcrumb, getCurrentHub } from '@sentry/core';
+import { addBreadcrumb, convertIntegrationFnToClass } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { Breadcrumb, Integration } from '@sentry/types';
+import { Breadcrumb, IntegrationFn } from '@sentry/types';
 import { app, autoUpdater, BrowserWindow, powerMonitor, screen, WebContents } from 'electron';
 
 import { onBrowserWindowCreated, onWebContentsCreated, whenAppReady } from '../electron-normalize';
@@ -103,75 +103,15 @@ export function normalizeOptions(
   }, {} as Partial<ElectronBreadcrumbsOptions<EventFunction | false>>);
 }
 
-/** Adds breadcrumbs for Electron events. */
-export class ElectronBreadcrumbs implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'ElectronBreadcrumbs';
-
-  /** @inheritDoc */
-  public readonly name: string;
-
-  private readonly _options: ElectronBreadcrumbsOptions<EventFunction | false>;
-
-  /**
-   * @param _options Integration options
-   */
-  public constructor(options: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) {
-    this.name = ElectronBreadcrumbs.id;
-    this._options = { ...DEFAULT_OPTIONS, ...normalizeOptions(options) };
-  }
-
-  /** @inheritDoc */
-  public setupOnce(): void {
-    const initOptions = getCurrentHub().getClient<NodeClient>()?.getOptions() as ElectronMainOptions | undefined;
-
-    trackRendererProperties();
-
-    whenAppReady.then(
-      () => {
-        // We can't access these until app 'ready'
-        if (this._options.screen) {
-          this._patchEventEmitter(screen, 'screen', this._options.screen);
-        }
-
-        if (this._options.powerMonitor) {
-          this._patchEventEmitter(powerMonitor, 'powerMonitor', this._options.powerMonitor);
-        }
-      },
-      () => {
-        // ignore
-      },
-    );
-
-    if (this._options.app) {
-      this._patchEventEmitter(app, 'app', this._options.app);
-    }
-
-    if (this._options.autoUpdater) {
-      this._patchEventEmitter(autoUpdater, 'autoUpdater', this._options.autoUpdater);
-    }
-
-    if (this._options.browserWindow) {
-      onBrowserWindowCreated((window) => {
-        const id = window.webContents.id;
-        const windowName = initOptions?.getRendererName?.(window.webContents) || 'window';
-        this._patchEventEmitter(window, windowName, this._options.browserWindow, id);
-      });
-    }
+const INTEGRATION_NAME = 'ElectronBreadcrumbs';
 
-    if (this._options.webContents) {
-      onWebContentsCreated((contents) => {
-        const id = contents.id;
-        const webContentsName = initOptions?.getRendererName?.(contents) || 'renderer';
-        this._patchEventEmitter(contents, webContentsName, this._options.webContents, id);
-      });
-    }
-  }
+const electronBreadcrumbs: IntegrationFn = (userOptions: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) => {
+  const options: ElectronBreadcrumbsOptions<EventFunction | false> = {
+    ...DEFAULT_OPTIONS,
+    ...normalizeOptions(userOptions),
+  };
 
-  /**
-   * Monkey patches the EventEmitter to capture breadcrumbs for the specified events. 🙈
-   */
-  private _patchEventEmitter(
+  function patchEventEmitter(
     emitter: NodeJS.EventEmitter | WebContents | BrowserWindow,
     category: string,
     shouldCapture: EventFunction | undefined | false,
@@ -191,7 +131,7 @@ export class ElectronBreadcrumbs implements Integration {
         if (id) {
           breadcrumb.data = { ...getRendererProperties(id) };
 
-          if (!this._options.captureWindowTitles && breadcrumb.data?.title) {
+          if (!options.captureWindowTitles && breadcrumb.data?.title) {
             delete breadcrumb.data?.title;
           }
         }
@@ -202,4 +142,57 @@ export class ElectronBreadcrumbs implements Integration {
       return emit(event, ...args);
     };
   }
-}
+
+  return {
+    name: INTEGRATION_NAME,
+    setup(client: NodeClient) {
+      const clientOptions = client.getOptions() as ElectronMainOptions | undefined;
+
+      trackRendererProperties();
+
+      whenAppReady.then(
+        () => {
+          // We can't access these until app 'ready'
+          if (options.screen) {
+            patchEventEmitter(screen, 'screen', options.screen);
+          }
+
+          if (options.powerMonitor) {
+            patchEventEmitter(powerMonitor, 'powerMonitor', options.powerMonitor);
+          }
+        },
+        () => {
+          // ignore
+        },
+      );
+
+      if (options.app) {
+        patchEventEmitter(app, 'app', options.app);
+      }
+
+      if (options.autoUpdater) {
+        patchEventEmitter(autoUpdater, 'autoUpdater', options.autoUpdater);
+      }
+
+      if (options.browserWindow) {
+        onBrowserWindowCreated((window) => {
+          const id = window.webContents.id;
+          const windowName = clientOptions?.getRendererName?.(window.webContents) || 'window';
+          patchEventEmitter(window, windowName, options.browserWindow, id);
+        });
+      }
+
+      if (options.webContents) {
+        onWebContentsCreated((contents) => {
+          const id = contents.id;
+          const webContentsName = clientOptions?.getRendererName?.(contents) || 'renderer';
+          patchEventEmitter(contents, webContentsName, options.webContents, id);
+        });
+      }
+    },
+  };
+};
+
+/** Adds breadcrumbs for Electron events. */
+// eslint-disable-next-line deprecation/deprecation
+export const ElectronBreadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, electronBreadcrumbs);
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index ad3be97c..3b2be5c8 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -1,6 +1,6 @@
-import { applyScopeDataToEvent, getCurrentHub } from '@sentry/core';
+import { applyScopeDataToEvent, convertIntegrationFnToClass, getCurrentScope } from '@sentry/core';
 import { NodeClient, NodeOptions } from '@sentry/node';
-import { Event, Integration, ScopeData } from '@sentry/types';
+import { Event, IntegrationFn, ScopeData } from '@sentry/types';
 import { logger, makeDsn, SentryError } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
@@ -21,7 +21,7 @@ function hasKeys(obj: any): boolean {
 
 /** Gets a Scope object with user, tags and extra */
 function getScope(options: NodeOptions): Event {
-  const scope = getCurrentHub().getScope() as any | undefined;
+  const scope = getCurrentScope().getScopeData();
 
   if (!scope) {
     return {};
@@ -31,13 +31,53 @@ function getScope(options: NodeOptions): Event {
     release: options.release,
     environment: options.environment,
     /* eslint-disable @typescript-eslint/no-unsafe-member-access */
-    ...(hasKeys(scope._user) && { user: scope._user }),
-    ...(hasKeys(scope._tags) && { tags: scope._tags }),
-    ...(hasKeys(scope._extra) && { extra: scope._extra }),
+    ...(hasKeys(scope.user) && { user: scope.user }),
+    ...(hasKeys(scope.tags) && { tags: scope.tags }),
+    ...(hasKeys(scope.extra) && { extra: scope.extra }),
     /* eslint-enable @typescript-eslint/no-unsafe-member-access */
   };
 }
 
+/** Chunks up event JSON into 1 or more parameters for use with the native Electron uploader
+ *
+ * Returns chunks with keys and values:
+ * {
+ *    sentry__1: '{ json...',
+ *    sentry__2: 'more json...',
+ *    sentry__x: 'end json }',
+ * }
+ */
+function getNativeUploaderExtraParams(event: Event): { [key: string]: string } {
+  const maxBytes = 20300;
+
+  /** Max chunk sizes are in bytes so we can't chunk by characters or UTF8 could bite us.
+   *
+   * We attempt to split by space (32) and double quote characters (34) as there are plenty in JSON
+   * and they are guaranteed to not be the first byte of a multi-byte UTF8 character.
+   */
+  let buf = Buffer.from(JSON.stringify(event));
+  const chunks = [];
+  while (buf.length) {
+    // Find last '"'
+    let i = buf.lastIndexOf(34, maxBytes + 1);
+    // Or find last ' '
+    if (i < 0) i = buf.lastIndexOf(32, maxBytes + 1);
+    // Or find first '"'
+    if (i < 0) i = buf.indexOf(34, maxBytes);
+    // Or find first ' '
+    if (i < 0) i = buf.indexOf(32, maxBytes);
+    // We couldn't find any space or quote chars so split at maxBytes and hope for the best 🤷‍♂️
+    if (i < 0) i = maxBytes;
+    chunks.push(buf.subarray(0, i + 1).toString());
+    buf = buf.subarray(i + 1);
+  }
+
+  return chunks.reduce((acc, cur, i) => {
+    acc[`sentry__${i + 1}`] = cur;
+    return acc;
+  }, {} as { [key: string]: string });
+}
+
 /**
  * Returns the minidump endpoint in Sentry
  * @param dsn Dsn
@@ -53,68 +93,48 @@ export function minidumpUrlFromDsn(dsn: string): string | undefined {
   }/api/${projectId}/minidump/?sentry_key=${publicKey}`;
 }
 
-/** Sends minidumps via the Electron built-in uploader. */
-export class ElectronMinidump implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'ElectronMinidump';
-
-  /** @inheritDoc */
-  public readonly name: string;
+const INTEGRATION_NAME = 'ElectronMinidump';
 
+const electronMinidump: IntegrationFn = () => {
   /** Counter used to ensure no race condition when updating extra params */
-  private _updateEpoch: number;
-
-  private _customRelease: string | undefined;
-
-  public constructor() {
-    this.name = ElectronMinidump.id;
-    this._updateEpoch = 0;
-  }
-
-  /** @inheritDoc */
-  public setupOnce(): void {
-    // Mac AppStore builds cannot run the crash reporter due to the sandboxing
-    // requirements. In this case, we prevent enabling native crashes entirely.
-    // https://electronjs.org/docs/tutorial/mac-app-store-submission-guide#limitations-of-mas-build
-    if (process.mas) {
-      return;
-    }
-
-    if (rendererRequiresCrashReporterStart()) {
-      throw new SentryError(`The '${this.name}' integration is only supported with Electron >= v9`);
-    }
+  let updateEpoch: number = 0;
+  let customRelease: string | undefined;
 
-    const options = getCurrentHub().getClient<NodeClient>()?.getOptions();
+  async function getNativeUploaderEvent(scope: ScopeData): Promise<Event> {
+    const event = mergeEvents(await getEventDefaults(customRelease), {
+      level: 'fatal',
+      platform: 'native',
+      tags: { 'event.environment': 'native', event_type: 'native' },
+    });
 
-    if (!options?.dsn) {
-      throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied');
-    }
+    applyScopeDataToEvent(event, scope);
 
-    this._customRelease = options.release;
+    delete event.sdkProcessingMetadata;
 
-    this._startCrashReporter(options);
+    // Normalise paths
+    return normalizeEvent(event, app.getAppPath());
+  }
 
-    // If a renderer process crashes, mark any existing session as crashed
-    onRendererProcessGone(CRASH_REASONS, (_, __) => {
-      sessionCrashed();
-    });
+  function updateExtraParams(scope: ScopeData): void {
+    updateEpoch += 1;
+    const currentEpoch = updateEpoch;
 
-    // If we're using the Crashpad minidump uploader, we set extra parameters whenever the scope updates
-    if (usesCrashpad()) {
-      this._setupScopeListener();
-    }
+    getNativeUploaderEvent(scope)
+      .then((event) => {
+        if (currentEpoch !== updateEpoch) {
+          return;
+        }
 
-    // Check if last crash report was likely to have been unreported in the last session
-    unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => {
-      // Check if a previous session was not closed
-      return checkPreviousSession(crashed);
-    }, logger.error);
+        // Update the extra parameters in the main process
+        const mainParams = getNativeUploaderExtraParams(event);
+        for (const key of Object.keys(mainParams)) {
+          crashReporter.addExtraParameter(key, mainParams[key]);
+        }
+      })
+      .catch((error) => logger.error(error));
   }
 
-  /**
-   * Starts the native crash reporter
-   */
-  private _startCrashReporter(options: NodeOptions): void {
+  function startCrashReporter(options: NodeOptions): void {
     const submitURL = minidumpUrlFromDsn(options.dsn || '');
     if (!submitURL) {
       logger.log('Invalid DSN. Cannot start Electron crashReporter');
@@ -138,91 +158,57 @@ export class ElectronMinidump implements Integration {
     });
   }
 
-  /**
-   * Adds a scope listener to persist changes to disk.
-   */
-  private _setupScopeListener(): void {
-    const hubScope = getCurrentHub().getScope();
-    if (hubScope) {
-      hubScope.addScopeListener((updatedScope) => {
-        const scope = updatedScope.getScopeData();
-        scope.eventProcessors = [];
-        this._updateExtraParams(scope);
-      });
-    }
+  function setupScopeListener(): void {
+    getCurrentScope().addScopeListener((updatedScope) => {
+      const scope = updatedScope.getScopeData();
+      scope.eventProcessors = [];
+      updateExtraParams(scope);
+    });
   }
 
-  /** Updates Electron uploader extra params */
-  private _updateExtraParams(scope: ScopeData): void {
-    this._updateEpoch += 1;
-    const currentEpoch = this._updateEpoch;
+  return {
+    name: INTEGRATION_NAME,
+    setup(client: NodeClient) {
+      // Mac AppStore builds cannot run the crash reporter due to the sandboxing
+      // requirements. In this case, we prevent enabling native crashes entirely.
+      // https://electronjs.org/docs/tutorial/mac-app-store-submission-guide#limitations-of-mas-build
+      if (process.mas) {
+        return;
+      }
 
-    this._getNativeUploaderEvent(scope)
-      .then((event) => {
-        if (currentEpoch !== this._updateEpoch) return;
+      if (rendererRequiresCrashReporterStart()) {
+        throw new SentryError(`The '${INTEGRATION_NAME}' integration is only supported with Electron >= v9`);
+      }
 
-        // Update the extra parameters in the main process
-        const mainParams = this._getNativeUploaderExtraParams(event);
-        for (const key of Object.keys(mainParams)) {
-          crashReporter.addExtraParameter(key, mainParams[key]);
-        }
-      })
-      .catch((error) => logger.error(error));
-  }
+      const clientOptions = client.getOptions();
 
-  /** Builds up an event to send with the native Electron uploader */
-  private async _getNativeUploaderEvent(scope: ScopeData): Promise<Event> {
-    const event = mergeEvents(await getEventDefaults(this._customRelease), {
-      level: 'fatal',
-      platform: 'native',
-      tags: { 'event.environment': 'native', event_type: 'native' },
-    });
+      if (!clientOptions?.dsn) {
+        throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied');
+      }
 
-    applyScopeDataToEvent(event, scope);
+      customRelease = clientOptions.release;
 
-    delete event.sdkProcessingMetadata;
+      startCrashReporter(clientOptions);
 
-    // Normalise paths
-    return normalizeEvent(event, app.getAppPath());
-  }
+      // If a renderer process crashes, mark any existing session as crashed
+      onRendererProcessGone(CRASH_REASONS, (_, __) => {
+        sessionCrashed();
+      });
 
-  /** Chunks up event JSON into 1 or more parameters for use with the native Electron uploader
-   *
-   * Returns chunks with keys and values:
-   * {
-   *    sentry__1: '{ json...',
-   *    sentry__2: 'more json...',
-   *    sentry__x: 'end json }',
-   * }
-   */
-  private _getNativeUploaderExtraParams(event: Event): { [key: string]: string } {
-    const maxBytes = 20300;
-
-    /** Max chunk sizes are in bytes so we can't chunk by characters or UTF8 could bite us.
-     *
-     * We attempt to split by space (32) and double quote characters (34) as there are plenty in JSON
-     * and they are guaranteed to not be the first byte of a multi-byte UTF8 character.
-     */
-    let buf = Buffer.from(JSON.stringify(event));
-    const chunks = [];
-    while (buf.length) {
-      // Find last '"'
-      let i = buf.lastIndexOf(34, maxBytes + 1);
-      // Or find last ' '
-      if (i < 0) i = buf.lastIndexOf(32, maxBytes + 1);
-      // Or find first '"'
-      if (i < 0) i = buf.indexOf(34, maxBytes);
-      // Or find first ' '
-      if (i < 0) i = buf.indexOf(32, maxBytes);
-      // We couldn't find any space or quote chars so split at maxBytes and hope for the best 🤷‍♂️
-      if (i < 0) i = maxBytes;
-      chunks.push(buf.subarray(0, i + 1).toString());
-      buf = buf.subarray(i + 1);
-    }
+      // If we're using the Crashpad minidump uploader, we set extra parameters whenever the scope updates
+      if (usesCrashpad()) {
+        setupScopeListener();
+      }
+
+      // Check if last crash report was likely to have been unreported in the last session
+      unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => {
+        // Check if a previous session was not closed
+        return checkPreviousSession(crashed);
+      }, logger.error);
+    },
+  };
+};
 
-    return chunks.reduce((acc, cur, i) => {
-      acc[`sentry__${i + 1}`] = cur;
-      return acc;
-    }, {} as { [key: string]: string });
-  }
-}
+/** Sends minidumps via the Electron built-in uploader. */
+// eslint-disable-next-line deprecation/deprecation
+export const ElectronMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, electronMinidump);
diff --git a/src/main/integrations/main-context.ts b/src/main/integrations/main-context.ts
index 174beff7..5b6ab478 100644
--- a/src/main/integrations/main-context.ts
+++ b/src/main/integrations/main-context.ts
@@ -1,31 +1,24 @@
-import { getCurrentHub } from '@sentry/core';
-import { NodeClient } from '@sentry/node';
-import { Event, EventProcessor, Integration } from '@sentry/types';
+import { convertIntegrationFnToClass } from '@sentry/core';
+import { IntegrationFn } from '@sentry/types';
 import { app } from 'electron';
 
 import { mergeEvents, normalizeEvent } from '../../common';
 import { getEventDefaults } from '../context';
 
-/** Adds Electron context to events and normalises paths. */
-export class MainContext implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'MainContext';
-
-  /** @inheritDoc */
-  public readonly name: string;
-
-  public constructor() {
-    this.name = MainContext.id;
-  }
+const INTEGRATION_NAME = 'MainContext';
 
-  /** @inheritDoc */
-  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void {
-    const options = getCurrentHub().getClient<NodeClient>()?.getOptions();
-
-    addGlobalEventProcessor(async (event: Event) => {
+const mainContext: IntegrationFn = () => {
+  return {
+    name: INTEGRATION_NAME,
+    async processEvent(event, _, client) {
+      const clientOptions = client.getOptions();
       const normalized = normalizeEvent(event, app.getAppPath());
-      const defaults = await getEventDefaults(options?.release, options?.environment);
+      const defaults = await getEventDefaults(clientOptions.release, clientOptions.environment);
       return mergeEvents(defaults, normalized);
-    });
-  }
-}
+    },
+  };
+};
+
+/** Adds Electron context to events and normalises paths. */
+// eslint-disable-next-line deprecation/deprecation
+export const MainContext = convertIntegrationFnToClass(INTEGRATION_NAME, mainContext);
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index af12d8c0..dc4fdab9 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -1,4 +1,5 @@
-import { Integration } from '@sentry/types';
+import { convertIntegrationFnToClass } from '@sentry/core';
+import { IntegrationFn } from '@sentry/types';
 
 import { endSessionOnExit, startSession } from '../sessions';
 
@@ -11,22 +12,18 @@ interface Options {
   sendOnCreate?: boolean;
 }
 
-/** Tracks sessions as the main process lifetime. */
-export class MainProcessSession implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'MainProcessSession';
-
-  /** @inheritDoc */
-  public readonly name: string;
-
-  public constructor(private readonly _options: Options = {}) {
-    this.name = MainProcessSession.id;
-  }
+const INTEGRATION_NAME = 'MainProcessSession';
 
-  /** @inheritDoc */
-  public setupOnce(): void {
-    startSession(!!this._options.sendOnCreate);
+const mainProcessSession: IntegrationFn = (options: Options = {}) => {
+  return {
+    name: INTEGRATION_NAME,
+    setup() {
+      startSession(!!options.sendOnCreate);
+      endSessionOnExit();
+    },
+  };
+};
 
-    endSessionOnExit();
-  }
-}
+/** Tracks sessions as the main process lifetime. */
+// eslint-disable-next-line deprecation/deprecation
+export const MainProcessSession = convertIntegrationFnToClass(INTEGRATION_NAME, mainProcessSession);
diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts
index a6cb4816..3ef3005b 100644
--- a/src/main/integrations/net-breadcrumbs.ts
+++ b/src/main/integrations/net-breadcrumbs.ts
@@ -1,7 +1,7 @@
 /* eslint-disable deprecation/deprecation */
-import { getDynamicSamplingContextFromClient } from '@sentry/core';
+import { convertIntegrationFnToClass, getDynamicSamplingContextFromClient } from '@sentry/core';
 import { getCurrentHub } from '@sentry/node';
-import { DynamicSamplingContext, EventProcessor, Hub, Integration, Span, TracePropagationTargets } from '@sentry/types';
+import { DynamicSamplingContext, IntegrationFn, Span, TracePropagationTargets } from '@sentry/types';
 import {
   dynamicSamplingContextToSentryBaggageHeader,
   fill,
@@ -10,7 +10,7 @@ import {
   LRUMap,
   stringMatchesSomePattern,
 } from '@sentry/utils';
-import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net } from 'electron';
+import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net as electronNet } from 'electron';
 import * as urlModule from 'url';
 
 type ShouldTraceFn = (method: string, url: string) => boolean;
@@ -40,32 +40,6 @@ interface NetOptions {
   tracingOrigins?: ShouldTraceFn | boolean;
 }
 
-/** http module integration */
-export class Net implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'Net';
-
-  /** @inheritDoc */
-  public readonly name: string;
-
-  /** @inheritDoc */
-  public constructor(private readonly _options: NetOptions = {}) {
-    this.name = Net.id;
-  }
-
-  /** @inheritDoc */
-  public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {
-    const clientOptions = getCurrentHub().getClient()?.getOptions();
-
-    // No need to instrument if we don't want to track anything
-    if (this._options.breadcrumbs === false && this._options.tracing === false) {
-      return;
-    }
-
-    fill(net, 'request', createWrappedRequestFactory(this._options, clientOptions?.tracePropagationTargets));
-  }
-}
-
 /**
  * Trimmed down version of the code from Electron here:
  * https://github.com/electron/electron/blob/f3df76dbdc58cb704637b89357e1400791c92cfe/lib/browser/api/net.ts#L209-L269
@@ -199,7 +173,7 @@ function createWrappedRequestFactory(
   };
 
   return function wrappedRequestMethodFactory(originalRequestMethod: RequestMethod): RequestMethod {
-    return function requestMethod(this: typeof net, reqOptions: RequestOptions): ClientRequest {
+    return function requestMethod(this: typeof electronNet, reqOptions: RequestOptions): ClientRequest {
       // eslint-disable-next-line @typescript-eslint/no-this-alias
       const netModule = this;
 
@@ -300,3 +274,25 @@ function addRequestBreadcrumb(
     },
   );
 }
+
+const INTEGRATION_NAME = 'Net';
+
+const net: IntegrationFn = (options: NetOptions = {}) => {
+  return {
+    name: INTEGRATION_NAME,
+    setup() {
+      const clientOptions = getCurrentHub().getClient()?.getOptions();
+
+      // No need to instrument if we don't want to track anything
+      if (options.breadcrumbs === false && options.tracing === false) {
+        return;
+      }
+
+      fill(electronNet, 'request', createWrappedRequestFactory(options, clientOptions?.tracePropagationTargets));
+    },
+  };
+};
+
+/** http module integration */
+// eslint-disable-next-line deprecation/deprecation
+export const Net = convertIntegrationFnToClass(INTEGRATION_NAME, net);
diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts
index 7bd8bdaa..16ce8ef7 100644
--- a/src/main/integrations/onuncaughtexception.ts
+++ b/src/main/integrations/onuncaughtexception.ts
@@ -1,29 +1,17 @@
-import { getCurrentHub, getCurrentScope } from '@sentry/core';
+import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { Event, Integration } from '@sentry/types';
+import { Event, IntegrationFn } from '@sentry/types';
 import { dialog } from 'electron';
 
-/** Capture unhandled errors. */
-export class OnUncaughtException implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'OnUncaughtException';
-
-  /** @inheritDoc */
-  public readonly name: string;
-
-  public constructor() {
-    this.name = OnUncaughtException.id;
-  }
+const INTEGRATION_NAME = 'OnUncaughtException';
 
-  /**
-   * @inheritDoc
-   */
-  public setupOnce(): void {
-    const options = getCurrentHub().getClient<NodeClient>()?.getOptions();
+const onUncaughtException: IntegrationFn = () => {
+  return {
+    name: INTEGRATION_NAME,
+    setup(client: NodeClient) {
+      const options = client.getOptions();
 
-    global.process.on('uncaughtException', (error: Error) => {
-      const self = getCurrentHub().getIntegration(OnUncaughtException);
-      if (self) {
+      global.process.on('uncaughtException', (error: Error) => {
         const scope = getCurrentScope();
 
         scope.addEventProcessor(async (event: Event) => ({
@@ -31,8 +19,7 @@ export class OnUncaughtException implements Integration {
           level: 'fatal',
         }));
 
-        const nodeClient = getCurrentHub().getClient() as NodeClient;
-        nodeClient.captureException(
+        client.captureException(
           error,
           {
             originalException: error,
@@ -43,10 +30,10 @@ export class OnUncaughtException implements Integration {
               },
             },
           },
-          getCurrentHub().getScope(),
+          scope,
         );
 
-        nodeClient.flush(nodeClient.getOptions().shutdownTimeout || 2000).then(
+        client.flush(options.shutdownTimeout || 2000).then(
           () => {
             if (options?.onFatalError) {
               options.onFatalError(error);
@@ -67,7 +54,11 @@ export class OnUncaughtException implements Integration {
             // ignore
           },
         );
-      }
-    });
-  }
-}
+      });
+    },
+  };
+};
+
+/** Capture unhandled errors. */
+// eslint-disable-next-line deprecation/deprecation
+export const OnUncaughtException = convertIntegrationFnToClass(INTEGRATION_NAME, onUncaughtException);
diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts
index 7fc04a9e..d0ba6a1e 100644
--- a/src/main/integrations/preload-injection.ts
+++ b/src/main/integrations/preload-injection.ts
@@ -1,6 +1,5 @@
-import { getCurrentHub } from '@sentry/core';
-import { NodeClient } from '@sentry/node';
-import { Integration } from '@sentry/types';
+import { convertIntegrationFnToClass } from '@sentry/core';
+import { IntegrationFn } from '@sentry/types';
 import { logger } from '@sentry/utils';
 import { app } from 'electron';
 import { existsSync } from 'fs';
@@ -32,53 +31,43 @@ function getPreloadPath(): string | number | undefined {
   return undefined;
 }
 
-/**
- * Injects the preload script into the provided sessions.
- *
- * Defaults to injecting into the defaultSession
- */
-export class PreloadInjection implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'PreloadInjection';
+const INTEGRATION_NAME = 'PreloadInjection';
 
-  /** @inheritDoc */
-  public readonly name: string;
+const preloadInjection: IntegrationFn = () => {
+  return {
+    name: INTEGRATION_NAME,
+    setup(client) {
+      const options = client.getOptions() as ElectronMainOptionsInternal;
 
-  public constructor() {
-    this.name = PreloadInjection.id;
-  }
-
-  /** @inheritDoc */
-  public setupOnce(): void {
-    const options = getCurrentHub().getClient<NodeClient>()?.getOptions() as ElectronMainOptionsInternal;
-
-    // If classic IPC mode is disabled, we shouldn't attempt to inject preload scripts
-    // eslint-disable-next-line no-bitwise
-    if ((options.ipcMode & IPCMode.Classic) == 0) {
-      return;
-    }
+      // If classic IPC mode is disabled, we shouldn't attempt to inject preload scripts
+      // eslint-disable-next-line no-bitwise
+      if ((options.ipcMode & IPCMode.Classic) == 0) {
+        return;
+      }
 
-    app.once('ready', () => {
-      this._addPreloadToSessions(options);
-    });
-  }
+      app.once('ready', () => {
+        const path = getPreloadPath();
 
-  /**
-   * Attempts to add the preload script the the provided sessions
-   */
-  private _addPreloadToSessions(options: ElectronMainOptionsInternal): void {
-    const path = getPreloadPath();
+        if (path && typeof path === 'string' && isAbsolute(path) && existsSync(path)) {
+          for (const sesh of options.getSessions()) {
+            // Fetch any existing preloads so we don't overwrite them
+            const existing = sesh.getPreloads();
+            sesh.setPreloads([path, ...existing]);
+          }
+        } else {
+          logger.log(
+            'The preload script could not be injected automatically. This is most likely caused by bundling of the main process',
+          );
+        }
+      });
+    },
+  };
+};
 
-    if (path && typeof path === 'string' && isAbsolute(path) && existsSync(path)) {
-      for (const sesh of options.getSessions()) {
-        // Fetch any existing preloads so we don't overwrite them
-        const existing = sesh.getPreloads();
-        sesh.setPreloads([path, ...existing]);
-      }
-    } else {
-      logger.log(
-        'The preload script could not be injected automatically. This is most likely caused by bundling of the main process',
-      );
-    }
-  }
-}
+/**
+ * Injects the preload script into the provided sessions.
+ *
+ * Defaults to injecting into the defaultSession
+ */
+// eslint-disable-next-line deprecation/deprecation
+export const PreloadInjection = convertIntegrationFnToClass(INTEGRATION_NAME, preloadInjection);
diff --git a/src/main/integrations/renderer-profiling.ts b/src/main/integrations/renderer-profiling.ts
index 84ff10e5..abf06bfa 100644
--- a/src/main/integrations/renderer-profiling.ts
+++ b/src/main/integrations/renderer-profiling.ts
@@ -1,5 +1,5 @@
-import { NodeClient } from '@sentry/node';
-import { Event, Integration, Profile } from '@sentry/types';
+import { convertIntegrationFnToClass } from '@sentry/core';
+import { Event, IntegrationFn, Profile } from '@sentry/types';
 import { forEachEnvelopeItem, LRUMap } from '@sentry/utils';
 import { app } from 'electron';
 
@@ -54,83 +54,75 @@ function addJsProfilingHeader(
   return { responseHeaders };
 }
 
-/**
- * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions
- */
-export class RendererProfiling implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'RendererProfiling';
+const INTEGRATION_NAME = 'RendererProfiling';
 
-  /** @inheritDoc */
-  public readonly name: string;
+const rendererProfiling: IntegrationFn = () => {
+  return {
+    name: INTEGRATION_NAME,
+    setup(client) {
+      const options = client.getOptions() as ElectronMainOptionsInternal;
+      if (!options.enableRendererProfiling) {
+        return;
+      }
 
-  public constructor() {
-    this.name = RendererProfiling.id;
-  }
+      if (ELECTRON_MAJOR_VERSION < 15) {
+        throw new Error('Renderer profiling requires Electron 15+ (Chromium 94+)');
+      }
 
-  /** @inheritDoc */
-  public setupOnce(): void {
-    //
-  }
+      RENDERER_PROFILES = new LRUMap(10);
 
-  /** @inheritDoc */
-  public setup(client: NodeClient): void {
-    const options = client.getOptions() as ElectronMainOptionsInternal;
-    if (!options.enableRendererProfiling) {
-      return;
-    }
+      app.on('ready', () => {
+        // Ensure the correct headers are set to enable the browser profiler
+        for (const sesh of options.getSessions()) {
+          sesh.webRequest.onHeadersReceived((details, callback) => {
+            callback(addJsProfilingHeader(details.responseHeaders));
+          });
+        }
+      });
 
-    if (ELECTRON_MAJOR_VERSION < 15) {
-      throw new Error('Renderer profiling requires Electron 15+ (Chromium 94+)');
-    }
+      // Copy the profiles back into the event envelopes
+      client.on?.('beforeEnvelope', (envelope) => {
+        let profile_id: string | undefined;
 
-    RENDERER_PROFILES = new LRUMap(10);
+        forEachEnvelopeItem(envelope, (item, type) => {
+          if (type !== 'transaction') {
+            return;
+          }
 
-    app.on('ready', () => {
-      // Ensure the correct headers are set to enable the browser profiler
-      for (const sesh of options.getSessions()) {
-        sesh.webRequest.onHeadersReceived((details, callback) => {
-          callback(addJsProfilingHeader(details.responseHeaders));
-        });
-      }
-    });
+          for (let j = 1; j < item.length; j++) {
+            const event = item[j] as Event;
 
-    // Copy the profiles back into the event envelopes
-    client.on('beforeEnvelope', (envelope) => {
-      let profile_id: string | undefined;
+            if (event && event.contexts && event.contexts.profile && event.contexts.profile.profile_id) {
+              profile_id = event.contexts.profile.profile_id as string;
+              // This can be removed as it's no longer needed
+              delete event.contexts.profile;
+            }
+          }
+        });
 
-      forEachEnvelopeItem(envelope, (item, type) => {
-        if (type !== 'transaction') {
+        if (!profile_id) {
           return;
         }
 
-        for (let j = 1; j < item.length; j++) {
-          const event = item[j] as Event;
+        const profile = RENDERER_PROFILES?.remove(profile_id);
 
-          if (event && event.contexts && event.contexts.profile && event.contexts.profile.profile_id) {
-            profile_id = event.contexts.profile.profile_id as string;
-            // This can be removed as it's no longer needed
-            delete event.contexts.profile;
-          }
+        if (!profile) {
+          return;
         }
-      });
-
-      if (!profile_id) {
-        return;
-      }
-
-      const profile = RENDERER_PROFILES?.remove(profile_id);
 
-      if (!profile) {
-        return;
-      }
+        normaliseProfile(profile, app.getAppPath());
+        profile.release = options.release || getDefaultReleaseName();
+        profile.environment = options.environment || getDefaultEnvironment();
 
-      normaliseProfile(profile, app.getAppPath());
-      profile.release = options.release || getDefaultReleaseName();
-      profile.environment = options.environment || getDefaultEnvironment();
+        // @ts-expect-error untyped envelope
+        envelope[1].push([{ type: 'profile' }, profile]);
+      });
+    },
+  };
+};
 
-      // @ts-expect-error untyped envelope
-      envelope[1].push([{ type: 'profile' }, profile]);
-    });
-  }
-}
+/**
+ * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions
+ */
+// eslint-disable-next-line deprecation/deprecation
+export const RendererProfiling = convertIntegrationFnToClass(INTEGRATION_NAME, rendererProfiling);
diff --git a/src/main/integrations/screenshots.ts b/src/main/integrations/screenshots.ts
index 751eb78e..c44293df 100644
--- a/src/main/integrations/screenshots.ts
+++ b/src/main/integrations/screenshots.ts
@@ -1,56 +1,53 @@
-import { getCurrentHub } from '@sentry/core';
-import { Event, EventHint, EventProcessor, Integration } from '@sentry/types';
+import { convertIntegrationFnToClass } from '@sentry/core';
+import { IntegrationFn } from '@sentry/types';
 import { logger } from '@sentry/utils';
 import { BrowserWindow } from 'electron';
 
 import { capturePage } from '../electron-normalize';
 import { ElectronMainOptions } from '../sdk';
 
-/** Adds Screenshots to events */
-export class Screenshots implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'Screenshots';
-
-  /** @inheritDoc */
-  public readonly name: string;
-
-  public constructor() {
-    this.name = Screenshots.id;
-  }
-
-  /** @inheritDoc */
-  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void {
-    const attachScreenshot = !!(getCurrentHub().getClient()?.getOptions() as ElectronMainOptions).attachScreenshot;
-
-    if (attachScreenshot) {
-      addGlobalEventProcessor(async (event: Event, hint: EventHint) => {
-        // We don't capture screenshots for transactions or native crashes
-        if (!event.transaction && event.platform !== 'native') {
-          let count = 1;
-
-          for (const window of BrowserWindow.getAllWindows()) {
-            if (!hint.attachments) {
-              hint.attachments = [];
-            }
+const INTEGRATION_NAME = 'Screenshots';
+
+const screenshots: IntegrationFn = () => {
+  return {
+    name: INTEGRATION_NAME,
+    async processEvent(event, hint, client) {
+      const attachScreenshot = !!(client.getOptions() as ElectronMainOptions).attachScreenshot;
 
-            try {
-              if (!window.isDestroyed() && window.isVisible()) {
-                const filename = count === 1 ? 'screenshot.png' : `screenshot-${count}.png`;
-                const image = await capturePage(window);
+      if (!attachScreenshot) {
+        return event;
+      }
+
+      // We don't capture screenshots for transactions or native crashes
+      if (!event.transaction && event.platform !== 'native') {
+        let count = 1;
 
-                hint.attachments.push({ filename, data: image.toPNG(), contentType: 'image/png' });
+        for (const window of BrowserWindow.getAllWindows()) {
+          if (!hint.attachments) {
+            hint.attachments = [];
+          }
 
-                count += 1;
-              }
-            } catch (e) {
-              // Catch all errors so we don't break event submission if something goes wrong
-              logger.error('Error capturing screenshot', e);
+          try {
+            if (!window.isDestroyed() && window.isVisible()) {
+              const filename = count === 1 ? 'screenshot.png' : `screenshot-${count}.png`;
+              const image = await capturePage(window);
+
+              hint.attachments.push({ filename, data: image.toPNG(), contentType: 'image/png' });
+
+              count += 1;
             }
+          } catch (e) {
+            // Catch all errors so we don't break event submission if something goes wrong
+            logger.error('Error capturing screenshot', e);
           }
         }
+      }
 
-        return event;
-      });
-    }
-  }
-}
+      return event;
+    },
+  };
+};
+
+/** Adds Screenshots to events */
+// eslint-disable-next-line deprecation/deprecation
+export const Screenshots = convertIntegrationFnToClass(INTEGRATION_NAME, screenshots);
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index c3c8e69e..6952b911 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -1,6 +1,6 @@
-import { applyScopeDataToEvent, captureEvent, getCurrentHub, getCurrentScope, Scope } from '@sentry/core';
+import { applyScopeDataToEvent, captureEvent, convertIntegrationFnToClass, getCurrentScope, Scope } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { Event, Integration, ScopeData } from '@sentry/types';
+import { Event, IntegrationFn, ScopeData } from '@sentry/types';
 import { logger, SentryError } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
@@ -19,102 +19,98 @@ interface PreviousRun {
   event?: Event;
 }
 
-/** Sends minidumps via the Sentry uploader */
-export class SentryMinidump implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'SentryMinidump';
-
-  /** @inheritDoc */
-  public readonly name: string;
+const INTEGRATION_NAME = 'SentryMinidump';
 
+const sentryMinidump: IntegrationFn = () => {
   /** Store to persist context information beyond application crashes. */
-  private _scopeStore?: BufferedWriteStore<PreviousRun>;
-
-  /** Temp store for the scope of last run */
-  private _scopeLastRun?: Promise<PreviousRun>;
+  let scopeStore: BufferedWriteStore<PreviousRun> | undefined;
+  // We need to store the scope in a variable here so it can be attached to minidumps
+  let scopeLastRun: Promise<PreviousRun> | undefined;
+  let minidumpLoader: MinidumpLoader | undefined;
 
-  private _minidumpLoader?: MinidumpLoader;
+  function startCrashReporter(): void {
+    logger.log('Starting Electron crashReporter');
 
-  public constructor() {
-    this.name = SentryMinidump.id;
+    crashReporter.start({
+      companyName: '',
+      ignoreSystemCrashHandler: true,
+      productName: app.name || app.getName(),
+      // Empty string doesn't work for Linux Crashpad and no submitURL doesn't work for older versions of Electron
+      submitURL: 'https://f.a.k/e',
+      uploadToServer: false,
+      compress: true,
+    });
   }
 
-  /** @inheritDoc */
-  public setupOnce(): void {
-    // Mac AppStore builds cannot run the crash reporter due to the sandboxing
-    // requirements. In this case, we prevent enabling native crashes entirely.
-    // https://electronjs.org/docs/tutorial/mac-app-store-submission-guide#limitations-of-mas-build
-    if (process.mas) {
-      return;
-    }
-
-    this._startCrashReporter();
+  function setupScopeListener(currentRelease: string, currentEnvironment: string): void {
+    const scopeChanged = (updatedScope: Scope): void => {
+      // Since the initial scope read is async, we need to ensure that any writes do not beat that
+      // https://github.com/getsentry/sentry-electron/issues/585
+      setImmediate(async () =>
+        scopeStore?.set({
+          scope: updatedScope.getScopeData(),
+          event: await getEventDefaults(currentRelease, currentEnvironment),
+        }),
+      );
+    };
 
-    this._scopeStore = new BufferedWriteStore<PreviousRun>(getSentryCachePath(), 'scope_v3', {
-      scope: new Scope().getScopeData(),
-    });
+    const scope = getCurrentScope();
 
-    // We need to store the scope in a variable here so it can be attached to minidumps
-    this._scopeLastRun = this._scopeStore.get();
+    if (scope) {
+      scope.addScopeListener(scopeChanged);
+      // Ensure at least one event is written to disk
+      scopeChanged(scope);
+    }
+  }
 
-    const hub = getCurrentHub();
-    const client = hub.getClient<NodeClient>();
-    const options = client?.getOptions() as ElectronMainOptions;
+  async function sendNativeCrashes(client: NodeClient, eventIn: Event): Promise<boolean> {
+    // Whenever we are called, assume that the crashes we are going to load down
+    // below have occurred recently. This means, we can use the same event data
+    // for all minidumps that we load now. There are two conditions:
+    //
+    //  1. The application crashed and we are just starting up. The stored
+    //     breadcrumbs and context reflect the state during the application
+    //     crash.
+    //
+    //  2. A renderer process crashed recently and we have just been notified
+    //     about it. Just use the breadcrumbs and context information we have
+    //     right now and hope that the delay was not too long.
 
-    const currentRelease = options?.release || getDefaultReleaseName();
-    const currentEnvironment = options?.environment || getDefaultEnvironment();
+    const event = eventIn;
 
-    this._setupScopeListener(currentRelease, currentEnvironment);
+    // If this is a native main process crash, we need to apply the scope and context from the previous run
+    if (event.tags?.['event.process'] === 'browser') {
+      const previousRun = await scopeLastRun;
+      if (previousRun) {
+        if (previousRun.scope) {
+          applyScopeDataToEvent(event, previousRun.scope);
+        }
 
-    if (!options?.dsn) {
-      throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied');
+        event.release = previousRun.event?.release || event.release;
+        event.environment = previousRun.event?.environment || event.environment;
+        event.contexts = previousRun.event?.contexts || event.contexts;
+      }
     }
 
-    trackRendererProperties();
-
-    this._minidumpLoader = getMinidumpLoader();
-
-    onRendererProcessGone(EXIT_REASONS, (contents, details) => this._sendRendererCrash(options, contents, details));
-    onChildProcessGone(EXIT_REASONS, (details) => this._sendChildProcessCrash(options, details));
-
-    // Start to submit recent minidump crashes. This will load breadcrumbs and
-    // context information that was cached on disk prior to the crash.
-    this._sendNativeCrashes({
-      level: 'fatal',
-      platform: 'native',
-      tags: {
-        'event.environment': 'native',
-        'event.process': 'browser',
-        event_type: 'native',
-      },
-    })
-      .then((minidumpsFound) =>
-        // Check for previous uncompleted session. If a previous session exists
-        // and no minidumps were found, its likely an abnormal exit
-        checkPreviousSession(minidumpsFound),
-      )
-      .catch((error) => logger.error(error));
-  }
+    if (!event) {
+      return false;
+    }
 
-  /** Starts the native crash reporter */
-  private _startCrashReporter(): void {
-    logger.log('Starting Electron crashReporter');
+    // If the SDK is not enabled, tell the loader to delete all minidumps
+    const deleteAll = client.getOptions().enabled === false;
 
-    crashReporter.start({
-      companyName: '',
-      ignoreSystemCrashHandler: true,
-      productName: app.name || app.getName(),
-      // Empty string doesn't work for Linux Crashpad and no submitURL doesn't work for older versions of Electron
-      submitURL: 'https://f.a.k/e',
-      uploadToServer: false,
-      compress: true,
+    let minidumpSent = false;
+    await minidumpLoader?.(deleteAll, (attachment) => {
+      captureEvent(event as Event, { attachments: [attachment] });
+      minidumpSent = true;
     });
+
+    // Unset to recover memory
+    return minidumpSent;
   }
 
-  /**
-   * Helper function for sending renderer crashes
-   */
-  private async _sendRendererCrash(
+  async function sendRendererCrash(
+    client: NodeClient,
     options: ElectronMainOptions,
     contents: Electron.WebContents,
     details: Partial<Electron.RenderProcessGoneDetails>,
@@ -142,17 +138,15 @@ export class SentryMinidump implements Integration {
       },
     });
 
-    const found = await this._sendNativeCrashes(event);
+    const found = await sendNativeCrashes(client, event);
 
     if (found) {
       sessionCrashed();
     }
   }
 
-  /**
-   * Helper function for sending child process crashes
-   */
-  private async _sendChildProcessCrash(
+  async function sendChildProcessCrash(
+    client: NodeClient,
     options: ElectronMainOptions,
     details: Omit<Electron.Details, 'exitCode'>,
   ): Promise<void> {
@@ -175,97 +169,68 @@ export class SentryMinidump implements Integration {
       },
     });
 
-    const found = await this._sendNativeCrashes(event);
+    const found = await sendNativeCrashes(client, event);
 
     if (found) {
       sessionCrashed();
     }
   }
 
-  /**
-   * Adds a scope listener to persist changes to disk.
-   */
-  private _setupScopeListener(currentRelease: string, currentEnvironment: string): void {
-    const scopeChanged = (updatedScope: Scope): void => {
-      // Since the initial scope read is async, we need to ensure that any writes do not beat that
-      // https://github.com/getsentry/sentry-electron/issues/585
-      setImmediate(async () => {
-        void this._scopeStore?.set({
-          scope: updatedScope.getScopeData(),
-          event: await getEventDefaults(currentRelease, currentEnvironment),
-        });
-      });
-    };
-
-    const scope = getCurrentScope();
-
-    if (scope) {
-      scope.addScopeListener(scopeChanged);
-      // Ensure at least one event is written to disk
-      scopeChanged(scope);
-    }
-  }
-
-  /**
-   * Loads new native crashes from disk and sends them to Sentry.
-   *
-   * Returns true if one or more minidumps were found
-   */
-  private async _sendNativeCrashes(eventIn: Event): Promise<boolean> {
-    // Whenever we are called, assume that the crashes we are going to load down
-    // below have occurred recently. This means, we can use the same event data
-    // for all minidumps that we load now. There are two conditions:
-    //
-    //  1. The application crashed and we are just starting up. The stored
-    //     breadcrumbs and context reflect the state during the application
-    //     crash.
-    //
-    //  2. A renderer process crashed recently and we have just been notified
-    //     about it. Just use the breadcrumbs and context information we have
-    //     right now and hope that the delay was not too long.
+  return {
+    name: INTEGRATION_NAME,
+    setup(client: NodeClient): void {
+      // Mac AppStore builds cannot run the crash reporter due to the sandboxing
+      // requirements. In this case, we prevent enabling native crashes entirely.
+      // https://electronjs.org/docs/tutorial/mac-app-store-submission-guide#limitations-of-mas-build
+      if (process.mas) {
+        return;
+      }
 
-    if (this._minidumpLoader === undefined) {
-      throw new SentryError('Invariant violation: Native crashes not enabled');
-    }
+      startCrashReporter();
 
-    const hub = getCurrentHub();
-    const client = hub.getClient();
+      scopeStore = new BufferedWriteStore<PreviousRun>(getSentryCachePath(), 'scope_v3', {
+        scope: new Scope().getScopeData(),
+      });
+      scopeLastRun = scopeStore.get();
+      minidumpLoader = getMinidumpLoader();
 
-    if (!client) {
-      return true;
-    }
+      const options = client.getOptions();
 
-    const event = eventIn;
+      const currentRelease = options?.release || getDefaultReleaseName();
+      const currentEnvironment = options?.environment || getDefaultEnvironment();
 
-    // If this is a native main process crash, we need to apply the scope and context from the previous run
-    if (event.tags?.['event.process'] === 'browser') {
-      const previousRun = await this._scopeLastRun;
-      if (previousRun) {
-        if (previousRun.scope) {
-          applyScopeDataToEvent(event, previousRun.scope);
-        }
+      setupScopeListener(currentRelease, currentEnvironment);
 
-        event.release = previousRun.event?.release || event.release;
-        event.environment = previousRun.event?.environment || event.environment;
-        event.contexts = previousRun.event?.contexts || event.contexts;
+      if (!options?.dsn) {
+        throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied');
       }
-    }
 
-    if (!event) {
-      return false;
-    }
+      trackRendererProperties();
 
-    // If the SDK is not enabled, tell the loader to delete all minidumps
-    const deleteAll = client.getOptions().enabled === false;
+      onRendererProcessGone(EXIT_REASONS, (contents, details) => sendRendererCrash(client, options, contents, details));
+      onChildProcessGone(EXIT_REASONS, (details) => sendChildProcessCrash(client, options, details));
 
-    let minidumpSent = false;
-    await this._minidumpLoader(deleteAll, (attachment) => {
-      captureEvent(event as Event, { attachments: [attachment] });
-      minidumpSent = true;
-    });
+      // Start to submit recent minidump crashes. This will load breadcrumbs and
+      // context information that was cached on disk prior to the crash.
+      sendNativeCrashes(client, {
+        level: 'fatal',
+        platform: 'native',
+        tags: {
+          'event.environment': 'native',
+          'event.process': 'browser',
+          event_type: 'native',
+        },
+      })
+        .then((minidumpsFound) =>
+          // Check for previous uncompleted session. If a previous session exists
+          // and no minidumps were found, its likely an abnormal exit
+          checkPreviousSession(minidumpsFound),
+        )
+        .catch((error) => logger.error(error));
+    },
+  };
+};
 
-    // Unset to recover memory
-    this._scopeLastRun = undefined;
-    return minidumpSent;
-  }
-}
+/** Sends minidumps via the Sentry uploader */
+// eslint-disable-next-line deprecation/deprecation
+export const SentryMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, sentryMinidump);
diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts
index c2ae4ff4..66ab2243 100644
--- a/src/renderer/integrations/scope-to-main.ts
+++ b/src/renderer/integrations/scope-to-main.ts
@@ -1,41 +1,31 @@
-import { getCurrentHub } from '@sentry/core';
-import { Integration } from '@sentry/types';
+import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core';
+import { IntegrationFn } from '@sentry/types';
 import { normalize } from '@sentry/utils';
 
 import { getIPC } from '../ipc';
 
-/**
- * Passes scope changes to the main process.
- */
-export class ScopeToMain implements Integration {
-  /** @inheritDoc */
-  public static id: string = 'ScopeToMain';
-
-  /** @inheritDoc */
-  public readonly name: string;
+const INTEGRATION_NAME = 'ScopeToMain';
 
-  public constructor() {
-    this.name = ScopeToMain.id;
-  }
+const scopeToMain: IntegrationFn = () => {
+  return {
+    name: INTEGRATION_NAME,
+    setup() {
+      const scope = getCurrentScope();
+      if (scope) {
+        const ipc = getIPC();
 
-  /** @inheritDoc */
-  public setupOnce(): void {
-    this._setupScopeListener();
-  }
+        scope.addScopeListener((updatedScope) => {
+          ipc.sendScope(JSON.stringify(normalize(updatedScope.getScopeData(), 20, 2_000)));
+          scope.clearBreadcrumbs();
+          scope.clearAttachments();
+        });
+      }
+    },
+  };
+};
 
-  /**
-   * Sends the scope to the main process when it updates.
-   */
-  private _setupScopeListener(): void {
-    const scope = getCurrentHub().getScope();
-    if (scope) {
-      const ipc = getIPC();
-
-      scope.addScopeListener((updatedScope) => {
-        ipc.sendScope(JSON.stringify(normalize(updatedScope.getScopeData(), 20, 2_000)));
-        scope.clearBreadcrumbs();
-        scope.clearAttachments();
-      });
-    }
-  }
-}
+/**
+ * Passes scope changes to the main process.
+ */
+// eslint-disable-next-line deprecation/deprecation
+export const ScopeToMain = convertIntegrationFnToClass(INTEGRATION_NAME, scopeToMain);

From bac2501e083c9a86d210d04bdce6d41df9ec7dd9 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Fri, 5 Jan 2024 19:44:08 +0100
Subject: [PATCH 193/239] feat: Update to v7.92.0 of JavaScript SDKs (#810)

---
 package.json                                  |  14 +-
 src/common/normalize.ts                       |  43 +----
 src/index.ts                                  |  27 ++-
 src/main/anr.ts                               | 119 +++++++------
 src/main/context.ts                           |   1 -
 src/main/index.ts                             |   7 +-
 src/main/integrations/anr.ts                  |  66 ++++++++
 src/main/integrations/electron-minidump.ts    |   6 +-
 src/main/integrations/index.ts                |   1 +
 src/main/renderers.ts                         |   4 +-
 src/main/sdk.ts                               |  14 +-
 src/main/sessions.ts                          |   6 -
 src/main/stack-parse.ts                       |   6 +-
 src/renderer/index.ts                         |   5 +
 src/renderer/sdk.ts                           |   2 +-
 test/e2e/recipe/normalize.ts                  |  13 +-
 test/e2e/test-apps/anr/anr-main/event.json    |  27 +--
 test/e2e/test-apps/anr/anr-main/recipe.yml    |   2 +-
 test/e2e/test-apps/anr/anr-main/src/main.js   |  13 +-
 .../e2e/test-apps/anr/anr-renderer/recipe.yml |   2 +-
 .../test-apps/native-electron/gpu/event.json  |   9 +-
 .../event-no-crashpad.json                    |   7 +-
 .../main-custom-release/event.json            |   1 -
 .../main/event-no-crashpad.json               |   7 +-
 .../test-apps/native-electron/main/event.json |   1 -
 .../event-no-crashpad.json                    |   7 +-
 .../renderer-custom-release/event.json        |   7 +-
 .../native-electron/renderer/event.json       |   9 +-
 .../event.json                                |   1 -
 .../event-no-crashpad.json                    |   7 +-
 .../event.json                                |   9 +-
 test/unit/normalize.test.ts                   |  70 --------
 yarn.lock                                     | 158 +++++++++---------
 33 files changed, 312 insertions(+), 359 deletions(-)
 create mode 100644 src/main/integrations/anr.ts
 delete mode 100644 test/unit/normalize.test.ts

diff --git a/package.json b/package.json
index d277597b..84af72a4 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.90.0",
-    "@sentry/core": "7.90.0",
-    "@sentry/node": "7.90.0",
-    "@sentry/types": "7.90.0",
-    "@sentry/utils": "7.90.0",
+    "@sentry/browser": "7.92.0",
+    "@sentry/core": "7.92.0",
+    "@sentry/node": "7.92.0",
+    "@sentry/types": "7.92.0",
+    "@sentry/utils": "7.92.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.90.0",
-    "@sentry-internal/typescript": "7.90.0",
+    "@sentry-internal/eslint-config-sdk": "7.92.0",
+    "@sentry-internal/typescript": "7.92.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/common/normalize.ts b/src/common/normalize.ts
index c2eda157..ab191b89 100644
--- a/src/common/normalize.ts
+++ b/src/common/normalize.ts
@@ -1,32 +1,5 @@
 import { Envelope, Event, Profile, ReplayEvent } from '@sentry/types';
-import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem } from '@sentry/utils';
-
-/**
- * Normalizes URLs in exceptions and stacktraces so Sentry can fingerprint
- * across platforms.
- *
- * @param url The URL to be normalized.
- * @param basePath The application base path.
- * @returns The normalized URL.
- */
-export function normalizeUrl(url: string, basePath: string): string {
-  const escapedBase = basePath
-    // Backslash to forward
-    .replace(/\\/g, '/')
-    // Escape RegExp special characters
-    .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
-
-  let newUrl = url;
-  try {
-    newUrl = decodeURI(url);
-  } catch (_Oo) {
-    // Sometime this breaks
-  }
-  return newUrl
-    .replace(/\\/g, '/')
-    .replace(/webpack:\/?/g, '') // Remove intermediate base path
-    .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///');
-}
+import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem, normalizeUrlToBase } from '@sentry/utils';
 
 /**
  * Normalizes all URLs in an event. See {@link normalizeUrl} for more
@@ -40,7 +13,7 @@ export function normalizeEvent(event: Event, basePath: string): Event {
   for (const exception of event.exception?.values || []) {
     for (const frame of exception.stacktrace?.frames || []) {
       if (frame.filename) {
-        frame.filename = normalizeUrl(frame.filename, basePath);
+        frame.filename = normalizeUrlToBase(frame.filename, basePath);
       }
     }
   }
@@ -48,17 +21,17 @@ export function normalizeEvent(event: Event, basePath: string): Event {
   // We need to normalize debug ID images the same way as the stack frames for symbolicator to match them correctly
   for (const debugImage of event.debug_meta?.images || []) {
     if (debugImage.type === 'sourcemap') {
-      debugImage.code_file = normalizeUrl(debugImage.code_file, basePath);
+      debugImage.code_file = normalizeUrlToBase(debugImage.code_file, basePath);
     }
   }
 
   if (event.transaction) {
-    event.transaction = normalizeUrl(event.transaction, basePath);
+    event.transaction = normalizeUrlToBase(event.transaction, basePath);
   }
 
   const { request = {} } = event;
   if (request.url) {
-    request.url = normalizeUrl(request.url, basePath);
+    request.url = normalizeUrlToBase(request.url, basePath);
   }
 
   event.contexts = {
@@ -96,11 +69,11 @@ export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: stri
       const [headers, event] = item as [{ type: 'replay_event' }, ReplayEvent];
 
       if (Array.isArray(event.urls)) {
-        event.urls = event.urls.map((url) => normalizeUrl(url, basePath));
+        event.urls = event.urls.map((url) => normalizeUrlToBase(url, basePath));
       }
 
       if (event?.request?.url) {
-        event.request.url = normalizeUrl(event.request.url, basePath);
+        event.request.url = normalizeUrlToBase(event.request.url, basePath);
       }
 
       modifiedEnvelope = addItemToEnvelope(modifiedEnvelope, [headers, event]);
@@ -118,7 +91,7 @@ export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: stri
 export function normaliseProfile(profile: Profile, basePath: string): void {
   for (const frame of profile.profile.frames) {
     if (frame.abs_path) {
-      frame.abs_path = normalizeUrl(frame.abs_path, basePath);
+      frame.abs_path = normalizeUrlToBase(frame.abs_path, basePath);
     }
   }
 }
diff --git a/src/index.ts b/src/index.ts
index 5887fe37..aaf4462a 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -44,7 +44,10 @@ export {
   getCurrentHub,
   getClient,
   getCurrentScope,
+  getGlobalScope,
+  getIsolationScope,
   Hub,
+  // eslint-disable-next-line deprecation/deprecation
   lastEventId,
   makeMain,
   runWithAsyncContext,
@@ -57,6 +60,7 @@ export {
   setTags,
   setUser,
   spanStatusfromHttpCode,
+  // eslint-disable-next-line deprecation/deprecation
   trace,
   withScope,
   captureCheckIn,
@@ -88,6 +92,7 @@ interface ProcessEntryPoint {
   init: (options: Partial<ElectronOptions>) => void;
   close?: (timeout?: number) => Promise<boolean>;
   flush?: (timeout?: number) => Promise<boolean>;
+  // eslint-disable-next-line deprecation/deprecation
   enableMainProcessAnrDetection?(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void>;
 }
 
@@ -194,28 +199,18 @@ export async function flush(timeout?: number): Promise<boolean> {
 }
 
 /**
- * **Note** This feature is still in beta so there may be breaking changes in future releases.
- *
- * Starts a child process that detects Application Not Responding (ANR) errors.
- *
- * It's important to await on the returned promise before your app code to ensure this code does not run in the ANR
- * child process.
+ * @deprecated Use `Anr` integration instead.
  *
  * ```js
- * import { init, enableMainProcessAnrDetection } from '@sentry/electron';
- *
- * init({ dsn: "__DSN__" });
+ * import { init, Integrations } from '@sentry/electron';
  *
- * // with ESM + Electron v28+
- * await enableMainProcessAnrDetection({ captureStackTrace: true });
- * runApp();
- *
- * // with CJS
- * enableMainProcessAnrDetection({ captureStackTrace: true }).then(() => {
- *   runApp();
+ * init({
+ *   dsn: "__DSN__",
+ *   integrations: [new Integrations.Anr({ captureStackTrace: true })],
  * });
  * ```
  */
+// eslint-disable-next-line deprecation/deprecation
 export function enableMainProcessAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> {
   const entryPoint = getEntryPoint();
 
diff --git a/src/main/anr.ts b/src/main/anr.ts
index e6de9047..250b524c 100644
--- a/src/main/anr.ts
+++ b/src/main/anr.ts
@@ -1,16 +1,10 @@
-import {
-  captureEvent,
-  enableAnrDetection as enableNodeAnrDetection,
-  getCurrentHub,
-  getModuleFromFilename,
-  StackFrame,
-} from '@sentry/node';
+import { captureEvent, getClient, getCurrentHub, getModuleFromFilename, NodeClient, StackFrame } from '@sentry/node';
 import { Event } from '@sentry/types';
-import { createDebugPauseMessageHandler, logger, watchdogTimer } from '@sentry/utils';
-import { app, WebContents } from 'electron';
+import { callFrameToStackFrame, logger, stripSentryFramesAndReverse, watchdogTimer } from '@sentry/utils';
+import { WebContents } from 'electron';
 
 import { RendererStatus } from '../common';
-import { ELECTRON_MAJOR_VERSION } from './electron-normalize';
+import { Anr } from './integrations/anr';
 import { ElectronMainOptions } from './sdk';
 import { sessionAnr } from './sessions';
 
@@ -47,17 +41,60 @@ function sendRendererAnrEvent(contents: WebContents, blockedMs: number, frames?:
   captureEvent(event);
 }
 
+interface ScriptParsedEventDataType {
+  scriptId: string;
+  url: string;
+}
+
+interface Location {
+  scriptId: string;
+  lineNumber: number;
+  columnNumber?: number;
+}
+
+interface CallFrame {
+  functionName: string;
+  location: Location;
+  url: string;
+}
+
+interface PausedEventDataType {
+  callFrames: CallFrame[];
+  reason: string;
+}
+
 function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFrame[]) => void): () => void {
   contents.debugger.attach('1.3');
 
-  const messageHandler = createDebugPauseMessageHandler(
-    (cmd) => contents.debugger.sendCommand(cmd),
-    getModuleFromFilename,
-    pausedStack,
-  );
+  // Collect scriptId -> url map so we can look up the filenames later
+  const scripts = new Map<string, string>();
 
   contents.debugger.on('message', (_, method, params) => {
-    messageHandler({ method, params } as Parameters<typeof messageHandler>[0]);
+    if (method === 'Debugger.scriptParsed') {
+      const param = params as ScriptParsedEventDataType;
+      scripts.set(param.scriptId, param.url);
+    } else if (method === 'Debugger.paused') {
+      const param = params as PausedEventDataType;
+
+      if (param.reason !== 'other') {
+        return;
+      }
+
+      // copy the frames
+      const callFrames = [...param.callFrames];
+
+      contents.debugger.sendCommand('Debugger.resume').then(null, () => {
+        // ignore
+      });
+
+      const stackFrames = stripSentryFramesAndReverse(
+        callFrames.map((frame) =>
+          callFrameToStackFrame(frame, scripts.get(frame.location.scriptId), getModuleFromFilename),
+        ),
+      );
+
+      pausedStack(stackFrames);
+    }
   });
 
   // In node, we enable just before pausing but for Chrome, the debugger must be enabled before he ANR event occurs
@@ -86,11 +123,6 @@ function createHrTimer(): { getTimeMs: () => number; reset: () => void } {
   };
 }
 
-/** Are we currently running in the ANR child process */
-export function isAnrChildProcess(): boolean {
-  return !!process.env.SENTRY_ANR_CHILD_PROCESS;
-}
-
 /** Creates a renderer ANR status hook */
 export function createRendererAnrStatusHandler(): (status: RendererStatus, contents: WebContents) => void {
   function log(message: string, ...args: unknown[]): void {
@@ -141,38 +173,29 @@ export function createRendererAnrStatusHandler(): (status: RendererStatus, conte
   };
 }
 
+interface LegacyOptions {
+  entryScript: string;
+  pollInterval: number;
+  anrThreshold: number;
+  captureStackTrace: boolean;
+  debug: boolean;
+}
+
 /**
- * **Note** This feature is still in beta so there may be breaking changes in future releases.
- *
- * Starts a child process that detects Application Not Responding (ANR) errors.
- *
- * It's important to await on the returned promise before your app code to ensure this code does not run in the ANR
- * child process.
+ * @deprecated Use `Anr` integration instead.
  *
  * ```js
- * import { init, enableMainProcessAnrDetection } from '@sentry/electron';
+ * import { init, Integrations } from '@sentry/electron';
  *
- * init({ dsn: "__DSN__" });
- *
- * // with ESM + Electron v28+
- * await enableMainProcessAnrDetection({ captureStackTrace: true });
- * runApp();
- *
- * // with CJS
- * enableMainProcessAnrDetection({ captureStackTrace: true }).then(() => {
- *   runApp();
+ * init({
+ *   dsn: "__DSN__",
+ *   integrations: [new Integrations.Anr({ captureStackTrace: true })],
  * });
  * ```
  */
-export function enableMainProcessAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> {
-  if (ELECTRON_MAJOR_VERSION < 4) {
-    throw new Error('Main process ANR detection is only supported on Electron v4+');
-  }
-
-  const mainOptions = {
-    entryScript: app.getAppPath(),
-    ...options,
-  };
-
-  return enableNodeAnrDetection(mainOptions);
+export function enableMainProcessAnrDetection(options: Partial<LegacyOptions> = {}): Promise<void> {
+  const integration = new Anr(options);
+  const client = getClient() as NodeClient;
+  integration.setup?.(client);
+  return Promise.resolve();
 }
diff --git a/src/main/context.ts b/src/main/context.ts
index 6bff27e9..0a5f9786 100644
--- a/src/main/context.ts
+++ b/src/main/context.ts
@@ -297,7 +297,6 @@ export function getDefaultEnvironment(): string {
  */
 async function _getEventDefaults(release?: string, environment?: string): Promise<Event> {
   return {
-    sdk: getSdkInfo(),
     contexts: await getContexts(),
     environment: environment || getDefaultEnvironment(),
     release: release || getDefaultReleaseName(),
diff --git a/src/main/index.ts b/src/main/index.ts
index 0b55870c..c9ee1017 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -45,6 +45,8 @@ export {
   getCurrentHub,
   getClient,
   getCurrentScope,
+  getGlobalScope,
+  getIsolationScope,
   Hub,
   makeMain,
   runWithAsyncContext,
@@ -57,6 +59,7 @@ export {
   setTags,
   setUser,
   spanStatusfromHttpCode,
+  // eslint-disable-next-line deprecation/deprecation
   trace,
   withScope,
   captureCheckIn,
@@ -74,13 +77,15 @@ export {
 export type { SpanStatusType } from '@sentry/core';
 
 export type { NodeOptions } from '@sentry/node';
+// eslint-disable-next-line deprecation/deprecation
 export { flush, close, NodeClient, lastEventId } from '@sentry/node';
 
 export { makeElectronTransport } from './transports/electron-net';
 export { makeElectronOfflineTransport } from './transports/electron-offline-net';
-export const Integrations = { ...ElectronMainIntegrations, ...NodeIntegrations };
+export const Integrations = { ...NodeIntegrations, ...ElectronMainIntegrations };
 
 export type { ElectronMainOptions } from './sdk';
 export { init, defaultIntegrations } from './sdk';
 export { IPCMode } from '../common';
+// eslint-disable-next-line deprecation/deprecation
 export { enableMainProcessAnrDetection } from './anr';
diff --git a/src/main/integrations/anr.ts b/src/main/integrations/anr.ts
new file mode 100644
index 00000000..090ebdd3
--- /dev/null
+++ b/src/main/integrations/anr.ts
@@ -0,0 +1,66 @@
+import { Integrations } from '@sentry/node';
+import { Primitive } from '@sentry/types';
+import { app } from 'electron';
+
+import { ELECTRON_MAJOR_VERSION } from '../electron-normalize';
+
+/**
+ * ConstructorParameters<typeof Integrations.Anr> doesn't work below because integration constructor types are broken here:
+ * https://github.com/getsentry/sentry-javascript/blob/f28f3a968c52075694ecef4efef354f806fec100/packages/node/src/index.ts#L100-L116
+ */
+interface Options {
+  /**
+   * Interval to send heartbeat messages to the ANR worker.
+   *
+   * Defaults to 50ms.
+   */
+  pollInterval: number;
+  /**
+   * Threshold in milliseconds to trigger an ANR event.
+   *
+   * Defaults to 5000ms.
+   */
+  anrThreshold: number;
+  /**
+   * Whether to capture a stack trace when the ANR event is triggered.
+   *
+   * Defaults to `false`.
+   *
+   * This uses the node debugger which enables the inspector API and opens the required ports.
+   */
+  captureStackTrace: boolean;
+  /**
+   * Tags to include with ANR events.
+   */
+  staticTags: { [key: string]: Primitive };
+  /**
+   * @ignore Internal use only.
+   *
+   * If this is supplied, stack frame filenames will be rewritten to be relative to this path.
+   */
+  appRootPath: string | undefined;
+}
+
+// We can't use the functional style of integration until they are exported as functions...
+
+/**
+ * Starts a worker thread to detect App Not Responding (ANR) events
+ */
+export class Anr extends Integrations.Anr {
+  public constructor(options: Partial<Options> = {}) {
+    if (ELECTRON_MAJOR_VERSION < 15) {
+      throw new Error('Main process ANR detection requires Electron >= v15');
+    }
+
+    super({
+      ...options,
+      staticTags: {
+        'event.environment': 'javascript',
+        'event.origin': 'electron',
+        'event.process': 'browser',
+        ...options.staticTags,
+      },
+      appRootPath: app.getAppPath(),
+    });
+  }
+}
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index 3b2be5c8..434d41d9 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -1,11 +1,11 @@
 import { applyScopeDataToEvent, convertIntegrationFnToClass, getCurrentScope } from '@sentry/core';
 import { NodeClient, NodeOptions } from '@sentry/node';
 import { Event, IntegrationFn, ScopeData } from '@sentry/types';
-import { logger, makeDsn, SentryError } from '@sentry/utils';
+import { logger, makeDsn, SentryError, uuid4 } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
 import { mergeEvents, normalizeEvent } from '../../common';
-import { getEventDefaults } from '../context';
+import { getEventDefaults, getSdkInfo } from '../context';
 import {
   CRASH_REASONS,
   onRendererProcessGone,
@@ -102,6 +102,8 @@ const electronMinidump: IntegrationFn = () => {
 
   async function getNativeUploaderEvent(scope: ScopeData): Promise<Event> {
     const event = mergeEvents(await getEventDefaults(customRelease), {
+      sdk: getSdkInfo(),
+      event_id: uuid4(),
       level: 'fatal',
       platform: 'native',
       tags: { 'event.environment': 'native', event_type: 'native' },
diff --git a/src/main/integrations/index.ts b/src/main/integrations/index.ts
index 9c3a5fd3..c21649fe 100644
--- a/src/main/integrations/index.ts
+++ b/src/main/integrations/index.ts
@@ -11,3 +11,4 @@ export { Net } from './net-breadcrumbs';
 export { ChildProcess } from './child-process';
 export { Screenshots } from './screenshots';
 export { RendererProfiling } from './renderer-profiling';
+export { Anr } from './anr';
diff --git a/src/main/renderers.ts b/src/main/renderers.ts
index 37e3cd6d..463f8cee 100644
--- a/src/main/renderers.ts
+++ b/src/main/renderers.ts
@@ -1,6 +1,6 @@
+import { normalizeUrlToBase } from '@sentry/utils';
 import { app } from 'electron';
 
-import { normalizeUrl } from '../common';
 import { onWebContentsCreated } from './electron-normalize';
 
 interface Renderer {
@@ -25,7 +25,7 @@ export function trackRendererProperties(): void {
 
   function updateUrl(id: number, url: string): void {
     const state = renderers.get(id) || { id };
-    state.url = normalizeUrl(url, app.getAppPath());
+    state.url = normalizeUrlToBase(url, app.getAppPath());
     renderers.set(id, state);
   }
 
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index 81755ff6..cfd6d2ba 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -3,10 +3,9 @@ ensureProcess('main');
 
 import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit, NodeOptions } from '@sentry/node';
 import { Integration, Options } from '@sentry/types';
-import { app, Session, session, WebContents } from 'electron';
+import { Session, session, WebContents } from 'electron';
 
-import { isAnrChildProcess } from './anr';
-import { getDefaultEnvironment, getDefaultReleaseName } from './context';
+import { getDefaultEnvironment, getDefaultReleaseName, getSdkInfo } from './context';
 import {
   AdditionalContext,
   ChildProcess,
@@ -23,7 +22,6 @@ import {
 import { configureIPC } from './ipc';
 import { defaultStackParser } from './stack-parse';
 import { ElectronOfflineTransportOptions, makeElectronOfflineTransport } from './transports/electron-offline-net';
-import { SDK_VERSION } from './version';
 
 export const defaultIntegrations: Integration[] = [
   new SentryMinidump(),
@@ -94,7 +92,7 @@ export type ElectronMainOptions = Pick<Partial<ElectronMainOptionsInternal>, 'ge
   NodeOptions;
 
 const defaultOptions: ElectronMainOptionsInternal = {
-  _metadata: { sdk: { name: 'sentry.javascript.electron', version: SDK_VERSION } },
+  _metadata: { sdk: getSdkInfo() },
   ipcMode: IPCMode.Both,
   getSessions: () => [session.defaultSession],
 };
@@ -106,12 +104,6 @@ export function init(userOptions: ElectronMainOptions): void {
   const options: ElectronMainOptionsInternal = Object.assign(defaultOptions, userOptions);
   const defaults = defaultIntegrations;
 
-  if (isAnrChildProcess()) {
-    app.dock?.hide();
-    options.autoSessionTracking = false;
-    options.tracesSampleRate = 0;
-  }
-
   // If we don't set a release, @sentry/node will automatically fetch from environment variables
   if (options.release === undefined) {
     options.release = getDefaultReleaseName();
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index ac0ae9c9..d0632289 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -4,7 +4,6 @@ import { SerializedSession, Session, SessionContext, SessionStatus } from '@sent
 import { logger } from '@sentry/utils';
 import { app } from 'electron';
 
-import { isAnrChildProcess } from './anr';
 import { getSentryCachePath } from './fs';
 import { Store } from './store';
 
@@ -106,11 +105,6 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined):
 export async function checkPreviousSession(crashed: boolean): Promise<void> {
   const client = getCurrentHub().getClient<NodeClient>();
 
-  // We should not check the session storage if we are in an ANR child process
-  if (isAnrChildProcess()) {
-    return;
-  }
-
   const previous = await previousSession;
 
   if (previous && client) {
diff --git a/src/main/stack-parse.ts b/src/main/stack-parse.ts
index 78f51a0d..0e36632c 100644
--- a/src/main/stack-parse.ts
+++ b/src/main/stack-parse.ts
@@ -1,17 +1,15 @@
 import { getModuleFromFilename as getModuleFromFilenameNode } from '@sentry/node';
 import { StackParser } from '@sentry/types';
-import { createStackParser, nodeStackLineParser } from '@sentry/utils';
+import { createStackParser, nodeStackLineParser, normalizeUrlToBase } from '@sentry/utils';
 import { app } from 'electron';
 
-import { normalizeUrl } from '../common';
-
 /** Parses the module name form a filename */
 function getModuleFromFilename(filename: string | undefined): string | undefined {
   if (!filename) {
     return;
   }
 
-  const normalizedFilename = normalizeUrl(filename, app.getAppPath());
+  const normalizedFilename = normalizeUrlToBase(filename, app.getAppPath());
 
   return getModuleFromFilenameNode(normalizedFilename);
 }
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 03cdc3ef..34211124 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -42,6 +42,8 @@ export {
   getCurrentHub,
   getClient,
   getCurrentScope,
+  getGlobalScope,
+  getIsolationScope,
   Hub,
   makeMain,
   runWithAsyncContext,
@@ -54,6 +56,7 @@ export {
   setTags,
   setUser,
   spanStatusfromHttpCode,
+  // eslint-disable-next-line deprecation/deprecation
   trace,
   withScope,
   captureCheckIn,
@@ -75,10 +78,12 @@ export {
   BrowserClient,
   BrowserTracing,
   BrowserProfilingIntegration,
+  // eslint-disable-next-line deprecation/deprecation
   lastEventId,
   showReportDialog,
   Replay,
 } from '@sentry/browser';
+// eslint-disable-next-line deprecation/deprecation
 export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser';
 
 export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations };
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index d22e92ef..38b05809 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_90_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_92_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts
index 69a1bb46..535ec10c 100644
--- a/test/e2e/recipe/normalize.ts
+++ b/test/e2e/recipe/normalize.ts
@@ -152,17 +152,24 @@ function normalizeEvent(event: Event & ReplayEvent): void {
     for (const frame of event.exception?.values?.[0].stacktrace?.frames || []) {
       frame.colno = 0;
       frame.lineno = 0;
-      frame.function = '{{function}}';
+      if (frame.function !== 'longWork') {
+        frame.function = '{{function}}';
+      }
       frame.filename = frame.filename?.replace(/\.mjs$/, '.js');
     }
   }
 
-  event.timestamp = 0;
+  if (event.timestamp) {
+    event.timestamp = 0;
+  }
+
   if ((event as any).start_timestamp) {
     (event as any).start_timestamp = 0;
   }
 
-  event.event_id = '{{id}}';
+  if (event.event_id) {
+    event.event_id = '{{id}}';
+  }
 
   if (event.spans) {
     for (const span of event.spans) {
diff --git a/test/e2e/test-apps/anr/anr-main/event.json b/test/e2e/test-apps/anr/anr-main/event.json
index 58c95e39..7305ef1a 100644
--- a/test/e2e/test-apps/anr/anr-main/event.json
+++ b/test/e2e/test-apps/anr/anr-main/event.json
@@ -31,13 +31,9 @@
         "arch": "{{arch}}",
         "family": "Desktop",
         "memory_size": 0,
-        "free_memory": 0,
         "processor_count": 0,
         "processor_frequency": 0,
-        "cpu_description": "{{cpu}}",
-        "screen_resolution": "{{screen}}",
-        "screen_density": 1,
-        "language": "{{language}}"
+        "cpu_description": "{{cpu}}"
       },
       "node": {
         "name": "Node",
@@ -51,13 +47,14 @@
       "runtime": {
         "name": "Electron",
         "version": "{{version}}"
+      },
+      "trace": {
+        "span_id": "{{id}}",
+        "trace_id": "{{id}}"
       }
     },
     "release": "anr-main@1.0.0",
     "environment": "development",
-    "user": {
-      "ip_address": "{{auto}}"
-    },
     "exception": {
       "values": [
         {
@@ -68,10 +65,9 @@
             "frames": [
               {
                 "colno": 0,
-                "function": "{{function}}",
-                "in_app": false,
-                "lineno": 0,
-                "module": "pbkdf2"
+                "function": "longWork",
+                "in_app": true,
+                "lineno": 0
               }
             ]
           }
@@ -79,16 +75,11 @@
       ]
     },
     "level": "error",
-    "event_id": "{{id}}",
     "platform": "node",
-    "timestamp": 0,
-    "breadcrumbs": [],
     "tags": {
       "event.environment": "javascript",
       "event.origin": "electron",
-      "event.process": "browser",
-      "event_type": "javascript",
-      "process.name": "ANR"
+      "event.process": "browser"
     }
   }
 }
diff --git a/test/e2e/test-apps/anr/anr-main/recipe.yml b/test/e2e/test-apps/anr/anr-main/recipe.yml
index db0bca0a..707d3ad6 100644
--- a/test/e2e/test-apps/anr/anr-main/recipe.yml
+++ b/test/e2e/test-apps/anr/anr-main/recipe.yml
@@ -1,4 +1,4 @@
 description: ANR Main Event
 category: ANR
 command: yarn
-condition: version.major >= 13
+condition: version.major >= 15
diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js
index df404fc1..d30d2748 100644
--- a/test/e2e/test-apps/anr/anr-main/src/main.js
+++ b/test/e2e/test-apps/anr/anr-main/src/main.js
@@ -1,12 +1,13 @@
 const crypto = require('crypto');
 
 const { app } = require('electron');
-const { init, enableMainProcessAnrDetection } = require('@sentry/electron/main');
+const { init, Integrations } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
   onFatalError: () => {},
+  integrations: [new Integrations.Anr({ captureStackTrace: true, anrThreshold: 1000 })],
 });
 
 function longWork() {
@@ -17,10 +18,8 @@ function longWork() {
   }
 }
 
-enableMainProcessAnrDetection({ anrThreshold: 1000, captureStackTrace: true }).then(() => {
-  app.on('ready', () => {
-    setTimeout(() => {
-      longWork();
-    }, 1000);
-  });
+app.on('ready', () => {
+  setTimeout(() => {
+    longWork();
+  }, 2000);
 });
diff --git a/test/e2e/test-apps/anr/anr-renderer/recipe.yml b/test/e2e/test-apps/anr/anr-renderer/recipe.yml
index e88f26b5..da97fae8 100644
--- a/test/e2e/test-apps/anr/anr-renderer/recipe.yml
+++ b/test/e2e/test-apps/anr/anr-renderer/recipe.yml
@@ -1,4 +1,4 @@
 description: ANR Renderer Event
 category: ANR
 command: yarn
-condition: version.major >= 13
+condition: version.major >= 15
diff --git a/test/e2e/test-apps/native-electron/gpu/event.json b/test/e2e/test-apps/native-electron/gpu/event.json
index 6b57887b..27a6d484 100644
--- a/test/e2e/test-apps/native-electron/gpu/event.json
+++ b/test/e2e/test-apps/native-electron/gpu/event.json
@@ -2,7 +2,7 @@
   "method": "minidump",
   "namespacedData": {
     "initialScope": {
-      "release":"native-electron-gpu@1.0.0",
+      "release": "native-electron-gpu@1.0.0",
       "user": {
         "username": "some_user"
       }
@@ -10,9 +10,6 @@
   },
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
-  "attachments": [ { "attachment_type": "event.minidump" } ]
+  "data": {},
+  "attachments": [{ "attachment_type": "event.minidump" }]
 }
diff --git a/test/e2e/test-apps/native-electron/main-custom-release/event-no-crashpad.json b/test/e2e/test-apps/native-electron/main-custom-release/event-no-crashpad.json
index ed7efbf5..cf221085 100644
--- a/test/e2e/test-apps/native-electron/main-custom-release/event-no-crashpad.json
+++ b/test/e2e/test-apps/native-electron/main-custom-release/event-no-crashpad.json
@@ -3,9 +3,6 @@
   "method": "minidump",
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
-  "attachments": [ { "attachment_type": "event.minidump" } ]
+  "data": {},
+  "attachments": [{ "attachment_type": "event.minidump" }]
 }
diff --git a/test/e2e/test-apps/native-electron/main-custom-release/event.json b/test/e2e/test-apps/native-electron/main-custom-release/event.json
index 6d76eff8..d3b2587a 100644
--- a/test/e2e/test-apps/native-electron/main-custom-release/event.json
+++ b/test/e2e/test-apps/native-electron/main-custom-release/event.json
@@ -61,7 +61,6 @@
       "username": "some_user"
     },
     "event_id": "{{id}}",
-    "timestamp": 0,
     "breadcrumbs": [],
     "tags": {
       "event.environment": "native",
diff --git a/test/e2e/test-apps/native-electron/main/event-no-crashpad.json b/test/e2e/test-apps/native-electron/main/event-no-crashpad.json
index ed7efbf5..cf221085 100644
--- a/test/e2e/test-apps/native-electron/main/event-no-crashpad.json
+++ b/test/e2e/test-apps/native-electron/main/event-no-crashpad.json
@@ -3,9 +3,6 @@
   "method": "minidump",
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
-  "attachments": [ { "attachment_type": "event.minidump" } ]
+  "data": {},
+  "attachments": [{ "attachment_type": "event.minidump" }]
 }
diff --git a/test/e2e/test-apps/native-electron/main/event.json b/test/e2e/test-apps/native-electron/main/event.json
index e39ccb85..1a9cb412 100644
--- a/test/e2e/test-apps/native-electron/main/event.json
+++ b/test/e2e/test-apps/native-electron/main/event.json
@@ -61,7 +61,6 @@
       "username": "some_user"
     },
     "event_id": "{{id}}",
-    "timestamp": 0,
     "breadcrumbs": [],
     "tags": {
       "event.environment": "native",
diff --git a/test/e2e/test-apps/native-electron/renderer-custom-release/event-no-crashpad.json b/test/e2e/test-apps/native-electron/renderer-custom-release/event-no-crashpad.json
index ed7efbf5..cf221085 100644
--- a/test/e2e/test-apps/native-electron/renderer-custom-release/event-no-crashpad.json
+++ b/test/e2e/test-apps/native-electron/renderer-custom-release/event-no-crashpad.json
@@ -3,9 +3,6 @@
   "method": "minidump",
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
-  "attachments": [ { "attachment_type": "event.minidump" } ]
+  "data": {},
+  "attachments": [{ "attachment_type": "event.minidump" }]
 }
diff --git a/test/e2e/test-apps/native-electron/renderer-custom-release/event.json b/test/e2e/test-apps/native-electron/renderer-custom-release/event.json
index 752eb8e9..fc396348 100644
--- a/test/e2e/test-apps/native-electron/renderer-custom-release/event.json
+++ b/test/e2e/test-apps/native-electron/renderer-custom-release/event.json
@@ -11,9 +11,6 @@
   },
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
-  "attachments": [ { "attachment_type": "event.minidump" } ]
+  "data": {},
+  "attachments": [{ "attachment_type": "event.minidump" }]
 }
diff --git a/test/e2e/test-apps/native-electron/renderer/event.json b/test/e2e/test-apps/native-electron/renderer/event.json
index 019d319f..8e88d6bf 100644
--- a/test/e2e/test-apps/native-electron/renderer/event.json
+++ b/test/e2e/test-apps/native-electron/renderer/event.json
@@ -3,7 +3,7 @@
   "method": "minidump",
   "namespacedData": {
     "initialScope": {
-      "release":"native-electron-renderer@1.0.0",
+      "release": "native-electron-renderer@1.0.0",
       "user": {
         "username": "some_user"
       }
@@ -11,9 +11,6 @@
   },
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
-  "attachments": [ { "attachment_type": "event.minidump" } ]
+  "data": {},
+  "attachments": [{ "attachment_type": "event.minidump" }]
 }
diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/event.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/event.json
index 2acac19b..4eee4824 100644
--- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/event.json
+++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/event.json
@@ -60,7 +60,6 @@
       "username": "some_user"
     },
     "event_id": "{{id}}",
-    "timestamp": 0,
     "breadcrumbs": [],
     "tags": {
       "event.environment": "native",
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event-no-crashpad.json b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event-no-crashpad.json
index ed7efbf5..cf221085 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event-no-crashpad.json
+++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event-no-crashpad.json
@@ -3,9 +3,6 @@
   "method": "minidump",
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
-  "attachments": [ { "attachment_type": "event.minidump" } ]
+  "data": {},
+  "attachments": [{ "attachment_type": "event.minidump" }]
 }
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event.json b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event.json
index 844585f8..6332cefc 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event.json
+++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event.json
@@ -3,7 +3,7 @@
   "method": "minidump",
   "namespacedData": {
     "initialScope": {
-      "release":"session-native-crash-renderer-electron-uploader@1.0.0",
+      "release": "session-native-crash-renderer-electron-uploader@1.0.0",
       "user": {
         "username": "some_user"
       }
@@ -11,9 +11,6 @@
   },
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
-  "attachments": [ { "attachment_type": "event.minidump" } ]
+  "data": {},
+  "attachments": [{ "attachment_type": "event.minidump" }]
 }
diff --git a/test/unit/normalize.test.ts b/test/unit/normalize.test.ts
deleted file mode 100644
index 3b79c849..00000000
--- a/test/unit/normalize.test.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import { expect, should, use } from 'chai';
-import chaiAsPromised = require('chai-as-promised');
-
-import { normalizeUrl } from '../../src/common/normalize';
-
-should();
-use(chaiAsPromised);
-
-describe('Normalize URLs', () => {
-  it('Example app on Windows', () => {
-    const base = 'c:/Users/Username/sentry-electron/example';
-
-    expect(normalizeUrl('C:\\Users\\Username\\sentry-electron\\example\\renderer.js', base)).to.equal(
-      'app:///renderer.js',
-    );
-
-    expect(normalizeUrl('C:\\Users\\Username\\sentry-electron\\example\\sub-directory\\renderer.js', base)).to.equal(
-      'app:///sub-directory/renderer.js',
-    );
-
-    expect(normalizeUrl('file:///C:/Users/Username/sentry-electron/example/index.html', base)).to.equal(
-      'app:///index.html',
-    );
-  });
-
-  it('Example app with parentheses', () => {
-    const base = 'c:/Users/Username/sentry-electron (beta)/example';
-
-    expect(normalizeUrl('C:\\Users\\Username\\sentry-electron%20(beta)\\example\\renderer.js', base)).to.equal(
-      'app:///renderer.js',
-    );
-
-    expect(
-      normalizeUrl('C:\\Users\\Username\\sentry-electron%20(beta)\\example\\sub-directory\\renderer.js', base),
-    ).to.equal('app:///sub-directory/renderer.js');
-
-    expect(normalizeUrl('file:///C:/Users/Username/sentry-electron%20(beta)/example/index.html', base)).to.equal(
-      'app:///index.html',
-    );
-  });
-
-  it('Asar packaged app in Windows Program Files', () => {
-    const base = 'C:/Program Files/My App/resources/app.asar';
-
-    expect(normalizeUrl('/C:/Program%20Files/My%20App/resources/app.asar/dist/bundle-app.js', base)).to.equal(
-      'app:///dist/bundle-app.js',
-    );
-
-    expect(normalizeUrl('file:///C:/Program%20Files/My%20App/resources/app.asar/index.html', base)).to.equal(
-      'app:///index.html',
-    );
-
-    expect(normalizeUrl('file:///C:/Program%20Files/My%20App/resources/app.asar/a/index.html', base)).to.equal(
-      'app:///a/index.html',
-    );
-  });
-
-  it('Webpack builds', () => {
-    const base = '/home/haza/Desktop/foo/app/';
-    expect(
-      normalizeUrl('/home/haza/Desktop/foo/app/webpack:/electron/src/common/models/ipc-request.ts', base),
-    ).to.equal('app:///electron/src/common/models/ipc-request.ts');
-  });
-
-  it('Only modifies file URLS', () => {
-    const base = 'c:/Users/Username/sentry-electron/example';
-    expect(normalizeUrl('https://some.host/index.html', base)).to.equal('https://some.host/index.html');
-    expect(normalizeUrl('http://localhost:43288/index.html', base)).to.equal('http://localhost:43288/index.html');
-  });
-});
diff --git a/yarn.lock b/yarn.lock
index c00e6ca3..50ea3561 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.90.0.tgz#0a765a209ca3499bbc08856b8228613ee4e715f9"
-  integrity sha512-PvjJ/Dsp9eofcZz6wBaPEDfc5R9mLMgDR8WfWECiMhfYu7KBT2GgMx1dWe2g0ylqDzoBmY15+8gGELhf90kfrA==
+"@sentry-internal/eslint-config-sdk@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.92.0.tgz#a4532463a22a59dfb115cd2392f02e27c95b7f66"
+  integrity sha512-1TtJkV4Wmqf/CbXUL8tkS/yxDAVbvUnvCQZguD6s1LZTWMJ+4coEkeSkgn1qRSjBz0YIREr1DXSmPbXU2TugiQ==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.90.0"
-    "@sentry-internal/typescript" "7.90.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.92.0"
+    "@sentry-internal/typescript" "7.92.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,88 +180,88 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.90.0.tgz#4e9238816011d8a22173644db7fe72ff54e1ceb4"
-  integrity sha512-4/1GA6KNyBm+721DGlVgKgUC8qbI9netOZLZetVOUQ2oNiJHHdYn0jHGZzB5zMcut+/S6Nr9MqiFgjLzI8E3PA==
+"@sentry-internal/eslint-plugin-sdk@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.92.0.tgz#9c6dae628adecfd7047afa504cc8809276ad2bad"
+  integrity sha512-hccEHqZwO9kEsDOlPso7b7Tz+sSBiyyJ1KW+EOx65H3AAgGGHPkoU074fA0S+yyuRVEk0wCKR1xQ7jgfWxJSQw==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.90.0.tgz#053e36b4d01dd94c948e5eb6902f264c1d4436e6"
-  integrity sha512-ZIdpwK9KmiE/UYGUgNE3N9A5MWm92rbC/0u04LxQfZh0tGqN2EchwivQpFCWuu5QsKMlsza7aO6YQXsKvwt1Ww==
-  dependencies:
-    "@sentry/core" "7.90.0"
-    "@sentry/types" "7.90.0"
-    "@sentry/utils" "7.90.0"
-
-"@sentry-internal/tracing@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.90.0.tgz#cd21662dbfa3d90d34e91eabd875a1616717d3d3"
-  integrity sha512-74jEtpdio9aRkiVBcrY1ZJXek0oFMqxDJK6BkJNCA+aUK1z96V9viehANRk3Nbxm01rWjmH1U4e1siuo9FhjuQ==
-  dependencies:
-    "@sentry/core" "7.90.0"
-    "@sentry/types" "7.90.0"
-    "@sentry/utils" "7.90.0"
-
-"@sentry-internal/typescript@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.90.0.tgz#fcf4e9c35f56b9331d4dc93ce1f35a89bd3ad361"
-  integrity sha512-m8VDDATpnBgLfFLl1tISA2B5Yw5UUcHdoYlOGAVFnIV22wzM4M7mO8PP6vZ2teA7Rh9TINiTgJu8ZN06mkmATw==
-
-"@sentry/browser@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.90.0.tgz#a5a696a328364f3bf15405d03112c06f53bb2923"
-  integrity sha512-ik3Jwo+TYjoEesJlt3PlHDcPE9h//WwyUsVkV9ZsVx0MSXb8c1VC4uDMsyUqjA+gPImmw1l9KlWZtvaOooZEhg==
-  dependencies:
-    "@sentry-internal/feedback" "7.90.0"
-    "@sentry-internal/tracing" "7.90.0"
-    "@sentry/core" "7.90.0"
-    "@sentry/replay" "7.90.0"
-    "@sentry/types" "7.90.0"
-    "@sentry/utils" "7.90.0"
-
-"@sentry/core@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.90.0.tgz#dfd8e3e4eec4b140681ddb21a3fea848fcab7a01"
-  integrity sha512-HolpdHjULCwehKPWHR6IPQM0NBjmORhlBU7FtCh/e8TtSkZ9ztPsuofNBomMS1+mdbL+yxOIc9KUYEl0zRfeAQ==
-  dependencies:
-    "@sentry/types" "7.90.0"
-    "@sentry/utils" "7.90.0"
-
-"@sentry/node@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.90.0.tgz#083bbdc053426d491281bff6f8a238600dd93e99"
-  integrity sha512-VjDI2MCkidoFEzrMa1gqmwYt1sUhYnu+zoFF5P5jgapTVVJ5xc2b7k/lS62U6IsfxHNrIdTtQHsrbCS5+s0GvQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.90.0"
-    "@sentry/core" "7.90.0"
-    "@sentry/types" "7.90.0"
-    "@sentry/utils" "7.90.0"
+"@sentry-internal/feedback@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.92.0.tgz#1293b0a332f81cdf3970abd36894b9d25670c4e6"
+  integrity sha512-/jEALRtVqboxB9kcK2tag8QCO6XANTlGBb9RV3oeGXJe0DDNJXRq6wVZbfgztXJRrfgx4XVDcNt1pRVoGGG++g==
+  dependencies:
+    "@sentry/core" "7.92.0"
+    "@sentry/types" "7.92.0"
+    "@sentry/utils" "7.92.0"
+
+"@sentry-internal/tracing@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.92.0.tgz#505d94a93b5df965ec6bfb35da43389988259d4d"
+  integrity sha512-ur55vPcUUUWFUX4eVLNP71ohswK7ZZpleNZw9Y1GfLqyI+0ILQUwjtzqItJrdClvVsdRZJMRmDV40Hp9Lbb9mA==
+  dependencies:
+    "@sentry/core" "7.92.0"
+    "@sentry/types" "7.92.0"
+    "@sentry/utils" "7.92.0"
+
+"@sentry-internal/typescript@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.92.0.tgz#25196d80b127a8a22f32a4b95f691f512d0ad117"
+  integrity sha512-fCMKhG+J3VV+afyyWu6rsuhMppugKj8ubk8b2Ss7BggzPF5GEA6njTUBJYpFNkvy/RGLy6gDy3Qpqb/cH3NT2g==
+
+"@sentry/browser@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.92.0.tgz#f4c65f2af6f38c2dd5e32153e9b358c0c80275f2"
+  integrity sha512-loMr02/zQ38u8aQhYLtIBg0i5n3ps2e3GUXrt3CdsJQdkRYfa62gcrE7SzvoEpMVHTk7VOI4fWGht8cWw/1k3A==
+  dependencies:
+    "@sentry-internal/feedback" "7.92.0"
+    "@sentry-internal/tracing" "7.92.0"
+    "@sentry/core" "7.92.0"
+    "@sentry/replay" "7.92.0"
+    "@sentry/types" "7.92.0"
+    "@sentry/utils" "7.92.0"
+
+"@sentry/core@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.92.0.tgz#4e74c1959348b698226c49ead7a24e165502b55c"
+  integrity sha512-1Tly7YB2I1byI5xb0Cwrxs56Rhww+6mQ7m9P7rTmdC3/ijOzbEoohtYIUPwcooCEarpbEJe/tAayRx6BrH2UbQ==
+  dependencies:
+    "@sentry/types" "7.92.0"
+    "@sentry/utils" "7.92.0"
+
+"@sentry/node@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.92.0.tgz#880d3be5cb8ef805a6856c619db3951b1678f726"
+  integrity sha512-LZeQL1r6kikEoOzA9K61OmMl32/lK/6PzmFNDH6z7UYwQopCZgVA6IP+CZuln8K2ys5c9hCyF7ICQMysXfpNJA==
+  dependencies:
+    "@sentry-internal/tracing" "7.92.0"
+    "@sentry/core" "7.92.0"
+    "@sentry/types" "7.92.0"
+    "@sentry/utils" "7.92.0"
     https-proxy-agent "^5.0.0"
 
-"@sentry/replay@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.90.0.tgz#98e181c495422a13b088dcb030556511824eaa95"
-  integrity sha512-fsABtzQ5JQI7G5CC4fg05lVI5DTbd1uwKi41xVKFRmCB5NVTHvK7bHgP8n6uSbnle+gp9rUxVPLLBIPjKfaTmw==
+"@sentry/replay@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.92.0.tgz#d94e9f6b72e540e73378a74ca1190068edd447f2"
+  integrity sha512-G1t9Uvc9cR8VpNkElwvHIMGzykjIKikb10n0tfVd3e+rBPMCCjCPWOduwG6jZYxcvCjTpqmJh6NSLXxL/Mt4JA==
   dependencies:
-    "@sentry-internal/tracing" "7.90.0"
-    "@sentry/core" "7.90.0"
-    "@sentry/types" "7.90.0"
-    "@sentry/utils" "7.90.0"
+    "@sentry-internal/tracing" "7.92.0"
+    "@sentry/core" "7.92.0"
+    "@sentry/types" "7.92.0"
+    "@sentry/utils" "7.92.0"
 
-"@sentry/types@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.90.0.tgz#72797abd790fc3de546d42600752004a7f7d07d0"
-  integrity sha512-dA0Mtba5jYlcQ6xBsGILZuFq4NGrWLfr2ys036z2JE4H1+3PxOVERlD3Di7p+WKYM5gjFw10Hn3EgUV979E3dA==
+"@sentry/types@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.92.0.tgz#4c308fdb316c0272f55f0816230fe87e7b9b551a"
+  integrity sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg==
 
-"@sentry/utils@7.90.0":
-  version "7.90.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.90.0.tgz#d4eea6392af7498c7be03205151ad11ea8707915"
-  integrity sha512-6BpqAzONm/HQbdlL4TY2W2vBSmaG/eVvwUaHoz0wB49EkWwpF6j/SO9Kb/XkiA/qp9GoJVXpnGBFQLPx7kv/Yw==
+"@sentry/utils@7.92.0":
+  version "7.92.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.92.0.tgz#20ed29742594eab007f9ff72e008b5262456a319"
+  integrity sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA==
   dependencies:
-    "@sentry/types" "7.90.0"
+    "@sentry/types" "7.92.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 3e5a2c0f2a0e4a466b6bd04d04b6a5f88f6bbee7 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 8 Jan 2024 15:40:07 +0100
Subject: [PATCH 194/239] test: Ensure correct scope for main process native
 crashes (#812)

---
 .../test-apps/native-sentry/main/event.json    | 18 +++++++++++++++++-
 .../native-sentry/main/src/index.html          |  4 ++++
 .../test-apps/native-sentry/main/src/main.js   |  6 +++++-
 3 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/test/e2e/test-apps/native-sentry/main/event.json b/test/e2e/test-apps/native-sentry/main/event.json
index d5ec4f9d..d1bd9e95 100644
--- a/test/e2e/test-apps/native-sentry/main/event.json
+++ b/test/e2e/test-apps/native-sentry/main/event.json
@@ -60,7 +60,23 @@
     },
     "event_id": "{{id}}",
     "timestamp": 0,
-    "breadcrumbs": [],
+    "breadcrumbs": [
+      {
+        "category": "console",
+        "level": "log",
+        "message": "main process breadcrumb from first crashing run"
+      },
+      {
+        "category": "console",
+        "level": "log",
+        "message": "renderer process breadcrumb from first crashing run"
+      },
+      {
+        "category": "console",
+        "level": "log",
+        "message": "main process breadcrumb from second run"
+      }
+    ],
     "tags": {
       "event.environment": "native",
       "event.origin": "electron",
diff --git a/test/e2e/test-apps/native-sentry/main/src/index.html b/test/e2e/test-apps/native-sentry/main/src/index.html
index 2707fc4f..096b4f9f 100644
--- a/test/e2e/test-apps/native-sentry/main/src/index.html
+++ b/test/e2e/test-apps/native-sentry/main/src/index.html
@@ -10,6 +10,10 @@
       init({
         debug: true,
       });
+
+      if (process.env.APP_FIRST_RUN) {
+        console.log('renderer process breadcrumb from first crashing run');
+      }
     </script>
   </body>
 </html>
\ No newline at end of file
diff --git a/test/e2e/test-apps/native-sentry/main/src/main.js b/test/e2e/test-apps/native-sentry/main/src/main.js
index c723921e..47c6b9e1 100644
--- a/test/e2e/test-apps/native-sentry/main/src/main.js
+++ b/test/e2e/test-apps/native-sentry/main/src/main.js
@@ -28,8 +28,12 @@ app.on('ready', () => {
   // We only crash on the first run
   // The second run is where the crash is uploaded
   if (process.env.APP_FIRST_RUN) {
+    console.log('main process breadcrumb from first crashing run');
+
     setTimeout(() => {
       process.crash();
-    }, 1000);
+    }, 2000);
+  } else {
+    console.log('main process breadcrumb from second run');
   }
 });

From 1bf073f99b1dda7872dd1e9924470893f7c2ba07 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 8 Jan 2024 17:45:11 +0100
Subject: [PATCH 195/239] feat: Add support for performance metrics (#811)

---
 src/common/ipc.ts                             | 14 +++++++
 src/main/ipc.ts                               | 39 +++++++++++++++--
 src/preload/index.ts                          |  3 +-
 src/preload/legacy.ts                         |  3 +-
 src/renderer/index.ts                         | 13 +++++-
 .../integrations/metrics-aggregator.ts        | 24 +++++++++++
 src/renderer/ipc.ts                           | 14 ++++++-
 src/renderer/metrics.ts                       | 42 +++++++++++++++++++
 src/renderer/sdk.ts                           |  3 +-
 test/e2e/recipe/normalize.ts                  |  4 ++
 test/e2e/server/index.ts                      | 12 +++++-
 test/e2e/test-apps/other/metrics/event.json   |  6 +++
 test/e2e/test-apps/other/metrics/package.json |  8 ++++
 test/e2e/test-apps/other/metrics/recipe.yml   |  3 ++
 .../test-apps/other/metrics/src/index.html    | 14 +++++++
 test/e2e/test-apps/other/metrics/src/main.js  | 32 ++++++++++++++
 16 files changed, 223 insertions(+), 11 deletions(-)
 create mode 100644 src/renderer/integrations/metrics-aggregator.ts
 create mode 100644 src/renderer/metrics.ts
 create mode 100644 test/e2e/test-apps/other/metrics/event.json
 create mode 100644 test/e2e/test-apps/other/metrics/package.json
 create mode 100644 test/e2e/test-apps/other/metrics/recipe.yml
 create mode 100644 test/e2e/test-apps/other/metrics/src/index.html
 create mode 100644 test/e2e/test-apps/other/metrics/src/main.js

diff --git a/src/common/ipc.ts b/src/common/ipc.ts
index ac26f837..76f86547 100644
--- a/src/common/ipc.ts
+++ b/src/common/ipc.ts
@@ -1,3 +1,5 @@
+import { MeasurementUnit, Primitive } from '@sentry/types';
+
 export const PROTOCOL_SCHEME = 'sentry-ipc';
 
 export enum IPCChannel {
@@ -11,6 +13,8 @@ export enum IPCChannel {
   ENVELOPE = 'sentry-electron.envelope',
   /** IPC to pass renderer status updates */
   STATUS = 'sentry-electron.status',
+  /** IPC to pass renderer metric additions to the main process */
+  ADD_METRIC = 'sentry-electron.add-metric',
 }
 
 export interface RendererProcessAnrOptions {
@@ -39,12 +43,22 @@ export interface RendererStatus {
   config: RendererProcessAnrOptions;
 }
 
+export interface MetricIPCMessage {
+  metricType: 'c' | 'g' | 's' | 'd';
+  name: string;
+  value: number | string;
+  unit?: MeasurementUnit;
+  tags?: Record<string, Primitive>;
+  timestamp?: number;
+}
+
 export interface IPCInterface {
   sendRendererStart: () => void;
   sendScope: (scope: string) => void;
   sendEvent: (event: string) => void;
   sendEnvelope: (evn: Uint8Array | string) => void;
   sendStatus: (state: RendererStatus) => void;
+  sendAddMetric: (metric: MetricIPCMessage) => void;
 }
 
 export const RENDERER_ID_HEADER = 'sentry-electron-renderer-id';
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 49748cf7..6b17547b 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -1,5 +1,14 @@
-import { captureEvent, getCurrentHub, getCurrentScope } from '@sentry/core';
-import { Attachment, AttachmentItem, Envelope, Event, EventItem, Profile, ScopeData } from '@sentry/types';
+import { BaseClient, captureEvent, getClient, getCurrentScope } from '@sentry/core';
+import {
+  Attachment,
+  AttachmentItem,
+  ClientOptions,
+  Envelope,
+  Event,
+  EventItem,
+  Profile,
+  ScopeData,
+} from '@sentry/types';
 import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils';
 import { app, ipcMain, protocol, WebContents, webContents } from 'electron';
 import { TextDecoder, TextEncoder } from 'util';
@@ -8,6 +17,7 @@ import {
   IPCChannel,
   IPCMode,
   mergeEvents,
+  MetricIPCMessage,
   normalizeUrlsInReplayEnvelope,
   PROTOCOL_SCHEME,
   RendererStatus,
@@ -127,7 +137,26 @@ function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array |
   } else {
     const normalizedEnvelope = normalizeUrlsInReplayEnvelope(envelope, app.getAppPath());
     // Pass other types of envelope straight to the transport
-    void getCurrentHub().getClient()?.getTransport()?.send(normalizedEnvelope);
+    void getClient()?.getTransport()?.send(normalizedEnvelope);
+  }
+}
+
+function handleMetric(metric: MetricIPCMessage): void {
+  const client = getClient<BaseClient<ClientOptions>>();
+
+  if (client?.metricsAggregator) {
+    client.metricsAggregator.add(
+      metric.metricType,
+      metric.name,
+      metric.value,
+      metric.unit,
+      metric.tags,
+      metric.timestamp,
+    );
+  } else {
+    logger.warn(
+      `Metric was dropped because the aggregator is not configured in the main process. Enable via '_experiments.metricsAggregator: true' in your init call.`,
+    );
   }
 }
 
@@ -208,6 +237,8 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
             handleScope(options, data.toString());
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) {
             handleEnvelope(options, data, getWebContents());
+          } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ADD_METRIC}`) && data) {
+            handleMetric(JSON.parse(data.toString()) as MetricIPCMessage);
           } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.STATUS}`) && data) {
             const contents = getWebContents();
             if (contents) {
@@ -245,6 +276,8 @@ function configureClassic(options: ElectronMainOptionsInternal): void {
 
   const rendererStatusChanged = createRendererAnrStatusHandler();
   ipcMain.on(IPCChannel.STATUS, ({ sender }, status: RendererStatus) => rendererStatusChanged(status, sender));
+
+  ipcMain.on(IPCChannel.ADD_METRIC, (_, metric: MetricIPCMessage) => handleMetric(metric));
 }
 
 /** Sets up communication channels with the renderer */
diff --git a/src/preload/index.ts b/src/preload/index.ts
index 78f91f99..1fecd68d 100644
--- a/src/preload/index.ts
+++ b/src/preload/index.ts
@@ -4,7 +4,7 @@
 
 import { contextBridge, ipcRenderer } from 'electron';
 
-import { IPCChannel, RendererStatus } from '../common/ipc';
+import { IPCChannel, MetricIPCMessage, RendererStatus } from '../common/ipc';
 
 // eslint-disable-next-line no-restricted-globals
 if (window.__SENTRY_IPC__) {
@@ -17,6 +17,7 @@ if (window.__SENTRY_IPC__) {
     sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson),
     sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope),
     sendStatus: (status: RendererStatus) => ipcRenderer.send(IPCChannel.STATUS, status),
+    sendAddMetric: (metric: MetricIPCMessage) => ipcRenderer.send(IPCChannel.ADD_METRIC, metric),
   };
 
   // eslint-disable-next-line no-restricted-globals
diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts
index 9a9d4d15..cc9e8589 100644
--- a/src/preload/legacy.ts
+++ b/src/preload/legacy.ts
@@ -5,7 +5,7 @@
 import { contextBridge, crashReporter, ipcRenderer } from 'electron';
 import * as electron from 'electron';
 
-import { IPCChannel, RendererStatus } from '../common/ipc';
+import { IPCChannel, MetricIPCMessage, RendererStatus } from '../common/ipc';
 
 // eslint-disable-next-line no-restricted-globals
 if (window.__SENTRY_IPC__) {
@@ -28,6 +28,7 @@ if (window.__SENTRY_IPC__) {
     sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson),
     sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope),
     sendStatus: (status: RendererStatus) => ipcRenderer.send(IPCChannel.STATUS, status),
+    sendAddMetric: (metric: MetricIPCMessage) => ipcRenderer.send(IPCChannel.ADD_METRIC, metric),
   };
 
   // eslint-disable-next-line no-restricted-globals
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 34211124..1c9a7335 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -69,10 +69,19 @@ export {
   startInactiveSpan,
   startSpanManual,
   continueTrace,
-  metrics,
 } from '@sentry/core';
 export type { SpanStatusType } from '@sentry/core';
 
+import { metrics as coreMetrics } from '@sentry/core';
+
+import { MetricsAggregator } from './integrations/metrics-aggregator';
+
+export const metrics = {
+  ...coreMetrics,
+  // Override the default browser metrics aggregator with the Electron renderer one
+  MetricsAggregator,
+};
+
 export {
   addTracingExtensions,
   BrowserClient,
@@ -86,5 +95,5 @@ export {
 // eslint-disable-next-line deprecation/deprecation
 export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser';
 
-export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations };
+export const Integrations = { ...BrowserIntegrations, ...ElectronRendererIntegrations };
 export { init, defaultIntegrations } from './sdk';
diff --git a/src/renderer/integrations/metrics-aggregator.ts b/src/renderer/integrations/metrics-aggregator.ts
new file mode 100644
index 00000000..a52faf81
--- /dev/null
+++ b/src/renderer/integrations/metrics-aggregator.ts
@@ -0,0 +1,24 @@
+import { BrowserClient } from '@sentry/browser';
+import { convertIntegrationFnToClass } from '@sentry/core';
+import type { IntegrationFn } from '@sentry/types';
+
+import { ElectronRendererMetricsAggregator } from '../metrics';
+
+const INTEGRATION_NAME = 'MetricsAggregator';
+
+const metricsAggregatorIntegration: IntegrationFn = () => {
+  return {
+    name: INTEGRATION_NAME,
+    setup(client: BrowserClient) {
+      client.metricsAggregator = new ElectronRendererMetricsAggregator();
+    },
+  };
+};
+
+/**
+ * Enables Sentry metrics monitoring.
+ *
+ * @experimental This API is experimental and might having breaking changes in the future.
+ */
+// eslint-disable-next-line deprecation/deprecation
+export const MetricsAggregator = convertIntegrationFnToClass(INTEGRATION_NAME, metricsAggregatorIntegration);
diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts
index 549874aa..2b72eea4 100644
--- a/src/renderer/ipc.ts
+++ b/src/renderer/ipc.ts
@@ -2,7 +2,14 @@
 /* eslint-disable no-console */
 import { logger, uuid4 } from '@sentry/utils';
 
-import { IPCChannel, IPCInterface, PROTOCOL_SCHEME, RENDERER_ID_HEADER, RendererStatus } from '../common/ipc';
+import {
+  IPCChannel,
+  IPCInterface,
+  MetricIPCMessage,
+  PROTOCOL_SCHEME,
+  RENDERER_ID_HEADER,
+  RendererStatus,
+} from '../common/ipc';
 
 function buildUrl(channel: IPCChannel): string {
   // We include sentry_key in the URL so these don't end up in fetch breadcrumbs
@@ -52,6 +59,11 @@ function getImplementation(): IPCInterface {
           // ignore
         });
       },
+      sendAddMetric: (metric: MetricIPCMessage) => {
+        fetch(buildUrl(IPCChannel.ADD_METRIC), { method: 'POST', body: JSON.stringify(metric), headers }).catch(() => {
+          // ignore
+        });
+      },
     };
   }
 }
diff --git a/src/renderer/metrics.ts b/src/renderer/metrics.ts
new file mode 100644
index 00000000..83648689
--- /dev/null
+++ b/src/renderer/metrics.ts
@@ -0,0 +1,42 @@
+import { MeasurementUnit, MetricsAggregator, Primitive } from '@sentry/types';
+
+import { IPCInterface } from '../common/ipc';
+import { getIPC } from './ipc';
+
+/**
+ * Sends metrics to the Electron main process where they can be aggregated in a single process
+ */
+export class ElectronRendererMetricsAggregator implements MetricsAggregator {
+  private readonly _ipc: IPCInterface;
+
+  public constructor() {
+    this._ipc = getIPC();
+  }
+
+  /** @inheritdoc */
+  public add(
+    metricType: 'c' | 'g' | 's' | 'd',
+    name: string,
+    value: string | number,
+    unit?: MeasurementUnit | undefined,
+    tags?: Record<string, Primitive> | undefined,
+    timestamp?: number | undefined,
+  ): void {
+    this._ipc.sendAddMetric({ metricType, name, value, unit, tags, timestamp });
+  }
+
+  /** @inheritdoc */
+  public flush(): void {
+    // do nothing
+  }
+
+  /** @inheritdoc */
+  public close(): void {
+    // do nothing
+  }
+
+  /** @inheritdoc */
+  public toString(): string {
+    return '';
+  }
+}
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 38b05809..e29a45ef 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -9,10 +9,11 @@ import { logger } from '@sentry/utils';
 import { ensureProcess, RendererProcessAnrOptions } from '../common';
 import { enableAnrRendererMessages } from './anr';
 import { ScopeToMain } from './integrations';
+import { MetricsAggregator } from './integrations/metrics-aggregator';
 import { electronRendererStackParser } from './stack-parse';
 import { makeRendererTransport } from './transport';
 
-export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain()];
+export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain(), new MetricsAggregator()];
 
 interface ElectronRendererOptions extends BrowserOptions {
   /**
diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts
index 535ec10c..e4d63413 100644
--- a/test/e2e/recipe/normalize.ts
+++ b/test/e2e/recipe/normalize.ts
@@ -13,6 +13,10 @@ export function normalize(event: TestServerEvent<Event | Transaction | Session>)
   }
 
   normalizeProfile(event.profile);
+
+  if (event.metrics) {
+    event.metrics = event.metrics.replace(/T\d{1,10}\n/g, 'T0000000000\n');
+  }
 }
 
 export function eventIsSession(data: EventOrSession): boolean {
diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts
index 00e501f3..3e1b7be4 100644
--- a/test/e2e/server/index.ts
+++ b/test/e2e/server/index.ts
@@ -40,6 +40,8 @@ export interface TestServerEvent<T = unknown> {
   attachments?: Attachment[];
   /** Profiling data */
   profile?: Profile;
+  /** Metrics data */
+  metrics?: string;
   /** API method used for submission */
   method: 'envelope' | 'minidump' | 'store';
 }
@@ -124,6 +126,7 @@ export class TestServer {
       let data: Event | Transaction | Session | ReplayEvent | undefined;
       const attachments: Attachment[] = [];
       let profile: Profile | undefined;
+      let metrics: string | undefined;
 
       forEachEnvelopeItem(envelope, ([headers, item]) => {
         if (headers.type === 'event' || headers.type === 'transaction' || headers.type === 'session') {
@@ -142,16 +145,21 @@ export class TestServer {
           attachments.push(headers);
         }
 
+        if (headers.type === 'statsd') {
+          metrics = item.toString();
+        }
+
         if (headers.type === 'profile') {
           profile = item as unknown as Profile;
         }
       });
 
-      if (data) {
+      if (data || metrics) {
         this._addEvent({
-          data,
+          data: data || {},
           attachments,
           profile,
+          metrics,
           appId: ctx.params.id,
           sentryKey: keyMatch[1],
           method: 'envelope',
diff --git a/test/e2e/test-apps/other/metrics/event.json b/test/e2e/test-apps/other/metrics/event.json
new file mode 100644
index 00000000..9570aaf3
--- /dev/null
+++ b/test/e2e/test-apps/other/metrics/event.json
@@ -0,0 +1,6 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "metrics": "parallel_requests@none:2:2:2:2:1|g|#release:metrics@1.0.0,environment:development,type:a|T0000000000\nhits@none:4|c|T0000000000\n"
+}
diff --git a/test/e2e/test-apps/other/metrics/package.json b/test/e2e/test-apps/other/metrics/package.json
new file mode 100644
index 00000000..c0ca402b
--- /dev/null
+++ b/test/e2e/test-apps/other/metrics/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "metrics",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/metrics/recipe.yml b/test/e2e/test-apps/other/metrics/recipe.yml
new file mode 100644
index 00000000..3ce62df7
--- /dev/null
+++ b/test/e2e/test-apps/other/metrics/recipe.yml
@@ -0,0 +1,3 @@
+description: Metrics
+command: yarn
+
diff --git a/test/e2e/test-apps/other/metrics/src/index.html b/test/e2e/test-apps/other/metrics/src/index.html
new file mode 100644
index 00000000..78319a0a
--- /dev/null
+++ b/test/e2e/test-apps/other/metrics/src/index.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const Sentry = require('@sentry/electron/renderer');
+
+      Sentry.init();
+      Sentry.metrics.increment('hits', 4);
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/other/metrics/src/main.js b/test/e2e/test-apps/other/metrics/src/main.js
new file mode 100644
index 00000000..ad6eb1b1
--- /dev/null
+++ b/test/e2e/test-apps/other/metrics/src/main.js
@@ -0,0 +1,32 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const Sentry = require('@sentry/electron');
+
+Sentry.init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+  _experiments: {
+    metricsAggregator: true,
+  },
+});
+
+Sentry.metrics.gauge('parallel_requests', 2, { tags: { type: 'a' } });
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+
+  setTimeout(() => {
+    Sentry.flush(2000);
+  }, 2000);
+});

From 6f30541d32bb446768d6af773f1ba88435c1c016 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 8 Jan 2024 19:39:21 +0100
Subject: [PATCH 196/239] meta: Changelog for 4.17.0 release (#813)

---
 CHANGELOG.md | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ed4bd981..d0968d07 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 
 ## Unreleased
 
+## 4.17.0
+
+- feat: Update from [v7.90.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.90.0) to
+  [v7.92.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.92.0) of JavaScript SDKs (#810)
+- feat: Re-work ANR detection to use worker thread (#810)
+- feat: Add support for performance metrics (#811)
+- test: Ensure correct scope for main process native crashes (#812)
+
 ## 4.16.0
 
 - feat: Update from [v7.84.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.84.0) to

From ee5d52aeb8208252de29eb65959ca25ebfbe207f Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 8 Jan 2024 20:24:18 +0100
Subject: [PATCH 197/239] fix: Change ANR minimum Electron version to v22
 (#814)

---
 src/main/integrations/anr.ts                                 | 4 ++--
 test/e2e/test-apps/anr/anr-main/recipe.yml                   | 2 +-
 .../native-electron/renderer/event-no-crashpad.json          | 5 +----
 3 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/main/integrations/anr.ts b/src/main/integrations/anr.ts
index 090ebdd3..50fcda95 100644
--- a/src/main/integrations/anr.ts
+++ b/src/main/integrations/anr.ts
@@ -48,8 +48,8 @@ interface Options {
  */
 export class Anr extends Integrations.Anr {
   public constructor(options: Partial<Options> = {}) {
-    if (ELECTRON_MAJOR_VERSION < 15) {
-      throw new Error('Main process ANR detection requires Electron >= v15');
+    if (ELECTRON_MAJOR_VERSION < 22) {
+      throw new Error('Main process ANR detection requires Electron v22+');
     }
 
     super({
diff --git a/test/e2e/test-apps/anr/anr-main/recipe.yml b/test/e2e/test-apps/anr/anr-main/recipe.yml
index 707d3ad6..17b7ad18 100644
--- a/test/e2e/test-apps/anr/anr-main/recipe.yml
+++ b/test/e2e/test-apps/anr/anr-main/recipe.yml
@@ -1,4 +1,4 @@
 description: ANR Main Event
 category: ANR
 command: yarn
-condition: version.major >= 15
+condition: version.major >= 22
diff --git a/test/e2e/test-apps/native-electron/renderer/event-no-crashpad.json b/test/e2e/test-apps/native-electron/renderer/event-no-crashpad.json
index ed7efbf5..67f67ed0 100644
--- a/test/e2e/test-apps/native-electron/renderer/event-no-crashpad.json
+++ b/test/e2e/test-apps/native-electron/renderer/event-no-crashpad.json
@@ -3,9 +3,6 @@
   "method": "minidump",
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
   "appId": "277345",
-  "data": {
-    "event_id": "{{id}}",
-    "timestamp": 0
-  },
+  "data": {},
   "attachments": [ { "attachment_type": "event.minidump" } ]
 }

From e962a03274ad5ec33ebb83703d15183bc83d9851 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Mon, 8 Jan 2024 19:47:43 +0000
Subject: [PATCH 198/239] release: 4.17.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 84af72a4..24fb8e41 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.16.0",
+  "version": "4.17.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 35568761645afb64a0f02b7c913dc154022a2517 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 9 Jan 2024 17:44:14 +0100
Subject: [PATCH 199/239] test: New Electron versions (#809)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index b3fcf09e..ba77349c 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.3","27.2.0","28.1.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.4","27.2.1","28.1.2"]

From 0ee6624f517dd58b73e7870e78adbe03fb4a2788 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 20 Jan 2024 01:03:14 +0100
Subject: [PATCH 200/239] chore(deps-dev): bump vite from 3.2.7 to 3.2.8 in
 /examples/electron-vite (#819)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 examples/electron-vite/package.json | 2 +-
 examples/electron-vite/yarn.lock    | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json
index 58951181..3766f8d3 100644
--- a/examples/electron-vite/package.json
+++ b/examples/electron-vite/package.json
@@ -17,6 +17,6 @@
   "devDependencies": {
     "@vitejs/plugin-vue": "^3.1.2",
     "electron": "23.0.0",
-    "vite": "^3.2.7"
+    "vite": "^3.2.8"
   }
 }
diff --git a/examples/electron-vite/yarn.lock b/examples/electron-vite/yarn.lock
index 486488f1..cb88e102 100644
--- a/examples/electron-vite/yarn.lock
+++ b/examples/electron-vite/yarn.lock
@@ -1286,10 +1286,10 @@ unplugin@1.0.1:
     webpack-sources "^3.2.3"
     webpack-virtual-modules "^0.5.0"
 
-vite@^3.2.7:
-  version "3.2.7"
-  resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.7.tgz#35a62826bd4d6b778ae5db8766d023bcd4e7bef3"
-  integrity sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==
+vite@^3.2.8:
+  version "3.2.8"
+  resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.8.tgz#0697e13addf99ed44b838b8462a3a922fdd9d37b"
+  integrity sha512-EtQU16PLIJpAZol2cTLttNP1mX6L0SyI0pgQB1VOoWeQnMSvtiwovV3D6NcjN8CZQWWyESD2v5NGnpz5RvgOZA==
   dependencies:
     esbuild "^0.15.9"
     postcss "^8.4.18"

From 9c160be4225eefdd7f36a7f065995e1917d96534 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 24 Jan 2024 15:54:00 +0100
Subject: [PATCH 201/239] feat: Update JavaScript SDKs to v7.94.1 (#815)

---
 package.json                                  |  14 +-
 src/common/merge.ts                           |   1 +
 src/index.ts                                  |   4 +
 src/integrations.ts                           |   2 +-
 src/main/anr.ts                               |   7 +-
 src/main/electron-normalize.ts                |   4 +-
 src/main/index.ts                             |   4 +
 src/main/integrations/additional-context.ts   |   5 +-
 .../integrations/browser-window-session.ts    |   3 +
 src/main/integrations/child-process.ts        |   7 +-
 src/main/integrations/electron-breadcrumbs.ts |   3 +
 src/main/integrations/electron-minidump.ts    |   9 +-
 src/main/integrations/main-context.ts         |   3 +
 src/main/integrations/main-process-session.ts |   3 +
 src/main/integrations/net-breadcrumbs.ts      |  39 ++--
 src/main/integrations/onuncaughtexception.ts  |   3 +
 src/main/integrations/preload-injection.ts    |   5 +-
 src/main/integrations/renderer-profiling.ts   |   5 +-
 src/main/integrations/screenshots.ts          |   3 +
 .../integrations/sentry-minidump/index.ts     |   3 +
 src/main/sessions.ts                          |  39 ++--
 src/main/stack-parse.ts                       |  19 +-
 src/renderer/index.ts                         |   4 +
 src/renderer/integrations/event-to-main.ts    |   4 +-
 .../integrations/metrics-aggregator.ts        |   3 +
 src/renderer/integrations/scope-to-main.ts    |   3 +
 src/renderer/sdk.ts                           |   2 +-
 .../javascript/main-error/event.json          |   2 +-
 .../other/error-main-in-renderer/package.json |   8 -
 .../other/error-main-in-renderer/recipe.yml   |   3 -
 .../error-main-in-renderer/src/index.html     |  15 --
 .../other/error-main-in-renderer/src/main.js  |  27 ---
 .../other/main-process-module/event.json      |   2 +-
 test/unit/net.test.ts                         |  24 +-
 yarn.lock                                     | 208 +++++++++---------
 35 files changed, 247 insertions(+), 243 deletions(-)
 delete mode 100644 test/e2e/test-apps/other/error-main-in-renderer/package.json
 delete mode 100644 test/e2e/test-apps/other/error-main-in-renderer/recipe.yml
 delete mode 100644 test/e2e/test-apps/other/error-main-in-renderer/src/index.html
 delete mode 100644 test/e2e/test-apps/other/error-main-in-renderer/src/main.js

diff --git a/package.json b/package.json
index 24fb8e41..36274de2 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.92.0",
-    "@sentry/core": "7.92.0",
-    "@sentry/node": "7.92.0",
-    "@sentry/types": "7.92.0",
-    "@sentry/utils": "7.92.0",
+    "@sentry/browser": "7.94.1",
+    "@sentry/core": "7.94.1",
+    "@sentry/node": "7.94.1",
+    "@sentry/types": "7.94.1",
+    "@sentry/utils": "7.94.1",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.92.0",
-    "@sentry-internal/typescript": "7.92.0",
+    "@sentry-internal/eslint-config-sdk": "7.94.1",
+    "@sentry-internal/typescript": "7.94.1",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/common/merge.ts b/src/common/merge.ts
index cdab8c92..483a5dda 100644
--- a/src/common/merge.ts
+++ b/src/common/merge.ts
@@ -6,6 +6,7 @@ function removePrivateProperties(event: Event): void {
   for (const span of event.spans || []) {
     // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
     delete (span as any).spanRecorder;
+    // eslint-disable-next-line deprecation/deprecation
     delete span.transaction;
   }
 }
diff --git a/src/index.ts b/src/index.ts
index aaf4462a..aef5a7f1 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -39,8 +39,10 @@ export {
   createTransport,
   // eslint-disable-next-line deprecation/deprecation
   extractTraceparentData,
+  // eslint-disable-next-line deprecation/deprecation
   getActiveTransaction,
   getHubFromCarrier,
+  // eslint-disable-next-line deprecation/deprecation
   getCurrentHub,
   getClient,
   getCurrentScope,
@@ -49,9 +51,11 @@ export {
   Hub,
   // eslint-disable-next-line deprecation/deprecation
   lastEventId,
+  // eslint-disable-next-line deprecation/deprecation
   makeMain,
   runWithAsyncContext,
   Scope,
+  // eslint-disable-next-line deprecation/deprecation
   startTransaction,
   setContext,
   setExtra,
diff --git a/src/integrations.ts b/src/integrations.ts
index 0052a092..a34446fd 100644
--- a/src/integrations.ts
+++ b/src/integrations.ts
@@ -76,7 +76,7 @@ export function getIntegrations(): Integrations {
  */
 class EmptyIntegration implements Integration {
   /** @inheritDoc */
-  public static id: string = 'EmptyIntegration';
+  public static id = 'EmptyIntegration';
 
   /** @inheritDoc */
   public readonly name: string;
diff --git a/src/main/anr.ts b/src/main/anr.ts
index 250b524c..b7f47f25 100644
--- a/src/main/anr.ts
+++ b/src/main/anr.ts
@@ -1,7 +1,7 @@
-import { captureEvent, getClient, getCurrentHub, getModuleFromFilename, NodeClient, StackFrame } from '@sentry/node';
+import { captureEvent, createGetModuleFromFilename, getClient, NodeClient, StackFrame } from '@sentry/node';
 import { Event } from '@sentry/types';
 import { callFrameToStackFrame, logger, stripSentryFramesAndReverse, watchdogTimer } from '@sentry/utils';
-import { WebContents } from 'electron';
+import { app, WebContents } from 'electron';
 
 import { RendererStatus } from '../common';
 import { Anr } from './integrations/anr';
@@ -9,7 +9,7 @@ import { ElectronMainOptions } from './sdk';
 import { sessionAnr } from './sessions';
 
 function getRendererName(contents: WebContents): string | undefined {
-  const options = getCurrentHub().getClient()?.getOptions() as ElectronMainOptions | undefined;
+  const options = getClient()?.getOptions() as ElectronMainOptions | undefined;
   return options?.getRendererName?.(contents);
 }
 
@@ -68,6 +68,7 @@ function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFram
 
   // Collect scriptId -> url map so we can look up the filenames later
   const scripts = new Map<string, string>();
+  const getModuleFromFilename = createGetModuleFromFilename(app.getAppPath());
 
   contents.debugger.on('message', (_, method, params) => {
     if (method === 'Debugger.scriptParsed') {
diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts
index 96866665..7e12dc89 100644
--- a/src/main/electron-normalize.ts
+++ b/src/main/electron-normalize.ts
@@ -29,9 +29,9 @@ export const whenAppReady: Promise<void> = (() => {
             resolve();
           });
         });
-  } else {
-    return Promise.resolve();
   }
+
+  return Promise.resolve();
 })();
 
 /**
diff --git a/src/main/index.ts b/src/main/index.ts
index c9ee1017..32d637d6 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -40,17 +40,21 @@ export {
   createTransport,
   // eslint-disable-next-line deprecation/deprecation
   extractTraceparentData,
+  // eslint-disable-next-line deprecation/deprecation
   getActiveTransaction,
   getHubFromCarrier,
+  // eslint-disable-next-line deprecation/deprecation
   getCurrentHub,
   getClient,
   getCurrentScope,
   getGlobalScope,
   getIsolationScope,
   Hub,
+  // eslint-disable-next-line deprecation/deprecation
   makeMain,
   runWithAsyncContext,
   Scope,
+  // eslint-disable-next-line deprecation/deprecation
   startTransaction,
   setContext,
   setExtra,
diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts
index 5c606838..1f65f6e2 100644
--- a/src/main/integrations/additional-context.ts
+++ b/src/main/integrations/additional-context.ts
@@ -40,6 +40,9 @@ const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContext
 
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup() {
       // Some metrics are only available after app ready so we lazily load them
       whenAppReady.then(
@@ -76,7 +79,7 @@ const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContext
 
       if (cpu) {
         const cpuInfo: CpuInfo[] | undefined = cpus();
-        if (cpuInfo && cpuInfo.length) {
+        if (cpuInfo?.length) {
           const firstCpu = cpuInfo[0];
 
           device.processor_count = cpuInfo.length;
diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts
index c95b1097..75778d4e 100644
--- a/src/main/integrations/browser-window-session.ts
+++ b/src/main/integrations/browser-window-session.ts
@@ -77,6 +77,9 @@ const browserWindowSession: IntegrationFn = (options: Options = {}) => {
 
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup() {
       app.on('browser-window-created', (_event, window) => {
         window.on('focus', windowStateChanged);
diff --git a/src/main/integrations/child-process.ts b/src/main/integrations/child-process.ts
index d160fa14..1545759c 100644
--- a/src/main/integrations/child-process.ts
+++ b/src/main/integrations/child-process.ts
@@ -42,12 +42,15 @@ const childProcess: IntegrationFn = (userOptions: Partial<OrBool<ChildProcessOpt
   const { breadcrumbs, events } = userOptions;
 
   const options: ChildProcessOptions = {
-    breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs == false ? [] : DEFAULT_OPTIONS.breadcrumbs,
-    events: Array.isArray(events) ? events : events == false ? [] : DEFAULT_OPTIONS.events,
+    breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs === false ? [] : DEFAULT_OPTIONS.breadcrumbs,
+    events: Array.isArray(events) ? events : events === false ? [] : DEFAULT_OPTIONS.events,
   };
 
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup(client: NodeClient) {
       const { breadcrumbs, events } = options;
       const allReasons = Array.from(new Set([...breadcrumbs, ...events]));
diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts
index 815740af..f5ec9361 100644
--- a/src/main/integrations/electron-breadcrumbs.ts
+++ b/src/main/integrations/electron-breadcrumbs.ts
@@ -145,6 +145,9 @@ const electronBreadcrumbs: IntegrationFn = (userOptions: Partial<ElectronBreadcr
 
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup(client: NodeClient) {
       const clientOptions = client.getOptions() as ElectronMainOptions | undefined;
 
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index 434d41d9..e0a5f834 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -15,8 +15,8 @@ import {
 import { checkPreviousSession, sessionCrashed, unreportedDuringLastSession } from '../sessions';
 
 /** Is object defined and has keys */
-function hasKeys(obj: any): boolean {
-  return obj != undefined && Object.keys(obj).length > 0;
+function hasKeys(obj: object | undefined): boolean {
+  return obj !== undefined && Object.keys(obj).length > 0;
 }
 
 /** Gets a Scope object with user, tags and extra */
@@ -97,7 +97,7 @@ const INTEGRATION_NAME = 'ElectronMinidump';
 
 const electronMinidump: IntegrationFn = () => {
   /** Counter used to ensure no race condition when updating extra params */
-  let updateEpoch: number = 0;
+  let updateEpoch = 0;
   let customRelease: string | undefined;
 
   async function getNativeUploaderEvent(scope: ScopeData): Promise<Event> {
@@ -170,6 +170,9 @@ const electronMinidump: IntegrationFn = () => {
 
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup(client: NodeClient) {
       // Mac AppStore builds cannot run the crash reporter due to the sandboxing
       // requirements. In this case, we prevent enabling native crashes entirely.
diff --git a/src/main/integrations/main-context.ts b/src/main/integrations/main-context.ts
index 5b6ab478..f4c44c22 100644
--- a/src/main/integrations/main-context.ts
+++ b/src/main/integrations/main-context.ts
@@ -10,6 +10,9 @@ const INTEGRATION_NAME = 'MainContext';
 const mainContext: IntegrationFn = () => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     async processEvent(event, _, client) {
       const clientOptions = client.getOptions();
       const normalized = normalizeEvent(event, app.getAppPath());
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index dc4fdab9..ca038284 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -17,6 +17,9 @@ const INTEGRATION_NAME = 'MainProcessSession';
 const mainProcessSession: IntegrationFn = (options: Options = {}) => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup() {
       startSession(!!options.sendOnCreate);
       endSessionOnExit();
diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts
index 3ef3005b..2c257435 100644
--- a/src/main/integrations/net-breadcrumbs.ts
+++ b/src/main/integrations/net-breadcrumbs.ts
@@ -1,6 +1,11 @@
-/* eslint-disable deprecation/deprecation */
-import { convertIntegrationFnToClass, getDynamicSamplingContextFromClient } from '@sentry/core';
-import { getCurrentHub } from '@sentry/node';
+import {
+  addBreadcrumb,
+  /* eslint-disable deprecation/deprecation */
+  convertIntegrationFnToClass,
+  getClient,
+  getCurrentScope,
+  getDynamicSamplingContextFromClient,
+} from '@sentry/core';
 import { DynamicSamplingContext, IntegrationFn, Span, TracePropagationTargets } from '@sentry/types';
 import {
   dynamicSamplingContextToSentryBaggageHeader,
@@ -174,11 +179,8 @@ function createWrappedRequestFactory(
 
   return function wrappedRequestMethodFactory(originalRequestMethod: RequestMethod): RequestMethod {
     return function requestMethod(this: typeof electronNet, reqOptions: RequestOptions): ClientRequest {
-      // eslint-disable-next-line @typescript-eslint/no-this-alias
-      const netModule = this;
-
       const { url, method } = parseOptions(reqOptions);
-      const request = originalRequestMethod.apply(netModule, [reqOptions]) as ClientRequest;
+      const request = originalRequestMethod.apply(this, [reqOptions]) as ClientRequest;
 
       if (url.match(/sentry_key/) || request.getHeader('x-sentry-auth')) {
         return request;
@@ -186,8 +188,7 @@ function createWrappedRequestFactory(
 
       let span: Span | undefined;
 
-      const hub = getCurrentHub();
-      const scope = hub.getScope();
+      const scope = getCurrentScope();
       if (scope && shouldCreateSpan(method, url)) {
         const parentSpan = scope.getSpan();
 
@@ -208,7 +209,7 @@ function createWrappedRequestFactory(
             const { traceId, sampled, dsc } = scope.getPropagationContext();
             const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled);
 
-            const client = hub.getClient();
+            const client = getClient();
             const dynamicSamplingContext =
               dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined);
 
@@ -219,10 +220,8 @@ function createWrappedRequestFactory(
 
       return request
         .once('response', function (this: ClientRequest, res: IncomingMessage): void {
-          // eslint-disable-next-line @typescript-eslint/no-this-alias
-          const req = this;
           if (options.breadcrumbs !== false) {
-            addRequestBreadcrumb('response', method, url, req, res);
+            addRequestBreadcrumb('response', method, url, this, res);
           }
           if (span) {
             if (res.statusCode) {
@@ -232,11 +231,8 @@ function createWrappedRequestFactory(
           }
         })
         .once('error', function (this: ClientRequest, _error: Error): void {
-          // eslint-disable-next-line @typescript-eslint/no-this-alias
-          const req = this;
-
           if (options.breadcrumbs !== false) {
-            addRequestBreadcrumb('error', method, url, req, undefined);
+            addRequestBreadcrumb('error', method, url, this, undefined);
           }
           if (span) {
             span.setHttpStatus(500);
@@ -257,14 +253,14 @@ function addRequestBreadcrumb(
   req: ClientRequest,
   res?: IncomingMessage,
 ): void {
-  getCurrentHub().addBreadcrumb(
+  addBreadcrumb(
     {
       type: 'http',
       category: 'electron.net',
       data: {
         url,
         method: method,
-        status_code: res && res.statusCode,
+        status_code: res?.statusCode,
       },
     },
     {
@@ -280,8 +276,11 @@ const INTEGRATION_NAME = 'Net';
 const net: IntegrationFn = (options: NetOptions = {}) => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup() {
-      const clientOptions = getCurrentHub().getClient()?.getOptions();
+      const clientOptions = getClient()?.getOptions();
 
       // No need to instrument if we don't want to track anything
       if (options.breadcrumbs === false && options.tracing === false) {
diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts
index 16ce8ef7..8b009dd7 100644
--- a/src/main/integrations/onuncaughtexception.ts
+++ b/src/main/integrations/onuncaughtexception.ts
@@ -8,6 +8,9 @@ const INTEGRATION_NAME = 'OnUncaughtException';
 const onUncaughtException: IntegrationFn = () => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup(client: NodeClient) {
       const options = client.getOptions();
 
diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts
index d0ba6a1e..bd49f6c1 100644
--- a/src/main/integrations/preload-injection.ts
+++ b/src/main/integrations/preload-injection.ts
@@ -36,12 +36,15 @@ const INTEGRATION_NAME = 'PreloadInjection';
 const preloadInjection: IntegrationFn = () => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup(client) {
       const options = client.getOptions() as ElectronMainOptionsInternal;
 
       // If classic IPC mode is disabled, we shouldn't attempt to inject preload scripts
       // eslint-disable-next-line no-bitwise
-      if ((options.ipcMode & IPCMode.Classic) == 0) {
+      if ((options.ipcMode & IPCMode.Classic) === 0) {
         return;
       }
 
diff --git a/src/main/integrations/renderer-profiling.ts b/src/main/integrations/renderer-profiling.ts
index abf06bfa..a7825274 100644
--- a/src/main/integrations/renderer-profiling.ts
+++ b/src/main/integrations/renderer-profiling.ts
@@ -59,6 +59,9 @@ const INTEGRATION_NAME = 'RendererProfiling';
 const rendererProfiling: IntegrationFn = () => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup(client) {
       const options = client.getOptions() as ElectronMainOptionsInternal;
       if (!options.enableRendererProfiling) {
@@ -92,7 +95,7 @@ const rendererProfiling: IntegrationFn = () => {
           for (let j = 1; j < item.length; j++) {
             const event = item[j] as Event;
 
-            if (event && event.contexts && event.contexts.profile && event.contexts.profile.profile_id) {
+            if (event?.contexts?.profile?.profile_id) {
               profile_id = event.contexts.profile.profile_id as string;
               // This can be removed as it's no longer needed
               delete event.contexts.profile;
diff --git a/src/main/integrations/screenshots.ts b/src/main/integrations/screenshots.ts
index c44293df..1011405f 100644
--- a/src/main/integrations/screenshots.ts
+++ b/src/main/integrations/screenshots.ts
@@ -11,6 +11,9 @@ const INTEGRATION_NAME = 'Screenshots';
 const screenshots: IntegrationFn = () => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     async processEvent(event, hint, client) {
       const attachScreenshot = !!(client.getOptions() as ElectronMainOptions).attachScreenshot;
 
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 6952b911..6544de67 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -178,6 +178,9 @@ const sentryMinidump: IntegrationFn = () => {
 
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup(client: NodeClient): void {
       // Mac AppStore builds cannot run the crash reporter due to the sandboxing
       // requirements. In this case, we prevent enabling native crashes entirely.
diff --git a/src/main/sessions.ts b/src/main/sessions.ts
index d0632289..7c30074c 100644
--- a/src/main/sessions.ts
+++ b/src/main/sessions.ts
@@ -1,4 +1,12 @@
-import { getCurrentHub, makeSession, updateSession } from '@sentry/core';
+import {
+  captureSession,
+  endSession as endSessionCore,
+  getClient,
+  getCurrentScope,
+  makeSession,
+  startSession as startSessionCore,
+  updateSession,
+} from '@sentry/core';
 import { flush, NodeClient } from '@sentry/node';
 import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';
 import { logger } from '@sentry/utils';
@@ -27,11 +35,10 @@ let persistTimer: NodeJS.Timer | undefined;
 
 /** Starts a session */
 export function startSession(sendOnCreate: boolean): void {
-  const hub = getCurrentHub();
-  const session = hub.startSession();
+  const session = startSessionCore();
 
   if (sendOnCreate) {
-    hub.captureSession();
+    captureSession();
   }
 
   getSessionStore()
@@ -42,7 +49,7 @@ export function startSession(sendOnCreate: boolean): void {
 
   // Every PERSIST_INTERVAL, write the session to disk
   persistTimer = setInterval(async () => {
-    const currentSession = hub.getScope()?.getSession();
+    const currentSession = getCurrentScope().getSession();
     // Only bother saving if it hasn't already ended
     if (currentSession && currentSession.status === 'ok') {
       await getSessionStore().set(currentSession);
@@ -57,13 +64,12 @@ export async function endSession(): Promise<void> {
     clearInterval(persistTimer);
   }
 
-  const hub = getCurrentHub();
-  const session = hub.getScope()?.getSession();
+  const session = getCurrentScope().getSession();
 
   if (session) {
     if (session.status === 'ok') {
       logger.log('Ending session');
-      hub.endSession();
+      endSessionCore();
     } else {
       logger.log('Session was already ended');
     }
@@ -84,7 +90,7 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined):
 
   const previousSessionModified = await getSessionStore().getModifiedDate();
   // There is no previous session
-  if (previousSessionModified == undefined) {
+  if (previousSessionModified === undefined) {
     return false;
   }
 
@@ -103,7 +109,7 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined):
 
 /** Checks if the previous session needs sending as crashed or abnormal  */
 export async function checkPreviousSession(crashed: boolean): Promise<void> {
-  const client = getCurrentHub().getClient<NodeClient>();
+  const client = getClient<NodeClient>();
 
   const previous = await previousSession;
 
@@ -141,8 +147,7 @@ export function sessionCrashed(): void {
   }
 
   logger.log('Session Crashed');
-  const hub = getCurrentHub();
-  const session = hub.getScope()?.getSession();
+  const session = getCurrentScope().getSession();
 
   if (!session) {
     logger.log('No session to update');
@@ -151,12 +156,13 @@ export function sessionCrashed(): void {
 
   if (session.status === 'ok') {
     logger.log('Setting session as crashed');
-    updateSession(session, { status: 'crashed', errors: (session.errors += 1) });
+    const errors = session.errors + 1;
+    updateSession(session, { status: 'crashed', errors });
   } else {
     logger.log('Session already ended');
   }
 
-  hub.captureSession();
+  captureSession();
 }
 
 /** Sets the current session as ANR */
@@ -166,8 +172,7 @@ export function sessionAnr(): void {
     clearInterval(persistTimer);
   }
 
-  const hub = getCurrentHub();
-  const session = hub.getScope()?.getSession();
+  const session = getCurrentScope().getSession();
 
   if (!session) {
     return;
@@ -176,7 +181,7 @@ export function sessionAnr(): void {
   if (session.status === 'ok') {
     logger.log('Setting session as abnormal ANR');
     updateSession(session, { status: 'abnormal', abnormal_mechanism: 'anr_foreground' });
-    hub.captureSession();
+    captureSession();
   }
 }
 
diff --git a/src/main/stack-parse.ts b/src/main/stack-parse.ts
index 0e36632c..c60f17dc 100644
--- a/src/main/stack-parse.ts
+++ b/src/main/stack-parse.ts
@@ -1,18 +1,9 @@
-import { getModuleFromFilename as getModuleFromFilenameNode } from '@sentry/node';
+import { createGetModuleFromFilename } from '@sentry/node';
 import { StackParser } from '@sentry/types';
-import { createStackParser, nodeStackLineParser, normalizeUrlToBase } from '@sentry/utils';
+import { createStackParser, nodeStackLineParser } from '@sentry/utils';
 import { app } from 'electron';
 
-/** Parses the module name form a filename */
-function getModuleFromFilename(filename: string | undefined): string | undefined {
-  if (!filename) {
-    return;
-  }
-
-  const normalizedFilename = normalizeUrlToBase(filename, app.getAppPath());
-
-  return getModuleFromFilenameNode(normalizedFilename);
-}
-
 // node.js stack parser but filename normalized before parsing the module
-export const defaultStackParser: StackParser = createStackParser(nodeStackLineParser(getModuleFromFilename));
+export const defaultStackParser: StackParser = createStackParser(
+  nodeStackLineParser(createGetModuleFromFilename(app.getAppPath())),
+);
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 1c9a7335..7b7000e1 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -37,17 +37,21 @@ export {
   createTransport,
   // eslint-disable-next-line deprecation/deprecation
   extractTraceparentData,
+  // eslint-disable-next-line deprecation/deprecation
   getActiveTransaction,
   getHubFromCarrier,
+  // eslint-disable-next-line deprecation/deprecation
   getCurrentHub,
   getClient,
   getCurrentScope,
   getGlobalScope,
   getIsolationScope,
   Hub,
+  // eslint-disable-next-line deprecation/deprecation
   makeMain,
   runWithAsyncContext,
   Scope,
+  // eslint-disable-next-line deprecation/deprecation
   startTransaction,
   setContext,
   setExtra,
diff --git a/src/renderer/integrations/event-to-main.ts b/src/renderer/integrations/event-to-main.ts
index 0d8949b8..075640f6 100644
--- a/src/renderer/integrations/event-to-main.ts
+++ b/src/renderer/integrations/event-to-main.ts
@@ -10,7 +10,7 @@ import { getIPC } from '../ipc';
  */
 export class EventToMain implements Integration {
   /** @inheritDoc */
-  public static id: string = 'EventToMain';
+  public static id = 'EventToMain';
 
   /** @inheritDoc */
   public readonly name: string;
@@ -29,7 +29,7 @@ export class EventToMain implements Integration {
       event.breadcrumbs = event.breadcrumbs || [];
 
       // Remove the environment as it defaults to 'production' and overwrites the main process environment
-      delete event.environment;
+      event.environment = undefined;
 
       ipc.sendEvent(JSON.stringify(normalize(event, 20, 2_000)));
       // Events are handled and sent from the main process so we return null here so nothing is sent from the renderer
diff --git a/src/renderer/integrations/metrics-aggregator.ts b/src/renderer/integrations/metrics-aggregator.ts
index a52faf81..5dea307e 100644
--- a/src/renderer/integrations/metrics-aggregator.ts
+++ b/src/renderer/integrations/metrics-aggregator.ts
@@ -9,6 +9,9 @@ const INTEGRATION_NAME = 'MetricsAggregator';
 const metricsAggregatorIntegration: IntegrationFn = () => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup(client: BrowserClient) {
       client.metricsAggregator = new ElectronRendererMetricsAggregator();
     },
diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts
index 66ab2243..8f54d90f 100644
--- a/src/renderer/integrations/scope-to-main.ts
+++ b/src/renderer/integrations/scope-to-main.ts
@@ -9,6 +9,9 @@ const INTEGRATION_NAME = 'ScopeToMain';
 const scopeToMain: IntegrationFn = () => {
   return {
     name: INTEGRATION_NAME,
+    setupOnce() {
+      // noop
+    },
     setup() {
       const scope = getCurrentScope();
       if (scope) {
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index e29a45ef..cf0d5696 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -41,7 +41,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_92_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_94_1: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/test-apps/javascript/main-error/event.json b/test/e2e/test-apps/javascript/main-error/event.json
index fa14bfaf..16309c04 100644
--- a/test/e2e/test-apps/javascript/main-error/event.json
+++ b/test/e2e/test-apps/javascript/main-error/event.json
@@ -69,7 +69,7 @@
                 "colno": 0,
                 "filename": "app:///src/main.js",
                 "function": "{{function}}",
-                "module": "main",
+                "module": "src:main",
                 "in_app": true,
                 "lineno": 0
               }
diff --git a/test/e2e/test-apps/other/error-main-in-renderer/package.json b/test/e2e/test-apps/other/error-main-in-renderer/package.json
deleted file mode 100644
index aa40ff54..00000000
--- a/test/e2e/test-apps/other/error-main-in-renderer/package.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "name": "error-main-in-renderer",
-  "version": "1.0.0",
-  "main": "src/main.js",
-  "dependencies": {
-    "@sentry/electron": "3.0.0"
-  }
-}
diff --git a/test/e2e/test-apps/other/error-main-in-renderer/recipe.yml b/test/e2e/test-apps/other/error-main-in-renderer/recipe.yml
deleted file mode 100644
index 1ec86923..00000000
--- a/test/e2e/test-apps/other/error-main-in-renderer/recipe.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-description: Error logged when main code loaded in renderer process
-command: yarn
-expectedError: This code is intended to run in the Electron main
diff --git a/test/e2e/test-apps/other/error-main-in-renderer/src/index.html b/test/e2e/test-apps/other/error-main-in-renderer/src/index.html
deleted file mode 100644
index 3bcdb6bf..00000000
--- a/test/e2e/test-apps/other/error-main-in-renderer/src/index.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="UTF-8" />
-  </head>
-  <body>
-    <script>
-      const { init } = require('@sentry/electron/main');
-
-      init({
-        debug: true,
-      });
-    </script>
-  </body>
-</html>
diff --git a/test/e2e/test-apps/other/error-main-in-renderer/src/main.js b/test/e2e/test-apps/other/error-main-in-renderer/src/main.js
deleted file mode 100644
index 87359380..00000000
--- a/test/e2e/test-apps/other/error-main-in-renderer/src/main.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const path = require('path');
-
-const { app, BrowserWindow } = require('electron');
-const { init } = require('@sentry/electron');
-
-init({
-  dsn: '__DSN__',
-  debug: true,
-  autoSessionTracking: false,
-  onFatalError: () => {},
-});
-
-app.on('ready', () => {
-  const mainWindow = new BrowserWindow({
-    show: false,
-    webPreferences: {
-      nodeIntegration: true,
-      contextIsolation: false,
-    },
-  });
-
-  mainWindow.loadFile(path.join(__dirname, 'index.html'));
-});
-
-setTimeout(() => {
-  process.exit();
-}, 2000);
diff --git a/test/e2e/test-apps/other/main-process-module/event.json b/test/e2e/test-apps/other/main-process-module/event.json
index 9557d8f7..998b6b8f 100644
--- a/test/e2e/test-apps/other/main-process-module/event.json
+++ b/test/e2e/test-apps/other/main-process-module/event.json
@@ -80,7 +80,7 @@
                 "function": "{{function}}",
                 "in_app": true,
                 "lineno": 0,
-                "module": "main"
+                "module": "dist:main"
               }
             ]
           },
diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts
index 5e538911..7be521dc 100644
--- a/test/unit/net.test.ts
+++ b/test/unit/net.test.ts
@@ -1,7 +1,8 @@
 import { expect, should, use } from 'chai';
 import * as http from 'http';
 import chaiAsPromised = require('chai-as-promised');
-import { getActiveTransaction, setAsyncContextStrategy, Span } from '@sentry/core';
+// eslint-disable-next-line deprecation/deprecation
+import { getActiveTransaction, setAsyncContextStrategy, Span, spanToJSON } from '@sentry/core';
 import { createTransport, Hub, NodeClient } from '@sentry/node';
 import { ClientOptions, Transaction, TransactionContext } from '@sentry/types';
 import { resolvedSyncPromise } from '@sentry/utils';
@@ -66,8 +67,10 @@ function createHubOnScope(customOptions: Partial<ClientOptions> = {}): Hub {
     ...customOptions,
   });
 
+  // eslint-disable-next-line deprecation/deprecation
   hub.bindClient(new NodeClient(options));
 
+  // eslint-disable-next-line deprecation/deprecation
   hub.getScope().setUser({
     id: 'uid123',
     segment: 'segmentA',
@@ -82,18 +85,21 @@ function createTransactionOnScope(
 ): [Transaction, Hub] {
   const hub = createHubOnScope(customOptions);
 
+  // eslint-disable-next-line deprecation/deprecation
   const transaction = hub.startTransaction({
     name: 'dogpark',
     traceId: '12312012123120121231201212312012',
     ...customContext,
   });
 
+  // eslint-disable-next-line deprecation/deprecation
   hub.getScope().setSpan(transaction);
 
   return [transaction, hub];
 }
 
 function getSpans(transaction: Transaction): Span[] {
+  // eslint-disable-next-line deprecation/deprecation
   return (transaction as unknown as Span).spanRecorder?.spans as Span[];
 }
 
@@ -120,7 +126,8 @@ describe.skip('net integration', () => {
     expect(spans.length).to.equal(2);
 
     // our span is at index 1 because the transaction itself is at index 0
-    expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+    expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+    // eslint-disable-next-line deprecation/deprecation
     expect(spans[1].op).to.equal('http.client');
 
     expect(headers['sentry-trace']).not.to.be.empty;
@@ -163,7 +170,8 @@ describe.skip('net integration', () => {
       expect(spans.length).to.equal(2);
 
       // our span is at index 1 because the transaction itself is at index 0
-      expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      // eslint-disable-next-line deprecation/deprecation
       expect(spans[1].op).to.equal('http.client');
 
       expect(headers['sentry-trace']).not.to.be.empty;
@@ -179,7 +187,8 @@ describe.skip('net integration', () => {
       expect(spans.length).to.equal(2);
 
       // our span is at index 1 because the transaction itself is at index 0
-      expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      // eslint-disable-next-line deprecation/deprecation
       expect(spans[1].op).to.equal('http.client');
 
       expect(headers['sentry-trace']).to.be.undefined;
@@ -198,7 +207,8 @@ describe.skip('net integration', () => {
       expect(spans.length).to.equal(2);
 
       // our span is at index 1 because the transaction itself is at index 0
-      expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      // eslint-disable-next-line deprecation/deprecation
       expect(spans[1].op).to.equal('http.client');
 
       expect(headers['sentry-trace']).not.to.be.empty;
@@ -215,7 +225,8 @@ describe.skip('net integration', () => {
       expect(spans.length).to.equal(2);
 
       // our span is at index 1 because the transaction itself is at index 0
-      expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`);
+      // eslint-disable-next-line deprecation/deprecation
       expect(spans[1].op).to.equal('http.client');
 
       expect(headers['sentry-trace']).to.be.undefined;
@@ -229,6 +240,7 @@ describe.skip('net integration', () => {
         integrations: [new Net()],
       });
       const headers = await makeRequest();
+      // eslint-disable-next-line deprecation/deprecation
       const transaction = getActiveTransaction();
 
       expect(transaction).to.be.undefined;
diff --git a/yarn.lock b/yarn.lock
index 50ea3561..51b68bd3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.92.0.tgz#a4532463a22a59dfb115cd2392f02e27c95b7f66"
-  integrity sha512-1TtJkV4Wmqf/CbXUL8tkS/yxDAVbvUnvCQZguD6s1LZTWMJ+4coEkeSkgn1qRSjBz0YIREr1DXSmPbXU2TugiQ==
+"@sentry-internal/eslint-config-sdk@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.94.1.tgz#87af85dff9a2330101144e26db1e0d0e94a79fdf"
+  integrity sha512-SlYJEFPHeNPfl3EwE9omqIVZ8kQ+khlAMSka0YpM1dKXmzMRQN60iuzDoqf243SJt3HXyORVbghdAAYC5Svqtg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.92.0"
-    "@sentry-internal/typescript" "7.92.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.94.1"
+    "@sentry-internal/typescript" "7.94.1"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,88 +180,97 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.92.0.tgz#9c6dae628adecfd7047afa504cc8809276ad2bad"
-  integrity sha512-hccEHqZwO9kEsDOlPso7b7Tz+sSBiyyJ1KW+EOx65H3AAgGGHPkoU074fA0S+yyuRVEk0wCKR1xQ7jgfWxJSQw==
+"@sentry-internal/eslint-plugin-sdk@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.94.1.tgz#f2f0ff83d2caf4e2a496a1a5ed58d9c55244eff4"
+  integrity sha512-nn8x1y47vAhINglbwBNZWmVflOHgkFcnOfKeEWSGTZ35QPuO6cD+S6Kc62S5o3wA1hgQHOII+b1Hl7w9NtrtMg==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.92.0.tgz#1293b0a332f81cdf3970abd36894b9d25670c4e6"
-  integrity sha512-/jEALRtVqboxB9kcK2tag8QCO6XANTlGBb9RV3oeGXJe0DDNJXRq6wVZbfgztXJRrfgx4XVDcNt1pRVoGGG++g==
-  dependencies:
-    "@sentry/core" "7.92.0"
-    "@sentry/types" "7.92.0"
-    "@sentry/utils" "7.92.0"
-
-"@sentry-internal/tracing@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.92.0.tgz#505d94a93b5df965ec6bfb35da43389988259d4d"
-  integrity sha512-ur55vPcUUUWFUX4eVLNP71ohswK7ZZpleNZw9Y1GfLqyI+0ILQUwjtzqItJrdClvVsdRZJMRmDV40Hp9Lbb9mA==
-  dependencies:
-    "@sentry/core" "7.92.0"
-    "@sentry/types" "7.92.0"
-    "@sentry/utils" "7.92.0"
-
-"@sentry-internal/typescript@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.92.0.tgz#25196d80b127a8a22f32a4b95f691f512d0ad117"
-  integrity sha512-fCMKhG+J3VV+afyyWu6rsuhMppugKj8ubk8b2Ss7BggzPF5GEA6njTUBJYpFNkvy/RGLy6gDy3Qpqb/cH3NT2g==
-
-"@sentry/browser@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.92.0.tgz#f4c65f2af6f38c2dd5e32153e9b358c0c80275f2"
-  integrity sha512-loMr02/zQ38u8aQhYLtIBg0i5n3ps2e3GUXrt3CdsJQdkRYfa62gcrE7SzvoEpMVHTk7VOI4fWGht8cWw/1k3A==
-  dependencies:
-    "@sentry-internal/feedback" "7.92.0"
-    "@sentry-internal/tracing" "7.92.0"
-    "@sentry/core" "7.92.0"
-    "@sentry/replay" "7.92.0"
-    "@sentry/types" "7.92.0"
-    "@sentry/utils" "7.92.0"
-
-"@sentry/core@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.92.0.tgz#4e74c1959348b698226c49ead7a24e165502b55c"
-  integrity sha512-1Tly7YB2I1byI5xb0Cwrxs56Rhww+6mQ7m9P7rTmdC3/ijOzbEoohtYIUPwcooCEarpbEJe/tAayRx6BrH2UbQ==
-  dependencies:
-    "@sentry/types" "7.92.0"
-    "@sentry/utils" "7.92.0"
-
-"@sentry/node@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.92.0.tgz#880d3be5cb8ef805a6856c619db3951b1678f726"
-  integrity sha512-LZeQL1r6kikEoOzA9K61OmMl32/lK/6PzmFNDH6z7UYwQopCZgVA6IP+CZuln8K2ys5c9hCyF7ICQMysXfpNJA==
-  dependencies:
-    "@sentry-internal/tracing" "7.92.0"
-    "@sentry/core" "7.92.0"
-    "@sentry/types" "7.92.0"
-    "@sentry/utils" "7.92.0"
-    https-proxy-agent "^5.0.0"
-
-"@sentry/replay@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.92.0.tgz#d94e9f6b72e540e73378a74ca1190068edd447f2"
-  integrity sha512-G1t9Uvc9cR8VpNkElwvHIMGzykjIKikb10n0tfVd3e+rBPMCCjCPWOduwG6jZYxcvCjTpqmJh6NSLXxL/Mt4JA==
-  dependencies:
-    "@sentry-internal/tracing" "7.92.0"
-    "@sentry/core" "7.92.0"
-    "@sentry/types" "7.92.0"
-    "@sentry/utils" "7.92.0"
-
-"@sentry/types@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.92.0.tgz#4c308fdb316c0272f55f0816230fe87e7b9b551a"
-  integrity sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg==
-
-"@sentry/utils@7.92.0":
-  version "7.92.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.92.0.tgz#20ed29742594eab007f9ff72e008b5262456a319"
-  integrity sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA==
-  dependencies:
-    "@sentry/types" "7.92.0"
+"@sentry-internal/feedback@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.94.1.tgz#332212255568b1b18c08814bb7f8d37187e1e6c0"
+  integrity sha512-NlJn/TEX1MOPfY4bb6FU0Equ6YuaewZ+lIAqYt3HuEoYI7nYApeRGaPuVLkkezN0cmI7oU/+pJ7v83PtYXCFZw==
+  dependencies:
+    "@sentry/core" "7.94.1"
+    "@sentry/types" "7.94.1"
+    "@sentry/utils" "7.94.1"
+
+"@sentry-internal/replay-canvas@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.94.1.tgz#fdf9743c3051d468ae7c42ecf534beb803204154"
+  integrity sha512-kCFxdIJTbo2z8wnAQ3IqNVI8y2lSOtaSSZeBgeqiertro8Pe/DS8AXUnhXnAQkluM2i2koA+AgUo6/4bUeZXuQ==
+  dependencies:
+    "@sentry/core" "7.94.1"
+    "@sentry/replay" "7.94.1"
+    "@sentry/types" "7.94.1"
+
+"@sentry-internal/tracing@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.94.1.tgz#27909da03c1541a83002cab655814ec208242b9e"
+  integrity sha512-znxCdrz7tPXm9Bwoe46PW72Zr0Iv7bXT6+b2LNg5fxWiCQVBbQFrMuVvtXEmHxeRRJVEgTh/4TdulB7wrtQIUQ==
+  dependencies:
+    "@sentry/core" "7.94.1"
+    "@sentry/types" "7.94.1"
+    "@sentry/utils" "7.94.1"
+
+"@sentry-internal/typescript@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.94.1.tgz#1dd9100c6f253a06143d1b369898e993432a1619"
+  integrity sha512-hgPK7YOmVhJXCfkDwHt3KPDS54jA/DLV4zEo9xuhDtb6YpQIfMY0F7ufsxI2i3JFWiyNmeuWaHzgOt2Jh9jRtQ==
+
+"@sentry/browser@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.94.1.tgz#d9a4a1c00138bf799e8559fd1df3eff2fa12155b"
+  integrity sha512-IUR8B/AEPEzLijZ4Uo5qJsgmIBnCudBqAWd3zAiuk3TWYYOQUEvleddFxffN3n6pFhGx3ArksB+AIQBruttLGA==
+  dependencies:
+    "@sentry-internal/feedback" "7.94.1"
+    "@sentry-internal/replay-canvas" "7.94.1"
+    "@sentry-internal/tracing" "7.94.1"
+    "@sentry/core" "7.94.1"
+    "@sentry/replay" "7.94.1"
+    "@sentry/types" "7.94.1"
+    "@sentry/utils" "7.94.1"
+
+"@sentry/core@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.94.1.tgz#3696cd78b2196ac27fda5bcfb2338f46241a3ff8"
+  integrity sha512-4sjiMnkbGpv9O98YHVZe7fHNwwdYl+zLoCOoEOadtrJ1EYYvnK/MSixN2HJF7g/0s22xd4xY958QyNIRVR+Iiw==
+  dependencies:
+    "@sentry/types" "7.94.1"
+    "@sentry/utils" "7.94.1"
+
+"@sentry/node@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.94.1.tgz#3e123e546330d89e71004f9f5cad1f9ba7581598"
+  integrity sha512-30nyrfVbY1vNoWg5ptGW+soykU532VvKLuXiKty3SKEXjp5bv23JrCcVtuwp9KrW4josHOJbxZUqeNni85YplQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.94.1"
+    "@sentry/core" "7.94.1"
+    "@sentry/types" "7.94.1"
+    "@sentry/utils" "7.94.1"
+
+"@sentry/replay@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.94.1.tgz#cba88d4de453c90aa21db3fd3cb7e66e0ecad0a1"
+  integrity sha512-4wf3CZ1LR2Neh9IiZD0rY8AORS5Dc5HlKfMug026f8KM2aeoDyneM2JFBnPT/ulRnbD2gNciV+kdZiRd5K5jiw==
+  dependencies:
+    "@sentry-internal/tracing" "7.94.1"
+    "@sentry/core" "7.94.1"
+    "@sentry/types" "7.94.1"
+    "@sentry/utils" "7.94.1"
+
+"@sentry/types@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.94.1.tgz#97b653a6e73078fc82a2c9d2129e22c7ae1ee248"
+  integrity sha512-A7CdEXFSgGyWv2BT2p9cAvJfb+dypvOtsY8ZvZvdPLUa7kqCV7ndhURUqKjvMBzsL2GParHn3ehDTl2eVc7pvA==
+
+"@sentry/utils@7.94.1":
+  version "7.94.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.94.1.tgz#1164934cf6e2277fb404744b27de38a04310895d"
+  integrity sha512-gQ2EaMpUU1gGH3S+iqpog9gkXbCo8tlhGYA9a5FUtEtER3D3OAlp8dGFwClwzWDAwzjdLT1+X55zmEptU1cP/A==
+  dependencies:
+    "@sentry/types" "7.94.1"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"
@@ -765,13 +774,6 @@ acorn@^8.4.1:
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
   integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
 
-agent-base@6:
-  version "6.0.2"
-  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
-  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
-  dependencies:
-    debug "4"
-
 ajv@^6.10.0, ajv@^6.12.4:
   version "6.12.6"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -1227,13 +1229,6 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2:
     shebang-command "^2.0.0"
     which "^2.0.1"
 
-debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
-  version "4.3.4"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
-  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
-  dependencies:
-    ms "2.1.2"
-
 debug@4.3.3:
   version "4.3.3"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
@@ -1241,6 +1236,13 @@ debug@4.3.3:
   dependencies:
     ms "2.1.2"
 
+debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
 debug@^2.2.0:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -2205,14 +2207,6 @@ http2-wrapper@^2.1.10:
     quick-lru "^5.1.1"
     resolve-alpn "^1.2.0"
 
-https-proxy-agent@^5.0.0:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
-  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
-  dependencies:
-    agent-base "6"
-    debug "4"
-
 iconv-lite@0.4.24:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"

From 3c00c12fb65f423445fd58ca7027738c05bed5ba Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 25 Jan 2024 17:38:30 +0100
Subject: [PATCH 202/239] feat: Update to v7.98.0 of JavaScript SDKs (#821)

---
 package.json                                  |  14 +-
 src/main/index.ts                             |   5 +
 src/main/sdk.ts                               |   1 +
 src/renderer/index.ts                         |  18 ++
 src/renderer/sdk.ts                           |   3 +-
 .../other/browser-replay/src/index.html       |   4 +-
 yarn.lock                                     | 189 +++++++++---------
 7 files changed, 130 insertions(+), 104 deletions(-)

diff --git a/package.json b/package.json
index 36274de2..30525cce 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.94.1",
-    "@sentry/core": "7.94.1",
-    "@sentry/node": "7.94.1",
-    "@sentry/types": "7.94.1",
-    "@sentry/utils": "7.94.1",
+    "@sentry/browser": "7.98.0",
+    "@sentry/core": "7.98.0",
+    "@sentry/node": "7.98.0",
+    "@sentry/types": "7.98.0",
+    "@sentry/utils": "7.98.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.94.1",
-    "@sentry-internal/typescript": "7.94.1",
+    "@sentry-internal/eslint-config-sdk": "7.98.0",
+    "@sentry-internal/typescript": "7.98.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/main/index.ts b/src/main/index.ts
index 32d637d6..20ef218a 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -76,7 +76,12 @@ export {
   startInactiveSpan,
   startSpanManual,
   continueTrace,
+  parameterize,
   metrics,
+  functionToStringIntegration,
+  inboundFiltersIntegration,
+  linkedErrorsIntegration,
+  requestDataIntegration,
 } from '@sentry/core';
 export type { SpanStatusType } from '@sentry/core';
 
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index cfd6d2ba..a0e9465c 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -34,6 +34,7 @@ export const defaultIntegrations: Integration[] = [
   new AdditionalContext(),
   new Screenshots(),
   new RendererProfiling(),
+  // eslint-disable-next-line deprecation/deprecation
   ...defaultNodeIntegrations.filter(
     (integration) => integration.name !== 'OnUncaughtException' && integration.name !== 'Context',
   ),
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 7b7000e1..51828d02 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -73,6 +73,12 @@ export {
   startInactiveSpan,
   startSpanManual,
   continueTrace,
+  // eslint-disable-next-line deprecation/deprecation
+  ModuleMetadata,
+  moduleMetadataIntegration,
+  functionToStringIntegration,
+  inboundFiltersIntegration,
+  parameterize,
 } from '@sentry/core';
 export type { SpanStatusType } from '@sentry/core';
 
@@ -94,10 +100,22 @@ export {
   // eslint-disable-next-line deprecation/deprecation
   lastEventId,
   showReportDialog,
+  // eslint-disable-next-line deprecation/deprecation
   Replay,
+  replayIntegration,
+  replayCanvasIntegration,
+  feedbackIntegration,
+  sendFeedback,
+  breadcrumbsIntegration,
+  dedupeIntegration,
+  globalHandlersIntegration,
+  httpContextIntegration,
+  linkedErrorsIntegration,
+  browserApiErrorsIntegration,
 } from '@sentry/browser';
 // eslint-disable-next-line deprecation/deprecation
 export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser';
 
+// eslint-disable-next-line deprecation/deprecation
 export const Integrations = { ...BrowserIntegrations, ...ElectronRendererIntegrations };
 export { init, defaultIntegrations } from './sdk';
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index cf0d5696..015f588a 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -13,6 +13,7 @@ import { MetricsAggregator } from './integrations/metrics-aggregator';
 import { electronRendererStackParser } from './stack-parse';
 import { makeRendererTransport } from './transport';
 
+// eslint-disable-next-line deprecation/deprecation
 export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain(), new MetricsAggregator()];
 
 interface ElectronRendererOptions extends BrowserOptions {
@@ -41,7 +42,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_94_1: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_98_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/test-apps/other/browser-replay/src/index.html b/test/e2e/test-apps/other/browser-replay/src/index.html
index b6e3a5aa..352e174c 100644
--- a/test/e2e/test-apps/other/browser-replay/src/index.html
+++ b/test/e2e/test-apps/other/browser-replay/src/index.html
@@ -5,11 +5,11 @@
   </head>
   <body>
     <script>
-      const { init, Replay } = require('@sentry/electron/renderer');
+      const { init, replayIntegration } = require('@sentry/electron/renderer');
 
       init({
         debug: true,
-        integrations: [new Replay()],
+        integrations: [replayIntegration()],
         replaysSessionSampleRate: 0,
         replaysOnErrorSampleRate: 1,
       });
diff --git a/yarn.lock b/yarn.lock
index 51b68bd3..2ca0744c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.94.1.tgz#87af85dff9a2330101144e26db1e0d0e94a79fdf"
-  integrity sha512-SlYJEFPHeNPfl3EwE9omqIVZ8kQ+khlAMSka0YpM1dKXmzMRQN60iuzDoqf243SJt3HXyORVbghdAAYC5Svqtg==
+"@sentry-internal/eslint-config-sdk@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.98.0.tgz#138327174d9f6727cd38d2da5564a45ca6a82c6c"
+  integrity sha512-dfUmTCAEqFjzFxAk8HT3q3gwgbGbG6K9gwNwFaWJnPuw1I8mvvtsN15r0+VlQWowB+BcbIVHnEH8HNP1XtnBgg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.94.1"
-    "@sentry-internal/typescript" "7.94.1"
+    "@sentry-internal/eslint-plugin-sdk" "7.98.0"
+    "@sentry-internal/typescript" "7.98.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,97 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.94.1.tgz#f2f0ff83d2caf4e2a496a1a5ed58d9c55244eff4"
-  integrity sha512-nn8x1y47vAhINglbwBNZWmVflOHgkFcnOfKeEWSGTZ35QPuO6cD+S6Kc62S5o3wA1hgQHOII+b1Hl7w9NtrtMg==
+"@sentry-internal/eslint-plugin-sdk@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.98.0.tgz#64dc7c809a50d4c1ca0a4169a8616b54398c8518"
+  integrity sha512-EGWacj/Y0z4w2dlfpRmjiKfJV3Ap+bHGPeMB0ui/rMAGwLAn97hF4wBNeSEEFBuFGisD+TztelfqZkmV3LQNbA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.94.1.tgz#332212255568b1b18c08814bb7f8d37187e1e6c0"
-  integrity sha512-NlJn/TEX1MOPfY4bb6FU0Equ6YuaewZ+lIAqYt3HuEoYI7nYApeRGaPuVLkkezN0cmI7oU/+pJ7v83PtYXCFZw==
-  dependencies:
-    "@sentry/core" "7.94.1"
-    "@sentry/types" "7.94.1"
-    "@sentry/utils" "7.94.1"
-
-"@sentry-internal/replay-canvas@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.94.1.tgz#fdf9743c3051d468ae7c42ecf534beb803204154"
-  integrity sha512-kCFxdIJTbo2z8wnAQ3IqNVI8y2lSOtaSSZeBgeqiertro8Pe/DS8AXUnhXnAQkluM2i2koA+AgUo6/4bUeZXuQ==
-  dependencies:
-    "@sentry/core" "7.94.1"
-    "@sentry/replay" "7.94.1"
-    "@sentry/types" "7.94.1"
-
-"@sentry-internal/tracing@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.94.1.tgz#27909da03c1541a83002cab655814ec208242b9e"
-  integrity sha512-znxCdrz7tPXm9Bwoe46PW72Zr0Iv7bXT6+b2LNg5fxWiCQVBbQFrMuVvtXEmHxeRRJVEgTh/4TdulB7wrtQIUQ==
-  dependencies:
-    "@sentry/core" "7.94.1"
-    "@sentry/types" "7.94.1"
-    "@sentry/utils" "7.94.1"
-
-"@sentry-internal/typescript@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.94.1.tgz#1dd9100c6f253a06143d1b369898e993432a1619"
-  integrity sha512-hgPK7YOmVhJXCfkDwHt3KPDS54jA/DLV4zEo9xuhDtb6YpQIfMY0F7ufsxI2i3JFWiyNmeuWaHzgOt2Jh9jRtQ==
-
-"@sentry/browser@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.94.1.tgz#d9a4a1c00138bf799e8559fd1df3eff2fa12155b"
-  integrity sha512-IUR8B/AEPEzLijZ4Uo5qJsgmIBnCudBqAWd3zAiuk3TWYYOQUEvleddFxffN3n6pFhGx3ArksB+AIQBruttLGA==
-  dependencies:
-    "@sentry-internal/feedback" "7.94.1"
-    "@sentry-internal/replay-canvas" "7.94.1"
-    "@sentry-internal/tracing" "7.94.1"
-    "@sentry/core" "7.94.1"
-    "@sentry/replay" "7.94.1"
-    "@sentry/types" "7.94.1"
-    "@sentry/utils" "7.94.1"
-
-"@sentry/core@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.94.1.tgz#3696cd78b2196ac27fda5bcfb2338f46241a3ff8"
-  integrity sha512-4sjiMnkbGpv9O98YHVZe7fHNwwdYl+zLoCOoEOadtrJ1EYYvnK/MSixN2HJF7g/0s22xd4xY958QyNIRVR+Iiw==
-  dependencies:
-    "@sentry/types" "7.94.1"
-    "@sentry/utils" "7.94.1"
-
-"@sentry/node@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.94.1.tgz#3e123e546330d89e71004f9f5cad1f9ba7581598"
-  integrity sha512-30nyrfVbY1vNoWg5ptGW+soykU532VvKLuXiKty3SKEXjp5bv23JrCcVtuwp9KrW4josHOJbxZUqeNni85YplQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.94.1"
-    "@sentry/core" "7.94.1"
-    "@sentry/types" "7.94.1"
-    "@sentry/utils" "7.94.1"
-
-"@sentry/replay@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.94.1.tgz#cba88d4de453c90aa21db3fd3cb7e66e0ecad0a1"
-  integrity sha512-4wf3CZ1LR2Neh9IiZD0rY8AORS5Dc5HlKfMug026f8KM2aeoDyneM2JFBnPT/ulRnbD2gNciV+kdZiRd5K5jiw==
-  dependencies:
-    "@sentry-internal/tracing" "7.94.1"
-    "@sentry/core" "7.94.1"
-    "@sentry/types" "7.94.1"
-    "@sentry/utils" "7.94.1"
-
-"@sentry/types@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.94.1.tgz#97b653a6e73078fc82a2c9d2129e22c7ae1ee248"
-  integrity sha512-A7CdEXFSgGyWv2BT2p9cAvJfb+dypvOtsY8ZvZvdPLUa7kqCV7ndhURUqKjvMBzsL2GParHn3ehDTl2eVc7pvA==
-
-"@sentry/utils@7.94.1":
-  version "7.94.1"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.94.1.tgz#1164934cf6e2277fb404744b27de38a04310895d"
-  integrity sha512-gQ2EaMpUU1gGH3S+iqpog9gkXbCo8tlhGYA9a5FUtEtER3D3OAlp8dGFwClwzWDAwzjdLT1+X55zmEptU1cP/A==
-  dependencies:
-    "@sentry/types" "7.94.1"
+"@sentry-internal/feedback@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.98.0.tgz#2dabbdc060dca49e79536ae99a9bd55f9c6f806f"
+  integrity sha512-t/mATvwkLcQLKRlx8SO5vlUjaadF6sT3lfR0PdWYyBy8qglbMTHDW4KP6JKh1gdzTVQGnwMByy+/4h9gy4AVzw==
+  dependencies:
+    "@sentry/core" "7.98.0"
+    "@sentry/types" "7.98.0"
+    "@sentry/utils" "7.98.0"
+
+"@sentry-internal/replay-canvas@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.98.0.tgz#108160c49f714a6021368fd60e08b7291fe44450"
+  integrity sha512-vAR6KIycyazaY9HwxG5UONrPTe8jeKtZr6k04svPC8OvcoI0xF+l1jMEYcarffuzKpZlPfssYb5ChHtKuXCB+Q==
+  dependencies:
+    "@sentry/core" "7.98.0"
+    "@sentry/replay" "7.98.0"
+    "@sentry/types" "7.98.0"
+    "@sentry/utils" "7.98.0"
+
+"@sentry-internal/tracing@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.98.0.tgz#812ef7fce6b64794784f3279c66bc6b5cfd29d7f"
+  integrity sha512-FnhD2uMLIAJvv4XsYPv3qsTTtxrImyLxiZacudJyaWFhxoeVQ8bKKbWJ/Ar68FAwqTtjXMeY5evnEBbRMcQlaA==
+  dependencies:
+    "@sentry/core" "7.98.0"
+    "@sentry/types" "7.98.0"
+    "@sentry/utils" "7.98.0"
+
+"@sentry-internal/typescript@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.98.0.tgz#c1032a0563b26cc136a65f9131692004ae1e255d"
+  integrity sha512-7tBQTLcNAPo86Xz2DUWLqjGCo2LjXwGOUGozb7RRTUH5jIVTSzPohkZbsWUkefqHdnCVt1fz9coTig8/p3r9eQ==
+
+"@sentry/browser@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.98.0.tgz#f249e6e38351de4cea1142f498e1169006e5dd76"
+  integrity sha512-/MzTS31N2iM6Qwyh4PSpHihgmkVD5xdfE5qi1mTlwQZz5Yz8t7MdMriX8bEDPlLB8sNxl7+D6/+KUJO8akX0nQ==
+  dependencies:
+    "@sentry-internal/feedback" "7.98.0"
+    "@sentry-internal/replay-canvas" "7.98.0"
+    "@sentry-internal/tracing" "7.98.0"
+    "@sentry/core" "7.98.0"
+    "@sentry/replay" "7.98.0"
+    "@sentry/types" "7.98.0"
+    "@sentry/utils" "7.98.0"
+
+"@sentry/core@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.98.0.tgz#e4f5353bc3986e510b8dd2507355787440d6e25d"
+  integrity sha512-baRUcpCNGyk7cApQHMfqEZJkXdvAKK+z/dVWiMqWc5T5uhzMnPE8/gjP1JZsMtJSQ8g5nHimBdI5TwOyZtxPaA==
+  dependencies:
+    "@sentry/types" "7.98.0"
+    "@sentry/utils" "7.98.0"
+
+"@sentry/node@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.98.0.tgz#49d0a46e72f4e6116b4929d033322951e5a7e88b"
+  integrity sha512-9cHW217DnU9wC4iR+QxmY3q59N1Touh23hPMDtpMRmbRHSgrmLMoHTVPhK9zHsXRs0mUeidmMqY1ubAWauQByw==
+  dependencies:
+    "@sentry-internal/tracing" "7.98.0"
+    "@sentry/core" "7.98.0"
+    "@sentry/types" "7.98.0"
+    "@sentry/utils" "7.98.0"
+
+"@sentry/replay@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.98.0.tgz#21ba96d501260c1a33bc1af445f5cfbe02d0ba30"
+  integrity sha512-CQabv/3KnpMkpc2TzIquPu5krpjeMRAaDIO0OpTj5SQeH2RqSq3fVWNZkHa8tLsADxcfLFINxqOg2jd1NxvwxA==
+  dependencies:
+    "@sentry-internal/tracing" "7.98.0"
+    "@sentry/core" "7.98.0"
+    "@sentry/types" "7.98.0"
+    "@sentry/utils" "7.98.0"
+
+"@sentry/types@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.98.0.tgz#6a88bf60679aea88ac6cba4d1517958726c2bafb"
+  integrity sha512-pc034ziM0VTETue4bfBcBqTWGy4w0okidtoZJjGVrYAfE95ObZnUGVj/XYIQ3FeCYWIa7NFN2MvdsCS0buwivQ==
+
+"@sentry/utils@7.98.0":
+  version "7.98.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.98.0.tgz#54355a197f7f71a6d17354a3d043022df402b502"
+  integrity sha512-0/LY+kpHxItVRY0xPDXPXVsKRb95cXsGSQf8sVMtfSjz++0bLL1U4k7PFz1c5s2/Vk0B8hS6duRrgMv6dMIZDw==
+  dependencies:
+    "@sentry/types" "7.98.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 756f519a27c805bcf69412def54d9e740ca89c65 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 15 Feb 2024 13:34:32 -0400
Subject: [PATCH 203/239] feat: Update JavaScript SDKs to v7.101.0 (#826)

---
 package.json                                  |  14 +-
 src/index.ts                                  |   1 +
 src/main/index.ts                             |   1 +
 src/renderer/index.ts                         |   5 +
 src/renderer/sdk.ts                           |   2 +-
 .../other/browser-profiling/src/index.html    |   4 +-
 .../other/browser-tracing/src/index.html      |   4 +-
 test/unit/net.test.ts                         |   1 +
 yarn.lock                                     | 190 +++++++++---------
 9 files changed, 115 insertions(+), 107 deletions(-)

diff --git a/package.json b/package.json
index 30525cce..203bab9f 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.98.0",
-    "@sentry/core": "7.98.0",
-    "@sentry/node": "7.98.0",
-    "@sentry/types": "7.98.0",
-    "@sentry/utils": "7.98.0",
+    "@sentry/browser": "7.101.0",
+    "@sentry/core": "7.101.0",
+    "@sentry/node": "7.101.0",
+    "@sentry/types": "7.101.0",
+    "@sentry/utils": "7.101.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.98.0",
-    "@sentry-internal/typescript": "7.98.0",
+    "@sentry-internal/eslint-config-sdk": "7.101.0",
+    "@sentry-internal/typescript": "7.101.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/index.ts b/src/index.ts
index aef5a7f1..4abdc545 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -63,6 +63,7 @@ export {
   setTag,
   setTags,
   setUser,
+  // eslint-disable-next-line deprecation/deprecation
   spanStatusfromHttpCode,
   // eslint-disable-next-line deprecation/deprecation
   trace,
diff --git a/src/main/index.ts b/src/main/index.ts
index 20ef218a..1be22eb7 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -62,6 +62,7 @@ export {
   setTag,
   setTags,
   setUser,
+  // eslint-disable-next-line deprecation/deprecation
   spanStatusfromHttpCode,
   // eslint-disable-next-line deprecation/deprecation
   trace,
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 51828d02..6c309fdf 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -59,6 +59,7 @@ export {
   setTag,
   setTags,
   setUser,
+  // eslint-disable-next-line deprecation/deprecation
   spanStatusfromHttpCode,
   // eslint-disable-next-line deprecation/deprecation
   trace,
@@ -95,7 +96,9 @@ export const metrics = {
 export {
   addTracingExtensions,
   BrowserClient,
+  // eslint-disable-next-line deprecation/deprecation
   BrowserTracing,
+  // eslint-disable-next-line deprecation/deprecation
   BrowserProfilingIntegration,
   // eslint-disable-next-line deprecation/deprecation
   lastEventId,
@@ -112,6 +115,8 @@ export {
   httpContextIntegration,
   linkedErrorsIntegration,
   browserApiErrorsIntegration,
+  browserTracingIntegration,
+  browserProfilingIntegration,
 } from '@sentry/browser';
 // eslint-disable-next-line deprecation/deprecation
 export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser';
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 015f588a..fb753a30 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -42,7 +42,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_98_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_101_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/test/e2e/test-apps/other/browser-profiling/src/index.html b/test/e2e/test-apps/other/browser-profiling/src/index.html
index 4b296c44..e4c0c2cb 100644
--- a/test/e2e/test-apps/other/browser-profiling/src/index.html
+++ b/test/e2e/test-apps/other/browser-profiling/src/index.html
@@ -9,7 +9,7 @@
       const {
         addTracingExtensions,
         init,
-        BrowserProfilingIntegration,
+        browserProfilingIntegration,
         startSpan,
       } = require('@sentry/electron/renderer');
 
@@ -17,7 +17,7 @@
 
       init({
         debug: true,
-        integrations: [new BrowserProfilingIntegration()],
+        integrations: [browserProfilingIntegration()],
         tracesSampleRate: 1,
         profilesSampleRate: 1,
       });
diff --git a/test/e2e/test-apps/other/browser-tracing/src/index.html b/test/e2e/test-apps/other/browser-tracing/src/index.html
index 4a2e6477..b3e0fb75 100644
--- a/test/e2e/test-apps/other/browser-tracing/src/index.html
+++ b/test/e2e/test-apps/other/browser-tracing/src/index.html
@@ -5,11 +5,11 @@
   </head>
   <body>
     <script>
-      const { init, BrowserTracing } = require('@sentry/electron/renderer');
+      const { init, browserTracingIntegration } = require('@sentry/electron/renderer');
 
       init({
         debug: true,
-        integrations: [new BrowserTracing()],
+        integrations: [browserTracingIntegration()],
         tracesSampleRate: 1,
       });
     </script>
diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts
index 7be521dc..f7a293a7 100644
--- a/test/unit/net.test.ts
+++ b/test/unit/net.test.ts
@@ -55,6 +55,7 @@ function mockAsyncContextStrategy(getHub: () => Hub): void {
 }
 
 function createHubOnScope(customOptions: Partial<ClientOptions> = {}): Hub {
+  // eslint-disable-next-line deprecation/deprecation
   const hub = new Hub();
   mockAsyncContextStrategy(() => hub);
 
diff --git a/yarn.lock b/yarn.lock
index 2ca0744c..a4d8f1f5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.98.0.tgz#138327174d9f6727cd38d2da5564a45ca6a82c6c"
-  integrity sha512-dfUmTCAEqFjzFxAk8HT3q3gwgbGbG6K9gwNwFaWJnPuw1I8mvvtsN15r0+VlQWowB+BcbIVHnEH8HNP1XtnBgg==
+"@sentry-internal/eslint-config-sdk@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.101.0.tgz#cd9edca823f1d4b8cbb730ea7a7a942b043f2037"
+  integrity sha512-g3D6so/T3Hn3Wq8EvohhrNjsGxKSzvIoLAMjdWuEcK0k7sC0ZWh887jU9jiGDzhh74Y78AR8frlqy8qk7wlicA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.98.0"
-    "@sentry-internal/typescript" "7.98.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.101.0"
+    "@sentry-internal/typescript" "7.101.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.98.0.tgz#64dc7c809a50d4c1ca0a4169a8616b54398c8518"
-  integrity sha512-EGWacj/Y0z4w2dlfpRmjiKfJV3Ap+bHGPeMB0ui/rMAGwLAn97hF4wBNeSEEFBuFGisD+TztelfqZkmV3LQNbA==
+"@sentry-internal/eslint-plugin-sdk@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.101.0.tgz#fa8edbb7a214e6c87244f70b6e56f48a07bd025f"
+  integrity sha512-LesYGx/gKVPpAR80u6yDn10O5beUoRpExmVRoe2a4kOQaAxaU9Gj9gTP2ZtosuUhGfrKGXN/ljxDlFZiZkevoA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.98.0.tgz#2dabbdc060dca49e79536ae99a9bd55f9c6f806f"
-  integrity sha512-t/mATvwkLcQLKRlx8SO5vlUjaadF6sT3lfR0PdWYyBy8qglbMTHDW4KP6JKh1gdzTVQGnwMByy+/4h9gy4AVzw==
-  dependencies:
-    "@sentry/core" "7.98.0"
-    "@sentry/types" "7.98.0"
-    "@sentry/utils" "7.98.0"
-
-"@sentry-internal/replay-canvas@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.98.0.tgz#108160c49f714a6021368fd60e08b7291fe44450"
-  integrity sha512-vAR6KIycyazaY9HwxG5UONrPTe8jeKtZr6k04svPC8OvcoI0xF+l1jMEYcarffuzKpZlPfssYb5ChHtKuXCB+Q==
-  dependencies:
-    "@sentry/core" "7.98.0"
-    "@sentry/replay" "7.98.0"
-    "@sentry/types" "7.98.0"
-    "@sentry/utils" "7.98.0"
-
-"@sentry-internal/tracing@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.98.0.tgz#812ef7fce6b64794784f3279c66bc6b5cfd29d7f"
-  integrity sha512-FnhD2uMLIAJvv4XsYPv3qsTTtxrImyLxiZacudJyaWFhxoeVQ8bKKbWJ/Ar68FAwqTtjXMeY5evnEBbRMcQlaA==
-  dependencies:
-    "@sentry/core" "7.98.0"
-    "@sentry/types" "7.98.0"
-    "@sentry/utils" "7.98.0"
-
-"@sentry-internal/typescript@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.98.0.tgz#c1032a0563b26cc136a65f9131692004ae1e255d"
-  integrity sha512-7tBQTLcNAPo86Xz2DUWLqjGCo2LjXwGOUGozb7RRTUH5jIVTSzPohkZbsWUkefqHdnCVt1fz9coTig8/p3r9eQ==
-
-"@sentry/browser@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.98.0.tgz#f249e6e38351de4cea1142f498e1169006e5dd76"
-  integrity sha512-/MzTS31N2iM6Qwyh4PSpHihgmkVD5xdfE5qi1mTlwQZz5Yz8t7MdMriX8bEDPlLB8sNxl7+D6/+KUJO8akX0nQ==
-  dependencies:
-    "@sentry-internal/feedback" "7.98.0"
-    "@sentry-internal/replay-canvas" "7.98.0"
-    "@sentry-internal/tracing" "7.98.0"
-    "@sentry/core" "7.98.0"
-    "@sentry/replay" "7.98.0"
-    "@sentry/types" "7.98.0"
-    "@sentry/utils" "7.98.0"
-
-"@sentry/core@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.98.0.tgz#e4f5353bc3986e510b8dd2507355787440d6e25d"
-  integrity sha512-baRUcpCNGyk7cApQHMfqEZJkXdvAKK+z/dVWiMqWc5T5uhzMnPE8/gjP1JZsMtJSQ8g5nHimBdI5TwOyZtxPaA==
-  dependencies:
-    "@sentry/types" "7.98.0"
-    "@sentry/utils" "7.98.0"
-
-"@sentry/node@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.98.0.tgz#49d0a46e72f4e6116b4929d033322951e5a7e88b"
-  integrity sha512-9cHW217DnU9wC4iR+QxmY3q59N1Touh23hPMDtpMRmbRHSgrmLMoHTVPhK9zHsXRs0mUeidmMqY1ubAWauQByw==
-  dependencies:
-    "@sentry-internal/tracing" "7.98.0"
-    "@sentry/core" "7.98.0"
-    "@sentry/types" "7.98.0"
-    "@sentry/utils" "7.98.0"
-
-"@sentry/replay@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.98.0.tgz#21ba96d501260c1a33bc1af445f5cfbe02d0ba30"
-  integrity sha512-CQabv/3KnpMkpc2TzIquPu5krpjeMRAaDIO0OpTj5SQeH2RqSq3fVWNZkHa8tLsADxcfLFINxqOg2jd1NxvwxA==
-  dependencies:
-    "@sentry-internal/tracing" "7.98.0"
-    "@sentry/core" "7.98.0"
-    "@sentry/types" "7.98.0"
-    "@sentry/utils" "7.98.0"
-
-"@sentry/types@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.98.0.tgz#6a88bf60679aea88ac6cba4d1517958726c2bafb"
-  integrity sha512-pc034ziM0VTETue4bfBcBqTWGy4w0okidtoZJjGVrYAfE95ObZnUGVj/XYIQ3FeCYWIa7NFN2MvdsCS0buwivQ==
-
-"@sentry/utils@7.98.0":
-  version "7.98.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.98.0.tgz#54355a197f7f71a6d17354a3d043022df402b502"
-  integrity sha512-0/LY+kpHxItVRY0xPDXPXVsKRb95cXsGSQf8sVMtfSjz++0bLL1U4k7PFz1c5s2/Vk0B8hS6duRrgMv6dMIZDw==
-  dependencies:
-    "@sentry/types" "7.98.0"
+"@sentry-internal/feedback@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.101.0.tgz#cce033c80c498212a5b9a9540ff3ab8297eefbe2"
+  integrity sha512-uQBMYhZp/qkBEA/GXRMm1OfSkRkZojxBrCrFmzkWhJzXT+YbL57/M1uCcwkKmorKlg393Soh7MLULInwmcwWkA==
+  dependencies:
+    "@sentry/core" "7.101.0"
+    "@sentry/types" "7.101.0"
+    "@sentry/utils" "7.101.0"
+
+"@sentry-internal/replay-canvas@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.101.0.tgz#0e32e1bebd4d125126e481c0df5f7186edeadbf4"
+  integrity sha512-fiz4kPpz/j6ZaD+vOcUXuO1HqD49djs4QwyTsRwCCi77EKZOGAaijpqWckDWyZs0dOOnbGGGC5x3o+CfTJcjKA==
+  dependencies:
+    "@sentry/core" "7.101.0"
+    "@sentry/replay" "7.101.0"
+    "@sentry/types" "7.101.0"
+    "@sentry/utils" "7.101.0"
+
+"@sentry-internal/tracing@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.101.0.tgz#9a92ee722d071449a61c061867aa43a5beefcfb6"
+  integrity sha512-rp9oOLQs6vMuzvAnAHRRCNu5Z0o/ZVRI3WPYedxpdMWKD1Z3G9o+0joP+ZIUqHsamWWYiIgPqXgL9AK6AWjFRg==
+  dependencies:
+    "@sentry/core" "7.101.0"
+    "@sentry/types" "7.101.0"
+    "@sentry/utils" "7.101.0"
+
+"@sentry-internal/typescript@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.101.0.tgz#376705403a17e282f1b9f540b9a1ffd2e4069b36"
+  integrity sha512-Pxpp18Z1H3T+THbRXLYiS327clCh/eOMC85+AQACK/URkU3cC8sQ4Qw27mIAgYLZVjYdGVa7fFrNoPJBI40NLQ==
+
+"@sentry/browser@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.101.0.tgz#53ecfa8a9b0076b95930dff5bbb616e827608606"
+  integrity sha512-wj9YLfS/caR20Yq0hdEjsZHuhnYLU7Ht0SlcJx5MNMnArtmW1k2CWZz3PCqcW/rTZe53npVTe6eMqMccB4aPrQ==
+  dependencies:
+    "@sentry-internal/feedback" "7.101.0"
+    "@sentry-internal/replay-canvas" "7.101.0"
+    "@sentry-internal/tracing" "7.101.0"
+    "@sentry/core" "7.101.0"
+    "@sentry/replay" "7.101.0"
+    "@sentry/types" "7.101.0"
+    "@sentry/utils" "7.101.0"
+
+"@sentry/core@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.101.0.tgz#7ddae48771bad6d3170df0d9807f86c39824dd0a"
+  integrity sha512-dRNrNV5OLGARkOGgxJsVDhA98Pev5G1LVJcud5E83cRg49BCUx2riqEtDP6iIS1nvem6cApkSnLC1kvl/T5/Cw==
+  dependencies:
+    "@sentry/types" "7.101.0"
+    "@sentry/utils" "7.101.0"
+
+"@sentry/node@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.101.0.tgz#acafd4efc81035bb3ffe73ef92f348099c7c5df1"
+  integrity sha512-4z01VAFjRYk7XcajbWPJlhkPN6PBG4nVX8n1dl+OH2OeqTxFxcnmY5zR5v+AtEbNJgg5PMwy8mnnGZRG/wLZgA==
+  dependencies:
+    "@sentry-internal/tracing" "7.101.0"
+    "@sentry/core" "7.101.0"
+    "@sentry/types" "7.101.0"
+    "@sentry/utils" "7.101.0"
+
+"@sentry/replay@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.101.0.tgz#66d199316be3f0fc2ed82a5294f519d58a2c2260"
+  integrity sha512-DSWkGKI/QhCAY+qm4mBnPob3/YsewisskVTak7KMDotJ75H85WFJhVwOMtvaEWIzVezCOItPv7ql51jTwhR3wA==
+  dependencies:
+    "@sentry-internal/tracing" "7.101.0"
+    "@sentry/core" "7.101.0"
+    "@sentry/types" "7.101.0"
+    "@sentry/utils" "7.101.0"
+
+"@sentry/types@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.101.0.tgz#0174a32d6c12def73f438dc2a10bd52cc0ba0c81"
+  integrity sha512-YC+ltO/AlbEyJHjCUYQ4is1HcDT2zSMuLkIAcyQmK7fUdlGT4iR5sfENriY9ZopYHgjPdJKfhI8ohScam7zp/A==
+
+"@sentry/utils@7.101.0":
+  version "7.101.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.101.0.tgz#0eadb9709c9b6fbc03d509acf7fe6a00ab4e6220"
+  integrity sha512-px1NUkCLsD9UKLE4W4DghpyzmAVHgYhskrjRt30ubyUKqlggtHkOXRvS8MjuWowR/i0wF0GuTCbU9StBd7JMrw==
+  dependencies:
+    "@sentry/types" "7.101.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 4d13458c9c109d161eed087141d6c21205c7e2f3 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 15 Feb 2024 13:34:42 -0400
Subject: [PATCH 204/239] meta: Update changelog for v4.18.0 release (#827)

---
 CHANGELOG.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index d0968d07..0110034a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## Unreleased
 
+## 4.18.0
+
+- feat: Update from [v7.92.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.92.0) to
+  [v7.101.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.101.0) of JavaScript SDKs (#815, #821, #826)
+
 ## 4.17.0
 
 - feat: Update from [v7.90.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.90.0) to

From 79d53b332e1773fa4df1d4e088f9cd87ee45da38 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Thu, 15 Feb 2024 18:13:39 +0000
Subject: [PATCH 205/239] release: 4.18.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 203bab9f..795316e8 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.17.0",
+  "version": "4.18.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From 3ddf5a72197e57e9f96584ea940df7c7986e5e63 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 15 Feb 2024 14:21:44 -0400
Subject: [PATCH 206/239] feat: Deprecate class based integrations (#822)

---
 src/integrations.ts                           |   1 +
 src/main/index.ts                             |  14 ++
 src/main/integrations/additional-context.ts   |  19 +-
 .../integrations/browser-window-session.ts    |  20 +-
 src/main/integrations/child-process.ts        |  21 +-
 src/main/integrations/electron-breadcrumbs.ts | 187 +++++++++---------
 src/main/integrations/electron-minidump.ts    |  19 +-
 src/main/integrations/index.ts                |   1 +
 src/main/integrations/main-context.ts         |  16 +-
 src/main/integrations/main-process-session.ts |  18 +-
 src/main/integrations/net-breadcrumbs.ts      |  21 +-
 src/main/integrations/onuncaughtexception.ts  |  17 +-
 src/main/integrations/preload-injection.ts    |  16 +-
 src/main/integrations/renderer-profiling.ts   |  15 +-
 src/main/integrations/screenshots.ts          |  18 +-
 .../integrations/sentry-minidump/index.ts     |  26 ++-
 src/main/sdk.ts                               |  46 +++--
 src/renderer/index.ts                         |   3 +
 src/renderer/integrations/index.ts            |   1 +
 .../integrations/metrics-aggregator.ts        |   9 +-
 src/renderer/integrations/scope-to-main.ts    |  14 +-
 src/renderer/sdk.ts                           |  12 +-
 .../test-apps/native-electron/gpu/src/main.js |   4 +-
 .../main-custom-release/src/main.js           |   6 +-
 .../native-electron/main/src/main.js          |   6 +-
 .../renderer-custom-release/src/main.js       |   6 +-
 .../native-electron/renderer/src/main.js      |   6 +-
 .../test-apps/other/child-process/src/main.js |   4 +-
 .../src/main.js                               |   6 +-
 .../sessions/abnormal-exit/src/main.js        |   4 +-
 test/e2e/test-apps/sessions/good/src/main.js  |   4 +-
 .../sessions/javascript-error/src/main.js     |   4 +-
 .../src/main.js                               |   6 +-
 .../sessions/native-crash-main/src/main.js    |   4 +-
 .../src/main.js                               |   6 +-
 .../native-crash-renderer/src/main.js         |   4 +-
 .../test-apps/sessions/window-bad/src/main.js |   4 +-
 .../sessions/window-good/src/main.js          |   4 +-
 test/unit/net.test.ts                         |   1 +
 39 files changed, 357 insertions(+), 236 deletions(-)

diff --git a/src/integrations.ts b/src/integrations.ts
index a34446fd..8bc32879 100644
--- a/src/integrations.ts
+++ b/src/integrations.ts
@@ -1,3 +1,4 @@
+/* eslint-disable deprecation/deprecation */
 import { Integration } from '@sentry/types';
 import { dynamicRequire } from '@sentry/utils';
 
diff --git a/src/main/index.ts b/src/main/index.ts
index 1be22eb7..9c8b9ae6 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -86,6 +86,20 @@ export {
 } from '@sentry/core';
 export type { SpanStatusType } from '@sentry/core';
 
+export { electronBreadcrumbsIntegration } from './integrations/electron-breadcrumbs';
+export { onUncaughtExceptionIntegration } from './integrations/onuncaughtexception';
+export { mainContextIntegration } from './integrations/main-context';
+export { sentryMinidumpIntegration } from './integrations/sentry-minidump';
+export { electronMinidumpIntegration } from './integrations/electron-minidump';
+export { preloadInjectionIntegration } from './integrations/preload-injection';
+export { mainProcessSessionIntegration } from './integrations/main-process-session';
+export { browserWindowSessionIntegration } from './integrations/browser-window-session';
+export { additionalContextIntegration } from './integrations/additional-context';
+export { electronNetIntegration } from './integrations/net-breadcrumbs';
+export { childProcessIntegration } from './integrations/child-process';
+export { screenshotsIntegration } from './integrations/screenshots';
+export { rendererProfileFromIpc } from './integrations/renderer-profiling';
+
 export type { NodeOptions } from '@sentry/node';
 // eslint-disable-next-line deprecation/deprecation
 export { flush, close, NodeClient, lastEventId } from '@sentry/node';
diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts
index 1f65f6e2..505b9d7c 100644
--- a/src/main/integrations/additional-context.ts
+++ b/src/main/integrations/additional-context.ts
@@ -1,5 +1,5 @@
-import { convertIntegrationFnToClass } from '@sentry/core';
-import { DeviceContext, IntegrationFn } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
+import { DeviceContext } from '@sentry/types';
 import { app, screen as electronScreen } from 'electron';
 import { CpuInfo, cpus } from 'os';
 
@@ -22,7 +22,10 @@ const DEFAULT_OPTIONS: AdditionalContextOptions = {
 
 const INTEGRATION_NAME = 'AdditionalContext';
 
-const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContextOptions> = {}) => {
+/**
+ * Adds additional Electron context to events
+ */
+export const additionalContextIntegration = defineIntegration((userOptions: Partial<AdditionalContextOptions> = {}) => {
   const _lazyDeviceContext: DeviceContext = {};
 
   const options = {
@@ -95,8 +98,12 @@ const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContext
       return mergeEvents(event, { contexts: { device } });
     },
   };
-};
+});
 
-/** Adds Electron context to events and normalises paths. */
+/**
+ * Adds additional Electron context to events
+ *
+ * @deprecated Use `additionalContextIntegration()z instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const AdditionalContext = convertIntegrationFnToClass(INTEGRATION_NAME, additionalContext);
+export const AdditionalContext = convertIntegrationFnToClass(INTEGRATION_NAME, additionalContextIntegration);
diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts
index 75778d4e..55721ad4 100644
--- a/src/main/integrations/browser-window-session.ts
+++ b/src/main/integrations/browser-window-session.ts
@@ -1,5 +1,4 @@
-import { convertIntegrationFnToClass } from '@sentry/core';
-import { IntegrationFn } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
 import { app, BrowserWindow } from 'electron';
 
 import { ELECTRON_MAJOR_VERSION } from '../electron-normalize';
@@ -18,7 +17,7 @@ function focusedWindow(): boolean {
   return false;
 }
 
-interface Options {
+export interface Options {
   /**
    * Number of seconds to wait before ending a session after the app loses focus.
    *
@@ -32,7 +31,12 @@ type SessionState = { name: 'active' } | { name: 'inactive' } | { name: 'timeout
 
 const INTEGRATION_NAME = 'BrowserWindowSession';
 
-const browserWindowSession: IntegrationFn = (options: Options = {}) => {
+/**
+ * Tracks sessions as BrowserWindows focus.
+ *
+ * Supports Electron >= v12
+ */
+export const browserWindowSessionIntegration = defineIntegration((options: Options = {}) => {
   if (ELECTRON_MAJOR_VERSION < 12) {
     throw new Error('BrowserWindowSession requires Electron >= v12');
   }
@@ -100,12 +104,14 @@ const browserWindowSession: IntegrationFn = (options: Options = {}) => {
       endSessionOnExit();
     },
   };
-};
+});
 
 /**
- * Tracks sessions as BrowserWindows focused.
+ * Tracks sessions as BrowserWindows focus.
  *
  * Supports Electron >= v12
+ *
+ * @deprecated Use `browserWindowSessionIntegration()` instead
  */
 // eslint-disable-next-line deprecation/deprecation
-export const BrowserWindowSession = convertIntegrationFnToClass(INTEGRATION_NAME, browserWindowSession);
+export const BrowserWindowSession = convertIntegrationFnToClass(INTEGRATION_NAME, browserWindowSessionIntegration);
diff --git a/src/main/integrations/child-process.ts b/src/main/integrations/child-process.ts
index 1545759c..29da73fb 100644
--- a/src/main/integrations/child-process.ts
+++ b/src/main/integrations/child-process.ts
@@ -1,12 +1,12 @@
-import { addBreadcrumb, captureMessage, convertIntegrationFnToClass } from '@sentry/core';
+import { addBreadcrumb, captureMessage, convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { IntegrationFn, SeverityLevel } from '@sentry/types';
+import { SeverityLevel } from '@sentry/types';
 
 import { OrBool } from '../../common/types';
 import { EXIT_REASONS, ExitReason, onChildProcessGone, onRendererProcessGone } from '../electron-normalize';
 import { ElectronMainOptions } from '../sdk';
 
-interface ChildProcessOptions {
+export interface ChildProcessOptions {
   /** Child process events that generate breadcrumbs */
   breadcrumbs: Readonly<ExitReason[]>;
   /** Child process events that generate Sentry events */
@@ -38,7 +38,10 @@ function getMessageAndSeverity(reason: ExitReason, proc?: string): { message: st
 
 const INTEGRATION_NAME = 'ChildProcess';
 
-const childProcess: IntegrationFn = (userOptions: Partial<OrBool<ChildProcessOptions>> = {}) => {
+/**
+ * Adds breadcrumbs for Electron child process events.
+ */
+export const childProcessIntegration = defineIntegration((userOptions: Partial<OrBool<ChildProcessOptions>> = {}) => {
   const { breadcrumbs, events } = userOptions;
 
   const options: ChildProcessOptions = {
@@ -102,8 +105,12 @@ const childProcess: IntegrationFn = (userOptions: Partial<OrBool<ChildProcessOpt
       }
     },
   };
-};
+});
 
-/** Adds breadcrumbs for Electron events. */
+/**
+ * Adds breadcrumbs for Electron child process events.
+ *
+ * @deprecated Use `childProcessIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const ChildProcess = convertIntegrationFnToClass(INTEGRATION_NAME, childProcess);
+export const ChildProcess = convertIntegrationFnToClass(INTEGRATION_NAME, childProcessIntegration);
diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts
index f5ec9361..3d31f96c 100644
--- a/src/main/integrations/electron-breadcrumbs.ts
+++ b/src/main/integrations/electron-breadcrumbs.ts
@@ -1,6 +1,6 @@
-import { addBreadcrumb, convertIntegrationFnToClass } from '@sentry/core';
+import { addBreadcrumb, convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { Breadcrumb, IntegrationFn } from '@sentry/types';
+import { Breadcrumb } from '@sentry/types';
 import { app, autoUpdater, BrowserWindow, powerMonitor, screen, WebContents } from 'electron';
 
 import { onBrowserWindowCreated, onWebContentsCreated, whenAppReady } from '../electron-normalize';
@@ -11,7 +11,7 @@ import { ElectronMainOptions } from '../sdk';
 type EventFunction = (name: string) => boolean;
 type EventTypes = boolean | string[] | EventFunction | undefined;
 
-interface ElectronBreadcrumbsOptions<T> {
+export interface ElectronBreadcrumbsOptions<T> {
   /**
    * app events
    *
@@ -105,97 +105,106 @@ export function normalizeOptions(
 
 const INTEGRATION_NAME = 'ElectronBreadcrumbs';
 
-const electronBreadcrumbs: IntegrationFn = (userOptions: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) => {
-  const options: ElectronBreadcrumbsOptions<EventFunction | false> = {
-    ...DEFAULT_OPTIONS,
-    ...normalizeOptions(userOptions),
-  };
-
-  function patchEventEmitter(
-    emitter: NodeJS.EventEmitter | WebContents | BrowserWindow,
-    category: string,
-    shouldCapture: EventFunction | undefined | false,
-    id?: number | undefined,
-  ): void {
-    const emit = emitter.emit.bind(emitter) as (event: string, ...args: unknown[]) => boolean;
-
-    emitter.emit = (event: string, ...args: unknown[]) => {
-      if (shouldCapture && shouldCapture(event)) {
-        const breadcrumb: Breadcrumb = {
-          category: 'electron',
-          message: `${category}.${event}`,
-          timestamp: new Date().getTime() / 1_000,
-          type: 'ui',
-        };
-
-        if (id) {
-          breadcrumb.data = { ...getRendererProperties(id) };
-
-          if (!options.captureWindowTitles && breadcrumb.data?.title) {
-            delete breadcrumb.data?.title;
-          }
-        }
-
-        addBreadcrumb(breadcrumb);
-      }
-
-      return emit(event, ...args);
+/**
+ * Adds breadcrumbs for Electron events.
+ */
+export const electronBreadcrumbsIntegration = defineIntegration(
+  (userOptions: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) => {
+    const options: ElectronBreadcrumbsOptions<EventFunction | false> = {
+      ...DEFAULT_OPTIONS,
+      ...normalizeOptions(userOptions),
     };
-  }
-
-  return {
-    name: INTEGRATION_NAME,
-    setupOnce() {
-      // noop
-    },
-    setup(client: NodeClient) {
-      const clientOptions = client.getOptions() as ElectronMainOptions | undefined;
-
-      trackRendererProperties();
-
-      whenAppReady.then(
-        () => {
-          // We can't access these until app 'ready'
-          if (options.screen) {
-            patchEventEmitter(screen, 'screen', options.screen);
-          }
 
-          if (options.powerMonitor) {
-            patchEventEmitter(powerMonitor, 'powerMonitor', options.powerMonitor);
+    function patchEventEmitter(
+      emitter: NodeJS.EventEmitter | WebContents | BrowserWindow,
+      category: string,
+      shouldCapture: EventFunction | undefined | false,
+      id?: number | undefined,
+    ): void {
+      const emit = emitter.emit.bind(emitter) as (event: string, ...args: unknown[]) => boolean;
+
+      emitter.emit = (event: string, ...args: unknown[]) => {
+        if (shouldCapture && shouldCapture(event)) {
+          const breadcrumb: Breadcrumb = {
+            category: 'electron',
+            message: `${category}.${event}`,
+            timestamp: new Date().getTime() / 1_000,
+            type: 'ui',
+          };
+
+          if (id) {
+            breadcrumb.data = { ...getRendererProperties(id) };
+
+            if (!options.captureWindowTitles && breadcrumb.data?.title) {
+              delete breadcrumb.data?.title;
+            }
           }
-        },
-        () => {
-          // ignore
-        },
-      );
-
-      if (options.app) {
-        patchEventEmitter(app, 'app', options.app);
-      }
 
-      if (options.autoUpdater) {
-        patchEventEmitter(autoUpdater, 'autoUpdater', options.autoUpdater);
-      }
+          addBreadcrumb(breadcrumb);
+        }
 
-      if (options.browserWindow) {
-        onBrowserWindowCreated((window) => {
-          const id = window.webContents.id;
-          const windowName = clientOptions?.getRendererName?.(window.webContents) || 'window';
-          patchEventEmitter(window, windowName, options.browserWindow, id);
-        });
-      }
+        return emit(event, ...args);
+      };
+    }
 
-      if (options.webContents) {
-        onWebContentsCreated((contents) => {
-          const id = contents.id;
-          const webContentsName = clientOptions?.getRendererName?.(contents) || 'renderer';
-          patchEventEmitter(contents, webContentsName, options.webContents, id);
-        });
-      }
-    },
-  };
-};
+    return {
+      name: INTEGRATION_NAME,
+      setupOnce() {
+        // noop
+      },
+      setup(client: NodeClient) {
+        const clientOptions = client.getOptions() as ElectronMainOptions | undefined;
+
+        trackRendererProperties();
+
+        whenAppReady.then(
+          () => {
+            // We can't access these until app 'ready'
+            if (options.screen) {
+              patchEventEmitter(screen, 'screen', options.screen);
+            }
+
+            if (options.powerMonitor) {
+              patchEventEmitter(powerMonitor, 'powerMonitor', options.powerMonitor);
+            }
+          },
+          () => {
+            // ignore
+          },
+        );
+
+        if (options.app) {
+          patchEventEmitter(app, 'app', options.app);
+        }
+
+        if (options.autoUpdater) {
+          patchEventEmitter(autoUpdater, 'autoUpdater', options.autoUpdater);
+        }
+
+        if (options.browserWindow) {
+          onBrowserWindowCreated((window) => {
+            const id = window.webContents.id;
+            const windowName = clientOptions?.getRendererName?.(window.webContents) || 'window';
+            patchEventEmitter(window, windowName, options.browserWindow, id);
+          });
+        }
 
-/** Adds breadcrumbs for Electron events. */
+        if (options.webContents) {
+          onWebContentsCreated((contents) => {
+            const id = contents.id;
+            const webContentsName = clientOptions?.getRendererName?.(contents) || 'renderer';
+            patchEventEmitter(contents, webContentsName, options.webContents, id);
+          });
+        }
+      },
+    };
+  },
+);
+
+/**
+ * Adds breadcrumbs for Electron events.
+ *
+ * @deprecated Use `electronBreadcrumbsIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const ElectronBreadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, electronBreadcrumbs);
+export const ElectronBreadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, electronBreadcrumbsIntegration);
diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts
index e0a5f834..169cb731 100644
--- a/src/main/integrations/electron-minidump.ts
+++ b/src/main/integrations/electron-minidump.ts
@@ -1,6 +1,6 @@
-import { applyScopeDataToEvent, convertIntegrationFnToClass, getCurrentScope } from '@sentry/core';
+import { applyScopeDataToEvent, convertIntegrationFnToClass, defineIntegration, getCurrentScope } from '@sentry/core';
 import { NodeClient, NodeOptions } from '@sentry/node';
-import { Event, IntegrationFn, ScopeData } from '@sentry/types';
+import { Event, ScopeData } from '@sentry/types';
 import { logger, makeDsn, SentryError, uuid4 } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
@@ -95,7 +95,10 @@ export function minidumpUrlFromDsn(dsn: string): string | undefined {
 
 const INTEGRATION_NAME = 'ElectronMinidump';
 
-const electronMinidump: IntegrationFn = () => {
+/**
+ * Sends minidumps via the Electron built-in uploader.
+ */
+export const electronMinidumpIntegration = defineIntegration(() => {
   /** Counter used to ensure no race condition when updating extra params */
   let updateEpoch = 0;
   let customRelease: string | undefined;
@@ -212,8 +215,12 @@ const electronMinidump: IntegrationFn = () => {
       }, logger.error);
     },
   };
-};
+});
 
-/** Sends minidumps via the Electron built-in uploader. */
+/**
+ * Sends minidumps via the Electron built-in uploader.
+ *
+ * @deprecated Use `electronMinidumpIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const ElectronMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, electronMinidump);
+export const ElectronMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, electronMinidumpIntegration);
diff --git a/src/main/integrations/index.ts b/src/main/integrations/index.ts
index c21649fe..0b0c61f6 100644
--- a/src/main/integrations/index.ts
+++ b/src/main/integrations/index.ts
@@ -1,3 +1,4 @@
+/* eslint-disable deprecation/deprecation */
 export { ElectronBreadcrumbs } from './electron-breadcrumbs';
 export { OnUncaughtException } from './onuncaughtexception';
 export { MainContext } from './main-context';
diff --git a/src/main/integrations/main-context.ts b/src/main/integrations/main-context.ts
index f4c44c22..12562d99 100644
--- a/src/main/integrations/main-context.ts
+++ b/src/main/integrations/main-context.ts
@@ -1,5 +1,4 @@
-import { convertIntegrationFnToClass } from '@sentry/core';
-import { IntegrationFn } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
 import { app } from 'electron';
 
 import { mergeEvents, normalizeEvent } from '../../common';
@@ -7,7 +6,8 @@ import { getEventDefaults } from '../context';
 
 const INTEGRATION_NAME = 'MainContext';
 
-const mainContext: IntegrationFn = () => {
+/** Adds Electron context to events and normalises paths. */
+export const mainContextIntegration = defineIntegration(() => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -20,8 +20,12 @@ const mainContext: IntegrationFn = () => {
       return mergeEvents(defaults, normalized);
     },
   };
-};
+});
 
-/** Adds Electron context to events and normalises paths. */
+/**
+ * Adds Electron context to events and normalises paths.
+ *
+ * @deprecated Use `mainContextIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const MainContext = convertIntegrationFnToClass(INTEGRATION_NAME, mainContext);
+export const MainContext = convertIntegrationFnToClass(INTEGRATION_NAME, mainContextIntegration);
diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts
index ca038284..00a98e88 100644
--- a/src/main/integrations/main-process-session.ts
+++ b/src/main/integrations/main-process-session.ts
@@ -1,9 +1,8 @@
-import { convertIntegrationFnToClass } from '@sentry/core';
-import { IntegrationFn } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
 
 import { endSessionOnExit, startSession } from '../sessions';
 
-interface Options {
+export interface Options {
   /**
    * Whether sessions should be sent immediately on creation
    *
@@ -14,7 +13,8 @@ interface Options {
 
 const INTEGRATION_NAME = 'MainProcessSession';
 
-const mainProcessSession: IntegrationFn = (options: Options = {}) => {
+/** Tracks sessions as the main process lifetime. */
+export const mainProcessSessionIntegration = defineIntegration((options: Options = {}) => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -25,8 +25,12 @@ const mainProcessSession: IntegrationFn = (options: Options = {}) => {
       endSessionOnExit();
     },
   };
-};
+});
 
-/** Tracks sessions as the main process lifetime. */
+/**
+ * Tracks sessions as the main process lifetime.
+ *
+ * @deprecated Use `mainProcessSessionIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const MainProcessSession = convertIntegrationFnToClass(INTEGRATION_NAME, mainProcessSession);
+export const MainProcessSession = convertIntegrationFnToClass(INTEGRATION_NAME, mainProcessSessionIntegration);
diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts
index 2c257435..2f470c9e 100644
--- a/src/main/integrations/net-breadcrumbs.ts
+++ b/src/main/integrations/net-breadcrumbs.ts
@@ -2,11 +2,12 @@ import {
   addBreadcrumb,
   /* eslint-disable deprecation/deprecation */
   convertIntegrationFnToClass,
+  defineIntegration,
   getClient,
   getCurrentScope,
   getDynamicSamplingContextFromClient,
 } from '@sentry/core';
-import { DynamicSamplingContext, IntegrationFn, Span, TracePropagationTargets } from '@sentry/types';
+import { DynamicSamplingContext, Span, TracePropagationTargets } from '@sentry/types';
 import {
   dynamicSamplingContextToSentryBaggageHeader,
   fill,
@@ -20,7 +21,7 @@ import * as urlModule from 'url';
 
 type ShouldTraceFn = (method: string, url: string) => boolean;
 
-interface NetOptions {
+export interface NetOptions {
   /**
    * Whether breadcrumbs should be captured for net requests
    *
@@ -109,7 +110,6 @@ type RequestOptions = string | ClientRequestConstructorOptions;
 type RequestMethod = (opt: RequestOptions) => ClientRequest;
 type WrappedRequestMethodFactory = (original: RequestMethod) => RequestMethod;
 
-/** */
 function createWrappedRequestFactory(
   options: NetOptions,
   tracePropagationTargets: TracePropagationTargets | undefined,
@@ -273,7 +273,10 @@ function addRequestBreadcrumb(
 
 const INTEGRATION_NAME = 'Net';
 
-const net: IntegrationFn = (options: NetOptions = {}) => {
+/**
+ * Electron 'net' module integration
+ */
+export const electronNetIntegration = defineIntegration((options: NetOptions = {}) => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -290,8 +293,12 @@ const net: IntegrationFn = (options: NetOptions = {}) => {
       fill(electronNet, 'request', createWrappedRequestFactory(options, clientOptions?.tracePropagationTargets));
     },
   };
-};
+});
 
-/** http module integration */
+/**
+ * Electron 'net' module integration
+ *
+ * @deprecated Use `electronNetIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const Net = convertIntegrationFnToClass(INTEGRATION_NAME, net);
+export const Net = convertIntegrationFnToClass(INTEGRATION_NAME, electronNetIntegration);
diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts
index 8b009dd7..1e125a10 100644
--- a/src/main/integrations/onuncaughtexception.ts
+++ b/src/main/integrations/onuncaughtexception.ts
@@ -1,11 +1,12 @@
-import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core';
+import { convertIntegrationFnToClass, defineIntegration, getCurrentScope } from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { Event, IntegrationFn } from '@sentry/types';
+import { Event } from '@sentry/types';
 import { dialog } from 'electron';
 
 const INTEGRATION_NAME = 'OnUncaughtException';
 
-const onUncaughtException: IntegrationFn = () => {
+/** Capture unhandled errors. */
+export const onUncaughtExceptionIntegration = defineIntegration(() => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -60,8 +61,12 @@ const onUncaughtException: IntegrationFn = () => {
       });
     },
   };
-};
+});
 
-/** Capture unhandled errors. */
+/**
+ * Capture unhandled errors.
+ *
+ * @deprecated Use `onUncaughtExceptionIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const OnUncaughtException = convertIntegrationFnToClass(INTEGRATION_NAME, onUncaughtException);
+export const OnUncaughtException = convertIntegrationFnToClass(INTEGRATION_NAME, onUncaughtExceptionIntegration);
diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts
index bd49f6c1..5c76665c 100644
--- a/src/main/integrations/preload-injection.ts
+++ b/src/main/integrations/preload-injection.ts
@@ -1,5 +1,4 @@
-import { convertIntegrationFnToClass } from '@sentry/core';
-import { IntegrationFn } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
 import { logger } from '@sentry/utils';
 import { app } from 'electron';
 import { existsSync } from 'fs';
@@ -33,7 +32,12 @@ function getPreloadPath(): string | number | undefined {
 
 const INTEGRATION_NAME = 'PreloadInjection';
 
-const preloadInjection: IntegrationFn = () => {
+/**
+ * Injects the preload script into the provided sessions.
+ *
+ * Defaults to injecting into the defaultSession
+ */
+export const preloadInjectionIntegration = defineIntegration(() => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -65,12 +69,14 @@ const preloadInjection: IntegrationFn = () => {
       });
     },
   };
-};
+});
 
 /**
  * Injects the preload script into the provided sessions.
  *
  * Defaults to injecting into the defaultSession
+ *
+ * @deprecated Use `preloadInjectionIntegration()` instead
  */
 // eslint-disable-next-line deprecation/deprecation
-export const PreloadInjection = convertIntegrationFnToClass(INTEGRATION_NAME, preloadInjection);
+export const PreloadInjection = convertIntegrationFnToClass(INTEGRATION_NAME, preloadInjectionIntegration);
diff --git a/src/main/integrations/renderer-profiling.ts b/src/main/integrations/renderer-profiling.ts
index a7825274..67acb85a 100644
--- a/src/main/integrations/renderer-profiling.ts
+++ b/src/main/integrations/renderer-profiling.ts
@@ -1,5 +1,5 @@
-import { convertIntegrationFnToClass } from '@sentry/core';
-import { Event, IntegrationFn, Profile } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
+import { Event, Profile } from '@sentry/types';
 import { forEachEnvelopeItem, LRUMap } from '@sentry/utils';
 import { app } from 'electron';
 
@@ -56,7 +56,10 @@ function addJsProfilingHeader(
 
 const INTEGRATION_NAME = 'RendererProfiling';
 
-const rendererProfiling: IntegrationFn = () => {
+/**
+ * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions
+ */
+export const rendererProfilingIntegration = defineIntegration(() => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -122,10 +125,12 @@ const rendererProfiling: IntegrationFn = () => {
       });
     },
   };
-};
+});
 
 /**
  * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions
+ *
+ * @deprecated Use `rendererProfilingIntegration()` instead
  */
 // eslint-disable-next-line deprecation/deprecation
-export const RendererProfiling = convertIntegrationFnToClass(INTEGRATION_NAME, rendererProfiling);
+export const RendererProfiling = convertIntegrationFnToClass(INTEGRATION_NAME, rendererProfilingIntegration);
diff --git a/src/main/integrations/screenshots.ts b/src/main/integrations/screenshots.ts
index 1011405f..b896256e 100644
--- a/src/main/integrations/screenshots.ts
+++ b/src/main/integrations/screenshots.ts
@@ -1,5 +1,4 @@
-import { convertIntegrationFnToClass } from '@sentry/core';
-import { IntegrationFn } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
 import { logger } from '@sentry/utils';
 import { BrowserWindow } from 'electron';
 
@@ -8,7 +7,10 @@ import { ElectronMainOptions } from '../sdk';
 
 const INTEGRATION_NAME = 'Screenshots';
 
-const screenshots: IntegrationFn = () => {
+/**
+ * Captures and attaches screenshots to events
+ */
+export const screenshotsIntegration = defineIntegration(() => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -49,8 +51,12 @@ const screenshots: IntegrationFn = () => {
       return event;
     },
   };
-};
+});
 
-/** Adds Screenshots to events */
+/**
+ * Adds Screenshots to events
+ *
+ * @deprecated Use `screenshotsIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const Screenshots = convertIntegrationFnToClass(INTEGRATION_NAME, screenshots);
+export const Screenshots = convertIntegrationFnToClass(INTEGRATION_NAME, screenshotsIntegration);
diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 6544de67..2ff036ec 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -1,6 +1,13 @@
-import { applyScopeDataToEvent, captureEvent, convertIntegrationFnToClass, getCurrentScope, Scope } from '@sentry/core';
+import {
+  applyScopeDataToEvent,
+  captureEvent,
+  convertIntegrationFnToClass,
+  defineIntegration,
+  getCurrentScope,
+  Scope,
+} from '@sentry/core';
 import { NodeClient } from '@sentry/node';
-import { Event, IntegrationFn, ScopeData } from '@sentry/types';
+import { Event, ScopeData } from '@sentry/types';
 import { logger, SentryError } from '@sentry/utils';
 import { app, crashReporter } from 'electron';
 
@@ -21,7 +28,10 @@ interface PreviousRun {
 
 const INTEGRATION_NAME = 'SentryMinidump';
 
-const sentryMinidump: IntegrationFn = () => {
+/**
+ * Sends minidumps via the Sentry uploader
+ */
+export const sentryMinidumpIntegration = defineIntegration(() => {
   /** Store to persist context information beyond application crashes. */
   let scopeStore: BufferedWriteStore<PreviousRun> | undefined;
   // We need to store the scope in a variable here so it can be attached to minidumps
@@ -232,8 +242,12 @@ const sentryMinidump: IntegrationFn = () => {
         .catch((error) => logger.error(error));
     },
   };
-};
+});
 
-/** Sends minidumps via the Sentry uploader */
+/**
+ * Sends minidumps via the Sentry uploader
+ *
+ * @deprecated Use `sentryMinidumpIntegration()` instead
+ */
 // eslint-disable-next-line deprecation/deprecation
-export const SentryMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, sentryMinidump);
+export const SentryMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, sentryMinidumpIntegration);
diff --git a/src/main/sdk.ts b/src/main/sdk.ts
index a0e9465c..a05627de 100644
--- a/src/main/sdk.ts
+++ b/src/main/sdk.ts
@@ -6,34 +6,32 @@ import { Integration, Options } from '@sentry/types';
 import { Session, session, WebContents } from 'electron';
 
 import { getDefaultEnvironment, getDefaultReleaseName, getSdkInfo } from './context';
-import {
-  AdditionalContext,
-  ChildProcess,
-  ElectronBreadcrumbs,
-  MainContext,
-  MainProcessSession,
-  Net,
-  OnUncaughtException,
-  PreloadInjection,
-  RendererProfiling,
-  Screenshots,
-  SentryMinidump,
-} from './integrations';
+import { additionalContextIntegration } from './integrations/additional-context';
+import { childProcessIntegration } from './integrations/child-process';
+import { electronBreadcrumbsIntegration } from './integrations/electron-breadcrumbs';
+import { mainContextIntegration } from './integrations/main-context';
+import { mainProcessSessionIntegration } from './integrations/main-process-session';
+import { electronNetIntegration } from './integrations/net-breadcrumbs';
+import { onUncaughtExceptionIntegration } from './integrations/onuncaughtexception';
+import { preloadInjectionIntegration } from './integrations/preload-injection';
+import { rendererProfilingIntegration } from './integrations/renderer-profiling';
+import { screenshotsIntegration } from './integrations/screenshots';
+import { sentryMinidumpIntegration } from './integrations/sentry-minidump';
 import { configureIPC } from './ipc';
 import { defaultStackParser } from './stack-parse';
 import { ElectronOfflineTransportOptions, makeElectronOfflineTransport } from './transports/electron-offline-net';
 
 export const defaultIntegrations: Integration[] = [
-  new SentryMinidump(),
-  new ElectronBreadcrumbs(),
-  new Net(),
-  new MainContext(),
-  new ChildProcess(),
-  new OnUncaughtException(),
-  new PreloadInjection(),
-  new AdditionalContext(),
-  new Screenshots(),
-  new RendererProfiling(),
+  sentryMinidumpIntegration(),
+  electronBreadcrumbsIntegration(),
+  electronNetIntegration(),
+  mainContextIntegration(),
+  childProcessIntegration(),
+  onUncaughtExceptionIntegration(),
+  preloadInjectionIntegration(),
+  additionalContextIntegration(),
+  screenshotsIntegration(),
+  rendererProfilingIntegration(),
   // eslint-disable-next-line deprecation/deprecation
   ...defaultNodeIntegrations.filter(
     (integration) => integration.name !== 'OnUncaughtException' && integration.name !== 'Context',
@@ -118,7 +116,7 @@ export function init(userOptions: ElectronMainOptions): void {
   // Unless autoSessionTracking is specifically disabled, we track sessions as the
   // lifetime of the Electron main process
   if (options.autoSessionTracking !== false) {
-    defaults.push(new MainProcessSession());
+    defaults.push(mainProcessSessionIntegration());
     // We don't want nodejs autoSessionTracking
     options.autoSessionTracking = false;
   }
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 6c309fdf..8e5e1c7f 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -83,6 +83,9 @@ export {
 } from '@sentry/core';
 export type { SpanStatusType } from '@sentry/core';
 
+export { scopeToMainIntegration } from './integrations/scope-to-main';
+export { metricsAggregatorIntegration } from './integrations/metrics-aggregator';
+
 import { metrics as coreMetrics } from '@sentry/core';
 
 import { MetricsAggregator } from './integrations/metrics-aggregator';
diff --git a/src/renderer/integrations/index.ts b/src/renderer/integrations/index.ts
index d8fe8850..a7ef3eeb 100644
--- a/src/renderer/integrations/index.ts
+++ b/src/renderer/integrations/index.ts
@@ -1,3 +1,4 @@
+// eslint-disable-next-line deprecation/deprecation
 export { ScopeToMain } from './scope-to-main';
 // eslint-disable-next-line deprecation/deprecation
 export { EventToMain } from './event-to-main';
diff --git a/src/renderer/integrations/metrics-aggregator.ts b/src/renderer/integrations/metrics-aggregator.ts
index 5dea307e..80af5fb8 100644
--- a/src/renderer/integrations/metrics-aggregator.ts
+++ b/src/renderer/integrations/metrics-aggregator.ts
@@ -6,7 +6,12 @@ import { ElectronRendererMetricsAggregator } from '../metrics';
 
 const INTEGRATION_NAME = 'MetricsAggregator';
 
-const metricsAggregatorIntegration: IntegrationFn = () => {
+/**
+ * Enables Sentry metrics monitoring.
+ *
+ * @experimental This API is experimental and might having breaking changes in the future.
+ */
+export const metricsAggregatorIntegration: IntegrationFn = () => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -22,6 +27,8 @@ const metricsAggregatorIntegration: IntegrationFn = () => {
  * Enables Sentry metrics monitoring.
  *
  * @experimental This API is experimental and might having breaking changes in the future.
+ *
+ * @deprecated Use `metricsAggregatorIntegration()` instead
  */
 // eslint-disable-next-line deprecation/deprecation
 export const MetricsAggregator = convertIntegrationFnToClass(INTEGRATION_NAME, metricsAggregatorIntegration);
diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts
index 8f54d90f..540e4a0f 100644
--- a/src/renderer/integrations/scope-to-main.ts
+++ b/src/renderer/integrations/scope-to-main.ts
@@ -1,12 +1,14 @@
-import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core';
-import { IntegrationFn } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration, getCurrentScope } from '@sentry/core';
 import { normalize } from '@sentry/utils';
 
 import { getIPC } from '../ipc';
 
 const INTEGRATION_NAME = 'ScopeToMain';
 
-const scopeToMain: IntegrationFn = () => {
+/**
+ * Passes scope changes to the main process.
+ */
+export const scopeToMainIntegration = defineIntegration(() => {
   return {
     name: INTEGRATION_NAME,
     setupOnce() {
@@ -25,10 +27,12 @@ const scopeToMain: IntegrationFn = () => {
       }
     },
   };
-};
+});
 
 /**
  * Passes scope changes to the main process.
+ *
+ * @deprecated Use `scopeToMainIntegration()` instead
  */
 // eslint-disable-next-line deprecation/deprecation
-export const ScopeToMain = convertIntegrationFnToClass(INTEGRATION_NAME, scopeToMain);
+export const ScopeToMain = convertIntegrationFnToClass(INTEGRATION_NAME, scopeToMainIntegration);
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index fb753a30..1b52c8fa 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -8,13 +8,17 @@ import { logger } from '@sentry/utils';
 
 import { ensureProcess, RendererProcessAnrOptions } from '../common';
 import { enableAnrRendererMessages } from './anr';
-import { ScopeToMain } from './integrations';
-import { MetricsAggregator } from './integrations/metrics-aggregator';
+import { metricsAggregatorIntegration } from './integrations/metrics-aggregator';
+import { scopeToMainIntegration } from './integrations/scope-to-main';
 import { electronRendererStackParser } from './stack-parse';
 import { makeRendererTransport } from './transport';
 
-// eslint-disable-next-line deprecation/deprecation
-export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain(), new MetricsAggregator()];
+export const defaultIntegrations = [
+  // eslint-disable-next-line deprecation/deprecation
+  ...defaultBrowserIntegrations,
+  scopeToMainIntegration(),
+  metricsAggregatorIntegration(),
+];
 
 interface ElectronRendererOptions extends BrowserOptions {
   /**
diff --git a/test/e2e/test-apps/native-electron/gpu/src/main.js b/test/e2e/test-apps/native-electron/gpu/src/main.js
index 745ce163..55e5870c 100644
--- a/test/e2e/test-apps/native-electron/gpu/src/main.js
+++ b/test/e2e/test-apps/native-electron/gpu/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, electronMinidumpIntegration } = require('@sentry/electron/main');
 
 app.commandLine.appendSwitch('enable-crashpad');
 
@@ -9,7 +9,7 @@ init({
   dsn: '__DSN__',
   debug: true,
   autoSessionTracking: false,
-  integrations: [new Integrations.ElectronMinidump()],
+  integrations: [electronMinidumpIntegration()],
   initialScope: { user: { username: 'some_user' } },
   onFatalError: () => {},
 });
diff --git a/test/e2e/test-apps/native-electron/main-custom-release/src/main.js b/test/e2e/test-apps/native-electron/main-custom-release/src/main.js
index 09948ed3..4ef55135 100644
--- a/test/e2e/test-apps/native-electron/main-custom-release/src/main.js
+++ b/test/e2e/test-apps/native-electron/main-custom-release/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, electronMinidumpIntegration } = require('@sentry/electron/main');
 
 app.commandLine.appendSwitch('enable-crashpad');
 
@@ -10,7 +10,7 @@ init({
   debug: true,
   release: 'custom-name',
   autoSessionTracking: false,
-  integrations: [new Integrations.ElectronMinidump()],
+  integrations: [electronMinidumpIntegration()],
   initialScope: { user: { username: 'some_user' } },
   onFatalError: () => {},
 });
@@ -29,4 +29,4 @@ app.on('ready', () => {
   setTimeout(() => {
     process.crash();
   }, 500);
-});
\ No newline at end of file
+});
diff --git a/test/e2e/test-apps/native-electron/main/src/main.js b/test/e2e/test-apps/native-electron/main/src/main.js
index 57bb6d32..bfc09963 100644
--- a/test/e2e/test-apps/native-electron/main/src/main.js
+++ b/test/e2e/test-apps/native-electron/main/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, electronMinidumpIntegration } = require('@sentry/electron/main');
 
 app.commandLine.appendSwitch('enable-crashpad');
 
@@ -9,7 +9,7 @@ init({
   dsn: '__DSN__',
   debug: true,
   autoSessionTracking: false,
-  integrations: [new Integrations.ElectronMinidump()],
+  integrations: [electronMinidumpIntegration()],
   initialScope: { user: { username: 'some_user' } },
   onFatalError: () => {},
 });
@@ -28,4 +28,4 @@ app.on('ready', () => {
   setTimeout(() => {
     process.crash();
   }, 500);
-});
\ No newline at end of file
+});
diff --git a/test/e2e/test-apps/native-electron/renderer-custom-release/src/main.js b/test/e2e/test-apps/native-electron/renderer-custom-release/src/main.js
index ba060c91..7e3a9ba3 100644
--- a/test/e2e/test-apps/native-electron/renderer-custom-release/src/main.js
+++ b/test/e2e/test-apps/native-electron/renderer-custom-release/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, electronMinidumpIntegration } = require('@sentry/electron/main');
 
 app.commandLine.appendSwitch('enable-crashpad');
 
@@ -10,7 +10,7 @@ init({
   debug: true,
   release: 'custom-name',
   autoSessionTracking: false,
-  integrations: [new Integrations.ElectronMinidump()],
+  integrations: [electronMinidumpIntegration()],
   initialScope: { user: { username: 'some_user' } },
   onFatalError: () => {},
 });
@@ -25,4 +25,4 @@ app.on('ready', () => {
   });
 
   mainWindow.loadFile(path.join(__dirname, 'index.html'));
-});
\ No newline at end of file
+});
diff --git a/test/e2e/test-apps/native-electron/renderer/src/main.js b/test/e2e/test-apps/native-electron/renderer/src/main.js
index 70c42d1a..cc033a1a 100644
--- a/test/e2e/test-apps/native-electron/renderer/src/main.js
+++ b/test/e2e/test-apps/native-electron/renderer/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, electronMinidumpIntegration } = require('@sentry/electron/main');
 
 app.commandLine.appendSwitch('enable-crashpad');
 
@@ -9,7 +9,7 @@ init({
   dsn: '__DSN__',
   debug: true,
   autoSessionTracking: false,
-  integrations: [new Integrations.ElectronMinidump()],
+  integrations: [electronMinidumpIntegration()],
   initialScope: { user: { username: 'some_user' } },
   onFatalError: () => {},
 });
@@ -24,4 +24,4 @@ app.on('ready', () => {
   });
 
   mainWindow.loadFile(path.join(__dirname, 'index.html'));
-});
\ No newline at end of file
+});
diff --git a/test/e2e/test-apps/other/child-process/src/main.js b/test/e2e/test-apps/other/child-process/src/main.js
index 7f2f2504..5f5ba027 100644
--- a/test/e2e/test-apps/other/child-process/src/main.js
+++ b/test/e2e/test-apps/other/child-process/src/main.js
@@ -1,13 +1,13 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, childProcessIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
   autoSessionTracking: false,
-  integrations: [new Integrations.ChildProcess({ events: ['killed'] })],
+  integrations: [childProcessIntegration({ events: ['killed'] })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
index 3004ed38..84e83fcb 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, electronMinidumpIntegration, mainProcessSessionIntegration } = require('@sentry/electron/main');
 
 app.commandLine.appendSwitch('enable-crashpad');
 
@@ -9,8 +9,8 @@ init({
   dsn: '__DSN__',
   debug: true,
   integrations: (defaults) => [
-    new Integrations.ElectronMinidump(),
-    new Integrations.MainProcessSession({ sendOnCreate: true }),
+    electronMinidumpIntegration(),
+    mainProcessSessionIntegration({ sendOnCreate: true }),
     ...defaults,
   ],
   initialScope: { user: { username: 'some_user' } },
diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
index ccb41cd2..dc80109c 100644
--- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
+++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js
@@ -1,12 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, mainProcessSessionIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
+  integrations: [mainProcessSessionIntegration({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/good/src/main.js b/test/e2e/test-apps/sessions/good/src/main.js
index caa82591..3cc3f4be 100644
--- a/test/e2e/test-apps/sessions/good/src/main.js
+++ b/test/e2e/test-apps/sessions/good/src/main.js
@@ -1,12 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, mainProcessSessionIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
+  integrations: [mainProcessSessionIntegration({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/javascript-error/src/main.js b/test/e2e/test-apps/sessions/javascript-error/src/main.js
index caa82591..3cc3f4be 100644
--- a/test/e2e/test-apps/sessions/javascript-error/src/main.js
+++ b/test/e2e/test-apps/sessions/javascript-error/src/main.js
@@ -1,12 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, mainProcessSessionIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
+  integrations: [mainProcessSessionIntegration({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
index 4f168635..ef629501 100644
--- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, mainProcessSessionIntegration, electronMinidumpIntegration } = require('@sentry/electron/main');
 
 app.commandLine.appendSwitch('enable-crashpad');
 
@@ -9,8 +9,8 @@ init({
   dsn: '__DSN__',
   debug: true,
   integrations: (defaults) => [
-    new Integrations.ElectronMinidump(),
-    new Integrations.MainProcessSession({ sendOnCreate: true }),
+    electronMinidumpIntegration(),
+    mainProcessSessionIntegration({ sendOnCreate: true }),
     ...defaults,
   ],
   initialScope: { user: { username: 'some_user' } },
diff --git a/test/e2e/test-apps/sessions/native-crash-main/src/main.js b/test/e2e/test-apps/sessions/native-crash-main/src/main.js
index 3861e739..4039a988 100644
--- a/test/e2e/test-apps/sessions/native-crash-main/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-main/src/main.js
@@ -1,12 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, mainProcessSessionIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
+  integrations: [mainProcessSessionIntegration({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
index 958d8ca5..a7ba20ea 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js
@@ -1,7 +1,7 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, mainProcessSessionIntegration, electronMinidumpIntegration } = require('@sentry/electron/main');
 
 app.commandLine.appendSwitch('enable-crashpad');
 
@@ -9,8 +9,8 @@ init({
   dsn: '__DSN__',
   debug: true,
   integrations: (defaults) => [
-    new Integrations.ElectronMinidump(),
-    new Integrations.MainProcessSession({ sendOnCreate: true }),
+    electronMinidumpIntegration(),
+    mainProcessSessionIntegration({ sendOnCreate: true }),
     ...defaults,
   ],
   initialScope: { user: { username: 'some_user' } },
diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
index 529b0d6d..4d244680 100644
--- a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
+++ b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js
@@ -1,12 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, mainProcessSessionIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })],
+  integrations: [mainProcessSessionIntegration({ sendOnCreate: true })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/window-bad/src/main.js b/test/e2e/test-apps/sessions/window-bad/src/main.js
index 47675838..39c193f1 100644
--- a/test/e2e/test-apps/sessions/window-bad/src/main.js
+++ b/test/e2e/test-apps/sessions/window-bad/src/main.js
@@ -1,12 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, browserWindowSessionIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: [new Integrations.BrowserWindowSession({ backgroundTimeoutSeconds: 1 })],
+  integrations: [browserWindowSessionIntegration({ backgroundTimeoutSeconds: 1 })],
   onFatalError: () => {},
 });
 
diff --git a/test/e2e/test-apps/sessions/window-good/src/main.js b/test/e2e/test-apps/sessions/window-good/src/main.js
index 6e6e5e65..f0b1e5aa 100644
--- a/test/e2e/test-apps/sessions/window-good/src/main.js
+++ b/test/e2e/test-apps/sessions/window-good/src/main.js
@@ -1,12 +1,12 @@
 const path = require('path');
 
 const { app, BrowserWindow } = require('electron');
-const { init, Integrations } = require('@sentry/electron');
+const { init, browserWindowSessionIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
-  integrations: [new Integrations.BrowserWindowSession({ backgroundTimeoutSeconds: 1 })],
+  integrations: [browserWindowSessionIntegration({ backgroundTimeoutSeconds: 1 })],
   onFatalError: () => {},
 });
 
diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts
index f7a293a7..a0777b22 100644
--- a/test/unit/net.test.ts
+++ b/test/unit/net.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable deprecation/deprecation */
 import { expect, should, use } from 'chai';
 import * as http from 'http';
 import chaiAsPromised = require('chai-as-promised');

From 5a31360497238c9acb96c3c40e4d84d26bc2c4aa Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 18 Feb 2024 10:45:51 -0400
Subject: [PATCH 207/239] test: New Electron versions (#829)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index ba77349c..e7655f57 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.4","27.2.1","28.1.2"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.9","27.3.2","28.2.3","29.0.0-beta.12"]

From 58729ae01f951807f2c96013b1aa96666573d595 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 22 Feb 2024 12:13:38 -0400
Subject: [PATCH 208/239] test: New Electron versions (#831)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index e7655f57..6b06ecb0 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.9","27.3.2","28.2.3","29.0.0-beta.12"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.3","28.2.4","29.0.1"]

From 6c03509dcc08028aed3e39a84fd7348184365a10 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 25 Feb 2024 19:14:35 -0400
Subject: [PATCH 209/239] test: Update Sentry SDKs to v7.102.1 (#823)

---
 package.json        |  16 ++--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 190 ++++++++++++++++++++++----------------------
 3 files changed, 104 insertions(+), 104 deletions(-)

diff --git a/package.json b/package.json
index 795316e8..f0c3dbf6 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.101.0",
-    "@sentry/core": "7.101.0",
-    "@sentry/node": "7.101.0",
-    "@sentry/types": "7.101.0",
-    "@sentry/utils": "7.101.0",
+    "@sentry/browser": "7.102.1",
+    "@sentry/core": "7.102.1",
+    "@sentry/node": "7.102.1",
+    "@sentry/types": "7.102.1",
+    "@sentry/utils": "7.102.1",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.101.0",
-    "@sentry-internal/typescript": "7.101.0",
+    "@sentry-internal/eslint-config-sdk": "7.102.1",
+    "@sentry-internal/typescript": "7.102.1",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 1b52c8fa..630f78a1 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_101_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_102_1: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index a4d8f1f5..666b198f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.101.0.tgz#cd9edca823f1d4b8cbb730ea7a7a942b043f2037"
-  integrity sha512-g3D6so/T3Hn3Wq8EvohhrNjsGxKSzvIoLAMjdWuEcK0k7sC0ZWh887jU9jiGDzhh74Y78AR8frlqy8qk7wlicA==
+"@sentry-internal/eslint-config-sdk@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.102.1.tgz#0d9aabf6af5d8387dfb9bd2576b1b83291d643a2"
+  integrity sha512-ZoQb+t2c5axa8Kqxr8l4axwASsZnIrDhdvqOnrL3OkroDjCj01KbsOZqZzNXa7eyJwZDf65avZajylqGikRerw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.101.0"
-    "@sentry-internal/typescript" "7.101.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.102.1"
+    "@sentry-internal/typescript" "7.102.1"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.101.0.tgz#fa8edbb7a214e6c87244f70b6e56f48a07bd025f"
-  integrity sha512-LesYGx/gKVPpAR80u6yDn10O5beUoRpExmVRoe2a4kOQaAxaU9Gj9gTP2ZtosuUhGfrKGXN/ljxDlFZiZkevoA==
+"@sentry-internal/eslint-plugin-sdk@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.102.1.tgz#2f78ba11e9ae2b34cf6f41af58eb16ef1bb68118"
+  integrity sha512-qM2mGyOIVslbdqxGYkDLgPNY9zWFiUT4PbX0+ngZv/FmaG+5jJpLzh19++Xv28WxI13yTdOGwgEg+zb/JfSM4A==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.101.0.tgz#cce033c80c498212a5b9a9540ff3ab8297eefbe2"
-  integrity sha512-uQBMYhZp/qkBEA/GXRMm1OfSkRkZojxBrCrFmzkWhJzXT+YbL57/M1uCcwkKmorKlg393Soh7MLULInwmcwWkA==
-  dependencies:
-    "@sentry/core" "7.101.0"
-    "@sentry/types" "7.101.0"
-    "@sentry/utils" "7.101.0"
-
-"@sentry-internal/replay-canvas@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.101.0.tgz#0e32e1bebd4d125126e481c0df5f7186edeadbf4"
-  integrity sha512-fiz4kPpz/j6ZaD+vOcUXuO1HqD49djs4QwyTsRwCCi77EKZOGAaijpqWckDWyZs0dOOnbGGGC5x3o+CfTJcjKA==
-  dependencies:
-    "@sentry/core" "7.101.0"
-    "@sentry/replay" "7.101.0"
-    "@sentry/types" "7.101.0"
-    "@sentry/utils" "7.101.0"
-
-"@sentry-internal/tracing@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.101.0.tgz#9a92ee722d071449a61c061867aa43a5beefcfb6"
-  integrity sha512-rp9oOLQs6vMuzvAnAHRRCNu5Z0o/ZVRI3WPYedxpdMWKD1Z3G9o+0joP+ZIUqHsamWWYiIgPqXgL9AK6AWjFRg==
-  dependencies:
-    "@sentry/core" "7.101.0"
-    "@sentry/types" "7.101.0"
-    "@sentry/utils" "7.101.0"
-
-"@sentry-internal/typescript@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.101.0.tgz#376705403a17e282f1b9f540b9a1ffd2e4069b36"
-  integrity sha512-Pxpp18Z1H3T+THbRXLYiS327clCh/eOMC85+AQACK/URkU3cC8sQ4Qw27mIAgYLZVjYdGVa7fFrNoPJBI40NLQ==
-
-"@sentry/browser@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.101.0.tgz#53ecfa8a9b0076b95930dff5bbb616e827608606"
-  integrity sha512-wj9YLfS/caR20Yq0hdEjsZHuhnYLU7Ht0SlcJx5MNMnArtmW1k2CWZz3PCqcW/rTZe53npVTe6eMqMccB4aPrQ==
-  dependencies:
-    "@sentry-internal/feedback" "7.101.0"
-    "@sentry-internal/replay-canvas" "7.101.0"
-    "@sentry-internal/tracing" "7.101.0"
-    "@sentry/core" "7.101.0"
-    "@sentry/replay" "7.101.0"
-    "@sentry/types" "7.101.0"
-    "@sentry/utils" "7.101.0"
-
-"@sentry/core@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.101.0.tgz#7ddae48771bad6d3170df0d9807f86c39824dd0a"
-  integrity sha512-dRNrNV5OLGARkOGgxJsVDhA98Pev5G1LVJcud5E83cRg49BCUx2riqEtDP6iIS1nvem6cApkSnLC1kvl/T5/Cw==
-  dependencies:
-    "@sentry/types" "7.101.0"
-    "@sentry/utils" "7.101.0"
-
-"@sentry/node@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.101.0.tgz#acafd4efc81035bb3ffe73ef92f348099c7c5df1"
-  integrity sha512-4z01VAFjRYk7XcajbWPJlhkPN6PBG4nVX8n1dl+OH2OeqTxFxcnmY5zR5v+AtEbNJgg5PMwy8mnnGZRG/wLZgA==
-  dependencies:
-    "@sentry-internal/tracing" "7.101.0"
-    "@sentry/core" "7.101.0"
-    "@sentry/types" "7.101.0"
-    "@sentry/utils" "7.101.0"
-
-"@sentry/replay@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.101.0.tgz#66d199316be3f0fc2ed82a5294f519d58a2c2260"
-  integrity sha512-DSWkGKI/QhCAY+qm4mBnPob3/YsewisskVTak7KMDotJ75H85WFJhVwOMtvaEWIzVezCOItPv7ql51jTwhR3wA==
-  dependencies:
-    "@sentry-internal/tracing" "7.101.0"
-    "@sentry/core" "7.101.0"
-    "@sentry/types" "7.101.0"
-    "@sentry/utils" "7.101.0"
-
-"@sentry/types@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.101.0.tgz#0174a32d6c12def73f438dc2a10bd52cc0ba0c81"
-  integrity sha512-YC+ltO/AlbEyJHjCUYQ4is1HcDT2zSMuLkIAcyQmK7fUdlGT4iR5sfENriY9ZopYHgjPdJKfhI8ohScam7zp/A==
-
-"@sentry/utils@7.101.0":
-  version "7.101.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.101.0.tgz#0eadb9709c9b6fbc03d509acf7fe6a00ab4e6220"
-  integrity sha512-px1NUkCLsD9UKLE4W4DghpyzmAVHgYhskrjRt30ubyUKqlggtHkOXRvS8MjuWowR/i0wF0GuTCbU9StBd7JMrw==
-  dependencies:
-    "@sentry/types" "7.101.0"
+"@sentry-internal/feedback@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.102.1.tgz#747f88c2881c76fddd16bce57cc4bc17b4c2af93"
+  integrity sha512-vY4hpLLMNLjICtWiizc7KeGbWOTUMGrF7C+9dPCztZww3CLgzWy9A7DvPj5hodRiYzpdRnAMl8yQnMFbYXh7bA==
+  dependencies:
+    "@sentry/core" "7.102.1"
+    "@sentry/types" "7.102.1"
+    "@sentry/utils" "7.102.1"
+
+"@sentry-internal/replay-canvas@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.102.1.tgz#f098814ce21fdf95ef6d440d7ff8a6d3bfe73054"
+  integrity sha512-GUX4RWI10uRjdjeyvCLtAAhWRVqnAnG6+yNxWfqUQ3qMA7B7XxG43KT2UhSnulmErNzODQ6hA68rGPwwYeRIww==
+  dependencies:
+    "@sentry/core" "7.102.1"
+    "@sentry/replay" "7.102.1"
+    "@sentry/types" "7.102.1"
+    "@sentry/utils" "7.102.1"
+
+"@sentry-internal/tracing@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.102.1.tgz#5c39c8f04a4a1a665fb6d368e1cd13605152f18b"
+  integrity sha512-RkFlFyAC0fQOvBbBqnq0CLmFW5m3JJz9pKbZd5vXPraWAlniKSb1bC/4DF9SlNx0FN1LWG+IU3ISdpzwwTeAGg==
+  dependencies:
+    "@sentry/core" "7.102.1"
+    "@sentry/types" "7.102.1"
+    "@sentry/utils" "7.102.1"
+
+"@sentry-internal/typescript@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.102.1.tgz#9d9db74a361970feb8437f176d66b741ad561ed3"
+  integrity sha512-/nSDQ4LRm4/2Fzu4jQl60Yx/m81a2jV8F3loY+4NfKC2m+7xgkh1UyjrNZg0NsuNUWavicGLyLu+QS8iL/gMhg==
+
+"@sentry/browser@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.102.1.tgz#30d3da587b2b6542b3d9e39d923ed28a2704d454"
+  integrity sha512-7BOfPBiM7Kp6q/iy0JIbsBTxIASV+zWXByqqjuEMWGj3X2u4oRIfm3gv4erPU/l+CORQUVQZLSPGoIoM1gbB/A==
+  dependencies:
+    "@sentry-internal/feedback" "7.102.1"
+    "@sentry-internal/replay-canvas" "7.102.1"
+    "@sentry-internal/tracing" "7.102.1"
+    "@sentry/core" "7.102.1"
+    "@sentry/replay" "7.102.1"
+    "@sentry/types" "7.102.1"
+    "@sentry/utils" "7.102.1"
+
+"@sentry/core@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.102.1.tgz#855d37b6bba9986a9380864c823e696d3fc5aa01"
+  integrity sha512-QjY+LSP3du3J/C8x/FfEbRxgZgsWd0jfTJ4P7s9f219I1csK4OeBMC3UA1HwEa0pY/9OF6H/egW2CjOcMM5Pdg==
+  dependencies:
+    "@sentry/types" "7.102.1"
+    "@sentry/utils" "7.102.1"
+
+"@sentry/node@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.102.1.tgz#3e787ab2628c5950916f25c335a4eb6c0ea93ea5"
+  integrity sha512-mb3vmM3SGuCruckPiv/Vafeh89UQavTfpPFoU6Jwe6dSpQ39BO8fO8k8Zev+/nP6r/FKLtX17mJobErHECXsYw==
+  dependencies:
+    "@sentry-internal/tracing" "7.102.1"
+    "@sentry/core" "7.102.1"
+    "@sentry/types" "7.102.1"
+    "@sentry/utils" "7.102.1"
+
+"@sentry/replay@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.102.1.tgz#d6c17332d14dc312b124bbbda8f35d6a982b893c"
+  integrity sha512-HR/j9dGIvbrId8fh8mQlODx7JrhRmawEd9e9P3laPtogWCg/5TI+XPb2VGSaXOX9VWtb/6Z2UjHsaGjgg6YcuA==
+  dependencies:
+    "@sentry-internal/tracing" "7.102.1"
+    "@sentry/core" "7.102.1"
+    "@sentry/types" "7.102.1"
+    "@sentry/utils" "7.102.1"
+
+"@sentry/types@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.102.1.tgz#18c35f32ecbd12afb9860ca2de7bfff542d10b27"
+  integrity sha512-htKorf3t/D0XYtM7foTcmG+rM47rDP6XdbvCcX5gBCuCYlzpM1vqCt2rl3FLktZC6TaIpFRJw1TLfx6m+x5jdA==
+
+"@sentry/utils@7.102.1":
+  version "7.102.1"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.102.1.tgz#45ddcdf2e700d40160347bbdf4233aff3179d398"
+  integrity sha512-+8WcFjHVV/HROXSAwMuUzveElBFC43EiTG7SNEBNgOUeQzQVTmbUZXyTVgLrUmtoWqvnIxCacoLxtZo1o67kdg==
+  dependencies:
+    "@sentry/types" "7.102.1"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From a6fb53b9339949674aa026368fccef3626a9e9a6 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 28 Feb 2024 12:59:40 -0400
Subject: [PATCH 210/239] meta: Update changelog for v4.19.0 release (#836)

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0110034a..bd3bf299 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 4.19.0
+
+- feat: Update from [v7.101.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.101.0) to
+  [v7.102.1](https://github.com/getsentry/sentry-javascript/releases/tag/7.102.1) of JavaScript SDKs (#823)
+- feat: Deprecate class based integrations in favor of new functional style (#822)
+
 ## 4.18.0
 
 - feat: Update from [v7.92.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.92.0) to

From 113a4554c3d94863b4ef147d59dc0be22927d93c Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Wed, 28 Feb 2024 17:00:26 +0000
Subject: [PATCH 211/239] release: 4.19.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index f0c3dbf6..9990a4d3 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.18.0",
+  "version": "4.19.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From 013a1bdae37022b9d2df341f7c7a2ee7f162d536 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 29 Feb 2024 13:15:41 +0000
Subject: [PATCH 212/239] test: New Electron versions (#838)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index 6b06ecb0..bbe1bd44 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.3","28.2.4","29.0.1"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.4","28.2.5","29.1.0"]

From 4075a756d510aa5fc31c23b84550e98127ac50cb Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 29 Feb 2024 13:15:52 +0000
Subject: [PATCH 213/239] test: New Sentry SDK version (#837)

---
 package.json        |  16 ++--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 190 ++++++++++++++++++++++----------------------
 3 files changed, 104 insertions(+), 104 deletions(-)

diff --git a/package.json b/package.json
index 9990a4d3..f5bd1bdf 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.102.1",
-    "@sentry/core": "7.102.1",
-    "@sentry/node": "7.102.1",
-    "@sentry/types": "7.102.1",
-    "@sentry/utils": "7.102.1",
+    "@sentry/browser": "7.103.0",
+    "@sentry/core": "7.103.0",
+    "@sentry/node": "7.103.0",
+    "@sentry/types": "7.103.0",
+    "@sentry/utils": "7.103.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.102.1",
-    "@sentry-internal/typescript": "7.102.1",
+    "@sentry-internal/eslint-config-sdk": "7.103.0",
+    "@sentry-internal/typescript": "7.103.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 630f78a1..409f4064 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_102_1: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_103_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 666b198f..6b26588f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.102.1.tgz#0d9aabf6af5d8387dfb9bd2576b1b83291d643a2"
-  integrity sha512-ZoQb+t2c5axa8Kqxr8l4axwASsZnIrDhdvqOnrL3OkroDjCj01KbsOZqZzNXa7eyJwZDf65avZajylqGikRerw==
+"@sentry-internal/eslint-config-sdk@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.103.0.tgz#6d372172ed44d6ab4c34bcfcb22149933442eba8"
+  integrity sha512-YUnPtNMv0ERPOr7eQcuwXlWfccdXITIsw84PCg+9LtDFWtUfmpopCQ0H40Xfp5+Meg90moEPd17cGqAb4vbHyA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.102.1"
-    "@sentry-internal/typescript" "7.102.1"
+    "@sentry-internal/eslint-plugin-sdk" "7.103.0"
+    "@sentry-internal/typescript" "7.103.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.102.1.tgz#2f78ba11e9ae2b34cf6f41af58eb16ef1bb68118"
-  integrity sha512-qM2mGyOIVslbdqxGYkDLgPNY9zWFiUT4PbX0+ngZv/FmaG+5jJpLzh19++Xv28WxI13yTdOGwgEg+zb/JfSM4A==
+"@sentry-internal/eslint-plugin-sdk@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.103.0.tgz#015a5a655c80f51371dea1da4513cc5b8ed05a2c"
+  integrity sha512-kBzBmOgIFipTmKYQkCGgSndZHuVCLVjt2VCKXssy6KNXMAU6DhvMXFkhjv1d+bjCH0+F9gA3n0ys87mJA18o3g==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.102.1.tgz#747f88c2881c76fddd16bce57cc4bc17b4c2af93"
-  integrity sha512-vY4hpLLMNLjICtWiizc7KeGbWOTUMGrF7C+9dPCztZww3CLgzWy9A7DvPj5hodRiYzpdRnAMl8yQnMFbYXh7bA==
-  dependencies:
-    "@sentry/core" "7.102.1"
-    "@sentry/types" "7.102.1"
-    "@sentry/utils" "7.102.1"
-
-"@sentry-internal/replay-canvas@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.102.1.tgz#f098814ce21fdf95ef6d440d7ff8a6d3bfe73054"
-  integrity sha512-GUX4RWI10uRjdjeyvCLtAAhWRVqnAnG6+yNxWfqUQ3qMA7B7XxG43KT2UhSnulmErNzODQ6hA68rGPwwYeRIww==
-  dependencies:
-    "@sentry/core" "7.102.1"
-    "@sentry/replay" "7.102.1"
-    "@sentry/types" "7.102.1"
-    "@sentry/utils" "7.102.1"
-
-"@sentry-internal/tracing@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.102.1.tgz#5c39c8f04a4a1a665fb6d368e1cd13605152f18b"
-  integrity sha512-RkFlFyAC0fQOvBbBqnq0CLmFW5m3JJz9pKbZd5vXPraWAlniKSb1bC/4DF9SlNx0FN1LWG+IU3ISdpzwwTeAGg==
-  dependencies:
-    "@sentry/core" "7.102.1"
-    "@sentry/types" "7.102.1"
-    "@sentry/utils" "7.102.1"
-
-"@sentry-internal/typescript@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.102.1.tgz#9d9db74a361970feb8437f176d66b741ad561ed3"
-  integrity sha512-/nSDQ4LRm4/2Fzu4jQl60Yx/m81a2jV8F3loY+4NfKC2m+7xgkh1UyjrNZg0NsuNUWavicGLyLu+QS8iL/gMhg==
-
-"@sentry/browser@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.102.1.tgz#30d3da587b2b6542b3d9e39d923ed28a2704d454"
-  integrity sha512-7BOfPBiM7Kp6q/iy0JIbsBTxIASV+zWXByqqjuEMWGj3X2u4oRIfm3gv4erPU/l+CORQUVQZLSPGoIoM1gbB/A==
-  dependencies:
-    "@sentry-internal/feedback" "7.102.1"
-    "@sentry-internal/replay-canvas" "7.102.1"
-    "@sentry-internal/tracing" "7.102.1"
-    "@sentry/core" "7.102.1"
-    "@sentry/replay" "7.102.1"
-    "@sentry/types" "7.102.1"
-    "@sentry/utils" "7.102.1"
-
-"@sentry/core@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.102.1.tgz#855d37b6bba9986a9380864c823e696d3fc5aa01"
-  integrity sha512-QjY+LSP3du3J/C8x/FfEbRxgZgsWd0jfTJ4P7s9f219I1csK4OeBMC3UA1HwEa0pY/9OF6H/egW2CjOcMM5Pdg==
-  dependencies:
-    "@sentry/types" "7.102.1"
-    "@sentry/utils" "7.102.1"
-
-"@sentry/node@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.102.1.tgz#3e787ab2628c5950916f25c335a4eb6c0ea93ea5"
-  integrity sha512-mb3vmM3SGuCruckPiv/Vafeh89UQavTfpPFoU6Jwe6dSpQ39BO8fO8k8Zev+/nP6r/FKLtX17mJobErHECXsYw==
-  dependencies:
-    "@sentry-internal/tracing" "7.102.1"
-    "@sentry/core" "7.102.1"
-    "@sentry/types" "7.102.1"
-    "@sentry/utils" "7.102.1"
-
-"@sentry/replay@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.102.1.tgz#d6c17332d14dc312b124bbbda8f35d6a982b893c"
-  integrity sha512-HR/j9dGIvbrId8fh8mQlODx7JrhRmawEd9e9P3laPtogWCg/5TI+XPb2VGSaXOX9VWtb/6Z2UjHsaGjgg6YcuA==
-  dependencies:
-    "@sentry-internal/tracing" "7.102.1"
-    "@sentry/core" "7.102.1"
-    "@sentry/types" "7.102.1"
-    "@sentry/utils" "7.102.1"
-
-"@sentry/types@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.102.1.tgz#18c35f32ecbd12afb9860ca2de7bfff542d10b27"
-  integrity sha512-htKorf3t/D0XYtM7foTcmG+rM47rDP6XdbvCcX5gBCuCYlzpM1vqCt2rl3FLktZC6TaIpFRJw1TLfx6m+x5jdA==
-
-"@sentry/utils@7.102.1":
-  version "7.102.1"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.102.1.tgz#45ddcdf2e700d40160347bbdf4233aff3179d398"
-  integrity sha512-+8WcFjHVV/HROXSAwMuUzveElBFC43EiTG7SNEBNgOUeQzQVTmbUZXyTVgLrUmtoWqvnIxCacoLxtZo1o67kdg==
-  dependencies:
-    "@sentry/types" "7.102.1"
+"@sentry-internal/feedback@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.103.0.tgz#0b382b8fc9fc583be1164ff80df07fbe87b565b3"
+  integrity sha512-2nYoCfP7FpiUR+xxO5y5BL2ajHrhM4fL7HSup6QKNn7gI7vLyllYOOuYFNHhSmsXCD0i00U8DBClGLcn+6DQqw==
+  dependencies:
+    "@sentry/core" "7.103.0"
+    "@sentry/types" "7.103.0"
+    "@sentry/utils" "7.103.0"
+
+"@sentry-internal/replay-canvas@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.103.0.tgz#d601e56c04fd51b226f6c2933e28a8ce6955e3ba"
+  integrity sha512-EyDRMdlSqtwY8zGFhOWwl+nwwo98hlhJz+bpF5PQ6VmFpbplh6Wqfx2p+cPXQr40TGMMC4+vPFlSWTOMjcO9zQ==
+  dependencies:
+    "@sentry/core" "7.103.0"
+    "@sentry/replay" "7.103.0"
+    "@sentry/types" "7.103.0"
+    "@sentry/utils" "7.103.0"
+
+"@sentry-internal/tracing@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.103.0.tgz#b18ef65f610099ee2fc74f91f9ccfdb0353580c4"
+  integrity sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw==
+  dependencies:
+    "@sentry/core" "7.103.0"
+    "@sentry/types" "7.103.0"
+    "@sentry/utils" "7.103.0"
+
+"@sentry-internal/typescript@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.103.0.tgz#87bce84d0830613cb8b32145c31a0add927af738"
+  integrity sha512-USR+iORlHVChJ/VW2bAMOu9lWIlEmboADU6rbyZoJaWT10NF3F4+yE2Ik17tB181/DHkpaEwiNQbLkGM96eeKQ==
+
+"@sentry/browser@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.103.0.tgz#b509394d238e67f6225339c242701710ea347508"
+  integrity sha512-lP3Oplnwo1lY8ltk8SWzQURbxnSfVhYA099mVs1T95sdwXS16Za6SX7Ld/9T506ZW/WyoU4VCq7eKtG2kPFhMQ==
+  dependencies:
+    "@sentry-internal/feedback" "7.103.0"
+    "@sentry-internal/replay-canvas" "7.103.0"
+    "@sentry-internal/tracing" "7.103.0"
+    "@sentry/core" "7.103.0"
+    "@sentry/replay" "7.103.0"
+    "@sentry/types" "7.103.0"
+    "@sentry/utils" "7.103.0"
+
+"@sentry/core@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.103.0.tgz#8f626362c96f9aa4b4a52042c431d16372491dc1"
+  integrity sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==
+  dependencies:
+    "@sentry/types" "7.103.0"
+    "@sentry/utils" "7.103.0"
+
+"@sentry/node@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.103.0.tgz#9cf488086717c2920c43568432d14232b6783a9e"
+  integrity sha512-/bS/WNeO+PEd0r3o3LN0XGJV+l7hLNy1dTcn61VRgWGVs8SqMBb3uAvXAibZ9zGTCkaX/Ky3JumMcOOoxmNCtg==
+  dependencies:
+    "@sentry-internal/tracing" "7.103.0"
+    "@sentry/core" "7.103.0"
+    "@sentry/types" "7.103.0"
+    "@sentry/utils" "7.103.0"
+
+"@sentry/replay@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.103.0.tgz#6b420f1a33784e76533bb72ea9743e8ad34c0b23"
+  integrity sha512-I37komyb+DruQG8lPPPOFxLLbOijNXeTxiWLsIn+KFZqRtKqxxQWdNnk56V4YSTpFzxnMEFMRCpXhncuTWu4LA==
+  dependencies:
+    "@sentry-internal/tracing" "7.103.0"
+    "@sentry/core" "7.103.0"
+    "@sentry/types" "7.103.0"
+    "@sentry/utils" "7.103.0"
+
+"@sentry/types@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.103.0.tgz#f413f922216c97ec86bae39f9d527669d8afedbd"
+  integrity sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==
+
+"@sentry/utils@7.103.0":
+  version "7.103.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.103.0.tgz#803b76e2adfdcec0d4ab6369cc8990dde19b55f4"
+  integrity sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==
+  dependencies:
+    "@sentry/types" "7.103.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 0db67356157aad9d9520b509637962362c2d12b5 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 29 Feb 2024 16:08:45 +0000
Subject: [PATCH 214/239] test: Add test for `captureConsoleIntegration` (#835)

---
 test/e2e/recipe/index.ts                      |  1 +
 .../other/capture-console/event.json          | 75 +++++++++++++++++++
 .../other/capture-console/package.json        |  9 +++
 .../other/capture-console/recipe.yml          |  2 +
 .../other/capture-console/src/index.html      | 21 ++++++
 .../other/capture-console/src/main.js         | 23 ++++++
 6 files changed, 131 insertions(+)
 create mode 100644 test/e2e/test-apps/other/capture-console/event.json
 create mode 100644 test/e2e/test-apps/other/capture-console/package.json
 create mode 100644 test/e2e/test-apps/other/capture-console/recipe.yml
 create mode 100644 test/e2e/test-apps/other/capture-console/src/index.html
 create mode 100644 test/e2e/test-apps/other/capture-console/src/main.js

diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index 4f37dca1..44b33262 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -171,6 +171,7 @@ export class RecipeRunner {
           // We replace the Sentry JavaScript dependency versions to match that of @sentry/core
           .replace(/"@sentry\/replay": ".*"/, `"@sentry/replay": "${JS_VERSION}"`)
           .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`)
+          .replace(/"@sentry\/integrations": ".*"/, `"@sentry/integrations": "${JS_VERSION}"`)
           .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`);
       }
 
diff --git a/test/e2e/test-apps/other/capture-console/event.json b/test/e2e/test-apps/other/capture-console/event.json
new file mode 100644
index 00000000..e055c092
--- /dev/null
+++ b/test/e2e/test-apps/other/capture-console/event.json
@@ -0,0 +1,75 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "capture-console",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution":"{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      }
+    },
+    "message": "This is an error message",
+    "release": "capture-console@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "event_id": "{{id}}",
+    "platform": "javascript",
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "request": {
+      "url": "app:///src/index.html"
+    },
+    "tags": {
+      "event.environment": "javascript",
+      "event.origin": "electron",
+      "event_type": "javascript"
+    }
+  }
+}
diff --git a/test/e2e/test-apps/other/capture-console/package.json b/test/e2e/test-apps/other/capture-console/package.json
new file mode 100644
index 00000000..637f0b66
--- /dev/null
+++ b/test/e2e/test-apps/other/capture-console/package.json
@@ -0,0 +1,9 @@
+{
+  "name": "capture-console",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0",
+    "@sentry/integrations": "7.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/capture-console/recipe.yml b/test/e2e/test-apps/other/capture-console/recipe.yml
new file mode 100644
index 00000000..fe01d299
--- /dev/null
+++ b/test/e2e/test-apps/other/capture-console/recipe.yml
@@ -0,0 +1,2 @@
+description: Browser Tracing
+command: yarn
diff --git a/test/e2e/test-apps/other/capture-console/src/index.html b/test/e2e/test-apps/other/capture-console/src/index.html
new file mode 100644
index 00000000..272654c0
--- /dev/null
+++ b/test/e2e/test-apps/other/capture-console/src/index.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron/renderer');
+      const { captureConsoleIntegration } = require('@sentry/integrations');
+
+      init({
+        debug: true,
+        integrations: [captureConsoleIntegration()],
+      });
+
+      setTimeout(() => {
+        console.error('This is an error message');
+      }, 1000);
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/other/capture-console/src/main.js b/test/e2e/test-apps/other/capture-console/src/main.js
new file mode 100644
index 00000000..bede8faa
--- /dev/null
+++ b/test/e2e/test-apps/other/capture-console/src/main.js
@@ -0,0 +1,23 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+});

From 935dcd58077f853f70ff940a627d3ce4eb2ef1a4 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 29 Feb 2024 19:26:39 +0000
Subject: [PATCH 215/239] feat: Deprecate last class based integration (#840)

---
 src/index.ts                                |  4 +-
 src/main/anr.ts                             |  5 +-
 src/main/index.ts                           |  5 ++
 src/main/integrations/anr.ts                | 77 ++++++---------------
 src/renderer/index.ts                       |  3 +
 test/e2e/test-apps/anr/anr-main/src/main.js |  4 +-
 6 files changed, 36 insertions(+), 62 deletions(-)

diff --git a/src/index.ts b/src/index.ts
index 4abdc545..053b9368 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -207,11 +207,11 @@ export async function flush(timeout?: number): Promise<boolean> {
  * @deprecated Use `Anr` integration instead.
  *
  * ```js
- * import { init, Integrations } from '@sentry/electron';
+ * import { init, anrIntegration } from '@sentry/electron';
  *
  * init({
  *   dsn: "__DSN__",
- *   integrations: [new Integrations.Anr({ captureStackTrace: true })],
+ *   integrations: [anrIntegration({ captureStackTrace: true })],
  * });
  * ```
  */
diff --git a/src/main/anr.ts b/src/main/anr.ts
index b7f47f25..353f0bc4 100644
--- a/src/main/anr.ts
+++ b/src/main/anr.ts
@@ -186,15 +186,16 @@ interface LegacyOptions {
  * @deprecated Use `Anr` integration instead.
  *
  * ```js
- * import { init, Integrations } from '@sentry/electron';
+ * import { init, anrIntegration } from '@sentry/electron';
  *
  * init({
  *   dsn: "__DSN__",
- *   integrations: [new Integrations.Anr({ captureStackTrace: true })],
+ *   integrations: [anrIntegration({ captureStackTrace: true })],
  * });
  * ```
  */
 export function enableMainProcessAnrDetection(options: Partial<LegacyOptions> = {}): Promise<void> {
+  // eslint-disable-next-line deprecation/deprecation
   const integration = new Anr(options);
   const client = getClient() as NodeClient;
   integration.setup?.(client);
diff --git a/src/main/index.ts b/src/main/index.ts
index 9c8b9ae6..96e6a1f9 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -99,6 +99,7 @@ export { electronNetIntegration } from './integrations/net-breadcrumbs';
 export { childProcessIntegration } from './integrations/child-process';
 export { screenshotsIntegration } from './integrations/screenshots';
 export { rendererProfileFromIpc } from './integrations/renderer-profiling';
+export { anrIntegration } from './integrations/anr';
 
 export type { NodeOptions } from '@sentry/node';
 // eslint-disable-next-line deprecation/deprecation
@@ -106,6 +107,10 @@ export { flush, close, NodeClient, lastEventId } from '@sentry/node';
 
 export { makeElectronTransport } from './transports/electron-net';
 export { makeElectronOfflineTransport } from './transports/electron-offline-net';
+
+/**
+ * @deprecated All integrations are now exported from the root of the package.
+ */
 export const Integrations = { ...NodeIntegrations, ...ElectronMainIntegrations };
 
 export type { ElectronMainOptions } from './sdk';
diff --git a/src/main/integrations/anr.ts b/src/main/integrations/anr.ts
index 50fcda95..624868e1 100644
--- a/src/main/integrations/anr.ts
+++ b/src/main/integrations/anr.ts
@@ -1,66 +1,31 @@
-import { Integrations } from '@sentry/node';
-import { Primitive } from '@sentry/types';
+import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
+import { anrIntegration as nodeAnrIntegration } from '@sentry/node';
 import { app } from 'electron';
 
 import { ELECTRON_MAJOR_VERSION } from '../electron-normalize';
 
 /**
- * ConstructorParameters<typeof Integrations.Anr> doesn't work below because integration constructor types are broken here:
- * https://github.com/getsentry/sentry-javascript/blob/f28f3a968c52075694ecef4efef354f806fec100/packages/node/src/index.ts#L100-L116
+ * Starts a worker thread to detect App Not Responding (ANR) events
  */
-interface Options {
-  /**
-   * Interval to send heartbeat messages to the ANR worker.
-   *
-   * Defaults to 50ms.
-   */
-  pollInterval: number;
-  /**
-   * Threshold in milliseconds to trigger an ANR event.
-   *
-   * Defaults to 5000ms.
-   */
-  anrThreshold: number;
-  /**
-   * Whether to capture a stack trace when the ANR event is triggered.
-   *
-   * Defaults to `false`.
-   *
-   * This uses the node debugger which enables the inspector API and opens the required ports.
-   */
-  captureStackTrace: boolean;
-  /**
-   * Tags to include with ANR events.
-   */
-  staticTags: { [key: string]: Primitive };
-  /**
-   * @ignore Internal use only.
-   *
-   * If this is supplied, stack frame filenames will be rewritten to be relative to this path.
-   */
-  appRootPath: string | undefined;
-}
+export const anrIntegration = defineIntegration((options: Parameters<typeof nodeAnrIntegration>[0] = {}) => {
+  if (ELECTRON_MAJOR_VERSION < 22) {
+    throw new Error('Main process ANR detection requires Electron v22+');
+  }
 
-// We can't use the functional style of integration until they are exported as functions...
+  return nodeAnrIntegration({
+    ...options,
+    staticTags: {
+      'event.environment': 'javascript',
+      'event.origin': 'electron',
+      'event.process': 'browser',
+      ...options.staticTags,
+    },
+    appRootPath: app.getAppPath(),
+  });
+});
 
 /**
- * Starts a worker thread to detect App Not Responding (ANR) events
+ * @deprecated Use `anrIntegration()` instead.
  */
-export class Anr extends Integrations.Anr {
-  public constructor(options: Partial<Options> = {}) {
-    if (ELECTRON_MAJOR_VERSION < 22) {
-      throw new Error('Main process ANR detection requires Electron v22+');
-    }
-
-    super({
-      ...options,
-      staticTags: {
-        'event.environment': 'javascript',
-        'event.origin': 'electron',
-        'event.process': 'browser',
-        ...options.staticTags,
-      },
-      appRootPath: app.getAppPath(),
-    });
-  }
-}
+// eslint-disable-next-line deprecation/deprecation
+export const Anr = convertIntegrationFnToClass(anrIntegration.name, anrIntegration);
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 8e5e1c7f..73f4c7d1 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -124,6 +124,9 @@ export {
 // eslint-disable-next-line deprecation/deprecation
 export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser';
 
+/**
+ * @deprecated All integrations are now exported from the root of the package.
+ */
 // eslint-disable-next-line deprecation/deprecation
 export const Integrations = { ...BrowserIntegrations, ...ElectronRendererIntegrations };
 export { init, defaultIntegrations } from './sdk';
diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js
index d30d2748..81f65bb3 100644
--- a/test/e2e/test-apps/anr/anr-main/src/main.js
+++ b/test/e2e/test-apps/anr/anr-main/src/main.js
@@ -1,13 +1,13 @@
 const crypto = require('crypto');
 
 const { app } = require('electron');
-const { init, Integrations } = require('@sentry/electron/main');
+const { init, anrIntegration } = require('@sentry/electron/main');
 
 init({
   dsn: '__DSN__',
   debug: true,
   onFatalError: () => {},
-  integrations: [new Integrations.Anr({ captureStackTrace: true, anrThreshold: 1000 })],
+  integrations: [anrIntegration({ captureStackTrace: true, anrThreshold: 1000 })],
 });
 
 function longWork() {

From e4c75977b73c91b500960e5ef089a880cab76b5c Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 4 Mar 2024 11:05:41 +0000
Subject: [PATCH 216/239] test: New Sentry SDK version (#841)

---
 package.json        |  14 ++--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 190 ++++++++++++++++++++++----------------------
 3 files changed, 103 insertions(+), 103 deletions(-)

diff --git a/package.json b/package.json
index f5bd1bdf..c61b8dd0 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.103.0",
-    "@sentry/core": "7.103.0",
-    "@sentry/node": "7.103.0",
-    "@sentry/types": "7.103.0",
-    "@sentry/utils": "7.103.0",
+    "@sentry/browser": "7.105.0",
+    "@sentry/core": "7.105.0",
+    "@sentry/node": "7.105.0",
+    "@sentry/types": "7.105.0",
+    "@sentry/utils": "7.105.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.103.0",
-    "@sentry-internal/typescript": "7.103.0",
+    "@sentry-internal/eslint-config-sdk": "7.105.0",
+    "@sentry-internal/typescript": "7.105.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 409f4064..ff155999 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_103_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_105_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 6b26588f..03df5b6d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.103.0.tgz#6d372172ed44d6ab4c34bcfcb22149933442eba8"
-  integrity sha512-YUnPtNMv0ERPOr7eQcuwXlWfccdXITIsw84PCg+9LtDFWtUfmpopCQ0H40Xfp5+Meg90moEPd17cGqAb4vbHyA==
+"@sentry-internal/eslint-config-sdk@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.105.0.tgz#7eff67686b835c64117a0d4a8b669875f2ad413a"
+  integrity sha512-ml6V8uGqkGVd9BDXUzoixPtE8ny0CJKxlWoOepQ8Gp5rzLSr1hE2kP/gVwKTr6RFYXAFVTKADdwEa3RljtVqPg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.103.0"
-    "@sentry-internal/typescript" "7.103.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.105.0"
+    "@sentry-internal/typescript" "7.105.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.103.0.tgz#015a5a655c80f51371dea1da4513cc5b8ed05a2c"
-  integrity sha512-kBzBmOgIFipTmKYQkCGgSndZHuVCLVjt2VCKXssy6KNXMAU6DhvMXFkhjv1d+bjCH0+F9gA3n0ys87mJA18o3g==
+"@sentry-internal/eslint-plugin-sdk@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.105.0.tgz#1fea2f32394089a72617f97821871e446e4851cb"
+  integrity sha512-nKnoy26ma2jm4dks6Qkq8UM6sKabINzRRVwgKhzLnhEqNbilq2GJhQAoKPQ1JCGKg+okfBBOs6WdWPcwPJBYWQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.103.0.tgz#0b382b8fc9fc583be1164ff80df07fbe87b565b3"
-  integrity sha512-2nYoCfP7FpiUR+xxO5y5BL2ajHrhM4fL7HSup6QKNn7gI7vLyllYOOuYFNHhSmsXCD0i00U8DBClGLcn+6DQqw==
-  dependencies:
-    "@sentry/core" "7.103.0"
-    "@sentry/types" "7.103.0"
-    "@sentry/utils" "7.103.0"
-
-"@sentry-internal/replay-canvas@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.103.0.tgz#d601e56c04fd51b226f6c2933e28a8ce6955e3ba"
-  integrity sha512-EyDRMdlSqtwY8zGFhOWwl+nwwo98hlhJz+bpF5PQ6VmFpbplh6Wqfx2p+cPXQr40TGMMC4+vPFlSWTOMjcO9zQ==
-  dependencies:
-    "@sentry/core" "7.103.0"
-    "@sentry/replay" "7.103.0"
-    "@sentry/types" "7.103.0"
-    "@sentry/utils" "7.103.0"
-
-"@sentry-internal/tracing@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.103.0.tgz#b18ef65f610099ee2fc74f91f9ccfdb0353580c4"
-  integrity sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw==
-  dependencies:
-    "@sentry/core" "7.103.0"
-    "@sentry/types" "7.103.0"
-    "@sentry/utils" "7.103.0"
-
-"@sentry-internal/typescript@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.103.0.tgz#87bce84d0830613cb8b32145c31a0add927af738"
-  integrity sha512-USR+iORlHVChJ/VW2bAMOu9lWIlEmboADU6rbyZoJaWT10NF3F4+yE2Ik17tB181/DHkpaEwiNQbLkGM96eeKQ==
-
-"@sentry/browser@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.103.0.tgz#b509394d238e67f6225339c242701710ea347508"
-  integrity sha512-lP3Oplnwo1lY8ltk8SWzQURbxnSfVhYA099mVs1T95sdwXS16Za6SX7Ld/9T506ZW/WyoU4VCq7eKtG2kPFhMQ==
-  dependencies:
-    "@sentry-internal/feedback" "7.103.0"
-    "@sentry-internal/replay-canvas" "7.103.0"
-    "@sentry-internal/tracing" "7.103.0"
-    "@sentry/core" "7.103.0"
-    "@sentry/replay" "7.103.0"
-    "@sentry/types" "7.103.0"
-    "@sentry/utils" "7.103.0"
-
-"@sentry/core@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.103.0.tgz#8f626362c96f9aa4b4a52042c431d16372491dc1"
-  integrity sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==
-  dependencies:
-    "@sentry/types" "7.103.0"
-    "@sentry/utils" "7.103.0"
-
-"@sentry/node@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.103.0.tgz#9cf488086717c2920c43568432d14232b6783a9e"
-  integrity sha512-/bS/WNeO+PEd0r3o3LN0XGJV+l7hLNy1dTcn61VRgWGVs8SqMBb3uAvXAibZ9zGTCkaX/Ky3JumMcOOoxmNCtg==
-  dependencies:
-    "@sentry-internal/tracing" "7.103.0"
-    "@sentry/core" "7.103.0"
-    "@sentry/types" "7.103.0"
-    "@sentry/utils" "7.103.0"
-
-"@sentry/replay@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.103.0.tgz#6b420f1a33784e76533bb72ea9743e8ad34c0b23"
-  integrity sha512-I37komyb+DruQG8lPPPOFxLLbOijNXeTxiWLsIn+KFZqRtKqxxQWdNnk56V4YSTpFzxnMEFMRCpXhncuTWu4LA==
-  dependencies:
-    "@sentry-internal/tracing" "7.103.0"
-    "@sentry/core" "7.103.0"
-    "@sentry/types" "7.103.0"
-    "@sentry/utils" "7.103.0"
-
-"@sentry/types@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.103.0.tgz#f413f922216c97ec86bae39f9d527669d8afedbd"
-  integrity sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==
-
-"@sentry/utils@7.103.0":
-  version "7.103.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.103.0.tgz#803b76e2adfdcec0d4ab6369cc8990dde19b55f4"
-  integrity sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==
-  dependencies:
-    "@sentry/types" "7.103.0"
+"@sentry-internal/feedback@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.105.0.tgz#f2a25b55e5368509cfd540c21e74503568492057"
+  integrity sha512-17doUQFKYgLfG7EmZXjZQ7HR/aBzuLDd+GVaCNthUPyiz/tltV7EFECDWwHpXqzQgYRgroSbY8PruMVujFGUUw==
+  dependencies:
+    "@sentry/core" "7.105.0"
+    "@sentry/types" "7.105.0"
+    "@sentry/utils" "7.105.0"
+
+"@sentry-internal/replay-canvas@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.105.0.tgz#fed7d67d976837ef7c1b72a6db461179703fa6f5"
+  integrity sha512-XMBdkjIDhap5Gwrub5wlUJhuUVJM4aL4lZV8KcxJZZSXgXsnyGYbEh9SPZOHO05jtbxTxVeL3Pik5qtYjdGnPA==
+  dependencies:
+    "@sentry/core" "7.105.0"
+    "@sentry/replay" "7.105.0"
+    "@sentry/types" "7.105.0"
+    "@sentry/utils" "7.105.0"
+
+"@sentry-internal/tracing@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.105.0.tgz#9cb06f8281454343215cfe4b119c8198f032ec72"
+  integrity sha512-b+AFYB7Bc9vmyxl2jbmuT4esX5G0oPfpz35A0sxFzmJIhvMg1YMDNio2c81BtKN+VSPORCnKMLhfk3kyKKvWMQ==
+  dependencies:
+    "@sentry/core" "7.105.0"
+    "@sentry/types" "7.105.0"
+    "@sentry/utils" "7.105.0"
+
+"@sentry-internal/typescript@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.105.0.tgz#022d2feb01d4a582d76aa64d65c1a5bdca12b83f"
+  integrity sha512-FxfQZbI97wjeCKNC9/bTsfhwrUyyjsgzNPrO6eRE6bQOeSr2qUMYV0p6lNm5QJppFODeQGecjIthpUwtuQnNxg==
+
+"@sentry/browser@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.105.0.tgz#3eb56785cfc1cf58528b29ea954b73093e6f9481"
+  integrity sha512-OlYJzsZG109T1VpZ7O7KXf9IXCUUpp41lkkQM7ICBOBsfiHRUKmV5piTGCG5UgAvyb/gI/I1uQQtO4jthcHKEA==
+  dependencies:
+    "@sentry-internal/feedback" "7.105.0"
+    "@sentry-internal/replay-canvas" "7.105.0"
+    "@sentry-internal/tracing" "7.105.0"
+    "@sentry/core" "7.105.0"
+    "@sentry/replay" "7.105.0"
+    "@sentry/types" "7.105.0"
+    "@sentry/utils" "7.105.0"
+
+"@sentry/core@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.105.0.tgz#89db519dd9aa7326de63a7eaccf861de3769ab1c"
+  integrity sha512-5xsaTG6jZincTeJUmZomlv20mVRZUEF1U/g89lmrSOybyk2+opEnB1JeBn4ODwnvmSik8r2QLr6/RiYlaxRJCg==
+  dependencies:
+    "@sentry/types" "7.105.0"
+    "@sentry/utils" "7.105.0"
+
+"@sentry/node@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.105.0.tgz#cfe8e5602dff2cc754a95412f44c9ca8156422ff"
+  integrity sha512-b0QwZ7vT4hcJi6LmNRh3dcaYpLtXnkYXkL0rfhMb8hN8sUx8zuOWFMI7j0cfAloVThUeJVwGyv9dERfzGS2r2w==
+  dependencies:
+    "@sentry-internal/tracing" "7.105.0"
+    "@sentry/core" "7.105.0"
+    "@sentry/types" "7.105.0"
+    "@sentry/utils" "7.105.0"
+
+"@sentry/replay@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.105.0.tgz#61784e3e88afa66a0d9b1b9d222153ab54ea4bd0"
+  integrity sha512-hZD2m6fNL9gorUOaaEpqxeH7zNP4y2Ej0TdieM1HMQ2q9Zrm9yOzk9/7ALfbRLIZFRMFTqo9vvVztLs3E+Hx+g==
+  dependencies:
+    "@sentry-internal/tracing" "7.105.0"
+    "@sentry/core" "7.105.0"
+    "@sentry/types" "7.105.0"
+    "@sentry/utils" "7.105.0"
+
+"@sentry/types@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.105.0.tgz#51dadb7ad650e883459acf18df2ecbb5b4b6e5c2"
+  integrity sha512-80o0KMVM+X2Ym9hoQxvJetkJJwkpCg7o6tHHFXI+Rp7fawc2iCMTa0IRQMUiSkFvntQLYIdDoNNuKdzz2PbQGA==
+
+"@sentry/utils@7.105.0":
+  version "7.105.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.105.0.tgz#727187d252b97cb9e6c78bcdd0e9a1d14e60f313"
+  integrity sha512-YVAV0c2KLM8+VZCicQ/E/P2+J9Vs0hGhrXwV7w6ZEAtvxrg4oF270toL1WRhvcaf8JO4J1v4V+LuU6Txs4uEeQ==
+  dependencies:
+    "@sentry/types" "7.105.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 668c03f210c4e762492e9d367f90eb538eaa2007 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 4 Mar 2024 22:14:34 +0000
Subject: [PATCH 217/239] feat: Support and test `Sentry.sendFeedback` (#839)

---
 src/common/normalize.ts                       |  4 +++
 src/main/ipc.ts                               |  2 +-
 test/e2e/server/index.ts                      | 29 ++++++++++++-------
 test/e2e/test-apps/other/feedback/event.json  | 17 +++++++++++
 .../e2e/test-apps/other/feedback/package.json |  8 +++++
 test/e2e/test-apps/other/feedback/recipe.yml  |  2 ++
 .../test-apps/other/feedback/src/index.html   | 24 +++++++++++++++
 test/e2e/test-apps/other/feedback/src/main.js | 23 +++++++++++++++
 8 files changed, 97 insertions(+), 12 deletions(-)
 create mode 100644 test/e2e/test-apps/other/feedback/event.json
 create mode 100644 test/e2e/test-apps/other/feedback/package.json
 create mode 100644 test/e2e/test-apps/other/feedback/recipe.yml
 create mode 100644 test/e2e/test-apps/other/feedback/src/index.html
 create mode 100644 test/e2e/test-apps/other/feedback/src/main.js

diff --git a/src/common/normalize.ts b/src/common/normalize.ts
index ab191b89..26988187 100644
--- a/src/common/normalize.ts
+++ b/src/common/normalize.ts
@@ -34,6 +34,10 @@ export function normalizeEvent(event: Event, basePath: string): Event {
     request.url = normalizeUrlToBase(request.url, basePath);
   }
 
+  if (event.contexts?.feedback?.url && typeof event.contexts.feedback.url === 'string') {
+    event.contexts.feedback.url = normalizeUrlToBase(event.contexts.feedback.url, basePath);
+  }
+
   event.contexts = {
     ...event.contexts,
     runtime: {
diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 6b17547b..56750786 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -101,7 +101,7 @@ function eventFromEnvelope(envelope: Envelope): [Event, Attachment[], Profile |
   let profile: Profile | undefined;
 
   forEachEnvelopeItem(envelope, (item, type) => {
-    if (type === 'event' || type === 'transaction') {
+    if (type === 'event' || type === 'transaction' || type === 'feedback') {
       event = Array.isArray(item) ? (item as EventItem)[1] : undefined;
     } else if (type === 'attachment') {
       const [headers, data] = item as AttachmentItem;
diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts
index 3e1b7be4..80feef9a 100644
--- a/test/e2e/server/index.ts
+++ b/test/e2e/server/index.ts
@@ -1,5 +1,5 @@
 import { Event, Profile, ReplayEvent, Session, Transaction } from '@sentry/types';
-import { forEachEnvelopeItem, parseEnvelope } from '@sentry/utils';
+import { dropUndefinedKeys, forEachEnvelopeItem, parseEnvelope } from '@sentry/utils';
 import { Server } from 'http';
 import Koa from 'koa';
 import bodyParser from 'koa-bodyparser';
@@ -129,7 +129,12 @@ export class TestServer {
       let metrics: string | undefined;
 
       forEachEnvelopeItem(envelope, ([headers, item]) => {
-        if (headers.type === 'event' || headers.type === 'transaction' || headers.type === 'session') {
+        if (
+          headers.type === 'event' ||
+          headers.type === 'transaction' ||
+          headers.type === 'session' ||
+          headers.type === 'feedback'
+        ) {
           data = item as Event | Transaction | Session;
         }
 
@@ -155,15 +160,17 @@ export class TestServer {
       });
 
       if (data || metrics) {
-        this._addEvent({
-          data: data || {},
-          attachments,
-          profile,
-          metrics,
-          appId: ctx.params.id,
-          sentryKey: keyMatch[1],
-          method: 'envelope',
-        });
+        this._addEvent(
+          dropUndefinedKeys({
+            data: data || {},
+            attachments,
+            profile,
+            metrics,
+            appId: ctx.params.id,
+            sentryKey: keyMatch[1],
+            method: 'envelope',
+          }),
+        );
 
         ctx.status = 200;
         ctx.body = 'Success';
diff --git a/test/e2e/test-apps/other/feedback/event.json b/test/e2e/test-apps/other/feedback/event.json
new file mode 100644
index 00000000..94925be2
--- /dev/null
+++ b/test/e2e/test-apps/other/feedback/event.json
@@ -0,0 +1,17 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "contexts": {
+      "feedback": {
+        "contact_email": "john@doe.com",
+        "name": "John Doe",
+        "message": "I really like your App, thanks!",
+        "url": "app:///src/index.html",
+        "source": "api"
+      }
+    },
+    "type": "feedback"
+  }
+}
diff --git a/test/e2e/test-apps/other/feedback/package.json b/test/e2e/test-apps/other/feedback/package.json
new file mode 100644
index 00000000..cc1c7cac
--- /dev/null
+++ b/test/e2e/test-apps/other/feedback/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "feedback",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/feedback/recipe.yml b/test/e2e/test-apps/other/feedback/recipe.yml
new file mode 100644
index 00000000..bf5ce753
--- /dev/null
+++ b/test/e2e/test-apps/other/feedback/recipe.yml
@@ -0,0 +1,2 @@
+description: User Feedback
+command: yarn
diff --git a/test/e2e/test-apps/other/feedback/src/index.html b/test/e2e/test-apps/other/feedback/src/index.html
new file mode 100644
index 00000000..af0e4955
--- /dev/null
+++ b/test/e2e/test-apps/other/feedback/src/index.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const crypto = require('crypto');
+      const { init, sendFeedback } = require('@sentry/electron/renderer');
+
+      init({
+        debug: true,
+      });
+
+      setTimeout(() => {
+        sendFeedback({
+          name: 'John Doe',
+          email: 'john@doe.com',
+          message: 'I really like your App, thanks!',
+        });
+      }, 500);
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/other/feedback/src/main.js b/test/e2e/test-apps/other/feedback/src/main.js
new file mode 100644
index 00000000..bede8faa
--- /dev/null
+++ b/test/e2e/test-apps/other/feedback/src/main.js
@@ -0,0 +1,23 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+});

From 79f9d0e5974618ef413d81c3d60d1d06446c016a Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 5 Mar 2024 11:10:01 +0000
Subject: [PATCH 218/239] meta: Update changelog for 4.20.0 release (#842)

---
 CHANGELOG.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index bd3bf299..6c3e0ff3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
 
 ## Unreleased
 
+## 4.20.0
+
+- feat: Update from [v7.102.1](https://github.com/getsentry/sentry-javascript/releases/tag/7.102.1) to
+  [v7.105.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.105.0) of JavaScript SDKs (#837, #841)
+- feat: Deprecate `Anr` class based integration in favor of new functional style (#822)
+- feat: Support and test `Sentry.sendFeedback` (#839)
+
 ## 4.19.0
 
 - feat: Update from [v7.101.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.101.0) to

From e9e2b101846631567e39284b75a850d2e707c30b Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 5 Mar 2024 11:10:40 +0000
Subject: [PATCH 219/239] release: 4.20.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index c61b8dd0..7391c6ec 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.19.0",
+  "version": "4.20.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From a5142484c86fef2fd8309ba8f8b763bc34781c3e Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 18 Mar 2024 17:18:06 +0000
Subject: [PATCH 220/239] test: New Electron versions (#843)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index bbe1bd44..dfc427c5 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.4","28.2.5","29.1.0"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.6","28.2.7","29.1.4"]

From effcb3997f8a9fa4616d922105ebb20687d22bd6 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 18 Mar 2024 17:19:08 +0000
Subject: [PATCH 221/239] feat: Limit minidumps sent per app session (#846)

---
 .../integrations/sentry-minidump/index.ts     | 39 +++++++---
 test/e2e/recipe/index.ts                      |  6 ++
 test/e2e/recipe/parser.ts                     |  1 +
 .../native-sentry/renderer-limit/event.json   | 75 +++++++++++++++++++
 .../native-sentry/renderer-limit/package.json |  8 ++
 .../native-sentry/renderer-limit/recipe.yml   |  4 +
 .../renderer-limit/src/index.html             | 19 +++++
 .../native-sentry/renderer-limit/src/main.js  | 30 ++++++++
 8 files changed, 172 insertions(+), 10 deletions(-)
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/event.json
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/package.json
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/src/index.html
 create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/src/main.js

diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts
index 2ff036ec..9b9e3eca 100644
--- a/src/main/integrations/sentry-minidump/index.ts
+++ b/src/main/integrations/sentry-minidump/index.ts
@@ -28,11 +28,23 @@ interface PreviousRun {
 
 const INTEGRATION_NAME = 'SentryMinidump';
 
+interface Options {
+  /**
+   * Maximum number of minidumps to send per session
+   * Once this number has been reached, no more minidumps will be sent
+   *
+   * default: 10
+   */
+  maxMinidumpsPerSession?: number;
+}
+
 /**
  * Sends minidumps via the Sentry uploader
  */
-export const sentryMinidumpIntegration = defineIntegration(() => {
-  /** Store to persist context information beyond application crashes. */
+export const sentryMinidumpIntegration = defineIntegration((options: Options = {}) => {
+  // The remaining number of minidumps that can be sent in this session
+  let minidumpsRemaining = options.maxMinidumpsPerSession || 10;
+  // Store to persist context information beyond application crashes.
   let scopeStore: BufferedWriteStore<PreviousRun> | undefined;
   // We need to store the scope in a variable here so it can be attached to minidumps
   let scopeLastRun: Promise<PreviousRun> | undefined;
@@ -106,17 +118,24 @@ export const sentryMinidumpIntegration = defineIntegration(() => {
       return false;
     }
 
-    // If the SDK is not enabled, tell the loader to delete all minidumps
-    const deleteAll = client.getOptions().enabled === false;
+    if (minidumpsRemaining <= 0) {
+      logger.log('Not sending minidumps because the limit has been reached');
+    }
+
+    // If the SDK is not enabled, or we've already reached the minidump limit, tell the loader to delete all minidumps
+    const deleteAll = client.getOptions().enabled === false || minidumpsRemaining <= 0;
 
-    let minidumpSent = false;
+    let minidumpFound = false;
     await minidumpLoader?.(deleteAll, (attachment) => {
-      captureEvent(event as Event, { attachments: [attachment] });
-      minidumpSent = true;
+      minidumpFound = true;
+
+      if (minidumpsRemaining > 0) {
+        minidumpsRemaining -= 1;
+        captureEvent(event as Event, { attachments: [attachment] });
+      }
     });
 
-    // Unset to recover memory
-    return minidumpSent;
+    return minidumpFound;
   }
 
   async function sendRendererCrash(
@@ -224,7 +243,7 @@ export const sentryMinidumpIntegration = defineIntegration(() => {
       onChildProcessGone(EXIT_REASONS, (details) => sendChildProcessCrash(client, options, details));
 
       // Start to submit recent minidump crashes. This will load breadcrumbs and
-      // context information that was cached on disk prior to the crash.
+      // context information that was cached on disk in the previous app run, prior to the crash.
       sendNativeCrashes(client, {
         level: 'fatal',
         platform: 'native',
diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts
index 44b33262..b31959f8 100644
--- a/test/e2e/recipe/index.ts
+++ b/test/e2e/recipe/index.ts
@@ -235,6 +235,12 @@ export class RecipeRunner {
 
     await context.waitForEvents(testServer, totalEvents);
 
+    // If a test need to ensure no other events are received after the expected number of events, wait a bit longer
+    if (this._recipe.metadata.waitAfterExpectedEvents) {
+      log(`Waiting ${this._recipe.metadata.waitAfterExpectedEvents}ms to see if any more events are sent...`);
+      await delay(this._recipe.metadata.waitAfterExpectedEvents);
+    }
+
     if (totalEvents !== testServer.events.length) {
       throw new Error(`Expected ${expectedEvents.length} events but server has ${testServer.events.length} events`);
     }
diff --git a/test/e2e/recipe/parser.ts b/test/e2e/recipe/parser.ts
index 31608fb9..1d03f6d2 100644
--- a/test/e2e/recipe/parser.ts
+++ b/test/e2e/recipe/parser.ts
@@ -18,6 +18,7 @@ export interface TestMetadata {
   expectedError?: string;
   distPath?: string;
   skipEsmAutoTransform?: boolean;
+  waitAfterExpectedEvents?: number;
 }
 
 export interface TestRecipe {
diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/event.json b/test/e2e/test-apps/native-sentry/renderer-limit/event.json
new file mode 100644
index 00000000..9b082304
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-limit/event.json
@@ -0,0 +1,75 @@
+{
+  "method": "envelope",
+  "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
+  "appId": "277345",
+  "data": {
+    "sdk": {
+      "name": "sentry.javascript.electron",
+      "packages": [
+        {
+          "name": "npm:@sentry/electron",
+          "version": "{{version}}"
+        }
+      ],
+      "version": "{{version}}"
+    },
+    "contexts": {
+      "app": {
+        "app_name": "native-crash-limits",
+        "app_version": "1.0.0",
+        "app_start_time": "{{time}}"
+      },
+      "browser": {
+        "name": "Chrome"
+      },
+      "chrome": {
+        "name": "Chrome",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "device": {
+        "arch": "{{arch}}",
+        "family": "Desktop",
+        "memory_size": 0,
+        "free_memory": 0,
+        "processor_count": 0,
+        "processor_frequency": 0,
+        "cpu_description": "{{cpu}}",
+        "screen_resolution":"{{screen}}",
+        "screen_density": 1,
+        "language": "{{language}}"
+      },
+      "node": {
+        "name": "Node",
+        "type": "runtime",
+        "version": "{{version}}"
+      },
+      "os": {
+        "name": "{{platform}}",
+        "version": "{{version}}"
+      },
+      "runtime": {
+        "name": "Electron",
+        "version": "{{version}}"
+      },
+      "electron": {
+        "crashed_url": "app:///src/index.html"
+      }
+    },
+    "release": "native-crash-limits@1.0.0",
+    "environment": "development",
+    "user": {
+      "ip_address": "{{auto}}"
+    },
+    "event_id": "{{id}}",
+    "timestamp": 0,
+    "breadcrumbs": [],
+    "tags": {
+      "event.environment": "native",
+      "event.origin": "electron",
+      "event.process": "renderer",
+      "event_type": "native"
+    }
+  },
+  "attachments": [ { "attachment_type": "event.minidump" } ]
+}
diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/package.json b/test/e2e/test-apps/native-sentry/renderer-limit/package.json
new file mode 100644
index 00000000..aaa7cf28
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-limit/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "native-crash-limits",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml b/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml
new file mode 100644
index 00000000..223865e1
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml
@@ -0,0 +1,4 @@
+description: Native Crash Limits
+category: Native (Sentry Uploader)
+command: yarn
+waitAfterExpectedEvents: 10000
diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/src/index.html b/test/e2e/test-apps/native-sentry/renderer-limit/src/index.html
new file mode 100644
index 00000000..f2787cc1
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-limit/src/index.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+
+      init({
+        debug: true,
+      });
+
+      setTimeout(() => {
+        process.crash();
+      }, 500);
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/src/main.js b/test/e2e/test-apps/native-sentry/renderer-limit/src/main.js
new file mode 100644
index 00000000..19bc82ca
--- /dev/null
+++ b/test/e2e/test-apps/native-sentry/renderer-limit/src/main.js
@@ -0,0 +1,30 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init, sentryMinidumpIntegration } = require('@sentry/electron/main');
+
+init({
+  dsn: '__DSN__',
+  debug: true,
+  autoSessionTracking: false,
+  integrations: [sentryMinidumpIntegration({ maxMinidumpsPerSession: 1 })],
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+
+  // Keep reloading the window to cause multiple crash events
+  app.on('render-process-gone', () => {
+    console.log('Reloading window');
+    mainWindow.reload();
+  });
+});

From 26de29260aa7e49a458286002891733469d470f7 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 18 Mar 2024 18:06:52 +0000
Subject: [PATCH 222/239] test: New Sentry SDK version (#844)

---
 package.json        |  16 ++--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 190 ++++++++++++++++++++++----------------------
 3 files changed, 104 insertions(+), 104 deletions(-)

diff --git a/package.json b/package.json
index 7391c6ec..39918915 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.105.0",
-    "@sentry/core": "7.105.0",
-    "@sentry/node": "7.105.0",
-    "@sentry/types": "7.105.0",
-    "@sentry/utils": "7.105.0",
+    "@sentry/browser": "7.107.0",
+    "@sentry/core": "7.107.0",
+    "@sentry/node": "7.107.0",
+    "@sentry/types": "7.107.0",
+    "@sentry/utils": "7.107.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.105.0",
-    "@sentry-internal/typescript": "7.105.0",
+    "@sentry-internal/eslint-config-sdk": "7.107.0",
+    "@sentry-internal/typescript": "7.107.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index ff155999..5dfdc960 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_105_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_107_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 03df5b6d..0ebc4cc9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.105.0.tgz#7eff67686b835c64117a0d4a8b669875f2ad413a"
-  integrity sha512-ml6V8uGqkGVd9BDXUzoixPtE8ny0CJKxlWoOepQ8Gp5rzLSr1hE2kP/gVwKTr6RFYXAFVTKADdwEa3RljtVqPg==
+"@sentry-internal/eslint-config-sdk@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.107.0.tgz#1958771bb73dc2426aebeaac2e019ee12fcf4fb1"
+  integrity sha512-rBgB72bF4vZSXteeHvPlRvjr2XHfydVGBcAnMySyuqp8iKLKZCvhg5rNIACXMJzEZVbsQqwDEUZpCKkUe2HzSw==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.105.0"
-    "@sentry-internal/typescript" "7.105.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.107.0"
+    "@sentry-internal/typescript" "7.107.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.105.0.tgz#1fea2f32394089a72617f97821871e446e4851cb"
-  integrity sha512-nKnoy26ma2jm4dks6Qkq8UM6sKabINzRRVwgKhzLnhEqNbilq2GJhQAoKPQ1JCGKg+okfBBOs6WdWPcwPJBYWQ==
+"@sentry-internal/eslint-plugin-sdk@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.107.0.tgz#91e9e80125941cdbbab38695d764250279515843"
+  integrity sha512-vBN4ibmEciITYKdY/OxMN6RpBsPSNkrzJBAV7+4HHw8eBPN1Hh7IbRy4d+sjcPrPwABEhwoFvnFXkjx18VukJQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.105.0.tgz#f2a25b55e5368509cfd540c21e74503568492057"
-  integrity sha512-17doUQFKYgLfG7EmZXjZQ7HR/aBzuLDd+GVaCNthUPyiz/tltV7EFECDWwHpXqzQgYRgroSbY8PruMVujFGUUw==
-  dependencies:
-    "@sentry/core" "7.105.0"
-    "@sentry/types" "7.105.0"
-    "@sentry/utils" "7.105.0"
-
-"@sentry-internal/replay-canvas@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.105.0.tgz#fed7d67d976837ef7c1b72a6db461179703fa6f5"
-  integrity sha512-XMBdkjIDhap5Gwrub5wlUJhuUVJM4aL4lZV8KcxJZZSXgXsnyGYbEh9SPZOHO05jtbxTxVeL3Pik5qtYjdGnPA==
-  dependencies:
-    "@sentry/core" "7.105.0"
-    "@sentry/replay" "7.105.0"
-    "@sentry/types" "7.105.0"
-    "@sentry/utils" "7.105.0"
-
-"@sentry-internal/tracing@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.105.0.tgz#9cb06f8281454343215cfe4b119c8198f032ec72"
-  integrity sha512-b+AFYB7Bc9vmyxl2jbmuT4esX5G0oPfpz35A0sxFzmJIhvMg1YMDNio2c81BtKN+VSPORCnKMLhfk3kyKKvWMQ==
-  dependencies:
-    "@sentry/core" "7.105.0"
-    "@sentry/types" "7.105.0"
-    "@sentry/utils" "7.105.0"
-
-"@sentry-internal/typescript@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.105.0.tgz#022d2feb01d4a582d76aa64d65c1a5bdca12b83f"
-  integrity sha512-FxfQZbI97wjeCKNC9/bTsfhwrUyyjsgzNPrO6eRE6bQOeSr2qUMYV0p6lNm5QJppFODeQGecjIthpUwtuQnNxg==
-
-"@sentry/browser@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.105.0.tgz#3eb56785cfc1cf58528b29ea954b73093e6f9481"
-  integrity sha512-OlYJzsZG109T1VpZ7O7KXf9IXCUUpp41lkkQM7ICBOBsfiHRUKmV5piTGCG5UgAvyb/gI/I1uQQtO4jthcHKEA==
-  dependencies:
-    "@sentry-internal/feedback" "7.105.0"
-    "@sentry-internal/replay-canvas" "7.105.0"
-    "@sentry-internal/tracing" "7.105.0"
-    "@sentry/core" "7.105.0"
-    "@sentry/replay" "7.105.0"
-    "@sentry/types" "7.105.0"
-    "@sentry/utils" "7.105.0"
-
-"@sentry/core@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.105.0.tgz#89db519dd9aa7326de63a7eaccf861de3769ab1c"
-  integrity sha512-5xsaTG6jZincTeJUmZomlv20mVRZUEF1U/g89lmrSOybyk2+opEnB1JeBn4ODwnvmSik8r2QLr6/RiYlaxRJCg==
-  dependencies:
-    "@sentry/types" "7.105.0"
-    "@sentry/utils" "7.105.0"
-
-"@sentry/node@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.105.0.tgz#cfe8e5602dff2cc754a95412f44c9ca8156422ff"
-  integrity sha512-b0QwZ7vT4hcJi6LmNRh3dcaYpLtXnkYXkL0rfhMb8hN8sUx8zuOWFMI7j0cfAloVThUeJVwGyv9dERfzGS2r2w==
-  dependencies:
-    "@sentry-internal/tracing" "7.105.0"
-    "@sentry/core" "7.105.0"
-    "@sentry/types" "7.105.0"
-    "@sentry/utils" "7.105.0"
-
-"@sentry/replay@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.105.0.tgz#61784e3e88afa66a0d9b1b9d222153ab54ea4bd0"
-  integrity sha512-hZD2m6fNL9gorUOaaEpqxeH7zNP4y2Ej0TdieM1HMQ2q9Zrm9yOzk9/7ALfbRLIZFRMFTqo9vvVztLs3E+Hx+g==
-  dependencies:
-    "@sentry-internal/tracing" "7.105.0"
-    "@sentry/core" "7.105.0"
-    "@sentry/types" "7.105.0"
-    "@sentry/utils" "7.105.0"
-
-"@sentry/types@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.105.0.tgz#51dadb7ad650e883459acf18df2ecbb5b4b6e5c2"
-  integrity sha512-80o0KMVM+X2Ym9hoQxvJetkJJwkpCg7o6tHHFXI+Rp7fawc2iCMTa0IRQMUiSkFvntQLYIdDoNNuKdzz2PbQGA==
-
-"@sentry/utils@7.105.0":
-  version "7.105.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.105.0.tgz#727187d252b97cb9e6c78bcdd0e9a1d14e60f313"
-  integrity sha512-YVAV0c2KLM8+VZCicQ/E/P2+J9Vs0hGhrXwV7w6ZEAtvxrg4oF270toL1WRhvcaf8JO4J1v4V+LuU6Txs4uEeQ==
-  dependencies:
-    "@sentry/types" "7.105.0"
+"@sentry-internal/feedback@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.107.0.tgz#144cf01b1c1739d61db3990519f59b49a356fef1"
+  integrity sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA==
+  dependencies:
+    "@sentry/core" "7.107.0"
+    "@sentry/types" "7.107.0"
+    "@sentry/utils" "7.107.0"
+
+"@sentry-internal/replay-canvas@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.107.0.tgz#ce2a8f6bf63ab962e696f26b509cfb87aa931302"
+  integrity sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow==
+  dependencies:
+    "@sentry/core" "7.107.0"
+    "@sentry/replay" "7.107.0"
+    "@sentry/types" "7.107.0"
+    "@sentry/utils" "7.107.0"
+
+"@sentry-internal/tracing@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.107.0.tgz#a10b4abcbc9e0d8da948e3a95029574387ca7b16"
+  integrity sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ==
+  dependencies:
+    "@sentry/core" "7.107.0"
+    "@sentry/types" "7.107.0"
+    "@sentry/utils" "7.107.0"
+
+"@sentry-internal/typescript@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.107.0.tgz#570f498f5101b8cc8bf1410e448ebd5b5915a41e"
+  integrity sha512-Pz1OkfAzhIqETRWpuP6bTuPnAhdCGDgFpcCUMdTBrgrQKsbmXqR4Cl78Z+1C9YRJJARSqxVJWReL7rh3ikFNLw==
+
+"@sentry/browser@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.107.0.tgz#a1caf4a3c39857862ba3314b9d4ed03f9259f338"
+  integrity sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g==
+  dependencies:
+    "@sentry-internal/feedback" "7.107.0"
+    "@sentry-internal/replay-canvas" "7.107.0"
+    "@sentry-internal/tracing" "7.107.0"
+    "@sentry/core" "7.107.0"
+    "@sentry/replay" "7.107.0"
+    "@sentry/types" "7.107.0"
+    "@sentry/utils" "7.107.0"
+
+"@sentry/core@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.107.0.tgz#926838ba2c2861d6bd2bced0232e1f9d1ead6c75"
+  integrity sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw==
+  dependencies:
+    "@sentry/types" "7.107.0"
+    "@sentry/utils" "7.107.0"
+
+"@sentry/node@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.107.0.tgz#d60c2e28953f2ba14d12ada9190f1fc577b2b280"
+  integrity sha512-UZXkG7uThT2YyPW8AOSKRXp1LbVcBHufa4r1XAwBukA2FKO6HHJPjMUgY6DYVQ6k+BmA56CNfVjYrdLbyjBYYA==
+  dependencies:
+    "@sentry-internal/tracing" "7.107.0"
+    "@sentry/core" "7.107.0"
+    "@sentry/types" "7.107.0"
+    "@sentry/utils" "7.107.0"
+
+"@sentry/replay@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.107.0.tgz#d714f864ef8602e6d009b2fa8ff8e4ef63c3e9e4"
+  integrity sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA==
+  dependencies:
+    "@sentry-internal/tracing" "7.107.0"
+    "@sentry/core" "7.107.0"
+    "@sentry/types" "7.107.0"
+    "@sentry/utils" "7.107.0"
+
+"@sentry/types@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.107.0.tgz#5ba4b472be6ccad9aecd58dbc0141a09dafb68c1"
+  integrity sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w==
+
+"@sentry/utils@7.107.0":
+  version "7.107.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.107.0.tgz#b8524539d052a40f9c5f34a8347501f0f81a0751"
+  integrity sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw==
+  dependencies:
+    "@sentry/types" "7.107.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From fdfb3fdacd2934853b9e23f4900ee14d010f7260 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 18 Mar 2024 23:35:55 +0000
Subject: [PATCH 223/239] fix: Duplicate event hookup (#849)

---
 src/main/ipc.ts                               |  8 ++++--
 .../other/event-listener/package.json         |  8 ++++++
 .../test-apps/other/event-listener/recipe.yml |  4 +++
 .../other/event-listener/src/index.html       | 17 ++++++++++++
 .../other/event-listener/src/main.js          | 27 +++++++++++++++++++
 5 files changed, 62 insertions(+), 2 deletions(-)
 create mode 100644 test/e2e/test-apps/other/event-listener/package.json
 create mode 100644 test/e2e/test-apps/other/event-listener/recipe.yml
 create mode 100644 test/e2e/test-apps/other/event-listener/src/index.html
 create mode 100644 test/e2e/test-apps/other/event-listener/src/main.js

diff --git a/src/main/ipc.ts b/src/main/ipc.ts
index 56750786..f5e4f8e6 100644
--- a/src/main/ipc.ts
+++ b/src/main/ipc.ts
@@ -258,11 +258,15 @@ function configureProtocol(options: ElectronMainOptionsInternal): void {
 function configureClassic(options: ElectronMainOptionsInternal): void {
   ipcMain.on(IPCChannel.RENDERER_START, ({ sender }) => {
     const id = sender.id;
+    // Keep track of renderers that are using IPC
+    KNOWN_RENDERERS = KNOWN_RENDERERS || new Set();
+
+    if (KNOWN_RENDERERS.has(id)) {
+      return;
+    }
 
     // In older Electron, sender can be destroyed before this callback is called
     if (!sender.isDestroyed()) {
-      // Keep track of renderers that are using IPC
-      KNOWN_RENDERERS = KNOWN_RENDERERS || new Set();
       KNOWN_RENDERERS.add(id);
 
       sender.once('destroyed', () => {
diff --git a/test/e2e/test-apps/other/event-listener/package.json b/test/e2e/test-apps/other/event-listener/package.json
new file mode 100644
index 00000000..49900190
--- /dev/null
+++ b/test/e2e/test-apps/other/event-listener/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "event-listener-max",
+  "version": "1.0.0",
+  "main": "src/main.js",
+  "dependencies": {
+    "@sentry/electron": "3.0.0"
+  }
+}
diff --git a/test/e2e/test-apps/other/event-listener/recipe.yml b/test/e2e/test-apps/other/event-listener/recipe.yml
new file mode 100644
index 00000000..37e652b3
--- /dev/null
+++ b/test/e2e/test-apps/other/event-listener/recipe.yml
@@ -0,0 +1,4 @@
+description: Event Listener Max
+command: yarn
+condition: version.major >= 25
+expectedError: Listener count = 2
diff --git a/test/e2e/test-apps/other/event-listener/src/index.html b/test/e2e/test-apps/other/event-listener/src/index.html
new file mode 100644
index 00000000..e5d1ea98
--- /dev/null
+++ b/test/e2e/test-apps/other/event-listener/src/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+    <!-- Refresh the page so the renderer SDK gets loaded multiple times -->
+    <meta http-equiv="refresh" content="1" />
+  </head>
+  <body>
+    <script>
+      const { init } = require('@sentry/electron');
+
+      init({
+        debug: true,
+      });
+    </script>
+  </body>
+</html>
diff --git a/test/e2e/test-apps/other/event-listener/src/main.js b/test/e2e/test-apps/other/event-listener/src/main.js
new file mode 100644
index 00000000..66f714e1
--- /dev/null
+++ b/test/e2e/test-apps/other/event-listener/src/main.js
@@ -0,0 +1,27 @@
+const path = require('path');
+
+const { app, BrowserWindow } = require('electron');
+const { init } = require('@sentry/electron');
+
+init({
+  dsn: '__HANG_DSN__',
+  debug: true,
+  onFatalError: () => {},
+});
+
+app.on('ready', () => {
+  const mainWindow = new BrowserWindow({
+    show: false,
+    webPreferences: {
+      nodeIntegration: true,
+      contextIsolation: false,
+    },
+  });
+
+  setTimeout(() => {
+    console.log(`Listener count = ${mainWindow.webContents.listenerCount('destroyed')}`);
+    app.quit();
+  }, 8000);
+
+  mainWindow.loadFile(path.join(__dirname, 'index.html'));
+});

From c6839e770b7ffa7cd4985af93633596ec3e6ee61 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 19 Mar 2024 12:26:01 +0000
Subject: [PATCH 224/239] meta: Update changelog for v4.21.0 release (#852)

---
 CHANGELOG.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6c3e0ff3..dc94c5b2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
 
 ## Unreleased
 
+## 4.21.0
+
+- feat: Update from [v7.105.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.105.0) to
+  [v7.107.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.107.0) of JavaScript SDKs (#844)
+- feat: Limit minidumps sent per app session (#846)
+- fix: Duplicate event hookup (#849)
+
 ## 4.20.0
 
 - feat: Update from [v7.102.1](https://github.com/getsentry/sentry-javascript/releases/tag/7.102.1) to

From e03e2bfa0b01eed6c0d5a62b9fa3294eea78f70c Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 19 Mar 2024 13:45:38 +0000
Subject: [PATCH 225/239] test: Limit crash limits test to latest Electron
 versions (#853)

---
 test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml b/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml
index 223865e1..b48574f3 100644
--- a/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml
+++ b/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml
@@ -2,3 +2,4 @@ description: Native Crash Limits
 category: Native (Sentry Uploader)
 command: yarn
 waitAfterExpectedEvents: 10000
+condition: version.major >= 20

From 50611551bde156b888cc068375b6854e822139ea Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Tue, 19 Mar 2024 13:46:17 +0000
Subject: [PATCH 226/239] release: 4.21.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 39918915..ca674a06 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.20.0",
+  "version": "4.21.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From 46d3e88e22763baaabc642ec6814e0d57dd477c2 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 19 Mar 2024 14:43:28 +0000
Subject: [PATCH 227/239] test: New Electron versions (#851)

---
 test/e2e/versions.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/e2e/versions.json b/test/e2e/versions.json
index dfc427c5..7dffd769 100644
--- a/test/e2e/versions.json
+++ b/test/e2e/versions.json
@@ -1 +1 @@
-["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.6","28.2.7","29.1.4"]
+["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.6","28.2.7","29.1.4","30.0.0-beta.1"]

From b2204aedf998df8ad628cd6b593c4e6a0f181ef6 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 22 Mar 2024 15:55:39 +0000
Subject: [PATCH 228/239] test: New Sentry SDK version (#856)

---
 package.json        |  16 ++--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 190 ++++++++++++++++++++++----------------------
 3 files changed, 104 insertions(+), 104 deletions(-)

diff --git a/package.json b/package.json
index ca674a06..5761706c 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.107.0",
-    "@sentry/core": "7.107.0",
-    "@sentry/node": "7.107.0",
-    "@sentry/types": "7.107.0",
-    "@sentry/utils": "7.107.0",
+    "@sentry/browser": "7.108.0",
+    "@sentry/core": "7.108.0",
+    "@sentry/node": "7.108.0",
+    "@sentry/types": "7.108.0",
+    "@sentry/utils": "7.108.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.107.0",
-    "@sentry-internal/typescript": "7.107.0",
+    "@sentry-internal/eslint-config-sdk": "7.108.0",
+    "@sentry-internal/typescript": "7.108.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
+}
\ No newline at end of file
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 5dfdc960..201d5e99 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_107_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_108_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 0ebc4cc9..177a0061 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.107.0.tgz#1958771bb73dc2426aebeaac2e019ee12fcf4fb1"
-  integrity sha512-rBgB72bF4vZSXteeHvPlRvjr2XHfydVGBcAnMySyuqp8iKLKZCvhg5rNIACXMJzEZVbsQqwDEUZpCKkUe2HzSw==
+"@sentry-internal/eslint-config-sdk@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.108.0.tgz#4ec2a06f5eda349f42af069f61d5e2cb6ff219c1"
+  integrity sha512-MsA4pzayvJZB9QtxlKjQabRFAOwAl1Z0Vd3v+dCA28H3ek59533m30TwcPtv6uOmHUXOcIqzpaF6SM564xlUoQ==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.107.0"
-    "@sentry-internal/typescript" "7.107.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.108.0"
+    "@sentry-internal/typescript" "7.108.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.107.0.tgz#91e9e80125941cdbbab38695d764250279515843"
-  integrity sha512-vBN4ibmEciITYKdY/OxMN6RpBsPSNkrzJBAV7+4HHw8eBPN1Hh7IbRy4d+sjcPrPwABEhwoFvnFXkjx18VukJQ==
+"@sentry-internal/eslint-plugin-sdk@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.108.0.tgz#42e65c8d470b4a55ea76cc8d5aff570f512edfe9"
+  integrity sha512-Od5cnoeQb2RUoYtjI062JTgcb6SRxlcD6++5INQDtEQjkBqNvThL+/GZ7b5wCjiaPsyPTbbAd1kEgzeVzYo4oQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.107.0.tgz#144cf01b1c1739d61db3990519f59b49a356fef1"
-  integrity sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA==
-  dependencies:
-    "@sentry/core" "7.107.0"
-    "@sentry/types" "7.107.0"
-    "@sentry/utils" "7.107.0"
-
-"@sentry-internal/replay-canvas@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.107.0.tgz#ce2a8f6bf63ab962e696f26b509cfb87aa931302"
-  integrity sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow==
-  dependencies:
-    "@sentry/core" "7.107.0"
-    "@sentry/replay" "7.107.0"
-    "@sentry/types" "7.107.0"
-    "@sentry/utils" "7.107.0"
-
-"@sentry-internal/tracing@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.107.0.tgz#a10b4abcbc9e0d8da948e3a95029574387ca7b16"
-  integrity sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ==
-  dependencies:
-    "@sentry/core" "7.107.0"
-    "@sentry/types" "7.107.0"
-    "@sentry/utils" "7.107.0"
-
-"@sentry-internal/typescript@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.107.0.tgz#570f498f5101b8cc8bf1410e448ebd5b5915a41e"
-  integrity sha512-Pz1OkfAzhIqETRWpuP6bTuPnAhdCGDgFpcCUMdTBrgrQKsbmXqR4Cl78Z+1C9YRJJARSqxVJWReL7rh3ikFNLw==
-
-"@sentry/browser@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.107.0.tgz#a1caf4a3c39857862ba3314b9d4ed03f9259f338"
-  integrity sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g==
-  dependencies:
-    "@sentry-internal/feedback" "7.107.0"
-    "@sentry-internal/replay-canvas" "7.107.0"
-    "@sentry-internal/tracing" "7.107.0"
-    "@sentry/core" "7.107.0"
-    "@sentry/replay" "7.107.0"
-    "@sentry/types" "7.107.0"
-    "@sentry/utils" "7.107.0"
-
-"@sentry/core@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.107.0.tgz#926838ba2c2861d6bd2bced0232e1f9d1ead6c75"
-  integrity sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw==
-  dependencies:
-    "@sentry/types" "7.107.0"
-    "@sentry/utils" "7.107.0"
-
-"@sentry/node@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.107.0.tgz#d60c2e28953f2ba14d12ada9190f1fc577b2b280"
-  integrity sha512-UZXkG7uThT2YyPW8AOSKRXp1LbVcBHufa4r1XAwBukA2FKO6HHJPjMUgY6DYVQ6k+BmA56CNfVjYrdLbyjBYYA==
-  dependencies:
-    "@sentry-internal/tracing" "7.107.0"
-    "@sentry/core" "7.107.0"
-    "@sentry/types" "7.107.0"
-    "@sentry/utils" "7.107.0"
-
-"@sentry/replay@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.107.0.tgz#d714f864ef8602e6d009b2fa8ff8e4ef63c3e9e4"
-  integrity sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA==
-  dependencies:
-    "@sentry-internal/tracing" "7.107.0"
-    "@sentry/core" "7.107.0"
-    "@sentry/types" "7.107.0"
-    "@sentry/utils" "7.107.0"
-
-"@sentry/types@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.107.0.tgz#5ba4b472be6ccad9aecd58dbc0141a09dafb68c1"
-  integrity sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w==
-
-"@sentry/utils@7.107.0":
-  version "7.107.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.107.0.tgz#b8524539d052a40f9c5f34a8347501f0f81a0751"
-  integrity sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw==
-  dependencies:
-    "@sentry/types" "7.107.0"
+"@sentry-internal/feedback@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.108.0.tgz#7033352abd304f1383ec47640e056a0dfd5132b7"
+  integrity sha512-8JcgZEnk1uWrXJhsd3iRvFtEiVeaWOEhN0NZwhwQXHfvODqep6JtrkY1yCIyxbpA37aZmrPc2JhyotRERGfUjg==
+  dependencies:
+    "@sentry/core" "7.108.0"
+    "@sentry/types" "7.108.0"
+    "@sentry/utils" "7.108.0"
+
+"@sentry-internal/replay-canvas@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.108.0.tgz#641133c19c0e1c423617b8d791f53d6cd0b0a862"
+  integrity sha512-R5tvjGqWUV5vSk0N1eBgVW7wIADinrkfDEBZ9FyKP2mXHBobsyNGt30heJDEqYmVqluRqjU2NuIRapsnnrpGnA==
+  dependencies:
+    "@sentry/core" "7.108.0"
+    "@sentry/replay" "7.108.0"
+    "@sentry/types" "7.108.0"
+    "@sentry/utils" "7.108.0"
+
+"@sentry-internal/tracing@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.108.0.tgz#d1e660701fb860cfae72b6ebfa8fb267533421fa"
+  integrity sha512-zuK5XsTsb+U+hgn3SPetYDAogrXsM16U/LLoMW7+TlC6UjlHGYQvmX3o+M2vntejoU1QZS8m1bCAZSMWEypAEw==
+  dependencies:
+    "@sentry/core" "7.108.0"
+    "@sentry/types" "7.108.0"
+    "@sentry/utils" "7.108.0"
+
+"@sentry-internal/typescript@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.108.0.tgz#ea13a460e1d4c5a1eea939c85fa7d177d8d52b92"
+  integrity sha512-PXJgGg038sVSG4fl4a0Up1PPWLqTgFKTrAt+lawaRkDQT4nOS8dUGtzCMhYcgv6EsWArf16NF8I2UtmYHpW3oQ==
+
+"@sentry/browser@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.108.0.tgz#b95810bb6572b63781f253615896f5afb1a3a5c0"
+  integrity sha512-FNpzsdTvGvdHJMUelqEouUXMZU7jC+dpN7CdT6IoHVVFEkoAgrjMVUhXZoQ/dmCkdKWHmFSQhJ8Fm6V+e9Aq0A==
+  dependencies:
+    "@sentry-internal/feedback" "7.108.0"
+    "@sentry-internal/replay-canvas" "7.108.0"
+    "@sentry-internal/tracing" "7.108.0"
+    "@sentry/core" "7.108.0"
+    "@sentry/replay" "7.108.0"
+    "@sentry/types" "7.108.0"
+    "@sentry/utils" "7.108.0"
+
+"@sentry/core@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.108.0.tgz#a27e8d6f85f59c5730ce86071474f15ac899fde0"
+  integrity sha512-I/VNZCFgLASxHZaD0EtxZRM34WG9w2gozqgrKGNMzAymwmQ3K9g/1qmBy4e6iS3YRptb7J5UhQkZQHrcwBbjWQ==
+  dependencies:
+    "@sentry/types" "7.108.0"
+    "@sentry/utils" "7.108.0"
+
+"@sentry/node@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.108.0.tgz#ed113dc1d39aaae32f7e9f681dcea41cf28eb5f1"
+  integrity sha512-pMxc9txnDDkU4Z8k2Uw/DPSLPehNtWV3mjJ3+my0AMORGYrXLkJI93tddlE5z/7k+GEJdj1HsOLgxUN0OU+HGA==
+  dependencies:
+    "@sentry-internal/tracing" "7.108.0"
+    "@sentry/core" "7.108.0"
+    "@sentry/types" "7.108.0"
+    "@sentry/utils" "7.108.0"
+
+"@sentry/replay@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.108.0.tgz#baa679bd19b4e3729e607d3f84cff5048aeb3415"
+  integrity sha512-jo8fDOzcZJclP1+4n9jUtVxTlBFT9hXwxhAMrhrt70FV/nfmCtYQMD3bzIj79nwbhUtFP6pN39JH1o7Xqt1hxQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.108.0"
+    "@sentry/core" "7.108.0"
+    "@sentry/types" "7.108.0"
+    "@sentry/utils" "7.108.0"
+
+"@sentry/types@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.108.0.tgz#5ceb959c4dabe511fc441fec8c2465f2d624900f"
+  integrity sha512-bKtHITmBN3kqtqE5eVvL8mY8znM05vEodENwRpcm6TSrrBjC2RnwNWVwGstYDdHpNfFuKwC8mLY9bgMJcENo8g==
+
+"@sentry/utils@7.108.0":
+  version "7.108.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.108.0.tgz#0231042956aed2ef35809891592238530349dfd9"
+  integrity sha512-a45yEFD5qtgZaIFRAcFkG8C8lnDzn6t4LfLXuV4OafGAy/3ZAN3XN8wDnrruHkiUezSSANGsLg3bXaLW/JLvJw==
+  dependencies:
+    "@sentry/types" "7.108.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From e4e9f23278c48827758d608ab6396936404d0c0d Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 25 Mar 2024 16:11:30 +0000
Subject: [PATCH 229/239] fix: Stop Anr worker when app suspends (#858)

---
 src/main/integrations/anr.ts | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/main/integrations/anr.ts b/src/main/integrations/anr.ts
index 624868e1..a43479cf 100644
--- a/src/main/integrations/anr.ts
+++ b/src/main/integrations/anr.ts
@@ -1,6 +1,6 @@
 import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';
 import { anrIntegration as nodeAnrIntegration } from '@sentry/node';
-import { app } from 'electron';
+import { app, powerMonitor } from 'electron';
 
 import { ELECTRON_MAJOR_VERSION } from '../electron-normalize';
 
@@ -12,7 +12,7 @@ export const anrIntegration = defineIntegration((options: Parameters<typeof node
     throw new Error('Main process ANR detection requires Electron v22+');
   }
 
-  return nodeAnrIntegration({
+  const integration = nodeAnrIntegration({
     ...options,
     staticTags: {
       'event.environment': 'javascript',
@@ -22,6 +22,16 @@ export const anrIntegration = defineIntegration((options: Parameters<typeof node
     },
     appRootPath: app.getAppPath(),
   });
+
+  powerMonitor.on('suspend', () => {
+    integration.stopWorker();
+  });
+
+  powerMonitor.on('resume', () => {
+    integration.startWorker();
+  });
+
+  return integration;
 });
 
 /**

From c5d9ce23e21c8aa08b395f05d3f289856f2d9415 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 3 Apr 2024 17:07:59 +0200
Subject: [PATCH 230/239] feat: Update Sentry SDKs to v7.109.0 (#867)

---
 package.json        |  14 ++--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 190 ++++++++++++++++++++++----------------------
 3 files changed, 103 insertions(+), 103 deletions(-)

diff --git a/package.json b/package.json
index 5761706c..9f69cd6f 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.108.0",
-    "@sentry/core": "7.108.0",
-    "@sentry/node": "7.108.0",
-    "@sentry/types": "7.108.0",
-    "@sentry/utils": "7.108.0",
+    "@sentry/browser": "7.109.0",
+    "@sentry/core": "7.109.0",
+    "@sentry/node": "7.109.0",
+    "@sentry/types": "7.109.0",
+    "@sentry/utils": "7.109.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.108.0",
-    "@sentry-internal/typescript": "7.108.0",
+    "@sentry-internal/eslint-config-sdk": "7.109.0",
+    "@sentry-internal/typescript": "7.109.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 201d5e99..afba995d 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_108_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_109_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 177a0061..6a7b7c12 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.108.0.tgz#4ec2a06f5eda349f42af069f61d5e2cb6ff219c1"
-  integrity sha512-MsA4pzayvJZB9QtxlKjQabRFAOwAl1Z0Vd3v+dCA28H3ek59533m30TwcPtv6uOmHUXOcIqzpaF6SM564xlUoQ==
+"@sentry-internal/eslint-config-sdk@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.109.0.tgz#3ad12a060855956acec1c0a84f134e3be3ec8f41"
+  integrity sha512-nfxSIofPgj9QWvHahv8KTIj6eNhPLSLHkN6MRfXHkJYkVjF2QpTVFRCeV3Wz80/Z8/tMOvkrYJEVv+42tsWeWQ==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.108.0"
-    "@sentry-internal/typescript" "7.108.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.109.0"
+    "@sentry-internal/typescript" "7.109.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.108.0.tgz#42e65c8d470b4a55ea76cc8d5aff570f512edfe9"
-  integrity sha512-Od5cnoeQb2RUoYtjI062JTgcb6SRxlcD6++5INQDtEQjkBqNvThL+/GZ7b5wCjiaPsyPTbbAd1kEgzeVzYo4oQ==
+"@sentry-internal/eslint-plugin-sdk@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.109.0.tgz#0ba78e0d02d857312a95143b6cbbc92bf62e33ca"
+  integrity sha512-rsL3xWvJJPTPvmty8n2rdY6cJiQ9Bj2mVmMOPrMb82IA00fQazqxurloIPDDfFE25hsENZb/WxOBmczwKyPhJQ==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.108.0.tgz#7033352abd304f1383ec47640e056a0dfd5132b7"
-  integrity sha512-8JcgZEnk1uWrXJhsd3iRvFtEiVeaWOEhN0NZwhwQXHfvODqep6JtrkY1yCIyxbpA37aZmrPc2JhyotRERGfUjg==
-  dependencies:
-    "@sentry/core" "7.108.0"
-    "@sentry/types" "7.108.0"
-    "@sentry/utils" "7.108.0"
-
-"@sentry-internal/replay-canvas@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.108.0.tgz#641133c19c0e1c423617b8d791f53d6cd0b0a862"
-  integrity sha512-R5tvjGqWUV5vSk0N1eBgVW7wIADinrkfDEBZ9FyKP2mXHBobsyNGt30heJDEqYmVqluRqjU2NuIRapsnnrpGnA==
-  dependencies:
-    "@sentry/core" "7.108.0"
-    "@sentry/replay" "7.108.0"
-    "@sentry/types" "7.108.0"
-    "@sentry/utils" "7.108.0"
-
-"@sentry-internal/tracing@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.108.0.tgz#d1e660701fb860cfae72b6ebfa8fb267533421fa"
-  integrity sha512-zuK5XsTsb+U+hgn3SPetYDAogrXsM16U/LLoMW7+TlC6UjlHGYQvmX3o+M2vntejoU1QZS8m1bCAZSMWEypAEw==
-  dependencies:
-    "@sentry/core" "7.108.0"
-    "@sentry/types" "7.108.0"
-    "@sentry/utils" "7.108.0"
-
-"@sentry-internal/typescript@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.108.0.tgz#ea13a460e1d4c5a1eea939c85fa7d177d8d52b92"
-  integrity sha512-PXJgGg038sVSG4fl4a0Up1PPWLqTgFKTrAt+lawaRkDQT4nOS8dUGtzCMhYcgv6EsWArf16NF8I2UtmYHpW3oQ==
-
-"@sentry/browser@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.108.0.tgz#b95810bb6572b63781f253615896f5afb1a3a5c0"
-  integrity sha512-FNpzsdTvGvdHJMUelqEouUXMZU7jC+dpN7CdT6IoHVVFEkoAgrjMVUhXZoQ/dmCkdKWHmFSQhJ8Fm6V+e9Aq0A==
-  dependencies:
-    "@sentry-internal/feedback" "7.108.0"
-    "@sentry-internal/replay-canvas" "7.108.0"
-    "@sentry-internal/tracing" "7.108.0"
-    "@sentry/core" "7.108.0"
-    "@sentry/replay" "7.108.0"
-    "@sentry/types" "7.108.0"
-    "@sentry/utils" "7.108.0"
-
-"@sentry/core@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.108.0.tgz#a27e8d6f85f59c5730ce86071474f15ac899fde0"
-  integrity sha512-I/VNZCFgLASxHZaD0EtxZRM34WG9w2gozqgrKGNMzAymwmQ3K9g/1qmBy4e6iS3YRptb7J5UhQkZQHrcwBbjWQ==
-  dependencies:
-    "@sentry/types" "7.108.0"
-    "@sentry/utils" "7.108.0"
-
-"@sentry/node@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.108.0.tgz#ed113dc1d39aaae32f7e9f681dcea41cf28eb5f1"
-  integrity sha512-pMxc9txnDDkU4Z8k2Uw/DPSLPehNtWV3mjJ3+my0AMORGYrXLkJI93tddlE5z/7k+GEJdj1HsOLgxUN0OU+HGA==
-  dependencies:
-    "@sentry-internal/tracing" "7.108.0"
-    "@sentry/core" "7.108.0"
-    "@sentry/types" "7.108.0"
-    "@sentry/utils" "7.108.0"
-
-"@sentry/replay@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.108.0.tgz#baa679bd19b4e3729e607d3f84cff5048aeb3415"
-  integrity sha512-jo8fDOzcZJclP1+4n9jUtVxTlBFT9hXwxhAMrhrt70FV/nfmCtYQMD3bzIj79nwbhUtFP6pN39JH1o7Xqt1hxQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.108.0"
-    "@sentry/core" "7.108.0"
-    "@sentry/types" "7.108.0"
-    "@sentry/utils" "7.108.0"
-
-"@sentry/types@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.108.0.tgz#5ceb959c4dabe511fc441fec8c2465f2d624900f"
-  integrity sha512-bKtHITmBN3kqtqE5eVvL8mY8znM05vEodENwRpcm6TSrrBjC2RnwNWVwGstYDdHpNfFuKwC8mLY9bgMJcENo8g==
-
-"@sentry/utils@7.108.0":
-  version "7.108.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.108.0.tgz#0231042956aed2ef35809891592238530349dfd9"
-  integrity sha512-a45yEFD5qtgZaIFRAcFkG8C8lnDzn6t4LfLXuV4OafGAy/3ZAN3XN8wDnrruHkiUezSSANGsLg3bXaLW/JLvJw==
-  dependencies:
-    "@sentry/types" "7.108.0"
+"@sentry-internal/feedback@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.109.0.tgz#4657d7f36a1de3be466f42735d295e212b7eca11"
+  integrity sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ==
+  dependencies:
+    "@sentry/core" "7.109.0"
+    "@sentry/types" "7.109.0"
+    "@sentry/utils" "7.109.0"
+
+"@sentry-internal/replay-canvas@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.109.0.tgz#9a00857994a9487428296feed4a9ddf2d62bab84"
+  integrity sha512-Lh/K60kmloR6lkPUcQP0iamw7B/MdEUEx/ImAx4tUSMrLj+IoUEcq/ECgnnVyQkJq59+8nPEKrVLt7x6PUPEjw==
+  dependencies:
+    "@sentry/core" "7.109.0"
+    "@sentry/replay" "7.109.0"
+    "@sentry/types" "7.109.0"
+    "@sentry/utils" "7.109.0"
+
+"@sentry-internal/tracing@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.109.0.tgz#3effaa132c41a65378fa98146aea61228d528953"
+  integrity sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw==
+  dependencies:
+    "@sentry/core" "7.109.0"
+    "@sentry/types" "7.109.0"
+    "@sentry/utils" "7.109.0"
+
+"@sentry-internal/typescript@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.109.0.tgz#134b07ed0ac68af90cfe8e622e29fa35d98e08f1"
+  integrity sha512-Ui1lchy1CdP8iUwyAMn/99sycU3EGFcw2GaQ7zWPzEr39c4Qp3iSvfIK+RPZREWA6y8FKHrqU80Xtww5XxHoSA==
+
+"@sentry/browser@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.109.0.tgz#13b2623f43047f292cf7d6070128a7501e008693"
+  integrity sha512-yx+OFG+Ab9qUDDgV9ZDv8M9O9Mqr0fjKta/LMlWALYLjzkMvxsPlRPFj7oMBlHqOTVLDeg7lFYmsA8wyWQ8Z8g==
+  dependencies:
+    "@sentry-internal/feedback" "7.109.0"
+    "@sentry-internal/replay-canvas" "7.109.0"
+    "@sentry-internal/tracing" "7.109.0"
+    "@sentry/core" "7.109.0"
+    "@sentry/replay" "7.109.0"
+    "@sentry/types" "7.109.0"
+    "@sentry/utils" "7.109.0"
+
+"@sentry/core@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.109.0.tgz#7a02f4af4a676950f6555f552a2a232d4458fcd5"
+  integrity sha512-xwD4U0IlvvlE/x/g/W1I8b4Cfb16SsCMmiEuBf6XxvAa3OfWBxKoqLifb3GyrbxMC4LbIIZCN/SvLlnGJPgszA==
+  dependencies:
+    "@sentry/types" "7.109.0"
+    "@sentry/utils" "7.109.0"
+
+"@sentry/node@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.109.0.tgz#dbf152212e42a9b1648ff758ec5bffcb6bb0fa49"
+  integrity sha512-tqMNAES4X/iBl1eZRCmc29p//0id01FBLEiesNo5nk6ECl6/SaGMFAEwu1gsn90h/Bjgr04slwFOS4cR45V2PQ==
+  dependencies:
+    "@sentry-internal/tracing" "7.109.0"
+    "@sentry/core" "7.109.0"
+    "@sentry/types" "7.109.0"
+    "@sentry/utils" "7.109.0"
+
+"@sentry/replay@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.109.0.tgz#f50fb0140c81fce660c44cc93c35988898b8348b"
+  integrity sha512-hCDjbTNO7ErW/XsaBXlyHFsUhneyBUdTec1Swf98TFEfVqNsTs6q338aUcaR8dGRLbLrJ9YU9D1qKq++v5h2CA==
+  dependencies:
+    "@sentry-internal/tracing" "7.109.0"
+    "@sentry/core" "7.109.0"
+    "@sentry/types" "7.109.0"
+    "@sentry/utils" "7.109.0"
+
+"@sentry/types@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.109.0.tgz#d8778358114ed05be734661cc9e1e261f4494947"
+  integrity sha512-egCBnDv3YpVFoNzRLdP0soVrxVLCQ+rovREKJ1sw3rA2/MFH9WJ+DZZexsX89yeAFzy1IFsCp7/dEqudusml6g==
+
+"@sentry/utils@7.109.0":
+  version "7.109.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.109.0.tgz#7078e1400197abc1b0c436679bef980639500a86"
+  integrity sha512-3RjxMOLMBwZ5VSiH84+o/3NY2An4Zldjz0EbfEQNRY9yffRiCPJSQiCJID8EoylCFOh/PAhPimBhqbtWJxX6iw==
+  dependencies:
+    "@sentry/types" "7.109.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 3124d366c36de716a5d8bf842c525342cbd91e3f Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 3 Apr 2024 18:27:09 +0200
Subject: [PATCH 231/239] meta: Changelog for 4.22.0 release (#868)

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index dc94c5b2..fbe7763a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 4.22.0
+
+- feat: Update from [v7.107.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.107.0) to
+  [v7.109.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.109.0) of JavaScript SDKs (#856, #867)
+- fix: Stop Anr worker when app suspends (#858)
+
 ## 4.21.0
 
 - feat: Update from [v7.105.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.105.0) to

From a71fa2dee63b061628e9cd3071e1969ebf2968ed Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Wed, 3 Apr 2024 16:28:09 +0000
Subject: [PATCH 232/239] release: 4.22.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 9f69cd6f..49252b3f 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.21.0",
+  "version": "4.22.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",
@@ -106,4 +106,4 @@
     "node": "18.12.1",
     "yarn": "1.22.19"
   }
-}
\ No newline at end of file
+}

From f5826ed520e8b8cb610926152cd2b6b3308260a0 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 18 Apr 2024 14:18:25 +0200
Subject: [PATCH 233/239] feat: Update Sentry SKDs to v7.110.0 (#878)

---
 package.json          |  14 ++--
 src/index.ts          |   1 +
 src/main/index.ts     |   1 +
 src/renderer/index.ts |   1 +
 src/renderer/sdk.ts   |   2 +-
 yarn.lock             | 190 +++++++++++++++++++++---------------------
 6 files changed, 106 insertions(+), 103 deletions(-)

diff --git a/package.json b/package.json
index 49252b3f..45e106c0 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.109.0",
-    "@sentry/core": "7.109.0",
-    "@sentry/node": "7.109.0",
-    "@sentry/types": "7.109.0",
-    "@sentry/utils": "7.109.0",
+    "@sentry/browser": "7.110.0",
+    "@sentry/core": "7.110.0",
+    "@sentry/node": "7.110.0",
+    "@sentry/types": "7.110.0",
+    "@sentry/utils": "7.110.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.109.0",
-    "@sentry-internal/typescript": "7.109.0",
+    "@sentry-internal/eslint-config-sdk": "7.110.0",
+    "@sentry-internal/typescript": "7.110.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/index.ts b/src/index.ts
index 053b9368..d5874bcd 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -48,6 +48,7 @@ export {
   getCurrentScope,
   getGlobalScope,
   getIsolationScope,
+  // eslint-disable-next-line deprecation/deprecation
   Hub,
   // eslint-disable-next-line deprecation/deprecation
   lastEventId,
diff --git a/src/main/index.ts b/src/main/index.ts
index 96e6a1f9..56fca272 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -49,6 +49,7 @@ export {
   getCurrentScope,
   getGlobalScope,
   getIsolationScope,
+  // eslint-disable-next-line deprecation/deprecation
   Hub,
   // eslint-disable-next-line deprecation/deprecation
   makeMain,
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 73f4c7d1..5514f0f2 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -46,6 +46,7 @@ export {
   getCurrentScope,
   getGlobalScope,
   getIsolationScope,
+  // eslint-disable-next-line deprecation/deprecation
   Hub,
   // eslint-disable-next-line deprecation/deprecation
   makeMain,
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index afba995d..7f104723 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_109_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_110_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index 6a7b7c12..cafc3f17 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.109.0.tgz#3ad12a060855956acec1c0a84f134e3be3ec8f41"
-  integrity sha512-nfxSIofPgj9QWvHahv8KTIj6eNhPLSLHkN6MRfXHkJYkVjF2QpTVFRCeV3Wz80/Z8/tMOvkrYJEVv+42tsWeWQ==
+"@sentry-internal/eslint-config-sdk@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.110.0.tgz#d928ba988fab46a52a6499e852fe2521ba29f1bc"
+  integrity sha512-SC/ybGO6a+dzNkMIhTkX5nsOLT30U3ZJ3K3SV7PDnIqDlSdI1tZyjct/9xUqC78Ajnbo/6j4aX37lB28jMLeFA==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.109.0"
-    "@sentry-internal/typescript" "7.109.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.110.0"
+    "@sentry-internal/typescript" "7.110.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,98 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.109.0.tgz#0ba78e0d02d857312a95143b6cbbc92bf62e33ca"
-  integrity sha512-rsL3xWvJJPTPvmty8n2rdY6cJiQ9Bj2mVmMOPrMb82IA00fQazqxurloIPDDfFE25hsENZb/WxOBmczwKyPhJQ==
+"@sentry-internal/eslint-plugin-sdk@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.110.0.tgz#4f6d72cd3d33e6c3436bd872423bc1edd2ab563d"
+  integrity sha512-45tBX57Qbv+1V54IYl1lngAkjf5ycaP0e1br7yeNRLidRW2vNl/6nfWw4BO59ZNCJoE98cqeijHHYQvzPZKmzA==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.109.0.tgz#4657d7f36a1de3be466f42735d295e212b7eca11"
-  integrity sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ==
-  dependencies:
-    "@sentry/core" "7.109.0"
-    "@sentry/types" "7.109.0"
-    "@sentry/utils" "7.109.0"
-
-"@sentry-internal/replay-canvas@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.109.0.tgz#9a00857994a9487428296feed4a9ddf2d62bab84"
-  integrity sha512-Lh/K60kmloR6lkPUcQP0iamw7B/MdEUEx/ImAx4tUSMrLj+IoUEcq/ECgnnVyQkJq59+8nPEKrVLt7x6PUPEjw==
-  dependencies:
-    "@sentry/core" "7.109.0"
-    "@sentry/replay" "7.109.0"
-    "@sentry/types" "7.109.0"
-    "@sentry/utils" "7.109.0"
-
-"@sentry-internal/tracing@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.109.0.tgz#3effaa132c41a65378fa98146aea61228d528953"
-  integrity sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw==
-  dependencies:
-    "@sentry/core" "7.109.0"
-    "@sentry/types" "7.109.0"
-    "@sentry/utils" "7.109.0"
-
-"@sentry-internal/typescript@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.109.0.tgz#134b07ed0ac68af90cfe8e622e29fa35d98e08f1"
-  integrity sha512-Ui1lchy1CdP8iUwyAMn/99sycU3EGFcw2GaQ7zWPzEr39c4Qp3iSvfIK+RPZREWA6y8FKHrqU80Xtww5XxHoSA==
-
-"@sentry/browser@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.109.0.tgz#13b2623f43047f292cf7d6070128a7501e008693"
-  integrity sha512-yx+OFG+Ab9qUDDgV9ZDv8M9O9Mqr0fjKta/LMlWALYLjzkMvxsPlRPFj7oMBlHqOTVLDeg7lFYmsA8wyWQ8Z8g==
-  dependencies:
-    "@sentry-internal/feedback" "7.109.0"
-    "@sentry-internal/replay-canvas" "7.109.0"
-    "@sentry-internal/tracing" "7.109.0"
-    "@sentry/core" "7.109.0"
-    "@sentry/replay" "7.109.0"
-    "@sentry/types" "7.109.0"
-    "@sentry/utils" "7.109.0"
-
-"@sentry/core@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.109.0.tgz#7a02f4af4a676950f6555f552a2a232d4458fcd5"
-  integrity sha512-xwD4U0IlvvlE/x/g/W1I8b4Cfb16SsCMmiEuBf6XxvAa3OfWBxKoqLifb3GyrbxMC4LbIIZCN/SvLlnGJPgszA==
-  dependencies:
-    "@sentry/types" "7.109.0"
-    "@sentry/utils" "7.109.0"
-
-"@sentry/node@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.109.0.tgz#dbf152212e42a9b1648ff758ec5bffcb6bb0fa49"
-  integrity sha512-tqMNAES4X/iBl1eZRCmc29p//0id01FBLEiesNo5nk6ECl6/SaGMFAEwu1gsn90h/Bjgr04slwFOS4cR45V2PQ==
-  dependencies:
-    "@sentry-internal/tracing" "7.109.0"
-    "@sentry/core" "7.109.0"
-    "@sentry/types" "7.109.0"
-    "@sentry/utils" "7.109.0"
-
-"@sentry/replay@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.109.0.tgz#f50fb0140c81fce660c44cc93c35988898b8348b"
-  integrity sha512-hCDjbTNO7ErW/XsaBXlyHFsUhneyBUdTec1Swf98TFEfVqNsTs6q338aUcaR8dGRLbLrJ9YU9D1qKq++v5h2CA==
-  dependencies:
-    "@sentry-internal/tracing" "7.109.0"
-    "@sentry/core" "7.109.0"
-    "@sentry/types" "7.109.0"
-    "@sentry/utils" "7.109.0"
-
-"@sentry/types@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.109.0.tgz#d8778358114ed05be734661cc9e1e261f4494947"
-  integrity sha512-egCBnDv3YpVFoNzRLdP0soVrxVLCQ+rovREKJ1sw3rA2/MFH9WJ+DZZexsX89yeAFzy1IFsCp7/dEqudusml6g==
-
-"@sentry/utils@7.109.0":
-  version "7.109.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.109.0.tgz#7078e1400197abc1b0c436679bef980639500a86"
-  integrity sha512-3RjxMOLMBwZ5VSiH84+o/3NY2An4Zldjz0EbfEQNRY9yffRiCPJSQiCJID8EoylCFOh/PAhPimBhqbtWJxX6iw==
-  dependencies:
-    "@sentry/types" "7.109.0"
+"@sentry-internal/feedback@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.110.0.tgz#7103a08cd6bfb43583087d7476a5f24c5857cc22"
+  integrity sha512-hrfWa3WkSOiBO5Srcr1j4kuGOlbsQic+REpLOofllVIs56DOo9+Aj9svxT+dcvZERv/nlFSV/E0BfGy9g08IEg==
+  dependencies:
+    "@sentry/core" "7.110.0"
+    "@sentry/types" "7.110.0"
+    "@sentry/utils" "7.110.0"
+
+"@sentry-internal/replay-canvas@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.110.0.tgz#af21b56157f44c44a2eedf4326ef37f4ea440fa8"
+  integrity sha512-SNa+AfyfX+vc6Xw0pIfDsa5Qnc9cpexU6M2D19gadtVhmep7qoFBuhBVZrSv6BtdCxvrb5EyYsHYGfjQdIDcvg==
+  dependencies:
+    "@sentry/core" "7.110.0"
+    "@sentry/replay" "7.110.0"
+    "@sentry/types" "7.110.0"
+    "@sentry/utils" "7.110.0"
+
+"@sentry-internal/tracing@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.110.0.tgz#00f2086b0efb8dd5a67831074e52b176aa542d32"
+  integrity sha512-IIHHa9e/mE7uOMJfNELI8adyoELxOy6u6TNCn5t6fphmq84w8FTc9adXkG/FY2AQpglkIvlILojfMROFB2aaAQ==
+  dependencies:
+    "@sentry/core" "7.110.0"
+    "@sentry/types" "7.110.0"
+    "@sentry/utils" "7.110.0"
+
+"@sentry-internal/typescript@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.110.0.tgz#643868b601fac03cfdc36b2fb8c1b3eececee1d0"
+  integrity sha512-ANRip5PD184omixtJtpI7c25oCW8wmYi7Suk0nV4kY0X1IIxMEHZhTBWnSBadnJeofjh/PnZzvYoZLePb8RGOA==
+
+"@sentry/browser@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.110.0.tgz#40900d76a8f423a7163a594ec9267a2e0ebd8a5b"
+  integrity sha512-gIxedVm6ZgkjQfgCDgLWJgAsolq6OxV8hQ2j1+RaDL2RngvelFo/vlX5f2sD6EbjVp77Cri8u5GkMJF+v4p84g==
+  dependencies:
+    "@sentry-internal/feedback" "7.110.0"
+    "@sentry-internal/replay-canvas" "7.110.0"
+    "@sentry-internal/tracing" "7.110.0"
+    "@sentry/core" "7.110.0"
+    "@sentry/replay" "7.110.0"
+    "@sentry/types" "7.110.0"
+    "@sentry/utils" "7.110.0"
+
+"@sentry/core@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.110.0.tgz#2945d3ac0ef116ed313fbfb9da4f483b66fe5bca"
+  integrity sha512-g4suCQO94mZsKVaAbyD1zLFC5YSuBQCIPHXx9fdgtfoPib7BWjWWePkllkrvsKAv4u8Oq05RfnKOhOMRHpOKqg==
+  dependencies:
+    "@sentry/types" "7.110.0"
+    "@sentry/utils" "7.110.0"
+
+"@sentry/node@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.110.0.tgz#c75a7568e641ddb48d1636e62aaa37e9589e8806"
+  integrity sha512-YPfweCSzo/omnx5q1xOEZfI8Em3jnPqj7OM4ObXmoSKEK+kM1oUF3BTRzw5BJOaOCSTBFY1RAsGyfVIyrwxWnA==
+  dependencies:
+    "@sentry-internal/tracing" "7.110.0"
+    "@sentry/core" "7.110.0"
+    "@sentry/types" "7.110.0"
+    "@sentry/utils" "7.110.0"
+
+"@sentry/replay@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.110.0.tgz#e185c88cec573724b46b79ada7ef5a7098acd1b6"
+  integrity sha512-EEpGPf3iBJjWejvoxKLVMnLtLNwPTUxHJV1oxUkbcSi3B/tG5hW7LArYDjAcvkfa4VmA8JLCwj2vYU5MQ8tj6g==
+  dependencies:
+    "@sentry-internal/tracing" "7.110.0"
+    "@sentry/core" "7.110.0"
+    "@sentry/types" "7.110.0"
+    "@sentry/utils" "7.110.0"
+
+"@sentry/types@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.110.0.tgz#c3f252b008cab905097fc71e174191f20bdaf4f3"
+  integrity sha512-DqYBLyE8thC5P5MuPn+sj8tL60nCd/f5cerFFPcudn5nJ4Zs1eI6lKlwwyHYTEu5c4KFjCB0qql6kXfwAHmTyA==
+
+"@sentry/utils@7.110.0":
+  version "7.110.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.110.0.tgz#68ef59359d608a1a6a7205b780196a042ad73ab2"
+  integrity sha512-VBsdLLN+5tf73fhf/Cm7JIsUJ6y9DkJj8h4I6Mxx0rszrvOyH6S5px40K+V4jdLBzMEvVinC7q2Cbf1YM18BSw==
+  dependencies:
+    "@sentry/types" "7.110.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"

From 68023643e8162b007279cf497ee56f06c574e1a7 Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Thu, 18 Apr 2024 16:03:29 +0200
Subject: [PATCH 234/239] meta: Changelog for v4.23.0 release (#882)

---
 CHANGELOG.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index fbe7763a..20ec6f00 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## Unreleased
 
+## 4.23.0
+
+- feat: Update from [v7.109.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.109.0) to
+  [v7.110.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.110.0) of JavaScript SDKs (#878)
+
 ## 4.22.0
 
 - feat: Update from [v7.107.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.107.0) to

From 9f1b48179607bbf3629b867e934a253c3d3f2866 Mon Sep 17 00:00:00 2001
From: Abhijeet Prasad <aprasad@sentry.io>
Date: Thu, 18 Apr 2024 12:28:55 -0400
Subject: [PATCH 235/239] release: 4.23.0 (#883)

Co-authored-by: getsentry-bot <bot@sentry.io>
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 45e106c0..f81dfa4d 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.22.0",
+  "version": "4.23.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",

From d248e073c318ec471021b3b431d5249ca905e2af Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Mon, 22 Apr 2024 22:52:52 +0200
Subject: [PATCH 236/239] fix: Missing replay scope (v4) (#887)

---
 src/common/normalize.ts                                   | 6 ++++++
 test/e2e/test-apps/other/browser-replay/event-replay.json | 7 ++++++-
 test/e2e/test-apps/other/browser-replay/src/index.html    | 2 ++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/common/normalize.ts b/src/common/normalize.ts
index 26988187..04376ce2 100644
--- a/src/common/normalize.ts
+++ b/src/common/normalize.ts
@@ -1,3 +1,4 @@
+import { getCurrentScope } from '@sentry/node';
 import { Envelope, Event, Profile, ReplayEvent } from '@sentry/types';
 import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem, normalizeUrlToBase } from '@sentry/utils';
 
@@ -72,6 +73,11 @@ export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: stri
       isReplay = true;
       const [headers, event] = item as [{ type: 'replay_event' }, ReplayEvent];
 
+      const currentScope = getCurrentScope().getScopeData();
+      event.breadcrumbs = currentScope.breadcrumbs;
+      event.tags = currentScope.tags;
+      event.user = currentScope.user;
+
       if (Array.isArray(event.urls)) {
         event.urls = event.urls.map((url) => normalizeUrlToBase(url, basePath));
       }
diff --git a/test/e2e/test-apps/other/browser-replay/event-replay.json b/test/e2e/test-apps/other/browser-replay/event-replay.json
index e5389c24..435b10b9 100644
--- a/test/e2e/test-apps/other/browser-replay/event-replay.json
+++ b/test/e2e/test-apps/other/browser-replay/event-replay.json
@@ -22,7 +22,12 @@
     "request": {
       "url": "app:///src/index.html"
     },
-    "platform": "javascript"
+    "platform": "javascript",
+    "breadcrumbs": [
+      {
+        "message": "Some renderer message"
+      }
+    ]
   },
   "attachments": [],
   "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4",
diff --git a/test/e2e/test-apps/other/browser-replay/src/index.html b/test/e2e/test-apps/other/browser-replay/src/index.html
index 352e174c..41b5fb8e 100644
--- a/test/e2e/test-apps/other/browser-replay/src/index.html
+++ b/test/e2e/test-apps/other/browser-replay/src/index.html
@@ -14,6 +14,8 @@
         replaysOnErrorSampleRate: 1,
       });
 
+      console.log('Some renderer message');
+
       setTimeout(() => {
         throw new Error('Some renderer error');
       }, 1000);

From d180989ce9c7600bb51ebc6509403da2d855aeae Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Tue, 23 Apr 2024 16:50:45 +0200
Subject: [PATCH 237/239] feat: Update to v7.112.0 of the JavaScript SDKs
 (#888)

---
 package.json        |  14 +--
 src/renderer/sdk.ts |   2 +-
 yarn.lock           | 221 +++++++++++++++++++++++++-------------------
 3 files changed, 134 insertions(+), 103 deletions(-)

diff --git a/package.json b/package.json
index f81dfa4d..e6de65fc 100644
--- a/package.json
+++ b/package.json
@@ -55,19 +55,19 @@
     "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts"
   },
   "dependencies": {
-    "@sentry/browser": "7.110.0",
-    "@sentry/core": "7.110.0",
-    "@sentry/node": "7.110.0",
-    "@sentry/types": "7.110.0",
-    "@sentry/utils": "7.110.0",
+    "@sentry/browser": "7.112.0",
+    "@sentry/core": "7.112.0",
+    "@sentry/node": "7.112.0",
+    "@sentry/types": "7.112.0",
+    "@sentry/utils": "7.112.0",
     "deepmerge": "4.3.0",
     "tslib": "^2.5.0"
   },
   "devDependencies": {
     "@rollup/plugin-node-resolve": "^15.2.1",
     "@rollup/plugin-typescript": "^11.1.4",
-    "@sentry-internal/eslint-config-sdk": "7.110.0",
-    "@sentry-internal/typescript": "7.110.0",
+    "@sentry-internal/eslint-config-sdk": "7.112.0",
+    "@sentry-internal/typescript": "7.112.0",
     "@types/busboy": "^0.2.3",
     "@types/chai": "^4.2.10",
     "@types/chai-as-promised": "^7.1.5",
diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts
index 7f104723..28b1bf50 100644
--- a/src/renderer/sdk.ts
+++ b/src/renderer/sdk.ts
@@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions {
 export function init<O extends ElectronRendererOptions>(
   options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O,
   // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches
-  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_110_0: O) => void = browserInit,
+  originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_112_0: O) => void = browserInit,
 ): void {
   ensureProcess('renderer');
 
diff --git a/yarn.lock b/yarn.lock
index cafc3f17..dc21f233 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -164,13 +164,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@sentry-internal/eslint-config-sdk@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.110.0.tgz#d928ba988fab46a52a6499e852fe2521ba29f1bc"
-  integrity sha512-SC/ybGO6a+dzNkMIhTkX5nsOLT30U3ZJ3K3SV7PDnIqDlSdI1tZyjct/9xUqC78Ajnbo/6j4aX37lB28jMLeFA==
+"@sentry-internal/eslint-config-sdk@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.112.0.tgz#e6cdad04f7fdf6eebc672836fc90d3cdfe9b6571"
+  integrity sha512-bkWmtRuwWv1NLOB6DX0bFb+NdiwInamvNzOCiu+Qa2i1+wqJNMT4b8babol4+YXfvVEJN58/iG8D3EMlVAWIlg==
   dependencies:
-    "@sentry-internal/eslint-plugin-sdk" "7.110.0"
-    "@sentry-internal/typescript" "7.110.0"
+    "@sentry-internal/eslint-plugin-sdk" "7.112.0"
+    "@sentry-internal/typescript" "7.112.0"
     "@typescript-eslint/eslint-plugin" "^5.48.0"
     "@typescript-eslint/parser" "^5.48.0"
     eslint-config-prettier "^6.11.0"
@@ -180,98 +180,110 @@
     eslint-plugin-jsdoc "^30.0.3"
     eslint-plugin-simple-import-sort "^5.0.3"
 
-"@sentry-internal/eslint-plugin-sdk@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.110.0.tgz#4f6d72cd3d33e6c3436bd872423bc1edd2ab563d"
-  integrity sha512-45tBX57Qbv+1V54IYl1lngAkjf5ycaP0e1br7yeNRLidRW2vNl/6nfWw4BO59ZNCJoE98cqeijHHYQvzPZKmzA==
+"@sentry-internal/eslint-plugin-sdk@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.112.0.tgz#83cb175c581baa5698eb15b4d8e8ca8ccb0047f3"
+  integrity sha512-n1lhJZf7Q9XCv7LIT+GjG2pNsxGlW1mguzrflM7NuIxOT2CUDmWgFvszaApjtq2gPj7I8sphklSf1eyH7KaR/g==
   dependencies:
     requireindex "~1.1.0"
 
-"@sentry-internal/feedback@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.110.0.tgz#7103a08cd6bfb43583087d7476a5f24c5857cc22"
-  integrity sha512-hrfWa3WkSOiBO5Srcr1j4kuGOlbsQic+REpLOofllVIs56DOo9+Aj9svxT+dcvZERv/nlFSV/E0BfGy9g08IEg==
-  dependencies:
-    "@sentry/core" "7.110.0"
-    "@sentry/types" "7.110.0"
-    "@sentry/utils" "7.110.0"
-
-"@sentry-internal/replay-canvas@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.110.0.tgz#af21b56157f44c44a2eedf4326ef37f4ea440fa8"
-  integrity sha512-SNa+AfyfX+vc6Xw0pIfDsa5Qnc9cpexU6M2D19gadtVhmep7qoFBuhBVZrSv6BtdCxvrb5EyYsHYGfjQdIDcvg==
-  dependencies:
-    "@sentry/core" "7.110.0"
-    "@sentry/replay" "7.110.0"
-    "@sentry/types" "7.110.0"
-    "@sentry/utils" "7.110.0"
-
-"@sentry-internal/tracing@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.110.0.tgz#00f2086b0efb8dd5a67831074e52b176aa542d32"
-  integrity sha512-IIHHa9e/mE7uOMJfNELI8adyoELxOy6u6TNCn5t6fphmq84w8FTc9adXkG/FY2AQpglkIvlILojfMROFB2aaAQ==
-  dependencies:
-    "@sentry/core" "7.110.0"
-    "@sentry/types" "7.110.0"
-    "@sentry/utils" "7.110.0"
-
-"@sentry-internal/typescript@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.110.0.tgz#643868b601fac03cfdc36b2fb8c1b3eececee1d0"
-  integrity sha512-ANRip5PD184omixtJtpI7c25oCW8wmYi7Suk0nV4kY0X1IIxMEHZhTBWnSBadnJeofjh/PnZzvYoZLePb8RGOA==
-
-"@sentry/browser@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.110.0.tgz#40900d76a8f423a7163a594ec9267a2e0ebd8a5b"
-  integrity sha512-gIxedVm6ZgkjQfgCDgLWJgAsolq6OxV8hQ2j1+RaDL2RngvelFo/vlX5f2sD6EbjVp77Cri8u5GkMJF+v4p84g==
-  dependencies:
-    "@sentry-internal/feedback" "7.110.0"
-    "@sentry-internal/replay-canvas" "7.110.0"
-    "@sentry-internal/tracing" "7.110.0"
-    "@sentry/core" "7.110.0"
-    "@sentry/replay" "7.110.0"
-    "@sentry/types" "7.110.0"
-    "@sentry/utils" "7.110.0"
-
-"@sentry/core@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.110.0.tgz#2945d3ac0ef116ed313fbfb9da4f483b66fe5bca"
-  integrity sha512-g4suCQO94mZsKVaAbyD1zLFC5YSuBQCIPHXx9fdgtfoPib7BWjWWePkllkrvsKAv4u8Oq05RfnKOhOMRHpOKqg==
-  dependencies:
-    "@sentry/types" "7.110.0"
-    "@sentry/utils" "7.110.0"
-
-"@sentry/node@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.110.0.tgz#c75a7568e641ddb48d1636e62aaa37e9589e8806"
-  integrity sha512-YPfweCSzo/omnx5q1xOEZfI8Em3jnPqj7OM4ObXmoSKEK+kM1oUF3BTRzw5BJOaOCSTBFY1RAsGyfVIyrwxWnA==
-  dependencies:
-    "@sentry-internal/tracing" "7.110.0"
-    "@sentry/core" "7.110.0"
-    "@sentry/types" "7.110.0"
-    "@sentry/utils" "7.110.0"
-
-"@sentry/replay@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.110.0.tgz#e185c88cec573724b46b79ada7ef5a7098acd1b6"
-  integrity sha512-EEpGPf3iBJjWejvoxKLVMnLtLNwPTUxHJV1oxUkbcSi3B/tG5hW7LArYDjAcvkfa4VmA8JLCwj2vYU5MQ8tj6g==
-  dependencies:
-    "@sentry-internal/tracing" "7.110.0"
-    "@sentry/core" "7.110.0"
-    "@sentry/types" "7.110.0"
-    "@sentry/utils" "7.110.0"
-
-"@sentry/types@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.110.0.tgz#c3f252b008cab905097fc71e174191f20bdaf4f3"
-  integrity sha512-DqYBLyE8thC5P5MuPn+sj8tL60nCd/f5cerFFPcudn5nJ4Zs1eI6lKlwwyHYTEu5c4KFjCB0qql6kXfwAHmTyA==
-
-"@sentry/utils@7.110.0":
-  version "7.110.0"
-  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.110.0.tgz#68ef59359d608a1a6a7205b780196a042ad73ab2"
-  integrity sha512-VBsdLLN+5tf73fhf/Cm7JIsUJ6y9DkJj8h4I6Mxx0rszrvOyH6S5px40K+V4jdLBzMEvVinC7q2Cbf1YM18BSw==
-  dependencies:
-    "@sentry/types" "7.110.0"
+"@sentry-internal/feedback@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.112.0.tgz#3dd9ccf7a57fe6a0d643a4ae534dcd0f346d607c"
+  integrity sha512-aqndxnTvZnqo/uUhuWLNWY/0W3zOxNs9FofLYi1SK5+QzMqDIyFY1dc9+ZqQH3/9GIlEGao+zveGAHeUEtpE8g==
+  dependencies:
+    "@sentry/core" "7.112.0"
+    "@sentry/types" "7.112.0"
+    "@sentry/utils" "7.112.0"
+
+"@sentry-internal/replay-canvas@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.112.0.tgz#339d4cbf97c7a1573402459c700331b3375b0de7"
+  integrity sha512-DwpGY5oZf0ab4Jm9HtM8fB3xqnpAcxBKORqiVHZizz7eo0arrb1n9HCXcxsRNNOAuMRBS8aEHKberfdL6rYpyw==
+  dependencies:
+    "@sentry/core" "7.112.0"
+    "@sentry/replay" "7.112.0"
+    "@sentry/types" "7.112.0"
+    "@sentry/utils" "7.112.0"
+
+"@sentry-internal/tracing@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.112.0.tgz#bf77cbf613a95379e6ae4dfe0f53bfe445cd32b6"
+  integrity sha512-PkA3NaSg4nTWp9pwVsV9x0EBiY0pEAnIboIpMuLGE5MJ/FL10NC5Fn1GPebcxNnOou62dM7P/z7Wtcm8czAn6A==
+  dependencies:
+    "@sentry/core" "7.112.0"
+    "@sentry/types" "7.112.0"
+    "@sentry/utils" "7.112.0"
+
+"@sentry-internal/typescript@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.112.0.tgz#9f7e26903f1c15c60a936b46dd665337ef3fb90d"
+  integrity sha512-f7tAj2/VZVkesrmk36teyV1ew3NmNe5M47ODPMZvDwxItAIfOpxwrnu90QGyXEpIrv/SaE332P1Q+dcARwuU5A==
+
+"@sentry/browser@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.112.0.tgz#9d20bb62f848738c0711cdd2c01a122bac917b37"
+  integrity sha512-xqxtlQ/GMHxYcJYAhWR0ELO4kCnQV9GuIcBUEHlU/mYbPBDPxNYFzXkoz3514DBKxRVTHDkVle6vLuG0yKvXsg==
+  dependencies:
+    "@sentry-internal/feedback" "7.112.0"
+    "@sentry-internal/replay-canvas" "7.112.0"
+    "@sentry-internal/tracing" "7.112.0"
+    "@sentry/core" "7.112.0"
+    "@sentry/integrations" "7.112.0"
+    "@sentry/replay" "7.112.0"
+    "@sentry/types" "7.112.0"
+    "@sentry/utils" "7.112.0"
+
+"@sentry/core@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.112.0.tgz#081516c160c1e35ebb09d2110cee84a4c84a23d5"
+  integrity sha512-q4K0fTULXMf9vb0Je6qFwQyVjfMvuPiKRRvRHcpWvWudV7oTcfPixlbbIQaj3OiY3nrjk5q86hktqboI/Z6ISw==
+  dependencies:
+    "@sentry/types" "7.112.0"
+    "@sentry/utils" "7.112.0"
+
+"@sentry/integrations@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.112.0.tgz#bfe2ec6bac6228ef1b2f31e6484131283e654599"
+  integrity sha512-brN6eZkXuz1e/OKhMGJsAZjc0cUU+5G+LQWet+gGXWVGM2v7uY7mKDHr5Yl/c8WxeJBurjJzJn7YmtmR9++ZKQ==
+  dependencies:
+    "@sentry/core" "7.112.0"
+    "@sentry/types" "7.112.0"
+    "@sentry/utils" "7.112.0"
+    localforage "^1.8.1"
+
+"@sentry/node@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.112.0.tgz#ab32ac0d0c1908bd39484123e30024029a313b9c"
+  integrity sha512-Me0Um3PbPQADHhm5zJ1EM4/me+i1OMT3w+1ZUgkPGX+2Wtqfp0djHF/SzCOL45X1IR+YLVrcCTpyAWRhPZAdVw==
+  dependencies:
+    "@sentry-internal/tracing" "7.112.0"
+    "@sentry/core" "7.112.0"
+    "@sentry/integrations" "7.112.0"
+    "@sentry/types" "7.112.0"
+    "@sentry/utils" "7.112.0"
+
+"@sentry/replay@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.112.0.tgz#ddd0a3c1d93456fbb189ffe625cbb07456a84b27"
+  integrity sha512-uP38yQpYKdU9onJEl77nSJslajXMbTLp3j+8EK4tNnXDMv+yDnSouODEdHQyX9fajKHsFi/FjjOIrVujR0Qd7w==
+  dependencies:
+    "@sentry-internal/tracing" "7.112.0"
+    "@sentry/core" "7.112.0"
+    "@sentry/types" "7.112.0"
+    "@sentry/utils" "7.112.0"
+
+"@sentry/types@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.112.0.tgz#1bd482e21db854e0235875bc57d9649e2bd07ba1"
+  integrity sha512-ASonavVCSrgDjMyWjuNMSytKMGYJq7d/1+IoBJsQFLgLe1gLIXuDNbhfUAM4A+muQUGZepV9iRX4ZYhiROMHVQ==
+
+"@sentry/utils@7.112.0":
+  version "7.112.0"
+  resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.112.0.tgz#e9f09d63148f30a452905c9079de78fb52b3af9c"
+  integrity sha512-dNGcNWKoJE9VwIAZxQsqC6/7BC+8wn1rT7Km9S8xltcjhRvaK4n3QZwXoNLHjNWT0mS2lZaFyRx2hsHjblQqLg==
+  dependencies:
+    "@sentry/types" "7.112.0"
 
 "@sindresorhus/is@^4.0.0":
   version "4.6.0"
@@ -2225,6 +2237,11 @@ ignore@^5.2.0:
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
   integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
 
+immediate@~3.0.5:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
+  integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
+
 import-fresh@^3.0.0, import-fresh@^3.2.1:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@@ -2610,6 +2627,13 @@ levn@^0.4.1:
     prelude-ls "^1.2.1"
     type-check "~0.4.0"
 
+lie@3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
+  integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==
+  dependencies:
+    immediate "~3.0.5"
+
 load-json-file@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
@@ -2620,6 +2644,13 @@ load-json-file@^4.0.0:
     pify "^3.0.0"
     strip-bom "^3.0.0"
 
+localforage@^1.8.1:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4"
+  integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==
+  dependencies:
+    lie "3.1.1"
+
 locate-path@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"

From 8d0abdc2a78706b3a7a39ee218aee1aeb4332a3e Mon Sep 17 00:00:00 2001
From: Tim Fish <tim@timfish.uk>
Date: Wed, 24 Apr 2024 22:14:16 +0200
Subject: [PATCH 238/239] meta: Changelog for v4.24.0 release (#892)

---
 .github/workflows/build.yml | 2 +-
 CHANGELOG.md                | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 95388eca..2034a94e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -72,7 +72,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        os: [ubuntu-latest, windows-latest, macos-latest]
+        os: [ubuntu-latest, windows-latest, macos-13]
         electron: ${{ fromJson(needs.build.outputs.matrix) }}
     env:
       ELECTRON_VERSION: ${{ matrix.electron }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 20ec6f00..0b875313 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 4.24.0
+
+- feat: Update from [v7.110.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.110.0) to
+  [v7.112.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.112.0) of JavaScript SDKs (#888)
+- fix: Missing Replay scope (#887)
+
 ## 4.23.0
 
 - feat: Update from [v7.109.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.109.0) to

From c293981f35c33bbb11f13d04fe21003f770f2b12 Mon Sep 17 00:00:00 2001
From: getsentry-bot <bot@sentry.io>
Date: Wed, 24 Apr 2024 20:15:01 +0000
Subject: [PATCH 239/239] release: 4.24.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index e6de65fc..d27da33f 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sentry/electron",
   "description": "Official Sentry SDK for Electron",
-  "version": "4.23.0",
+  "version": "4.24.0",
   "main": "./index.js",
   "module": "./esm/main/index.js",
   "browser": "./esm/renderer/index.js",