renovate 41.171.5 → 41.171.8

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.
@@ -39,6 +39,8 @@ exports.presets = {
39
39
  description: 'Wait until the npm package is three days old before raising the update, this prevents npm unpublishing a package you already upgraded to.',
40
40
  npm: {
41
41
  minimumReleaseAge: '3 days',
42
+ internalChecksFilter: 'strict',
43
+ prCreation: 'not-pending',
42
44
  },
43
45
  },
44
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../lib/config/presets/internal/security.ts"],"names":[],"mappings":";;;AAEa,QAAA,OAAO,GAA2B;IAC7C,mBAAmB,EAAE;QACnB,WAAW,EAAE,sCAAsC;QACnD,YAAY,EAAE;YACZ;gBACE,eAAe,EAAE,CAAC,uBAAuB,CAAC;gBAC1C,iBAAiB,EAAE;oBACjB,OAAO,EACL,2KAA2K;iBAC9K;gBACD,aAAa,EAAE;oBACb,SAAS;oBACT,MAAM;oBACN,QAAQ;oBACR,QAAQ;oBACR,SAAS;oBACT,SAAS;iBACV;aACF;SACF;KACF;IACD,uBAAuB,EAAE;QACvB,WAAW,EACT,iEAAiE;QACnE,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,KAAK;gBACd,iBAAiB,EAAE,CAAC,GAAG,CAAC;aACzB;SACF;QACD,mBAAmB,EAAE;YACnB,OAAO,EAAE,IAAI;SACd;QACD,sBAAsB,EAAE,IAAI;KAC7B;IACD,oBAAoB,EAAE;QACpB,WAAW,EACT,2IAA2I;QAC7I,GAAG,EAAE;YACH,iBAAiB,EAAE,QAAQ;SAC5B;KACF;CACF,CAAC","sourcesContent":["import type { Preset } from '../types';\n\nexport const presets: Record<string, Preset> = {\n 'openssf-scorecard': {\n description: 'Show OpenSSF badge on pull requests.',\n packageRules: [\n {\n matchSourceUrls: ['https://github.com/**'],\n prBodyDefinitions: {\n OpenSSF:\n '[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/{{sourceRepo}}/badge)](https://securityscorecards.dev/viewer/?uri=github.com/{{sourceRepo}})',\n },\n prBodyColumns: [\n 'Package',\n 'Type',\n 'Update',\n 'Change',\n 'Pending',\n 'OpenSSF',\n ],\n },\n ],\n },\n 'only-security-updates': {\n description:\n 'Only update dependencies if vulnerabilities have been detected.',\n extends: ['config:recommended'],\n packageRules: [\n {\n enabled: false,\n matchPackageNames: ['*'],\n },\n ],\n vulnerabilityAlerts: {\n enabled: true,\n },\n osvVulnerabilityAlerts: true,\n },\n minimumReleaseAgeNpm: {\n description:\n 'Wait until the npm package is three days old before raising the update, this prevents npm unpublishing a package you already upgraded to.',\n npm: {\n minimumReleaseAge: '3 days',\n },\n },\n};\n"]}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../lib/config/presets/internal/security.ts"],"names":[],"mappings":";;;AAEa,QAAA,OAAO,GAA2B;IAC7C,mBAAmB,EAAE;QACnB,WAAW,EAAE,sCAAsC;QACnD,YAAY,EAAE;YACZ;gBACE,eAAe,EAAE,CAAC,uBAAuB,CAAC;gBAC1C,iBAAiB,EAAE;oBACjB,OAAO,EACL,2KAA2K;iBAC9K;gBACD,aAAa,EAAE;oBACb,SAAS;oBACT,MAAM;oBACN,QAAQ;oBACR,QAAQ;oBACR,SAAS;oBACT,SAAS;iBACV;aACF;SACF;KACF;IACD,uBAAuB,EAAE;QACvB,WAAW,EACT,iEAAiE;QACnE,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,KAAK;gBACd,iBAAiB,EAAE,CAAC,GAAG,CAAC;aACzB;SACF;QACD,mBAAmB,EAAE;YACnB,OAAO,EAAE,IAAI;SACd;QACD,sBAAsB,EAAE,IAAI;KAC7B;IACD,oBAAoB,EAAE;QACpB,WAAW,EACT,2IAA2I;QAC7I,GAAG,EAAE;YACH,iBAAiB,EAAE,QAAQ;YAC3B,oBAAoB,EAAE,QAAQ;YAC9B,UAAU,EAAE,aAAa;SAC1B;KACF;CACF,CAAC","sourcesContent":["import type { Preset } from '../types';\n\nexport const presets: Record<string, Preset> = {\n 'openssf-scorecard': {\n description: 'Show OpenSSF badge on pull requests.',\n packageRules: [\n {\n matchSourceUrls: ['https://github.com/**'],\n prBodyDefinitions: {\n OpenSSF:\n '[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/{{sourceRepo}}/badge)](https://securityscorecards.dev/viewer/?uri=github.com/{{sourceRepo}})',\n },\n prBodyColumns: [\n 'Package',\n 'Type',\n 'Update',\n 'Change',\n 'Pending',\n 'OpenSSF',\n ],\n },\n ],\n },\n 'only-security-updates': {\n description:\n 'Only update dependencies if vulnerabilities have been detected.',\n extends: ['config:recommended'],\n packageRules: [\n {\n enabled: false,\n matchPackageNames: ['*'],\n },\n ],\n vulnerabilityAlerts: {\n enabled: true,\n },\n osvVulnerabilityAlerts: true,\n },\n minimumReleaseAgeNpm: {\n description:\n 'Wait until the npm package is three days old before raising the update, this prevents npm unpublishing a package you already upgraded to.',\n npm: {\n minimumReleaseAge: '3 days',\n internalChecksFilter: 'strict',\n prCreation: 'not-pending',\n },\n },\n};\n"]}
@@ -28,7 +28,7 @@ export declare class DockerDatasource extends Datasource {
28
28
  };
29
29
  };
30
30
  readonly releaseTimestampSupport = true;
31
- readonly releaseTimestampNote = "Only supported on Docker Hub: The release timestamp is determined from the `tag_last_pushed` field in the results.";
31
+ readonly releaseTimestampNote = "Only supported on Docker Hub: The release timestamp is determined from the `tag_last_pushed` field in the results. **NOTE**: Currently, digests will receive the same release timestamp as the `tag_last_pushed`, which means that digests may appear newer than they are - see https://github.com/renovatebot/renovate/issues/38659";
32
32
  readonly sourceUrlSupport = "package";
33
33
  readonly sourceUrlNote = "The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.";
34
34
  constructor();
