From 14b3973abde53cefd7468ce88685a0944093ed90 Mon Sep 17 00:00:00 2001 From: Steven Chim <655241+chimurai@users.noreply.github.com> Date: Tue, 19 May 2026 20:18:09 +0000 Subject: [PATCH 1/7] chore(package.json): update to httpxy@0.5.2 --- CHANGELOG.md | 1 + package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba6ce8e2..c217d595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## next - feat(definePlugin): helper function to create plugins +- chore(package.json): update to httpxy@0.5.2 ## [v4.0.0](https://github.com/chimurai/http-proxy-middleware/releases/tag/v4.0.0) diff --git a/package.json b/package.json index 793d0484..3d30e3a4 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ }, "dependencies": { "debug": "^4.4.3", - "httpxy": "^0.5.1", + "httpxy": "^0.5.2", "is-glob": "^4.0.3", "is-plain-obj": "^4.1.0", "micromatch": "^4.0.8" diff --git a/yarn.lock b/yarn.lock index 4582c8ed..2af18860 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2532,10 +2532,10 @@ https-proxy-agent@^7.0.6: agent-base "^7.1.2" debug "4" -httpxy@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.5.1.tgz#c0cccd78672995968eee57666c3e3cfa822c2806" - integrity sha512-JPhqYiixe1A1I+MXDewWDZqeudBGU8Q9jCHYN8ML+779RQzLjTi78HBvWz4jMxUD6h2/vUL12g4q/mFM0OUw1A== +httpxy@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.5.2.tgz#b756cd1698b9838106de29775f96ff2b55d79777" + integrity sha512-C5OM92bmywDDdKTuYCGejdNFAb/zy0LX4srimOudYko847HvoWL2Eeik9odh9friPKu/JrlWv4z/amrJoxq2Cg== husky@9.1.7: version "9.1.7" From 83f80cfb80b792208446c17399bc43a0b65dd7d3 Mon Sep 17 00:00:00 2001 From: Steven Chim <655241+chimurai@users.noreply.github.com> Date: Tue, 19 May 2026 20:21:47 +0000 Subject: [PATCH 2/7] fix(ipv6): preserve credentials when normalizing bracketed IPv6 target string --- CHANGELOG.md | 1 + src/utils/ipv6.ts | 6 ++++++ test/e2e/ipv6.spec.ts | 4 ++-- test/unit/utils/ipv6.spec.ts | 17 +++++++++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c217d595..00afc867 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - feat(definePlugin): helper function to create plugins - chore(package.json): update to httpxy@0.5.2 +- fix(ipv6): preserve credentials when normalizing bracketed IPv6 target string ## [v4.0.0](https://github.com/chimurai/http-proxy-middleware/releases/tag/v4.0.0) diff --git a/src/utils/ipv6.ts b/src/utils/ipv6.ts index 4d492834..65e91d24 100644 --- a/src/utils/ipv6.ts +++ b/src/utils/ipv6.ts @@ -36,8 +36,14 @@ function normalizeIPv6ProxyTarget(target: Options['target'], optionName: 'target if (targetUrl && isBracketedIPv6Hostname(targetUrl.hostname)) { debug('normalized IPv6 "%s" %s', optionName, target); + const auth = + targetUrl.username || targetUrl.password + ? `${targetUrl.username}:${targetUrl.password}` + : undefined; + return { hostname: stripBrackets(targetUrl.hostname), + auth, pathname: targetUrl.pathname, port: targetUrl.port, protocol: targetUrl.protocol, diff --git a/test/e2e/ipv6.spec.ts b/test/e2e/ipv6.spec.ts index 73eb6516..d64dfec7 100644 --- a/test/e2e/ipv6.spec.ts +++ b/test/e2e/ipv6.spec.ts @@ -157,7 +157,7 @@ describe.runIf(await isIPv6Available())('ipv6 integration', () => { let receivedPath: string | undefined; let authorizationHeader: string | undefined; - await targetServer.forGet('/api').thenCallback((req) => { + await targetServer.forGet('/api/').thenCallback((req) => { receivedPath = req.path; const authHeader = req.headers.authorization; authorizationHeader = Array.isArray(authHeader) ? authHeader[0] : authHeader; @@ -176,7 +176,7 @@ describe.runIf(await isIPv6Available())('ipv6 integration', () => { const app = createApp(proxy); await request(app).get('/').expect(200); - expect(receivedPath).toBe('/api'); + expect(receivedPath).toBe('/api/'); expect(authorizationHeader).toBe('Basic dXNlcjpwYXNz'); // cspell:disable-line }); }); diff --git a/test/unit/utils/ipv6.spec.ts b/test/unit/utils/ipv6.spec.ts index f256eca3..49ffe664 100644 --- a/test/unit/utils/ipv6.spec.ts +++ b/test/unit/utils/ipv6.spec.ts @@ -47,6 +47,23 @@ describe('normalizeIPv6Targets()', () => { }); }); + it('should preserve credentials when normalizing bracketed IPv6 target string', () => { + const options: Options = { + target: 'http://user:pass@[::1]:8888/api', + }; + + normalizeIPv6LiteralTargets(options); + + expect(options.target).toEqual({ + auth: 'user:pass', + hostname: '::1', + pathname: '/api', + port: '8888', + protocol: 'http:', + search: '', + }); + }); + it('should normalize bracketed IPv6 target URL into a target object', () => { const options: Options = { target: new URL('http://[::1]:8888/api'), From 7c9a08aea328f6c516c9b4a884345fc56884b82d Mon Sep 17 00:00:00 2001 From: Steven Chim <655241+chimurai@users.noreply.github.com> Date: Wed, 20 May 2026 21:54:30 +0000 Subject: [PATCH 3/7] chore(package.json): bump to httpxy 0.5.3 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3d30e3a4..bd455e0f 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ }, "dependencies": { "debug": "^4.4.3", - "httpxy": "^0.5.2", + "httpxy": "^0.5.3", "is-glob": "^4.0.3", "is-plain-obj": "^4.1.0", "micromatch": "^4.0.8" diff --git a/yarn.lock b/yarn.lock index 2af18860..9fdf5f9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2532,10 +2532,10 @@ https-proxy-agent@^7.0.6: agent-base "^7.1.2" debug "4" -httpxy@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.5.2.tgz#b756cd1698b9838106de29775f96ff2b55d79777" - integrity sha512-C5OM92bmywDDdKTuYCGejdNFAb/zy0LX4srimOudYko847HvoWL2Eeik9odh9friPKu/JrlWv4z/amrJoxq2Cg== +httpxy@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.5.3.tgz#e9d4d9b584ec3a2c5d46d7d87635419e780353aa" + integrity sha512-SMS9V6Sn7VWaS11lYhoAr0ceoaiolTWf4jYdJn0NJhCdKMu9R2H9Fh0LBDWBHQF6HRLI1PmaePYsjanSpE5PEw== husky@9.1.7: version "9.1.7" From 843bb40d7c69544fe79e3c74c80b79380cf7358f Mon Sep 17 00:00:00 2001 From: Steven Chim <655241+chimurai@users.noreply.github.com> Date: Wed, 20 May 2026 22:07:42 +0000 Subject: [PATCH 4/7] revert: remove trailing slash --- test/e2e/ipv6.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/ipv6.spec.ts b/test/e2e/ipv6.spec.ts index d64dfec7..73eb6516 100644 --- a/test/e2e/ipv6.spec.ts +++ b/test/e2e/ipv6.spec.ts @@ -157,7 +157,7 @@ describe.runIf(await isIPv6Available())('ipv6 integration', () => { let receivedPath: string | undefined; let authorizationHeader: string | undefined; - await targetServer.forGet('/api/').thenCallback((req) => { + await targetServer.forGet('/api').thenCallback((req) => { receivedPath = req.path; const authHeader = req.headers.authorization; authorizationHeader = Array.isArray(authHeader) ? authHeader[0] : authHeader; @@ -176,7 +176,7 @@ describe.runIf(await isIPv6Available())('ipv6 integration', () => { const app = createApp(proxy); await request(app).get('/').expect(200); - expect(receivedPath).toBe('/api/'); + expect(receivedPath).toBe('/api'); expect(authorizationHeader).toBe('Basic dXNlcjpwYXNz'); // cspell:disable-line }); }); From 7fe82e1c1d439b9962747db713f82d3faef6d88c Mon Sep 17 00:00:00 2001 From: Steven Chim <655241+chimurai@users.noreply.github.com> Date: Wed, 20 May 2026 22:12:59 +0000 Subject: [PATCH 5/7] fix: unspecified IPv6 target hostname (::) --- src/utils/ipv6.ts | 14 +++++++++++++- test/unit/utils/ipv6.spec.ts | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/utils/ipv6.ts b/src/utils/ipv6.ts index 65e91d24..63f21c30 100644 --- a/src/utils/ipv6.ts +++ b/src/utils/ipv6.ts @@ -34,6 +34,8 @@ function normalizeIPv6ProxyTarget(target: Options['target'], optionName: 'target const targetUrl = toTargetUrl(target); if (targetUrl && isBracketedIPv6Hostname(targetUrl.hostname)) { + const normalizedHostname = normalizeIPv6DestinationHostname(stripBrackets(targetUrl.hostname)); + debug('normalized IPv6 "%s" %s', optionName, target); const auth = @@ -42,7 +44,7 @@ function normalizeIPv6ProxyTarget(target: Options['target'], optionName: 'target : undefined; return { - hostname: stripBrackets(targetUrl.hostname), + hostname: normalizedHostname, auth, pathname: targetUrl.pathname, port: targetUrl.port, @@ -73,3 +75,13 @@ function isBracketedIPv6Hostname(hostname: string): boolean { function stripBrackets(hostname: string): string { return hostname.replace(/^\[|\]$/g, ''); } + +function normalizeIPv6DestinationHostname(hostname: string): string { + // The unspecified address (::) is not a routable destination for outbound client requests. + // Treat it as loopback so a target like http://[::]:port reaches local IPv6 listeners. + if (hostname === '::') { + debug('normalizing hostname unspecified IPv6 address (::) to loopback (::1)'); + return '::1'; + } + return hostname; +} diff --git a/test/unit/utils/ipv6.spec.ts b/test/unit/utils/ipv6.spec.ts index 49ffe664..e85f1374 100644 --- a/test/unit/utils/ipv6.spec.ts +++ b/test/unit/utils/ipv6.spec.ts @@ -47,6 +47,22 @@ describe('normalizeIPv6Targets()', () => { }); }); + it('should normalize unspecified bracketed IPv6 destination to loopback', () => { + const options: Options = { + target: 'http://[::]:8888/api', + }; + + normalizeIPv6LiteralTargets(options); + + expect(options.target).toEqual({ + hostname: '::1', + pathname: '/api', + port: '8888', + protocol: 'http:', + search: '', + }); + }); + it('should preserve credentials when normalizing bracketed IPv6 target string', () => { const options: Options = { target: 'http://user:pass@[::1]:8888/api', From fc7d2f4960286d66c419a67f6ceb001487de554c Mon Sep 17 00:00:00 2001 From: Steven Chim <655241+chimurai@users.noreply.github.com> Date: Wed, 20 May 2026 22:14:45 +0000 Subject: [PATCH 6/7] docs: update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00afc867..c3c8a420 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,9 @@ ## next - feat(definePlugin): helper function to create plugins -- chore(package.json): update to httpxy@0.5.2 +- chore(package.json): update to httpxy@0.5.3 - fix(ipv6): preserve credentials when normalizing bracketed IPv6 target string +- fix(ipv6): unspecified IPv6 target hostname (::)" ## [v4.0.0](https://github.com/chimurai/http-proxy-middleware/releases/tag/v4.0.0) From 691cd94e214f98667c5a5ae1ac45a4725e1336c2 Mon Sep 17 00:00:00 2001 From: Steven Chim <655241+chimurai@users.noreply.github.com> Date: Thu, 21 May 2026 17:08:38 +0000 Subject: [PATCH 7/7] chore(package.json): bump to mockttp 4.4.2 --- package.json | 3 +- test/e2e/http2-server.spec.ts | 10 +- yarn.lock | 245 +++++++++++----------------------- 3 files changed, 85 insertions(+), 173 deletions(-) diff --git a/package.json b/package.json index bd455e0f..7e238dbb 100644 --- a/package.json +++ b/package.json @@ -98,13 +98,12 @@ "hono": "4.12.18", "husky": "9.1.7", "lint-staged": "17.0.4", - "mockttp": "4.3.1", + "mockttp": "4.4.2", "msw": "2.14.5", "nock": "14.0.15", "open": "11.0.0", "oxfmt": "0.48.0", "pkg-pr-new": "0.0.71", - "selfsigned": "5.5.0", "supertest": "7.2.2", "typescript": "6.0.3", "typescript-eslint": "8.59.2", diff --git a/test/e2e/http2-server.spec.ts b/test/e2e/http2-server.spec.ts index 2076cda5..1608ef17 100644 --- a/test/e2e/http2-server.spec.ts +++ b/test/e2e/http2-server.spec.ts @@ -1,7 +1,7 @@ import { createSecureServer, type Http2SecureServer } from 'node:http2'; import type { Mockttp } from 'mockttp'; -import { generate } from 'selfsigned'; +import { generateCACertificate } from 'mockttp'; import request from 'supertest'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; @@ -24,7 +24,7 @@ describe('E2E http2', () => { } beforeEach(async () => { - const cert = await generate([{ name: 'commonName', value: 'localhost' }]); + const cert = await generateCACertificate({ bits: 2048 }); proxyServerCertPem = cert.cert; // Keep this dynamic to avoid a Vitest module-load ordering issue that breaks cert generation. @@ -41,7 +41,7 @@ describe('E2E http2', () => { http2ProxyServer = createSecureServer( { - key: cert.private, + key: cert.key, cert: cert.cert, // Express + supertest use the HTTP/1.1 request/response API in this e2e flow. allowHTTP1: true, @@ -86,7 +86,7 @@ describe('E2E http2', () => { } beforeEach(async () => { - const cert = await generate([{ name: 'commonName', value: 'localhost' }]); + const cert = await generateCACertificate({ bits: 2048 }); proxyServerCertPem = cert.cert; // Keep this dynamic to avoid a Vitest module-load ordering issue that breaks cert generation. @@ -103,7 +103,7 @@ describe('E2E http2', () => { http2ProxyServer = createSecureServer( { - key: cert.private, + key: cert.key, cert: cert.cert, // Express + supertest use the HTTP/1.1 request/response API in this e2e flow. allowHTTP1: true, diff --git a/yarn.lock b/yarn.lock index 9fdf5f9e..e56d60d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -322,10 +322,10 @@ resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-2.0.2.tgz#61c176acacadb594c969a641a036893c54dd5ce3" integrity sha512-tXlTi1h/4V7sDe7i97IVP+9re9ZU7wXZZggnR5ucCRclf1+AX6YhGStrR5w8bLj+3Mlyl0pKfBh9gqTqqnGKfQ== -"@httptoolkit/httpolyglot@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@httptoolkit/httpolyglot/-/httpolyglot-3.0.1.tgz#b76598a852232c59fcab98d717c22bef512e169f" - integrity sha512-fU9psZBRc49PfdrxFZ8W19SwVQ4+rrc0EYVxmy7H41y6/elaIu5p68wly4uLVt1DPD0K92MdN65GqP3N1ofZKg== +"@httptoolkit/httpolyglot@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@httptoolkit/httpolyglot/-/httpolyglot-3.1.0.tgz#9dd7e4c9e27b88692dd95785f377a5d295a4d095" + integrity sha512-Y+1gebmcMZMjDepn2e+9TBM4D+t3jYYbOwbXL9/PKmJEcaN/sbpv/00skN9KLXs43+BQvHTZc+5J0AnC5+9qDg== dependencies: "@types/node" "*" @@ -460,11 +460,6 @@ dependencies: "@tybys/wasm-util" "^0.10.1" -"@noble/hashes@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - "@noble/hashes@^1.1.5": version "1.8.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" @@ -600,18 +595,18 @@ dependencies: "@noble/hashes" "^1.1.5" -"@peculiar/asn1-cms@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.5.0.tgz#3a7e857d86686898ce78efdbf481922bb805c68a" - integrity sha512-p0SjJ3TuuleIvjPM4aYfvYw8Fk1Hn/zAVyPJZTtZ2eE9/MIer6/18ROxX6N/e6edVSfvuZBqhxAj3YgsmSjQ/A== +"@peculiar/asn1-cms@<2.7.0", "@peculiar/asn1-cms@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz#88267055c460ca806651f916315a934c1b1ac994" + integrity sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA== dependencies: - "@peculiar/asn1-schema" "^2.5.0" - "@peculiar/asn1-x509" "^2.5.0" - "@peculiar/asn1-x509-attr" "^2.5.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/asn1-x509-attr" "^2.6.0" asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-cms@^2.6.0", "@peculiar/asn1-cms@^2.7.0": +"@peculiar/asn1-cms@^2.7.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.7.0.tgz#8e0eb656f4fc85f7c621dd442fa2d298faa84984" integrity sha512-hew63shtzzvBcSHbhm+cyAmKe6AIfinT9hzEqSPjDC6opTTMKmTkQ0gHuN2KsWlvqiKw1S/fS94fhag/FJkioQ== @@ -622,59 +617,27 @@ asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-csr@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.5.0.tgz#4dd7534bd7d7db5bbbbde4d00d4836bf7e818d1c" - integrity sha512-ioigvA6WSYN9h/YssMmmoIwgl3RvZlAYx4A/9jD2qaqXZwGcNlAxaw54eSx2QG1Yu7YyBC5Rku3nNoHrQ16YsQ== - dependencies: - "@peculiar/asn1-schema" "^2.5.0" - "@peculiar/asn1-x509" "^2.5.0" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-csr@^2.6.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.7.0.tgz#1a03ac03f7571ea981f5d8377c6f4510c5d43411" - integrity sha512-VVsAyGqErT9D1SY4aEqozThXMVI+ssVRiv2DDeYuvpBKLIgZ3hYs3Ay3u/VSoKq6ESFi9cf6rf3IOOzfwh7oMA== - dependencies: - "@peculiar/asn1-schema" "^2.7.0" - "@peculiar/asn1-x509" "^2.7.0" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-ecc@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.5.0.tgz#3bbeaa3443567055be112b4c7e9d5562951242cf" - integrity sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg== - dependencies: - "@peculiar/asn1-schema" "^2.5.0" - "@peculiar/asn1-x509" "^2.5.0" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-ecc@^2.6.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.7.0.tgz#c35b57859812ecd0c2ae7b2144855e8208c2cfee" - integrity sha512-n7KEs/Q/wrB415cxy4fHOBhegp4NdJ15fkJPwcB/3/8iNBQC2L/N7SChJPKDJPZGYH0jD4Tg4/0vnHmwghnbKw== +"@peculiar/asn1-csr@<2.7.0", "@peculiar/asn1-csr@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz#a7eff845b0020720070a12f38f26effb9fdab158" + integrity sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ== dependencies: - "@peculiar/asn1-schema" "^2.7.0" - "@peculiar/asn1-x509" "^2.7.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-pfx@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.5.0.tgz#22d12e676c063dfc6244278fe18eb75c2c121880" - integrity sha512-Vj0d0wxJZA+Ztqfb7W+/iu8Uasw6hhKtCdLKXLG/P3kEPIQpqGI4P4YXlROfl7gOCqFIbgsj1HzFIFwQ5s20ug== +"@peculiar/asn1-ecc@<2.7.0", "@peculiar/asn1-ecc@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz#4846d39712a1a2b4786c2d6ea27b19a6dcc05ef5" + integrity sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw== dependencies: - "@peculiar/asn1-cms" "^2.5.0" - "@peculiar/asn1-pkcs8" "^2.5.0" - "@peculiar/asn1-rsa" "^2.5.0" - "@peculiar/asn1-schema" "^2.5.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-pfx@^2.7.0": +"@peculiar/asn1-pfx@^2.6.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.7.0.tgz#d00766b13ff49785684a604248e6aadd184b291f" integrity sha512-V/nrlQVmhg7lYAsM7E13UDL5erAwFv6kCIVFqNaMIHSVi7dngcT839JkRTkQBqznMG98l2XjxYk74ZztAohZzA== @@ -686,13 +649,13 @@ asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-pkcs8@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.5.0.tgz#1939643773e928a4802813b595e324a05b453709" - integrity sha512-L7599HTI2SLlitlpEP8oAPaJgYssByI4eCwQq2C9eC90otFpm8MRn66PpbKviweAlhinWQ3ZjDD2KIVtx7PaVw== +"@peculiar/asn1-pkcs8@^2.5.0 <2.7.0", "@peculiar/asn1-pkcs8@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz#c426caf81cb49935c553b591e0273b4b44d1696f" + integrity sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA== dependencies: - "@peculiar/asn1-schema" "^2.5.0" - "@peculiar/asn1-x509" "^2.5.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" asn1js "^3.0.6" tslib "^2.8.1" @@ -706,45 +669,31 @@ asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-pkcs9@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.5.0.tgz#8c5b873a721bb92b4fe758da9de1ead63165106d" - integrity sha512-UgqSMBLNLR5TzEZ5ZzxR45Nk6VJrammxd60WMSkofyNzd3DQLSNycGWSK5Xg3UTYbXcDFyG8pA/7/y/ztVCa6A== - dependencies: - "@peculiar/asn1-cms" "^2.5.0" - "@peculiar/asn1-pfx" "^2.5.0" - "@peculiar/asn1-pkcs8" "^2.5.0" - "@peculiar/asn1-schema" "^2.5.0" - "@peculiar/asn1-x509" "^2.5.0" - "@peculiar/asn1-x509-attr" "^2.5.0" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-pkcs9@^2.6.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.7.0.tgz#23b4eae41c2feb8df258aa69c502a70092026b0a" - integrity sha512-Bh7m+OuIaSEllPQcSd9OSp93F4ROWH7sbITWV8MI+8dwsjE5111/87VxiWVvYFKyww3vp39geLv9ENqhwWHcew== +"@peculiar/asn1-pkcs9@<2.7.0", "@peculiar/asn1-pkcs9@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz#96b57122228a0e2e30e81118cd3baa570c13a51d" + integrity sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw== dependencies: - "@peculiar/asn1-cms" "^2.7.0" - "@peculiar/asn1-pfx" "^2.7.0" - "@peculiar/asn1-pkcs8" "^2.7.0" - "@peculiar/asn1-schema" "^2.7.0" - "@peculiar/asn1-x509" "^2.7.0" - "@peculiar/asn1-x509-attr" "^2.7.0" + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-pfx" "^2.6.0" + "@peculiar/asn1-pkcs8" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/asn1-x509-attr" "^2.6.0" asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-rsa@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.5.0.tgz#7283756ec596ccfbef23ff0e7eda0c37133ebed8" - integrity sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q== +"@peculiar/asn1-rsa@<2.7.0", "@peculiar/asn1-rsa@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz#49d905ab67ae8aa54e996734f37a391bb7958747" + integrity sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w== dependencies: - "@peculiar/asn1-schema" "^2.5.0" - "@peculiar/asn1-x509" "^2.5.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-rsa@^2.6.0", "@peculiar/asn1-rsa@^2.7.0": +"@peculiar/asn1-rsa@^2.7.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.7.0.tgz#6dc5c78c643264dd5a251a66f1dd9a38fcbba385" integrity sha512-/qvENQrXyTZURjMqSeofHul0JJt2sNSzSwk36pl2olkHbaioMQgrASDZAlHXl0xUlnVbHj0uGgOrBMTb5x2aJQ== @@ -754,16 +703,16 @@ asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-schema@^2.3.15", "@peculiar/asn1-schema@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.5.0.tgz#4e58d7c3087c4259cebf5363e092f85b9cbf0ca1" - integrity sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ== +"@peculiar/asn1-schema@^2.3.15 <2.7.0", "@peculiar/asn1-schema@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz#0dca1601d5b0fed2a72fed7a5f1d0d7dbe3a6f82" + integrity sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg== dependencies: asn1js "^3.0.6" pvtsutils "^1.3.6" tslib "^2.8.1" -"@peculiar/asn1-schema@^2.6.0", "@peculiar/asn1-schema@^2.7.0": +"@peculiar/asn1-schema@^2.7.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.7.0.tgz#f2dcb25995ce7cac8687ba1039f043e5eff43820" integrity sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg== @@ -772,13 +721,13 @@ asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-x509-attr@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.5.0.tgz#d413597dfe097620a00780e9e2ae851b06f32aed" - integrity sha512-9f0hPOxiJDoG/bfNLAFven+Bd4gwz/VzrCIIWc1025LEI4BXO0U5fOCTNDPbbp2ll+UzqKsZ3g61mpBp74gk9A== +"@peculiar/asn1-x509-attr@<2.7.0", "@peculiar/asn1-x509-attr@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz#057cb0c3c600a259c9f40582ee5fd7f0114c5be6" + integrity sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA== dependencies: - "@peculiar/asn1-schema" "^2.5.0" - "@peculiar/asn1-x509" "^2.5.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" asn1js "^3.0.6" tslib "^2.8.1" @@ -792,17 +741,17 @@ asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-x509@^2.3.15", "@peculiar/asn1-x509@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.5.0.tgz#305f9cd534f4b6a723d27fc59363f382debf5500" - integrity sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ== +"@peculiar/asn1-x509@^2.3.15 <2.7.0", "@peculiar/asn1-x509@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz#9aa0784b455ca34095fdc91a5cc52869e21528dd" + integrity sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA== dependencies: - "@peculiar/asn1-schema" "^2.5.0" + "@peculiar/asn1-schema" "^2.6.0" asn1js "^3.0.6" pvtsutils "^1.3.6" tslib "^2.8.1" -"@peculiar/asn1-x509@^2.6.0", "@peculiar/asn1-x509@^2.7.0": +"@peculiar/asn1-x509@^2.7.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.7.0.tgz#84793efb7819dbc9526fd6b0a4ccd86f90464b96" integrity sha512-mUn9RRrkGDnG4ALfunDmzyRW5dg+sWCj/pfnCCqEHYbkGxEpvUt6iVJv8Yw1cyp6SWZ26ZE5oSmI5SqEaen15g== @@ -820,23 +769,6 @@ tslib "^2.8.1" "@peculiar/x509@^1.12.3": - version "1.14.0" - resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.0.tgz#4b1abdf7ca5e46f2cb303fba608ef0507762e84a" - integrity sha512-Yc4PDxN3OrxUPiXgU63c+ZRXKGE8YKF2McTciYhUHFtHVB0KMnjeFSU0qpztGhsp4P0uKix4+J2xEpIEDu8oXg== - dependencies: - "@peculiar/asn1-cms" "^2.5.0" - "@peculiar/asn1-csr" "^2.5.0" - "@peculiar/asn1-ecc" "^2.5.0" - "@peculiar/asn1-pkcs9" "^2.5.0" - "@peculiar/asn1-rsa" "^2.5.0" - "@peculiar/asn1-schema" "^2.5.0" - "@peculiar/asn1-x509" "^2.5.0" - pvtsutils "^1.3.6" - reflect-metadata "^0.2.2" - tslib "^2.8.1" - tsyringe "^4.10.0" - -"@peculiar/x509@^1.14.2": version "1.14.3" resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.3.tgz#2c44c2b89474346afec38a0c2803ec4fb8ce959e" integrity sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA== @@ -1562,11 +1494,6 @@ bytes@^3.1.2, bytes@~3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -bytestreamjs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" - integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== - cacheable-lookup@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" @@ -3018,20 +2945,26 @@ minimatch@^10.2.2, minimatch@^10.2.4: dependencies: brace-expansion "^5.0.5" -mockttp@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/mockttp/-/mockttp-4.3.1.tgz#02d759c0b4bd8cb7133f0201fd1d7ab99d1412c7" - integrity sha512-g9USZI+EPdwdLFqvfETQ0+76+fnIb+3vXPo2qN90rXe+1lCpJJjiGqCJwdhl5bx8wMNEM57DjRSiQVi6oOynWQ== +mockttp@4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/mockttp/-/mockttp-4.4.2.tgz#8132e8343fbf166ab623e529bde6d067ae9d4523" + integrity sha512-jHw/qCuzIReIVRDNK5geG17K7Xo0qlamRCCw5yI4ab8vQ1MGimOS9QU3u76bc0sLG1jQygjlcx421QkKOy0pfA== dependencies: "@graphql-tools/schema" "^10.0.31" "@graphql-tools/utils" "^11.0.0" - "@httptoolkit/httpolyglot" "^3.0.1" + "@httptoolkit/httpolyglot" "^3.1.0" "@httptoolkit/subscriptions-transport-ws" "^0.11.2" "@httptoolkit/util" "^0.1.7" "@httptoolkit/websocket-stream" "^6.0.1" - "@peculiar/asn1-pkcs8" "^2.5.0" - "@peculiar/asn1-schema" "^2.3.15" - "@peculiar/asn1-x509" "^2.3.15" + "@peculiar/asn1-cms" "<2.7.0" + "@peculiar/asn1-csr" "<2.7.0" + "@peculiar/asn1-ecc" "<2.7.0" + "@peculiar/asn1-pkcs8" "^2.5.0 <2.7.0" + "@peculiar/asn1-pkcs9" "<2.7.0" + "@peculiar/asn1-rsa" "<2.7.0" + "@peculiar/asn1-schema" "^2.3.15 <2.7.0" + "@peculiar/asn1-x509" "^2.3.15 <2.7.0" + "@peculiar/asn1-x509-attr" "<2.7.0" "@peculiar/x509" "^1.12.3" "@types/cors" "^2.8.6" "@types/node" "*" @@ -3350,18 +3283,6 @@ pkg-pr-new@0.0.71: resolved "https://registry.yarnpkg.com/pkg-pr-new/-/pkg-pr-new-0.0.71.tgz#b4ee1b96bc28500279be1cfc3d09fc102532f7da" integrity sha512-Ln7I7NaOXN6CjBLVrNqsWOo6mIaNW4chH4eCR2t4tnQSmYtyQiWCqlMG6bL2JYCT1MOiKEiDObnnzePGh0TNFQ== -pkijs@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.4.0.tgz#d9164def30ff6d97be2d88966d5e36192499ca9c" - integrity sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw== - dependencies: - "@noble/hashes" "1.4.0" - asn1js "^3.0.6" - bytestreamjs "^2.0.1" - pvtsutils "^1.3.6" - pvutils "^1.1.3" - tslib "^2.8.1" - postcss@^8.5.8: version "8.5.14" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.14.tgz#a66c2d7808fadf69ebb5b84a03f8bafd76c4919c" @@ -3566,14 +3487,6 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -selfsigned@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-5.5.0.tgz#4c9ab7c7c9f35f18fb6a9882c253eb0e6bd6557b" - integrity sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew== - dependencies: - "@peculiar/x509" "^1.14.2" - pkijs "^3.3.3" - semver@^7.5.2: version "7.7.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"