diff --git a/client/cypress/cypress.js b/client/cypress/cypress.js index 9d4d653a61..1795b807bf 100644 --- a/client/cypress/cypress.js +++ b/client/cypress/cypress.js @@ -1,112 +1,155 @@ /* eslint-disable import/no-extraneous-dependencies, no-console */ -const { find } = require("lodash"); +const axios = require("axios"); const { execSync } = require("child_process"); -const { get, post } = require("request").defaults({ jar: true }); -const { seedData } = require("./seed-data"); const fs = require("fs"); -var Cookie = require("request-cookies").Cookie; +const { seedData } = require("./seed-data"); let cypressConfigBaseUrl; try { - const cypressConfig = JSON.parse(fs.readFileSync("cypress.json")); - cypressConfigBaseUrl = cypressConfig.baseUrl; -} catch (e) {} + const cypressJson = fs.readFileSync("./client/cypress/cypress.json", "utf8"); + cypressConfigBaseUrl = JSON.parse(cypressJson).baseUrl; +} catch (e) {} // eslint-disable-line no-empty const baseUrl = process.env.CYPRESS_baseUrl || cypressConfigBaseUrl || "http://localhost:5001"; -function seedDatabase(seedValues) { - get(baseUrl + "/login", (_, { headers }) => { - const request = seedValues.shift(); - const data = request.type === "form" ? { formData: request.data } : { json: request.data }; - - if (headers["set-cookie"]) { - const cookies = headers["set-cookie"].map((cookie) => new Cookie(cookie)); - const csrfCookie = find(cookies, { key: "csrf_token" }); - if (csrfCookie) { - if (request.type === "form") { - data["formData"] = { ...data["formData"], csrf_token: csrfCookie.value }; - } else { - data["headers"] = { "X-CSRFToken": csrfCookie.value }; - } - } - } +// Minimal cookie jar (avoids deprecated `request` / `request-cookies` packages). +function parseSetCookieHeader(setCookieHeaders) { + const jar = {}; + if (!setCookieHeaders) return jar; + const headers = Array.isArray(setCookieHeaders) ? setCookieHeaders : [setCookieHeaders]; + for (const header of headers) { + const [pair] = header.split(";"); + const idx = pair.indexOf("="); + if (idx === -1) continue; + const name = pair.slice(0, idx).trim(); + const value = pair.slice(idx + 1).trim(); + if (name) jar[name] = value; + } + return jar; +} - post(baseUrl + request.route, data, (err, response) => { - const result = response ? response.statusCode : err; - console.log("POST " + request.route + " - " + result); - if (seedValues.length) { - seedDatabase(seedValues); - } +function cookieJarToHeader(jar) { + return Object.entries(jar) + .map(([k, v]) => `${k}=${v}`) + .join("; "); +} + +function buildFormBody(data) { + return Object.entries(data) + .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`) + .join("&"); +} + +async function seedDatabase(seedValues) { + let cookieJar = {}; + try { + const loginResp = await axios.get(`${baseUrl}/login`, { + maxRedirects: 0, + validateStatus: () => true, }); - }); + cookieJar = parseSetCookieHeader(loginResp.headers["set-cookie"]); + } catch (err) { + console.log(`GET /login failed: ${err.message}`); + } + + const csrfToken = cookieJar.csrf_token; + + for (const request of seedValues) { + const isForm = request.type === "form"; + const headers = { Cookie: cookieJarToHeader(cookieJar) }; + + let body; + if (isForm) { + const formData = csrfToken ? { ...request.data, csrf_token: csrfToken } : { ...request.data }; + body = buildFormBody(formData); + headers["Content-Type"] = "application/x-www-form-urlencoded"; + } else { + body = request.data; + headers["Content-Type"] = "application/json"; + if (csrfToken) headers["X-CSRFToken"] = csrfToken; + } + + try { + const response = await axios.post(`${baseUrl}${request.route}`, body, { + headers, + maxRedirects: 0, + validateStatus: () => true, + }); + console.log(`POST ${request.route} - ${response.status}`); + const newCookies = parseSetCookieHeader(response.headers["set-cookie"]); + cookieJar = { ...cookieJar, ...newCookies }; + } catch (err) { + console.log(`POST ${request.route} - ${err.message}`); + } + } } function buildServer() { - console.log("Building the server..."); - execSync("docker compose -p cypress build", { stdio: "inherit" }); + execSync("docker-compose build", { stdio: "inherit" }); } function startServer() { - console.log("Starting the server..."); - execSync("docker compose -p cypress up -d", { stdio: "inherit" }); - execSync("docker compose -p cypress run server create_db", { stdio: "inherit" }); + const isCI = process.env.CI; + const cmd = isCI ? "docker-compose up -d" : "docker-compose up"; + execSync(cmd, { stdio: "inherit" }); } function stopServer() { - console.log("Stopping the server..."); - execSync("docker compose -p cypress down", { stdio: "inherit" }); + execSync("docker-compose down", { stdio: "inherit" }); } function runCypressCI() { - const { - GITHUB_REPOSITORY, - CYPRESS_OPTIONS, // eslint-disable-line no-unused-vars - } = process.env; + const attempt = process.env.CYPRESS_ATTEMPT || 0; + const cmd = `CI=true cypress run --config video=${attempt < 2},screenshotOnRunFailure=${attempt >= 2}`; - if (GITHUB_REPOSITORY === "getredash/redash" && process.env.CYPRESS_RECORD_KEY) { - process.env.CYPRESS_OPTIONS = "--record"; + try { + execSync(cmd, { stdio: "inherit" }); + } catch (err) { + if (attempt < 2) { + process.env.CYPRESS_ATTEMPT = parseInt(attempt) + 1; + runCypressCI(); + } else { + throw err; + } } - - execSync( - "COMMIT_INFO_MESSAGE=$(git show -s --format=%s) docker compose run --name cypress cypress ./node_modules/.bin/percy exec -t 300 -- ./node_modules/.bin/cypress run $CYPRESS_OPTIONS", - { stdio: "inherit" } - ); } const command = process.argv[2] || "all"; -switch (command) { - case "build": - buildServer(); - break; - case "start": - startServer(); - if (!process.argv.includes("--skip-db-seed")) { - seedDatabase(seedData); - } - break; - case "db-seed": - seedDatabase(seedData); - break; - case "run": - execSync("cypress run", { stdio: "inherit" }); - break; - case "open": - execSync("cypress open", { stdio: "inherit" }); - break; - case "run-ci": - runCypressCI(); - break; - case "stop": - stopServer(); - break; - case "all": - startServer(); - seedDatabase(seedData); - execSync("cypress run", { stdio: "inherit" }); - stopServer(); - break; - default: - console.log("Usage: pnpm run cypress [build|start|db-seed|open|run|stop]"); - break; -} +(async () => { + switch (command) { + case "build": + buildServer(); + break; + case "start": + startServer(); + if (!process.argv.includes("--skip-db-seed")) { + await seedDatabase(seedData); + } + break; + case "db-seed": + await seedDatabase(seedData); + break; + case "run": + execSync("cypress run", { stdio: "inherit" }); + break; + case "open": + execSync("cypress open", { stdio: "inherit" }); + break; + case "run-ci": + runCypressCI(); + break; + case "stop": + stopServer(); + break; + case "all": + startServer(); + await seedDatabase(seedData); + execSync("cypress run", { stdio: "inherit" }); + stopServer(); + break; + default: + console.log("Usage: pnpm run cypress [build|start|db-seed|open|run|stop]"); + break; + } +})(); diff --git a/package.json b/package.json index fad00bef53..eac6b4dbd5 100644 --- a/package.json +++ b/package.json @@ -105,6 +105,7 @@ "babel-plugin-istanbul": "^6.1.1", "babel-plugin-transform-builtin-extend": "^1.1.2", "copy-webpack-plugin": "^13.0.1", + "core-js": "^2.6.12", "css-loader": "^7.1.4", "cypress": "^11.2.0", "dayjs": "^1.11.9", @@ -204,6 +205,8 @@ "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "cheerio": "1.0.0-rc.12", + "@cypress/request": "^3.0.10", + "request": "npm:@cypress/request@^3.0.10", "form-data@2": "~2.5.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba5adae8fb..90abba8139 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,8 @@ overrides: '@types/react': ^17.0.0 '@types/react-dom': ^17.0.0 cheerio: 1.0.0-rc.12 + '@cypress/request': ^3.0.10 + request: npm:@cypress/request@^3.0.10 form-data@2: ~2.5.4 importers: @@ -198,6 +200,9 @@ importers: copy-webpack-plugin: specifier: ^13.0.1 version: 13.0.1(webpack@5.105.3) + core-js: + specifier: ^2.6.12 + version: 2.6.12 css-loader: specifier: ^7.1.4 version: 7.1.4(webpack@5.105.3) @@ -1372,8 +1377,8 @@ packages: cypress: '*' webpack: ^4 || ^5 - '@cypress/request@2.88.12': - resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==} + '@cypress/request@3.0.10': + resolution: {integrity: sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==} engines: {node: '>= 6'} '@cypress/webpack-preprocessor@6.0.4': @@ -4603,10 +4608,6 @@ packages: forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - form-data@2.5.5: - resolution: {integrity: sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==} - engines: {node: '>= 0.12'} - form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -4863,15 +4864,6 @@ packages: handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - - har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - harmony-reflect@1.6.2: resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} @@ -5030,12 +5022,8 @@ packages: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} - http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} - - http-signature@1.3.6: - resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} + http-signature@1.4.0: + resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} engines: {node: '>=0.10'} https-proxy-agent@4.0.0: @@ -5756,10 +5744,6 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} - jsprim@2.0.2: resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} engines: {'0': node >=0.6.0} @@ -6337,9 +6321,6 @@ packages: engines: {node: '>=8.9'} hasBin: true - oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -6827,10 +6808,6 @@ packages: resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} engines: {node: '>=16.0.0'} - qs@6.10.7: - resolution: {integrity: sha512-SU8Tw69GDcmdCwqC8OksqrQ6w/TGMsKRWGOj5rOaFt1xVwLbReX87/icjHrGDVuS3yfZUHKo2Q26IoAVucBS3Q==} - engines: {node: '>=0.6'} - qs@6.14.2: resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} @@ -6839,17 +6816,10 @@ packages: resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} - qs@6.5.5: - resolution: {integrity: sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==} - engines: {node: '>=0.6'} - query-string@6.14.1: resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} engines: {node: '>=6'} - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -7309,11 +7279,6 @@ packages: peerDependencies: request: ^2.34 - request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -8094,10 +8059,6 @@ packages: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} - tough-cookie@5.1.2: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} @@ -8254,10 +8215,6 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -8299,9 +8256,6 @@ packages: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -8333,13 +8287,9 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-compile-cache@2.4.0: @@ -9700,7 +9650,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@cypress/request@2.88.12': + '@cypress/request@3.0.10': dependencies: aws-sign2: 0.7.0 aws4: 1.13.2 @@ -9708,16 +9658,16 @@ snapshots: combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 - form-data: 2.5.5 - http-signature: 1.3.6 + form-data: 4.0.5 + http-signature: 1.4.0 is-typedarray: 1.0.0 isstream: 0.1.2 json-stringify-safe: 5.0.1 mime-types: 2.1.35 performance-now: 2.1.0 - qs: 6.10.7 + qs: 6.14.2 safe-buffer: 5.2.1 - tough-cookie: 4.1.4 + tough-cookie: 5.1.2 tunnel-agent: 0.6.0 uuid: 8.3.2 @@ -12634,7 +12584,7 @@ snapshots: cypress@11.2.0: dependencies: - '@cypress/request': 2.88.12 + '@cypress/request': 3.0.10 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) '@types/node': 14.18.63 '@types/sinonjs__fake-timers': 8.1.1 @@ -13945,15 +13895,6 @@ snapshots: forever-agent@0.6.1: {} - form-data@2.5.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - safe-buffer: 5.2.1 - form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -14286,13 +14227,6 @@ snapshots: handle-thing@2.0.1: {} - har-schema@2.0.0: {} - - har-validator@5.1.5: - dependencies: - ajv: 6.14.0 - har-schema: 2.0.0 - harmony-reflect@1.6.2: {} has-ansi@2.0.0: @@ -14486,13 +14420,7 @@ snapshots: transitivePeerDependencies: - debug - http-signature@1.2.0: - dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.2 - sshpk: 1.18.0 - - http-signature@1.3.6: + http-signature@1.4.0: dependencies: assert-plus: 1.0.0 jsprim: 2.0.2 @@ -15437,13 +15365,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsprim@1.4.2: - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - jsprim@2.0.2: dependencies: assert-plus: 1.0.0 @@ -16096,8 +16017,6 @@ snapshots: transitivePeerDependencies: - supports-color - oauth-sign@0.9.0: {} - object-assign@4.1.1: {} object-copy@0.1.0: @@ -16382,8 +16301,8 @@ snapshots: es6-promise-pool: 2.5.0 jssha: 2.4.2 regenerator-runtime: 0.13.11 - request: 2.88.2 - request-promise: 4.2.6(request@2.88.2) + request: '@cypress/request@3.0.10' + request-promise: 4.2.6(@cypress/request@3.0.10) walk: 2.3.15 performance-now@2.1.0: {} @@ -16661,10 +16580,6 @@ snapshots: pvutils@1.1.5: {} - qs@6.10.7: - dependencies: - side-channel: 1.1.0 - qs@6.14.2: dependencies: side-channel: 1.1.0 @@ -16673,8 +16588,6 @@ snapshots: dependencies: side-channel: 1.1.0 - qs@6.5.5: {} - query-string@6.14.1: dependencies: decode-uri-component: 0.2.2 @@ -16682,8 +16595,6 @@ snapshots: split-on-first: 1.1.0 strict-uri-encode: 2.0.0 - querystringify@2.2.0: {} - queue-microtask@1.2.3: {} queue@6.0.1: @@ -17387,42 +17298,19 @@ snapshots: dependencies: throttleit: 1.0.1 - request-promise-core@1.1.4(request@2.88.2): + request-promise-core@1.1.4(@cypress/request@3.0.10): dependencies: lodash: 4.17.23 - request: 2.88.2 + request: '@cypress/request@3.0.10' - request-promise@4.2.6(request@2.88.2): + request-promise@4.2.6(@cypress/request@3.0.10): dependencies: bluebird: 3.7.2 - request: 2.88.2 - request-promise-core: 1.1.4(request@2.88.2) + request: '@cypress/request@3.0.10' + request-promise-core: 1.1.4(@cypress/request@3.0.10) stealthy-require: 1.1.1 tough-cookie: 2.5.0 - request@2.88.2: - dependencies: - aws-sign2: 0.7.0 - aws4: 1.13.2 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.5.5 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.5 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 - require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -18280,13 +18168,6 @@ snapshots: psl: 1.15.0 punycode: 2.3.1 - tough-cookie@4.1.4: - dependencies: - psl: 1.15.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - tough-cookie@5.1.2: dependencies: tldts: 6.1.86 @@ -18464,8 +18345,6 @@ snapshots: universalify@0.1.2: {} - universalify@0.2.0: {} - universalify@2.0.1: {} unpipe@1.0.0: {} @@ -18523,11 +18402,6 @@ snapshots: urix@0.1.0: {} - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - url@0.11.4: dependencies: punycode: 1.4.1 @@ -18557,8 +18431,6 @@ snapshots: utils-merge@1.0.1: {} - uuid@3.4.0: {} - uuid@8.3.2: {} v8-compile-cache@2.4.0: {}