renovate 40.8.1 → 40.9.0

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.
@@ -6,6 +6,7 @@ const zod_1 = require("zod");
6
6
  const logger_1 = require("../../../logger");
7
7
  const external_host_error_1 = require("../../../types/errors/external-host-error");
8
8
  const decorator_1 = require("../../../util/cache/package/decorator");
9
+ const memory_http_cache_provider_1 = require("../../../util/http/cache/memory-http-cache-provider");
9
10
  const result_1 = require("../../../util/result");
10
11
  const datasource_1 = require("../datasource");
11
12
  const schema_1 = require("../schema");
@@ -24,7 +25,7 @@ class CdnjsDatasource extends datasource_1.Datasource {
24
25
  .transform(({ packageName, registryUrl }) => {
25
26
  const [library] = packageName.split('/');
26
27
  const url = `${registryUrl}libraries/${library}?fields=homepage,repository,versions`;
27
- return this.http.getJsonSafe(url, schema_2.CdnjsAPIVersionResponseSchema);
28
+ return this.http.getJsonSafe(url, { cacheProvider: memory_http_cache_provider_1.memCacheProvider }, schema_2.CdnjsAPIVersionResponseSchema);
28
29
  })
29
30
  .transform(({ versions, homepage, repository }) => {
30
31
  const releases = versions;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/cdnjs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ZodError } from 'zod';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport type { HttpError } from '../../../util/http';\nimport { Result } from '../../../util/result';\nimport { Datasource } from '../datasource';\nimport { DigestsConfig, ReleasesConfig } from '../schema';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport {\n CdnjsAPISriResponseSchema,\n CdnjsAPIVersionResponseSchema,\n} from './schema';\n\nexport class CdnjsDatasource extends Datasource {\n static readonly id = 'cdnjs';\n\n constructor() {\n super(CdnjsDatasource.id);\n }\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultRegistryUrls = ['https://api.cdnjs.com/'];\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CdnjsDatasource.id}`,\n key: ({ packageName }: GetReleasesConfig) => {\n const library = packageName.split('/')[0];\n return `getReleases:${library}`;\n },\n })\n async getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const result = Result.parse(config, ReleasesConfig)\n .transform(({ packageName, registryUrl }) => {\n const [library] = packageName.split('/');\n\n const url = `${registryUrl}libraries/${library}?fields=homepage,repository,versions`;\n\n return this.http.getJsonSafe(url, CdnjsAPIVersionResponseSchema);\n })\n .transform(({ versions, homepage, repository }): ReleaseResult => {\n const releases: Release[] = versions;\n\n const res: ReleaseResult = { releases };\n\n if (homepage) {\n res.homepage = homepage;\n }\n\n if (repository) {\n res.sourceUrl = repository;\n }\n\n return res;\n });\n\n const { val, err } = await result.unwrap();\n\n if (err instanceof ZodError) {\n logger.debug({ err }, 'cdnjs: validation error');\n return null;\n }\n\n if (err) {\n this.handleGenericErrors(err);\n }\n\n return val;\n }\n\n @cache({\n namespace: `datasource-${CdnjsDatasource.id}`,\n key: ({ registryUrl, packageName }: DigestConfig, newValue: string) =>\n `getDigest:${registryUrl}:${packageName}:${newValue}}`,\n })\n override async getDigest(\n config: DigestConfig,\n newValue: string,\n ): Promise<string | null> {\n const { packageName } = config;\n const [library] = packageName.split('/');\n const assetName = packageName.replace(`${library}/`, '');\n\n const result = Result.parse(config, DigestsConfig)\n .transform(({ registryUrl }) => {\n const url = `${registryUrl}libraries/${library}/${newValue}?fields=sri`;\n\n return this.http.getJsonSafe(url, CdnjsAPISriResponseSchema);\n })\n .transform(({ sri }): string => {\n return sri?.[assetName];\n });\n\n const { val = null, err } = await result.unwrap();\n\n if (err instanceof ZodError) {\n logger.debug({ err }, 'cdnjs: validation error');\n return null;\n }\n\n if (err) {\n this.handleGenericErrors(err);\n }\n\n return val;\n }\n\n override handleHttpErrors(err: HttpError): void {\n if (err.response?.statusCode !== 404) {\n throw new ExternalHostError(err);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/cdnjs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ZodError } from 'zod';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport type { HttpError } from '../../../util/http';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { Result } from '../../../util/result';\nimport { Datasource } from '../datasource';\nimport { DigestsConfig, ReleasesConfig } from '../schema';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport {\n CdnjsAPISriResponseSchema,\n CdnjsAPIVersionResponseSchema,\n} from './schema';\n\nexport class CdnjsDatasource extends Datasource {\n static readonly id = 'cdnjs';\n\n constructor() {\n super(CdnjsDatasource.id);\n }\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultRegistryUrls = ['https://api.cdnjs.com/'];\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CdnjsDatasource.id}`,\n key: ({ packageName }: GetReleasesConfig) => {\n const library = packageName.split('/')[0];\n return `getReleases:${library}`;\n },\n })\n async getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const result = Result.parse(config, ReleasesConfig)\n .transform(({ packageName, registryUrl }) => {\n const [library] = packageName.split('/');\n\n const url = `${registryUrl}libraries/${library}?fields=homepage,repository,versions`;\n\n return this.http.getJsonSafe(\n url,\n { cacheProvider: memCacheProvider },\n CdnjsAPIVersionResponseSchema,\n );\n })\n .transform(({ versions, homepage, repository }): ReleaseResult => {\n const releases: Release[] = versions;\n\n const res: ReleaseResult = { releases };\n\n if (homepage) {\n res.homepage = homepage;\n }\n\n if (repository) {\n res.sourceUrl = repository;\n }\n\n return res;\n });\n\n const { val, err } = await result.unwrap();\n\n if (err instanceof ZodError) {\n logger.debug({ err }, 'cdnjs: validation error');\n return null;\n }\n\n if (err) {\n this.handleGenericErrors(err);\n }\n\n return val;\n }\n\n @cache({\n namespace: `datasource-${CdnjsDatasource.id}`,\n key: ({ registryUrl, packageName }: DigestConfig, newValue: string) =>\n `getDigest:${registryUrl}:${packageName}:${newValue}}`,\n })\n override async getDigest(\n config: DigestConfig,\n newValue: string,\n ): Promise<string | null> {\n const { packageName } = config;\n const [library] = packageName.split('/');\n const assetName = packageName.replace(`${library}/`, '');\n\n const result = Result.parse(config, DigestsConfig)\n .transform(({ registryUrl }) => {\n const url = `${registryUrl}libraries/${library}/${newValue}?fields=sri`;\n\n return this.http.getJsonSafe(url, CdnjsAPISriResponseSchema);\n })\n .transform(({ sri }): string => {\n return sri?.[assetName];\n });\n\n const { val = null, err } = await result.unwrap();\n\n if (err instanceof ZodError) {\n logger.debug({ err }, 'cdnjs: validation error');\n return null;\n }\n\n if (err) {\n this.handleGenericErrors(err);\n }\n\n return val;\n }\n\n override handleHttpErrors(err: HttpError): void {\n if (err.response?.statusCode !== 404) {\n throw new ExternalHostError(err);\n }\n }\n}\n"]}
@@ -12,6 +12,7 @@ const env_1 = require("../../../util/exec/env");
12
12
  const fs_1 = require("../../../util/fs");
13
13
  const config_1 = require("../../../util/git/config");
14
14
  const hash_1 = require("../../../util/hash");
15
+ const memory_http_cache_provider_1 = require("../../../util/http/cache/memory-http-cache-provider");
15
16
  const regex_1 = require("../../../util/regex");
16
17
  const url_1 = require("../../../util/url");
17
18
  const cargoVersioning = tslib_1.__importStar(require("../../versioning/cargo"));
@@ -259,7 +260,7 @@ class CrateDatasource extends datasource_1.Datasource {
259
260
  return release;
260
261
  }
261
262
  const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;
262
- const { body: releaseTimestamp } = await this.http.getJson(url, schema_1.ReleaseTimestampSchema);
263
+ const { body: releaseTimestamp } = await this.http.getJson(url, { cacheProvider: memory_http_cache_provider_1.memCacheProvider }, schema_1.ReleaseTimestampSchema);
263
264
  release.releaseTimestamp = releaseTimestamp;
264
265
  return release;
