From 4233f57d25d4bc7394bc2318fa8d67cae676bdf6 Mon Sep 17 00:00:00 2001 From: Brian Nguyen Date: Fri, 19 May 2023 10:41:20 +0700 Subject: [PATCH] fix: conflict when rework old commits Signed-off-by: Brian Nguyen --- .changeset/curly-clocks-notice.md | 7 -- .circleci/config.yml | 11 +-- .github/workflows/docker-release.yml | 60 ------------ .gitignore | 3 + apps/reaction/package.json | 6 ++ docker-compose.dev.yml | 2 +- .../api-plugin-carts/src/schemas/cart.graphql | 15 +++ .../src/mutations/createPromotion.js | 11 +++ .../src/mutations/createPromotion.test.js | 41 +------- .../src/simpleSchemas.js | 4 + .../src/loaders/loadImages.js | 5 +- .../src/GridFSStore.js | 2 +- packages/file-collections/package.json | 3 - .../getFileDownloadHandler/requestRange.js | 6 +- .../requestRange.test.js | 93 ------------------- pnpm-lock.yaml | 61 +++++++++--- 16 files changed, 96 insertions(+), 234 deletions(-) delete mode 100644 .changeset/curly-clocks-notice.md delete mode 100644 .github/workflows/docker-release.yml delete mode 100644 packages/file-collections/src/node/getFileDownloadHandler/requestRange.test.js diff --git a/.changeset/curly-clocks-notice.md b/.changeset/curly-clocks-notice.md deleted file mode 100644 index d64cbcf3839..00000000000 --- a/.changeset/curly-clocks-notice.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@reactioncommerce/api-plugin-sample-data": minor -"@reactioncommerce/file-collections": minor -"@reactioncommerce/file-collections-sa-gridfs": minor ---- - -fix: sample image data not showing diff --git a/.circleci/config.yml b/.circleci/config.yml index e5b2be30cc7..bf952008c45 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -173,8 +173,8 @@ jobs: - run: name: Check should build new image command: | - head_commit=$(git log -1 --oneline | grep -m 1 releases) - if [[ $head_commit != *"/releases/docker-image"* ]]; then + VERSION=$(cat ./apps/reaction/package.json | grep -m 1 version | sed 's/[^0-9.]//g') + if curl --silent -f --head -lL https://hub.docker.com/v2/repositories/${DOCKER_REPOSITORY}/tags/${VERSION}/ > /dev/null; then circleci-agent step halt fi - run: @@ -267,9 +267,4 @@ workflows: only: - trunk requires: - - dockerfile-lint - - eslint - - graphql-lint - - test-unit - - test-integration-query - - test-integration-mutation + - release diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml deleted file mode 100644 index a7e8e782fd4..00000000000 --- a/.github/workflows/docker-release.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Docker release -on: - pull_request: - types: - - closed - -permissions: {} - -jobs: - create-docker-release-pr: - if: github.event.pull_request.merged == true && github.base_ref == 'trunk' && github.head_ref == 'changeset-release/trunk' - permissions: - contents: write - pull-requests: write - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Get new docker version - id: get-docker-version - run: | - VERSION=$(cat ./apps/reaction/package.json | grep -m 1 version | sed 's/[^0-9.]//g') - echo "NEW_DOCKER_IMAGE_VERSION=$VERSION" >> $GITHUB_OUTPUT - echo "New release docker version is $VERSION" - - - name: Check should build new image - id: should-build-new-image - run: | - if curl --silent -f --head -lL https://hub.docker.com/v2/repositories/reactioncommerce/reaction/tags/${{ steps.get-docker-version.outputs.NEW_DOCKER_IMAGE_VERSION }}/ > /dev/null; then - echo "RESULT=false" >> $GITHUB_OUTPUT - else - echo "RESULT=true" >> $GITHUB_OUTPUT - fi - - - name: Set git user - if: steps.should-build-new-image.outputs.RESULT == 'true' - run: | - echo ${{ steps.should-build-new-image.outputs.RESULT }} - git config --global user.name "$(git --no-pager log --format=format:'%an' -n 1)" - git config --global user.email "$(git --no-pager log --format=format:'%ae' -n 1)" - - - name: Update docker-compose file - if: steps.should-build-new-image.outputs.RESULT == 'true' - run: | - yes | cp -i docker-compose.circleci.yml docker-compose.yml - sed -i "s/REACTION_VERSION/${{ steps.get-docker-version.outputs.NEW_DOCKER_IMAGE_VERSION }}/g" ./docker-compose.yml - - - name: Create Pull Request - if: steps.should-build-new-image.outputs.RESULT == 'true' - uses: peter-evans/create-pull-request@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - title: Docker image release ${{ steps.get-docker-version.outputs.NEW_DOCKER_IMAGE_VERSION }} - body: "Release docker image ${{ steps.get-docker-version.outputs.NEW_DOCKER_IMAGE_VERSION }}" - branch: "releases/docker-image-${{ steps.get-docker-version.outputs.NEW_DOCKER_IMAGE_VERSION }}" - commit-message: "feat: update docker-compose file to ${{ steps.get-docker-version.outputs.NEW_DOCKER_IMAGE_VERSION }} [Docker Release]" - signoff: true diff --git a/.gitignore b/.gitignore index b2f77245881..8f193c3a616 100644 --- a/.gitignore +++ b/.gitignore @@ -79,4 +79,7 @@ yalc-packages # Build dist + +# Editor +.vscode .idea diff --git a/apps/reaction/package.json b/apps/reaction/package.json index 59e69a2dbe3..2577a8a4d9f 100644 --- a/apps/reaction/package.json +++ b/apps/reaction/package.json @@ -48,6 +48,11 @@ "@reactioncommerce/api-plugin-payments-stripe-sca": "1.0.2", "@reactioncommerce/api-plugin-pricing-simple": "1.0.7", "@reactioncommerce/api-plugin-products": "1.3.1", + "@reactioncommerce/api-plugin-promotions": "0.0.0", + "@reactioncommerce/api-plugin-promotions-coupons": "0.0.0", + "@reactioncommerce/api-plugin-promotions-discounts": "0.0.0", + "@reactioncommerce/api-plugin-promotions-offers": ".0.0", + "@reactioncommerce/api-plugin-sequences": "0.0.0", "@reactioncommerce/api-plugin-settings": "1.0.7", "@reactioncommerce/api-plugin-shipments": "1.0.3", "@reactioncommerce/api-plugin-shipments-flat-rate": "1.0.10", @@ -67,6 +72,7 @@ "@reactioncommerce/logger": "1.1.5", "@reactioncommerce/random": "1.0.2", "@snyk/protect": "latest", + "nodemailer": "^6.8.0", "graphql": "~16.6.0", "semver": "~6.3.0", "sharp": "^0.30.7" diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 8c694cd5db6..8e63df3d730 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -2,7 +2,7 @@ version: "3.4" services: mongo: - image: mongo:4.2.0 + image: mongo:5.0 command: mongod --oplogSize 128 --replSet rs0 --storageEngine=wiredTiger networks: default: diff --git a/packages/api-plugin-carts/src/schemas/cart.graphql b/packages/api-plugin-carts/src/schemas/cart.graphql index e085296ac5a..603bc3c458b 100644 --- a/packages/api-plugin-carts/src/schemas/cart.graphql +++ b/packages/api-plugin-carts/src/schemas/cart.graphql @@ -472,6 +472,21 @@ input CartUpdatedInput { cartToken: String } +"Input for the `acknowledgeCartMessage` mutation call" +input AcknowledgeCartMessageInput { + "The cart ID" + cartId: ID!, + + "The message to acknowledge" + messageId: String! + + "An optional string identifying the mutation call, which will be returned in the response payload" + clientMutationId: String + + "The cart anonymous token" + cartToken: String +} + #################### # Payloads # These types are used as return values for mutation calls diff --git a/packages/api-plugin-promotions/src/mutations/createPromotion.js b/packages/api-plugin-promotions/src/mutations/createPromotion.js index c223fa09917..cc1c1cfa910 100644 --- a/packages/api-plugin-promotions/src/mutations/createPromotion.js +++ b/packages/api-plugin-promotions/src/mutations/createPromotion.js @@ -12,6 +12,17 @@ import validateTriggerParams from "./validateTriggerParams.js"; export default async function createPromotion(context, promotion) { const { collections: { Promotions }, simpleSchemas: { Promotion: PromotionSchema }, promotions } = context; promotion._id = Random.id(); + const now = new Date(); + if (promotion.triggers && promotion.triggers.length) { // if there are no triggers, this is an error, but we'll let schema validation catch it + const [firstTrigger] = promotion.triggers; // currently support only one trigger + const { triggerKey } = firstTrigger; + const trigger = promotions.triggers.find((tr) => tr.key === triggerKey); + if (!trigger) throw new ReactionError("invalid-params", `No trigger found with key ${triggerKey}`); + promotion.triggerType = trigger.type; + } + promotion.state = "created"; + promotion.createdAt = now; + promotion.updatedAt = now; promotion.referenceId = await context.mutations.incrementSequence(context, promotion.shopId, "Promotions"); PromotionSchema.validate(promotion); diff --git a/packages/api-plugin-promotions/src/mutations/createPromotion.test.js b/packages/api-plugin-promotions/src/mutations/createPromotion.test.js index 10933c06997..3ad3c0f46f3 100644 --- a/packages/api-plugin-promotions/src/mutations/createPromotion.test.js +++ b/packages/api-plugin-promotions/src/mutations/createPromotion.test.js @@ -34,46 +34,7 @@ const insertResults = { insertedId: "myId" }; mockContext.collections.Promotions.insertOne = () => insertResults; -mockContext.mutations.incrementSequence = () => 1; - -const now = new Date(); - -const OrderPromotion = { - _id: "orderPromotion", - shopId: "testShop", - promotionType: "coupon", - label: "5 percent off your entire order when you spend more then $200", - description: "5 percent off your entire order when you spend more then $200", - enabled: true, - triggers: [ - { - triggerKey: "offers", - triggerParameters: { - name: "5 percent off your entire order when you spend more then $200", - conditions: { - any: [ - { - fact: "cart", - path: "$.merchandiseTotal", - operator: "greaterThanInclusive", - value: 200 - } - ] - } - } - } - ], - actions: [ - { - actionKey: "noop", - actionParameters: {} - } - ], - startDate: now, - endDate: new Date(now.getTime() + 1000 * 60 * 60 * 24 * 7), - stackAbility: "none" -}; - +mockContext.mutations.incrementSequence = () => 1000000; mockContext.simpleSchemas = { Promotion }; diff --git a/packages/api-plugin-promotions/src/simpleSchemas.js b/packages/api-plugin-promotions/src/simpleSchemas.js index 27fa751d71f..bef1d4ce040 100644 --- a/packages/api-plugin-promotions/src/simpleSchemas.js +++ b/packages/api-plugin-promotions/src/simpleSchemas.js @@ -64,6 +64,10 @@ export const Promotion = new SimpleSchema({ type: String, allowedValues: ["implicit", "explicit"] }, + "promotionType": { + type: String, // this is the key to the promotion type object + allowedValues: promotionTypeKeys + }, "referenceId": { type: SimpleSchema.Integer }, diff --git a/packages/api-plugin-sample-data/src/loaders/loadImages.js b/packages/api-plugin-sample-data/src/loaders/loadImages.js index 0d58b880d08..d9a09d66eb1 100644 --- a/packages/api-plugin-sample-data/src/loaders/loadImages.js +++ b/packages/api-plugin-sample-data/src/loaders/loadImages.js @@ -2,7 +2,6 @@ /* eslint-disable no-await-in-loop */ import fs from "fs"; import path from "path"; -import { fileURLToPath } from "url"; import { Readable } from "stream"; import pkg from "@reactioncommerce/file-collections"; @@ -107,8 +106,8 @@ export default async function loadImages(context, shopId) { const topProdIds = []; const fileType = "image/jpeg"; - const currentDir = path.dirname(fileURLToPath(import.meta.url)); - const folderPath = path.join(currentDir, "../images/"); + const folderPath = "../../packages/api-plugin-sample-data/src/images/"; + let fileList = []; try { fileList = fs.readdirSync(folderPath); diff --git a/packages/file-collections-sa-gridfs/src/GridFSStore.js b/packages/file-collections-sa-gridfs/src/GridFSStore.js index d5af54dbf88..913143d16b5 100644 --- a/packages/file-collections-sa-gridfs/src/GridFSStore.js +++ b/packages/file-collections-sa-gridfs/src/GridFSStore.js @@ -46,7 +46,7 @@ export default class GridFSStore extends StorageAdapter { // Add range if this should be a partial read if (typeof startPos === "number" && typeof endPos === "number") { opts.start = startPos; - opts.end = endPos + 1; + opts.end = endPos; } debug("GridFSStore _getReadStream opts:", opts); diff --git a/packages/file-collections/package.json b/packages/file-collections/package.json index 2774c457ae1..50afc760040 100644 --- a/packages/file-collections/package.json +++ b/packages/file-collections/package.json @@ -64,9 +64,6 @@ "main": "./dist/node/index.js", "scripts": { "build": "rm -rf dist/** && babel src --out-dir dist --ignore \"**/*.test.js\"", - "test": "jest", - "test:watch": "jest --watch", - "test:file": "jest --no-cache --watch --coverage=false", "prepublishOnly": "npm run build" }, "dependencies": { diff --git a/packages/file-collections/src/node/getFileDownloadHandler/requestRange.js b/packages/file-collections/src/node/getFileDownloadHandler/requestRange.js index a5b1de96101..7dbb0482a30 100644 --- a/packages/file-collections/src/node/getFileDownloadHandler/requestRange.js +++ b/packages/file-collections/src/node/getFileDownloadHandler/requestRange.js @@ -59,7 +59,7 @@ export default function requestRange(headers, fileSize) { if (String(startByte) !== start) startByte = 0; if ((String(endByte) !== end) || endByte === 0) endByte = fileSize - 1; - if (startByte >= endByte || endByte >= fileSize) { + if (start >= end) { return { errorCode: 416, errorMessage: "Requested Range Not Satisfiable" @@ -68,11 +68,11 @@ export default function requestRange(headers, fileSize) { const partSize = (endByte - startByte) + 1; return { - end: endByte, + end, len: partSize, partial: (partSize < fileSize), size: fileSize, - start: startByte, + start, unit }; } diff --git a/packages/file-collections/src/node/getFileDownloadHandler/requestRange.test.js b/packages/file-collections/src/node/getFileDownloadHandler/requestRange.test.js deleted file mode 100644 index e793d7175af..00000000000 --- a/packages/file-collections/src/node/getFileDownloadHandler/requestRange.test.js +++ /dev/null @@ -1,93 +0,0 @@ -import requestRange from "./requestRange.js"; - -test("should return default setting when range header is not present", () => { - const headers = {}; - const fileSize = 100; - const result = requestRange(headers, fileSize); - expect(result).toEqual({ - end: 99, - len: 100, - partial: false, - size: 100, - start: 0, - unit: "bytes" - }); -}); - -test("should return correct range when range header is present", () => { - const headers = { range: "bytes=0-999" }; - const fileSize = 1000; - const result = requestRange(headers, fileSize); - expect(result).toEqual({ - end: 999, - len: 1000, - partial: false, - size: 1000, - start: 0, - unit: "bytes" - }); -}); - -test("should return the correct range when the range header request first half part of the file", () => { - const headers = { range: "bytes=0-499" }; - const fileSize = 1000; - const result = requestRange(headers, fileSize); - expect(result).toEqual({ - end: 499, - len: 500, - partial: true, - size: 1000, - start: 0, - unit: "bytes" - }); -}); - -test("should return error when range header is present but file size is not", () => { - const headers = { range: "bytes=0-10" }; - const fileSize = null; - const result = requestRange(headers, fileSize); - expect(result).toEqual({ - errorCode: 416, - errorMessage: "Requested Range Not Satisfiable (Unknown File Size)" - }); -}); - -test("should return error when range header is present but invalid", () => { - const headers = { range: "bytes" }; - const fileSize = 100; - const result = requestRange(headers, fileSize); - expect(result).toEqual({ - errorCode: 416, - errorMessage: "Requested Range Unit Not Satisfiable" - }); -}); - -test('should return error when range header is present but unit is not a "bytes"', () => { - const headers = { range: "k_bytes=0-10" }; - const fileSize = 100; - const result = requestRange(headers, fileSize); - expect(result).toEqual({ - errorCode: 416, - errorMessage: "Requested Range Unit Not Satisfiable" - }); -}); - -test("should return error when range header is present but start is greater than end", () => { - const headers = { range: "bytes=10-9" }; - const fileSize = 100; - const result = requestRange(headers, fileSize); - expect(result).toEqual({ - errorCode: 416, - errorMessage: "Requested Range Not Satisfiable" - }); -}); - -test("should return error when range header is present but end is greater than file size", () => { - const headers = { range: "bytes=0-1000" }; - const fileSize = 100; - const result = requestRange(headers, fileSize); - expect(result).toEqual({ - errorCode: 416, - errorMessage: "Requested Range Not Satisfiable" - }); -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ccefb58a57b..d3e9fc83a97 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -167,6 +167,11 @@ importers: '@reactioncommerce/api-plugin-payments-stripe-sca': 1.0.2 '@reactioncommerce/api-plugin-pricing-simple': 1.0.7 '@reactioncommerce/api-plugin-products': 1.3.1 + '@reactioncommerce/api-plugin-promotions': 0.0.0 + '@reactioncommerce/api-plugin-promotions-coupons': 0.0.0 + '@reactioncommerce/api-plugin-promotions-discounts': 0.0.0 + '@reactioncommerce/api-plugin-promotions-offers': .0.0 + '@reactioncommerce/api-plugin-sequences': 0.0.0 '@reactioncommerce/api-plugin-settings': 1.0.7 '@reactioncommerce/api-plugin-shipments': 1.0.3 '@reactioncommerce/api-plugin-shipments-flat-rate': 1.0.10 @@ -249,8 +254,9 @@ importers: '@reactioncommerce/file-collections-sa-gridfs': link:../../packages/file-collections-sa-gridfs '@reactioncommerce/logger': link:../../packages/logger '@reactioncommerce/random': link:../../packages/random - '@snyk/protect': 1.1081.0 + '@snyk/protect': 1.1096.0 graphql: 16.6.0 + nodemailer: 6.8.0 semver: 6.3.0 sharp: 0.30.7 devDependencies: @@ -4494,6 +4500,7 @@ packages: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: graphql: 16.6.0 + tslib: 2.4.1 dev: false /@humanwhocodes/config-array/0.10.4: @@ -5121,11 +5128,6 @@ packages: eslint-plugin-you-dont-need-lodash-underscore: 6.12.0 dev: true - /@reactioncommerce/nodemailer/5.0.5: - resolution: {integrity: sha512-u4ontTETlROmLglkMDyouMXlX62NXOGfOUAd75Ilk3W4tcsRjRXX+g5C5B4mBCCcJB0wHn1yh/a4pOYkn81vUQ==} - engines: {node: '>=4.0.0'} - dev: false - /@repeaterjs/repeater/3.0.4: resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} dev: false @@ -5145,8 +5147,8 @@ packages: '@sinonjs/commons': 1.8.3 dev: false - /@snyk/protect/1.1081.0: - resolution: {integrity: sha512-V+4DJPLorQph9j78PB3qpxOEREzXHJN/txg2Cxn2EGw+7IWOPPeLgUb4jO+tjVVmqMYmrvohMDQKErcjIxVqVg==} + /@snyk/protect/1.1096.0: + resolution: {integrity: sha512-E0hkw5TY8rIygL2uohywBrW72f1x/g36mHdMxS9UzLB9DHLDudJJYHMwJfdjl6dW7cuuTVauv8TDQireMkjOVw==} engines: {node: '>=10'} hasBin: true dev: false @@ -8417,6 +8419,10 @@ packages: engines: {node: '>=6'} dev: false + /eventemitter2/6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + dev: false + /events/1.1.1: resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} engines: {node: '>=0.4.x'} @@ -9685,6 +9691,25 @@ packages: dependencies: loose-envify: 1.4.0 + /ioredis/4.28.5: + resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==} + engines: {node: '>=6'} + dependencies: + cluster-key-slot: 1.1.2 + debug: 4.3.4 + denque: 1.5.1 + lodash.defaults: 4.2.0 + lodash.flatten: 4.4.0 + lodash.isarguments: 3.1.0 + p-map: 2.1.0 + redis-commands: 1.7.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + /ioredis/5.2.4: resolution: {integrity: sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==} engines: {node: '>=12.22.0'} @@ -11162,6 +11187,10 @@ packages: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} dev: false + /lodash.flatten/4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: false + /lodash.get/4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} @@ -11322,6 +11351,11 @@ packages: engines: {node: '>=12'} dev: false + /luxon/3.1.0: + resolution: {integrity: sha512-7w6hmKC0/aoWnEsmPCu5Br54BmbmUp5GfcqBxQngRcXJ+q5fdfjEzn7dxmJh2YdDhgW8PccYtlWKSv4tQkrTQg==} + engines: {node: '>=12'} + dev: false + /make-dir/1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} engines: {node: '>=4'} @@ -12869,6 +12903,10 @@ packages: strip-indent: 3.0.0 dev: false + /redis-commands/1.7.0: + resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} + dev: false + /redis-errors/1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} @@ -13538,13 +13576,6 @@ packages: smart-buffer: 4.2.0 dev: false - /socks/2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - dependencies: - ip: 2.0.0 - smart-buffer: 4.2.0 - /source-map-resolve/0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated