From 3f3ff11742359c20f2231f9d013616bae2122abd Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Sun, 24 Dec 2023 00:35:50 +0100 Subject: [PATCH] feat: support proxy for node.js with native fetch (#133) --- package.json | 3 +-- pnpm-lock.yaml | 21 +++++++++++---------- src/_utils.ts | 20 +++++++------------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index 9424779..f20bf50 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,7 @@ "citty": "^0.1.5", "consola": "^3.2.3", "defu": "^6.1.3", - "https-proxy-agent": "^7.0.2", - "node-fetch-native": "^1.4.1", + "node-fetch-native": "^1.5.1", "ohash": "^1.1.3", "pathe": "^1.1.1", "tar": "^6.2.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb9ac58..4bb29a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,12 +14,9 @@ dependencies: defu: specifier: ^6.1.3 version: 6.1.3 - https-proxy-agent: - specifier: ^7.0.2 - version: 7.0.2 node-fetch-native: - specifier: ^1.4.1 - version: 1.4.1 + specifier: ^1.5.1 + version: 1.5.1 ohash: specifier: ^1.1.3 version: 1.1.3 @@ -1074,6 +1071,7 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1382,7 +1380,7 @@ packages: convert-gitmoji: 0.1.3 execa: 8.0.1 mri: 1.2.0 - node-fetch-native: 1.4.1 + node-fetch-native: 1.5.1 ofetch: 1.3.3 open: 9.1.0 pathe: 1.1.1 @@ -1634,6 +1632,7 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} @@ -2490,7 +2489,7 @@ packages: defu: 6.1.3 https-proxy-agent: 7.0.2 mri: 1.2.0 - node-fetch-native: 1.4.1 + node-fetch-native: 1.5.1 pathe: 1.1.1 tar: 6.2.0 transitivePeerDependencies: @@ -2654,6 +2653,7 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -3239,6 +3239,7 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3258,8 +3259,8 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /node-fetch-native@1.4.1: - resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==} + /node-fetch-native@1.5.1: + resolution: {integrity: sha512-KNVu95aIrNzw7v1aKyVv/nC2kHUqNzgBnFuMTemhHnk7djEMtLjaJSDCB8h2VVgKL5s+NAcvBlZ2OIHLP0RC/Q==} /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -3354,7 +3355,7 @@ packages: resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} dependencies: destr: 2.0.2 - node-fetch-native: 1.4.1 + node-fetch-native: 1.5.1 ufo: 1.3.2 dev: true diff --git a/src/_utils.ts b/src/_utils.ts index 0c404d3..40d1cdc 100644 --- a/src/_utils.ts +++ b/src/_utils.ts @@ -7,6 +7,7 @@ import { promisify } from "node:util"; import type { Agent } from "node:http"; import { relative, resolve } from "pathe"; import { fetch } from "node-fetch-native"; +import { createProxy } from "node-fetch-native/proxy"; import type { GitInfo } from "./types"; export async function download( @@ -74,19 +75,12 @@ export async function sendFetch( url: string, options: InternalFetchOptions = {}, ) { - if (!options.agent) { - const proxyEnv = - process.env.HTTPS_PROXY || - process.env.https_proxy || - process.env.HTTP_PROXY || - process.env.http_proxy; - if (proxyEnv) { - const HttpsProxyAgent = await import("https-proxy-agent").then( - (r) => r.HttpsProxyAgent || r.default, - ); - options.agent = new HttpsProxyAgent(proxyEnv); - } - } + // Add proxy support + // https://github.com/unjs/node-fetch-native?tab=readme-ov-file#proxy-support + options = { + ...createProxy(), + ...options, + }; // https://github.com/nodejs/undici/issues/1305 if (options.headers?.["sec-fetch-mode"]) {