diff --git a/.changeset/breezy-symbols-walk.md b/.changeset/breezy-symbols-walk.md new file mode 100644 index 0000000000..1760511089 --- /dev/null +++ b/.changeset/breezy-symbols-walk.md @@ -0,0 +1,5 @@ +--- +"@firebase/util": patch +--- + +Fix ReDoS vulnerability in FirebaseError template replacement diff --git a/.github/workflows/test-changed-auth.yml b/.github/workflows/test-changed-auth.yml index 5364614a8f..9113015bb6 100644 --- a/.github/workflows/test-changed-auth.yml +++ b/.github/workflows/test-changed-auth.yml @@ -91,6 +91,8 @@ jobs: with: node-version: 22.12.0 - name: Test setup and yarn install + env: + CHROMEDRIVER_SKIP_DOWNLOAD: true run: | cp config/ci.config.json config/project.json yarn @@ -116,6 +118,8 @@ jobs: with: node-version: 22.12.0 - name: Test setup and yarn install + env: + CHROMEDRIVER_SKIP_DOWNLOAD: true run: | cp config/ci.config.json config/project.json yarn diff --git a/.github/workflows/test-changed.yml b/.github/workflows/test-changed.yml index ce4cfcee05..18dfb6d4b9 100644 --- a/.github/workflows/test-changed.yml +++ b/.github/workflows/test-changed.yml @@ -69,6 +69,8 @@ jobs: - name: install Firefox stable run: npx @puppeteer/browsers install firefox@stable - name: Test setup and yarn install + env: + CHROMEDRIVER_SKIP_DOWNLOAD: true run: | cp config/ci.config.json config/project.json yarn @@ -95,6 +97,8 @@ jobs: with: node-version: 22.12.0 - name: Test setup and yarn install + env: + CHROMEDRIVER_SKIP_DOWNLOAD: true run: | cp config/ci.config.json config/project.json yarn diff --git a/packages/auth/firebase.json b/packages/auth/firebase.json new file mode 100644 index 0000000000..023f02650d --- /dev/null +++ b/packages/auth/firebase.json @@ -0,0 +1,13 @@ +{ + "emulators": { + "auth": { + "port": 9098 + }, + "hub": { + "port": 4402 + }, + "logging": { + "port": 4502 + } + } +} diff --git a/packages/auth/package.json b/packages/auth/package.json index 218bcd800c..ea024842f5 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -136,7 +136,7 @@ "@rollup/plugin-strip": "3.0.4", "@types/express": "4.17.21", "@types/selenium-webdriver": "4.35.6", - "chromedriver": "119.0.1", + "chromedriver": "^150.0.0", "cookie-store": "4.0.0-next.4", "rollup": "2.79.2", "rollup-plugin-sourcemaps": "0.6.3", diff --git a/packages/auth/test/integration/webdriver/compat/firebaseui.test.ts b/packages/auth/test/integration/webdriver/compat/firebaseui.test.ts index 79fd3fca77..5e1f920828 100644 --- a/packages/auth/test/integration/webdriver/compat/firebaseui.test.ts +++ b/packages/auth/test/integration/webdriver/compat/firebaseui.test.ts @@ -46,7 +46,7 @@ browserDescribe('WebDriver integration with FirebaseUI', driver => { const page = await startUi(); await page.clickGuestSignIn(); await waitForLoggedInPage(); - const snap = (await driver.getUserSnapshot()) as User; + const snap = (await driver.getUserSnapshot()) as unknown as User; expect(snap.isAnonymous).to.be.true; expect(snap.uid).to.be.a('string'); }); @@ -70,7 +70,7 @@ browserDescribe('WebDriver integration with FirebaseUI', driver => { await driver.call(UiFunction.LOAD); await startUi(); await waitForLoggedInPage(); - const snap = (await driver.getUserSnapshot()) as User; + const snap = (await driver.getUserSnapshot()) as unknown as User; expect(snap.isAnonymous).to.be.false; expect(snap.displayName).to.eq('Bob Test'); expect(snap.email).to.eq('bob@bob.test'); @@ -97,7 +97,7 @@ browserDescribe('WebDriver integration with FirebaseUI', driver => { // Now we're back. Firebase UI should handle the redirect result handoff await driver.selectMainWindow(); await waitForLoggedInPage(); - const snap = (await driver.getUserSnapshot()) as User; + const snap = (await driver.getUserSnapshot()) as unknown as User; expect(snap.isAnonymous).to.be.false; expect(snap.displayName).to.eq('Bob Test'); expect(snap.email).to.eq('bob@bob.test'); @@ -135,7 +135,7 @@ browserDescribe('WebDriver integration with FirebaseUI', driver => { await page.clickSubmit(); await waitForLoggedInPage(); - const snap = (await driver.getUserSnapshot()) as User; + const snap = (await driver.getUserSnapshot()) as unknown as User; expect(snap.isAnonymous).to.be.false; expect(snap.phoneNumber).to.eq(`+1${phoneNumber}`); expect(snap.uid).to.be.a('string'); @@ -152,7 +152,7 @@ browserDescribe('WebDriver integration with FirebaseUI', driver => { await page.clickSubmit(); await waitForLoggedInPage(); - const snap = (await driver.getUserSnapshot()) as User; + const snap = (await driver.getUserSnapshot()) as unknown as User; expect(snap.isAnonymous).to.be.false; expect(snap.displayName).to.eq('Foo Test'); expect(snap.email).to.eq('foo@foo.test'); diff --git a/packages/util/src/errors.ts b/packages/util/src/errors.ts index fdf9a71f71..a6aeed3274 100644 --- a/packages/util/src/errors.ts +++ b/packages/util/src/errors.ts @@ -127,10 +127,30 @@ export class ErrorFactory< } function replaceTemplate(template: string, data: ErrorData): string { - return template.replace(PATTERN, (_, key) => { - const value = data[key]; - return value != null ? String(value) : `<${key}?>`; - }); + try { + let ptr = 0; + let result = ''; + while (ptr < template.length) { + const start = template.indexOf('{$', ptr); + if (start === -1) { + result += template.substring(ptr); + break; + } + const end = template.indexOf('}', start + 2); + if (end === -1) { + result += template.substring(ptr); + break; + } + const key = template.substring(start + 2, end); + const value = data[key]; + result += + template.substring(ptr, start) + + (value != null ? String(value) : `<${key}?>`); + ptr = end + 1; + } + return result; + } catch (e) { + // Should never happen, but fallback just in case + return template; + } } - -const PATTERN = /\{\$([^}]+)}/g; diff --git a/packages/util/test/errors.test.ts b/packages/util/test/errors.test.ts index 6cb6273d32..e0c9806ce8 100644 --- a/packages/util/test/errors.test.ts +++ b/packages/util/test/errors.test.ts @@ -80,6 +80,19 @@ describe('FirebaseError', () => { ); }); + it('falls back to template if template replacement throws', () => { + const e = ERROR_FACTORY.create('file-not-found', { + get file() { + throw new Error('accessing file throws'); + } + } as any); + assert.equal((e as FirebaseError)?.code, 'fake/file-not-found'); + assert.equal( + e.message, + "Fake: Could not find file: '{$file}' (fake/file-not-found)." + ); + }); + it('has stack', () => { const e = ERROR_FACTORY.create('generic-error'); diff --git a/yarn.lock b/yarn.lock index f46867cf59..2de8cfe124 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4128,6 +4128,11 @@ adm-zip@0.5.5: resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.5.tgz#b6549dbea741e4050309f1bb4d47c47397ce2c4f" integrity sha512-IWwXKnCbirdbyXSfUDvCCrmYrOHANRZcc8NcRrvTlIApdl7PwE9oGcsYvNeJPAVY1M+70b4PxXGKIf8AEuiQ6w== +adm-zip@^0.5.18: + version "0.5.18" + resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.18.tgz#283a05f2bf1e3fd315f0f31cde29b7a6e3c1619d" + integrity sha512-ufJnssQGbxzLNS1Ho9bCtX4rQKCCvoVuDLHoJyc3F9dOGDB4BkWs2Ci0kv53lqocAEQ/Cbi+I2XCsNYGqVYqng== + adm-zip@~0.4.3: version "0.4.16" resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" @@ -4140,6 +4145,11 @@ agent-base@6, agent-base@^6.0.2: dependencies: debug "4" +agent-base@9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz#ec9efb08314e1e75b0852d74aabf9a387f99834e" + integrity sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA== + agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.3" resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" @@ -4781,6 +4791,16 @@ axios@1.16.0: form-data "^4.0.5" proxy-from-env "^2.1.0" +axios@^1.18.1: + version "1.18.1" + resolved "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz#d63f9863bcd8938815c86f9e2abd380189d96dfe" + integrity sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g== + dependencies: + follow-redirects "^1.16.0" + form-data "^4.0.5" + https-proxy-agent "^5.0.1" + proxy-from-env "^2.1.0" + axios@^1.6.0: version "1.16.1" resolved "https://registry.yarnpkg.com/axios/-/axios-1.16.1.tgz#517e29291d19d6e8cf919ff264f4fe157261ba12" @@ -4967,6 +4987,11 @@ basic-ftp@^5.0.2: resolved "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.2.tgz#4cb2422deddf432896bdb3c9b8f13b944ad4842c" integrity sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw== +basic-ftp@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz#3148ee9af43c0522514a4f973fecb1d3cbb6d71e" + integrity sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw== + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -5684,6 +5709,19 @@ chromedriver@119.0.1: proxy-from-env "^1.1.0" tcp-port-used "^1.0.2" +chromedriver@^150.0.0: + version "150.0.3" + resolved "https://registry.npmjs.org/chromedriver/-/chromedriver-150.0.3.tgz#adbec41d92a0e2809c1aab2dc8ca9f148b139539" + integrity sha512-i2L979d6YDTVVUDUPWXz75HGKKVhjNXo74gLiy/f8Adb5zHLU+h3ABdg8RRoiegtjJB0m9vUEiPTdecD0ifa3w== + dependencies: + "@testim/chrome-version" "^1.1.4" + adm-zip "^0.5.18" + axios "^1.18.1" + compare-versions "^6.1.1" + proxy-agent "^8.0.2" + proxy-from-env "^2.1.0" + tcp-port-used "^1.0.3" + ci-info@4.3.1: version "4.3.1" resolved "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa" @@ -6062,7 +6100,7 @@ compare-func@^2.0.0: array-ify "^1.0.0" dot-prop "^5.1.0" -compare-versions@^6.1.0: +compare-versions@^6.1.0, compare-versions@^6.1.1: version "6.1.1" resolved "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== @@ -6512,6 +6550,11 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-uri-to-buffer@8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-8.0.0.tgz#c642ffbc96d8fae76cccecbad43cbddd7818c785" + integrity sha512-6UHfyCux51b8PTGDgveqtz1tvphBku5DrMKKJbFAZAJOI2zsjDpDoYE1+QGj7FOMS4BdTFNJsJiR3zEB0xH0yQ== + data-uri-to-buffer@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" @@ -6760,6 +6803,15 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +degenerator@7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/degenerator/-/degenerator-7.0.1.tgz#9b057747a2e5d058b0ef8fd753faccc109957467" + integrity sha512-ABErK0IefDSyHjlPH7WUEenIAX2rPPnrDcDM+TS3z3+zu9TfyKKi07BQM+8rmxpdE2y1v5fjjdoAS/x4D2U60w== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + degenerator@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" @@ -8716,6 +8768,15 @@ get-symbol-description@^1.1.0: es-errors "^1.3.0" get-intrinsic "^1.2.6" +get-uri@8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/get-uri/-/get-uri-8.0.1.tgz#772b1418bf034c2c43ddd6a41af24a4262e135ee" + integrity sha512-/5N/P4Lrh0p/mDwlDRi7Y1+P2o/OyzZI3l6Iz1Ov6XXwwm1y3RlZLuo3gVgML99djrEDtV980bBxSuOeHLk8ww== + dependencies: + basic-ftp "^5.3.1" + data-uri-to-buffer "8.0.0" + debug "^4.3.4" + get-uri@^6.0.1: version "6.0.4" resolved "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz#6daaee9e12f9759e19e55ba313956883ef50e0a7" @@ -9472,6 +9533,15 @@ http-parser-js@>=0.5.1: resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz#b817b3ca0edea6236225000d795378707c169cec" integrity sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw== +http-proxy-agent@9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-9.1.0.tgz#fd8b39dcb58ac8046139e5f4ea80de78e8beaf7b" + integrity sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig== + dependencies: + agent-base "9.0.0" + debug "^4.3.4" + proxy-agent-negotiate "1.1.0" + http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -9556,6 +9626,15 @@ https-proxy-agent@5.0.0: agent-base "6" debug "4" +https-proxy-agent@9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz#a9f60f79bc1578c37b166dd7f58b6bcb5c57e44b" + integrity sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA== + dependencies: + agent-base "9.0.0" + debug "^4.3.4" + proxy-agent-negotiate "1.1.0" + https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -9840,6 +9919,11 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== + ip-regex@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" @@ -10392,6 +10476,15 @@ is-yarn-global@^0.3.0: resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +is2@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz#8ac355644840921ce435d94f05d3a94634d3481a" + integrity sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA== + dependencies: + deep-is "^0.1.3" + ip-regex "^2.1.0" + is-url "^1.2.2" + is2@^2.0.6: version "2.0.9" resolved "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz#ff63b441f90de343fa8fac2125ee170da8e8240d" @@ -13690,6 +13783,20 @@ p-waterfall@2.1.1: dependencies: p-reduce "^2.0.0" +pac-proxy-agent@9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-9.1.0.tgz#cafd7bb54905de0b6804283cd273eb22028c6abd" + integrity sha512-1aU+1mpj3DrQPfo3gh+3Gap3G5x+axnMx1P/y0ZF2ch7kb2meyOCAH8K2k9d27ROsTE7TnAerzxqF9aon2jqnA== + dependencies: + agent-base "9.0.0" + debug "^4.3.4" + get-uri "8.0.1" + http-proxy-agent "9.1.0" + https-proxy-agent "9.1.0" + pac-resolver "9.0.1" + quickjs-wasi "^2.2.0" + socks-proxy-agent "10.1.0" + pac-proxy-agent@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz#da7c3b5c4cccc6655aaafb701ae140fb23f15df2" @@ -13704,6 +13811,14 @@ pac-proxy-agent@^7.1.0: pac-resolver "^7.0.1" socks-proxy-agent "^8.0.5" +pac-resolver@9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-9.0.1.tgz#a90b1518e4e832b3fcb197ada974d6f6ceaa7f8a" + integrity sha512-lJbS008tmkj08VhoM8Hzuv/VE5tK9MS0OIQ/7+s0lIF+BYhiQWFYzkSpML7lXs9iBu2jfmzBTLzhe9n6BX+dYw== + dependencies: + degenerator "7.0.1" + netmask "^2.0.2" + pac-resolver@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" @@ -14512,6 +14627,11 @@ proxy-addr@^2.0.7, proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-agent-negotiate@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz#de7d37aede9d71e74346125d6f484fac8092b615" + integrity sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ== + proxy-agent@^6.3.0: version "6.5.0" resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz#9e49acba8e4ee234aacb539f89ed9c23d02f232d" @@ -14526,7 +14646,21 @@ proxy-agent@^6.3.0: proxy-from-env "^1.1.0" socks-proxy-agent "^8.0.5" -proxy-from-env@2.1.0, proxy-from-env@^2.1.0: +proxy-agent@^8.0.2: + version "8.0.2" + resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-8.0.2.tgz#70737a3b9cdc8bd7a282c9e6ff54a64f5252413c" + integrity sha512-idLLRewuemWd7GH/BDJzGiB0dWGfT2SQs3jy6NtZtGWU9uPTTSdeC1/cdbqLwgzhfv027daGFuXX426e2Eg20A== + dependencies: + agent-base "9.0.0" + debug "^4.3.4" + http-proxy-agent "9.1.0" + https-proxy-agent "9.1.0" + lru-cache "^7.14.1" + pac-proxy-agent "9.1.0" + proxy-from-env "^2.0.0" + socks-proxy-agent "10.1.0" + +proxy-from-env@2.1.0, proxy-from-env@^2.0.0, proxy-from-env@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== @@ -14669,6 +14803,11 @@ quick-lru@^5.1.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +quickjs-wasi@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-2.2.0.tgz#85d8984aa1b048546e5634c764165034c6e22d48" + integrity sha512-zQxXmQMrEoD3S+jQdYsloq4qAuaxKFHZj6hHqOYGwB2iQZH+q9e/lf5zQPXCKOk0WJuAjzRFbO4KwHIp2D05Iw== + railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" @@ -16058,6 +16197,15 @@ socket.io@^4.7.2: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" +socks-proxy-agent@10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-10.1.0.tgz#8eaf7d64ad8752ca43ab04a1a9567be9b7fc40b1" + integrity sha512-WlMj/67cEJ6MDI1OcsnjuYKDNDoyPCCYZ249kuuXPiMDw9F8PXkVaQ7YWu3siTydfQ/4BEZcvGzu+aYvz7dDCQ== + dependencies: + agent-base "9.0.0" + debug "^4.3.4" + socks "^2.8.3" + socks-proxy-agent@^6.0.0: version "6.2.1" resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" @@ -16819,6 +16967,14 @@ tcp-port-used@^1.0.2: debug "4.3.1" is2 "^2.0.6" +tcp-port-used@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.3.tgz#fa609c94a7c930e334dbed59010f87ff00d32146" + integrity sha512-4CEQ3qRJYo+mtEbJ+OoQu3dF4TDkwaO3RDVC4UzP5cpAOIUWwuwPjD7sdxDFFqsMUjsXVVYBMlg/boAaloThMA== + dependencies: + debug "4.3.1" + is2 "2.0.1" + teeny-request@^9.0.0: version "9.0.0" resolved "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d"