From dacd86e0d8b2e98f3b5c6480577c313bcc7b8f54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Mar 2025 19:55:47 +0000 Subject: [PATCH 01/35] Bump axios from 0.21.1 to 1.8.2 Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 1.8.2. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.21.1...v1.8.2) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 127 +++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 118 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 5db65dfe4..2465e0a74 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "agentkeepalive": "^4.0.2", "apollo-server-errors": "^2.2.1", "archiver": "^3.0.0", - "axios": "^0.21.1", + "axios": "^1.8.2", "axios-retry": "^3.1.2", "bluebird": "^3.5.4", "chalk": "^2.4.2", diff --git a/yarn.lock b/yarn.lock index 7f459da1f..8927e81c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1558,12 +1558,14 @@ axios-retry@^3.1.2: dependencies: is-retry-allowed "^1.1.0" -axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== +axios@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.2.tgz#fabe06e241dfe83071d4edfbcaa7b1c3a40f7979" + integrity sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" babel-jest@^25.1.0: version "25.1.0" @@ -1782,6 +1784,14 @@ cache-content-type@^1.0.0: mime-types "^2.1.18" ylru "^1.2.0" +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1921,7 +1931,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, 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== @@ -2236,6 +2246,15 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2310,6 +2329,33 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -2521,10 +2567,10 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== for-in@^1.0.2: version "1.0.2" @@ -2536,6 +2582,16 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -2611,11 +2667,35 @@ get-caller-file@^2.0.1, get-caller-file@^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-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-port@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -2671,6 +2751,11 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" @@ -2737,6 +2822,18 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -3892,6 +3989,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -4438,6 +4540,11 @@ protobufjs@^7.2.5, protobufjs@^7.3.0: "@types/node" ">=13.7.0" long "^5.0.0" +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.7.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" From 286137f62d95fba5b7df74d890d01a511d48fb6c Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Wed, 19 Mar 2025 17:45:53 -0300 Subject: [PATCH 02/35] Bump axios from 1.8.2 to 1.8.4 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2465e0a74..26fdca258 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "agentkeepalive": "^4.0.2", "apollo-server-errors": "^2.2.1", "archiver": "^3.0.0", - "axios": "^1.8.2", + "axios": "^1.8.4", "axios-retry": "^3.1.2", "bluebird": "^3.5.4", "chalk": "^2.4.2", diff --git a/yarn.lock b/yarn.lock index 8927e81c6..6a8dc6e83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1558,10 +1558,10 @@ axios-retry@^3.1.2: dependencies: is-retry-allowed "^1.1.0" -axios@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.2.tgz#fabe06e241dfe83071d4edfbcaa7b1c3a40f7979" - integrity sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg== +axios@^1.8.4: + version "1.8.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" From 35ded6025ee0e9c3908e1aece091817afe563698 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Wed, 19 Mar 2025 17:49:57 -0300 Subject: [PATCH 03/35] Solve lint issues in Auth.ts --- .../worker/runtime/graphql/schema/schemaDirectives/Auth.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/service/worker/runtime/graphql/schema/schemaDirectives/Auth.ts b/src/service/worker/runtime/graphql/schema/schemaDirectives/Auth.ts index e6a26cdca..c2aefe891 100644 --- a/src/service/worker/runtime/graphql/schema/schemaDirectives/Auth.ts +++ b/src/service/worker/runtime/graphql/schema/schemaDirectives/Auth.ts @@ -10,7 +10,7 @@ interface AuthDirectiveArgs { readonly resourceCode: string } -type VtexIdParsedToken = { +interface VtexIdParsedToken { user: string account: string } @@ -51,7 +51,7 @@ async function auth (ctx: ServiceContext, authArgs: AuthDirectiveArgs): Promise< } const parsedToken = await parseIdToken(ctx.vtex.authToken, vtexIdToken) - if (!parsedToken || parsedToken.account != ctx.vtex.account) { + if (!parsedToken || parsedToken.account !== ctx.vtex.account) { throw new AuthenticationError('Could not find user specified by VtexIdclientAutCookie.') } From 61c6422f72c20830fbca17c78879a3e5abf9c6ee Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Wed, 19 Mar 2025 17:55:16 -0300 Subject: [PATCH 04/35] Release v6.48.1-beta --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6b794cf9..57237b266 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fix `yarn gen` script - Update node-version on publish workflows +## [6.48.1-beta] - 2025-03-19 + ## [6.48.0] - 2024-10-23 ### Added - resolveAll to `MineWinsConflictsResolver` to handle an array of conflicts. @@ -1856,7 +1858,7 @@ instead - `HttpClient` now adds `'Accept-Encoding': 'gzip'` header by default. -[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.45.22...HEAD +[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta...HEAD [6.45.15]: https://github.com/vtex/node-vtex-api/compare/v6.45.14...v6.45.15 [6.45.14]: https://github.com/vtex/node-vtex-api/compare/v6.45.13...v6.45.14 [6.45.13]: https://github.com/vtex/node-vtex-api/compare/v6.45.12...v6.45.13 @@ -1869,3 +1871,5 @@ instead [6.45.21-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.20...v6.45.21-beta [6.45.20]: https://github.com/vtex/node-vtex-api/compare/v6.45.20-beta...v6.45.20 [6.45.20-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.19...v6.45.20-beta + +[6.48.1-beta]: https://github.com/vtex/node-vtex-api/compare/v6.48.0...v6.48.1-beta \ No newline at end of file From 74331ef20448c43c7371602f091f2c9f63a419db Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 14:33:25 -0300 Subject: [PATCH 05/35] Fix typings in cache gets --- src/caches/DiskCache.ts | 2 +- src/caches/LRUDiskCache.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/caches/DiskCache.ts b/src/caches/DiskCache.ts index 8d7d3c1bd..1f640ba05 100644 --- a/src/caches/DiskCache.ts +++ b/src/caches/DiskCache.ts @@ -34,7 +34,7 @@ export class DiskCache implements CacheLayer{ public get = async (key: string): Promise => { const pathKey = this.getPathKey(key) this.total += 1 - const data = await new Promise(resolve => { + const data = await new Promise(resolve => { this.lock.readLock(key, async (release: () => void) => { try { const fileData = await this.readFile(pathKey) diff --git a/src/caches/LRUDiskCache.ts b/src/caches/LRUDiskCache.ts index 8bc8980ba..60c16b6d1 100644 --- a/src/caches/LRUDiskCache.ts +++ b/src/caches/LRUDiskCache.ts @@ -70,7 +70,7 @@ export class LRUDiskCache implements CacheLayer{ const pathKey = this.getPathKey(key) - const data = await new Promise(resolve => { + const data = await new Promise(resolve => { this.lock.readLock(key, async (release: () => void) => { try { const fileData = await this.readFile(pathKey) From f29d8cd3efa5beba31a6df4f7ae18c06e7f07924 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 14:46:41 -0300 Subject: [PATCH 06/35] Fix typing errors in Apps client This had to do with the different error handling typing introduced in TS 4.0.0 and also with typings for Axios' `AxiosRequestConfig.responseEncoding`, which now also can be a string. --- src/HttpClient/typings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HttpClient/typings.ts b/src/HttpClient/typings.ts index fb42fdb43..275452203 100644 --- a/src/HttpClient/typings.ts +++ b/src/HttpClient/typings.ts @@ -48,7 +48,7 @@ export interface RequestConfig extends AxiosRequestConfig, RequestTracingConfig memoizeable?: boolean inflightKey?: InflightKeyGenerator forceMaxAge?: number - responseEncoding?: BufferEncoding + responseEncoding?: BufferEncoding | string nullIfNotFound?: boolean ignoreRecorder?: boolean } From 7bd5638d874504d2de66ea59b2a6e21857a021d0 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 14:54:25 -0300 Subject: [PATCH 07/35] Fix typings in VBase client I had to rework a default for a header object from null to {} since it wouldn't be accepted as a AxiosRequestConfig in the new typings from the lib --- src/clients/infra/VBase.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/clients/infra/VBase.ts b/src/clients/infra/VBase.ts index 1e3dd949f..e71b009e4 100644 --- a/src/clients/infra/VBase.ts +++ b/src/clients/infra/VBase.ts @@ -1,4 +1,4 @@ -import { AxiosError } from 'axios' +import { AxiosError, RawAxiosRequestHeaders } from 'axios' import { IncomingMessage } from 'http' import mime from 'mime-types' import { basename } from 'path' @@ -176,7 +176,7 @@ export class VBase extends InfraClient { } public deleteFile = (bucket: string, path: string, tracingConfig?: RequestTracingConfig, ifMatch?: string) => { - const headers = ifMatch ? { 'If-Match': ifMatch } : null + const headers: RawAxiosRequestHeaders | {} = ifMatch ? { 'If-Match': ifMatch } : {} const metric = 'vbase-delete-file' return this.http.delete(routes.File(bucket, path), {headers, metric, tracing: { requestSpanNameSuffix: metric, From 8943c8978ced8e4c2bcc6a74762bed4e4f03ed1b Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 15:14:41 -0300 Subject: [PATCH 08/35] Fix HttpClient typings Axios reworked its typings for headers, which made them incompatible with IOResponse's definition for headers. I used a old workaround to get through this: (T as any) --- src/HttpClient/HttpClient.ts | 6 +++--- src/HttpClient/typings.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/HttpClient/HttpClient.ts b/src/HttpClient/HttpClient.ts index fd4399826..5744ead0d 100644 --- a/src/HttpClient/HttpClient.ts +++ b/src/HttpClient/HttpClient.ts @@ -130,7 +130,7 @@ export class HttpClient { public getRaw = (url: string, config: RequestConfig = {}): Promise> => { const cacheableConfig = this.getConfig(url, config) - return this.request(cacheableConfig) + return this.request(cacheableConfig) as any } public getWithBody = (url: string, data?: any, config: RequestConfig = {}): Promise => { @@ -198,12 +198,12 @@ export class HttpClient { public head = (url: string, config: RequestConfig = {}): Promise> => { const headConfig: RequestConfig = { ...config, url, method: 'head' } - return this.request(headConfig) + return this.request(headConfig) as any } public delete = (url: string, config?: RequestConfig): Promise> => { const deleteConfig: RequestConfig = { ...config, url, method: 'delete' } - return this.request(deleteConfig) + return this.request(deleteConfig) as any } protected request = async (config: RequestConfig): Promise => { diff --git a/src/HttpClient/typings.ts b/src/HttpClient/typings.ts index 275452203..45b79f72e 100644 --- a/src/HttpClient/typings.ts +++ b/src/HttpClient/typings.ts @@ -1,4 +1,4 @@ -import { AxiosRequestConfig, AxiosResponse } from 'axios' +import { AxiosRequestConfig, AxiosResponse, RawAxiosResponseHeaders } from 'axios' import { Middleware } from 'koa-compose' import { Span } from 'opentracing' From e801f77d8bc672779249d7b94bee6941515a8358 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:03:34 -0300 Subject: [PATCH 09/35] Fix typings in HttpClient.middlewares.cache I had to cast many things here to any in order to avoid risking to change the API we provide to outside the library --- src/HttpClient/middlewares/cache.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/HttpClient/middlewares/cache.ts b/src/HttpClient/middlewares/cache.ts index e66782886..8ae8b60e1 100644 --- a/src/HttpClient/middlewares/cache.ts +++ b/src/HttpClient/middlewares/cache.ts @@ -15,7 +15,7 @@ const cacheableStatusCodes = [200, 203, 204, 206, 300, 301, 404, 405, 410, 414, export const cacheKey = (config: AxiosRequestConfig) => { const {baseURL = '', url = '', params, headers} = config - const locale = headers[LOCALE_HEADER] + const locale = headers?.[LOCALE_HEADER] const encodedBaseURL = baseURL.replace(/\//g, '\\') const encodedURL = url.replace(/\//g, '\\') @@ -97,7 +97,7 @@ export const cacheMiddleware = ({ type, storage, asyncSet }: CacheOptions) => { const { rootSpan: span, tracer, logger } = ctx.tracing ?? {} const key = cacheKey(ctx.config) - const segmentToken = ctx.config.headers[SEGMENT_HEADER] + const segmentToken = ctx.config.headers?.[SEGMENT_HEADER] const keyWithSegment = key + segmentToken span?.log({ @@ -153,7 +153,10 @@ export const cacheMiddleware = ({ type, storage, asyncSet }: CacheOptions) => { span?.setTag(CACHE_RESULT_TAG, CacheResult.STALE) const validateStatus = addNotModified(ctx.config.validateStatus!) if (cachedEtag && validateStatus(response.status as number)) { - ctx.config.headers['if-none-match'] = cachedEtag + ctx.config.headers = { + ...ctx.config.headers, + 'if-none-match': cachedEtag + } ctx.config.validateStatus = validateStatus } } else { @@ -177,7 +180,7 @@ export const cacheMiddleware = ({ type, storage, asyncSet }: CacheOptions) => { } const {data, headers, status} = ctx.response as AxiosResponse - const {age, etag, maxAge: headerMaxAge, noStore, noCache} = parseCacheHeaders(headers) + const {age, etag, maxAge: headerMaxAge, noStore, noCache} = parseCacheHeaders(headers as any) const {forceMaxAge} = ctx.config const maxAge = forceMaxAge && cacheableStatusCodes.includes(status) ? Math.max(forceMaxAge, headerMaxAge) : headerMaxAge @@ -229,7 +232,7 @@ export const cacheMiddleware = ({ type, storage, asyncSet }: CacheOptions) => { etag, expiration, response: {data: cacheableData, headers, status}, - responseEncoding, + responseEncoding: responseEncoding as any, responseType, }) if (asyncSet) { From 1f5ac117a0281e670ec12645b9711f5f50c1898c Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:07:51 -0300 Subject: [PATCH 10/35] Fix typings in HttpClient.middlewares.metrics In this case, I just clause-guarded the error handling for an instance of AxiosError since the doing the operations that happen after it wouldn't make sense otherwise. --- src/HttpClient/middlewares/metrics.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/HttpClient/middlewares/metrics.ts b/src/HttpClient/middlewares/metrics.ts index 2e8b3f349..31b9eb362 100644 --- a/src/HttpClient/middlewares/metrics.ts +++ b/src/HttpClient/middlewares/metrics.ts @@ -13,6 +13,7 @@ import { import { TIMEOUT_CODE } from '../../utils/retry' import { statusLabel } from '../../utils/status' import { MiddlewareContext } from '../typings' +import { AxiosError } from 'axios' interface MetricsOpts { metrics?: MetricsAccumulator From 1799d7e282b7ea6c22ccd1fa7b427fbbde595801 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:09:42 -0300 Subject: [PATCH 11/35] Fix typings in HttpClient.middlewares.recorder Here, I also clause-guarded the error handling for an AxiosError instance --- src/HttpClient/middlewares/recorder.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/HttpClient/middlewares/recorder.ts b/src/HttpClient/middlewares/recorder.ts index 76bc62bec..91a5093df 100644 --- a/src/HttpClient/middlewares/recorder.ts +++ b/src/HttpClient/middlewares/recorder.ts @@ -1,3 +1,4 @@ +import { AxiosError } from 'axios' import { MiddlewareContext } from '../typings' import { Recorder, @@ -13,11 +14,11 @@ export const recorderMiddleware = (recorder: Recorder) => try { await next() if (ctx.response) { - (recorder as Recorder).record(ctx.response.headers) + (recorder as Recorder).record(ctx.response.headers as any) } } catch (err: any) { if (err.response && err.response.headers && err.response.status === 404) { - (recorder as Recorder).record(err.response.headers) + (recorder as Recorder).record(err.response.headers as any) } throw err } From 3604de8bfaf48dc17dd28b55eb40cbfbd12713e2 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:12:02 -0300 Subject: [PATCH 12/35] Fix typings in HttpClient.middlewares.request Once again, I use any-casting to maintain compatibility between AxiosRequestConfig and IORequestConfig --- src/HttpClient/middlewares/request/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HttpClient/middlewares/request/index.ts b/src/HttpClient/middlewares/request/index.ts index 2ec3f3f9d..b6fdbb061 100644 --- a/src/HttpClient/middlewares/request/index.ts +++ b/src/HttpClient/middlewares/request/index.ts @@ -47,7 +47,7 @@ export const defaultsMiddleware = ({ baseURL, rawHeaders, params, timeout, retri ...ctx.config, headers: { ...headers, - ...renameBy(toLower, ctx.config.headers), + ...renameBy(toLower, ctx.config.headers as any), }, params: { ...params, From 40d8f456ec55aa0221b3c18529259adc968838ee Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:15:25 -0300 Subject: [PATCH 13/35] Fix typings in HttpClient...interceptors.tracing.spanSetup Cast to any to avoid problems between AxiosRequestConfig and IORequestConfig --- .../request/setupAxios/interceptors/tracing/spanSetup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.ts b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.ts index 6ca32dcc4..fb26e11d1 100644 --- a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.ts +++ b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.ts @@ -12,7 +12,7 @@ export const injectRequestInfoOnSpan = (span: Span | undefined, http: AxiosInsta [OpentracingTags.HTTP_URL]: buildFullPath(config.baseURL, http.getUri(config)), }) - span?.log({ 'request-headers': cloneAndSanitizeHeaders(config.headers) }) + span?.log({ 'request-headers': cloneAndSanitizeHeaders(config.headers as any) }) } // Response may be undefined in case of client timeout, invalid URL, ... From ba51b4a6459f2da95648c23c3781934d95e2790d Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:17:33 -0300 Subject: [PATCH 14/35] Fix typings in HttpClient.middlewares.tracing Once again, only make error handling if we're actually dealing with an AxiosError --- src/HttpClient/middlewares/tracing.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/HttpClient/middlewares/tracing.ts b/src/HttpClient/middlewares/tracing.ts index c156e86a4..b5f4a1b72 100644 --- a/src/HttpClient/middlewares/tracing.ts +++ b/src/HttpClient/middlewares/tracing.ts @@ -1,3 +1,4 @@ +import { AxiosError } from 'axios' import { MiddlewaresTracingContext, RequestConfig } from '..' import { IOContext } from '../../service/worker/runtime/typings' import { ErrorReport, getTraceInfo } from '../../tracing' From 7b917fd7a5ef95eb55c61fd4aafc94e942f55142 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:27:14 -0300 Subject: [PATCH 15/35] Fix typings in service.worker.runtime.graphql.middlewares.error Only handle errors which are instances of ApolloError. This particular error handler expects errors will come as extensions of ApolloError, otherwise the operations within the error handler wouldn't make any sense. --- src/service/worker/runtime/graphql/middlewares/error.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/worker/runtime/graphql/middlewares/error.ts b/src/service/worker/runtime/graphql/middlewares/error.ts index 03169f2b8..13c1f42e1 100644 --- a/src/service/worker/runtime/graphql/middlewares/error.ts +++ b/src/service/worker/runtime/graphql/middlewares/error.ts @@ -1,4 +1,4 @@ -import { formatApolloErrors } from 'apollo-server-errors' +import { ApolloError, formatApolloErrors } from 'apollo-server-errors' import { uniqBy } from 'ramda' import { LINKED } from '../../../../../constants' From 819b344b8753486d736b3d5cd723a5bfcb5767cf Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:32:11 -0300 Subject: [PATCH 16/35] Fix typings in service.worker.runtime.http.middlewares.error Only make operations with status codes if the error is an AxiosError --- .../worker/runtime/http/middlewares/error.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/service/worker/runtime/http/middlewares/error.ts b/src/service/worker/runtime/http/middlewares/error.ts index fbb2fd904..45e34f01b 100644 --- a/src/service/worker/runtime/http/middlewares/error.ts +++ b/src/service/worker/runtime/http/middlewares/error.ts @@ -1,3 +1,4 @@ +import { AxiosError } from 'axios' import { IOClients } from '../../../../../clients/IOClients' import { LINKED } from '../../../../../constants' import { @@ -102,12 +103,13 @@ export async function error (ctx: ServiceContext, next: () => Promise) { const err = cleanError(e) // Add response - ctx.status = e && e.status >= 400 && e.status <= 599 - ? e.status - : ctx.status >= 500 && ctx.status <= 599 - ? ctx.status - : 500 - + if(e instanceof AxiosError){ + ctx.status = e?.status && e.status >= 400 && e.status <= 599 + ? e.status + : ctx.status >= 500 && ctx.status <= 599 + ? ctx.status + : 500 + } // Do not generate etag for errors ctx.remove(META_HEADER) ctx.remove(ETAG_HEADER) From 54427dd35e6424f2f45e23b09c4fcc7ed1f2c1b1 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 28 Mar 2025 22:40:40 -0300 Subject: [PATCH 17/35] Fix typings in HttpClient...interceptors.tracing InternalAxiosRequestConfig is now the actual type being used in AxiosResponse. So our TraceableAxiosRequestConfig should implement that instead of what it was implementing before. --- .../request/setupAxios/interceptors/tracing/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts index 451a34ae2..8aa0658b3 100644 --- a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts +++ b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts @@ -1,4 +1,4 @@ -import { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios' +import { AxiosError, AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from 'axios' import { FORMAT_HTTP_HEADERS, Span } from 'opentracing' import { createSpanReference, ErrorReport } from '../../../../../../tracing' import { SpanReferenceTypes } from '../../../../../../tracing/spanReference/SpanReferenceTypes' @@ -9,7 +9,7 @@ interface AxiosRequestTracingContext extends MiddlewaresTracingContext { requestSpan?: Span } -interface TraceableAxiosRequestConfig extends AxiosRequestConfig { +interface TraceableAxiosRequestConfig extends InternalAxiosRequestConfig { tracing?: AxiosRequestTracingContext } From dc34076f0b4d97abcda929ae0a385ff3af507b25 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Mon, 31 Mar 2025 13:54:38 -0300 Subject: [PATCH 18/35] Release v6.48.1-beta.0 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57237b266..5d4586af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fix `yarn gen` script - Update node-version on publish workflows +## [6.48.1-beta.0] - 2025-03-31 + ## [6.48.1-beta] - 2025-03-19 ## [6.48.0] - 2024-10-23 @@ -1858,7 +1860,7 @@ instead - `HttpClient` now adds `'Accept-Encoding': 'gzip'` header by default. -[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta...HEAD +[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.0...HEAD [6.45.15]: https://github.com/vtex/node-vtex-api/compare/v6.45.14...v6.45.15 [6.45.14]: https://github.com/vtex/node-vtex-api/compare/v6.45.13...v6.45.14 [6.45.13]: https://github.com/vtex/node-vtex-api/compare/v6.45.12...v6.45.13 @@ -1872,4 +1874,5 @@ instead [6.45.20]: https://github.com/vtex/node-vtex-api/compare/v6.45.20-beta...v6.45.20 [6.45.20-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.19...v6.45.20-beta +[6.48.1-beta.0]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta...v6.48.1-beta.0 [6.48.1-beta]: https://github.com/vtex/node-vtex-api/compare/v6.48.0...v6.48.1-beta \ No newline at end of file diff --git a/package.json b/package.json index 26fdca258..0cee50c99 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vtex/api", - "version": "6.49.1", + "version": "6.48.1-beta.0", "description": "VTEX I/O API client", "main": "lib/index.js", "typings": "lib/index.d.ts", From 064e4c05cda289be2874097087510074c9c9c57d Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Mon, 31 Mar 2025 17:20:23 -0300 Subject: [PATCH 19/35] Fix `typescript-json-schema` issues (yarn gen) --- src/caches/MultilayeredCache.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/caches/MultilayeredCache.ts b/src/caches/MultilayeredCache.ts index b44056404..9ec1337cd 100644 --- a/src/caches/MultilayeredCache.ts +++ b/src/caches/MultilayeredCache.ts @@ -10,7 +10,7 @@ export class MultilayeredCache implements CacheLayer{ constructor (private caches: Array>) {} public get = async (key: K, fetcher?: () => Promise>): Promise => { - let value: V | void + let value: V | void = undefined let maxAge: number | void let successIndex = await this.findIndex(async (cache: CacheLayer) => { const [getValue, hasKey] = await Promise.all([cache.get(key), cache.has(key)]) From 79aa2ce1b6bcf91410253e06e45ec60a49877280 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Mon, 31 Mar 2025 17:43:14 -0300 Subject: [PATCH 20/35] Release v6.48.1-beta.1 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d4586af8..1d52617a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fix `yarn gen` script - Update node-version on publish workflows +## [6.48.1-beta.1] - 2025-03-31 + ## [6.48.1-beta.0] - 2025-03-31 ## [6.48.1-beta] - 2025-03-19 @@ -1860,7 +1862,7 @@ instead - `HttpClient` now adds `'Accept-Encoding': 'gzip'` header by default. -[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.0...HEAD +[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.1...HEAD [6.45.15]: https://github.com/vtex/node-vtex-api/compare/v6.45.14...v6.45.15 [6.45.14]: https://github.com/vtex/node-vtex-api/compare/v6.45.13...v6.45.14 [6.45.13]: https://github.com/vtex/node-vtex-api/compare/v6.45.12...v6.45.13 @@ -1874,5 +1876,6 @@ instead [6.45.20]: https://github.com/vtex/node-vtex-api/compare/v6.45.20-beta...v6.45.20 [6.45.20-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.19...v6.45.20-beta +[6.48.1-beta.1]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.0...v6.48.1-beta.1 [6.48.1-beta.0]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta...v6.48.1-beta.0 [6.48.1-beta]: https://github.com/vtex/node-vtex-api/compare/v6.48.0...v6.48.1-beta \ No newline at end of file diff --git a/package.json b/package.json index 0cee50c99..38fa11427 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vtex/api", - "version": "6.48.1-beta.0", + "version": "6.48.1-beta.1", "description": "VTEX I/O API client", "main": "lib/index.js", "typings": "lib/index.d.ts", From 34994b4e9b9bedd1597a1a7d1ea187ff0086beeb Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Mon, 31 Mar 2025 17:50:13 -0300 Subject: [PATCH 21/35] Release v6.48.1-beta.2 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d52617a4..f53b58a6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fix `yarn gen` script - Update node-version on publish workflows +## [6.48.1-beta.2] - 2025-03-31 + ## [6.48.1-beta.1] - 2025-03-31 ## [6.48.1-beta.0] - 2025-03-31 @@ -1862,7 +1864,7 @@ instead - `HttpClient` now adds `'Accept-Encoding': 'gzip'` header by default. -[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.1...HEAD +[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.2...HEAD [6.45.15]: https://github.com/vtex/node-vtex-api/compare/v6.45.14...v6.45.15 [6.45.14]: https://github.com/vtex/node-vtex-api/compare/v6.45.13...v6.45.14 [6.45.13]: https://github.com/vtex/node-vtex-api/compare/v6.45.12...v6.45.13 @@ -1876,6 +1878,7 @@ instead [6.45.20]: https://github.com/vtex/node-vtex-api/compare/v6.45.20-beta...v6.45.20 [6.45.20-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.19...v6.45.20-beta +[6.48.1-beta.2]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.1...v6.48.1-beta.2 [6.48.1-beta.1]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.0...v6.48.1-beta.1 [6.48.1-beta.0]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta...v6.48.1-beta.0 [6.48.1-beta]: https://github.com/vtex/node-vtex-api/compare/v6.48.0...v6.48.1-beta \ No newline at end of file diff --git a/package.json b/package.json index 38fa11427..3f461a612 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vtex/api", - "version": "6.48.1-beta.1", + "version": "6.48.1-beta.2", "description": "VTEX I/O API client", "main": "lib/index.js", "typings": "lib/index.d.ts", From 93135be3f32decfb768b6de0d1b6944f34db2074 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Mon, 31 Mar 2025 17:52:29 -0300 Subject: [PATCH 22/35] Update NodeJS in all CI workflows --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 418debfc0..42ff68521 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: - node-version: 12 + node-version: 22 - run: yarn install --ignore-scripts - run: yarn run lint @@ -24,7 +24,7 @@ jobs: strategy: fail-fast: true matrix: - node-version: [12] + node-version: [22] os: [ubuntu-latest] steps: From 187b096c3a12a5e26c6b1b9d0a0fe08258b43f3a Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Mon, 28 Apr 2025 16:13:10 -0300 Subject: [PATCH 23/35] Create compatibility with TS 3.9.7 --- src/HttpClient/middlewares/request/index.ts | 2 +- .../setupAxios/interceptors/tracing/index.ts | 21 +- .../interceptors/tracing/spanSetup.ts | 2 +- src/axios.d.ts | 237 ++++++++++++++++++ src/utils/buildFullPath.ts | 56 +++++ tsconfig.json | 6 +- 6 files changed, 316 insertions(+), 8 deletions(-) create mode 100644 src/axios.d.ts create mode 100644 src/utils/buildFullPath.ts diff --git a/src/HttpClient/middlewares/request/index.ts b/src/HttpClient/middlewares/request/index.ts index b6fdbb061..fa9c737d0 100644 --- a/src/HttpClient/middlewares/request/index.ts +++ b/src/HttpClient/middlewares/request/index.ts @@ -1,5 +1,5 @@ import { AxiosRequestConfig } from 'axios' -import buildFullPath from 'axios/lib/core/buildFullPath' +import buildFullPath from '../../../utils/buildFullPath' import { Limit } from 'p-limit' import { stringify } from 'qs' import { toLower } from 'ramda' diff --git a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts index 8aa0658b3..189372528 100644 --- a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts +++ b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts @@ -1,4 +1,4 @@ -import { AxiosError, AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from 'axios' +import { AxiosError, AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios' import { FORMAT_HTTP_HEADERS, Span } from 'opentracing' import { createSpanReference, ErrorReport } from '../../../../../../tracing' import { SpanReferenceTypes } from '../../../../../../tracing/spanReference/SpanReferenceTypes' @@ -9,7 +9,8 @@ interface AxiosRequestTracingContext extends MiddlewaresTracingContext { requestSpan?: Span } -interface TraceableAxiosRequestConfig extends InternalAxiosRequestConfig { +// Modificado para usar AxiosRequestConfig em vez de InternalAxiosRequestConfig +interface TraceableAxiosRequestConfig extends AxiosRequestConfig { tracing?: AxiosRequestTracingContext } @@ -31,7 +32,6 @@ const preRequestInterceptor = (http: AxiosInstance) => ( } const { tracer, rootSpan, requestSpanNameSuffix } = config.tracing - const spanName = requestSpanNameSuffix ? `${requestSpanPrefix}:${requestSpanNameSuffix}` : requestSpanPrefix const span = rootSpan @@ -44,6 +44,7 @@ const preRequestInterceptor = (http: AxiosInstance) => ( config.tracing.requestSpan = span tracer.inject(span, FORMAT_HTTP_HEADERS, config.headers) + return config } @@ -55,6 +56,7 @@ const onResponseSuccess = (response: TraceableAxiosResponse): TraceableAxiosResp const requestSpan = response.config.tracing?.requestSpan injectResponseInfoOnSpan(requestSpan, response) requestSpan?.finish() + return response } @@ -67,17 +69,26 @@ const onResponseError = (err: ExtendedAxiosError) => { injectResponseInfoOnSpan(requestSpan, err.response) ErrorReport.create({ originalError: err }).injectOnSpan(requestSpan, err.config.tracing.logger) requestSpan.finish() + return Promise.reject(err) } export const addTracingPreRequestInterceptor = (http: AxiosInstance) => { - const requestTracingInterceptor = http.interceptors.request.use(preRequestInterceptor(http), undefined) + // Usando type assertion para compatibilidade com TypeScript 3.9.7 + const requestTracingInterceptor = http.interceptors.request.use( + preRequestInterceptor(http) as any, + undefined + ) return { requestTracingInterceptor } } export const addTracingResponseInterceptor = (http: AxiosInstance) => { - const responseTracingInterceptor = http.interceptors.response.use(onResponseSuccess, onResponseError) + // Usando type assertion para compatibilidade com TypeScript 3.9.7 + const responseTracingInterceptor = http.interceptors.response.use( + onResponseSuccess as any, + onResponseError as any + ) return { responseTracingInterceptor } } diff --git a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.ts b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.ts index fb26e11d1..d9ead2892 100644 --- a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.ts +++ b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.ts @@ -1,5 +1,5 @@ import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios' -import buildFullPath from 'axios/lib/core/buildFullPath' +import buildFullPath from '../../../../../../utils/buildFullPath' import { Span } from 'opentracing' import { ROUTER_CACHE_HEADER } from '../../../../../../constants' import { CustomHttpTags, OpentracingTags } from '../../../../../../tracing/Tags' diff --git a/src/axios.d.ts b/src/axios.d.ts new file mode 100644 index 000000000..fc1a9a18c --- /dev/null +++ b/src/axios.d.ts @@ -0,0 +1,237 @@ +declare module 'axios/index' {} + +declare module 'axios' { + export interface AxiosTransformer { + (data: any, headers?: any): any; + } + + export interface AxiosAdapter { + (config: AxiosRequestConfig): AxiosPromise; + } + + export interface AxiosBasicCredentials { + username: string; + password: string; + } + + export interface AxiosProxyConfig { + host: string; + port: number; + auth?: { + username: string; + password: string; + }; + protocol?: string; + } + + export type Method = + | 'get' | 'GET' + | 'delete' | 'DELETE' + | 'head' | 'HEAD' + | 'options' | 'OPTIONS' + | 'post' | 'POST' + | 'put' | 'PUT' + | 'patch' | 'PATCH' + | 'link' | 'LINK' + | 'unlink' | 'UNLINK'; + + export type ResponseType = + | 'arraybuffer' + | 'blob' + | 'document' + | 'json' + | 'text' + | 'stream'; + + // Tipos de cabeçalho + export type RawAxiosRequestHeaders = Record; + export type RawAxiosResponseHeaders = Record; + export interface AxiosHeaders extends Record { + set(headerName: string, value: string): AxiosHeaders; + get(headerName: string): string | undefined; + delete(headerName: string): boolean; + clear(): AxiosHeaders; + toJSON(): Record; + [key: string]: any; + } + + export interface AxiosRequestConfig { + url?: string; + method?: Method; + baseURL?: string; + transformRequest?: AxiosTransformer | AxiosTransformer[]; + transformResponse?: AxiosTransformer | AxiosTransformer[]; + headers?: RawAxiosRequestHeaders; + params?: any; + paramsSerializer?: (params: any) => string; + data?: any; + timeout?: number; + timeoutErrorMessage?: string; + withCredentials?: boolean; + adapter?: AxiosAdapter; + auth?: AxiosBasicCredentials; + responseType?: ResponseType; + responseEncoding?: string; + xsrfCookieName?: string; + xsrfHeaderName?: string; + onUploadProgress?: (progressEvent: any) => void; + onDownloadProgress?: (progressEvent: any) => void; + maxContentLength?: number; + maxBodyLength?: number; + validateStatus?: (status: number) => boolean; + maxRedirects?: number; + socketPath?: string | null; + httpAgent?: any; + httpsAgent?: any; + proxy?: AxiosProxyConfig | false; + cancelToken?: CancelToken; + decompress?: boolean; + transitional?: any; + signal?: any; + insecureHTTPParser?: boolean; + [key: string]: any; // Para permitir qualquer propriedade adicional + } + + export interface InternalAxiosRequestConfig extends AxiosRequestConfig { + headers: AxiosHeaders | RawAxiosRequestHeaders; + [key: string]: any; // Para permitir propriedades adicionais como 'tracing' + } + + export interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: RawAxiosResponseHeaders; + config: AxiosRequestConfig; + request?: any; + } + + // Define AxiosError como uma classe para fazer instanceof funcionar + export class AxiosError extends Error { + config: AxiosRequestConfig; + code?: string; + request?: any; + response?: AxiosResponse; + isAxiosError: boolean; + status?: number; + + constructor( + message?: string, + code?: string, + config?: AxiosRequestConfig, + request?: any, + response?: AxiosResponse + ); + + toJSON(): object; + + // Métodos estáticos para criar instâncias de AxiosError + static from( + error: Error, + code?: string, + config?: AxiosRequestConfig, + request?: any, + response?: AxiosResponse, + customProps?: Record + ): AxiosError; + } + + export interface AxiosPromise extends Promise> { + } + + export interface CancelStatic { + new (message?: string): Cancel; + } + + export interface Cancel { + message: string; + } + + export interface Canceler { + (message?: string): void; + } + + export interface CancelTokenStatic { + new (executor: (cancel: Canceler) => void): CancelToken; + source(): CancelTokenSource; + } + + export interface CancelToken { + promise: Promise; + reason?: Cancel; + throwIfRequested(): void; + } + + export interface CancelTokenSource { + token: CancelToken; + cancel: Canceler; + } + + export interface AxiosInterceptorManager { + use(onFulfilled?: (value: V) => V | Promise, onRejected?: (error: any) => any): number; + eject(id: number): void; + clear(): void; + } + + export interface AxiosInstance { + (config: AxiosRequestConfig): AxiosPromise; + (url: string, config?: AxiosRequestConfig): AxiosPromise; + defaults: AxiosRequestConfig; + interceptors: { + request: AxiosInterceptorManager; + response: AxiosInterceptorManager; + }; + getUri(config?: AxiosRequestConfig): string; + request>(config: AxiosRequestConfig): Promise; + get>(url: string, config?: AxiosRequestConfig): Promise; + delete>(url: string, config?: AxiosRequestConfig): Promise; + head>(url: string, config?: AxiosRequestConfig): Promise; + options>(url: string, config?: AxiosRequestConfig): Promise; + post>(url: string, data?: any, config?: AxiosRequestConfig): Promise; + put>(url: string, data?: any, config?: AxiosRequestConfig): Promise; + patch>(url: string, data?: any, config?: AxiosRequestConfig): Promise; + } + + export interface AxiosStatic extends AxiosInstance { + create(config?: AxiosRequestConfig): AxiosInstance; + Cancel: CancelStatic; + CancelToken: CancelTokenStatic; + isCancel(value: any): boolean; + all(values: (T | Promise)[]): Promise; + spread(callback: (...args: T[]) => R): (array: T[]) => R; + isAxiosError(payload: any): payload is AxiosError; + } + + const axios: AxiosStatic; + + export const AxiosError: { + new ( + message?: string, + code?: string, + config?: AxiosRequestConfig, + request?: any, + response?: AxiosResponse + ): AxiosError; + readonly prototype: AxiosError; + readonly ERR_NETWORK: string; + readonly ERR_BAD_REQUEST: string; + readonly TIMEOUT_ERROR_CODE: string; + readonly ERR_BAD_RESPONSE: string; + readonly ERR_FR_TOO_MANY_REDIRECTS: string; + readonly ERR_DEPRECATED: string; + readonly ERR_BAD_OPTION_VALUE: string; + readonly ERR_CANCELED: string; + readonly ECONNABORTED: string; + readonly ETIMEDOUT: string; + from( + error: Error, + code?: string, + config?: AxiosRequestConfig, + request?: any, + response?: AxiosResponse, + customProps?: Record + ): AxiosError; + }; + + export default axios; +} diff --git a/src/utils/buildFullPath.ts b/src/utils/buildFullPath.ts new file mode 100644 index 000000000..b4efcdff9 --- /dev/null +++ b/src/utils/buildFullPath.ts @@ -0,0 +1,56 @@ +// This module is part of the Axios library. +// It is used to build a full URL by combining a base URL with a relative URL. + +// It is originally not intended to be used directly, but rather as a utility function within the Axios library. +// Since Axios 1.0, this function is not exported by default, and the team does not recommend using it directly, +// as it may not be available in future versions. + +// The function takes a base URL and a relative URL as input, and returns the full URL. +// It handles both absolute and relative URLs, and ensures that the resulting URL is properly formatted. +// It is used internally by Axios to construct the full URL for HTTP requests. + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +export default function(baseURL?: string, requestedURL?: string, allowAbsoluteUrls?: boolean): string | undefined { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; + } + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + function isAbsoluteURL(url?: string): boolean { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return !!url && /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); + } + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ + function combineURLs(baseURL?: string, relativeURL?: string): string | undefined { + return relativeURL && baseURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; + } \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 4224ecc7f..09f457d94 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,11 @@ "declaration": true, "outDir": "lib", "skipLibCheck": true, - "forceConsistentCasingInFileNames": true + "forceConsistentCasingInFileNames": true, + "baseUrl": "./", + "paths": { + "axios": ["src/axios.d.ts"] + } }, "include": ["src/**/*.ts"], "exclude": ["**/__tests__", "**/*.test.ts"] From f000934a9f2fd4855efb58e24be032e63a399f3c Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Mon, 28 Apr 2025 16:14:02 -0300 Subject: [PATCH 24/35] Release v6.48.1-beta.3 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f53b58a6d..24350680d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fix `yarn gen` script - Update node-version on publish workflows +## [6.48.1-beta.3] - 2025-04-28 + ## [6.48.1-beta.2] - 2025-03-31 ## [6.48.1-beta.1] - 2025-03-31 @@ -1864,7 +1866,7 @@ instead - `HttpClient` now adds `'Accept-Encoding': 'gzip'` header by default. -[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.2...HEAD +[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.3...HEAD [6.45.15]: https://github.com/vtex/node-vtex-api/compare/v6.45.14...v6.45.15 [6.45.14]: https://github.com/vtex/node-vtex-api/compare/v6.45.13...v6.45.14 [6.45.13]: https://github.com/vtex/node-vtex-api/compare/v6.45.12...v6.45.13 @@ -1878,6 +1880,7 @@ instead [6.45.20]: https://github.com/vtex/node-vtex-api/compare/v6.45.20-beta...v6.45.20 [6.45.20-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.19...v6.45.20-beta +[6.48.1-beta.3]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.2...v6.48.1-beta.3 [6.48.1-beta.2]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.1...v6.48.1-beta.2 [6.48.1-beta.1]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.0...v6.48.1-beta.1 [6.48.1-beta.0]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta...v6.48.1-beta.0 diff --git a/package.json b/package.json index 3f461a612..7dc5d7d67 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vtex/api", - "version": "6.48.1-beta.2", + "version": "6.48.1-beta.3", "description": "VTEX I/O API client", "main": "lib/index.js", "typings": "lib/index.d.ts", From ec6be9954f362b73aba45df9b2a2abb2b2955daf Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Sun, 4 May 2025 07:08:09 -0300 Subject: [PATCH 25/35] Release v6.48.1-beta.4 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24350680d..2758cf899 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [6.48.1-beta.4] - 2025-05-04 + ## [6.49.1] - 2025-04-30 ### Fixed - Add yarn.lock changes from previous release @@ -1866,7 +1868,7 @@ instead - `HttpClient` now adds `'Accept-Encoding': 'gzip'` header by default. -[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.3...HEAD +[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.4...HEAD [6.45.15]: https://github.com/vtex/node-vtex-api/compare/v6.45.14...v6.45.15 [6.45.14]: https://github.com/vtex/node-vtex-api/compare/v6.45.13...v6.45.14 [6.45.13]: https://github.com/vtex/node-vtex-api/compare/v6.45.12...v6.45.13 @@ -1880,6 +1882,7 @@ instead [6.45.20]: https://github.com/vtex/node-vtex-api/compare/v6.45.20-beta...v6.45.20 [6.45.20-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.19...v6.45.20-beta +[6.48.1-beta.4]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.3...v6.48.1-beta.4 [6.48.1-beta.3]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.2...v6.48.1-beta.3 [6.48.1-beta.2]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.1...v6.48.1-beta.2 [6.48.1-beta.1]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.0...v6.48.1-beta.1 diff --git a/package.json b/package.json index 7dc5d7d67..8d4e37f6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vtex/api", - "version": "6.48.1-beta.3", + "version": "6.48.1-beta.4", "description": "VTEX I/O API client", "main": "lib/index.js", "typings": "lib/index.d.ts", From d28d182cac5270cbf6ba541a4f07b2f03a8256d9 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Thu, 22 May 2025 17:11:44 -0300 Subject: [PATCH 26/35] Update Changelog --- CHANGELOG.md | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2758cf899..14b834f1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] -## [6.48.1-beta.4] - 2025-05-04 +### Fixed +- Bumped `axios` to newest version without vuln CVE-2025-27152 ## [6.49.1] - 2025-04-30 ### Fixed @@ -22,16 +23,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fix `yarn gen` script - Update node-version on publish workflows -## [6.48.1-beta.3] - 2025-04-28 - -## [6.48.1-beta.2] - 2025-03-31 - -## [6.48.1-beta.1] - 2025-03-31 - -## [6.48.1-beta.0] - 2025-03-31 - -## [6.48.1-beta] - 2025-03-19 - ## [6.48.0] - 2024-10-23 ### Added - resolveAll to `MineWinsConflictsResolver` to handle an array of conflicts. @@ -1881,10 +1872,3 @@ instead [6.45.21-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.20...v6.45.21-beta [6.45.20]: https://github.com/vtex/node-vtex-api/compare/v6.45.20-beta...v6.45.20 [6.45.20-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.19...v6.45.20-beta - -[6.48.1-beta.4]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.3...v6.48.1-beta.4 -[6.48.1-beta.3]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.2...v6.48.1-beta.3 -[6.48.1-beta.2]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.1...v6.48.1-beta.2 -[6.48.1-beta.1]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta.0...v6.48.1-beta.1 -[6.48.1-beta.0]: https://github.com/vtex/node-vtex-api/compare/v6.48.1-beta...v6.48.1-beta.0 -[6.48.1-beta]: https://github.com/vtex/node-vtex-api/compare/v6.48.0...v6.48.1-beta \ No newline at end of file From 022db8d9480c07eb615e7fe319093cad4c3d59b0 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Thu, 22 May 2025 17:16:42 -0300 Subject: [PATCH 27/35] Remove unnecessary imports --- src/HttpClient/middlewares/metrics.ts | 1 - src/HttpClient/middlewares/recorder.ts | 1 - src/HttpClient/middlewares/tracing.ts | 1 - src/HttpClient/typings.ts | 2 +- src/service/worker/runtime/graphql/middlewares/error.ts | 2 +- 5 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/HttpClient/middlewares/metrics.ts b/src/HttpClient/middlewares/metrics.ts index 31b9eb362..2e8b3f349 100644 --- a/src/HttpClient/middlewares/metrics.ts +++ b/src/HttpClient/middlewares/metrics.ts @@ -13,7 +13,6 @@ import { import { TIMEOUT_CODE } from '../../utils/retry' import { statusLabel } from '../../utils/status' import { MiddlewareContext } from '../typings' -import { AxiosError } from 'axios' interface MetricsOpts { metrics?: MetricsAccumulator diff --git a/src/HttpClient/middlewares/recorder.ts b/src/HttpClient/middlewares/recorder.ts index 91a5093df..277b7c124 100644 --- a/src/HttpClient/middlewares/recorder.ts +++ b/src/HttpClient/middlewares/recorder.ts @@ -1,4 +1,3 @@ -import { AxiosError } from 'axios' import { MiddlewareContext } from '../typings' import { Recorder, diff --git a/src/HttpClient/middlewares/tracing.ts b/src/HttpClient/middlewares/tracing.ts index b5f4a1b72..c156e86a4 100644 --- a/src/HttpClient/middlewares/tracing.ts +++ b/src/HttpClient/middlewares/tracing.ts @@ -1,4 +1,3 @@ -import { AxiosError } from 'axios' import { MiddlewaresTracingContext, RequestConfig } from '..' import { IOContext } from '../../service/worker/runtime/typings' import { ErrorReport, getTraceInfo } from '../../tracing' diff --git a/src/HttpClient/typings.ts b/src/HttpClient/typings.ts index 45b79f72e..275452203 100644 --- a/src/HttpClient/typings.ts +++ b/src/HttpClient/typings.ts @@ -1,4 +1,4 @@ -import { AxiosRequestConfig, AxiosResponse, RawAxiosResponseHeaders } from 'axios' +import { AxiosRequestConfig, AxiosResponse } from 'axios' import { Middleware } from 'koa-compose' import { Span } from 'opentracing' diff --git a/src/service/worker/runtime/graphql/middlewares/error.ts b/src/service/worker/runtime/graphql/middlewares/error.ts index 13c1f42e1..03169f2b8 100644 --- a/src/service/worker/runtime/graphql/middlewares/error.ts +++ b/src/service/worker/runtime/graphql/middlewares/error.ts @@ -1,4 +1,4 @@ -import { ApolloError, formatApolloErrors } from 'apollo-server-errors' +import { formatApolloErrors } from 'apollo-server-errors' import { uniqBy } from 'ramda' import { LINKED } from '../../../../../constants' From 1ada045954bed7ef04c242c644b087bffe36628c Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Thu, 22 May 2025 17:30:29 -0300 Subject: [PATCH 28/35] Remove unnecessary comments --- .../request/setupAxios/interceptors/tracing/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts index 189372528..b71bebf89 100644 --- a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts +++ b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts @@ -9,7 +9,6 @@ interface AxiosRequestTracingContext extends MiddlewaresTracingContext { requestSpan?: Span } -// Modificado para usar AxiosRequestConfig em vez de InternalAxiosRequestConfig interface TraceableAxiosRequestConfig extends AxiosRequestConfig { tracing?: AxiosRequestTracingContext } @@ -74,7 +73,6 @@ const onResponseError = (err: ExtendedAxiosError) => { } export const addTracingPreRequestInterceptor = (http: AxiosInstance) => { - // Usando type assertion para compatibilidade com TypeScript 3.9.7 const requestTracingInterceptor = http.interceptors.request.use( preRequestInterceptor(http) as any, undefined @@ -84,7 +82,6 @@ export const addTracingPreRequestInterceptor = (http: AxiosInstance) => { } export const addTracingResponseInterceptor = (http: AxiosInstance) => { - // Usando type assertion para compatibilidade com TypeScript 3.9.7 const responseTracingInterceptor = http.interceptors.response.use( onResponseSuccess as any, onResponseError as any From ede6d6a851a6cca7f6238d7991e8220725a6b98b Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 23 May 2025 15:05:23 -0300 Subject: [PATCH 29/35] Rollback error handling changes to http/middlewares/error.ts --- .../worker/runtime/http/middlewares/error.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/service/worker/runtime/http/middlewares/error.ts b/src/service/worker/runtime/http/middlewares/error.ts index 45e34f01b..b260f0d0f 100644 --- a/src/service/worker/runtime/http/middlewares/error.ts +++ b/src/service/worker/runtime/http/middlewares/error.ts @@ -1,4 +1,3 @@ -import { AxiosError } from 'axios' import { IOClients } from '../../../../../clients/IOClients' import { LINKED } from '../../../../../constants' import { @@ -103,13 +102,12 @@ export async function error (ctx: ServiceContext, next: () => Promise) { const err = cleanError(e) // Add response - if(e instanceof AxiosError){ - ctx.status = e?.status && e.status >= 400 && e.status <= 599 - ? e.status - : ctx.status >= 500 && ctx.status <= 599 - ? ctx.status - : 500 - } + ctx.status = e?.status && e.status >= 400 && e.status <= 599 + ? e.status + : ctx.status >= 500 && ctx.status <= 599 + ? ctx.status + : 500 + // Do not generate etag for errors ctx.remove(META_HEADER) ctx.remove(ETAG_HEADER) From cc3125e22df7cb7ebfdf3b91d7e8d86d346bdca0 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 23 May 2025 15:16:03 -0300 Subject: [PATCH 30/35] Rollback typings fixes for HttpClient.ts After `Create compatibility with TS 3.9.7` (187b096), this isn't needed anymore. --- src/HttpClient/HttpClient.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/HttpClient/HttpClient.ts b/src/HttpClient/HttpClient.ts index 5744ead0d..fd4399826 100644 --- a/src/HttpClient/HttpClient.ts +++ b/src/HttpClient/HttpClient.ts @@ -130,7 +130,7 @@ export class HttpClient { public getRaw = (url: string, config: RequestConfig = {}): Promise> => { const cacheableConfig = this.getConfig(url, config) - return this.request(cacheableConfig) as any + return this.request(cacheableConfig) } public getWithBody = (url: string, data?: any, config: RequestConfig = {}): Promise => { @@ -198,12 +198,12 @@ export class HttpClient { public head = (url: string, config: RequestConfig = {}): Promise> => { const headConfig: RequestConfig = { ...config, url, method: 'head' } - return this.request(headConfig) as any + return this.request(headConfig) } public delete = (url: string, config?: RequestConfig): Promise> => { const deleteConfig: RequestConfig = { ...config, url, method: 'delete' } - return this.request(deleteConfig) as any + return this.request(deleteConfig) } protected request = async (config: RequestConfig): Promise => { From 590452e44ab83f76939544c3a5657397c59ca311 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 23 May 2025 16:06:35 -0300 Subject: [PATCH 31/35] Remove type casting from `parseCacheHeaders` --- src/HttpClient/middlewares/cache.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HttpClient/middlewares/cache.ts b/src/HttpClient/middlewares/cache.ts index 8ae8b60e1..8134d15b5 100644 --- a/src/HttpClient/middlewares/cache.ts +++ b/src/HttpClient/middlewares/cache.ts @@ -180,7 +180,7 @@ export const cacheMiddleware = ({ type, storage, asyncSet }: CacheOptions) => { } const {data, headers, status} = ctx.response as AxiosResponse - const {age, etag, maxAge: headerMaxAge, noStore, noCache} = parseCacheHeaders(headers as any) + const {age, etag, maxAge: headerMaxAge, noStore, noCache} = parseCacheHeaders(headers) const {forceMaxAge} = ctx.config const maxAge = forceMaxAge && cacheableStatusCodes.includes(status) ? Math.max(forceMaxAge, headerMaxAge) : headerMaxAge From 497281c1330b513939fdbb7be3ba46c8f1be01f2 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 23 May 2025 16:09:02 -0300 Subject: [PATCH 32/35] Rollback typing fixes for middlewares/recorder.ts --- src/HttpClient/middlewares/recorder.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/HttpClient/middlewares/recorder.ts b/src/HttpClient/middlewares/recorder.ts index 277b7c124..76bc62bec 100644 --- a/src/HttpClient/middlewares/recorder.ts +++ b/src/HttpClient/middlewares/recorder.ts @@ -13,11 +13,11 @@ export const recorderMiddleware = (recorder: Recorder) => try { await next() if (ctx.response) { - (recorder as Recorder).record(ctx.response.headers as any) + (recorder as Recorder).record(ctx.response.headers) } } catch (err: any) { if (err.response && err.response.headers && err.response.status === 404) { - (recorder as Recorder).record(err.response.headers as any) + (recorder as Recorder).record(err.response.headers) } throw err } From b653b57205b7e2cda1b950f1053b5c70e21df4d1 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 23 May 2025 16:21:17 -0300 Subject: [PATCH 33/35] Remove type casting from middlewares/interceptors/tracing/idex.ts --- .../setupAxios/interceptors/tracing/index.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts index b71bebf89..451a34ae2 100644 --- a/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts +++ b/src/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.ts @@ -1,4 +1,4 @@ -import { AxiosError, AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios' +import { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios' import { FORMAT_HTTP_HEADERS, Span } from 'opentracing' import { createSpanReference, ErrorReport } from '../../../../../../tracing' import { SpanReferenceTypes } from '../../../../../../tracing/spanReference/SpanReferenceTypes' @@ -31,6 +31,7 @@ const preRequestInterceptor = (http: AxiosInstance) => ( } const { tracer, rootSpan, requestSpanNameSuffix } = config.tracing + const spanName = requestSpanNameSuffix ? `${requestSpanPrefix}:${requestSpanNameSuffix}` : requestSpanPrefix const span = rootSpan @@ -43,7 +44,6 @@ const preRequestInterceptor = (http: AxiosInstance) => ( config.tracing.requestSpan = span tracer.inject(span, FORMAT_HTTP_HEADERS, config.headers) - return config } @@ -55,7 +55,6 @@ const onResponseSuccess = (response: TraceableAxiosResponse): TraceableAxiosResp const requestSpan = response.config.tracing?.requestSpan injectResponseInfoOnSpan(requestSpan, response) requestSpan?.finish() - return response } @@ -68,24 +67,17 @@ const onResponseError = (err: ExtendedAxiosError) => { injectResponseInfoOnSpan(requestSpan, err.response) ErrorReport.create({ originalError: err }).injectOnSpan(requestSpan, err.config.tracing.logger) requestSpan.finish() - return Promise.reject(err) } export const addTracingPreRequestInterceptor = (http: AxiosInstance) => { - const requestTracingInterceptor = http.interceptors.request.use( - preRequestInterceptor(http) as any, - undefined - ) + const requestTracingInterceptor = http.interceptors.request.use(preRequestInterceptor(http), undefined) return { requestTracingInterceptor } } export const addTracingResponseInterceptor = (http: AxiosInstance) => { - const responseTracingInterceptor = http.interceptors.response.use( - onResponseSuccess as any, - onResponseError as any - ) + const responseTracingInterceptor = http.interceptors.response.use(onResponseSuccess, onResponseError) return { responseTracingInterceptor } } From a28ba221044379d0c0d8ae4c060f611666bd4cb6 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Fri, 30 May 2025 14:40:07 -0300 Subject: [PATCH 34/35] Release v6.49.2-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8d4e37f6d..ed4234bfd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vtex/api", - "version": "6.48.1-beta.4", + "version": "6.49.2-beta.1", "description": "VTEX I/O API client", "main": "lib/index.js", "typings": "lib/index.d.ts", From a52c0a9d9a46080ceeceb3d490ea100313050c44 Mon Sep 17 00:00:00 2001 From: arturpimentel Date: Tue, 3 Jun 2025 17:19:45 -0300 Subject: [PATCH 35/35] Release v6.49.2 --- CHANGELOG.md | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14b834f1c..e8d92975b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [6.49.2] - 2025-06-03 ### Fixed - Bumped `axios` to newest version without vuln CVE-2025-27152 diff --git a/package.json b/package.json index ed4234bfd..1ef535ea4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vtex/api", - "version": "6.49.2-beta.1", + "version": "6.49.2", "description": "VTEX I/O API client", "main": "lib/index.js", "typings": "lib/index.d.ts",