@@ -50,7 +50,7 @@ class DockerDatasource extends datasource_1.Datasource {
50
50
  defaultRegistryUrls = [common_1.DOCKER_HUB];
51
51
  defaultConfig = defaultConfig;
52
52
  releaseTimestampSupport = true;
53
- releaseTimestampNote = 'Only supported on Docker Hub: The release timestamp is determined from the `tag_last_pushed` field in the results.';
53
+ releaseTimestampNote = 'Only supported on Docker Hub: The release timestamp is determined from the `tag_last_pushed` field in the results. **NOTE**: Currently, digests will receive the same release timestamp as the `tag_last_pushed`, which means that digests may appear newer than they are - see https://github.com/renovatebot/renovate/issues/38659';
54
54
  sourceUrlSupport = 'package';
55
55
  sourceUrlNote = 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';
56
56
  constructor() {
@@ -643,6 +643,9 @@ class DockerDatasource extends datasource_1.Datasource {
643
643
  release.releaseTimestamp = releaseTimestamp;
644
644
  }
645
645
  if (newDigest) {
646
+ logger_1.logger.once.debug({
647
+ documentationUrl: 'https://github.com/renovatebot/renovate/issues/38659',
648
+ }, 'Using the `tag_last_pushed` to determine the age of a release from Docker Hub. If this is a digest update, it may lead to inconsistent behaviour, showing the digest as newer than it actually is');
646
649
  release.newDigest = newDigest;
647
650
  }
648
651
  return release;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { PAGE_NOT_FOUND_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getEnv } from '../../../util/env';\nimport { HttpError } from '../../../util/http';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { hasKey } from '../../../util/object';\nimport { type AsyncResult, Result } from '../../../util/result';\nimport { isDockerDigest } from '../../../util/string-match';\nimport { asTimestamp } from '../../../util/timestamp';\nimport {\n ensurePathPrefix,\n joinUrlParts,\n parseLinkHeader,\n} from '../../../util/url';\nimport { id as dockerVersioningId } from '../../versioning/docker';\nimport { Datasource } from '../datasource';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport { isArtifactoryServer } from '../util';\nimport {\n DOCKER_HUB,\n dockerDatasourceId,\n extractDigestFromResponseBody,\n findHelmSourceUrl,\n findLatestStable,\n getAuthHeaders,\n getRegistryRepository,\n gitRefLabel,\n imageUrlLabel,\n isDockerHost,\n sourceLabel,\n sourceLabels,\n} from './common';\nimport { DockerHubCache } from './dockerhub-cache';\nimport { ecrPublicRegex, ecrRegex, isECRMaxResultsError } from './ecr';\nimport type { DistributionManifest, OciImageManifest } from './schema';\nimport {\n DockerHubTagsPage,\n ManifestJson,\n OciHelmConfig,\n OciImageConfig,\n} from './schema';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} Docker tag',\n commitMessageExtra:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}',\n digest: {\n branchTopic: '{{{depNameSanitized}}}-{{{currentValue}}}',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic:\n '{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n commitMessageExtra: '',\n },\n },\n pin: {\n commitMessageExtra: '',\n groupName: 'Docker digests',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n branchTopic: 'digests-pin',\n },\n },\n};\n\nexport class DockerDatasource extends Datasource {\n static readonly id = dockerDatasourceId;\n\n override readonly defaultVersioning = dockerVersioningId;\n\n override readonly defaultRegistryUrls = [DOCKER_HUB];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'Only supported on Docker Hub: The release timestamp is determined from the `tag_last_pushed` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';\n\n constructor() {\n super(DockerDatasource.id);\n }\n\n // TODO: debug why quay throws errors (#9612)\n private async getManifestResponse(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n mode: 'head' | 'getText' = 'getText',\n ): Promise<HttpResponse | null> {\n logger.debug(\n `getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`,\n );\n try {\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return null;\n }\n headers.accept = [\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n 'application/vnd.docker.distribution.manifest.v2+json',\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ].join(', ');\n const url = `${registryHost}/v2/${dockerRepository}/manifests/${tag}`;\n const manifestResponse = await this.http[mode](url, {\n headers,\n noAuth: true,\n cacheProvider: memCacheProvider,\n });\n return manifestResponse;\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 404) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Docker Manifest is unknown',\n );\n return null;\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.code === 'ETIMEDOUT') {\n logger.debug(\n { registryHost },\n 'Timeout when attempting to connect to docker registry',\n );\n logger.debug({ err });\n return null;\n }\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Unknown Error looking up docker manifest',\n );\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciImageConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n /* v8 ignore next 4 -- should never happen */\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciImageConfig,\n );\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getHelmConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciHelmConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n /* v8 ignore next 4 -- should never happen */\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciHelmConfig,\n );\n }\n\n private async getConfigDigest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<string | null> {\n return (\n (await this.getManifest(registry, dockerRepository, tag))?.config\n ?.digest ?? null\n );\n }\n\n private async getManifest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<OciImageManifest | DistributionManifest | null> {\n const manifestResponse = await this.getManifestResponse(\n registry,\n dockerRepository,\n tag,\n );\n\n // If getting the manifest fails here, then abort\n // This means that the latest tag doesn't have a manifest, which shouldn't\n // be possible\n /* v8 ignore next 3 -- should never happen */\n if (!manifestResponse) {\n return null;\n }\n\n // Softfail on invalid manifests\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n if (!parsed.success) {\n logger.debug(\n {\n registry,\n dockerRepository,\n tag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Invalid manifest response',\n );\n return null;\n }\n\n const manifest = parsed.data;\n\n switch (manifest.mediaType) {\n case 'application/vnd.docker.distribution.manifest.v2+json':\n case 'application/vnd.oci.image.manifest.v1+json':\n return manifest;\n case 'application/vnd.docker.distribution.manifest.list.v2+json':\n case 'application/vnd.oci.image.index.v1+json':\n if (!manifest.manifests.length) {\n logger.debug(\n { manifest },\n 'Invalid manifest list with no manifests - returning',\n );\n return null;\n }\n logger.trace(\n { registry, dockerRepository, tag },\n 'Found manifest list, using first image',\n );\n return this.getManifest(\n registry,\n dockerRepository,\n manifest.manifests[0].digest,\n );\n // istanbul ignore next: can't happen\n default:\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-architecture',\n key: (\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ) => `${registryHost}:${dockerRepository}@${currentDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageArchitecture(\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ): Promise<string | null | undefined> {\n try {\n let manifestResponse: HttpResponse<string> | null;\n\n try {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n currentDigest,\n 'head',\n );\n } catch (_err) {\n const err =\n _err instanceof ExternalHostError\n ? _err.err\n : /* istanbul ignore next: can never happen */ _err;\n\n if (\n typeof err.statusCode === 'number' &&\n err.statusCode >= 500 &&\n err.statusCode < 600\n ) {\n // querying the digest manifest for a non existent image leads to a 500 statusCode\n return null;\n }\n\n /* istanbul ignore next */\n throw _err;\n }\n\n if (\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.docker.distribution.manifest.v2+json' &&\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.oci.image.manifest.v1+json'\n ) {\n return null;\n }\n\n const configDigest = await this.getConfigDigest(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n if (!configDigest) {\n return null;\n }\n\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n configDigest,\n );\n\n // TODO: fix me, architecture is required in spec\n if (\n configResponse &&\n ('config' in configResponse.body ||\n 'architecture' in configResponse.body)\n ) {\n const architecture = configResponse.body.architecture ?? null;\n logger.debug(\n `Current digest ${currentDigest} relates to architecture ${\n architecture ?? 'null'\n }`,\n );\n\n return architecture;\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode !== 404 || err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n logger.debug(\n { registryHost, dockerRepository, currentDigest, err },\n 'Unknown error getting image architecture',\n );\n }\n\n return undefined;\n }\n\n /*\n * docker.getLabels\n *\n * This function will:\n * - Return the labels for the requested image\n */\n @cache({\n namespace: 'datasource-docker-labels',\n key: (registryHost: string, dockerRepository: string, tag: string) =>\n `${registryHost}:${dockerRepository}:${tag}`,\n ttlMinutes: 24 * 60,\n })\n async getLabels(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n ): Promise<Record<string, string> | undefined> {\n logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);\n // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set\n if (\n getEnv().RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&\n registryHost === 'https://index.docker.io'\n ) {\n logger.debug(\n 'Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP',\n );\n return {};\n }\n // Docker Hub library images don't have labels we need\n if (\n registryHost === 'https://index.docker.io' &&\n dockerRepository.startsWith('library/')\n ) {\n logger.debug('Docker Hub library image - skipping label lookup');\n return {};\n }\n try {\n let labels: Record<string, string> | undefined = {};\n const manifest = await this.getManifest(\n registryHost,\n dockerRepository,\n tag,\n );\n\n if (!manifest) {\n logger.debug(\n { registryHost, dockerRepository, tag },\n 'No manifest found',\n );\n return undefined;\n }\n\n if ('annotations' in manifest && manifest.annotations) {\n labels = manifest.annotations;\n }\n\n switch (manifest.config.mediaType) {\n case 'application/vnd.cncf.helm.config.v1+json': {\n if (labels[sourceLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getHelmConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n if (configResponse) {\n // Helm chart\n const url = findHelmSourceUrl(configResponse.body);\n if (url) {\n labels[sourceLabel] = url;\n }\n }\n break;\n }\n case 'application/vnd.oci.image.config.v1+json':\n case 'application/vnd.docker.container.image.v1+json': {\n if (labels[sourceLabel] && labels[gitRefLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n /* v8 ignore next 3 -- should never happen */\n if (!configResponse) {\n return labels;\n }\n\n const body = configResponse.body;\n if (body.config) {\n labels = { ...labels, ...body.config.Labels };\n } else {\n logger.debug(\n { headers: configResponse.headers, body },\n `manifest blob response body missing the \"config\" property`,\n );\n }\n break;\n }\n }\n\n if (labels) {\n logger.debug(\n {\n labels,\n },\n 'found labels in manifest',\n );\n }\n return labels;\n } catch (err) /* istanbul ignore next: should be tested in future */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 400 || err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository, err },\n 'Unauthorized docker lookup',\n );\n } else if (err.statusCode === 404) {\n logger.warn(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Config Manifest is unknown',\n );\n } else if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn({ err }, 'docker registry failure: too many requests');\n } else if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'docker registry failure: internal error',\n );\n } else if (\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ETIMEDOUT'\n ) {\n logger.debug(\n { registryHost, err },\n 'Error connecting to docker registry',\n );\n } else if (registryHost === 'https://quay.io') {\n // istanbul ignore next\n logger.debug(\n 'Ignoring quay.io errors until they fully support v2 schema',\n );\n } else {\n logger.info(\n { registryHost, dockerRepository, tag, err },\n 'Unknown error getting Docker labels',\n );\n }\n return {};\n }\n }\n\n private async getTagsQuayRegistry(\n registry: string,\n repository: string,\n ): Promise<string[]> {\n let tags: string[] = [];\n const limit = 100;\n\n const pageUrl = (page: number): string =>\n `${registry}/api/v1/repository/${repository}/tag/?limit=${limit}&page=${page}&onlyActiveTags=true`;\n\n let page = 1;\n let url: string | null = pageUrl(page);\n while (url && page <= 20) {\n interface QuayRestDockerTags {\n tags: {\n name: string;\n }[];\n has_additional: boolean;\n }\n\n // typescript issue :-/\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const res = (await this.http.getJsonUnchecked<QuayRestDockerTags>(\n url,\n )) as HttpResponse<QuayRestDockerTags>;\n const pageTags = res.body.tags.map((tag) => tag.name);\n tags = tags.concat(pageTags);\n page += 1;\n url = res.body.has_additional ? pageUrl(page) : null;\n }\n return tags;\n }\n\n private async getDockerApiTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n let tags: string[] = [];\n // AWS ECR limits the maximum number of results to 1000\n // See https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n // See https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_DescribeRepositories.html#ecrpublic-DescribeRepositories-request-maxResults\n const limit =\n ecrRegex.test(registryHost) || ecrPublicRegex.test(registryHost)\n ? 1000\n : 10000;\n let url: string | null =\n `${registryHost}/${dockerRepository}/tags/list?n=${limit}`;\n url = ensurePathPrefix(url, '/v2');\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n url,\n );\n if (!headers) {\n logger.debug('Failed to get authHeaders for getTags lookup');\n return null;\n }\n let page = 0;\n const hostsNeedingAllPages = [\n 'https://ghcr.io', // GHCR sorts from oldest to newest, so we need to get all pages\n 'https://quay.io', // Quay sorts from oldest to newest, so we need to get all pages\n ];\n const pages = hostsNeedingAllPages.includes(registryHost)\n ? 1000\n : GlobalConfig.get('dockerMaxPages', 20);\n logger.trace({ registryHost, dockerRepository, pages }, 'docker.getTags');\n let foundMaxResultsError = false;\n do {\n let res: HttpResponse<{ tags: string[] }>;\n try {\n res = await this.http.getJsonUnchecked<{ tags: string[] }>(url, {\n headers,\n noAuth: true,\n });\n } catch (err) {\n if (\n !foundMaxResultsError &&\n err instanceof HttpError &&\n isECRMaxResultsError(err)\n ) {\n const maxResults = 1000;\n url = `${registryHost}/${dockerRepository}/tags/list?n=${maxResults}`;\n url = ensurePathPrefix(url, '/v2');\n foundMaxResultsError = true;\n continue;\n }\n throw err;\n }\n tags = tags.concat(res.body.tags);\n const linkHeader = parseLinkHeader(res.headers.link);\n if (isArtifactoryServer(res)) {\n // Artifactory bug: next link comes back without virtual-repo prefix (RTFACT-18971)\n if (linkHeader?.next?.last) {\n // parse the current URL, strip any old \"last\" param, then set the new one\n const parsed: URL = new URL(url);\n parsed.searchParams.delete('last');\n parsed.searchParams.set('last', linkHeader.next.last);\n url = parsed.href;\n } else {\n url = null;\n }\n } else if (linkHeader?.next?.url) {\n // for the normal case we can still use URL to resolve relative-next\n url = new URL(linkHeader.next.url, url).href;\n } else {\n url = null;\n }\n page += 1;\n } while (url && page < pages);\n return tags;\n }\n\n @cache({\n namespace: 'datasource-docker-tags',\n key: (registryHost: string, dockerRepository: string) =>\n `${registryHost}:${dockerRepository}`,\n })\n async getTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n try {\n const isQuay = registryHost === 'https://quay.io';\n let tags: string[] | null;\n if (isQuay) {\n try {\n // Due to pagination and sorting limits on Quay Docker v2 API implementation we try the Quay v1 API first\n tags = await this.getTagsQuayRegistry(registryHost, dockerRepository);\n } catch (err) {\n // If we get a 401 Unauthorized error (v1 API requires separate auth for private images), fall back to Docker v2 API\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Quay v1 API unauthorized, falling back to Docker v2 API',\n );\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n } else {\n throw err;\n }\n }\n } else {\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n }\n return tags;\n } catch (_err) /* istanbul ignore next */ {\n const err = _err instanceof ExternalHostError ? _err.err : _err;\n\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n !dockerRepository.includes('/')\n ) {\n logger.debug(\n `Retrying Tags for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getTags(registryHost, 'library/' + dockerRepository);\n }\n // JFrog Artifactory - Retry handling when resolving Docker Official Images\n // These follow the format of {{registryHost}}{{jFrogRepository}}/library/{{dockerRepository}}\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n isArtifactoryServer(err.response) &&\n dockerRepository.split('/').length === 2\n ) {\n logger.debug(\n `JFrog Artifactory: Retrying Tags for ${registryHost}/${dockerRepository} using library/ path between JFrog virtual repository and image`,\n );\n\n const dockerRepositoryParts = dockerRepository.split('/');\n const jfrogRepository = dockerRepositoryParts[0];\n const dockerImage = dockerRepositoryParts[1];\n\n return this.getTags(\n registryHost,\n jfrogRepository + '/library/' + dockerImage,\n );\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: too many requests',\n );\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: internal error',\n );\n throw new ExternalHostError(err);\n }\n const errorCodes = ['ECONNRESET', 'ETIMEDOUT'];\n if (errorCodes.includes(err.code)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry connection failure',\n );\n throw new ExternalHostError(err);\n }\n if (isDockerHost(registryHost)) {\n logger.info({ err }, 'Docker Hub lookup failure');\n }\n throw _err;\n }\n }\n\n /**\n * docker.getDigest\n *\n * The `newValue` supplied here should be a valid tag for the docker image.\n *\n * This function will:\n * - Look up a sha256 digest for a tag on its registry\n * - Return the digest as a string\n */\n @cache({\n namespace: 'datasource-docker-digest',\n key: (\n { registryUrl, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ) => {\n const newTag = newValue ?? 'latest';\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n const digest = currentDigest ? `@${currentDigest}` : '';\n return `${registryHost}:${dockerRepository}:${newTag}${digest}`;\n },\n })\n override async getDigest(\n { registryUrl, lookupName, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n let registryHost: string;\n let dockerRepository: string;\n if (registryUrl && lookupName) {\n // Reuse the resolved values from getReleases()\n registryHost = registryUrl;\n dockerRepository = lookupName;\n } else {\n // Resolve values independently\n ({ registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n ));\n }\n logger.debug(\n // TODO: types (#22198)\n `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`,\n );\n const newTag = is.nonEmptyString(newValue) ? newValue : 'latest';\n let digest: string | null = null;\n try {\n let architecture: string | null | undefined = null;\n if (currentDigest && isDockerDigest(currentDigest)) {\n architecture = await this.getImageArchitecture(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n }\n\n let manifestResponse: HttpResponse | null = null;\n if (!architecture) {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n 'head',\n );\n\n if (\n manifestResponse &&\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n digest =\n (manifestResponse.headers['docker-content-digest'] as string) ||\n null;\n }\n }\n\n if (\n is.string(architecture) ||\n (manifestResponse &&\n !hasKey('docker-content-digest', manifestResponse.headers))\n ) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Architecture-specific digest or missing docker-content-digest header - pulling full manifest',\n );\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n );\n\n if (architecture && manifestResponse) {\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n /* istanbul ignore else: hard to test */\n if (parsed.success) {\n const manifestList = parsed.data;\n if (\n manifestList.mediaType ===\n 'application/vnd.docker.distribution.manifest.list.v2+json' ||\n manifestList.mediaType ===\n 'application/vnd.oci.image.index.v1+json'\n ) {\n for (const manifest of manifestList.manifests) {\n if (manifest.platform?.architecture === architecture) {\n digest = manifest.digest;\n break;\n }\n }\n // TODO: return null if no matching architecture digest found\n // https://github.com/renovatebot/renovate/discussions/22639\n } else if (\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n // TODO: return null if no matching architecture, requires to fetch the config manifest\n // https://github.com/renovatebot/renovate/discussions/22639\n digest = manifestResponse.headers[\n 'docker-content-digest'\n ] as string;\n }\n } else {\n logger.debug(\n {\n registryHost,\n dockerRepository,\n newTag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Failed to parse manifest response',\n );\n }\n }\n\n if (!digest) {\n logger.debug(\n { registryHost, dockerRepository, newTag },\n 'Extraction digest from manifest response body is deprecated',\n );\n digest = extractDigestFromResponseBody(manifestResponse!);\n }\n }\n\n if (\n !manifestResponse &&\n !dockerRepository.includes('/') &&\n !packageName.includes('/')\n ) {\n logger.debug(\n `Retrying Digest for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getDigest(\n {\n registryUrl,\n packageName: 'library/' + packageName,\n currentDigest,\n },\n newValue,\n );\n }\n\n if (manifestResponse) {\n // TODO: fix types (#22198)\n logger.debug(`Got docker digest ${digest!}`);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n {\n err,\n packageName,\n newTag,\n },\n 'Unknown Error looking up docker image digest',\n );\n }\n return digest;\n }\n\n @cache({\n namespace: 'datasource-docker-hub-tags',\n key: (dockerRepository: string) => `${dockerRepository}`,\n })\n async getDockerHubTags(dockerRepository: string): Promise<Release[] | null> {\n let url = `https://hub.docker.com/v2/repositories/${dockerRepository}/tags?page_size=1000&ordering=last_updated`;\n\n const cache = await DockerHubCache.init(dockerRepository);\n const maxPages = GlobalConfig.get('dockerMaxPages', 20);\n let page = 0,\n needNextPage = true;\n while (needNextPage && page < maxPages) {\n const { val, err } = await this.http\n .getJsonSafe(url, DockerHubTagsPage)\n .unwrap();\n\n if (err) {\n logger.debug({ err }, `Docker: error fetching data from DockerHub`);\n return null;\n }\n page++;\n const { results, next, count } = val;\n\n needNextPage = cache.reconcile(results, count);\n\n if (!next) {\n break;\n }\n\n url = next;\n }\n\n await cache.save();\n\n const items = cache.getItems();\n return items.map(\n ({ name: version, tag_last_pushed, digest: newDigest }) => {\n const release: Release = { version };\n\n const releaseTimestamp = asTimestamp(tag_last_pushed);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n\n if (newDigest) {\n release.newDigest = newDigest;\n }\n\n return release;\n },\n );\n }\n\n /**\n * docker.getReleases\n *\n * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine\n * In the above:\n * - 'somehost.io' is the registry\n * - 'owner/repo' is the package name\n * - '8.1.0-alpine' is the tag\n *\n * This function will filter only tags that contain a semver version\n */\n @cache({\n namespace: 'datasource-docker-releases-v2',\n key: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n return `${registryHost}:${dockerRepository}`;\n },\n cacheable: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost } = getRegistryRepository(packageName, registryUrl!);\n return registryHost === 'https://index.docker.io';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n\n type TagsResultType = AsyncResult<\n Release[],\n NonNullable<Error | 'tags-error' | 'dockerhub-error'>\n >;\n\n const getTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getTags(registryHost, dockerRepository),\n 'tags-error' as const,\n ).transform((tags) => tags.map((version) => ({ version })));\n\n const getDockerHubTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getDockerHubTags(dockerRepository),\n 'dockerhub-error' as const,\n ).catch(getTags);\n\n const tagsResult =\n registryHost === 'https://index.docker.io' &&\n !getEnv().RENOVATE_X_DOCKER_HUB_TAGS_DISABLE\n ? getDockerHubTags()\n : getTags();\n\n const { val: releases, err } = await tagsResult.unwrap();\n if (err instanceof Error) {\n throw err;\n } else if (err) {\n return null;\n }\n\n const ret: ReleaseResult = {\n registryUrl: registryHost,\n releases,\n };\n if (dockerRepository !== packageName) {\n // This will be reused later if a getDigest() call is made\n ret.lookupName = dockerRepository;\n }\n\n const tags = releases.map((release) => release.version);\n const latestTag = tags.includes('latest')\n ? 'latest'\n : (findLatestStable(tags) ?? tags[tags.length - 1]);\n\n /* v8 ignore next 3 -- TODO: add test */\n if (!latestTag) {\n return ret;\n }\n const labels = await this.getLabels(\n registryHost,\n dockerRepository,\n latestTag,\n );\n if (labels) {\n if (is.nonEmptyString(labels[gitRefLabel])) {\n ret.gitRef = labels[gitRefLabel];\n }\n for (const label of sourceLabels) {\n if (is.nonEmptyString(labels[label])) {\n ret.sourceUrl = labels[label];\n break;\n }\n }\n if (is.nonEmptyString(labels[imageUrlLabel])) {\n ret.homepage = labels[imageUrlLabel];\n }\n }\n return ret;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { PAGE_NOT_FOUND_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getEnv } from '../../../util/env';\nimport { HttpError } from '../../../util/http';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { hasKey } from '../../../util/object';\nimport { type AsyncResult, Result } from '../../../util/result';\nimport { isDockerDigest } from '../../../util/string-match';\nimport { asTimestamp } from '../../../util/timestamp';\nimport {\n ensurePathPrefix,\n joinUrlParts,\n parseLinkHeader,\n} from '../../../util/url';\nimport { id as dockerVersioningId } from '../../versioning/docker';\nimport { Datasource } from '../datasource';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport { isArtifactoryServer } from '../util';\nimport {\n DOCKER_HUB,\n dockerDatasourceId,\n extractDigestFromResponseBody,\n findHelmSourceUrl,\n findLatestStable,\n getAuthHeaders,\n getRegistryRepository,\n gitRefLabel,\n imageUrlLabel,\n isDockerHost,\n sourceLabel,\n sourceLabels,\n} from './common';\nimport { DockerHubCache } from './dockerhub-cache';\nimport { ecrPublicRegex, ecrRegex, isECRMaxResultsError } from './ecr';\nimport type { DistributionManifest, OciImageManifest } from './schema';\nimport {\n DockerHubTagsPage,\n ManifestJson,\n OciHelmConfig,\n OciImageConfig,\n} from './schema';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} Docker tag',\n commitMessageExtra:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}',\n digest: {\n branchTopic: '{{{depNameSanitized}}}-{{{currentValue}}}',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic:\n '{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n commitMessageExtra: '',\n },\n },\n pin: {\n commitMessageExtra: '',\n groupName: 'Docker digests',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n branchTopic: 'digests-pin',\n },\n },\n};\n\nexport class DockerDatasource extends Datasource {\n static readonly id = dockerDatasourceId;\n\n override readonly defaultVersioning = dockerVersioningId;\n\n override readonly defaultRegistryUrls = [DOCKER_HUB];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'Only supported on Docker Hub: The release timestamp is determined from the `tag_last_pushed` field in the results. **NOTE**: Currently, digests will receive the same release timestamp as the `tag_last_pushed`, which means that digests may appear newer than they are - see https://github.com/renovatebot/renovate/issues/38659';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';\n\n constructor() {\n super(DockerDatasource.id);\n }\n\n // TODO: debug why quay throws errors (#9612)\n private async getManifestResponse(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n mode: 'head' | 'getText' = 'getText',\n ): Promise<HttpResponse | null> {\n logger.debug(\n `getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`,\n );\n try {\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return null;\n }\n headers.accept = [\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n 'application/vnd.docker.distribution.manifest.v2+json',\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ].join(', ');\n const url = `${registryHost}/v2/${dockerRepository}/manifests/${tag}`;\n const manifestResponse = await this.http[mode](url, {\n headers,\n noAuth: true,\n cacheProvider: memCacheProvider,\n });\n return manifestResponse;\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 404) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Docker Manifest is unknown',\n );\n return null;\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.code === 'ETIMEDOUT') {\n logger.debug(\n { registryHost },\n 'Timeout when attempting to connect to docker registry',\n );\n logger.debug({ err });\n return null;\n }\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Unknown Error looking up docker manifest',\n );\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciImageConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n /* v8 ignore next 4 -- should never happen */\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciImageConfig,\n );\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getHelmConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciHelmConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n /* v8 ignore next 4 -- should never happen */\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciHelmConfig,\n );\n }\n\n private async getConfigDigest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<string | null> {\n return (\n (await this.getManifest(registry, dockerRepository, tag))?.config\n ?.digest ?? null\n );\n }\n\n private async getManifest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<OciImageManifest | DistributionManifest | null> {\n const manifestResponse = await this.getManifestResponse(\n registry,\n dockerRepository,\n tag,\n );\n\n // If getting the manifest fails here, then abort\n // This means that the latest tag doesn't have a manifest, which shouldn't\n // be possible\n /* v8 ignore next 3 -- should never happen */\n if (!manifestResponse) {\n return null;\n }\n\n // Softfail on invalid manifests\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n if (!parsed.success) {\n logger.debug(\n {\n registry,\n dockerRepository,\n tag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Invalid manifest response',\n );\n return null;\n }\n\n const manifest = parsed.data;\n\n switch (manifest.mediaType) {\n case 'application/vnd.docker.distribution.manifest.v2+json':\n case 'application/vnd.oci.image.manifest.v1+json':\n return manifest;\n case 'application/vnd.docker.distribution.manifest.list.v2+json':\n case 'application/vnd.oci.image.index.v1+json':\n if (!manifest.manifests.length) {\n logger.debug(\n { manifest },\n 'Invalid manifest list with no manifests - returning',\n );\n return null;\n }\n logger.trace(\n { registry, dockerRepository, tag },\n 'Found manifest list, using first image',\n );\n return this.getManifest(\n registry,\n dockerRepository,\n manifest.manifests[0].digest,\n );\n // istanbul ignore next: can't happen\n default:\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-architecture',\n key: (\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ) => `${registryHost}:${dockerRepository}@${currentDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageArchitecture(\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ): Promise<string | null | undefined> {\n try {\n let manifestResponse: HttpResponse<string> | null;\n\n try {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n currentDigest,\n 'head',\n );\n } catch (_err) {\n const err =\n _err instanceof ExternalHostError\n ? _err.err\n : /* istanbul ignore next: can never happen */ _err;\n\n if (\n typeof err.statusCode === 'number' &&\n err.statusCode >= 500 &&\n err.statusCode < 600\n ) {\n // querying the digest manifest for a non existent image leads to a 500 statusCode\n return null;\n }\n\n /* istanbul ignore next */\n throw _err;\n }\n\n if (\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.docker.distribution.manifest.v2+json' &&\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.oci.image.manifest.v1+json'\n ) {\n return null;\n }\n\n const configDigest = await this.getConfigDigest(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n if (!configDigest) {\n return null;\n }\n\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n configDigest,\n );\n\n // TODO: fix me, architecture is required in spec\n if (\n configResponse &&\n ('config' in configResponse.body ||\n 'architecture' in configResponse.body)\n ) {\n const architecture = configResponse.body.architecture ?? null;\n logger.debug(\n `Current digest ${currentDigest} relates to architecture ${\n architecture ?? 'null'\n }`,\n );\n\n return architecture;\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode !== 404 || err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n logger.debug(\n { registryHost, dockerRepository, currentDigest, err },\n 'Unknown error getting image architecture',\n );\n }\n\n return undefined;\n }\n\n /*\n * docker.getLabels\n *\n * This function will:\n * - Return the labels for the requested image\n */\n @cache({\n namespace: 'datasource-docker-labels',\n key: (registryHost: string, dockerRepository: string, tag: string) =>\n `${registryHost}:${dockerRepository}:${tag}`,\n ttlMinutes: 24 * 60,\n })\n async getLabels(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n ): Promise<Record<string, string> | undefined> {\n logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);\n // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set\n if (\n getEnv().RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&\n registryHost === 'https://index.docker.io'\n ) {\n logger.debug(\n 'Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP',\n );\n return {};\n }\n // Docker Hub library images don't have labels we need\n if (\n registryHost === 'https://index.docker.io' &&\n dockerRepository.startsWith('library/')\n ) {\n logger.debug('Docker Hub library image - skipping label lookup');\n return {};\n }\n try {\n let labels: Record<string, string> | undefined = {};\n const manifest = await this.getManifest(\n registryHost,\n dockerRepository,\n tag,\n );\n\n if (!manifest) {\n logger.debug(\n { registryHost, dockerRepository, tag },\n 'No manifest found',\n );\n return undefined;\n }\n\n if ('annotations' in manifest && manifest.annotations) {\n labels = manifest.annotations;\n }\n\n switch (manifest.config.mediaType) {\n case 'application/vnd.cncf.helm.config.v1+json': {\n if (labels[sourceLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getHelmConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n if (configResponse) {\n // Helm chart\n const url = findHelmSourceUrl(configResponse.body);\n if (url) {\n labels[sourceLabel] = url;\n }\n }\n break;\n }\n case 'application/vnd.oci.image.config.v1+json':\n case 'application/vnd.docker.container.image.v1+json': {\n if (labels[sourceLabel] && labels[gitRefLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n /* v8 ignore next 3 -- should never happen */\n if (!configResponse) {\n return labels;\n }\n\n const body = configResponse.body;\n if (body.config) {\n labels = { ...labels, ...body.config.Labels };\n } else {\n logger.debug(\n { headers: configResponse.headers, body },\n `manifest blob response body missing the \"config\" property`,\n );\n }\n break;\n }\n }\n\n if (labels) {\n logger.debug(\n {\n labels,\n },\n 'found labels in manifest',\n );\n }\n return labels;\n } catch (err) /* istanbul ignore next: should be tested in future */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 400 || err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository, err },\n 'Unauthorized docker lookup',\n );\n } else if (err.statusCode === 404) {\n logger.warn(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Config Manifest is unknown',\n );\n } else if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn({ err }, 'docker registry failure: too many requests');\n } else if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'docker registry failure: internal error',\n );\n } else if (\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ETIMEDOUT'\n ) {\n logger.debug(\n { registryHost, err },\n 'Error connecting to docker registry',\n );\n } else if (registryHost === 'https://quay.io') {\n // istanbul ignore next\n logger.debug(\n 'Ignoring quay.io errors until they fully support v2 schema',\n );\n } else {\n logger.info(\n { registryHost, dockerRepository, tag, err },\n 'Unknown error getting Docker labels',\n );\n }\n return {};\n }\n }\n\n private async getTagsQuayRegistry(\n registry: string,\n repository: string,\n ): Promise<string[]> {\n let tags: string[] = [];\n const limit = 100;\n\n const pageUrl = (page: number): string =>\n `${registry}/api/v1/repository/${repository}/tag/?limit=${limit}&page=${page}&onlyActiveTags=true`;\n\n let page = 1;\n let url: string | null = pageUrl(page);\n while (url && page <= 20) {\n interface QuayRestDockerTags {\n tags: {\n name: string;\n }[];\n has_additional: boolean;\n }\n\n // typescript issue :-/\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const res = (await this.http.getJsonUnchecked<QuayRestDockerTags>(\n url,\n )) as HttpResponse<QuayRestDockerTags>;\n const pageTags = res.body.tags.map((tag) => tag.name);\n tags = tags.concat(pageTags);\n page += 1;\n url = res.body.has_additional ? pageUrl(page) : null;\n }\n return tags;\n }\n\n private async getDockerApiTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n let tags: string[] = [];\n // AWS ECR limits the maximum number of results to 1000\n // See https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n // See https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_DescribeRepositories.html#ecrpublic-DescribeRepositories-request-maxResults\n const limit =\n ecrRegex.test(registryHost) || ecrPublicRegex.test(registryHost)\n ? 1000\n : 10000;\n let url: string | null =\n `${registryHost}/${dockerRepository}/tags/list?n=${limit}`;\n url = ensurePathPrefix(url, '/v2');\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n url,\n );\n if (!headers) {\n logger.debug('Failed to get authHeaders for getTags lookup');\n return null;\n }\n let page = 0;\n const hostsNeedingAllPages = [\n 'https://ghcr.io', // GHCR sorts from oldest to newest, so we need to get all pages\n 'https://quay.io', // Quay sorts from oldest to newest, so we need to get all pages\n ];\n const pages = hostsNeedingAllPages.includes(registryHost)\n ? 1000\n : GlobalConfig.get('dockerMaxPages', 20);\n logger.trace({ registryHost, dockerRepository, pages }, 'docker.getTags');\n let foundMaxResultsError = false;\n do {\n let res: HttpResponse<{ tags: string[] }>;\n try {\n res = await this.http.getJsonUnchecked<{ tags: string[] }>(url, {\n headers,\n noAuth: true,\n });\n } catch (err) {\n if (\n !foundMaxResultsError &&\n err instanceof HttpError &&\n isECRMaxResultsError(err)\n ) {\n const maxResults = 1000;\n url = `${registryHost}/${dockerRepository}/tags/list?n=${maxResults}`;\n url = ensurePathPrefix(url, '/v2');\n foundMaxResultsError = true;\n continue;\n }\n throw err;\n }\n tags = tags.concat(res.body.tags);\n const linkHeader = parseLinkHeader(res.headers.link);\n if (isArtifactoryServer(res)) {\n // Artifactory bug: next link comes back without virtual-repo prefix (RTFACT-18971)\n if (linkHeader?.next?.last) {\n // parse the current URL, strip any old \"last\" param, then set the new one\n const parsed: URL = new URL(url);\n parsed.searchParams.delete('last');\n parsed.searchParams.set('last', linkHeader.next.last);\n url = parsed.href;\n } else {\n url = null;\n }\n } else if (linkHeader?.next?.url) {\n // for the normal case we can still use URL to resolve relative-next\n url = new URL(linkHeader.next.url, url).href;\n } else {\n url = null;\n }\n page += 1;\n } while (url && page < pages);\n return tags;\n }\n\n @cache({\n namespace: 'datasource-docker-tags',\n key: (registryHost: string, dockerRepository: string) =>\n `${registryHost}:${dockerRepository}`,\n })\n async getTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n try {\n const isQuay = registryHost === 'https://quay.io';\n let tags: string[] | null;\n if (isQuay) {\n try {\n // Due to pagination and sorting limits on Quay Docker v2 API implementation we try the Quay v1 API first\n tags = await this.getTagsQuayRegistry(registryHost, dockerRepository);\n } catch (err) {\n // If we get a 401 Unauthorized error (v1 API requires separate auth for private images), fall back to Docker v2 API\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Quay v1 API unauthorized, falling back to Docker v2 API',\n );\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n } else {\n throw err;\n }\n }\n } else {\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n }\n return tags;\n } catch (_err) /* istanbul ignore next */ {\n const err = _err instanceof ExternalHostError ? _err.err : _err;\n\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n !dockerRepository.includes('/')\n ) {\n logger.debug(\n `Retrying Tags for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getTags(registryHost, 'library/' + dockerRepository);\n }\n // JFrog Artifactory - Retry handling when resolving Docker Official Images\n // These follow the format of {{registryHost}}{{jFrogRepository}}/library/{{dockerRepository}}\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n isArtifactoryServer(err.response) &&\n dockerRepository.split('/').length === 2\n ) {\n logger.debug(\n `JFrog Artifactory: Retrying Tags for ${registryHost}/${dockerRepository} using library/ path between JFrog virtual repository and image`,\n );\n\n const dockerRepositoryParts = dockerRepository.split('/');\n const jfrogRepository = dockerRepositoryParts[0];\n const dockerImage = dockerRepositoryParts[1];\n\n return this.getTags(\n registryHost,\n jfrogRepository + '/library/' + dockerImage,\n );\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: too many requests',\n );\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: internal error',\n );\n throw new ExternalHostError(err);\n }\n const errorCodes = ['ECONNRESET', 'ETIMEDOUT'];\n if (errorCodes.includes(err.code)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry connection failure',\n );\n throw new ExternalHostError(err);\n }\n if (isDockerHost(registryHost)) {\n logger.info({ err }, 'Docker Hub lookup failure');\n }\n throw _err;\n }\n }\n\n /**\n * docker.getDigest\n *\n * The `newValue` supplied here should be a valid tag for the docker image.\n *\n * This function will:\n * - Look up a sha256 digest for a tag on its registry\n * - Return the digest as a string\n */\n @cache({\n namespace: 'datasource-docker-digest',\n key: (\n { registryUrl, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ) => {\n const newTag = newValue ?? 'latest';\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n const digest = currentDigest ? `@${currentDigest}` : '';\n return `${registryHost}:${dockerRepository}:${newTag}${digest}`;\n },\n })\n override async getDigest(\n { registryUrl, lookupName, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n let registryHost: string;\n let dockerRepository: string;\n if (registryUrl && lookupName) {\n // Reuse the resolved values from getReleases()\n registryHost = registryUrl;\n dockerRepository = lookupName;\n } else {\n // Resolve values independently\n ({ registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n ));\n }\n logger.debug(\n // TODO: types (#22198)\n `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`,\n );\n const newTag = is.nonEmptyString(newValue) ? newValue : 'latest';\n let digest: string | null = null;\n try {\n let architecture: string | null | undefined = null;\n if (currentDigest && isDockerDigest(currentDigest)) {\n architecture = await this.getImageArchitecture(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n }\n\n let manifestResponse: HttpResponse | null = null;\n if (!architecture) {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n 'head',\n );\n\n if (\n manifestResponse &&\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n digest =\n (manifestResponse.headers['docker-content-digest'] as string) ||\n null;\n }\n }\n\n if (\n is.string(architecture) ||\n (manifestResponse &&\n !hasKey('docker-content-digest', manifestResponse.headers))\n ) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Architecture-specific digest or missing docker-content-digest header - pulling full manifest',\n );\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n );\n\n if (architecture && manifestResponse) {\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n /* istanbul ignore else: hard to test */\n if (parsed.success) {\n const manifestList = parsed.data;\n if (\n manifestList.mediaType ===\n 'application/vnd.docker.distribution.manifest.list.v2+json' ||\n manifestList.mediaType ===\n 'application/vnd.oci.image.index.v1+json'\n ) {\n for (const manifest of manifestList.manifests) {\n if (manifest.platform?.architecture === architecture) {\n digest = manifest.digest;\n break;\n }\n }\n // TODO: return null if no matching architecture digest found\n // https://github.com/renovatebot/renovate/discussions/22639\n } else if (\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n // TODO: return null if no matching architecture, requires to fetch the config manifest\n // https://github.com/renovatebot/renovate/discussions/22639\n digest = manifestResponse.headers[\n 'docker-content-digest'\n ] as string;\n }\n } else {\n logger.debug(\n {\n registryHost,\n dockerRepository,\n newTag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Failed to parse manifest response',\n );\n }\n }\n\n if (!digest) {\n logger.debug(\n { registryHost, dockerRepository, newTag },\n 'Extraction digest from manifest response body is deprecated',\n );\n digest = extractDigestFromResponseBody(manifestResponse!);\n }\n }\n\n if (\n !manifestResponse &&\n !dockerRepository.includes('/') &&\n !packageName.includes('/')\n ) {\n logger.debug(\n `Retrying Digest for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getDigest(\n {\n registryUrl,\n packageName: 'library/' + packageName,\n currentDigest,\n },\n newValue,\n );\n }\n\n if (manifestResponse) {\n // TODO: fix types (#22198)\n logger.debug(`Got docker digest ${digest!}`);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n {\n err,\n packageName,\n newTag,\n },\n 'Unknown Error looking up docker image digest',\n );\n }\n return digest;\n }\n\n @cache({\n namespace: 'datasource-docker-hub-tags',\n key: (dockerRepository: string) => `${dockerRepository}`,\n })\n async getDockerHubTags(dockerRepository: string): Promise<Release[] | null> {\n let url = `https://hub.docker.com/v2/repositories/${dockerRepository}/tags?page_size=1000&ordering=last_updated`;\n\n const cache = await DockerHubCache.init(dockerRepository);\n const maxPages = GlobalConfig.get('dockerMaxPages', 20);\n let page = 0,\n needNextPage = true;\n while (needNextPage && page < maxPages) {\n const { val, err } = await this.http\n .getJsonSafe(url, DockerHubTagsPage)\n .unwrap();\n\n if (err) {\n logger.debug({ err }, `Docker: error fetching data from DockerHub`);\n return null;\n }\n page++;\n const { results, next, count } = val;\n\n needNextPage = cache.reconcile(results, count);\n\n if (!next) {\n break;\n }\n\n url = next;\n }\n\n await cache.save();\n\n const items = cache.getItems();\n return items.map(\n ({ name: version, tag_last_pushed, digest: newDigest }) => {\n const release: Release = { version };\n\n const releaseTimestamp = asTimestamp(tag_last_pushed);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n\n if (newDigest) {\n logger.once.debug(\n {\n documentationUrl:\n 'https://github.com/renovatebot/renovate/issues/38659',\n },\n 'Using the `tag_last_pushed` to determine the age of a release from Docker Hub. If this is a digest update, it may lead to inconsistent behaviour, showing the digest as newer than it actually is',\n );\n release.newDigest = newDigest;\n }\n\n return release;\n },\n );\n }\n\n /**\n * docker.getReleases\n *\n * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine\n * In the above:\n * - 'somehost.io' is the registry\n * - 'owner/repo' is the package name\n * - '8.1.0-alpine' is the tag\n *\n * This function will filter only tags that contain a semver version\n */\n @cache({\n namespace: 'datasource-docker-releases-v2',\n key: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n return `${registryHost}:${dockerRepository}`;\n },\n cacheable: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost } = getRegistryRepository(packageName, registryUrl!);\n return registryHost === 'https://index.docker.io';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n\n type TagsResultType = AsyncResult<\n Release[],\n NonNullable<Error | 'tags-error' | 'dockerhub-error'>\n >;\n\n const getTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getTags(registryHost, dockerRepository),\n 'tags-error' as const,\n ).transform((tags) => tags.map((version) => ({ version })));\n\n const getDockerHubTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getDockerHubTags(dockerRepository),\n 'dockerhub-error' as const,\n ).catch(getTags);\n\n const tagsResult =\n registryHost === 'https://index.docker.io' &&\n !getEnv().RENOVATE_X_DOCKER_HUB_TAGS_DISABLE\n ? getDockerHubTags()\n : getTags();\n\n const { val: releases, err } = await tagsResult.unwrap();\n if (err instanceof Error) {\n throw err;\n } else if (err) {\n return null;\n }\n\n const ret: ReleaseResult = {\n registryUrl: registryHost,\n releases,\n };\n if (dockerRepository !== packageName) {\n // This will be reused later if a getDigest() call is made\n ret.lookupName = dockerRepository;\n }\n\n const tags = releases.map((release) => release.version);\n const latestTag = tags.includes('latest')\n ? 'latest'\n : (findLatestStable(tags) ?? tags[tags.length - 1]);\n\n /* v8 ignore next 3 -- TODO: add test */\n if (!latestTag) {\n return ret;\n }\n const labels = await this.getLabels(\n registryHost,\n dockerRepository,\n latestTag,\n );\n if (labels) {\n if (is.nonEmptyString(labels[gitRefLabel])) {\n ret.gitRef = labels[gitRefLabel];\n }\n for (const label of sourceLabels) {\n if (is.nonEmptyString(labels[label])) {\n ret.sourceUrl = labels[label];\n break;\n }\n }\n if (is.nonEmptyString(labels[imageUrlLabel])) {\n ret.homepage = labels[imageUrlLabel];\n }\n }\n return ret;\n }\n}\n"]}
@@ -19,46 +19,46 @@ export declare const UnityPackageReleasesJSON: z.ZodObject<{
19
19
  version: z.ZodString;
20
20
  }, "strip", z.ZodTypeAny, {
21
21
  version: string;
22
+ documentationUrl?: string | undefined;
22
23
  repository?: {
23
24
  url?: string | undefined;
24
25
  } | undefined;
25
26
  _upm?: {
26
27
  changelog?: string | undefined;
27
28
  } | undefined;
28
- documentationUrl?: string | undefined;
29
29
  }, {
30
30
  version: string;
31
+ documentationUrl?: string | undefined;
31
32
  repository?: {
32
33
  url?: string | undefined;
33
34
  } | undefined;
34
35
  _upm?: {
35
36
  changelog?: string | undefined;
36
37
  } | undefined;
37
- documentationUrl?: string | undefined;
38
38
  }>>;
39
39
  time: z.ZodRecord<z.ZodString, z.ZodString>;
40
40
  }, "strip", z.ZodTypeAny, {
41
41
  time: Record<string, string>;
42
42
  versions: Record<string, {
43
43
  version: string;
44
+ documentationUrl?: string | undefined;
44
45
  repository?: {
45
46
  url?: string | undefined;
46
47
  } | undefined;
47
48
  _upm?: {
48
49
  changelog?: string | undefined;
49
50
  } | undefined;
50
- documentationUrl?: string | undefined;
51
51
  }>;
52
52
  }, {
53
53
  time: Record<string, string>;
54
54
  versions: Record<string, {
55
55
  version: string;
56
+ documentationUrl?: string | undefined;
56
57
  repository?: {
57
58
  url?: string | undefined;
58
59
  } | undefined;
59
60
  _upm?: {
60
61
  changelog?: string | undefined;
61
62
  } | undefined;
62
- documentationUrl?: string | undefined;
63
63
  }>;
64
64
  }>;