265
266
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getChildProcessEnv } from '../../../util/exec/env';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestampSchema } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((version) => {\n const release: Release = {\n version: version.vers.replace(/\\+.*$/, ''),\n };\n if (version.yanked) {\n release.isDeprecated = true;\n }\n if (version.rust_version) {\n release.constraints = {\n rust: [version.rust_version],\n };\n }\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({\n ...simpleGitConfig(),\n maxConcurrentProcesses: 1,\n }).env(getChildProcessEnv());\n const clonePromise = git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n\n memCache.set(\n cacheKey,\n clonePromise.then(() => clonePath).catch(() => null),\n );\n\n try {\n await clonePromise;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n ReleaseTimestampSchema,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getChildProcessEnv } from '../../../util/exec/env';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestampSchema } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((version) => {\n const release: Release = {\n version: version.vers.replace(/\\+.*$/, ''),\n };\n if (version.yanked) {\n release.isDeprecated = true;\n }\n if (version.rust_version) {\n release.constraints = {\n rust: [version.rust_version],\n };\n }\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({\n ...simpleGitConfig(),\n maxConcurrentProcesses: 1,\n }).env(getChildProcessEnv());\n const clonePromise = git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n\n memCache.set(\n cacheKey,\n clonePromise.then(() => clonePath).catch(() => null),\n );\n\n try {\n await clonePromise;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n { cacheProvider: memCacheProvider },\n ReleaseTimestampSchema,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MavenDatasource = exports.defaultRegistryUrls = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const global_1 = require("../../../config/global");
6
5
  const logger_1 = require("../../../logger");
7
6
  const packageCache = tslib_1.__importStar(require("../../../util/cache/package"));
8
7
  const timestamp_1 = require("../../../util/timestamp");
@@ -61,23 +60,9 @@ class MavenDatasource extends datasource_1.Datasource {
61
60
  }
62
61
  async fetchVersionsFromMetadata(dependency, repoUrl) {
63
62
  const metadataUrl = (0, util_1.getMavenUrl)(dependency, repoUrl, 'maven-metadata.xml');
64
- const cacheNamespace = 'datasource-maven:metadata-xml';
65
- const cacheKey = `v3:${metadataUrl}`;
66
- const cachedVersions = await packageCache.get(cacheNamespace, cacheKey);
67
- /* v8 ignore next 3 -- TODO: add test */
68
- if (cachedVersions) {
69
- return cachedVersions;
70
- }
71
63
  const metadataXmlResult = await (0, util_1.downloadMavenXml)(this.http, metadataUrl);
72
64
  return metadataXmlResult
73
- .transform(async ({ isCacheable, data: mavenMetadata, }) => {
74
- const versions = extractVersions(mavenMetadata);
75
- const cachePrivatePackages = global_1.GlobalConfig.get('cachePrivatePackages', false);
76
- if (cachePrivatePackages || isCacheable) {
77
- await packageCache.set(cacheNamespace, cacheKey, versions, 30);
78
- }
79
- return versions;
80
- })
65
+ .transform(({ data: metadata }) => extractVersions(metadata))
81
66
  .onError((err) => {
82
67
  logger_1.logger.debug(`Maven: error fetching versions for "${dependency.display}": ${err.type}`);
83
68
  })
@@ -118,7 +103,7 @@ class MavenDatasource extends datasource_1.Datasource {
118
103
  const cacheKey = versionOrig
119
104
  ? `postprocessRelease:${registryUrl}:${packageName}:${versionOrig}:${version}`
120
105
  : `postprocessRelease:${registryUrl}:${packageName}:${version}`;
121
- const cachedResult = await packageCache.get('datasource-maven', cacheKey);
106
+ const cachedResult = await packageCache.get('datasource-maven:postprocess-reject', cacheKey);
122
107
  /* v8 ignore start: hard to test */
123
108
  if (cachedResult) {
124
109
  return cachedResult;
@@ -133,13 +118,14 @@ class MavenDatasource extends datasource_1.Datasource {
133
118
  const { val, err } = fetchResult.unwrap();
134
119
  if (err) {
135
120
  const result = err.type === 'not-found' ? 'reject' : release;
136
- await packageCache.set('datasource-maven', cacheKey, result, 24 * 60);
121
+ if (result === 'reject') {
122
+ await packageCache.set('datasource-maven:postprocess-reject', cacheKey, result, 24 * 60);
123
+ }
137
124
  return result;
138
125
  }
139
126
  if (val.lastModified) {
140
127
  release.releaseTimestamp = (0, timestamp_1.asTimestamp)(val.lastModified);
141
128
  }
142
- await packageCache.set('datasource-maven', cacheKey, release, 7 * 24 * 60);
143
129
  return release;
144
130
  }
145
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/maven/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { XmlDocument } from 'xmldoc';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as packageCache from '../../../util/cache/package';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport mavenVersion from '../../versioning/maven';\nimport * as mavenVersioning from '../../versioning/maven';\nimport { compare } from '../../versioning/maven/compare';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n RegistryStrategy,\n Release,\n ReleaseResult,\n} from '../types';\nimport { MAVEN_REPO } from './common';\nimport type { MavenDependency, MetadataResults } from './types';\nimport {\n createUrlForDependencyPom,\n downloadMaven,\n downloadMavenXml,\n getDependencyInfo,\n getDependencyParts,\n getMavenUrl,\n} from './util';\n\nfunction getLatestSuitableVersion(releases: Release[]): string | null {\n /* v8 ignore next 3 -- TODO: add test */\n if (!releases?.length) {\n return null;\n }\n const allVersions = releases.map(({ version }) => version);\n const stableVersions = allVersions.filter((x) => mavenVersion.isStable(x));\n const versions = stableVersions.length ? stableVersions : allVersions;\n return versions.reduce((latestVersion, version) =>\n compare(version, latestVersion) === 1\n ? version\n : /* istanbul ignore next: hard to test */ latestVersion,\n );\n}\n\nfunction extractVersions(metadata: XmlDocument): MetadataResults {\n const res: MetadataResults = {};\n const versions = metadata.descendantWithPath('versioning.versions');\n const elements = versions?.childrenNamed('version');\n if (!elements) {\n return res;\n }\n res.versions = elements.map((el) => el.val);\n const latest = metadata.descendantWithPath('versioning.latest');\n if (latest?.val) {\n res.tags ??= {};\n res.tags.latest = latest.val;\n }\n const release = metadata.descendantWithPath('versioning.release');\n if (release?.val) {\n res.tags ??= {};\n res.tags.release = release.val;\n }\n\n return res;\n}\n\nexport const defaultRegistryUrls = [MAVEN_REPO];\n\nexport class MavenDatasource extends Datasource {\n static id = 'maven';\n\n override readonly caching = true;\n\n override readonly defaultRegistryUrls = defaultRegistryUrls;\n\n override readonly defaultVersioning: string = mavenVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'merge';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `Last-Modified` header or the `lastModified` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor(id = MavenDatasource.id) {\n super(id);\n }\n\n async fetchVersionsFromMetadata(\n dependency: MavenDependency,\n repoUrl: string,\n ): Promise<MetadataResults> {\n const metadataUrl = getMavenUrl(dependency, repoUrl, 'maven-metadata.xml');\n\n const cacheNamespace = 'datasource-maven:metadata-xml';\n const cacheKey = `v3:${metadataUrl}`;\n const cachedVersions = await packageCache.get<MetadataResults>(\n cacheNamespace,\n cacheKey,\n );\n /* v8 ignore next 3 -- TODO: add test */\n if (cachedVersions) {\n return cachedVersions;\n }\n\n const metadataXmlResult = await downloadMavenXml(this.http, metadataUrl);\n return metadataXmlResult\n .transform(\n async ({\n isCacheable,\n data: mavenMetadata,\n }): Promise<MetadataResults> => {\n const versions = extractVersions(mavenMetadata);\n const cachePrivatePackages = GlobalConfig.get(\n 'cachePrivatePackages',\n false,\n );\n\n if (cachePrivatePackages || isCacheable) {\n await packageCache.set(cacheNamespace, cacheKey, versions, 30);\n }\n\n return versions;\n },\n )\n .onError((err) => {\n logger.debug(\n `Maven: error fetching versions for \"${dependency.display}\": ${err.type}`,\n );\n })\n .unwrapOr({});\n }\n\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const dependency = getDependencyParts(packageName);\n const repoUrl = ensureTrailingSlash(registryUrl);\n\n logger.debug(`Looking up ${dependency.display} in repository ${repoUrl}`);\n\n const metadata = await this.fetchVersionsFromMetadata(dependency, repoUrl);\n if (!metadata.versions?.length) {\n return null;\n }\n const releases = metadata.versions.map((version) => ({ version }));\n\n logger.debug(\n `Found ${releases.length} new releases for ${dependency.display} in repository ${repoUrl}`,\n );\n\n const latestSuitableVersion = getLatestSuitableVersion(releases);\n const dependencyInfo =\n latestSuitableVersion &&\n (await getDependencyInfo(\n this.http,\n dependency,\n repoUrl,\n latestSuitableVersion,\n ));\n\n const result: ReleaseResult = {\n ...dependency,\n ...dependencyInfo,\n releases,\n };\n if (metadata.tags) {\n result.tags = metadata.tags;\n }\n\n if (!this.defaultRegistryUrls.includes(registryUrl)) {\n result.isPrivate = true;\n }\n\n return result;\n }\n\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n const { version, versionOrig } = release;\n const cacheKey = versionOrig\n ? `postprocessRelease:${registryUrl}:${packageName}:${versionOrig}:${version}`\n : `postprocessRelease:${registryUrl}:${packageName}:${version}`;\n const cachedResult = await packageCache.get<PostprocessReleaseResult>(\n 'datasource-maven',\n cacheKey,\n );\n\n /* v8 ignore start: hard to test */\n if (cachedResult) {\n return cachedResult;\n } /* v8 ignore stop */\n\n if (!packageName || !registryUrl) {\n return release;\n }\n\n const dependency = getDependencyParts(packageName);\n\n const pomUrl = await createUrlForDependencyPom(\n this.http,\n release.versionOrig ?? release.version,\n dependency,\n registryUrl,\n );\n\n const artifactUrl = getMavenUrl(dependency, registryUrl, pomUrl);\n const fetchResult = await downloadMaven(this.http, artifactUrl);\n const { val, err } = fetchResult.unwrap();\n\n if (err) {\n const result: PostprocessReleaseResult =\n err.type === 'not-found' ? 'reject' : release;\n await packageCache.set('datasource-maven', cacheKey, result, 24 * 60);\n return result;\n }\n\n if (val.lastModified) {\n release.releaseTimestamp = asTimestamp(val.lastModified);\n }\n\n await packageCache.set('datasource-maven', cacheKey, release, 7 * 24 * 60);\n return release;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/maven/index.ts"],"names":[],"mappings":";;;;AACA,4CAAyC;AACzC,kFAA4D;AAC5D,uDAAsD;AACtD,2CAAwD;AACxD,2EAAkD;AAClD,gFAA0D;AAC1D,4DAAyD;AACzD,8CAA2C;AAS3C,qCAAsC;AAEtC,iCAOgB;AAEhB,SAAS,wBAAwB,CAAC,QAAmB;IACnD,wCAAwC;IACxC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC;IACtE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,CAChD,IAAA,iBAAO,EAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC;QACnC,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,wCAAwC,CAAC,aAAa,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,QAAqB;IAC5C,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,GAAG,CAAC;IACb,CAAC;IACD,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IAChE,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAChB,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;IAC/B,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IAClE,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAChB,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IACjC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAEY,QAAA,mBAAmB,GAAG,CAAC,mBAAU,CAAC,CAAC;AAEhD,MAAa,eAAgB,SAAQ,uBAAU;IAC7C,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC;IAEF,OAAO,GAAG,IAAI,CAAC;IAEf,mBAAmB,GAAG,2BAAmB,CAAC;IAE1C,iBAAiB,GAAW,eAAe,CAAC,EAAE,CAAC;IAE/C,gBAAgB,GAAqB,OAAO,CAAC;IAE7C,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,iHAAiH,CAAC;IAClG,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,kEAAkE,CAAC;IAErE,YAAY,EAAE,GAAG,eAAe,CAAC,EAAE;QACjC,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,UAA2B,EAC3B,OAAe;QAEf,MAAM,WAAW,GAAG,IAAA,kBAAW,EAAC,UAAU,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC;QAC3E,MAAM,iBAAiB,GAAG,MAAM,IAAA,uBAAgB,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACzE,OAAO,iBAAiB;aACrB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;aAC5D,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACf,eAAM,CAAC,KAAK,CACV,uCAAuC,UAAU,CAAC,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAC1E,CAAC;QACJ,CAAC,CAAC;aACD,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,6CAA6C;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,yBAAkB,EAAC,WAAW,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAA,yBAAmB,EAAC,WAAW,CAAC,CAAC;QAEjD,eAAM,CAAC,KAAK,CAAC,cAAc,UAAU,CAAC,OAAO,kBAAkB,OAAO,EAAE,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAEnE,eAAM,CAAC,KAAK,CACV,SAAS,QAAQ,CAAC,MAAM,qBAAqB,UAAU,CAAC,OAAO,kBAAkB,OAAO,EAAE,CAC3F,CAAC;QAEF,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,cAAc,GAClB,qBAAqB;YACrB,CAAC,MAAM,IAAA,wBAAiB,EACtB,IAAI,CAAC,IAAI,EACT,UAAU,EACV,OAAO,EACP,qBAAqB,CACtB,CAAC,CAAC;QAEL,MAAM,MAAM,GAAkB;YAC5B,GAAG,UAAU;YACb,GAAG,cAAc;YACjB,QAAQ;SACT,CAAC;QACF,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEQ,KAAK,CAAC,kBAAkB,CAC/B,EAAE,WAAW,EAAE,WAAW,EAA4B,EACtD,OAAgB;QAEhB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACzC,MAAM,QAAQ,GAAG,WAAW;YAC1B,CAAC,CAAC,sBAAsB,WAAW,IAAI,WAAW,IAAI,WAAW,IAAI,OAAO,EAAE;YAC9E,CAAC,CAAC,sBAAsB,WAAW,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,GAAG,CACzC,qCAAqC,EACrC,QAAQ,CACT,CAAC;QAEF,mCAAmC;QACnC,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC,oBAAoB;QAEtB,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,yBAAkB,EAAC,WAAW,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAyB,EAC5C,IAAI,CAAC,IAAI,EACT,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,EACtC,UAAU,EACV,WAAW,CACZ,CAAC;QAEF,MAAM,WAAW,GAAG,IAAA,kBAAW,EAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QAE1C,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GACV,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,YAAY,CAAC,GAAG,CACpB,qCAAqC,EACrC,QAAQ,EACR,MAAM,EACN,EAAE,GAAG,EAAE,CACR,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACrB,OAAO,CAAC,gBAAgB,GAAG,IAAA,uBAAW,EAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;;AA9IH,0CA+IC","sourcesContent":["import type { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger';\nimport * as packageCache from '../../../util/cache/package';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport mavenVersion from '../../versioning/maven';\nimport * as mavenVersioning from '../../versioning/maven';\nimport { compare } from '../../versioning/maven/compare';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n RegistryStrategy,\n Release,\n ReleaseResult,\n} from '../types';\nimport { MAVEN_REPO } from './common';\nimport type { MavenDependency, MetadataResults } from './types';\nimport {\n createUrlForDependencyPom,\n downloadMaven,\n downloadMavenXml,\n getDependencyInfo,\n getDependencyParts,\n getMavenUrl,\n} from './util';\n\nfunction getLatestSuitableVersion(releases: Release[]): string | null {\n /* v8 ignore next 3 -- TODO: add test */\n if (!releases?.length) {\n return null;\n }\n const allVersions = releases.map(({ version }) => version);\n const stableVersions = allVersions.filter((x) => mavenVersion.isStable(x));\n const versions = stableVersions.length ? stableVersions : allVersions;\n return versions.reduce((latestVersion, version) =>\n compare(version, latestVersion) === 1\n ? version\n : /* istanbul ignore next: hard to test */ latestVersion,\n );\n}\n\nfunction extractVersions(metadata: XmlDocument): MetadataResults {\n const res: MetadataResults = {};\n const versions = metadata.descendantWithPath('versioning.versions');\n const elements = versions?.childrenNamed('version');\n if (!elements) {\n return res;\n }\n res.versions = elements.map((el) => el.val);\n const latest = metadata.descendantWithPath('versioning.latest');\n if (latest?.val) {\n res.tags ??= {};\n res.tags.latest = latest.val;\n }\n const release = metadata.descendantWithPath('versioning.release');\n if (release?.val) {\n res.tags ??= {};\n res.tags.release = release.val;\n }\n\n return res;\n}\n\nexport const defaultRegistryUrls = [MAVEN_REPO];\n\nexport class MavenDatasource extends Datasource {\n static id = 'maven';\n\n override readonly caching = true;\n\n override readonly defaultRegistryUrls = defaultRegistryUrls;\n\n override readonly defaultVersioning: string = mavenVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'merge';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `Last-Modified` header or the `lastModified` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor(id = MavenDatasource.id) {\n super(id);\n }\n\n async fetchVersionsFromMetadata(\n dependency: MavenDependency,\n repoUrl: string,\n ): Promise<MetadataResults> {\n const metadataUrl = getMavenUrl(dependency, repoUrl, 'maven-metadata.xml');\n const metadataXmlResult = await downloadMavenXml(this.http, metadataUrl);\n return metadataXmlResult\n .transform(({ data: metadata }) => extractVersions(metadata))\n .onError((err) => {\n logger.debug(\n `Maven: error fetching versions for \"${dependency.display}\": ${err.type}`,\n );\n })\n .unwrapOr({});\n }\n\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const dependency = getDependencyParts(packageName);\n const repoUrl = ensureTrailingSlash(registryUrl);\n\n logger.debug(`Looking up ${dependency.display} in repository ${repoUrl}`);\n\n const metadata = await this.fetchVersionsFromMetadata(dependency, repoUrl);\n if (!metadata.versions?.length) {\n return null;\n }\n const releases = metadata.versions.map((version) => ({ version }));\n\n logger.debug(\n `Found ${releases.length} new releases for ${dependency.display} in repository ${repoUrl}`,\n );\n\n const latestSuitableVersion = getLatestSuitableVersion(releases);\n const dependencyInfo =\n latestSuitableVersion &&\n (await getDependencyInfo(\n this.http,\n dependency,\n repoUrl,\n latestSuitableVersion,\n ));\n\n const result: ReleaseResult = {\n ...dependency,\n ...dependencyInfo,\n releases,\n };\n if (metadata.tags) {\n result.tags = metadata.tags;\n }\n\n if (!this.defaultRegistryUrls.includes(registryUrl)) {\n result.isPrivate = true;\n }\n\n return result;\n }\n\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n const { version, versionOrig } = release;\n const cacheKey = versionOrig\n ? `postprocessRelease:${registryUrl}:${packageName}:${versionOrig}:${version}`\n : `postprocessRelease:${registryUrl}:${packageName}:${version}`;\n const cachedResult = await packageCache.get<PostprocessReleaseResult>(\n 'datasource-maven:postprocess-reject',\n cacheKey,\n );\n\n /* v8 ignore start: hard to test */\n if (cachedResult) {\n return cachedResult;\n } /* v8 ignore stop */\n\n if (!packageName || !registryUrl) {\n return release;\n }\n\n const dependency = getDependencyParts(packageName);\n\n const pomUrl = await createUrlForDependencyPom(\n this.http,\n release.versionOrig ?? release.version,\n dependency,\n registryUrl,\n );\n\n const artifactUrl = getMavenUrl(dependency, registryUrl, pomUrl);\n const fetchResult = await downloadMaven(this.http, artifactUrl);\n const { val, err } = fetchResult.unwrap();\n\n if (err) {\n const result: PostprocessReleaseResult =\n err.type === 'not-found' ? 'reject' : release;\n if (result === 'reject') {\n await packageCache.set(\n 'datasource-maven:postprocess-reject',\n cacheKey,\n result,\n 24 * 60,\n );\n }\n return result;\n }\n\n if (val.lastModified) {\n release.releaseTimestamp = asTimestamp(val.lastModified);\n }\n\n return release;\n }\n}\n"]}
@@ -17,6 +17,7 @@ const error_messages_1 = require("../../../constants/error-messages");
17
17
  const logger_1 = require("../../../logger");
18
18
  const external_host_error_1 = require("../../../types/errors/external-host-error");
19
19
  const http_1 = require("../../../util/http");
20
+ const package_http_cache_provider_1 = require("../../../util/http/cache/package-http-cache-provider");
20
21
  const regex_1 = require("../../../util/regex");
21
22
  const result_1 = require("../../../util/result");
22
23
  const s3_1 = require("../../../util/s3");
@@ -56,9 +57,14 @@ function isConnectionError(err) {
56
57
  function isUnsupportedHostError(err) {
57
58
  return err.name === 'UnsupportedProtocolError';
58
59
  }
60
+ const cacheProvider = new package_http_cache_provider_1.PackageHttpCacheProvider({
61
+ namespace: 'datasource-maven:cache-provider',
62
+ ttlMinutes: 7 * 24 * 60,
63
+ checkCacheControlHeader: false, // Maven doesn't respond with `cache-control` headers
64
+ });
59
65
  async function downloadHttpProtocol(http, pkgUrl, opts = {}) {
60
66
  const url = pkgUrl.toString();
61
- const fetchResult = await result_1.Result.wrap(http.getText(url, opts))
67
+ const fetchResult = await result_1.Result.wrap(http.getText(url, { ...opts, cacheProvider }))
62
68
  .transform((res) => {
63
69
  const result = { data: res.body };
64
70
  if (!res.authorization) {
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/maven/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\nimport { GetObjectCommand } from '@aws-sdk/client-s3';\nimport { XmlDocument } from 'xmldoc';\nimport { HOST_DISABLED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { type Http, HttpError } from '../../../util/http';\nimport type { HttpOptions, HttpResponse } from '../../../util/http/types';\nimport { regEx } from '../../../util/regex';\nimport { Result } from '../../../util/result';\nimport { getS3Client, parseS3Url } from '../../../util/s3';\nimport { streamToString } from '../../../util/streams';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash, isHttpUrl, parseUrl } from '../../../util/url';\nimport { getGoogleAuthToken } from '../util';\nimport { MAVEN_REPO } from './common';\nimport type {\n DependencyInfo,\n MavenDependency,\n MavenFetchResult,\n MavenFetchSuccess,\n} from './types';\n\nfunction getHost(url: string): string | undefined {\n return parseUrl(url)?.host;\n}\n\nfunction isTemporaryError(err: HttpError): boolean {\n if (err.code === 'ECONNRESET') {\n return true;\n }\n\n if (err.response) {\n const status = err.response.statusCode;\n return status === 429 || (status >= 500 && status < 600);\n }\n\n return false;\n}\n\nfunction isHostError(err: HttpError): boolean {\n return err.code === 'ETIMEDOUT';\n}\n\nfunction isNotFoundError(err: HttpError): boolean {\n return err.code === 'ENOTFOUND' || err.response?.statusCode === 404;\n}\n\nfunction isPermissionsIssue(err: HttpError): boolean {\n const status = err.response?.statusCode;\n return status === 401 || status === 403;\n}\n\nfunction isConnectionError(err: HttpError): boolean {\n return (\n err.code === 'EAI_AGAIN' ||\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ECONNREFUSED'\n );\n}\n\nfunction isUnsupportedHostError(err: HttpError): boolean {\n return err.name === 'UnsupportedProtocolError';\n}\n\nexport async function downloadHttpProtocol(\n http: Http,\n pkgUrl: URL | string,\n opts: HttpOptions = {},\n): Promise<MavenFetchResult> {\n const url = pkgUrl.toString();\n const fetchResult = await Result.wrap<HttpResponse, Error>(\n http.getText(url, opts),\n )\n .transform((res): MavenFetchSuccess => {\n const result: MavenFetchSuccess = { data: res.body };\n\n if (!res.authorization) {\n result.isCacheable = true;\n }\n\n const lastModified = asTimestamp(res?.headers?.['last-modified']);\n if (lastModified) {\n result.lastModified = lastModified;\n }\n\n return result;\n })\n .catch((err): MavenFetchResult => {\n /* v8 ignore start: never happens, needs for type narrowing */\n if (!(err instanceof HttpError)) {\n return Result.err({ type: 'unknown', err });\n } /* v8 ignore stop */\n\n const failedUrl = url;\n if (err.message === HOST_DISABLED) {\n logger.trace({ failedUrl }, 'Host disabled');\n return Result.err({ type: 'host-disabled' });\n }\n\n if (isNotFoundError(err)) {\n logger.trace({ failedUrl }, `Url not found`);\n return Result.err({ type: 'not-found' });\n }\n\n if (isHostError(err)) {\n logger.debug(`Cannot connect to host ${failedUrl}`);\n return Result.err({ type: 'host-error' });\n }\n\n if (isPermissionsIssue(err)) {\n logger.debug(\n `Dependency lookup unauthorized. Please add authentication with a hostRule for ${failedUrl}`,\n );\n return Result.err({ type: 'permission-issue' });\n }\n\n if (isTemporaryError(err)) {\n logger.debug({ failedUrl, err }, 'Temporary error');\n if (getHost(url) === getHost(MAVEN_REPO)) {\n return Result.err({ type: 'maven-central-temporary-error', err });\n } else {\n return Result.err({ type: 'temporary-error' });\n }\n }\n\n if (isConnectionError(err)) {\n logger.debug(`Connection refused to maven registry ${failedUrl}`);\n return Result.err({ type: 'connection-error' });\n }\n\n if (isUnsupportedHostError(err)) {\n logger.debug(`Unsupported host ${failedUrl}`);\n return Result.err({ type: 'unsupported-host' });\n }\n\n logger.info({ failedUrl, err }, 'Unknown HTTP download error');\n return Result.err({ type: 'unknown', err });\n });\n\n const { err } = fetchResult.unwrap();\n if (err?.type === 'maven-central-temporary-error') {\n throw new ExternalHostError(err.err);\n }\n\n return fetchResult;\n}\n\nexport async function downloadHttpContent(\n http: Http,\n pkgUrl: URL | string,\n opts: HttpOptions = {},\n): Promise<string | null> {\n const fetchResult = await downloadHttpProtocol(http, pkgUrl, opts);\n return fetchResult.transform(({ data }) => data).unwrapOrNull();\n}\n\nfunction isS3NotFound(err: Error): boolean {\n return err.message === 'NotFound' || err.message === 'NoSuchKey';\n}\n\nexport async function downloadS3Protocol(\n pkgUrl: URL,\n): Promise<MavenFetchResult> {\n logger.trace({ url: pkgUrl.toString() }, `Attempting to load S3 dependency`);\n\n const s3Url = parseS3Url(pkgUrl);\n if (!s3Url) {\n return Result.err({ type: 'invalid-url' });\n }\n\n return await Result.wrap(() => {\n const command = new GetObjectCommand(s3Url);\n const client = getS3Client();\n return client.send(command);\n })\n .transform(\n async ({\n Body,\n LastModified,\n DeleteMarker,\n }): Promise<MavenFetchResult> => {\n if (DeleteMarker) {\n logger.trace(\n { failedUrl: pkgUrl.toString() },\n 'Maven S3 lookup error: DeleteMarker encountered',\n );\n return Result.err({ type: 'not-found' });\n }\n\n if (!(Body instanceof Readable)) {\n logger.debug(\n { failedUrl: pkgUrl.toString() },\n 'Maven S3 lookup error: unsupported Body type',\n );\n return Result.err({ type: 'unsupported-format' });\n }\n\n const data = await streamToString(Body);\n const result: MavenFetchSuccess = { data };\n\n const lastModified = asTimestamp(LastModified);\n if (lastModified) {\n result.lastModified = lastModified;\n }\n\n return Result.ok(result);\n },\n )\n .catch((err): MavenFetchResult => {\n if (!(err instanceof Error)) {\n return Result.err(err);\n }\n\n const failedUrl = pkgUrl.toString();\n\n if (err.name === 'CredentialsProviderError') {\n logger.debug(\n { failedUrl },\n 'Maven S3 lookup error: credentials provider error, check \"AWS_ACCESS_KEY_ID\" and \"AWS_SECRET_ACCESS_KEY\" variables',\n );\n return Result.err({ type: 'credentials-error' });\n }\n\n if (err.message === 'Region is missing') {\n logger.debug(\n { failedUrl },\n 'Maven S3 lookup error: missing region, check \"AWS_REGION\" variable',\n );\n return Result.err({ type: 'missing-aws-region' });\n }\n\n if (isS3NotFound(err)) {\n logger.trace({ failedUrl }, 'Maven S3 lookup error: object not found');\n return Result.err({ type: 'not-found' });\n }\n\n logger.debug({ failedUrl, err }, 'Maven S3 lookup error: unknown error');\n return Result.err({ type: 'unknown', err });\n });\n}\n\nexport async function downloadArtifactRegistryProtocol(\n http: Http,\n pkgUrl: URL,\n): Promise<MavenFetchResult> {\n const opts: HttpOptions = {};\n const host = pkgUrl.host;\n const path = pkgUrl.pathname;\n\n logger.trace({ host, path }, `Using google auth for Maven repository`);\n const auth = await getGoogleAuthToken();\n if (auth) {\n opts.headers = { authorization: `Basic ${auth}` };\n } else {\n logger.once.debug(\n { host, path },\n 'Could not get Google access token, using no auth',\n );\n }\n\n const url = pkgUrl.toString().replace('artifactregistry:', 'https:');\n\n return downloadHttpProtocol(http, url, opts);\n}\n\nfunction containsPlaceholder(str: string): boolean {\n return regEx(/\\${.*?}/g).test(str);\n}\n\nexport function getMavenUrl(\n dependency: MavenDependency,\n repoUrl: string,\n path: string,\n): URL {\n return new URL(\n `${dependency.dependencyUrl}/${path}`,\n ensureTrailingSlash(repoUrl),\n );\n}\n\nexport async function downloadMaven(\n http: Http,\n url: URL,\n): Promise<MavenFetchResult> {\n const protocol = url.protocol;\n\n let result: MavenFetchResult = Result.err({ type: 'unsupported-protocol' });\n\n if (isHttpUrl(url)) {\n result = await downloadHttpProtocol(http, url);\n }\n\n if (protocol === 'artifactregistry:') {\n result = await downloadArtifactRegistryProtocol(http, url);\n }\n\n if (protocol === 's3:') {\n result = await downloadS3Protocol(url);\n }\n\n return result.onError((err) => {\n if (err.type === 'unsupported-protocol') {\n logger.debug(\n { url: url.toString() },\n `Maven lookup error: unsupported protocol (${protocol})`,\n );\n }\n });\n}\n\nexport async function downloadMavenXml(\n http: Http,\n url: URL,\n): Promise<MavenFetchResult<XmlDocument>> {\n const rawResult = await downloadMaven(http, url);\n return rawResult.transform((result): MavenFetchResult<XmlDocument> => {\n try {\n return Result.ok({\n ...result,\n data: new XmlDocument(result.data),\n });\n } catch (err) {\n return Result.err({ type: 'xml-parse-error', err });\n }\n });\n}\n\nexport function getDependencyParts(packageName: string): MavenDependency {\n const [group, name] = packageName.split(':');\n const dependencyUrl = `${group.replace(regEx(/\\./g), '/')}/${name}`;\n return {\n display: packageName,\n group,\n name,\n dependencyUrl,\n };\n}\n\nfunction extractSnapshotVersion(metadata: XmlDocument): string | null {\n // Parse the maven-metadata.xml for the snapshot version and determine\n // the fixed version of the latest deployed snapshot.\n // The metadata descriptor can be found at\n // https://maven.apache.org/ref/3.3.3/maven-repository-metadata/repository-metadata.html\n //\n // Basically, we need to replace -SNAPSHOT with the artifact timestanp & build number,\n // so for example 1.0.0-SNAPSHOT will become 1.0.0-<timestamp>-<buildNumber>\n const version = metadata\n .descendantWithPath('version')\n ?.val?.replace('-SNAPSHOT', '');\n\n const snapshot = metadata.descendantWithPath('versioning.snapshot');\n const timestamp = snapshot?.childNamed('timestamp')?.val;\n const build = snapshot?.childNamed('buildNumber')?.val;\n\n // If we weren't able to parse out the required 3 version elements,\n // return null because we can't determine the fixed version of the latest snapshot.\n if (!version || !timestamp || !build) {\n return null;\n }\n return `${version}-${timestamp}-${build}`;\n}\n\nasync function getSnapshotFullVersion(\n http: Http,\n version: string,\n dependency: MavenDependency,\n repoUrl: string,\n): Promise<string | null> {\n // To determine what actual files are available for the snapshot, first we have to fetch and parse\n // the metadata located at http://<repo>/<group>/<artifact>/<version-SNAPSHOT>/maven-metadata.xml\n const metadataUrl = getMavenUrl(\n dependency,\n repoUrl,\n `${version}/maven-metadata.xml`,\n );\n\n const metadataXmlResult = await downloadMavenXml(http, metadataUrl);\n\n return metadataXmlResult\n .transform(({ data }) =>\n Result.wrapNullable(extractSnapshotVersion(data), {\n type: 'snapshot-extract-error',\n }),\n )\n .unwrapOrNull();\n}\n\nfunction isSnapshotVersion(version: string): boolean {\n if (version.endsWith('-SNAPSHOT')) {\n return true;\n }\n return false;\n}\n\nexport async function createUrlForDependencyPom(\n http: Http,\n version: string,\n dependency: MavenDependency,\n repoUrl: string,\n): Promise<string> {\n if (isSnapshotVersion(version)) {\n // By default, Maven snapshots are deployed to the repository with fixed file names.\n // Resolve the full, actual pom file name for the version.\n const fullVersion = await getSnapshotFullVersion(\n http,\n version,\n dependency,\n repoUrl,\n );\n\n // If we were able to resolve the version, use that, otherwise fall back to using -SNAPSHOT\n if (fullVersion !== null) {\n // TODO: types (#22198)\n return `${version}/${dependency.name}-${fullVersion}.pom`;\n }\n }\n\n // TODO: types (#22198)\n return `${version}/${dependency.name}-${version}.pom`;\n}\n\nexport async function getDependencyInfo(\n http: Http,\n dependency: MavenDependency,\n repoUrl: string,\n version: string,\n recursionLimit = 5,\n): Promise<DependencyInfo> {\n const path = await createUrlForDependencyPom(\n http,\n version,\n dependency,\n repoUrl,\n );\n\n const pomUrl = getMavenUrl(dependency, repoUrl, path);\n const pomXmlResult = await downloadMavenXml(http, pomUrl);\n const dependencyInfoResult = await pomXmlResult.transform(\n async ({ data: pomContent }) => {\n const result: DependencyInfo = {};\n\n const homepage = pomContent.valueWithPath('url');\n if (homepage && !containsPlaceholder(homepage)) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomContent.valueWithPath('scm.url');\n if (sourceUrl && !containsPlaceholder(sourceUrl)) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/^git@github.com\\//), 'https://github.com/');\n\n if (result.sourceUrl.startsWith('//')) {\n // most likely the result of us stripping scm:, git: etc\n // going with prepending https: here which should result in potential information retrival\n result.sourceUrl = `https:${result.sourceUrl}`;\n }\n }\n\n const relocation = pomContent.descendantWithPath(\n 'distributionManagement.relocation',\n );\n if (relocation) {\n const relocationGroup =\n relocation.valueWithPath('groupId') ?? dependency.group;\n const relocationName =\n relocation.valueWithPath('artifactId') ?? dependency.name;\n result.replacementName = `${relocationGroup}:${relocationName}`;\n const relocationVersion = relocation.valueWithPath('version');\n result.replacementVersion = relocationVersion ?? version;\n const relocationMessage = relocation.valueWithPath('message');\n if (relocationMessage) {\n result.deprecationMessage = relocationMessage;\n }\n }\n\n const groupId = pomContent.valueWithPath('groupId');\n if (groupId) {\n result.packageScope = groupId;\n }\n\n const parent = pomContent.childNamed('parent');\n if (\n recursionLimit > 0 &&\n parent &&\n (!result.sourceUrl || !result.homepage)\n ) {\n // if we found a parent and are missing some information\n // trying to get the scm/homepage information from it\n const [parentGroupId, parentArtifactId, parentVersion] = [\n 'groupId',\n 'artifactId',\n 'version',\n ].map((k) => parent.valueWithPath(k)?.replace(/\\s+/g, ''));\n if (parentGroupId && parentArtifactId && parentVersion) {\n const parentDisplayId = `${parentGroupId}:${parentArtifactId}`;\n const parentDependency = getDependencyParts(parentDisplayId);\n const parentInformation = await getDependencyInfo(\n http,\n parentDependency,\n repoUrl,\n parentVersion,\n recursionLimit - 1,\n );\n if (!result.sourceUrl && parentInformation.sourceUrl) {\n result.sourceUrl = parentInformation.sourceUrl;\n }\n if (!result.homepage && parentInformation.homepage) {\n result.homepage = parentInformation.homepage;\n }\n }\n }\n\n return result;\n },\n );\n\n return dependencyInfoResult.unwrapOr({});\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/maven/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\nimport { GetObjectCommand } from '@aws-sdk/client-s3';\nimport { XmlDocument } from 'xmldoc';\nimport { HOST_DISABLED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { type Http, HttpError } from '../../../util/http';\nimport { PackageHttpCacheProvider } from '../../../util/http/cache/package-http-cache-provider';\nimport type { HttpOptions, HttpResponse } from '../../../util/http/types';\nimport { regEx } from '../../../util/regex';\nimport { Result } from '../../../util/result';\nimport { getS3Client, parseS3Url } from '../../../util/s3';\nimport { streamToString } from '../../../util/streams';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash, isHttpUrl, parseUrl } from '../../../util/url';\nimport { getGoogleAuthToken } from '../util';\nimport { MAVEN_REPO } from './common';\nimport type {\n DependencyInfo,\n MavenDependency,\n MavenFetchResult,\n MavenFetchSuccess,\n} from './types';\n\nfunction getHost(url: string): string | undefined {\n return parseUrl(url)?.host;\n}\n\nfunction isTemporaryError(err: HttpError): boolean {\n if (err.code === 'ECONNRESET') {\n return true;\n }\n\n if (err.response) {\n const status = err.response.statusCode;\n return status === 429 || (status >= 500 && status < 600);\n }\n\n return false;\n}\n\nfunction isHostError(err: HttpError): boolean {\n return err.code === 'ETIMEDOUT';\n}\n\nfunction isNotFoundError(err: HttpError): boolean {\n return err.code === 'ENOTFOUND' || err.response?.statusCode === 404;\n}\n\nfunction isPermissionsIssue(err: HttpError): boolean {\n const status = err.response?.statusCode;\n return status === 401 || status === 403;\n}\n\nfunction isConnectionError(err: HttpError): boolean {\n return (\n err.code === 'EAI_AGAIN' ||\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ECONNREFUSED'\n );\n}\n\nfunction isUnsupportedHostError(err: HttpError): boolean {\n return err.name === 'UnsupportedProtocolError';\n}\n\nconst cacheProvider = new PackageHttpCacheProvider({\n namespace: 'datasource-maven:cache-provider',\n ttlMinutes: 7 * 24 * 60,\n checkCacheControlHeader: false, // Maven doesn't respond with `cache-control` headers\n});\n\nexport async function downloadHttpProtocol(\n http: Http,\n pkgUrl: URL | string,\n opts: HttpOptions = {},\n): Promise<MavenFetchResult> {\n const url = pkgUrl.toString();\n const fetchResult = await Result.wrap<HttpResponse, Error>(\n http.getText(url, { ...opts, cacheProvider }),\n )\n .transform((res): MavenFetchSuccess => {\n const result: MavenFetchSuccess = { data: res.body };\n\n if (!res.authorization) {\n result.isCacheable = true;\n }\n\n const lastModified = asTimestamp(res?.headers?.['last-modified']);\n if (lastModified) {\n result.lastModified = lastModified;\n }\n\n return result;\n })\n .catch((err): MavenFetchResult => {\n /* v8 ignore start: never happens, needs for type narrowing */\n if (!(err instanceof HttpError)) {\n return Result.err({ type: 'unknown', err });\n } /* v8 ignore stop */\n\n const failedUrl = url;\n if (err.message === HOST_DISABLED) {\n logger.trace({ failedUrl }, 'Host disabled');\n return Result.err({ type: 'host-disabled' });\n }\n\n if (isNotFoundError(err)) {\n logger.trace({ failedUrl }, `Url not found`);\n return Result.err({ type: 'not-found' });\n }\n\n if (isHostError(err)) {\n logger.debug(`Cannot connect to host ${failedUrl}`);\n return Result.err({ type: 'host-error' });\n }\n\n if (isPermissionsIssue(err)) {\n logger.debug(\n `Dependency lookup unauthorized. Please add authentication with a hostRule for ${failedUrl}`,\n );\n return Result.err({ type: 'permission-issue' });\n }\n\n if (isTemporaryError(err)) {\n logger.debug({ failedUrl, err }, 'Temporary error');\n if (getHost(url) === getHost(MAVEN_REPO)) {\n return Result.err({ type: 'maven-central-temporary-error', err });\n } else {\n return Result.err({ type: 'temporary-error' });\n }\n }\n\n if (isConnectionError(err)) {\n logger.debug(`Connection refused to maven registry ${failedUrl}`);\n return Result.err({ type: 'connection-error' });\n }\n\n if (isUnsupportedHostError(err)) {\n logger.debug(`Unsupported host ${failedUrl}`);\n return Result.err({ type: 'unsupported-host' });\n }\n\n logger.info({ failedUrl, err }, 'Unknown HTTP download error');\n return Result.err({ type: 'unknown', err });\n });\n\n const { err } = fetchResult.unwrap();\n if (err?.type === 'maven-central-temporary-error') {\n throw new ExternalHostError(err.err);\n }\n\n return fetchResult;\n}\n\nexport async function downloadHttpContent(\n http: Http,\n pkgUrl: URL | string,\n opts: HttpOptions = {},\n): Promise<string | null> {\n const fetchResult = await downloadHttpProtocol(http, pkgUrl, opts);\n return fetchResult.transform(({ data }) => data).unwrapOrNull();\n}\n\nfunction isS3NotFound(err: Error): boolean {\n return err.message === 'NotFound' || err.message === 'NoSuchKey';\n}\n\nexport async function downloadS3Protocol(\n pkgUrl: URL,\n): Promise<MavenFetchResult> {\n logger.trace({ url: pkgUrl.toString() }, `Attempting to load S3 dependency`);\n\n const s3Url = parseS3Url(pkgUrl);\n if (!s3Url) {\n return Result.err({ type: 'invalid-url' });\n }\n\n return await Result.wrap(() => {\n const command = new GetObjectCommand(s3Url);\n const client = getS3Client();\n return client.send(command);\n })\n .transform(\n async ({\n Body,\n LastModified,\n DeleteMarker,\n }): Promise<MavenFetchResult> => {\n if (DeleteMarker) {\n logger.trace(\n { failedUrl: pkgUrl.toString() },\n 'Maven S3 lookup error: DeleteMarker encountered',\n );\n return Result.err({ type: 'not-found' });\n }\n\n if (!(Body instanceof Readable)) {\n logger.debug(\n { failedUrl: pkgUrl.toString() },\n 'Maven S3 lookup error: unsupported Body type',\n );\n return Result.err({ type: 'unsupported-format' });\n }\n\n const data = await streamToString(Body);\n const result: MavenFetchSuccess = { data };\n\n const lastModified = asTimestamp(LastModified);\n if (lastModified) {\n result.lastModified = lastModified;\n }\n\n return Result.ok(result);\n },\n )\n .catch((err): MavenFetchResult => {\n if (!(err instanceof Error)) {\n return Result.err(err);\n }\n\n const failedUrl = pkgUrl.toString();\n\n if (err.name === 'CredentialsProviderError') {\n logger.debug(\n { failedUrl },\n 'Maven S3 lookup error: credentials provider error, check \"AWS_ACCESS_KEY_ID\" and \"AWS_SECRET_ACCESS_KEY\" variables',\n );\n return Result.err({ type: 'credentials-error' });\n }\n\n if (err.message === 'Region is missing') {\n logger.debug(\n { failedUrl },\n 'Maven S3 lookup error: missing region, check \"AWS_REGION\" variable',\n );\n return Result.err({ type: 'missing-aws-region' });\n }\n\n if (isS3NotFound(err)) {\n logger.trace({ failedUrl }, 'Maven S3 lookup error: object not found');\n return Result.err({ type: 'not-found' });\n }\n\n logger.debug({ failedUrl, err }, 'Maven S3 lookup error: unknown error');\n return Result.err({ type: 'unknown', err });\n });\n}\n\nexport async function downloadArtifactRegistryProtocol(\n http: Http,\n pkgUrl: URL,\n): Promise<MavenFetchResult> {\n const opts: HttpOptions = {};\n const host = pkgUrl.host;\n const path = pkgUrl.pathname;\n\n logger.trace({ host, path }, `Using google auth for Maven repository`);\n const auth = await getGoogleAuthToken();\n if (auth) {\n opts.headers = { authorization: `Basic ${auth}` };\n } else {\n logger.once.debug(\n { host, path },\n 'Could not get Google access token, using no auth',\n );\n }\n\n const url = pkgUrl.toString().replace('artifactregistry:', 'https:');\n\n return downloadHttpProtocol(http, url, opts);\n}\n\nfunction containsPlaceholder(str: string): boolean {\n return regEx(/\\${.*?}/g).test(str);\n}\n\nexport function getMavenUrl(\n dependency: MavenDependency,\n repoUrl: string,\n path: string,\n): URL {\n return new URL(\n `${dependency.dependencyUrl}/${path}`,\n ensureTrailingSlash(repoUrl),\n );\n}\n\nexport async function downloadMaven(\n http: Http,\n url: URL,\n): Promise<MavenFetchResult> {\n const protocol = url.protocol;\n\n let result: MavenFetchResult = Result.err({ type: 'unsupported-protocol' });\n\n if (isHttpUrl(url)) {\n result = await downloadHttpProtocol(http, url);\n }\n\n if (protocol === 'artifactregistry:') {\n result = await downloadArtifactRegistryProtocol(http, url);\n }\n\n if (protocol === 's3:') {\n result = await downloadS3Protocol(url);\n }\n\n return result.onError((err) => {\n if (err.type === 'unsupported-protocol') {\n logger.debug(\n { url: url.toString() },\n `Maven lookup error: unsupported protocol (${protocol})`,\n );\n }\n });\n}\n\nexport async function downloadMavenXml(\n http: Http,\n url: URL,\n): Promise<MavenFetchResult<XmlDocument>> {\n const rawResult = await downloadMaven(http, url);\n return rawResult.transform((result): MavenFetchResult<XmlDocument> => {\n try {\n return Result.ok({\n ...result,\n data: new XmlDocument(result.data),\n });\n } catch (err) {\n return Result.err({ type: 'xml-parse-error', err });\n }\n });\n}\n\nexport function getDependencyParts(packageName: string): MavenDependency {\n const [group, name] = packageName.split(':');\n const dependencyUrl = `${group.replace(regEx(/\\./g), '/')}/${name}`;\n return {\n display: packageName,\n group,\n name,\n dependencyUrl,\n };\n}\n\nfunction extractSnapshotVersion(metadata: XmlDocument): string | null {\n // Parse the maven-metadata.xml for the snapshot version and determine\n // the fixed version of the latest deployed snapshot.\n // The metadata descriptor can be found at\n // https://maven.apache.org/ref/3.3.3/maven-repository-metadata/repository-metadata.html\n //\n // Basically, we need to replace -SNAPSHOT with the artifact timestanp & build number,\n // so for example 1.0.0-SNAPSHOT will become 1.0.0-<timestamp>-<buildNumber>\n const version = metadata\n .descendantWithPath('version')\n ?.val?.replace('-SNAPSHOT', '');\n\n const snapshot = metadata.descendantWithPath('versioning.snapshot');\n const timestamp = snapshot?.childNamed('timestamp')?.val;\n const build = snapshot?.childNamed('buildNumber')?.val;\n\n // If we weren't able to parse out the required 3 version elements,\n // return null because we can't determine the fixed version of the latest snapshot.\n if (!version || !timestamp || !build) {\n return null;\n }\n return `${version}-${timestamp}-${build}`;\n}\n\nasync function getSnapshotFullVersion(\n http: Http,\n version: string,\n dependency: MavenDependency,\n repoUrl: string,\n): Promise<string | null> {\n // To determine what actual files are available for the snapshot, first we have to fetch and parse\n // the metadata located at http://<repo>/<group>/<artifact>/<version-SNAPSHOT>/maven-metadata.xml\n const metadataUrl = getMavenUrl(\n dependency,\n repoUrl,\n `${version}/maven-metadata.xml`,\n );\n\n const metadataXmlResult = await downloadMavenXml(http, metadataUrl);\n\n return metadataXmlResult\n .transform(({ data }) =>\n Result.wrapNullable(extractSnapshotVersion(data), {\n type: 'snapshot-extract-error',\n }),\n )\n .unwrapOrNull();\n}\n\nfunction isSnapshotVersion(version: string): boolean {\n if (version.endsWith('-SNAPSHOT')) {\n return true;\n }\n return false;\n}\n\nexport async function createUrlForDependencyPom(\n http: Http,\n version: string,\n dependency: MavenDependency,\n repoUrl: string,\n): Promise<string> {\n if (isSnapshotVersion(version)) {\n // By default, Maven snapshots are deployed to the repository with fixed file names.\n // Resolve the full, actual pom file name for the version.\n const fullVersion = await getSnapshotFullVersion(\n http,\n version,\n dependency,\n repoUrl,\n );\n\n // If we were able to resolve the version, use that, otherwise fall back to using -SNAPSHOT\n if (fullVersion !== null) {\n // TODO: types (#22198)\n return `${version}/${dependency.name}-${fullVersion}.pom`;\n }\n }\n\n // TODO: types (#22198)\n return `${version}/${dependency.name}-${version}.pom`;\n}\n\nexport async function getDependencyInfo(\n http: Http,\n dependency: MavenDependency,\n repoUrl: string,\n version: string,\n recursionLimit = 5,\n): Promise<DependencyInfo> {\n const path = await createUrlForDependencyPom(\n http,\n version,\n dependency,\n repoUrl,\n );\n\n const pomUrl = getMavenUrl(dependency, repoUrl, path);\n const pomXmlResult = await downloadMavenXml(http, pomUrl);\n const dependencyInfoResult = await pomXmlResult.transform(\n async ({ data: pomContent }) => {\n const result: DependencyInfo = {};\n\n const homepage = pomContent.valueWithPath('url');\n if (homepage && !containsPlaceholder(homepage)) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomContent.valueWithPath('scm.url');\n if (sourceUrl && !containsPlaceholder(sourceUrl)) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/^git@github.com\\//), 'https://github.com/');\n\n if (result.sourceUrl.startsWith('//')) {\n // most likely the result of us stripping scm:, git: etc\n // going with prepending https: here which should result in potential information retrival\n result.sourceUrl = `https:${result.sourceUrl}`;\n }\n }\n\n const relocation = pomContent.descendantWithPath(\n 'distributionManagement.relocation',\n );\n if (relocation) {\n const relocationGroup =\n relocation.valueWithPath('groupId') ?? dependency.group;\n const relocationName =\n relocation.valueWithPath('artifactId') ?? dependency.name;\n result.replacementName = `${relocationGroup}:${relocationName}`;\n const relocationVersion = relocation.valueWithPath('version');\n result.replacementVersion = relocationVersion ?? version;\n const relocationMessage = relocation.valueWithPath('message');\n if (relocationMessage) {\n result.deprecationMessage = relocationMessage;\n }\n }\n\n const groupId = pomContent.valueWithPath('groupId');\n if (groupId) {\n result.packageScope = groupId;\n }\n\n const parent = pomContent.childNamed('parent');\n if (\n recursionLimit > 0 &&\n parent &&\n (!result.sourceUrl || !result.homepage)\n ) {\n // if we found a parent and are missing some information\n // trying to get the scm/homepage information from it\n const [parentGroupId, parentArtifactId, parentVersion] = [\n 'groupId',\n 'artifactId',\n 'version',\n ].map((k) => parent.valueWithPath(k)?.replace(/\\s+/g, ''));\n if (parentGroupId && parentArtifactId && parentVersion) {\n const parentDisplayId = `${parentGroupId}:${parentArtifactId}`;\n const parentDependency = getDependencyParts(parentDisplayId);\n const parentInformation = await getDependencyInfo(\n http,\n parentDependency,\n repoUrl,\n parentVersion,\n recursionLimit - 1,\n );\n if (!result.sourceUrl && parentInformation.sourceUrl) {\n result.sourceUrl = parentInformation.sourceUrl;\n }\n if (!result.homepage && parentInformation.homepage) {\n result.homepage = parentInformation.homepage;\n }\n }\n }\n\n return result;\n },\n );\n\n return dependencyInfoResult.unwrapOr({});\n}\n"]}
@@ -7,5 +7,5 @@ export interface DecoratorCachedRecord {
7
7
  value: unknown;
8
8
  cachedAt: string;
9
9
  }
10
- export type PackageCacheNamespace = '_test-namespace' | 'changelog-bitbucket-notes@v2' | 'changelog-bitbucket-release' | 'changelog-bitbucket-server-notes@v2' | 'changelog-bitbucket-server-release' | 'changelog-gitea-notes@v2' | 'changelog-gitea-release' | 'changelog-github-notes@v2' | 'changelog-github-release' | 'changelog-gitlab-notes@v2' | 'changelog-gitlab-release' | 'datasource-artifactory' | 'datasource-aws-machine-image' | 'datasource-aws-rds' | 'datasource-aws-eks-addon' | 'datasource-azure-bicep-resource' | 'datasource-azure-pipelines-tasks' | 'datasource-bazel' | 'datasource-bitbucket-tags' | 'datasource-bitbucket-server-tags' | 'datasource-bitrise' | 'datasource-buildpacks-registry' | 'datasource-cdnjs' | 'datasource-conan' | 'datasource-conda' | 'datasource-cpan' | 'datasource-crate-metadata' | 'datasource-crate' | 'datasource-deb' | 'datasource-deno' | 'datasource-docker-architecture' | 'datasource-docker-hub-cache' | 'datasource-docker-digest' | 'datasource-docker-hub-tags' | 'datasource-docker-imageconfig' | 'datasource-docker-labels' | 'datasource-docker-releases-v2' | 'datasource-docker-tags' | 'datasource-dotnet-version' | 'datasource-endoflife-date' | 'datasource-galaxy-collection' | 'datasource-galaxy' | 'datasource-git-refs' | 'datasource-git-tags' | 'datasource-git' | 'datasource-gitea-releases' | 'datasource-gitea-tags' | 'datasource-github-release-attachments' | 'datasource-gitlab-packages' | 'datasource-gitlab-releases' | 'datasource-gitlab-tags' | 'datasource-glasskube-packages' | 'datasource-go-direct' | 'datasource-go-proxy' | 'datasource-go' | 'datasource-golang-version' | 'datasource-gradle-version' | 'datasource-helm' | 'datasource-hermit' | 'datasource-hex' | 'datasource-hexpm-bob' | 'datasource-java-version' | 'datasource-jenkins-plugins' | 'datasource-maven' | 'datasource-maven:head-requests-timeout' | 'datasource-maven:head-requests' | 'datasource-maven:metadata-xml' | 'datasource-node-version' | 'datasource-npm:cache-provider' | 'datasource-nuget-v3' | 'datasource-orb' | 'datasource-packagist' | 'datasource-pod' | 'datasource-python-version' | 'datasource-releases' | 'datasource-repology' | 'datasource-ruby-version' | 'datasource-rubygems' | 'datasource-sbt-package' | 'datasource-terraform-module' | 'datasource-terraform-provider' | 'datasource-terraform' | 'datasource-unity3d' | 'github-releases-datasource-v2' | 'github-tags-datasource-v2' | 'merge-confidence' | 'preset' | 'terraform-provider-hash' | 'url-sha256';
10
+ export type PackageCacheNamespace = '_test-namespace' | 'changelog-bitbucket-notes@v2' | 'changelog-bitbucket-release' | 'changelog-bitbucket-server-notes@v2' | 'changelog-bitbucket-server-release' | 'changelog-gitea-notes@v2' | 'changelog-gitea-release' | 'changelog-github-notes@v2' | 'changelog-github-release' | 'changelog-gitlab-notes@v2' | 'changelog-gitlab-release' | 'datasource-artifactory' | 'datasource-aws-machine-image' | 'datasource-aws-rds' | 'datasource-aws-eks-addon' | 'datasource-azure-bicep-resource' | 'datasource-azure-pipelines-tasks' | 'datasource-bazel' | 'datasource-bitbucket-tags' | 'datasource-bitbucket-server-tags' | 'datasource-bitrise' | 'datasource-buildpacks-registry' | 'datasource-cdnjs' | 'datasource-conan' | 'datasource-conda' | 'datasource-cpan' | 'datasource-crate-metadata' | 'datasource-crate' | 'datasource-deb' | 'datasource-deno' | 'datasource-docker-architecture' | 'datasource-docker-hub-cache' | 'datasource-docker-digest' | 'datasource-docker-hub-tags' | 'datasource-docker-imageconfig' | 'datasource-docker-labels' | 'datasource-docker-releases-v2' | 'datasource-docker-tags' | 'datasource-dotnet-version' | 'datasource-endoflife-date' | 'datasource-galaxy-collection' | 'datasource-galaxy' | 'datasource-git-refs' | 'datasource-git-tags' | 'datasource-git' | 'datasource-gitea-releases' | 'datasource-gitea-tags' | 'datasource-github-release-attachments' | 'datasource-gitlab-packages' | 'datasource-gitlab-releases' | 'datasource-gitlab-tags' | 'datasource-glasskube-packages' | 'datasource-go-direct' | 'datasource-go-proxy' | 'datasource-go' | 'datasource-golang-version' | 'datasource-gradle-version' | 'datasource-helm' | 'datasource-hermit' | 'datasource-hex' | 'datasource-hexpm-bob' | 'datasource-java-version' | 'datasource-jenkins-plugins' | 'datasource-maven:cache-provider' | 'datasource-maven:postprocess-reject' | 'datasource-node-version' | 'datasource-npm:cache-provider' | 'datasource-nuget-v3' | 'datasource-orb' | 'datasource-packagist' | 'datasource-pod' | 'datasource-python-version' | 'datasource-releases' | 'datasource-repology' | 'datasource-ruby-version' | 'datasource-rubygems' | 'datasource-sbt-package' | 'datasource-terraform-module' | 'datasource-terraform-provider' | 'datasource-terraform' | 'datasource-unity3d' | 'github-releases-datasource-v2' | 'github-tags-datasource-v2' | 'merge-confidence' | 'preset' | 'terraform-provider-hash' | 'url-sha256';
11
11
  export type CombinedKey = `datasource-mem:pkg-fetch:${PackageCacheNamespace}:${string}`;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/util/cache/package/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PackageCache {\n get<T = any>(namespace: string, key: string): Promise<T | undefined>;\n\n set<T = any>(\n namespace: string,\n key: string,\n value: T,\n ttlMinutes?: number,\n ): Promise<void>;\n\n cleanup?(): Promise<void>;\n}\n\nexport interface DecoratorCachedRecord {\n value: unknown;\n cachedAt: string;\n}\n\nexport type PackageCacheNamespace =\n | '_test-namespace'\n | 'changelog-bitbucket-notes@v2'\n | 'changelog-bitbucket-release'\n | 'changelog-bitbucket-server-notes@v2'\n | 'changelog-bitbucket-server-release'\n | 'changelog-gitea-notes@v2'\n | 'changelog-gitea-release'\n | 'changelog-github-notes@v2'\n | 'changelog-github-release'\n | 'changelog-gitlab-notes@v2'\n | 'changelog-gitlab-release'\n | 'datasource-artifactory'\n | 'datasource-aws-machine-image'\n | 'datasource-aws-rds'\n | 'datasource-aws-eks-addon'\n | 'datasource-azure-bicep-resource'\n | 'datasource-azure-pipelines-tasks'\n | 'datasource-bazel'\n | 'datasource-bitbucket-tags'\n | 'datasource-bitbucket-server-tags'\n | 'datasource-bitrise'\n | 'datasource-buildpacks-registry'\n | 'datasource-cdnjs'\n | 'datasource-conan'\n | 'datasource-conda'\n | 'datasource-cpan'\n | 'datasource-crate-metadata'\n | 'datasource-crate'\n | 'datasource-deb'\n | 'datasource-deno'\n | 'datasource-docker-architecture'\n | 'datasource-docker-hub-cache'\n | 'datasource-docker-digest'\n | 'datasource-docker-hub-tags'\n | 'datasource-docker-imageconfig'\n | 'datasource-docker-labels'\n | 'datasource-docker-releases-v2'\n | 'datasource-docker-tags'\n | 'datasource-dotnet-version'\n | 'datasource-endoflife-date'\n | 'datasource-galaxy-collection'\n | 'datasource-galaxy'\n | 'datasource-git-refs'\n | 'datasource-git-tags'\n | 'datasource-git'\n | 'datasource-gitea-releases'\n | 'datasource-gitea-tags'\n | 'datasource-github-release-attachments'\n | 'datasource-gitlab-packages'\n | 'datasource-gitlab-releases'\n | 'datasource-gitlab-tags'\n | 'datasource-glasskube-packages'\n | 'datasource-go-direct'\n | 'datasource-go-proxy'\n | 'datasource-go'\n | 'datasource-golang-version'\n | 'datasource-gradle-version'\n | 'datasource-helm'\n | 'datasource-hermit'\n | 'datasource-hex'\n | 'datasource-hexpm-bob'\n | 'datasource-java-version'\n | 'datasource-jenkins-plugins'\n | 'datasource-maven'\n | 'datasource-maven:head-requests-timeout'\n | 'datasource-maven:head-requests'\n | 'datasource-maven:metadata-xml'\n | 'datasource-node-version'\n | 'datasource-npm:cache-provider'\n | 'datasource-nuget-v3'\n | 'datasource-orb'\n | 'datasource-packagist'\n | 'datasource-pod'\n | 'datasource-python-version'\n | 'datasource-releases'\n | 'datasource-repology'\n | 'datasource-ruby-version'\n | 'datasource-rubygems'\n | 'datasource-sbt-package'\n | 'datasource-terraform-module'\n | 'datasource-terraform-provider'\n | 'datasource-terraform'\n | 'datasource-unity3d'\n | 'github-releases-datasource-v2'\n | 'github-tags-datasource-v2'\n | 'merge-confidence'\n | 'preset'\n | 'terraform-provider-hash'\n | 'url-sha256';\n\nexport type CombinedKey =\n `datasource-mem:pkg-fetch:${PackageCacheNamespace}:${string}`;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/util/cache/package/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PackageCache {\n get<T = any>(namespace: string, key: string): Promise<T | undefined>;\n\n set<T = any>(\n namespace: string,\n key: string,\n value: T,\n ttlMinutes?: number,\n ): Promise<void>;\n\n cleanup?(): Promise<void>;\n}\n\nexport interface DecoratorCachedRecord {\n value: unknown;\n cachedAt: string;\n}\n\nexport type PackageCacheNamespace =\n | '_test-namespace'\n | 'changelog-bitbucket-notes@v2'\n | 'changelog-bitbucket-release'\n | 'changelog-bitbucket-server-notes@v2'\n | 'changelog-bitbucket-server-release'\n | 'changelog-gitea-notes@v2'\n | 'changelog-gitea-release'\n | 'changelog-github-notes@v2'\n | 'changelog-github-release'\n | 'changelog-gitlab-notes@v2'\n | 'changelog-gitlab-release'\n | 'datasource-artifactory'\n | 'datasource-aws-machine-image'\n | 'datasource-aws-rds'\n | 'datasource-aws-eks-addon'\n | 'datasource-azure-bicep-resource'\n | 'datasource-azure-pipelines-tasks'\n | 'datasource-bazel'\n | 'datasource-bitbucket-tags'\n | 'datasource-bitbucket-server-tags'\n | 'datasource-bitrise'\n | 'datasource-buildpacks-registry'\n | 'datasource-cdnjs'\n | 'datasource-conan'\n | 'datasource-conda'\n | 'datasource-cpan'\n | 'datasource-crate-metadata'\n | 'datasource-crate'\n | 'datasource-deb'\n | 'datasource-deno'\n | 'datasource-docker-architecture'\n | 'datasource-docker-hub-cache'\n | 'datasource-docker-digest'\n | 'datasource-docker-hub-tags'\n | 'datasource-docker-imageconfig'\n | 'datasource-docker-labels'\n | 'datasource-docker-releases-v2'\n | 'datasource-docker-tags'\n | 'datasource-dotnet-version'\n | 'datasource-endoflife-date'\n | 'datasource-galaxy-collection'\n | 'datasource-galaxy'\n | 'datasource-git-refs'\n | 'datasource-git-tags'\n | 'datasource-git'\n | 'datasource-gitea-releases'\n | 'datasource-gitea-tags'\n | 'datasource-github-release-attachments'\n | 'datasource-gitlab-packages'\n | 'datasource-gitlab-releases'\n | 'datasource-gitlab-tags'\n | 'datasource-glasskube-packages'\n | 'datasource-go-direct'\n | 'datasource-go-proxy'\n | 'datasource-go'\n | 'datasource-golang-version'\n | 'datasource-gradle-version'\n | 'datasource-helm'\n | 'datasource-hermit'\n | 'datasource-hex'\n | 'datasource-hexpm-bob'\n | 'datasource-java-version'\n | 'datasource-jenkins-plugins'\n | 'datasource-maven:cache-provider'\n | 'datasource-maven:postprocess-reject'\n | 'datasource-node-version'\n | 'datasource-npm:cache-provider'\n | 'datasource-nuget-v3'\n | 'datasource-orb'\n | 'datasource-packagist'\n | 'datasource-pod'\n | 'datasource-python-version'\n | 'datasource-releases'\n | 'datasource-repology'\n | 'datasource-ruby-version'\n | 'datasource-rubygems'\n | 'datasource-sbt-package'\n | 'datasource-terraform-module'\n | 'datasource-terraform-provider'\n | 'datasource-terraform'\n | 'datasource-unity3d'\n | 'github-releases-datasource-v2'\n | 'github-tags-datasource-v2'\n | 'merge-confidence'\n | 'preset'\n | 'terraform-provider-hash'\n | 'url-sha256';\n\nexport type CombinedKey =\n `datasource-mem:pkg-fetch:${PackageCacheNamespace}:${string}`;\n"]}
@@ -17,6 +17,7 @@ const external_host_error_1 = require("../../types/errors/external-host-error");
17
17
  const packageCache = tslib_1.__importStar(require("../cache/package"));
18
18
  const hostRules = tslib_1.__importStar(require("../host-rules"));
19
19
  const http_1 = require("../http");
20
+ const memory_http_cache_provider_1 = require("../http/cache/memory-http-cache-provider");
20
21
  const regex_1 = require("../regex");
21
22
  const url_1 = require("../url");
22
23
  const common_1 = require("./common");
@@ -131,7 +132,9 @@ async function queryApi(datasource, packageName, currentVersion, newVersion) {
131
132
  }
132
133
  let confidence = 'neutral';
133
134
  try {
134
- const res = (await http.getJsonUnchecked(url)).body;
135
+ const res = (await http.getJsonUnchecked(url, {
136
+ cacheProvider: memory_http_cache_provider_1.memCacheProvider,
137
+ })).body;
135
138
  if (isMergeConfidence(res.confidence)) {
136
139
  confidence = res.confidence;
137
140
  }