renovate 43.25.4 → 43.25.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,24 +32,7 @@ function applyAuthorization(inOptions) {
32
32
  }
33
33
  return options;
34
34
  }
35
- function isAmazon(options) {
36
- return !!options.search?.includes("X-Amz-Algorithm");
37
- }
38
- function isAzureBlob(options) {
39
- return !!(options.hostname?.endsWith(".blob.core.windows.net") && options.href?.includes("/docker/registry"));
40
- }
41
- function removeAuthorization(options) {
42
- if (!options.password && !options.headers?.authorization) return;
43
- if (isAmazon(options) || isAzureBlob(options)) {
44
- // v8 ignore else -- TODO: add test #40625
45
- if (!options.href?.split?.("/")?.[2]?.split(":")?.[1]) delete options.port;
46
- // v8 ignore else -- TODO: add test #40625
47
- if (options?.headers?.authorization) delete options.headers.authorization;
48
- delete options.username;
49
- delete options.password;
50
- }
51
- }
52
35
 
53
36
  //#endregion
54
- export { applyAuthorization, removeAuthorization };
37
+ export { applyAuthorization };
55
38
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","names":[],"sources":["../../../lib/util/http/auth.ts"],"sourcesContent":["import { isNonEmptyString, isString } from '@sindresorhus/is';\nimport type { Options } from 'got';\nimport {\n FORGEJO_API_USING_HOST_TYPES,\n GITEA_API_USING_HOST_TYPES,\n GITHUB_API_USING_HOST_TYPES,\n GITLAB_API_USING_HOST_TYPES,\n} from '../../constants/index.ts';\nimport type { GotOptions } from './types.ts';\n\nexport type AuthGotOptions = Pick<\n GotOptions,\n | 'hostType'\n | 'headers'\n | 'noAuth'\n | 'context'\n | 'token'\n | 'username'\n | 'password'\n>;\n\nexport function applyAuthorization<GotOptions extends AuthGotOptions>(\n inOptions: GotOptions,\n): GotOptions {\n const options: GotOptions = { ...inOptions };\n\n if (isNonEmptyString(options.headers?.authorization) || options.noAuth) {\n return options;\n }\n\n options.headers ??= {};\n if (options.token) {\n const authType = options.context?.authType;\n if (authType) {\n if (authType === 'Token-Only') {\n options.headers.authorization = options.token;\n } else {\n options.headers.authorization = `${authType} ${options.token}`;\n }\n } else if (\n options.hostType &&\n FORGEJO_API_USING_HOST_TYPES.includes(options.hostType)\n ) {\n options.headers.authorization = `Bearer ${options.token}`;\n } else if (\n options.hostType &&\n GITEA_API_USING_HOST_TYPES.includes(options.hostType)\n ) {\n // Gitea v1.8.0 and later support `Bearer` as alternate to `token`\n // https://github.com/go-gitea/gitea/pull/5378\n options.headers.authorization = `Bearer ${options.token}`;\n } else if (\n options.hostType &&\n GITHUB_API_USING_HOST_TYPES.includes(options.hostType)\n ) {\n options.headers.authorization = `token ${options.token}`;\n if (options.token.startsWith('x-access-token:')) {\n const appToken = options.token.replace('x-access-token:', '');\n options.headers.authorization = `token ${appToken}`;\n // v8 ignore else -- TODO: add test #40625\n if (isString(options.headers.accept)) {\n options.headers.accept = options.headers.accept.replace(\n 'application/vnd.github.v3+json',\n 'application/vnd.github.machine-man-preview+json',\n );\n }\n }\n } else if (\n options.hostType &&\n GITLAB_API_USING_HOST_TYPES.includes(options.hostType)\n ) {\n // GitLab versions earlier than 12.2 only support authentication with\n // a personal access token, which is 20 characters long.\n if (options.token.length === 20) {\n options.headers['Private-token'] = options.token;\n } else {\n options.headers.authorization = `Bearer ${options.token}`;\n }\n } else {\n options.headers.authorization = `Bearer ${options.token}`;\n }\n delete options.token;\n } else if (options.password !== undefined) {\n // Otherwise got will add username and password to url and header\n const auth = Buffer.from(\n `${options.username ?? ''}:${options.password}`,\n ).toString('base64');\n options.headers.authorization = `Basic ${auth}`;\n delete options.username;\n delete options.password;\n }\n return options;\n}\n\n// isAmazon return true if request options contains Amazon related headers\nfunction isAmazon(options: Options): boolean {\n return !!options.search?.includes('X-Amz-Algorithm');\n}\n\n// isAzureBlob return true if request options contains Azure container registry related data\nfunction isAzureBlob(options: Options): boolean {\n return !!(\n options.hostname?.endsWith('.blob.core.windows.net') && // lgtm [js/incomplete-url-substring-sanitization]\n options.href?.includes('/docker/registry')\n );\n}\n\n// removeAuthorization from the redirect options\nexport function removeAuthorization(options: Options): void {\n if (!options.password && !options.headers?.authorization) {\n return;\n }\n\n // Check if request has been redirected to Amazon or an Azure blob (ACR)\n if (isAmazon(options) || isAzureBlob(options)) {\n // if there is no port in the redirect URL string, then delete it from the redirect options.\n // This can be evaluated for removal after upgrading to Got v10\n const portInUrl = options.href?.split?.('/')?.[2]?.split(':')?.[1];\n // v8 ignore else -- TODO: add test #40625\n if (!portInUrl) {\n delete options.port; // Redirect will instead use 80 or 443 for HTTP or HTTPS respectively\n }\n\n // registry is hosted on Amazon or Azure blob, redirect url includes\n // authentication which is not required and should be removed\n // v8 ignore else -- TODO: add test #40625\n if (options?.headers?.authorization) {\n delete options.headers.authorization;\n }\n delete options.username;\n delete options.password;\n }\n}\n"],"mappings":";;;;AAqBA,SAAgB,mBACd,WACY;CACZ,MAAM,UAAsB,EAAE,GAAG,WAAW;AAE5C,KAAI,iBAAiB,QAAQ,SAAS,cAAc,IAAI,QAAQ,OAC9D,QAAO;AAGT,SAAQ,YAAY,EAAE;AACtB,KAAI,QAAQ,OAAO;EACjB,MAAM,WAAW,QAAQ,SAAS;AAClC,MAAI,SACF,KAAI,aAAa,aACf,SAAQ,QAAQ,gBAAgB,QAAQ;MAExC,SAAQ,QAAQ,gBAAgB,GAAG,SAAS,GAAG,QAAQ;WAGzD,QAAQ,YACR,6BAA6B,SAAS,QAAQ,SAAS,CAEvD,SAAQ,QAAQ,gBAAgB,UAAU,QAAQ;WAElD,QAAQ,YACR,2BAA2B,SAAS,QAAQ,SAAS,CAIrD,SAAQ,QAAQ,gBAAgB,UAAU,QAAQ;WAElD,QAAQ,YACR,4BAA4B,SAAS,QAAQ,SAAS,EACtD;AACA,WAAQ,QAAQ,gBAAgB,SAAS,QAAQ;AACjD,OAAI,QAAQ,MAAM,WAAW,kBAAkB,EAAE;IAC/C,MAAM,WAAW,QAAQ,MAAM,QAAQ,mBAAmB,GAAG;AAC7D,YAAQ,QAAQ,gBAAgB,SAAS;;AAEzC,QAAI,SAAS,QAAQ,QAAQ,OAAO,CAClC,SAAQ,QAAQ,SAAS,QAAQ,QAAQ,OAAO,QAC9C,kCACA,kDACD;;aAIL,QAAQ,YACR,4BAA4B,SAAS,QAAQ,SAAS,CAItD,KAAI,QAAQ,MAAM,WAAW,GAC3B,SAAQ,QAAQ,mBAAmB,QAAQ;MAE3C,SAAQ,QAAQ,gBAAgB,UAAU,QAAQ;MAGpD,SAAQ,QAAQ,gBAAgB,UAAU,QAAQ;AAEpD,SAAO,QAAQ;YACN,QAAQ,aAAa,QAAW;EAEzC,MAAM,OAAO,OAAO,KAClB,GAAG,QAAQ,YAAY,GAAG,GAAG,QAAQ,WACtC,CAAC,SAAS,SAAS;AACpB,UAAQ,QAAQ,gBAAgB,SAAS;AACzC,SAAO,QAAQ;AACf,SAAO,QAAQ;;AAEjB,QAAO;;AAIT,SAAS,SAAS,SAA2B;AAC3C,QAAO,CAAC,CAAC,QAAQ,QAAQ,SAAS,kBAAkB;;AAItD,SAAS,YAAY,SAA2B;AAC9C,QAAO,CAAC,EACN,QAAQ,UAAU,SAAS,yBAAyB,IACpD,QAAQ,MAAM,SAAS,mBAAmB;;AAK9C,SAAgB,oBAAoB,SAAwB;AAC1D,KAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,SAAS,cACzC;AAIF,KAAI,SAAS,QAAQ,IAAI,YAAY,QAAQ,EAAE;;AAK7C,MAAI,CAFc,QAAQ,MAAM,QAAQ,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,GAG9D,QAAO,QAAQ;;AAMjB,MAAI,SAAS,SAAS,cACpB,QAAO,QAAQ,QAAQ;AAEzB,SAAO,QAAQ;AACf,SAAO,QAAQ"}
1
+ {"version":3,"file":"auth.js","names":[],"sources":["../../../lib/util/http/auth.ts"],"sourcesContent":["import { isNonEmptyString, isString } from '@sindresorhus/is';\nimport {\n FORGEJO_API_USING_HOST_TYPES,\n GITEA_API_USING_HOST_TYPES,\n GITHUB_API_USING_HOST_TYPES,\n GITLAB_API_USING_HOST_TYPES,\n} from '../../constants/index.ts';\nimport type { GotOptions } from './types.ts';\n\nexport type AuthGotOptions = Pick<\n GotOptions,\n | 'hostType'\n | 'headers'\n | 'noAuth'\n | 'context'\n | 'token'\n | 'username'\n | 'password'\n>;\n\nexport function applyAuthorization<GotOptions extends AuthGotOptions>(\n inOptions: GotOptions,\n): GotOptions {\n const options: GotOptions = { ...inOptions };\n\n if (isNonEmptyString(options.headers?.authorization) || options.noAuth) {\n return options;\n }\n\n options.headers ??= {};\n if (options.token) {\n const authType = options.context?.authType;\n if (authType) {\n if (authType === 'Token-Only') {\n options.headers.authorization = options.token;\n } else {\n options.headers.authorization = `${authType} ${options.token}`;\n }\n } else if (\n options.hostType &&\n FORGEJO_API_USING_HOST_TYPES.includes(options.hostType)\n ) {\n options.headers.authorization = `Bearer ${options.token}`;\n } else if (\n options.hostType &&\n GITEA_API_USING_HOST_TYPES.includes(options.hostType)\n ) {\n // Gitea v1.8.0 and later support `Bearer` as alternate to `token`\n // https://github.com/go-gitea/gitea/pull/5378\n options.headers.authorization = `Bearer ${options.token}`;\n } else if (\n options.hostType &&\n GITHUB_API_USING_HOST_TYPES.includes(options.hostType)\n ) {\n options.headers.authorization = `token ${options.token}`;\n if (options.token.startsWith('x-access-token:')) {\n const appToken = options.token.replace('x-access-token:', '');\n options.headers.authorization = `token ${appToken}`;\n // v8 ignore else -- TODO: add test #40625\n if (isString(options.headers.accept)) {\n options.headers.accept = options.headers.accept.replace(\n 'application/vnd.github.v3+json',\n 'application/vnd.github.machine-man-preview+json',\n );\n }\n }\n } else if (\n options.hostType &&\n GITLAB_API_USING_HOST_TYPES.includes(options.hostType)\n ) {\n // GitLab versions earlier than 12.2 only support authentication with\n // a personal access token, which is 20 characters long.\n if (options.token.length === 20) {\n options.headers['Private-token'] = options.token;\n } else {\n options.headers.authorization = `Bearer ${options.token}`;\n }\n } else {\n options.headers.authorization = `Bearer ${options.token}`;\n }\n delete options.token;\n } else if (options.password !== undefined) {\n // Otherwise got will add username and password to url and header\n const auth = Buffer.from(\n `${options.username ?? ''}:${options.password}`,\n ).toString('base64');\n options.headers.authorization = `Basic ${auth}`;\n delete options.username;\n delete options.password;\n }\n return options;\n}\n"],"mappings":";;;;AAoBA,SAAgB,mBACd,WACY;CACZ,MAAM,UAAsB,EAAE,GAAG,WAAW;AAE5C,KAAI,iBAAiB,QAAQ,SAAS,cAAc,IAAI,QAAQ,OAC9D,QAAO;AAGT,SAAQ,YAAY,EAAE;AACtB,KAAI,QAAQ,OAAO;EACjB,MAAM,WAAW,QAAQ,SAAS;AAClC,MAAI,SACF,KAAI,aAAa,aACf,SAAQ,QAAQ,gBAAgB,QAAQ;MAExC,SAAQ,QAAQ,gBAAgB,GAAG,SAAS,GAAG,QAAQ;WAGzD,QAAQ,YACR,6BAA6B,SAAS,QAAQ,SAAS,CAEvD,SAAQ,QAAQ,gBAAgB,UAAU,QAAQ;WAElD,QAAQ,YACR,2BAA2B,SAAS,QAAQ,SAAS,CAIrD,SAAQ,QAAQ,gBAAgB,UAAU,QAAQ;WAElD,QAAQ,YACR,4BAA4B,SAAS,QAAQ,SAAS,EACtD;AACA,WAAQ,QAAQ,gBAAgB,SAAS,QAAQ;AACjD,OAAI,QAAQ,MAAM,WAAW,kBAAkB,EAAE;IAC/C,MAAM,WAAW,QAAQ,MAAM,QAAQ,mBAAmB,GAAG;AAC7D,YAAQ,QAAQ,gBAAgB,SAAS;;AAEzC,QAAI,SAAS,QAAQ,QAAQ,OAAO,CAClC,SAAQ,QAAQ,SAAS,QAAQ,QAAQ,OAAO,QAC9C,kCACA,kDACD;;aAIL,QAAQ,YACR,4BAA4B,SAAS,QAAQ,SAAS,CAItD,KAAI,QAAQ,MAAM,WAAW,GAC3B,SAAQ,QAAQ,mBAAmB,QAAQ;MAE3C,SAAQ,QAAQ,gBAAgB,UAAU,QAAQ;MAGpD,SAAQ,QAAQ,gBAAgB,UAAU,QAAQ;AAEpD,SAAO,QAAQ;YACN,QAAQ,aAAa,QAAW;EAEzC,MAAM,OAAO,OAAO,KAClB,GAAG,QAAQ,YAAY,GAAG,GAAG,QAAQ,WACtC,CAAC,SAAS,SAAS;AACpB,UAAQ,QAAQ,gBAAgB,SAAS;AACzC,SAAO,QAAQ;AACf,SAAO,QAAQ;;AAEjB,QAAO"}
@@ -7,10 +7,9 @@ import { coerceNumber } from "../number.js";
7
7
  import { hooks } from "./hooks.js";
8
8
  import { GotExtraOptionKeys } from "./types.js";
9
9
  import { isNumber } from "@sindresorhus/is";
10
- import _got, { RequestError, RequestError as RequestError$1 } from "got";
10
+ import { RequestError, RequestError as RequestError$1, got } from "got";
11
11
 
12
12
  //#region lib/util/http/got.ts
13
- const got = _got;
14
13
  async function fetch(url, options, queueStats) {
15
14
  logger.trace({
16
15
  url,
@@ -1 +1 @@
1
- {"version":3,"file":"got.js","names":[],"sources":["../../../lib/util/http/got.ts"],"sourcesContent":["// TODO: refactor code to remove this (#9651)\nimport './legacy.ts';\n\nimport { isNumber } from '@sindresorhus/is';\nimport type { Options } from 'got';\nimport _got, { RequestError } from 'got';\nimport type { SetRequired } from 'type-fest';\nimport { logger } from '../../logger/index.ts';\nimport { clone } from '../clone.ts';\nimport { coerceNumber } from '../number.ts';\nimport { type HttpRequestStatsDataPoint, HttpStats } from '../stats.ts';\nimport { coerceString } from '../string.ts';\nimport { hooks } from './hooks.ts';\nimport {\n type GotBufferOptions,\n GotExtraOptionKeys,\n type GotOptions,\n type HttpResponse,\n} from './types.ts';\n\nexport { RequestError } from 'got';\n\nconst got = _got as unknown as typeof _got.default;\n\ntype QueueStatsData = Pick<HttpRequestStatsDataPoint, 'queueMs'>;\n\nexport async function fetch(\n url: string,\n options: SetRequired<GotOptions, 'method'>,\n queueStats: QueueStatsData,\n): Promise<HttpResponse<unknown>> {\n logger.trace({ url, options }, 'got request');\n\n let duration = 0;\n let statusCode = 0;\n try {\n // Cheat the TS compiler using `as` to pick a specific overload.\n // Otherwise it doesn't typecheck.\n const resp = await got(url, { ...options, hooks } as GotBufferOptions);\n statusCode = resp.statusCode;\n duration = coerceNumber(resp.timings.phases.total, 0);\n return resp;\n } catch (error) {\n // v8 ignore else -- TODO: add test #40625\n if (error instanceof RequestError) {\n statusCode = coerceNumber(error.response?.statusCode, -1);\n duration = coerceNumber(error.timings?.phases.total, -1);\n const method = options.method.toUpperCase();\n const code = coerceString(error.code, 'UNKNOWN');\n const retryCount = coerceNumber(error.request?.retryCount, -1);\n logger.debug(\n `${method} ${url} = (code=${code}, statusCode=${statusCode} retryCount=${retryCount}, duration=${duration})`,\n );\n }\n\n throw error;\n /* v8 ignore next: 🐛 https://github.com/bcoe/c8/issues/229 */\n } finally {\n HttpStats.write({\n method: options.method,\n url,\n reqMs: duration,\n queueMs: queueStats.queueMs,\n status: statusCode,\n });\n }\n}\n\nexport function stream(\n url: string,\n options: Omit<Options, 'isStream'>,\n): NodeJS.ReadableStream {\n return got.stream(url, options);\n}\n\n/**\n * Removes non-got options and normalizes some options to match got's expected format.\n * @param options options to normalize\n * @returns normalized got options\n */\nexport function normalize<T extends Options = Options>(\n options: T,\n keysToRemove: readonly string[],\n): T {\n const opts = clone(options);\n\n for (const key of [...GotExtraOptionKeys, ...keysToRemove]) {\n // @ts-expect-error -- delete extra options before passing to got\n delete opts[key];\n }\n\n // optimize options for got v12+\n const normalizedOptions = opts as unknown as T;\n\n if (isNumber(opts.timeout)) {\n normalizedOptions.timeout = { request: opts.timeout };\n }\n\n return normalizedOptions;\n}\n"],"mappings":";;;;;;;;;;;;AAsBA,MAAM,MAAM;AAIZ,eAAsB,MACpB,KACA,SACA,YACgC;AAChC,QAAO,MAAM;EAAE;EAAK;EAAS,EAAE,cAAc;CAE7C,IAAI,WAAW;CACf,IAAI,aAAa;AACjB,KAAI;EAGF,MAAM,OAAO,MAAM,IAAI,KAAK;GAAE,GAAG;GAAS;GAAO,CAAqB;AACtE,eAAa,KAAK;AAClB,aAAW,aAAa,KAAK,QAAQ,OAAO,OAAO,EAAE;AACrD,SAAO;UACA,OAAO;;AAEd,MAAI,iBAAiB,cAAc;AACjC,gBAAa,aAAa,MAAM,UAAU,YAAY,GAAG;AACzD,cAAW,aAAa,MAAM,SAAS,OAAO,OAAO,GAAG;GACxD,MAAM,SAAS,QAAQ,OAAO,aAAa;GAC3C,MAAM,OAAO,aAAa,MAAM,MAAM,UAAU;GAChD,MAAM,aAAa,aAAa,MAAM,SAAS,YAAY,GAAG;AAC9D,UAAO,MACL,GAAG,OAAO,GAAG,IAAI,WAAW,KAAK,eAAe,WAAW,cAAc,WAAW,aAAa,SAAS,GAC3G;;AAGH,QAAM;WAEE;AACR,YAAU,MAAM;GACd,QAAQ,QAAQ;GAChB;GACA,OAAO;GACP,SAAS,WAAW;GACpB,QAAQ;GACT,CAAC;;;AAIN,SAAgB,OACd,KACA,SACuB;AACvB,QAAO,IAAI,OAAO,KAAK,QAAQ;;;;;;;AAQjC,SAAgB,UACd,SACA,cACG;CACH,MAAM,OAAO,MAAM,QAAQ;AAE3B,MAAK,MAAM,OAAO,CAAC,GAAG,oBAAoB,GAAG,aAAa,CAExD,QAAO,KAAK;CAId,MAAM,oBAAoB;AAE1B,KAAI,SAAS,KAAK,QAAQ,CACxB,mBAAkB,UAAU,EAAE,SAAS,KAAK,SAAS;AAGvD,QAAO"}
1
+ {"version":3,"file":"got.js","names":[],"sources":["../../../lib/util/http/got.ts"],"sourcesContent":["// TODO: refactor code to remove this (#9651)\nimport './legacy.ts';\n\nimport { isNumber } from '@sindresorhus/is';\nimport type { OptionsInit } from 'got';\nimport { RequestError, got } from 'got';\nimport type { SetRequired } from 'type-fest';\nimport { logger } from '../../logger/index.ts';\nimport { clone } from '../clone.ts';\nimport { coerceNumber } from '../number.ts';\nimport { type HttpRequestStatsDataPoint, HttpStats } from '../stats.ts';\nimport { coerceString } from '../string.ts';\nimport { hooks } from './hooks.ts';\nimport {\n type GotBufferOptions,\n GotExtraOptionKeys,\n type GotOptions,\n type HttpResponse,\n} from './types.ts';\n\nexport { RequestError } from 'got';\n\ntype QueueStatsData = Pick<HttpRequestStatsDataPoint, 'queueMs'>;\n\nexport async function fetch(\n url: string,\n options: SetRequired<GotOptions, 'method'>,\n queueStats: QueueStatsData,\n): Promise<HttpResponse<unknown>> {\n logger.trace({ url, options }, 'got request');\n\n let duration = 0;\n let statusCode = 0;\n try {\n // Cheat the TS compiler using `as` to pick a specific overload.\n // Otherwise it doesn't typecheck.\n const resp = await got(url, { ...options, hooks } as GotBufferOptions);\n statusCode = resp.statusCode;\n duration = coerceNumber(resp.timings.phases.total, 0);\n return resp;\n } catch (error) {\n // v8 ignore else -- TODO: add test #40625\n if (error instanceof RequestError) {\n statusCode = coerceNumber(error.response?.statusCode, -1);\n duration = coerceNumber(error.timings?.phases.total, -1);\n const method = options.method.toUpperCase();\n const code = coerceString(error.code, 'UNKNOWN');\n const retryCount = coerceNumber(error.request?.retryCount, -1);\n logger.debug(\n `${method} ${url} = (code=${code}, statusCode=${statusCode} retryCount=${retryCount}, duration=${duration})`,\n );\n }\n\n throw error;\n /* v8 ignore next: 🐛 https://github.com/bcoe/c8/issues/229 */\n } finally {\n HttpStats.write({\n method: options.method,\n url,\n reqMs: duration,\n queueMs: queueStats.queueMs,\n status: statusCode,\n });\n }\n}\n\nexport function stream(\n url: string,\n options: Omit<OptionsInit, 'isStream'>,\n): NodeJS.ReadableStream {\n return got.stream(url, options);\n}\n\n/**\n * Removes non-got options and normalizes some options to match got's expected format.\n * @param options options to normalize\n * @returns normalized got options\n */\nexport function normalize<T extends OptionsInit = OptionsInit>(\n options: T,\n keysToRemove: readonly string[],\n): T {\n const opts = clone(options);\n\n for (const key of [...GotExtraOptionKeys, ...keysToRemove]) {\n // @ts-expect-error -- delete extra options before passing to got\n delete opts[key];\n }\n\n // optimize options for got v12+\n const normalizedOptions = opts as unknown as T;\n\n if (isNumber(opts.timeout)) {\n normalizedOptions.timeout = { request: opts.timeout };\n }\n\n return normalizedOptions;\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,eAAsB,MACpB,KACA,SACA,YACgC;AAChC,QAAO,MAAM;EAAE;EAAK;EAAS,EAAE,cAAc;CAE7C,IAAI,WAAW;CACf,IAAI,aAAa;AACjB,KAAI;EAGF,MAAM,OAAO,MAAM,IAAI,KAAK;GAAE,GAAG;GAAS;GAAO,CAAqB;AACtE,eAAa,KAAK;AAClB,aAAW,aAAa,KAAK,QAAQ,OAAO,OAAO,EAAE;AACrD,SAAO;UACA,OAAO;;AAEd,MAAI,iBAAiB,cAAc;AACjC,gBAAa,aAAa,MAAM,UAAU,YAAY,GAAG;AACzD,cAAW,aAAa,MAAM,SAAS,OAAO,OAAO,GAAG;GACxD,MAAM,SAAS,QAAQ,OAAO,aAAa;GAC3C,MAAM,OAAO,aAAa,MAAM,MAAM,UAAU;GAChD,MAAM,aAAa,aAAa,MAAM,SAAS,YAAY,GAAG;AAC9D,UAAO,MACL,GAAG,OAAO,GAAG,IAAI,WAAW,KAAK,eAAe,WAAW,cAAc,WAAW,aAAa,SAAS,GAC3G;;AAGH,QAAM;WAEE;AACR,YAAU,MAAM;GACd,QAAQ,QAAQ;GAChB;GACA,OAAO;GACP,SAAS,WAAW;GACpB,QAAQ;GACT,CAAC;;;AAIN,SAAgB,OACd,KACA,SACuB;AACvB,QAAO,IAAI,OAAO,KAAK,QAAQ;;;;;;;AAQjC,SAAgB,UACd,SACA,cACG;CACH,MAAM,OAAO,MAAM,QAAQ;AAE3B,MAAK,MAAM,OAAO,CAAC,GAAG,oBAAoB,GAAG,aAAa,CAExD,QAAO,KAAK;CAId,MAAM,oBAAoB;AAE1B,KAAI,SAAS,KAAK,QAAQ,CACxB,mBAAkB,UAAU,EAAE,SAAS,KAAK,SAAS;AAGvD,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","names":[],"sources":["../../../lib/util/http/hooks.ts"],"sourcesContent":["// Renovate issue: https://github.com/renovatebot/renovate/issues/12127\n// Got issue: https://github.com/sindresorhus/got/issues/1489\n// From here: https://github.com/sindresorhus/got/issues/1489#issuecomment-805485731\nimport type { Hooks, Response } from 'got';\n\nexport function isResponseOk(response: Response): boolean {\n const { statusCode } = response;\n const limitStatusCode = response.request.options.followRedirect ? 299 : 399;\n\n return (\n (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304\n );\n}\n\nexport function hook(response: Response): Response {\n if (isResponseOk(response)) {\n response.request.destroy();\n }\n\n return response;\n}\n\nexport const hooks: Hooks = {\n afterResponse: [hook],\n};\n"],"mappings":";AAKA,SAAgB,aAAa,UAA6B;CACxD,MAAM,EAAE,eAAe;CACvB,MAAM,kBAAkB,SAAS,QAAQ,QAAQ,iBAAiB,MAAM;AAExE,QACG,cAAc,OAAO,cAAc,mBAAoB,eAAe;;AAI3E,SAAgB,KAAK,UAA8B;AACjD,KAAI,aAAa,SAAS,CACxB,UAAS,QAAQ,SAAS;AAG5B,QAAO;;AAGT,MAAa,QAAe,EAC1B,eAAe,CAAC,KAAK,EACtB"}
1
+ {"version":3,"file":"hooks.js","names":[],"sources":["../../../lib/util/http/hooks.ts"],"sourcesContent":["// Renovate issue: https://github.com/renovatebot/renovate/issues/12127\n// Got issue: https://github.com/sindresorhus/got/issues/1489\n// From here: https://github.com/sindresorhus/got/issues/1489#issuecomment-805485731\n// fixed in https://github.com/sindresorhus/got/releases/tag/v14.6.0\n// TODO: remove when got is upgraded to v14.6.0+\nimport type { Hooks, Response } from 'got';\n\nexport function isResponseOk(response: Response): boolean {\n const { statusCode } = response;\n const limitStatusCode = response.request.options.followRedirect ? 299 : 399;\n\n return (\n (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304\n );\n}\n\nexport function hook(response: Response): Response {\n if (isResponseOk(response)) {\n response.request.destroy();\n }\n\n return response;\n}\n\nexport const hooks: Partial<Hooks> = {\n afterResponse: [hook],\n};\n"],"mappings":";AAOA,SAAgB,aAAa,UAA6B;CACxD,MAAM,EAAE,eAAe;CACvB,MAAM,kBAAkB,SAAS,QAAQ,QAAQ,iBAAiB,MAAM;AAExE,QACG,cAAc,OAAO,cAAc,mBAAoB,eAAe;;AAI3E,SAAgB,KAAK,UAA8B;AACjD,KAAI,aAAa,SAAS,CACxB,UAAS,QAAQ,SAAS;AAG5B,QAAO;;AAGT,MAAa,QAAwB,EACnC,eAAe,CAAC,KAAK,EACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"host-rules.js","names":["hostRules.find"],"sources":["../../../lib/util/http/host-rules.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../config/global.ts';\nimport {\n BITBUCKET_API_USING_HOST_TYPES,\n BITBUCKET_SERVER_API_USING_HOST_TYPES,\n FORGEJO_API_USING_HOST_TYPES,\n GITEA_API_USING_HOST_TYPES,\n GITHUB_API_USING_HOST_TYPES,\n GITLAB_API_USING_HOST_TYPES,\n} from '../../constants/index.ts';\nimport { logger } from '../../logger/index.ts';\nimport { hasProxy } from '../../proxy.ts';\nimport type { HostRule } from '../../types/index.ts';\nimport * as hostRules from '../host-rules.ts';\nimport { matchRegexOrGlobList } from '../string-match.ts';\nimport { parseUrl } from '../url.ts';\nimport type { InternalHttpOptions } from './http.ts';\nimport { keepAliveAgents } from './keep-alive.ts';\nimport type { GotOptions } from './types.ts';\n\nexport type HostRulesGotOptions = Pick<\n GotOptions & InternalHttpOptions,\n | 'hostType'\n | 'url'\n | 'noAuth'\n | 'headers'\n | 'token'\n | 'username'\n | 'password'\n | 'context'\n | 'enabled'\n | 'abortOnError'\n | 'abortIgnoreStatusCodes'\n | 'timeout'\n | 'lookup'\n | 'agent'\n | 'http2'\n | 'https'\n | 'readOnly'\n>;\n\nexport function findMatchingRule<GotOptions extends HostRulesGotOptions>(\n url: string,\n options: GotOptions,\n): HostRule {\n const { hostType, readOnly } = options;\n let res = hostRules.find({ hostType, url, readOnly });\n\n if (\n isNonEmptyString(res.token) ||\n isNonEmptyString(res.username) ||\n isNonEmptyString(res.password)\n ) {\n // do not fallback if we already have auth infos\n return res;\n }\n\n // Fallback to `github` hostType\n if (\n hostType &&\n GITHUB_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'github'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'github',\n url,\n }),\n ...res,\n };\n }\n\n // in the case that an API URL is used for GitHub.com, fallback to `github` hostType, and use the `url`'s host to find a `matchHost: api.github.com` (or `matchHost: github.com`)\n if (url.startsWith('https://api.github.com/')) {\n res = {\n ...hostRules.find({\n hostType: 'github',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `gitlab` hostType\n if (\n hostType &&\n GITLAB_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'gitlab'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'gitlab',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `bitbucket` hostType\n if (\n hostType &&\n BITBUCKET_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'bitbucket'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'bitbucket',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `bitbucket-server` hostType\n if (\n hostType &&\n BITBUCKET_SERVER_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'bitbucket-server'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'bitbucket-server',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `forgejo` hostType\n if (\n hostType &&\n FORGEJO_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'forgejo'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'forgejo',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `gitea` hostType\n if (\n hostType &&\n GITEA_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'gitea'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'gitea',\n url,\n }),\n ...res,\n };\n }\n\n return res;\n}\n\n// Apply host rules to requests\nexport function applyHostRule<GotOptions extends HostRulesGotOptions>(\n url: string,\n options: GotOptions,\n hostRule: HostRule,\n): GotOptions {\n if (hostRule.enabled === false) {\n options.enabled = false;\n return options;\n }\n\n const { username, password, token, authType } = hostRule;\n const host = parseUrl(url)?.host;\n if (options.noAuth) {\n logger.trace({ url }, `Authorization disabled`);\n } else if (\n isNonEmptyString(options.headers?.authorization) ||\n isNonEmptyString(options.password) ||\n isNonEmptyString(options.token)\n ) {\n logger.once.debug(`hostRules: authentication already set for ${host}`);\n logger.trace({ url }, `Authorization already set`);\n } else if (password !== undefined) {\n logger.once.debug(`hostRules: applying Basic authentication for ${host}`);\n logger.trace({ url }, `Applying Basic authentication`);\n options.username = username;\n options.password = password;\n } else if (token) {\n logger.once.debug(`hostRules: applying Bearer authentication for ${host}`);\n logger.trace({ url }, `Applying Bearer authentication`);\n options.token = token;\n options.context = { ...options.context, authType };\n } else {\n logger.once.debug(`hostRules: no authentication for ${host}`);\n }\n // Apply optional params\n if (hostRule.abortOnError) {\n options.abortOnError = hostRule.abortOnError;\n }\n\n if (hostRule.abortIgnoreStatusCodes) {\n options.abortIgnoreStatusCodes = hostRule.abortIgnoreStatusCodes;\n }\n\n if (hostRule.timeout) {\n options.timeout = hostRule.timeout;\n }\n\n if (hostRule.headers) {\n const allowedHeaders = GlobalConfig.get('allowedHeaders', []);\n const filteredHeaders: Record<string, string> = {};\n\n for (const [header, value] of Object.entries(hostRule.headers)) {\n if (matchRegexOrGlobList(header, allowedHeaders)) {\n filteredHeaders[header] = value;\n } else {\n logger.once.error(\n { allowedHeaders, header },\n 'Disallowed hostRules headers',\n );\n }\n }\n\n options.headers = {\n ...options.headers,\n ...filteredHeaders,\n };\n }\n\n if (hostRule.keepAlive) {\n options.agent = keepAliveAgents;\n }\n\n if (!hasProxy() && hostRule.enableHttp2 === true) {\n options.http2 = true;\n }\n\n if (isNonEmptyString(hostRule.httpsCertificateAuthority)) {\n options.https = {\n ...(options.https ?? {}),\n certificateAuthority: hostRule.httpsCertificateAuthority,\n };\n }\n\n if (isNonEmptyString(hostRule.httpsPrivateKey)) {\n options.https = {\n ...(options.https ?? {}),\n key: hostRule.httpsPrivateKey,\n };\n }\n\n if (isNonEmptyString(hostRule.httpsCertificate)) {\n options.https = {\n ...(options.https ?? {}),\n certificate: hostRule.httpsCertificate,\n };\n }\n\n return options;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"host-rules.js","names":["hostRules.find"],"sources":["../../../lib/util/http/host-rules.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../config/global.ts';\nimport {\n BITBUCKET_API_USING_HOST_TYPES,\n BITBUCKET_SERVER_API_USING_HOST_TYPES,\n FORGEJO_API_USING_HOST_TYPES,\n GITEA_API_USING_HOST_TYPES,\n GITHUB_API_USING_HOST_TYPES,\n GITLAB_API_USING_HOST_TYPES,\n} from '../../constants/index.ts';\nimport { logger } from '../../logger/index.ts';\nimport { hasProxy } from '../../proxy.ts';\nimport type { HostRule } from '../../types/index.ts';\nimport * as hostRules from '../host-rules.ts';\nimport { matchRegexOrGlobList } from '../string-match.ts';\nimport { parseUrl } from '../url.ts';\nimport type { InternalHttpOptions } from './http.ts';\nimport { keepAliveAgents } from './keep-alive.ts';\nimport type { GotOptions } from './types.ts';\n\nexport type HostRulesGotOptions = Pick<\n GotOptions & InternalHttpOptions,\n | 'hostType'\n | 'url'\n | 'noAuth'\n | 'headers'\n | 'token'\n | 'username'\n | 'password'\n | 'context'\n | 'enabled'\n | 'abortOnError'\n | 'abortIgnoreStatusCodes'\n | 'timeout'\n | 'agent'\n | 'http2'\n | 'https'\n | 'readOnly'\n>;\n\nexport function findMatchingRule<GotOptions extends HostRulesGotOptions>(\n url: string,\n options: GotOptions,\n): HostRule {\n const { hostType, readOnly } = options;\n let res = hostRules.find({ hostType, url, readOnly });\n\n if (\n isNonEmptyString(res.token) ||\n isNonEmptyString(res.username) ||\n isNonEmptyString(res.password)\n ) {\n // do not fallback if we already have auth infos\n return res;\n }\n\n // Fallback to `github` hostType\n if (\n hostType &&\n GITHUB_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'github'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'github',\n url,\n }),\n ...res,\n };\n }\n\n // in the case that an API URL is used for GitHub.com, fallback to `github` hostType, and use the `url`'s host to find a `matchHost: api.github.com` (or `matchHost: github.com`)\n if (url.startsWith('https://api.github.com/')) {\n res = {\n ...hostRules.find({\n hostType: 'github',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `gitlab` hostType\n if (\n hostType &&\n GITLAB_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'gitlab'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'gitlab',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `bitbucket` hostType\n if (\n hostType &&\n BITBUCKET_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'bitbucket'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'bitbucket',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `bitbucket-server` hostType\n if (\n hostType &&\n BITBUCKET_SERVER_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'bitbucket-server'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'bitbucket-server',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `forgejo` hostType\n if (\n hostType &&\n FORGEJO_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'forgejo'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'forgejo',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `gitea` hostType\n if (\n hostType &&\n GITEA_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'gitea'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'gitea',\n url,\n }),\n ...res,\n };\n }\n\n return res;\n}\n\n// Apply host rules to requests\nexport function applyHostRule<GotOptions extends HostRulesGotOptions>(\n url: string,\n options: GotOptions,\n hostRule: HostRule,\n): GotOptions {\n if (hostRule.enabled === false) {\n options.enabled = false;\n return options;\n }\n\n const { username, password, token, authType } = hostRule;\n const host = parseUrl(url)?.host;\n if (options.noAuth) {\n logger.trace({ url }, `Authorization disabled`);\n } else if (\n isNonEmptyString(options.headers?.authorization) ||\n isNonEmptyString(options.password) ||\n isNonEmptyString(options.token)\n ) {\n logger.once.debug(`hostRules: authentication already set for ${host}`);\n logger.trace({ url }, `Authorization already set`);\n } else if (password !== undefined) {\n logger.once.debug(`hostRules: applying Basic authentication for ${host}`);\n logger.trace({ url }, `Applying Basic authentication`);\n options.username = username;\n options.password = password;\n } else if (token) {\n logger.once.debug(`hostRules: applying Bearer authentication for ${host}`);\n logger.trace({ url }, `Applying Bearer authentication`);\n options.token = token;\n options.context = { ...options.context, authType };\n } else {\n logger.once.debug(`hostRules: no authentication for ${host}`);\n }\n // Apply optional params\n if (hostRule.abortOnError) {\n options.abortOnError = hostRule.abortOnError;\n }\n\n if (hostRule.abortIgnoreStatusCodes) {\n options.abortIgnoreStatusCodes = hostRule.abortIgnoreStatusCodes;\n }\n\n if (hostRule.timeout) {\n options.timeout = hostRule.timeout;\n }\n\n if (hostRule.headers) {\n const allowedHeaders = GlobalConfig.get('allowedHeaders', []);\n const filteredHeaders: Record<string, string> = {};\n\n for (const [header, value] of Object.entries(hostRule.headers)) {\n if (matchRegexOrGlobList(header, allowedHeaders)) {\n filteredHeaders[header] = value;\n } else {\n logger.once.error(\n { allowedHeaders, header },\n 'Disallowed hostRules headers',\n );\n }\n }\n\n options.headers = {\n ...options.headers,\n ...filteredHeaders,\n };\n }\n\n if (hostRule.keepAlive) {\n options.agent = keepAliveAgents;\n }\n\n if (!hasProxy() && hostRule.enableHttp2 === true) {\n options.http2 = true;\n }\n\n if (isNonEmptyString(hostRule.httpsCertificateAuthority)) {\n options.https = {\n ...(options.https ?? {}),\n certificateAuthority: hostRule.httpsCertificateAuthority,\n };\n }\n\n if (isNonEmptyString(hostRule.httpsPrivateKey)) {\n options.https = {\n ...(options.https ?? {}),\n key: hostRule.httpsPrivateKey,\n };\n }\n\n if (isNonEmptyString(hostRule.httpsCertificate)) {\n options.https = {\n ...(options.https ?? {}),\n certificate: hostRule.httpsCertificate,\n };\n }\n\n return options;\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { AsyncResult } from "../result.js";
2
2
  import { HttpMethod, HttpOptions, HttpResponse, SafeJsonError } from "./types.js";
3
- import { Options, RetryObject } from "got";
3
+ import { Options, OptionsInit, RetryObject } from "got";
4
4
  import { ZodType, z } from "zod/v3";
5
5
  import "type-fest";
6
6
 
@@ -14,7 +14,7 @@ import { fetch, normalize, stream } from "./got.js";
14
14
  import { hash } from "../hash.js";
15
15
  import { Result } from "../result.js";
16
16
  import { Toml } from "../schema-utils/index.js";
17
- import { applyAuthorization, removeAuthorization } from "./auth.js";
17
+ import { applyAuthorization } from "./auth.js";
18
18
  import { applyHostRule, findMatchingRule } from "./host-rules.js";
19
19
  import { getQueue } from "./queue.js";
20
20
  import { getRetryAfter, wrapWithRetry } from "./retry-after.js";
@@ -59,7 +59,6 @@ var HttpBase = class {
59
59
  const method = options.method.toLowerCase();
60
60
  const isReadMethod = ["head", "get"].includes(method);
61
61
  logger.trace(`HTTP request: ${method.toUpperCase()} ${url}`);
62
- options.hooks = { beforeRedirect: [removeAuthorization] };
63
62
  applyDefaultHeaders(options);
64
63
  if (isUndefined(options.readOnly) && isReadMethod) options.readOnly = true;
65
64
  const hostRule = findMatchingRule(url, options);
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","names":["memCache.get"],"sources":["../../../lib/util/http/http.ts"],"sourcesContent":["import { isPlainObject, isUndefined } from '@sindresorhus/is';\nimport merge from 'deepmerge';\nimport type { Options, RetryObject } from 'got';\nimport type { Merge, SetRequired } from 'type-fest';\nimport type { z } from 'zod/v3';\nimport { ZodType } from 'zod/v3';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { HOST_DISABLED } from '../../constants/error-messages.ts';\nimport { pkg } from '../../expose.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport * as memCache from '../cache/memory/index.ts';\nimport { getEnv } from '../env.ts';\nimport { hash } from '../hash.ts';\nimport { acquireLock } from '../mutex.ts';\nimport { type AsyncResult, Result } from '../result.ts';\nimport { Toml } from '../schema-utils/index.ts';\nimport { ObsoleteCacheHitLogger } from '../stats.ts';\nimport { isHttpUrl, parseUrl, resolveBaseUrl } from '../url.ts';\nimport { parseSingleYaml } from '../yaml.ts';\nimport { applyAuthorization, removeAuthorization } from './auth.ts';\nimport type { HttpCacheProvider } from './cache/types.ts';\nimport { fetch, normalize, stream } from './got.ts';\nimport { applyHostRule, findMatchingRule } from './host-rules.ts';\n\nimport { getQueue } from './queue.ts';\nimport { getRetryAfter, wrapWithRetry } from './retry-after.ts';\nimport { getThrottle } from './throttle.ts';\nimport type {\n GotOptions,\n GotStreamOptions,\n GotTask,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n SafeJsonError,\n} from './types.ts';\nimport { copyResponse } from './util.ts';\n\nexport interface InternalJsonUnsafeOptions<\n Opts extends HttpOptions = HttpOptions,\n> {\n url: string | URL;\n httpOptions?: Opts;\n}\n\nexport interface InternalJsonOptions<\n Opts extends HttpOptions,\n ResT = unknown,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n> extends InternalJsonUnsafeOptions<Opts> {\n schema?: Schema;\n}\n\nexport type InternalGotOptions = SetRequired<GotOptions, 'method' | 'context'>;\n\nexport interface InternalHttpOptions extends HttpOptions {\n json?: HttpOptions['body'];\n\n method?: HttpMethod;\n\n parseJson?: Options['parseJson'];\n}\n\nexport function applyDefaultHeaders(options: Options): void {\n const renovateVersion = pkg.version;\n options.headers = {\n ...options.headers,\n 'user-agent':\n GlobalConfig.get('userAgent') ??\n `Renovate/${renovateVersion} (https://github.com/renovatebot/renovate)`,\n };\n}\n\nexport abstract class HttpBase<\n JSONOpts extends HttpOptions = HttpOptions,\n Opts extends HttpOptions = HttpOptions,\n> {\n private readonly options: InternalGotOptions;\n\n protected get baseUrl(): string | undefined {\n return undefined;\n }\n\n protected hostType: string;\n\n constructor(hostType: string, options: HttpOptions = {}) {\n this.hostType = hostType;\n const retryLimit = getEnv().NODE_ENV === 'test' ? 0 : 2;\n this.options = merge<InternalGotOptions>(\n options,\n {\n method: 'get',\n context: { hostType },\n retry: {\n calculateDelay: (retryObject) =>\n this.calculateRetryDelay(retryObject),\n limit: retryLimit,\n maxRetryAfter: 0, // Don't rely on `got` retry-after handling, just let it fail and then we'll handle it\n },\n },\n { isMergeableObject: isPlainObject },\n );\n }\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<string>>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'text' },\n ): Promise<HttpResponse<string>>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'buffer' },\n ): Promise<HttpResponse<Buffer>>;\n private async request<T = unknown>(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'json' },\n ): Promise<HttpResponse<T>>;\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<unknown>> {\n const resolvedUrl = this.resolveUrl(requestUrl, httpOptions);\n const url = resolvedUrl.toString();\n\n this.processOptions(resolvedUrl, httpOptions);\n\n let options = merge<InternalGotOptions, InternalHttpOptions>(\n {\n ...this.options,\n hostType: this.hostType,\n },\n httpOptions,\n { isMergeableObject: isPlainObject },\n );\n\n const method = options.method.toLowerCase();\n const isReadMethod = ['head', 'get'].includes(method);\n\n logger.trace(`HTTP request: ${method.toUpperCase()} ${url}`);\n\n options.hooks = {\n beforeRedirect: [removeAuthorization],\n };\n\n applyDefaultHeaders(options);\n\n if (isUndefined(options.readOnly) && isReadMethod) {\n options.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, options);\n options = applyHostRule(url, options, hostRule);\n if (options.enabled === false) {\n logger.debug(`Host is disabled - rejecting request. HostUrl: ${url}`);\n throw new Error(HOST_DISABLED);\n }\n options = applyAuthorization(options);\n const timeout = options.timeout ?? 60000;\n options.timeout = timeout;\n\n let cacheProvider: HttpCacheProvider | undefined;\n if (isReadMethod && options.cacheProvider) {\n cacheProvider = options.cacheProvider;\n }\n\n const memCacheKey =\n !process.env.RENOVATE_X_DISABLE_HTTP_MEMCACHE &&\n !cacheProvider &&\n options.memCache !== false &&\n isReadMethod\n ? hash(\n `got-${JSON.stringify({\n url,\n headers: options.headers,\n method,\n })}`,\n )\n : null;\n\n let resPromise: Promise<HttpResponse<unknown>> | null = null;\n\n // Cache GET requests unless memCache=false\n if (memCacheKey) {\n resPromise = memCache.get(memCacheKey);\n\n /* v8 ignore next: temporary code */\n if (resPromise && !cacheProvider) {\n ObsoleteCacheHitLogger.write(url);\n }\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (!resPromise) {\n if (cacheProvider) {\n await cacheProvider.setCacheHeaders(method, url, options);\n }\n\n const startTime = Date.now();\n const httpTask: GotTask = async () => {\n let releaseLock: undefined | (() => void);\n if (isReadMethod) {\n releaseLock = await acquireLock(\n `${options.method} ${url}`,\n 'http-mutex',\n timeout * 2,\n );\n }\n try {\n const cachedResponse = await cacheProvider?.bypassServer<unknown>(\n options.method,\n url,\n );\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const queueMs = Date.now() - startTime;\n return fetch(url, this._normalizeOptions(options), {\n queueMs,\n });\n } finally {\n releaseLock?.();\n }\n };\n\n const throttle = getThrottle(url);\n const throttledTask = throttle ? () => throttle.add(httpTask) : httpTask;\n\n const queue = getQueue(url);\n const queuedTask = queue ? () => queue.add(throttledTask) : throttledTask;\n\n const { maxRetryAfter = 60 } = hostRule;\n resPromise = wrapWithRetry(queuedTask, url, getRetryAfter, maxRetryAfter);\n\n if (memCacheKey) {\n memCache.set(memCacheKey, resPromise);\n }\n }\n\n try {\n const res = await resPromise;\n const deepCopyNeeded = !!memCacheKey && res.statusCode !== 304;\n const resCopy = copyResponse(res, deepCopyNeeded);\n resCopy.authorization = !!options?.headers?.authorization;\n\n if (cacheProvider) {\n return await cacheProvider.wrapServerResponse(method, url, resCopy);\n }\n\n return resCopy;\n } catch (err) {\n const { abortOnError, abortIgnoreStatusCodes } = options;\n if (abortOnError && !abortIgnoreStatusCodes?.includes(err.statusCode)) {\n throw new ExternalHostError(err);\n }\n\n const staleResponse = await cacheProvider?.bypassServer<string | Buffer>(\n method,\n url,\n true,\n );\n if (staleResponse) {\n logger.debug(\n { err },\n `Request error: returning stale cache instead for ${url}`,\n );\n return staleResponse;\n }\n\n this.handleError(requestUrl, httpOptions, err);\n }\n }\n\n private _normalizeOptions<T extends Options>(options: T): T {\n return normalize(options, this.extraOptions());\n }\n\n /**\n * Returns Renovate extra options which needs to be removed before passing to got.\n * @returns extra Renovate options.\n */\n protected extraOptions(): readonly string[] {\n return ['baseUrl', 'cacheProvider', 'readOnly'] as (keyof HttpOptions)[];\n }\n\n protected processOptions(_url: URL, _options: InternalHttpOptions): void {\n // noop\n }\n\n protected handleError(\n _url: string | URL,\n _httpOptions: HttpOptions,\n err: Error,\n ): never {\n throw err;\n }\n\n resolveUrl(\n requestUrl: string | URL,\n options: HttpOptions | undefined = undefined,\n ): URL {\n let url = requestUrl;\n\n if (url instanceof URL) {\n // already a aboslute URL\n return url;\n }\n\n const baseUrl = options?.baseUrl ?? this.baseUrl;\n if (baseUrl) {\n url = resolveBaseUrl(baseUrl, url);\n }\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl || !isHttpUrl(parsedUrl)) {\n logger.error(\n { url: requestUrl, baseUrl, resolvedUrl: url },\n 'Request Error: cannot parse url',\n );\n throw new Error('Invalid URL');\n }\n return parsedUrl;\n }\n\n protected calculateRetryDelay({ computedValue }: RetryObject): number {\n return computedValue;\n }\n\n get(\n url: string,\n options: HttpOptions = {},\n ): Promise<HttpResponse<string | Buffer>> {\n return this.request(url, options);\n }\n\n head(url: string, options: HttpOptions = {}): Promise<HttpResponse<never>> {\n // to complex to validate\n return this.request(url, {\n ...options,\n responseType: 'text',\n method: 'head',\n }) as Promise<HttpResponse<never>>;\n }\n\n getText(\n url: string | URL,\n options: HttpOptions = {},\n ): Promise<HttpResponse<string>> {\n return this.request(url, { ...options, responseType: 'text' });\n }\n\n getBuffer(\n url: string | URL,\n options: HttpOptions = {},\n ): Promise<HttpResponse<Buffer>> {\n return this.request(url, { ...options, responseType: 'buffer' });\n }\n\n protected requestJsonUnsafe<ResT>(\n method: HttpMethod,\n { url, httpOptions: requestOptions }: InternalJsonUnsafeOptions<JSONOpts>,\n ): Promise<HttpResponse<ResT>> {\n const { body: json, ...httpOptions } = { ...requestOptions };\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method,\n };\n // signal that we expect a json response\n opts.headers = {\n accept: 'application/json',\n ...opts.headers,\n };\n if (json) {\n opts.json = json;\n }\n return this.request<ResT>(url, { ...opts, responseType: 'json' });\n }\n\n private async requestJson<ResT, Schema extends ZodType<ResT> = ZodType<ResT>>(\n method: HttpMethod,\n options: InternalJsonOptions<JSONOpts, ResT, Schema>,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.requestJsonUnsafe<ResT>(method, options);\n\n if (options.schema) {\n res.body = await options.schema.parseAsync(res.body);\n }\n\n return res;\n }\n\n private resolveArgs<ResT = unknown>(\n arg1: string,\n arg2: JSONOpts | ZodType<ResT> | undefined,\n arg3: ZodType<ResT> | undefined,\n ): InternalJsonOptions<JSONOpts, ResT> {\n const res: InternalJsonOptions<JSONOpts, ResT> = { url: arg1 };\n\n if (arg2 instanceof ZodType) {\n res.schema = arg2;\n } else if (arg2) {\n res.httpOptions = arg2;\n }\n\n if (arg3) {\n res.schema = arg3;\n }\n\n return res;\n }\n\n async getPlain(url: string, options?: Opts): Promise<HttpResponse> {\n const opt = options ?? {};\n return await this.getText(url, {\n headers: {\n Accept: 'text/plain',\n },\n ...opt,\n });\n }\n\n /**\n * @deprecated use `getYaml` instead\n */\n async getYamlUnchecked<ResT>(\n url: string,\n options?: Opts,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.getText(url, options);\n const body = parseSingleYaml<ResT>(res.body);\n return { ...res, body };\n }\n\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n };\n\n const res = await this.getText(url, opts);\n const body = await schema.parseAsync(parseSingleYaml(res.body));\n return { ...res, body };\n }\n\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(url: string, schema: Schema): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n url: string,\n options: Opts,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n arg1: string,\n arg2: Opts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n let res: AsyncResult<HttpResponse<ResT>, SafeJsonError>;\n if (httpOptions) {\n res = Result.wrap(this.getYaml(url, httpOptions, schema));\n } else {\n res = Result.wrap(this.getYaml(url, schema));\n }\n\n return res.transform((response) => Result.ok(response.body));\n }\n\n /**\n * Request JSON and return the response without any validation.\n *\n * The usage of this method is discouraged, please use `getJson` instead.\n *\n * If you're new to Zod schema validation library:\n * - consult the [documentation of Zod library](https://github.com/colinhacks/zod?tab=readme-ov-file#basic-usage)\n * - search the Renovate codebase for 'zod' module usage\n * - take a look at the `schema-utils.ts` file for Renovate-specific schemas and utilities\n */\n getJsonUnchecked<ResT = unknown>(\n url: string,\n options?: JSONOpts,\n ): Promise<HttpResponse<ResT>> {\n return this.requestJson<ResT>('get', { url, httpOptions: options });\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * throwing an error if the response is not valid.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const args = this.resolveArgs<z.infer<Schema>>(arg1, arg2, arg3);\n return this.requestJson<z.infer<Schema>>('get', args);\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * wrapping response data in a `Result` class.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const args = this.resolveArgs<ResT>(arg1, arg2, arg3);\n return Result.wrap(this.requestJson<ResT>('get', args)).transform(\n (response) => Result.ok(response.body),\n );\n }\n\n /**\n * @deprecated use `head` instead\n */\n headJson(url: string, httpOptions?: JSONOpts): Promise<HttpResponse<never>> {\n return this.requestJson<never>('head', { url, httpOptions });\n }\n\n postJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n postJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('post', args);\n }\n\n putJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n putJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: ZodType,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('put', args);\n }\n\n patchJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n patchJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('patch', args);\n }\n\n deleteJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n deleteJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('delete', args);\n }\n\n stream(url: string, options?: HttpOptions): NodeJS.ReadableStream {\n let combinedOptions: Merge<\n GotStreamOptions,\n SetRequired<InternalHttpOptions, 'method'>\n > = {\n ...this.options,\n hostType: this.hostType,\n ...options,\n method: 'get',\n };\n\n const resolvedUrl = this.resolveUrl(url, options).toString();\n\n applyDefaultHeaders(combinedOptions);\n\n // v8 ignore else -- TODO: add test #40625\n if (\n isUndefined(combinedOptions.readOnly) &&\n ['head', 'get'].includes(combinedOptions.method)\n ) {\n combinedOptions.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, combinedOptions);\n combinedOptions = applyHostRule(resolvedUrl, combinedOptions, hostRule);\n if (combinedOptions.enabled === false) {\n throw new Error(HOST_DISABLED);\n }\n combinedOptions = applyAuthorization(combinedOptions);\n\n return stream(resolvedUrl, this._normalizeOptions(combinedOptions));\n }\n\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const { url, schema, httpOptions } = this.resolveArgs<z.infer<Schema>>(\n arg1,\n arg2,\n arg3,\n );\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n headers: {\n 'Content-Type': 'application/toml',\n ...httpOptions?.headers,\n },\n };\n\n const res = await this.getText(url, opts);\n if (schema) {\n res.body = await Toml.pipe(schema).parseAsync(res.body);\n } else {\n res.body = (await Toml.parseAsync(res.body)) as z.infer<Schema>;\n }\n\n return res;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"http.js","names":["memCache.get"],"sources":["../../../lib/util/http/http.ts"],"sourcesContent":["import { isPlainObject, isUndefined } from '@sindresorhus/is';\nimport merge from 'deepmerge';\nimport type { Options, OptionsInit, RetryObject } from 'got';\nimport type { Merge, SetRequired } from 'type-fest';\nimport type { z } from 'zod/v3';\nimport { ZodType } from 'zod/v3';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { HOST_DISABLED } from '../../constants/error-messages.ts';\nimport { pkg } from '../../expose.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport * as memCache from '../cache/memory/index.ts';\nimport { getEnv } from '../env.ts';\nimport { hash } from '../hash.ts';\nimport { acquireLock } from '../mutex.ts';\nimport { type AsyncResult, Result } from '../result.ts';\nimport { Toml } from '../schema-utils/index.ts';\nimport { ObsoleteCacheHitLogger } from '../stats.ts';\nimport { isHttpUrl, parseUrl, resolveBaseUrl } from '../url.ts';\nimport { parseSingleYaml } from '../yaml.ts';\nimport { applyAuthorization } from './auth.ts';\nimport type { HttpCacheProvider } from './cache/types.ts';\nimport { fetch, normalize, stream } from './got.ts';\nimport { applyHostRule, findMatchingRule } from './host-rules.ts';\n\nimport { getQueue } from './queue.ts';\nimport { getRetryAfter, wrapWithRetry } from './retry-after.ts';\nimport { getThrottle } from './throttle.ts';\nimport type {\n GotOptions,\n GotStreamOptions,\n GotTask,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n SafeJsonError,\n} from './types.ts';\nimport { copyResponse } from './util.ts';\n\nexport interface InternalJsonUnsafeOptions<\n Opts extends HttpOptions = HttpOptions,\n> {\n url: string | URL;\n httpOptions?: Opts;\n}\n\nexport interface InternalJsonOptions<\n Opts extends HttpOptions,\n ResT = unknown,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n> extends InternalJsonUnsafeOptions<Opts> {\n schema?: Schema;\n}\n\nexport type InternalGotOptions = SetRequired<GotOptions, 'method' | 'context'>;\n\nexport interface InternalHttpOptions extends HttpOptions {\n json?: HttpOptions['body'];\n\n method?: HttpMethod;\n\n parseJson?: Options['parseJson'];\n}\n\nexport function applyDefaultHeaders(options: OptionsInit): void {\n const renovateVersion = pkg.version;\n options.headers = {\n ...options.headers,\n 'user-agent':\n GlobalConfig.get('userAgent') ??\n `Renovate/${renovateVersion} (https://github.com/renovatebot/renovate)`,\n };\n}\n\nexport abstract class HttpBase<\n JSONOpts extends HttpOptions = HttpOptions,\n Opts extends HttpOptions = HttpOptions,\n> {\n private readonly options: InternalGotOptions;\n\n protected get baseUrl(): string | undefined {\n return undefined;\n }\n\n protected hostType: string;\n\n constructor(hostType: string, options: HttpOptions = {}) {\n this.hostType = hostType;\n const retryLimit = getEnv().NODE_ENV === 'test' ? 0 : 2;\n this.options = merge<InternalGotOptions>(\n options,\n {\n method: 'get',\n context: { hostType },\n retry: {\n calculateDelay: (retryObject) =>\n this.calculateRetryDelay(retryObject),\n limit: retryLimit,\n maxRetryAfter: 0, // Don't rely on `got` retry-after handling, just let it fail and then we'll handle it\n },\n },\n { isMergeableObject: isPlainObject },\n );\n }\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<string>>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'text' },\n ): Promise<HttpResponse<string>>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'buffer' },\n ): Promise<HttpResponse<Buffer>>;\n private async request<T = unknown>(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'json' },\n ): Promise<HttpResponse<T>>;\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<unknown>> {\n const resolvedUrl = this.resolveUrl(requestUrl, httpOptions);\n const url = resolvedUrl.toString();\n\n this.processOptions(resolvedUrl, httpOptions);\n\n let options = merge<InternalGotOptions, InternalHttpOptions>(\n {\n ...this.options,\n hostType: this.hostType,\n },\n httpOptions,\n { isMergeableObject: isPlainObject },\n );\n\n const method = options.method.toLowerCase();\n const isReadMethod = ['head', 'get'].includes(method);\n\n logger.trace(`HTTP request: ${method.toUpperCase()} ${url}`);\n\n applyDefaultHeaders(options);\n\n if (isUndefined(options.readOnly) && isReadMethod) {\n options.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, options);\n options = applyHostRule(url, options, hostRule);\n if (options.enabled === false) {\n logger.debug(`Host is disabled - rejecting request. HostUrl: ${url}`);\n throw new Error(HOST_DISABLED);\n }\n options = applyAuthorization(options);\n const timeout = options.timeout ?? 60000;\n options.timeout = timeout;\n\n let cacheProvider: HttpCacheProvider | undefined;\n if (isReadMethod && options.cacheProvider) {\n cacheProvider = options.cacheProvider;\n }\n\n const memCacheKey =\n !process.env.RENOVATE_X_DISABLE_HTTP_MEMCACHE &&\n !cacheProvider &&\n options.memCache !== false &&\n isReadMethod\n ? hash(\n `got-${JSON.stringify({\n url,\n headers: options.headers,\n method,\n })}`,\n )\n : null;\n\n let resPromise: Promise<HttpResponse<unknown>> | null = null;\n\n // Cache GET requests unless memCache=false\n if (memCacheKey) {\n resPromise = memCache.get(memCacheKey);\n\n /* v8 ignore next: temporary code */\n if (resPromise && !cacheProvider) {\n ObsoleteCacheHitLogger.write(url);\n }\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (!resPromise) {\n if (cacheProvider) {\n await cacheProvider.setCacheHeaders(method, url, options);\n }\n\n const startTime = Date.now();\n const httpTask: GotTask = async () => {\n let releaseLock: undefined | (() => void);\n if (isReadMethod) {\n releaseLock = await acquireLock(\n `${options.method} ${url}`,\n 'http-mutex',\n timeout * 2,\n );\n }\n try {\n const cachedResponse = await cacheProvider?.bypassServer<unknown>(\n options.method,\n url,\n );\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const queueMs = Date.now() - startTime;\n return fetch(url, this._normalizeOptions(options), {\n queueMs,\n });\n } finally {\n releaseLock?.();\n }\n };\n\n const throttle = getThrottle(url);\n const throttledTask = throttle ? () => throttle.add(httpTask) : httpTask;\n\n const queue = getQueue(url);\n const queuedTask = queue ? () => queue.add(throttledTask) : throttledTask;\n\n const { maxRetryAfter = 60 } = hostRule;\n resPromise = wrapWithRetry(queuedTask, url, getRetryAfter, maxRetryAfter);\n\n if (memCacheKey) {\n memCache.set(memCacheKey, resPromise);\n }\n }\n\n try {\n const res = await resPromise;\n const deepCopyNeeded = !!memCacheKey && res.statusCode !== 304;\n const resCopy = copyResponse(res, deepCopyNeeded);\n resCopy.authorization = !!options?.headers?.authorization;\n\n if (cacheProvider) {\n return await cacheProvider.wrapServerResponse(method, url, resCopy);\n }\n\n return resCopy;\n } catch (err) {\n const { abortOnError, abortIgnoreStatusCodes } = options;\n if (abortOnError && !abortIgnoreStatusCodes?.includes(err.statusCode)) {\n throw new ExternalHostError(err);\n }\n\n const staleResponse = await cacheProvider?.bypassServer<string | Buffer>(\n method,\n url,\n true,\n );\n if (staleResponse) {\n logger.debug(\n { err },\n `Request error: returning stale cache instead for ${url}`,\n );\n return staleResponse;\n }\n\n this.handleError(requestUrl, httpOptions, err);\n }\n }\n\n private _normalizeOptions<T extends OptionsInit>(options: T): T {\n return normalize(options, this.extraOptions());\n }\n\n /**\n * Returns Renovate extra options which needs to be removed before passing to got.\n * @returns extra Renovate options.\n */\n protected extraOptions(): readonly string[] {\n return ['baseUrl', 'cacheProvider', 'readOnly'] as (keyof HttpOptions)[];\n }\n\n protected processOptions(_url: URL, _options: InternalHttpOptions): void {\n // noop\n }\n\n protected handleError(\n _url: string | URL,\n _httpOptions: HttpOptions,\n err: Error,\n ): never {\n throw err;\n }\n\n resolveUrl(\n requestUrl: string | URL,\n options: HttpOptions | undefined = undefined,\n ): URL {\n let url = requestUrl;\n\n if (url instanceof URL) {\n // already a aboslute URL\n return url;\n }\n\n const baseUrl = options?.baseUrl ?? this.baseUrl;\n if (baseUrl) {\n url = resolveBaseUrl(baseUrl, url);\n }\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl || !isHttpUrl(parsedUrl)) {\n logger.error(\n { url: requestUrl, baseUrl, resolvedUrl: url },\n 'Request Error: cannot parse url',\n );\n throw new Error('Invalid URL');\n }\n return parsedUrl;\n }\n\n protected calculateRetryDelay({ computedValue }: RetryObject): number {\n return computedValue;\n }\n\n get(\n url: string,\n options: HttpOptions = {},\n ): Promise<HttpResponse<string | Buffer>> {\n return this.request(url, options);\n }\n\n head(url: string, options: HttpOptions = {}): Promise<HttpResponse<never>> {\n // to complex to validate\n return this.request(url, {\n ...options,\n responseType: 'text',\n method: 'head',\n }) as Promise<HttpResponse<never>>;\n }\n\n getText(\n url: string | URL,\n options: HttpOptions = {},\n ): Promise<HttpResponse<string>> {\n return this.request(url, { ...options, responseType: 'text' });\n }\n\n getBuffer(\n url: string | URL,\n options: HttpOptions = {},\n ): Promise<HttpResponse<Buffer>> {\n return this.request(url, { ...options, responseType: 'buffer' });\n }\n\n protected requestJsonUnsafe<ResT>(\n method: HttpMethod,\n { url, httpOptions: requestOptions }: InternalJsonUnsafeOptions<JSONOpts>,\n ): Promise<HttpResponse<ResT>> {\n const { body: json, ...httpOptions } = { ...requestOptions };\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method,\n };\n // signal that we expect a json response\n opts.headers = {\n accept: 'application/json',\n ...opts.headers,\n };\n if (json) {\n opts.json = json;\n }\n return this.request<ResT>(url, { ...opts, responseType: 'json' });\n }\n\n private async requestJson<ResT, Schema extends ZodType<ResT> = ZodType<ResT>>(\n method: HttpMethod,\n options: InternalJsonOptions<JSONOpts, ResT, Schema>,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.requestJsonUnsafe<ResT>(method, options);\n\n if (options.schema) {\n res.body = await options.schema.parseAsync(res.body);\n }\n\n return res;\n }\n\n private resolveArgs<ResT = unknown>(\n arg1: string,\n arg2: JSONOpts | ZodType<ResT> | undefined,\n arg3: ZodType<ResT> | undefined,\n ): InternalJsonOptions<JSONOpts, ResT> {\n const res: InternalJsonOptions<JSONOpts, ResT> = { url: arg1 };\n\n if (arg2 instanceof ZodType) {\n res.schema = arg2;\n } else if (arg2) {\n res.httpOptions = arg2;\n }\n\n if (arg3) {\n res.schema = arg3;\n }\n\n return res;\n }\n\n async getPlain(url: string, options?: Opts): Promise<HttpResponse> {\n const opt = options ?? {};\n return await this.getText(url, {\n headers: {\n Accept: 'text/plain',\n },\n ...opt,\n });\n }\n\n /**\n * @deprecated use `getYaml` instead\n */\n async getYamlUnchecked<ResT>(\n url: string,\n options?: Opts,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.getText(url, options);\n const body = parseSingleYaml<ResT>(res.body);\n return { ...res, body };\n }\n\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n };\n\n const res = await this.getText(url, opts);\n const body = await schema.parseAsync(parseSingleYaml(res.body));\n return { ...res, body };\n }\n\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(url: string, schema: Schema): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n url: string,\n options: Opts,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n arg1: string,\n arg2: Opts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n let res: AsyncResult<HttpResponse<ResT>, SafeJsonError>;\n if (httpOptions) {\n res = Result.wrap(this.getYaml(url, httpOptions, schema));\n } else {\n res = Result.wrap(this.getYaml(url, schema));\n }\n\n return res.transform((response) => Result.ok(response.body));\n }\n\n /**\n * Request JSON and return the response without any validation.\n *\n * The usage of this method is discouraged, please use `getJson` instead.\n *\n * If you're new to Zod schema validation library:\n * - consult the [documentation of Zod library](https://github.com/colinhacks/zod?tab=readme-ov-file#basic-usage)\n * - search the Renovate codebase for 'zod' module usage\n * - take a look at the `schema-utils.ts` file for Renovate-specific schemas and utilities\n */\n getJsonUnchecked<ResT = unknown>(\n url: string,\n options?: JSONOpts,\n ): Promise<HttpResponse<ResT>> {\n return this.requestJson<ResT>('get', { url, httpOptions: options });\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * throwing an error if the response is not valid.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const args = this.resolveArgs<z.infer<Schema>>(arg1, arg2, arg3);\n return this.requestJson<z.infer<Schema>>('get', args);\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * wrapping response data in a `Result` class.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const args = this.resolveArgs<ResT>(arg1, arg2, arg3);\n return Result.wrap(this.requestJson<ResT>('get', args)).transform(\n (response) => Result.ok(response.body),\n );\n }\n\n /**\n * @deprecated use `head` instead\n */\n headJson(url: string, httpOptions?: JSONOpts): Promise<HttpResponse<never>> {\n return this.requestJson<never>('head', { url, httpOptions });\n }\n\n postJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n postJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('post', args);\n }\n\n putJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n putJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: ZodType,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('put', args);\n }\n\n patchJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n patchJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('patch', args);\n }\n\n deleteJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n deleteJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('delete', args);\n }\n\n stream(url: string, options?: HttpOptions): NodeJS.ReadableStream {\n let combinedOptions: Merge<\n GotStreamOptions,\n SetRequired<InternalHttpOptions, 'method'>\n > = {\n ...this.options,\n hostType: this.hostType,\n ...options,\n method: 'get',\n };\n\n const resolvedUrl = this.resolveUrl(url, options).toString();\n\n applyDefaultHeaders(combinedOptions);\n\n // v8 ignore else -- TODO: add test #40625\n if (\n isUndefined(combinedOptions.readOnly) &&\n ['head', 'get'].includes(combinedOptions.method)\n ) {\n combinedOptions.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, combinedOptions);\n combinedOptions = applyHostRule(resolvedUrl, combinedOptions, hostRule);\n if (combinedOptions.enabled === false) {\n throw new Error(HOST_DISABLED);\n }\n combinedOptions = applyAuthorization(combinedOptions);\n\n return stream(resolvedUrl, this._normalizeOptions(combinedOptions));\n }\n\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const { url, schema, httpOptions } = this.resolveArgs<z.infer<Schema>>(\n arg1,\n arg2,\n arg3,\n );\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n headers: {\n 'Content-Type': 'application/toml',\n ...httpOptions?.headers,\n },\n };\n\n const res = await this.getText(url, opts);\n if (schema) {\n res.body = await Toml.pipe(schema).parseAsync(res.body);\n } else {\n res.body = (await Toml.parseAsync(res.body)) as z.infer<Schema>;\n }\n\n return res;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA,SAAgB,oBAAoB,SAA4B;CAC9D,MAAM,kBAAkB,IAAI;AAC5B,SAAQ,UAAU;EAChB,GAAG,QAAQ;EACX,cACE,aAAa,IAAI,YAAY,IAC7B,YAAY,gBAAgB;EAC/B;;AAGH,IAAsB,WAAtB,MAGE;CACA,AAAiB;CAEjB,IAAc,UAA8B;CAI5C,AAAU;CAEV,YAAY,UAAkB,UAAuB,EAAE,EAAE;AACvD,OAAK,WAAW;EAChB,MAAM,aAAa,QAAQ,CAAC,aAAa,SAAS,IAAI;AACtD,OAAK,UAAU,MACb,SACA;GACE,QAAQ;GACR,SAAS,EAAE,UAAU;GACrB,OAAO;IACL,iBAAiB,gBACf,KAAK,oBAAoB,YAAY;IACvC,OAAO;IACP,eAAe;IAChB;GACF,EACD,EAAE,mBAAmB,eAAe,CACrC;;CAoBH,MAAc,QACZ,YACA,aACgC;EAChC,MAAM,cAAc,KAAK,WAAW,YAAY,YAAY;EAC5D,MAAM,MAAM,YAAY,UAAU;AAElC,OAAK,eAAe,aAAa,YAAY;EAE7C,IAAI,UAAU,MACZ;GACE,GAAG,KAAK;GACR,UAAU,KAAK;GAChB,EACD,aACA,EAAE,mBAAmB,eAAe,CACrC;EAED,MAAM,SAAS,QAAQ,OAAO,aAAa;EAC3C,MAAM,eAAe,CAAC,QAAQ,MAAM,CAAC,SAAS,OAAO;AAErD,SAAO,MAAM,iBAAiB,OAAO,aAAa,CAAC,GAAG,MAAM;AAE5D,sBAAoB,QAAQ;AAE5B,MAAI,YAAY,QAAQ,SAAS,IAAI,aACnC,SAAQ,WAAW;EAGrB,MAAM,WAAW,iBAAiB,KAAK,QAAQ;AAC/C,YAAU,cAAc,KAAK,SAAS,SAAS;AAC/C,MAAI,QAAQ,YAAY,OAAO;AAC7B,UAAO,MAAM,kDAAkD,MAAM;AACrE,SAAM,IAAI,MAAM,cAAc;;AAEhC,YAAU,mBAAmB,QAAQ;EACrC,MAAM,UAAU,QAAQ,WAAW;AACnC,UAAQ,UAAU;EAElB,IAAI;AACJ,MAAI,gBAAgB,QAAQ,cAC1B,iBAAgB,QAAQ;EAG1B,MAAM,cACJ,CAAC,QAAQ,IAAI,oCACb,CAAC,iBACD,QAAQ,aAAa,SACrB,eACI,KACE,OAAO,KAAK,UAAU;GACpB;GACA,SAAS,QAAQ;GACjB;GACD,CAAC,GACH,GACD;EAEN,IAAI,aAAoD;AAGxD,MAAI,aAAa;AACf,gBAAaA,IAAa,YAAY;;AAGtC,OAAI,cAAc,CAAC,cACjB,wBAAuB,MAAM,IAAI;;;AAKrC,MAAI,CAAC,YAAY;AACf,OAAI,cACF,OAAM,cAAc,gBAAgB,QAAQ,KAAK,QAAQ;GAG3D,MAAM,YAAY,KAAK,KAAK;GAC5B,MAAM,WAAoB,YAAY;IACpC,IAAI;AACJ,QAAI,aACF,eAAc,MAAM,YAClB,GAAG,QAAQ,OAAO,GAAG,OACrB,cACA,UAAU,EACX;AAEH,QAAI;KACF,MAAM,iBAAiB,MAAM,eAAe,aAC1C,QAAQ,QACR,IACD;AACD,SAAI,eACF,QAAO;KAGT,MAAM,UAAU,KAAK,KAAK,GAAG;AAC7B,YAAO,MAAM,KAAK,KAAK,kBAAkB,QAAQ,EAAE,EACjD,SACD,CAAC;cACM;AACR,oBAAe;;;GAInB,MAAM,WAAW,YAAY,IAAI;GACjC,MAAM,gBAAgB,iBAAiB,SAAS,IAAI,SAAS,GAAG;GAEhE,MAAM,QAAQ,SAAS,IAAI;GAC3B,MAAM,aAAa,cAAc,MAAM,IAAI,cAAc,GAAG;GAE5D,MAAM,EAAE,gBAAgB,OAAO;AAC/B,gBAAa,cAAc,YAAY,KAAK,eAAe,cAAc;AAEzE,OAAI,YACF,KAAa,aAAa,WAAW;;AAIzC,MAAI;GACF,MAAM,MAAM,MAAM;GAElB,MAAM,UAAU,aAAa,KADN,CAAC,CAAC,eAAe,IAAI,eAAe,IACV;AACjD,WAAQ,gBAAgB,CAAC,CAAC,SAAS,SAAS;AAE5C,OAAI,cACF,QAAO,MAAM,cAAc,mBAAmB,QAAQ,KAAK,QAAQ;AAGrE,UAAO;WACA,KAAK;GACZ,MAAM,EAAE,cAAc,2BAA2B;AACjD,OAAI,gBAAgB,CAAC,wBAAwB,SAAS,IAAI,WAAW,CACnE,OAAM,IAAI,kBAAkB,IAAI;GAGlC,MAAM,gBAAgB,MAAM,eAAe,aACzC,QACA,KACA,KACD;AACD,OAAI,eAAe;AACjB,WAAO,MACL,EAAE,KAAK,EACP,oDAAoD,MACrD;AACD,WAAO;;AAGT,QAAK,YAAY,YAAY,aAAa,IAAI;;;CAIlD,AAAQ,kBAAyC,SAAe;AAC9D,SAAO,UAAU,SAAS,KAAK,cAAc,CAAC;;;;;;CAOhD,AAAU,eAAkC;AAC1C,SAAO;GAAC;GAAW;GAAiB;GAAW;;CAGjD,AAAU,eAAe,MAAW,UAAqC;CAIzE,AAAU,YACR,MACA,cACA,KACO;AACP,QAAM;;CAGR,WACE,YACA,UAAmC,QAC9B;EACL,IAAI,MAAM;AAEV,MAAI,eAAe,IAEjB,QAAO;EAGT,MAAM,UAAU,SAAS,WAAW,KAAK;AACzC,MAAI,QACF,OAAM,eAAe,SAAS,IAAI;EAGpC,MAAM,YAAY,SAAS,IAAI;AAC/B,MAAI,CAAC,aAAa,CAAC,UAAU,UAAU,EAAE;AACvC,UAAO,MACL;IAAE,KAAK;IAAY;IAAS,aAAa;IAAK,EAC9C,kCACD;AACD,SAAM,IAAI,MAAM,cAAc;;AAEhC,SAAO;;CAGT,AAAU,oBAAoB,EAAE,iBAAsC;AACpE,SAAO;;CAGT,IACE,KACA,UAAuB,EAAE,EACe;AACxC,SAAO,KAAK,QAAQ,KAAK,QAAQ;;CAGnC,KAAK,KAAa,UAAuB,EAAE,EAAgC;AAEzE,SAAO,KAAK,QAAQ,KAAK;GACvB,GAAG;GACH,cAAc;GACd,QAAQ;GACT,CAAC;;CAGJ,QACE,KACA,UAAuB,EAAE,EACM;AAC/B,SAAO,KAAK,QAAQ,KAAK;GAAE,GAAG;GAAS,cAAc;GAAQ,CAAC;;CAGhE,UACE,KACA,UAAuB,EAAE,EACM;AAC/B,SAAO,KAAK,QAAQ,KAAK;GAAE,GAAG;GAAS,cAAc;GAAU,CAAC;;CAGlE,AAAU,kBACR,QACA,EAAE,KAAK,aAAa,kBACS;EAC7B,MAAM,EAAE,MAAM,MAAM,GAAG,gBAAgB,EAAE,GAAG,gBAAgB;EAC5D,MAAM,OAA4B;GAChC,GAAG;GACH;GACD;AAED,OAAK,UAAU;GACb,QAAQ;GACR,GAAG,KAAK;GACT;AACD,MAAI,KACF,MAAK,OAAO;AAEd,SAAO,KAAK,QAAc,KAAK;GAAE,GAAG;GAAM,cAAc;GAAQ,CAAC;;CAGnE,MAAc,YACZ,QACA,SAC6B;EAC7B,MAAM,MAAM,MAAM,KAAK,kBAAwB,QAAQ,QAAQ;AAE/D,MAAI,QAAQ,OACV,KAAI,OAAO,MAAM,QAAQ,OAAO,WAAW,IAAI,KAAK;AAGtD,SAAO;;CAGT,AAAQ,YACN,MACA,MACA,MACqC;EACrC,MAAM,MAA2C,EAAE,KAAK,MAAM;AAE9D,MAAI,gBAAgB,QAClB,KAAI,SAAS;WACJ,KACT,KAAI,cAAc;AAGpB,MAAI,KACF,KAAI,SAAS;AAGf,SAAO;;CAGT,MAAM,SAAS,KAAa,SAAuC;EACjE,MAAM,MAAM,WAAW,EAAE;AACzB,SAAO,MAAM,KAAK,QAAQ,KAAK;GAC7B,SAAS,EACP,QAAQ,cACT;GACD,GAAG;GACJ,CAAC;;;;;CAMJ,MAAM,iBACJ,KACA,SAC6B;EAC7B,MAAM,MAAM,MAAM,KAAK,QAAQ,KAAK,QAAQ;EAC5C,MAAM,OAAO,gBAAsB,IAAI,KAAK;AAC5C,SAAO;GAAE,GAAG;GAAK;GAAM;;CAYzB,MAAM,QACJ,MACA,MACA,MACwC;EACxC,MAAM,MAAM;EACZ,IAAI;EACJ,IAAI;AACJ,MAAI,MAAM;AACR,YAAS;AACT,iBAAc;QAEd,UAAS;EAGX,MAAM,OAA4B;GAChC,GAAG;GACH,QAAQ;GACT;EAED,MAAM,MAAM,MAAM,KAAK,QAAQ,KAAK,KAAK;EACzC,MAAM,OAAO,MAAM,OAAO,WAAW,gBAAgB,IAAI,KAAK,CAAC;AAC/D,SAAO;GAAE,GAAG;GAAK;GAAM;;CAezB,YAIE,MACA,MACA,MACkC;EAClC,MAAM,MAAM;EACZ,IAAI;EACJ,IAAI;AACJ,MAAI,MAAM;AACR,YAAS;AACT,iBAAc;QAEd,UAAS;EAGX,IAAI;AACJ,MAAI,YACF,OAAM,OAAO,KAAK,KAAK,QAAQ,KAAK,aAAa,OAAO,CAAC;MAEzD,OAAM,OAAO,KAAK,KAAK,QAAQ,KAAK,OAAO,CAAC;AAG9C,SAAO,IAAI,WAAW,aAAa,OAAO,GAAG,SAAS,KAAK,CAAC;;;;;;;;;;;;CAa9D,iBACE,KACA,SAC6B;AAC7B,SAAO,KAAK,YAAkB,OAAO;GAAE;GAAK,aAAa;GAAS,CAAC;;CAmBrE,QACE,MACA,MACA,MACwC;EACxC,MAAM,OAAO,KAAK,YAA6B,MAAM,MAAM,KAAK;AAChE,SAAO,KAAK,YAA6B,OAAO,KAAK;;CAmBvD,YACE,MACA,MACA,MACkC;EAClC,MAAM,OAAO,KAAK,YAAkB,MAAM,MAAM,KAAK;AACrD,SAAO,OAAO,KAAK,KAAK,YAAkB,OAAO,KAAK,CAAC,CAAC,WACrD,aAAa,OAAO,GAAG,SAAS,KAAK,CACvC;;;;;CAMH,SAAS,KAAa,aAAsD;AAC1E,SAAO,KAAK,YAAmB,QAAQ;GAAE;GAAK;GAAa,CAAC;;CAa9D,SACE,MACA,MACA,MAC0B;EAC1B,MAAM,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK;AAC/C,SAAO,KAAK,YAAe,QAAQ,KAAK;;CAa1C,QACE,MACA,MACA,MAC0B;EAC1B,MAAM,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK;AAC/C,SAAO,KAAK,YAAe,OAAO,KAAK;;CAazC,UACE,MACA,MACA,MAC0B;EAC1B,MAAM,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK;AAC/C,SAAO,KAAK,YAAe,SAAS,KAAK;;CAa3C,WACE,MACA,MACA,MAC0B;EAC1B,MAAM,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK;AAC/C,SAAO,KAAK,YAAe,UAAU,KAAK;;CAG5C,OAAO,KAAa,SAA8C;EAChE,IAAI,kBAGA;GACF,GAAG,KAAK;GACR,UAAU,KAAK;GACf,GAAG;GACH,QAAQ;GACT;EAED,MAAM,cAAc,KAAK,WAAW,KAAK,QAAQ,CAAC,UAAU;AAE5D,sBAAoB,gBAAgB;;AAGpC,MACE,YAAY,gBAAgB,SAAS,IACrC,CAAC,QAAQ,MAAM,CAAC,SAAS,gBAAgB,OAAO,CAEhD,iBAAgB,WAAW;EAG7B,MAAM,WAAW,iBAAiB,KAAK,gBAAgB;AACvD,oBAAkB,cAAc,aAAa,iBAAiB,SAAS;AACvE,MAAI,gBAAgB,YAAY,MAC9B,OAAM,IAAI,MAAM,cAAc;AAEhC,oBAAkB,mBAAmB,gBAAgB;AAErD,SAAO,OAAO,aAAa,KAAK,kBAAkB,gBAAgB,CAAC;;CAYrE,MAAM,QACJ,MACA,MACA,MACwC;EACxC,MAAM,EAAE,KAAK,QAAQ,gBAAgB,KAAK,YACxC,MACA,MACA,KACD;EAED,MAAM,OAA4B;GAChC,GAAG;GACH,QAAQ;GACR,SAAS;IACP,gBAAgB;IAChB,GAAG,aAAa;IACjB;GACF;EAED,MAAM,MAAM,MAAM,KAAK,QAAQ,KAAK,KAAK;AACzC,MAAI,OACF,KAAI,OAAO,MAAM,KAAK,KAAK,OAAO,CAAC,WAAW,IAAI,KAAK;MAEvD,KAAI,OAAQ,MAAM,KAAK,WAAW,IAAI,KAAK;AAG7C,SAAO"}
@@ -1,6 +1,6 @@
1
1
  import { HttpCacheProvider } from "./cache/types.js";
2
2
  import { EmptyResultError } from "./errors.js";
3
- import { Options, OptionsOfBufferResponseBody, OptionsOfJSONResponseBody, OptionsOfTextResponseBody, RequestError } from "got";
3
+ import { OptionsInit, OptionsOfBufferResponseBody, OptionsOfJSONResponseBody, OptionsOfTextResponseBody, RequestError } from "got";
4
4
  import { ZodError } from "zod/v3";
5
5
  import { IncomingHttpHeaders } from "node:http";
6
6
 
@@ -12,7 +12,7 @@ type GotOptions = GotBufferOptions | GotTextOptions | GotJSONOptions;
12
12
  type GotBufferOptions = OptionsOfBufferResponseBody & GotExtraOptions;
13
13
  type GotTextOptions = OptionsOfTextResponseBody & GotExtraOptions;
14
14
  type GotJSONOptions = OptionsOfJSONResponseBody & GotExtraOptions;
15
- type GotStreamOptions = Options & GotExtraOptions;
15
+ type GotStreamOptions = OptionsInit & GotExtraOptions;
16
16
  /**
17
17
  * Renovate extra options.
18
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../lib/util/http/types.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'node:http';\nimport type {\n Options,\n OptionsOfBufferResponseBody,\n OptionsOfJSONResponseBody,\n OptionsOfTextResponseBody,\n RequestError,\n} from 'got';\nimport type { ZodError } from 'zod/v3';\nimport type { HttpCacheProvider } from './cache/types.ts';\nimport type { EmptyResultError } from './errors.ts';\n\nexport type GotContextOptions = {\n authType?: string;\n} & Record<string, unknown>;\n\n// TODO: Move options to context\nexport type GotOptions = GotBufferOptions | GotTextOptions | GotJSONOptions;\nexport type GotBufferOptions = OptionsOfBufferResponseBody & GotExtraOptions;\nexport type GotTextOptions = OptionsOfTextResponseBody & GotExtraOptions;\nexport type GotJSONOptions = OptionsOfJSONResponseBody & GotExtraOptions;\n\nexport type GotStreamOptions = Options & GotExtraOptions;\n\n/**\n * Renovate extra options.\n */\nexport interface GotExtraOptions {\n abortOnError?: boolean;\n abortIgnoreStatusCodes?: number[];\n\n token?: string;\n hostType?: string;\n enabled?: boolean;\n memCache?: boolean;\n noAuth?: boolean;\n context?: GotContextOptions;\n\n /**\n * Got request timeout, overrides got interface.\n * Do not delete in `normalizeGotOptions`.\n */\n timeout?: number;\n}\n\n/**\n * Renovate extra options that are not part of `got` options.\n */\nexport const GotExtraOptionKeys: (keyof GotExtraOptions)[] = [\n 'abortOnError',\n 'abortIgnoreStatusCodes',\n 'enabled',\n 'hostType',\n 'memCache',\n 'noAuth',\n 'token',\n];\n\nexport type OutgoingHttpHeaders = Record<string, string | string[] | undefined>;\n\nexport type GraphqlVariables = Record<string, unknown>;\n\nexport interface GraphqlOptions {\n variables?: GraphqlVariables;\n paginate?: boolean;\n count?: number;\n limit?: number;\n cursor?: string | null;\n acceptHeader?: string;\n token?: string;\n readOnly?: boolean;\n}\n\n/**\n * Renovate http options that are partly not part of `got` options.\n * Remember to delete these in `normalizeGotOptions` before passing to `got`.\n */\nexport interface HttpOptions {\n body?: any;\n username?: string;\n password?: string;\n baseUrl?: string;\n headers?: OutgoingHttpHeaders;\n\n /**\n * Do not use authentication\n */\n noAuth?: boolean;\n\n throwHttpErrors?: boolean;\n\n token?: string;\n memCache?: boolean;\n cacheProvider?: HttpCacheProvider;\n readOnly?: boolean;\n}\n\nexport interface HttpHeaders extends IncomingHttpHeaders {\n link?: string | undefined;\n}\n\nexport type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head';\n\nexport interface HttpResponse<T = string> {\n statusCode: number;\n body: T;\n headers: HttpHeaders;\n authorization?: boolean;\n cached?: boolean;\n}\n\nexport type Task<T> = () => Promise<T>;\nexport type GotTask<T = unknown> = Task<HttpResponse<T>>;\n\nexport interface ThrottleLimitRule {\n matchHost: string;\n throttleMs: number;\n}\n\nexport interface ConcurrencyLimitRule {\n matchHost: string;\n concurrency: number;\n}\n\nexport type SafeJsonError = RequestError | ZodError | EmptyResultError;\n"],"mappings":";;;;AAgDA,MAAa,qBAAgD;CAC3D;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../lib/util/http/types.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'node:http';\nimport type {\n OptionsInit,\n OptionsOfBufferResponseBody,\n OptionsOfJSONResponseBody,\n OptionsOfTextResponseBody,\n RequestError,\n} from 'got';\nimport type { ZodError } from 'zod/v3';\nimport type { HttpCacheProvider } from './cache/types.ts';\nimport type { EmptyResultError } from './errors.ts';\n\nexport type GotContextOptions = {\n authType?: string;\n} & Record<string, unknown>;\n\n// TODO: Move options to context\nexport type GotOptions = GotBufferOptions | GotTextOptions | GotJSONOptions;\nexport type GotBufferOptions = OptionsOfBufferResponseBody & GotExtraOptions;\nexport type GotTextOptions = OptionsOfTextResponseBody & GotExtraOptions;\nexport type GotJSONOptions = OptionsOfJSONResponseBody & GotExtraOptions;\n\nexport type GotStreamOptions = OptionsInit & GotExtraOptions;\n\n/**\n * Renovate extra options.\n */\nexport interface GotExtraOptions {\n abortOnError?: boolean;\n abortIgnoreStatusCodes?: number[];\n\n token?: string;\n hostType?: string;\n enabled?: boolean;\n memCache?: boolean;\n noAuth?: boolean;\n context?: GotContextOptions;\n\n /**\n * Got request timeout, overrides got interface.\n * Do not delete in `normalizeGotOptions`.\n */\n timeout?: number;\n}\n\n/**\n * Renovate extra options that are not part of `got` options.\n */\nexport const GotExtraOptionKeys: (keyof GotExtraOptions)[] = [\n 'abortOnError',\n 'abortIgnoreStatusCodes',\n 'enabled',\n 'hostType',\n 'memCache',\n 'noAuth',\n 'token',\n];\n\nexport type OutgoingHttpHeaders = Record<string, string | string[] | undefined>;\n\nexport type GraphqlVariables = Record<string, unknown>;\n\nexport interface GraphqlOptions {\n variables?: GraphqlVariables;\n paginate?: boolean;\n count?: number;\n limit?: number;\n cursor?: string | null;\n acceptHeader?: string;\n token?: string;\n readOnly?: boolean;\n}\n\n/**\n * Renovate http options that are partly not part of `got` options.\n * Remember to delete these in `normalizeGotOptions` before passing to `got`.\n */\nexport interface HttpOptions {\n body?: any;\n username?: string;\n password?: string;\n baseUrl?: string;\n headers?: OutgoingHttpHeaders;\n\n /**\n * Do not use authentication\n */\n noAuth?: boolean;\n\n throwHttpErrors?: boolean;\n\n token?: string;\n memCache?: boolean;\n cacheProvider?: HttpCacheProvider;\n readOnly?: boolean;\n}\n\nexport interface HttpHeaders extends IncomingHttpHeaders {\n link?: string | undefined;\n}\n\nexport type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head';\n\nexport interface HttpResponse<T = string> {\n statusCode: number;\n body: T;\n headers: HttpHeaders;\n authorization?: boolean;\n cached?: boolean;\n}\n\nexport type Task<T> = () => Promise<T>;\nexport type GotTask<T = unknown> = Task<HttpResponse<T>>;\n\nexport interface ThrottleLimitRule {\n matchHost: string;\n throttleMs: number;\n}\n\nexport interface ConcurrencyLimitRule {\n matchHost: string;\n concurrency: number;\n}\n\nexport type SafeJsonError = RequestError | ZodError | EmptyResultError;\n"],"mappings":";;;;AAgDA,MAAa,qBAAgD;CAC3D;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "43.25.4",
4
+ "version": "43.25.6",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -160,7 +160,7 @@
160
160
  "glob": "13.0.2",
161
161
  "global-agent": "3.0.0",
162
162
  "google-auth-library": "10.5.0",
163
- "got": "11.8.6",
163
+ "got": "12.6.1",
164
164
  "graph-data-structure": "4.5.0",
165
165
  "handlebars": "4.7.8",
166
166
  "ignore": "7.0.5",
@@ -1,7 +1,7 @@
1
1
  {
2
- "title": "JSON schema for Renovate 43.25.4 config files (https://renovatebot.com/)",
2
+ "title": "JSON schema for Renovate 43.25.6 config files (https://renovatebot.com/)",
3
3
  "$schema": "http://json-schema.org/draft-07/schema#",
4
- "x-renovate-version": "43.25.4",
4
+ "x-renovate-version": "43.25.6",
5
5
  "allowComments": true,
6
6
  "type": "object",
7
7
  "properties": {