Ver código fonte

chore: send fatal errors to Discord

Gerald 2 anos atrás
pai
commit
2f5a499a9a

+ 1 - 3
.editorconfig

@@ -7,9 +7,7 @@ end_of_line = lf
 charset = utf-8
 trim_trailing_whitespace = true
 insert_final_newline = true
+quote_type = single
 
 [package.json]
 insert_final_newline = false
-
-[*.md]
-trim_trailing_whitespace = false

+ 6 - 2
.github/workflows/release.yml

@@ -1,6 +1,7 @@
 name: Release
 
 on:
+  workflow_dispatch:
   push:
     tags:
       - v*
@@ -21,6 +22,9 @@ jobs:
 
       - name: Prepare
         run: yarn && node scripts/action-helper.js
+        env:
+          ACTION_BUILD_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
+          DISCORD_WEBHOOK_RELEASE: ${{ secrets.DISCORD_WEBHOOK_RELEASE }}
 
       - name: Build
         env:
@@ -68,7 +72,7 @@ jobs:
             node scripts/amo-upload.mjs
           else
             echo Publish unlisted version
-            BETA=1 node scripts/amo-upload.mjs
+            DEBUG=amo-upload BETA=1 node scripts/amo-upload.mjs
           fi
         env:
           AMO_KEY: ${{ secrets.AMO_KEY }}
@@ -105,4 +109,4 @@ jobs:
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         run: |
-          node -e 'require("./scripts/release-helper").uploadAssets()';
+          node -e 'import("./scripts/release-helper.mjs").then(({ uploadAssets }) => uploadAssets())';

+ 1 - 1
package.json

@@ -34,7 +34,7 @@
     "@types/chrome": "^0.0.208",
     "@types/firefox-webext-browser": "94.0.1",
     "@violentmonkey/types": "0.1.5",
-    "amo-upload": "^0.4.0",
+    "amo-upload": "^0.5.1",
     "babel-plugin-transform-modern-regexp": "^0.0.6",
     "cross-env": "^7.0.3",
     "cross-spawn": "^7.0.3",

+ 2 - 0
scripts/action-helper.js

@@ -21,6 +21,8 @@ const envs = {
   ASSETS_DIR: 'dist-assets',
   GIT_DESCRIBE: ci && exec('git describe --abbrev=7')
     || `v${version}-${exec('git rev-parse HEAD').slice(0, 7)}`,
+  ACTION_BUILD_URL: process.env.ACTION_BUILD_URL,
+  DISCORD_WEBHOOK_RELEASE: process.env.DISCORD_WEBHOOK_RELEASE,
 };
 
 envs.SOURCE_ZIP = `${envs.RELEASE_PREFIX}-${envs.VERSION}-source.zip`;

+ 23 - 3
scripts/amo-upload.mjs

@@ -1,9 +1,9 @@
 import { rename, writeFile } from 'fs/promises';
 import { join } from 'path';
-import { signAddon } from 'amo-upload';
+import { FatalError, signAddon } from 'amo-upload';
 import { readManifest, buildUpdatesList } from './manifest-helper.js';
 import { getVersion, isBeta } from './version-helper.js';
-import { hasAsset } from './release-helper.js';
+import { hasAsset, notifyReleaseStatus } from './release-helper.mjs';
 
 async function main() {
   const manifest = await readManifest();
@@ -60,7 +60,27 @@ ${releaseUrl}
   await writeFile(join(process.env.TEMP_DIR, 'updates/updates.json'), JSON.stringify(updates, null, 2), 'utf8');
 }
 