@@ -119,9 +119,7 @@ class HttpBase {
119
119
  const throttle = (0, throttle_1.getThrottle)(url);
120
120
  const throttledTask = throttle ? () => throttle.add(httpTask) : httpTask;
121
121
  const queue = (0, queue_1.getQueue)(url);
122
- const queuedTask = queue
123
- ? () => queue.add(throttledTask, { throwOnTimeout: true })
124
- : throttledTask;
122
+ const queuedTask = queue ? () => queue.add(throttledTask) : throttledTask;
125
123
  const { maxRetryAfter = 60 } = hostRule;
126
124
  resPromise = (0, retry_after_1.wrapWithRetry)(queuedTask, url, retry_after_1.getRetryAfter, maxRetryAfter);
127
125
  if (memCacheKey) {
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../lib/util/http/http.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport merge from 'deepmerge';\nimport type { Options, RetryObject } from 'got';\nimport type { Merge, SetRequired } from 'type-fest';\nimport type { infer as Infer } from 'zod';\nimport { ZodType } from 'zod';\nimport { GlobalConfig } from '../../config/global';\nimport { HOST_DISABLED } from '../../constants/error-messages';\nimport { pkg } from '../../expose.cjs';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport * as memCache from '../cache/memory';\nimport { getEnv } from '../env';\nimport { hash } from '../hash';\nimport { type AsyncResult, Result } from '../result';\nimport { Toml } from '../schema-utils';\nimport { ObsoleteCacheHitLogger } from '../stats';\nimport { isHttpUrl, parseUrl, resolveBaseUrl } from '../url';\nimport { parseSingleYaml } from '../yaml';\nimport { applyAuthorization, removeAuthorization } from './auth';\nimport type { HttpCacheProvider } from './cache/types';\nimport { fetch, stream } from './got';\nimport { applyHostRule, findMatchingRule } from './host-rules';\n\nimport { getQueue } from './queue';\nimport { getRetryAfter, wrapWithRetry } from './retry-after';\nimport { getThrottle } from './throttle';\nimport type {\n GotOptions,\n GotStreamOptions,\n GotTask,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n SafeJsonError,\n} from './types';\nimport { copyResponse } from './util';\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 `RenovateBot/${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 constructor(\n protected hostType: string,\n options: HttpOptions = {},\n ) {\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: is.plainObject },\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: is.plainObject },\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 (is.undefined(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 options.timeout ??= 60000;\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 const cachedResponse = await cacheProvider?.bypassServer<unknown>(\n method,\n url,\n );\n if (cachedResponse) {\n return cachedResponse;\n }\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 start: temporary code */\n if (resPromise && !cacheProvider) {\n ObsoleteCacheHitLogger.write(url);\n }\n /* v8 ignore stop: temporary code */\n }\n\n if (!resPromise) {\n if (cacheProvider) {\n await cacheProvider.setCacheHeaders(method, url, options);\n }\n\n const startTime = Date.now();\n const httpTask: GotTask = () => {\n const queueMs = Date.now() - startTime;\n return fetch(url, options, { queueMs });\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\n ? () => queue.add(throttledTask, { throwOnTimeout: true })\n : 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 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<Infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<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<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<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<Infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>> {\n const args = this.resolveArgs<Infer<Schema>>(arg1, arg2, arg3);\n return this.requestJson<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<Infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): AsyncResult<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<Infer<Schema>>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<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<Infer<Schema>>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<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<Infer<Schema>>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<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<Infer<Schema>>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<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 if (\n is.undefined(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, combinedOptions);\n }\n\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>> {\n const { url, schema, httpOptions } = this.resolveArgs<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 Infer<Schema>;\n }\n\n return res;\n }\n}\n"]}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../lib/util/http/http.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport merge from 'deepmerge';\nimport type { Options, RetryObject } from 'got';\nimport type { Merge, SetRequired } from 'type-fest';\nimport type { infer as Infer } from 'zod';\nimport { ZodType } from 'zod';\nimport { GlobalConfig } from '../../config/global';\nimport { HOST_DISABLED } from '../../constants/error-messages';\nimport { pkg } from '../../expose.cjs';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport * as memCache from '../cache/memory';\nimport { getEnv } from '../env';\nimport { hash } from '../hash';\nimport { type AsyncResult, Result } from '../result';\nimport { Toml } from '../schema-utils';\nimport { ObsoleteCacheHitLogger } from '../stats';\nimport { isHttpUrl, parseUrl, resolveBaseUrl } from '../url';\nimport { parseSingleYaml } from '../yaml';\nimport { applyAuthorization, removeAuthorization } from './auth';\nimport type { HttpCacheProvider } from './cache/types';\nimport { fetch, stream } from './got';\nimport { applyHostRule, findMatchingRule } from './host-rules';\n\nimport { getQueue } from './queue';\nimport { getRetryAfter, wrapWithRetry } from './retry-after';\nimport { getThrottle } from './throttle';\nimport type {\n GotOptions,\n GotStreamOptions,\n GotTask,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n SafeJsonError,\n} from './types';\nimport { copyResponse } from './util';\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 `RenovateBot/${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 constructor(\n protected hostType: string,\n options: HttpOptions = {},\n ) {\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: is.plainObject },\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: is.plainObject },\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 (is.undefined(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 options.timeout ??= 60000;\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 const cachedResponse = await cacheProvider?.bypassServer<unknown>(\n method,\n url,\n );\n if (cachedResponse) {\n return cachedResponse;\n }\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 start: temporary code */\n if (resPromise && !cacheProvider) {\n ObsoleteCacheHitLogger.write(url);\n }\n /* v8 ignore stop: temporary code */\n }\n\n if (!resPromise) {\n if (cacheProvider) {\n await cacheProvider.setCacheHeaders(method, url, options);\n }\n\n const startTime = Date.now();\n const httpTask: GotTask = () => {\n const queueMs = Date.now() - startTime;\n return fetch(url, options, { queueMs });\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 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<Infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<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<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<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<Infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>> {\n const args = this.resolveArgs<Infer<Schema>>(arg1, arg2, arg3);\n return this.requestJson<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<Infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): AsyncResult<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<Infer<Schema>>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<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<Infer<Schema>>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<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<Infer<Schema>>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<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<Infer<Schema>>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<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 if (\n is.undefined(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, combinedOptions);\n }\n\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>> {\n const { url, schema, httpOptions } = this.resolveArgs<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 Infer<Schema>;\n }\n\n return res;\n }\n}\n"]}
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": "41.171.5",
4
+ "version": "41.171.8",
5
5
  "type": "commonjs",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -180,7 +180,7 @@
180
180
  "node-html-parser": "7.0.1",
181
181
  "p-all": "5.0.1",
182
182
  "p-map": "7.0.3",
183
- "p-queue": "8.1.1",
183
+ "p-queue": "9.0.0",
184
184
  "p-throttle": "8.0.0",
185
185
  "parse-link-header": "2.0.0",
186
186
  "prettier": "3.6.2",