-main().catch(err => {
+main().then(() => {
+  notifyReleaseStatus({
+    title: `AMO Release Success: ${process.env.RELEASE_NAME}`,
+    description: `See the changelog at https://github.com/violentmonkey/violentmonkey/releases/tag/v${process.env.VERSION}.`,
+  });
+}, err => {
+  // if (err instanceof FatalError) {
+    notifyReleaseStatus({
+      title: `AMO Release Failure: ${process.env.RELEASE_NAME}`,
+      description: [
+        'An error occurred:',
+        '',
+        `> ${err}`,
+        ...process.env.ACTION_BUILD_URL ? [
+          '',
+          `See ${process.env.ACTION_BUILD_URL} for more details.`,
+        ] : [],
+      ].join('\n'),
+      success: false,
+    });
+  // }
   console.error(err);
   process.exitCode = 1;
 });

+ 0 - 66
scripts/release-helper.js

@@ -1,66 +0,0 @@
-const { readdir, readFile } = require('fs/promises');
-const { join } = require('path');
-const github = require('@actions/github');
-
-const { VERSION, ASSETS_DIR, GITHUB_TOKEN } = process.env;
-const tag = `v${VERSION}`;
-
-const octokit = github.getOctokit(GITHUB_TOKEN);
-
-async function getRelease() {
-  try {
-    const result = await octokit.rest.repos.getReleaseByTag({
-      ...github.context.repo,
-      tag,
-    });
-    console.info('Found release:', tag);
-    return result.data;
-  } catch (err) {
-    if (err.status !== 404) throw err;
-  }
-}
-
-async function createRelease() {
-  console.info('Create release:', tag);
-  const result = await octokit.rest.repos.createRelease({
-    ...github.context.repo,
-    tag_name: tag,
-    name: process.env.RELEASE_NAME,
-    body: process.env.RELEASE_NOTE,
-    prerelease: process.env.PRERELEASE == 'true',
-  });
-  return result.data;
-}
-
-async function ensureRelease() {
-  const release = await getRelease() || await createRelease();
-  return release;
-}
-
-async function hasAsset(fileName) {
-  const release = await getRelease();
-  return release?.assets.some(asset => asset.name === fileName);
-}
-
-async function uploadAssets() {
-  const release = await ensureRelease();
-  let assets = await readdir(ASSETS_DIR);
-  assets = assets.filter(asset => release.assets.every(({ name }) => name !== asset));
-  for (const asset of assets) {
-    console.info(`> Upload asset: ${asset}`);
-    await octokit.rest.repos.uploadReleaseAsset({
-      ...github.context.repo,
-      release_id: release.id,
-      name: asset,
-      data: await readFile(join(ASSETS_DIR, asset)),
-    });
-  }
-  if (assets.length) console.info('Done');
-  else console.info('No asset to upload');
-}
-
-exports.getRelease = getRelease;
-exports.createRelease = createRelease;
-exports.ensureRelease = ensureRelease;
-exports.uploadAssets = uploadAssets;
-exports.hasAsset = hasAsset;

+ 88 - 0
scripts/release-helper.mjs

@@ -0,0 +1,88 @@
+import { readdir, readFile } from 'fs/promises';
+import { join } from 'path';
+import github from '@actions/github';
+
+const { VERSION, ASSETS_DIR, GITHUB_TOKEN } = process.env;
+const tag = `v${VERSION}`;
+
+let octokit;
+function getOctokit() {
+  octokit ||= github.getOctokit(GITHUB_TOKEN);
+  return octokit;
+}
+
+export async function getRelease() {
+  try {
+    const result = await getOctokit().rest.repos.getReleaseByTag({
+      ...github.context.repo,
+      tag,
+    });
+    console.info('Found release:', tag);
+    return result.data;
+  } catch (err) {
+    if (err.status !== 404) throw err;
+  }
+}
+
+export async function createRelease() {
+  console.info('Create release:', tag);
+  const result = await getOctokit().rest.repos.createRelease({
+    ...github.context.repo,
+    tag_name: tag,
+    name: process.env.RELEASE_NAME,
+    body: process.env.RELEASE_NOTE,
+    prerelease: process.env.PRERELEASE == 'true',
+  });
+  return result.data;
+}
+
+export async function ensureRelease() {
+  const release = await getRelease() || await createRelease();
+  return release;
+}
+
+export async function hasAsset(fileName) {
+  const release = await getRelease();
+  return release?.assets.some(asset => asset.name === fileName);
+}
+
+export async function uploadAssets() {
+  const release = await ensureRelease();
+  let assets = await readdir(ASSETS_DIR);
+  assets = assets.filter(asset => release.assets.every(({ name }) => name !== asset));
+  for (const asset of assets) {
+    console.info(`> Upload asset: ${asset}`);
+    await getOctokit().rest.repos.uploadReleaseAsset({
+      ...github.context.repo,
+      release_id: release.id,
+      name: asset,
+      data: await readFile(join(ASSETS_DIR, asset)),
+    });
+  }
+  if (assets.length) console.info('Done');
+  else console.info('No asset to upload');
+}
+
+export async function notifyReleaseStatus({ title, description, success = true }) {
+  const { DISCORD_WEBHOOK_RELEASE } = process.env;
+  if (!DISCORD_WEBHOOK_RELEASE) {
+    console.warn('DISCORD_WEBHOOK_RELEASE is not available!');
+    return;
+  }
+  const res = await fetch(DISCORD_WEBHOOK_RELEASE, {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    body: JSON.stringify({
+      embeds: [
+        {
+          title,
+          description,
+          color: success ? 0x00ff00 : 0xff0000,
+        },
+      ],
+    }),
+  });
+  if (!res.ok) console.error(res);
+}

+ 46 - 55
yarn.lock

@@ -1040,13 +1040,20 @@
     "@babel/helper-validator-option" "^7.18.6"
     "@babel/plugin-transform-typescript" "^7.18.6"
 
-"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.8.4":
+"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.19.0", "@babel/runtime@^7.8.4":
   version "7.19.0"
   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259"
   integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==
   dependencies:
     regenerator-runtime "^0.13.4"
 
+"@babel/runtime@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8"
+  integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==
+  dependencies:
+    regenerator-runtime "^0.14.0"
+
 "@babel/template@^7.18.10", "@babel/template@^7.3.3":
   version "7.18.10"
   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71"
@@ -2570,15 +2577,16 @@ ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0:
     require-from-string "^2.0.2"
     uri-js "^4.2.2"
 
-amo-upload@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/amo-upload/-/amo-upload-0.4.0.tgz#2447f72a0ed2156539e94aa4fc4096de43e9a32f"
-  integrity sha512-eHDUjUrwD7BYaMetEywB1BPMQikeWYLSQh2aVvhc4N5kvu+ELuJn1sK70/qqHEwIkwi6NO+we7GYtJ4wGx8KqA==
+amo-upload@^0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/amo-upload/-/amo-upload-0.5.1.tgz#79364bcc3679bcce0c4f4b45a19b20081e076314"
+  integrity sha512-xcq0WyMrH1PgeoQCqCvWJk3DEpRnZdqZLJHzFmOSNdg+VIUjxRzopNFGEe8MUuJqkv6R7S6PujiEClrWzoA82g==
   dependencies:
-    "@babel/runtime" "^7.18.3"
-    commander "^9.3.0"
-    jsonwebtoken "^8.5.1"
-    node-fetch "^3.2.6"
+    "@babel/runtime" "^7.22.15"
+    commander "^11.0.0"
+    debug "^4.3.4"
+    jsonwebtoken "^9.0.2"
+    lodash-es "^4.17.21"
 
 ansi-colors@^1.0.1:
   version "1.1.0"
@@ -3586,6 +3594,11 @@ combined-stream@^1.0.8:
   dependencies:
     delayed-stream "~1.0.0"
 
+commander@^11.0.0:
+  version "11.0.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67"
+  integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==
+
 commander@^2.20.0:
   version "2.20.3"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -3601,7 +3614,7 @@ commander@^8.3.0:
   resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
   integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
 
-commander@^9.3.0, commander@^9.4.0:
+commander@^9.4.0:
   version "9.4.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c"
   integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==
@@ -3913,11 +3926,6 @@ d@1, d@^1.0.1:
     es5-ext "^0.10.50"
     type "^1.0.1"
 
-data-uri-to-buffer@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b"
-  integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==
-
 data-urls@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143"
@@ -4914,14 +4922,6 @@ fb-watchman@^2.0.0:
   dependencies:
     bser "2.1.1"
 
-fetch-blob@^3.1.2, fetch-blob@^3.1.4:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9"
-  integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==
-  dependencies:
-    node-domexception "^1.0.0"
-    web-streams-polyfill "^3.0.3"
-
 file-entry-cache@^6.0.1:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@@ -5117,13 +5117,6 @@ form-data@^4.0.0:
     combined-stream "^1.0.8"
     mime-types "^2.1.12"
 
-formdata-polyfill@^4.0.10:
-  version "4.0.10"
-  resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
-  integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
-  dependencies:
-    fetch-blob "^3.1.2"
-
 [email protected]:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -6831,10 +6824,10 @@ jsonpointer@^5.0.0:
   resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
   integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
 
-jsonwebtoken@^8.5.1:
-  version "8.5.1"
-  resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
-  integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
+jsonwebtoken@^9.0.2:
+  version "9.0.2"
+  resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
+  integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
   dependencies:
     jws "^3.2.2"
     lodash.includes "^4.3.0"
@@ -6845,7 +6838,7 @@ jsonwebtoken@^8.5.1:
     lodash.isstring "^4.0.1"
     lodash.once "^4.0.0"
     ms "^2.1.1"
-    semver "^5.6.0"
+    semver "^7.5.4"
 
 just-debounce@^1.0.0:
   version "1.1.0"
@@ -7063,6 +7056,11 @@ locate-path@^6.0.0:
   dependencies:
     p-locate "^5.0.0"
 
+lodash-es@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
+  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
 lodash.debounce@^4.0.8:
   version "4.0.8"
   resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -7500,11 +7498,6 @@ node-addon-api@^5.0.0:
   resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501"
   integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==
 
-node-domexception@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
-  integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
-
 node-fetch@^2.3.0, node-fetch@^2.6.7:
   version "2.6.7"
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
@@ -7512,15 +7505,6 @@ node-fetch@^2.3.0, node-fetch@^2.6.7:
   dependencies:
     whatwg-url "^5.0.0"
 
-node-fetch@^3.2.6:
-  version "3.2.10"
-  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.10.tgz#e8347f94b54ae18b57c9c049ef641cef398a85c8"
-  integrity sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==
-  dependencies:
-    data-uri-to-buffer "^4.0.0"
-    fetch-blob "^3.1.4"
-    formdata-polyfill "^4.0.10"
-
 node-forge@^1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
@@ -8785,6 +8769,11 @@ regenerator-runtime@^0.13.4:
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
   integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
 
+regenerator-runtime@^0.14.0:
+  version "0.14.0"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
+  integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
+
 regenerator-transform@^0.15.0:
   version "0.15.0"
   resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537"
@@ -9107,7 +9096,7 @@ semver-greatest-satisfied-range@^1.1.0:
   dependencies:
     sver-compat "^1.5.0"
 
-"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0:
+"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==
@@ -9124,6 +9113,13 @@ semver@^7.3.5, semver@^7.3.6, semver@^7.3.7:
   dependencies:
     lru-cache "^6.0.0"
 
+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==
+  dependencies:
+    lru-cache "^6.0.0"
+
 [email protected]:
   version "0.18.0"
   resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
@@ -10533,11 +10529,6 @@ wbuf@^1.1.0, wbuf@^1.7.3:
   dependencies:
     minimalistic-assert "^1.0.0"
 
-web-streams-polyfill@^3.0.3:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
-  integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
-
 webidl-conversions@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"