renovate 44.70.1 → 44.71.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.
- package/dist/config/presets/internal/workarounds.preset.js +12 -1
- package/dist/config/presets/internal/workarounds.preset.js.map +1 -1
- package/dist/data/monorepo.js +1 -0
- package/dist/logger/utils.js +1 -1
- package/dist/logger/utils.js.map +1 -1
- package/dist/util/http/github.js +6 -6
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/gitlab.js +5 -5
- package/dist/util/http/gitlab.js.map +1 -1
- package/dist/util/http/host-rules.js.map +1 -1
- package/dist/util/http/http.d.ts +2 -2
- package/dist/util/http/http.js +2 -1
- package/dist/util/http/http.js.map +1 -1
- package/dist/util/http/util.js +1 -1
- package/dist/util/http/util.js.map +1 -1
- package/package.json +2 -2
- package/renovate-schema.json +2 -2
|
@@ -21,7 +21,8 @@ const presets = {
|
|
|
21
21
|
"workarounds:k3sKubernetesVersioning",
|
|
22
22
|
"workarounds:rke2KubernetesVersioning",
|
|
23
23
|
"workarounds:libericaJdkDockerVersioning",
|
|
24
|
-
"workarounds:ubuntuDockerVersioning"
|
|
24
|
+
"workarounds:ubuntuDockerVersioning",
|
|
25
|
+
"workarounds:groupings"
|
|
25
26
|
],
|
|
26
27
|
overrideDescription: ["Apply crowd-sourced workarounds for known problems with packages."]
|
|
27
28
|
},
|
|
@@ -107,6 +108,16 @@ const presets = {
|
|
|
107
108
|
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(?:-security-(?<build>\\d+))?(?:-(?<compatibility>.*))?$"
|
|
108
109
|
}]
|
|
109
110
|
},
|
|
111
|
+
groupings: {
|
|
112
|
+
description: "Groupings for specific package updates.",
|
|
113
|
+
packageRules: [{
|
|
114
|
+
description: "Group commander major updates, they depend on each other.",
|
|
115
|
+
groupName: "commander",
|
|
116
|
+
matchDatasources: ["npm"],
|
|
117
|
+
matchPackageNames: ["@commander-js/extra-typings", "commander"],
|
|
118
|
+
matchUpdateTypes: ["major"]
|
|
119
|
+
}]
|
|
120
|
+
},
|
|
110
121
|
ignoreHttp4sDigestMilestones: {
|
|
111
122
|
description: "Ignore `http4s` digest-based `1.x` milestones.",
|
|
112
123
|
packageRules: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workarounds.preset.js","names":[],"sources":["../../../../lib/config/presets/internal/workarounds.preset.ts"],"sourcesContent":["import type { Preset } from '../types.ts';\n\nexport const presets: Record<string, Preset> = {\n all: {\n extends: [\n 'workarounds:mavenCommonsAncientVersion',\n 'workarounds:ignoreSpringCloudNumeric',\n 'workarounds:ignoreWeb3jCoreWithOldReleaseTimestamp',\n 'workarounds:ignoreHttp4sDigestMilestones',\n 'workarounds:typesNodeVersioning',\n 'workarounds:nodeDockerVersioning',\n 'workarounds:doNotUpgradeFromAlpineStableToEdge',\n 'workarounds:supportRedHatImageVersion',\n 'workarounds:javaLTSVersions',\n 'workarounds:disableEclipseLifecycleMapping',\n 'workarounds:disableGradleReplacements',\n 'workarounds:disableMavenParentRoot',\n 'workarounds:containerbase',\n 'workarounds:bitnamiDockerImageVersioning',\n 'workarounds:clamavDockerImageVersioning',\n 'workarounds:grafanaDockerImageVersioning',\n 'workarounds:k3sKubernetesVersioning',\n 'workarounds:rke2KubernetesVersioning',\n 'workarounds:libericaJdkDockerVersioning',\n 'workarounds:ubuntuDockerVersioning',\n ],\n overrideDescription: [\n 'Apply crowd-sourced workarounds for known problems with packages.',\n ],\n },\n bitnamiDockerImageVersioning: {\n description: 'Use custom regex versioning for bitnami images',\n packageRules: [\n {\n matchCurrentValue:\n '/^(?<major>\\\\d+)(?:\\\\.(?<minor>\\\\d+)(?:\\\\.(?<patch>\\\\d+))?)?-(?<compatibility>.+)-(?<build>\\\\d+)(?:-r(?<revision>\\\\d+))?$/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bitnami/**',\n 'docker.io/bitnami/**',\n 'gcr.io/bitnami-containers/**',\n '*-docker.pkg.dev/vmw-app-catalog/**',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)(?:\\\\.(?<minor>\\\\d+)(?:\\\\.(?<patch>\\\\d+))?)?(:?-(?<compatibility>.+)-(?<build>\\\\d+)(?:-r(?<revision>\\\\d+))?)?$',\n },\n ],\n },\n clamavDockerImageVersioning: {\n description: 'Use custom regex versioning for ClamAV images',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: ['clamav/clamav', 'clamav/clamav-debian'],\n versioning:\n 'regex:^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)(\\\\.(?<patch>\\\\d+))?(-(?<build>\\\\d+))?(_(?<compatibility>.+))?$',\n },\n ],\n },\n containerbase: {\n description: 'Add some containerbase overrides.',\n packageRules: [\n {\n description:\n 'Use node versioning for `(containerbase|renovate)/node` images',\n matchDatasources: ['docker'],\n matchPackageNames: [\n '/^(?:(?:docker|ghcr)\\\\.io/)?(?:containerbase|renovate)/node$/',\n ],\n versioning: 'node',\n },\n ],\n },\n disableEclipseLifecycleMapping: {\n description: 'Disable Eclipse m2e lifecycle-mapping placeholder package.',\n packageRules: [\n {\n enabled: false,\n matchDatasources: ['maven'],\n matchPackageNames: ['org.eclipse.m2e:lifecycle-mapping'],\n },\n ],\n },\n disableGradleReplacements: {\n description: 'Disable package replacement updates for gradle dependencies.',\n packageRules: [\n {\n enabled: false,\n matchManagers: ['gradle'],\n matchUpdateTypes: ['replacement'],\n },\n ],\n },\n disableMavenParentRoot: {\n description:\n 'Avoid version fetching for Maven packages detected as project root.',\n packageRules: [\n {\n enabled: false,\n matchDepTypes: ['parent-root'],\n matchManagers: ['maven'],\n },\n ],\n },\n doNotUpgradeFromAlpineStableToEdge: {\n description: 'Do not upgrade from Alpine stable to edge.',\n packageRules: [\n {\n allowedVersions: '<20000000',\n matchCurrentVersion: '!/^\\\\d{8}$/',\n matchDatasources: ['docker'],\n matchDepNames: ['alpine'],\n },\n {\n allowedVersions: '<20000000',\n matchCurrentVersion: '!/^\\\\d{8}$/',\n matchDatasources: ['docker'],\n matchPackageNames: ['alpine'],\n },\n ],\n },\n grafanaDockerImageVersioning: {\n description: 'Support security releases on Grafana (product) images',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'grafana/grafana',\n 'docker.io/grafana/grafana',\n 'grafana/grafana-enterprise',\n 'docker.io/grafana/grafana-enterprise',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-security-(?<build>\\\\d+))?(?:-(?<compatibility>.*))?$',\n },\n ],\n },\n ignoreHttp4sDigestMilestones: {\n description: 'Ignore `http4s` digest-based `1.x` milestones.',\n packageRules: [\n {\n allowedVersions: `!/^1\\\\.0-\\\\d+-[a-fA-F0-9]{7}$/`,\n matchManagers: ['sbt'],\n matchPackageNames: ['org.http4s:**'],\n },\n ],\n },\n ignoreSpringCloudNumeric: {\n description: 'Ignore spring cloud `1.x` releases.',\n packageRules: [\n {\n allowedVersions: '/^[A-Z]/',\n matchDatasources: ['maven'],\n matchPackageNames: [\n 'org.springframework.cloud:spring-cloud-starter-parent',\n ],\n },\n ],\n },\n ignoreWeb3jCoreWithOldReleaseTimestamp: {\n description: 'Ignore `web3j` `5.0.0` release.',\n packageRules: [\n {\n allowedVersions: '!/^5\\\\.0\\\\.0/',\n matchDatasources: ['maven'],\n matchPackageNames: ['org.web3j:core'],\n },\n ],\n },\n javaLTSVersions: {\n description: 'Limit Java runtime versions to LTS releases.',\n packageRules: [\n {\n allowedVersions: '/^(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker', 'java-version'],\n matchPackageNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jdk',\n 'java-jre',\n 'sapmachine',\n '/^azul/zulu-openjdk/',\n '/^bellsoft/liberica-openj(dk|re)-/',\n '/^cimg/openjdk/',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$',\n },\n {\n allowedVersions: '/^(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker', 'java-version'],\n matchDepNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jre',\n 'sapmachine',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).',\n matchCurrentValue: '/^\\\\d+(-|$)/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jdk',\n 'java-jre',\n 'sapmachine',\n '/^azul/zulu-openjdk/',\n '/^bellsoft/liberica-openj(dk|re)-/',\n '/^cimg/openjdk/',\n ],\n versioning: 'docker',\n },\n {\n description:\n 'Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).',\n matchCurrentValue: '/^\\\\d+(-|$)/',\n matchDatasources: ['docker'],\n matchDepNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jre',\n 'sapmachine',\n ],\n versioning: 'docker',\n },\n {\n description:\n 'Use partial semver versioning for partial mise Java versions so rolling versions (e.g. 21) are not upgraded to full-precision versions (e.g. 21.0.11+9.0.LTS).',\n matchCurrentValue: '/^\\\\d+(?:\\\\.\\\\d+)?$/',\n matchDatasources: ['java-version'],\n matchManagers: ['mise'],\n versioning: 'semver-partial',\n },\n {\n allowedVersions: '/^(?:jdk|jdk-all|jre)-(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n },\n ],\n },\n k3sKubernetesVersioning: {\n description: 'Use custom regex versioning for k3s-io/k3s',\n packageRules: [\n {\n matchDatasources: ['github-releases'],\n matchPackageNames: ['k3s-io/k3s'],\n versioning:\n 'regex:^v(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-(?<prerelease>[a-z]+\\\\d+))?(?<compatibility>\\\\+k3s)(?<build>\\\\d+)$',\n },\n ],\n },\n libericaJdkDockerVersioning: {\n description:\n 'Use custom regex versioning for bellsoft/liberica-runtime-container',\n packageRules: [\n {\n description: 'Liberica JDK Lite version optimized for the Cloud',\n matchCurrentValue: '/^jdk-[^a][^l]{2}/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jdk-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Liberica JDK that can be used to create a custom runtime with a help of jlink tool',\n matchCurrentValue: '/^jdk-all/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jdk-all-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Liberica JRE (only the runtime without the rest of JDK tools) for running Java applications',\n matchCurrentValue: '/^jre-/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jre-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n ],\n },\n mavenCommonsAncientVersion: {\n description: 'Fix some problems with very old Maven commons versions.',\n packageRules: [\n {\n allowedVersions: '!/^200\\\\d{5}(\\\\.\\\\d+)?/',\n matchDatasources: ['maven', 'sbt-package'],\n matchPackageNames: ['commons-**'],\n },\n ],\n },\n nodeDockerVersioning: {\n description: 'Use node versioning for `node` docker images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n // copied from https://github.com/renovatebot/renovate/blob/a471762e137619c06e73a678d6b63ca984da7dba/lib/config/presets/internal/group.ts#L351\n matchPackageNames: [\n '/(?:^|/)node$/', // node or ends with \"/node, except those below\"\n '!calico/node',\n '!docker.io/calico/node',\n '!ghcr.io/devcontainers/features/node',\n '!kindest/node',\n '!docker.io/kindest/node',\n ],\n versionCompatibility: '^(?<version>[^-]+)(?<compatibility>-.*)?$',\n versioning: 'node',\n },\n ],\n },\n rke2KubernetesVersioning: {\n description: 'Use custom regex versioning for rancher/rke2',\n packageRules: [\n {\n matchDatasources: ['github-releases'],\n matchPackageNames: ['rancher/rke2'],\n versioning:\n 'regex:^v(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-(?<prerelease>[a-z]+\\\\d+))?(?<compatibility>\\\\+rke2r)(?<build>\\\\d+)$',\n },\n ],\n },\n supportRedHatImageVersion: {\n description:\n 'Use specific versioning for Red Hat-maintained container images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'registry.access.redhat.com/rhel',\n 'registry.access.redhat.com/rhel-atomic',\n 'registry.access.redhat.com/rhel-init',\n 'registry.access.redhat.com/rhel-minimal',\n 'registry.access.redhat.com/rhceph/**',\n 'registry.access.redhat.com/rhgs3/**',\n 'registry.access.redhat.com/rhel7**',\n 'registry.access.redhat.com/rhel8/**',\n 'registry.access.redhat.com/rhel9/**',\n 'registry.access.redhat.com/rhscl/**',\n 'registry.access.redhat.com/ubi*{,/}**',\n 'redhat/**',\n ],\n versioning: 'redhat',\n },\n ],\n },\n typesNodeVersioning: {\n description: 'Use node versioning for `@types/node`.',\n packageRules: [\n {\n matchManagers: ['npm'],\n matchPackageNames: ['@types/node'],\n versioning: `node`,\n },\n ],\n },\n ubuntuDockerVersioning: {\n description: 'Use ubuntu versioning for `ubuntu` docker images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchDepNames: ['ubuntu'],\n versioning: 'ubuntu',\n },\n ],\n },\n};\n"],"mappings":";AAEA,MAAa,UAAkC;CAC7C,KAAK;EACH,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,qBAAqB,CACnB,mEACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,mBACE;GACF,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;GACF;GACA,YACE;EACJ,CACF;CACF;CACA,6BAA6B;EAC3B,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CAAC,iBAAiB,sBAAsB;GAC3D,YACE;EACJ,CACF;CACF;CACA,eAAe;EACb,aAAa;EACb,cAAc,CACZ;GACE,aACE;GACF,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CACjB,+DACF;GACA,YAAY;EACd,CACF;CACF;CACA,gCAAgC;EAC9B,aAAa;EACb,cAAc,CACZ;GACE,SAAS;GACT,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CAAC,mCAAmC;EACzD,CACF;CACF;CACA,2BAA2B;EACzB,aAAa;EACb,cAAc,CACZ;GACE,SAAS;GACT,eAAe,CAAC,QAAQ;GACxB,kBAAkB,CAAC,aAAa;EAClC,CACF;CACF;CACA,wBAAwB;EACtB,aACE;EACF,cAAc,CACZ;GACE,SAAS;GACT,eAAe,CAAC,aAAa;GAC7B,eAAe,CAAC,OAAO;EACzB,CACF;CACF;CACA,oCAAoC;EAClC,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,qBAAqB;GACrB,kBAAkB,CAAC,QAAQ;GAC3B,eAAe,CAAC,QAAQ;EAC1B,GACA;GACE,iBAAiB;GACjB,qBAAqB;GACrB,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CAAC,QAAQ;EAC9B,CACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;GACF;GACA,YACE;EACJ,CACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,eAAe,CAAC,KAAK;GACrB,mBAAmB,CAAC,eAAe;EACrC,CACF;CACF;CACA,0BAA0B;EACxB,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CACjB,uDACF;EACF,CACF;CACF;CACA,wCAAwC;EACtC,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CAAC,gBAAgB;EACtC,CACF;CACF;CACA,iBAAiB;EACf,aAAa;EACb,cAAc;GACZ;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,UAAU,cAAc;IAC3C,mBAAmB;KACjB;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YACE;GACJ;GACA;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,UAAU,cAAc;IAC3C,eAAe;KACb;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB;KACjB;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YAAY;GACd;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,eAAe;KACb;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YAAY;GACd;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,cAAc;IACjC,eAAe,CAAC,MAAM;IACtB,YAAY;GACd;GACA;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;GACF;EACF;CACF;CACA,yBAAyB;EACvB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,iBAAiB;GACpC,mBAAmB,CAAC,YAAY;GAChC,YACE;EACJ,CACF;CACF;CACA,6BAA6B;EAC3B,aACE;EACF,cAAc;GACZ;IACE,aAAa;IACb,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;EACF;CACF;CACA,4BAA4B;EAC1B,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,SAAS,aAAa;GACzC,mBAAmB,CAAC,YAAY;EAClC,CACF;CACF;CACA,sBAAsB;EACpB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAE3B,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;GACF;GACA,sBAAsB;GACtB,YAAY;EACd,CACF;CACF;CACA,0BAA0B;EACxB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,iBAAiB;GACpC,mBAAmB,CAAC,cAAc;GAClC,YACE;EACJ,CACF;CACF;CACA,2BAA2B;EACzB,aACE;EACF,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,YAAY;EACd,CACF;CACF;CACA,qBAAqB;EACnB,aAAa;EACb,cAAc,CACZ;GACE,eAAe,CAAC,KAAK;GACrB,mBAAmB,CAAC,aAAa;GACjC,YAAY;EACd,CACF;CACF;CACA,wBAAwB;EACtB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,eAAe,CAAC,QAAQ;GACxB,YAAY;EACd,CACF;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"workarounds.preset.js","names":[],"sources":["../../../../lib/config/presets/internal/workarounds.preset.ts"],"sourcesContent":["import type { Preset } from '../types.ts';\n\nexport const presets: Record<string, Preset> = {\n all: {\n extends: [\n 'workarounds:mavenCommonsAncientVersion',\n 'workarounds:ignoreSpringCloudNumeric',\n 'workarounds:ignoreWeb3jCoreWithOldReleaseTimestamp',\n 'workarounds:ignoreHttp4sDigestMilestones',\n 'workarounds:typesNodeVersioning',\n 'workarounds:nodeDockerVersioning',\n 'workarounds:doNotUpgradeFromAlpineStableToEdge',\n 'workarounds:supportRedHatImageVersion',\n 'workarounds:javaLTSVersions',\n 'workarounds:disableEclipseLifecycleMapping',\n 'workarounds:disableGradleReplacements',\n 'workarounds:disableMavenParentRoot',\n 'workarounds:containerbase',\n 'workarounds:bitnamiDockerImageVersioning',\n 'workarounds:clamavDockerImageVersioning',\n 'workarounds:grafanaDockerImageVersioning',\n 'workarounds:k3sKubernetesVersioning',\n 'workarounds:rke2KubernetesVersioning',\n 'workarounds:libericaJdkDockerVersioning',\n 'workarounds:ubuntuDockerVersioning',\n 'workarounds:groupings',\n ],\n overrideDescription: [\n 'Apply crowd-sourced workarounds for known problems with packages.',\n ],\n },\n bitnamiDockerImageVersioning: {\n description: 'Use custom regex versioning for bitnami images',\n packageRules: [\n {\n matchCurrentValue:\n '/^(?<major>\\\\d+)(?:\\\\.(?<minor>\\\\d+)(?:\\\\.(?<patch>\\\\d+))?)?-(?<compatibility>.+)-(?<build>\\\\d+)(?:-r(?<revision>\\\\d+))?$/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bitnami/**',\n 'docker.io/bitnami/**',\n 'gcr.io/bitnami-containers/**',\n '*-docker.pkg.dev/vmw-app-catalog/**',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)(?:\\\\.(?<minor>\\\\d+)(?:\\\\.(?<patch>\\\\d+))?)?(:?-(?<compatibility>.+)-(?<build>\\\\d+)(?:-r(?<revision>\\\\d+))?)?$',\n },\n ],\n },\n clamavDockerImageVersioning: {\n description: 'Use custom regex versioning for ClamAV images',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: ['clamav/clamav', 'clamav/clamav-debian'],\n versioning:\n 'regex:^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)(\\\\.(?<patch>\\\\d+))?(-(?<build>\\\\d+))?(_(?<compatibility>.+))?$',\n },\n ],\n },\n containerbase: {\n description: 'Add some containerbase overrides.',\n packageRules: [\n {\n description:\n 'Use node versioning for `(containerbase|renovate)/node` images',\n matchDatasources: ['docker'],\n matchPackageNames: [\n '/^(?:(?:docker|ghcr)\\\\.io/)?(?:containerbase|renovate)/node$/',\n ],\n versioning: 'node',\n },\n ],\n },\n disableEclipseLifecycleMapping: {\n description: 'Disable Eclipse m2e lifecycle-mapping placeholder package.',\n packageRules: [\n {\n enabled: false,\n matchDatasources: ['maven'],\n matchPackageNames: ['org.eclipse.m2e:lifecycle-mapping'],\n },\n ],\n },\n disableGradleReplacements: {\n description: 'Disable package replacement updates for gradle dependencies.',\n packageRules: [\n {\n enabled: false,\n matchManagers: ['gradle'],\n matchUpdateTypes: ['replacement'],\n },\n ],\n },\n disableMavenParentRoot: {\n description:\n 'Avoid version fetching for Maven packages detected as project root.',\n packageRules: [\n {\n enabled: false,\n matchDepTypes: ['parent-root'],\n matchManagers: ['maven'],\n },\n ],\n },\n doNotUpgradeFromAlpineStableToEdge: {\n description: 'Do not upgrade from Alpine stable to edge.',\n packageRules: [\n {\n allowedVersions: '<20000000',\n matchCurrentVersion: '!/^\\\\d{8}$/',\n matchDatasources: ['docker'],\n matchDepNames: ['alpine'],\n },\n {\n allowedVersions: '<20000000',\n matchCurrentVersion: '!/^\\\\d{8}$/',\n matchDatasources: ['docker'],\n matchPackageNames: ['alpine'],\n },\n ],\n },\n grafanaDockerImageVersioning: {\n description: 'Support security releases on Grafana (product) images',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'grafana/grafana',\n 'docker.io/grafana/grafana',\n 'grafana/grafana-enterprise',\n 'docker.io/grafana/grafana-enterprise',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-security-(?<build>\\\\d+))?(?:-(?<compatibility>.*))?$',\n },\n ],\n },\n groupings: {\n description: 'Groupings for specific package updates.',\n packageRules: [\n {\n description:\n 'Group commander major updates, they depend on each other.',\n groupName: 'commander',\n matchDatasources: ['npm'],\n matchPackageNames: ['@commander-js/extra-typings', 'commander'],\n matchUpdateTypes: ['major'],\n },\n ],\n },\n ignoreHttp4sDigestMilestones: {\n description: 'Ignore `http4s` digest-based `1.x` milestones.',\n packageRules: [\n {\n allowedVersions: `!/^1\\\\.0-\\\\d+-[a-fA-F0-9]{7}$/`,\n matchManagers: ['sbt'],\n matchPackageNames: ['org.http4s:**'],\n },\n ],\n },\n ignoreSpringCloudNumeric: {\n description: 'Ignore spring cloud `1.x` releases.',\n packageRules: [\n {\n allowedVersions: '/^[A-Z]/',\n matchDatasources: ['maven'],\n matchPackageNames: [\n 'org.springframework.cloud:spring-cloud-starter-parent',\n ],\n },\n ],\n },\n ignoreWeb3jCoreWithOldReleaseTimestamp: {\n description: 'Ignore `web3j` `5.0.0` release.',\n packageRules: [\n {\n allowedVersions: '!/^5\\\\.0\\\\.0/',\n matchDatasources: ['maven'],\n matchPackageNames: ['org.web3j:core'],\n },\n ],\n },\n javaLTSVersions: {\n description: 'Limit Java runtime versions to LTS releases.',\n packageRules: [\n {\n allowedVersions: '/^(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker', 'java-version'],\n matchPackageNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jdk',\n 'java-jre',\n 'sapmachine',\n '/^azul/zulu-openjdk/',\n '/^bellsoft/liberica-openj(dk|re)-/',\n '/^cimg/openjdk/',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$',\n },\n {\n allowedVersions: '/^(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker', 'java-version'],\n matchDepNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jre',\n 'sapmachine',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).',\n matchCurrentValue: '/^\\\\d+(-|$)/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jdk',\n 'java-jre',\n 'sapmachine',\n '/^azul/zulu-openjdk/',\n '/^bellsoft/liberica-openj(dk|re)-/',\n '/^cimg/openjdk/',\n ],\n versioning: 'docker',\n },\n {\n description:\n 'Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).',\n matchCurrentValue: '/^\\\\d+(-|$)/',\n matchDatasources: ['docker'],\n matchDepNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jre',\n 'sapmachine',\n ],\n versioning: 'docker',\n },\n {\n description:\n 'Use partial semver versioning for partial mise Java versions so rolling versions (e.g. 21) are not upgraded to full-precision versions (e.g. 21.0.11+9.0.LTS).',\n matchCurrentValue: '/^\\\\d+(?:\\\\.\\\\d+)?$/',\n matchDatasources: ['java-version'],\n matchManagers: ['mise'],\n versioning: 'semver-partial',\n },\n {\n allowedVersions: '/^(?:jdk|jdk-all|jre)-(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n },\n ],\n },\n k3sKubernetesVersioning: {\n description: 'Use custom regex versioning for k3s-io/k3s',\n packageRules: [\n {\n matchDatasources: ['github-releases'],\n matchPackageNames: ['k3s-io/k3s'],\n versioning:\n 'regex:^v(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-(?<prerelease>[a-z]+\\\\d+))?(?<compatibility>\\\\+k3s)(?<build>\\\\d+)$',\n },\n ],\n },\n libericaJdkDockerVersioning: {\n description:\n 'Use custom regex versioning for bellsoft/liberica-runtime-container',\n packageRules: [\n {\n description: 'Liberica JDK Lite version optimized for the Cloud',\n matchCurrentValue: '/^jdk-[^a][^l]{2}/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jdk-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Liberica JDK that can be used to create a custom runtime with a help of jlink tool',\n matchCurrentValue: '/^jdk-all/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jdk-all-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Liberica JRE (only the runtime without the rest of JDK tools) for running Java applications',\n matchCurrentValue: '/^jre-/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jre-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n ],\n },\n mavenCommonsAncientVersion: {\n description: 'Fix some problems with very old Maven commons versions.',\n packageRules: [\n {\n allowedVersions: '!/^200\\\\d{5}(\\\\.\\\\d+)?/',\n matchDatasources: ['maven', 'sbt-package'],\n matchPackageNames: ['commons-**'],\n },\n ],\n },\n nodeDockerVersioning: {\n description: 'Use node versioning for `node` docker images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n // copied from https://github.com/renovatebot/renovate/blob/a471762e137619c06e73a678d6b63ca984da7dba/lib/config/presets/internal/group.ts#L351\n matchPackageNames: [\n '/(?:^|/)node$/', // node or ends with \"/node, except those below\"\n '!calico/node',\n '!docker.io/calico/node',\n '!ghcr.io/devcontainers/features/node',\n '!kindest/node',\n '!docker.io/kindest/node',\n ],\n versionCompatibility: '^(?<version>[^-]+)(?<compatibility>-.*)?$',\n versioning: 'node',\n },\n ],\n },\n rke2KubernetesVersioning: {\n description: 'Use custom regex versioning for rancher/rke2',\n packageRules: [\n {\n matchDatasources: ['github-releases'],\n matchPackageNames: ['rancher/rke2'],\n versioning:\n 'regex:^v(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-(?<prerelease>[a-z]+\\\\d+))?(?<compatibility>\\\\+rke2r)(?<build>\\\\d+)$',\n },\n ],\n },\n supportRedHatImageVersion: {\n description:\n 'Use specific versioning for Red Hat-maintained container images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'registry.access.redhat.com/rhel',\n 'registry.access.redhat.com/rhel-atomic',\n 'registry.access.redhat.com/rhel-init',\n 'registry.access.redhat.com/rhel-minimal',\n 'registry.access.redhat.com/rhceph/**',\n 'registry.access.redhat.com/rhgs3/**',\n 'registry.access.redhat.com/rhel7**',\n 'registry.access.redhat.com/rhel8/**',\n 'registry.access.redhat.com/rhel9/**',\n 'registry.access.redhat.com/rhscl/**',\n 'registry.access.redhat.com/ubi*{,/}**',\n 'redhat/**',\n ],\n versioning: 'redhat',\n },\n ],\n },\n typesNodeVersioning: {\n description: 'Use node versioning for `@types/node`.',\n packageRules: [\n {\n matchManagers: ['npm'],\n matchPackageNames: ['@types/node'],\n versioning: `node`,\n },\n ],\n },\n ubuntuDockerVersioning: {\n description: 'Use ubuntu versioning for `ubuntu` docker images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchDepNames: ['ubuntu'],\n versioning: 'ubuntu',\n },\n ],\n },\n};\n"],"mappings":";AAEA,MAAa,UAAkC;CAC7C,KAAK;EACH,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,qBAAqB,CACnB,mEACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,mBACE;GACF,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;GACF;GACA,YACE;EACJ,CACF;CACF;CACA,6BAA6B;EAC3B,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CAAC,iBAAiB,sBAAsB;GAC3D,YACE;EACJ,CACF;CACF;CACA,eAAe;EACb,aAAa;EACb,cAAc,CACZ;GACE,aACE;GACF,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CACjB,+DACF;GACA,YAAY;EACd,CACF;CACF;CACA,gCAAgC;EAC9B,aAAa;EACb,cAAc,CACZ;GACE,SAAS;GACT,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CAAC,mCAAmC;EACzD,CACF;CACF;CACA,2BAA2B;EACzB,aAAa;EACb,cAAc,CACZ;GACE,SAAS;GACT,eAAe,CAAC,QAAQ;GACxB,kBAAkB,CAAC,aAAa;EAClC,CACF;CACF;CACA,wBAAwB;EACtB,aACE;EACF,cAAc,CACZ;GACE,SAAS;GACT,eAAe,CAAC,aAAa;GAC7B,eAAe,CAAC,OAAO;EACzB,CACF;CACF;CACA,oCAAoC;EAClC,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,qBAAqB;GACrB,kBAAkB,CAAC,QAAQ;GAC3B,eAAe,CAAC,QAAQ;EAC1B,GACA;GACE,iBAAiB;GACjB,qBAAqB;GACrB,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CAAC,QAAQ;EAC9B,CACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;GACF;GACA,YACE;EACJ,CACF;CACF;CACA,WAAW;EACT,aAAa;EACb,cAAc,CACZ;GACE,aACE;GACF,WAAW;GACX,kBAAkB,CAAC,KAAK;GACxB,mBAAmB,CAAC,+BAA+B,WAAW;GAC9D,kBAAkB,CAAC,OAAO;EAC5B,CACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,eAAe,CAAC,KAAK;GACrB,mBAAmB,CAAC,eAAe;EACrC,CACF;CACF;CACA,0BAA0B;EACxB,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CACjB,uDACF;EACF,CACF;CACF;CACA,wCAAwC;EACtC,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CAAC,gBAAgB;EACtC,CACF;CACF;CACA,iBAAiB;EACf,aAAa;EACb,cAAc;GACZ;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,UAAU,cAAc;IAC3C,mBAAmB;KACjB;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YACE;GACJ;GACA;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,UAAU,cAAc;IAC3C,eAAe;KACb;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB;KACjB;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YAAY;GACd;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,eAAe;KACb;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YAAY;GACd;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,cAAc;IACjC,eAAe,CAAC,MAAM;IACtB,YAAY;GACd;GACA;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;GACF;EACF;CACF;CACA,yBAAyB;EACvB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,iBAAiB;GACpC,mBAAmB,CAAC,YAAY;GAChC,YACE;EACJ,CACF;CACF;CACA,6BAA6B;EAC3B,aACE;EACF,cAAc;GACZ;IACE,aAAa;IACb,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;EACF;CACF;CACA,4BAA4B;EAC1B,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,SAAS,aAAa;GACzC,mBAAmB,CAAC,YAAY;EAClC,CACF;CACF;CACA,sBAAsB;EACpB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAE3B,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;GACF;GACA,sBAAsB;GACtB,YAAY;EACd,CACF;CACF;CACA,0BAA0B;EACxB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,iBAAiB;GACpC,mBAAmB,CAAC,cAAc;GAClC,YACE;EACJ,CACF;CACF;CACA,2BAA2B;EACzB,aACE;EACF,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,YAAY;EACd,CACF;CACF;CACA,qBAAqB;EACnB,aAAa;EACb,cAAc,CACZ;GACE,eAAe,CAAC,KAAK;GACrB,mBAAmB,CAAC,aAAa;GACjC,YAAY;EACd,CACF;CACF;CACA,wBAAwB;EACtB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,eAAe,CAAC,QAAQ;GACxB,YAAY;EACd,CACF;CACF;AACF"}
|
package/dist/data/monorepo.js
CHANGED
|
@@ -135,6 +135,7 @@ var repoGroups = {
|
|
|
135
135
|
"confect": "https://github.com/rjdellecese/confect",
|
|
136
136
|
"conform": "https://github.com/edmundhung/conform",
|
|
137
137
|
"contentful-rich-text": "https://github.com/contentful/rich-text",
|
|
138
|
+
"convex": "https://github.com/get-convex/convex-backend",
|
|
138
139
|
"cspell": "https://github.com/streetsidesoftware/cspell",
|
|
139
140
|
"datadog-browser-sdk": "https://github.com/DataDog/browser-sdk",
|
|
140
141
|
"datafusion": "https://github.com/apache/datafusion",
|
package/dist/logger/utils.js
CHANGED
|
@@ -60,7 +60,7 @@ function prepareError(err) {
|
|
|
60
60
|
}
|
|
61
61
|
if (err instanceof RequestError) {
|
|
62
62
|
const options = {
|
|
63
|
-
headers: structuredClone(err.options.headers),
|
|
63
|
+
headers: structuredClone({ ...err.options.headers }),
|
|
64
64
|
url: err.options.url?.toString(),
|
|
65
65
|
hostType: err.options.context.hostType
|
|
66
66
|
};
|
package/dist/logger/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["HttpError"],"sources":["../../lib/logger/utils.ts"],"sourcesContent":["import {\n isArray,\n isBuffer,\n isDate,\n isEmptyObject,\n isError,\n isFunction,\n isNonEmptyObject,\n isNonEmptyStringAndNotWhitespace,\n isObject,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { RequestError as HttpError } from 'got';\nimport { DateTime } from 'luxon';\nimport { ZodError } from 'zod/v4';\nimport { ExecError } from '../util/exec/exec-error.ts';\nimport { regEx } from '../util/regex.ts';\nimport { redactedFields, sanitize } from '../util/sanitize.ts';\n\nconst contentFields = [\n 'content',\n 'contents',\n 'packageLockParsed',\n 'yarnLockParsed',\n];\n\ntype ZodShortenedIssue =\n | null\n | string\n | string[]\n | {\n [key: string]: ZodShortenedIssue;\n };\n\nexport function prepareZodIssues(input: unknown): ZodShortenedIssue {\n if (!isPlainObject(input)) {\n return null;\n }\n\n let err: null | string | string[] = null;\n // v8 ignore else -- TODO: add test #40625\n if (isArray(input._errors, isString)) {\n if (input._errors.length === 1) {\n err = input._errors[0];\n } else if (input._errors.length > 1) {\n err = input._errors;\n } else {\n err = null;\n }\n }\n delete input._errors;\n\n if (isEmptyObject(input)) {\n return err;\n }\n\n const output: Record<string, ZodShortenedIssue> = {};\n const entries = Object.entries(input);\n for (const [key, value] of entries.slice(0, 3)) {\n const child = prepareZodIssues(value);\n // v8 ignore else -- TODO: add test #40625\n if (child !== null) {\n output[key] = child;\n }\n }\n\n if (entries.length > 3) {\n output.___ = `... ${entries.length - 3} more`;\n }\n\n return output;\n}\n\nexport function prepareZodError(err: ZodError): Record<string, unknown> {\n Object.defineProperty(err, 'message', {\n get: () => 'Schema error',\n /* v8 ignore start -- TODO: drop set? */\n set: () => {\n /* intentionally empty */\n },\n // v8 ignore stop -- TODO: drop set? */\n });\n\n return {\n message: err.message,\n stack: err.stack,\n issues: prepareZodIssues(err.format()),\n };\n}\n\nexport default function prepareError(err: Error): Record<string, unknown> {\n if (err instanceof ZodError) {\n return prepareZodError(err);\n }\n\n const response: Record<string, unknown> = {\n // We want to loose class information, but keep enumerable properties of the error\n // oxlint-disable-next-line typescript/no-misused-spread\n ...err,\n };\n\n // Required as message is non-enumerable\n if (!response.message && err.message) {\n response.message = err.message;\n }\n\n // Required as stack is non-enumerable\n if (!response.stack && err.stack) {\n response.stack = err.stack;\n }\n\n if (err instanceof AggregateError) {\n response.errors = err.errors.map((error) => prepareError(error));\n }\n\n // handle rawExec error\n if (err instanceof ExecError && isNonEmptyObject(err.options?.env)) {\n const env = Object.keys(err.options.env);\n response.options = { ...err.options, env };\n }\n\n // handle got error\n if (err instanceof HttpError) {\n const options: Record<string, unknown> = {\n headers: structuredClone(err.options.headers),\n url: err.options.url?.toString(),\n hostType: err.options.context.hostType,\n };\n response.options = options;\n\n options.username = err.options.username;\n options.password = err.options.password;\n options.method = err.options.method;\n options.http2 = err.options.http2;\n\n // v8 ignore else -- TODO: add test #40625\n if (err.response) {\n response.response = {\n statusCode: err.response.statusCode,\n statusMessage: err.response.statusMessage,\n body:\n err.name === 'TimeoutError'\n ? undefined\n : structuredClone(err.response.body),\n headers: structuredClone(err.response.headers),\n httpVersion: err.response.httpVersion,\n retryCount: err.response.retryCount,\n };\n }\n }\n\n return response;\n}\n\ntype NestedValue = unknown[] | object;\n\nfunction isNested(value: unknown): value is NestedValue {\n return isArray(value) || isObject(value);\n}\n\nexport function sanitizeValue(\n value: unknown,\n seen = new WeakMap<NestedValue, unknown>(),\n): any {\n if (isString(value)) {\n return sanitize(sanitizeUrls(value));\n }\n\n // Handle boxed String objects (e.g. from `new String()`), which `isString`\n // rejects but `isObject` would iterate character-by-character producing\n // `{\"0\":\"h\",\"1\":\"e\",...}` in log output.\n if (value instanceof String) {\n return sanitize(sanitizeUrls(value.toString()));\n }\n\n if (isDate(value)) {\n return value;\n }\n\n if (DateTime.isDateTime(value)) {\n return value.toISO();\n }\n\n if (isFunction(value)) {\n return '[function]';\n }\n\n if (isBuffer(value)) {\n return '[content]';\n }\n\n if (isError(value)) {\n const err = prepareError(value);\n return sanitizeValue(err, seen);\n }\n\n if (isArray(value)) {\n const length = value.length;\n const arrayResult = Array(length);\n seen.set(value, arrayResult);\n for (let idx = 0; idx < length; idx += 1) {\n const val = value[idx];\n arrayResult[idx] =\n isNested(val) && seen.has(val)\n ? seen.get(val)\n : sanitizeValue(val, seen);\n }\n return arrayResult;\n }\n\n if (isObject(value)) {\n const objectResult: Record<string, any> = {};\n seen.set(value, objectResult);\n for (const [key, val] of Object.entries<any>(value)) {\n let curValue: any;\n if (!val) {\n curValue = val;\n } else if (redactedFields.includes(key)) {\n // Do not mask/sanitize secrets templates\n if (isString(val) && regEx(/^{{\\s*secrets\\..*}}$/).test(val)) {\n curValue = val;\n } else {\n curValue = '***********';\n }\n } else if (contentFields.includes(key)) {\n curValue = '[content]';\n } else if (key === 'secrets') {\n curValue = {};\n Object.keys(val).forEach((secretKey) => {\n curValue[secretKey] = '***********';\n });\n } else {\n curValue = seen.has(val) ? seen.get(val) : sanitizeValue(val, seen);\n }\n\n const sanitizedKey = sanitizeValue(key, seen);\n objectResult[sanitizedKey] = curValue;\n }\n\n return objectResult;\n }\n\n return value;\n}\n\nconst urlRe = regEx(/[a-z]{3,9}:\\/\\/[^@/]+@[a-z0-9.-]+/gi);\nconst urlCredRe = regEx(/\\/\\/[^@]+@/g);\nconst dataUriCredRe = regEx(/^(?<prefix>data:[0-9a-z-]+\\/[0-9a-z-]+;).+/i);\n\nexport function sanitizeUrls(text: string): string {\n return text\n .replace(urlRe, (url) => {\n return url.replace(urlCredRe, '//**redacted**@');\n })\n .replace(dataUriCredRe, '$<prefix>**redacted**');\n}\n\nexport function getEnv(key: string): string | undefined {\n return [process.env[`RENOVATE_${key}`], process.env[key]]\n .map((v) => v?.toLowerCase().trim())\n .find(isNonEmptyStringAndNotWhitespace);\n}\n\nexport function getMessage(\n p1: string | Record<string, any>,\n p2?: string,\n): string | undefined {\n return isString(p1) ? p1 : p2;\n}\n\nexport function toMeta(\n p1: string | Record<string, any>,\n): Record<string, unknown> {\n return isObject(p1) ? p1 : {};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["HttpError"],"sources":["../../lib/logger/utils.ts"],"sourcesContent":["import {\n isArray,\n isBuffer,\n isDate,\n isEmptyObject,\n isError,\n isFunction,\n isNonEmptyObject,\n isNonEmptyStringAndNotWhitespace,\n isObject,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { RequestError as HttpError } from 'got';\nimport { DateTime } from 'luxon';\nimport { ZodError } from 'zod/v4';\nimport { ExecError } from '../util/exec/exec-error.ts';\nimport { regEx } from '../util/regex.ts';\nimport { redactedFields, sanitize } from '../util/sanitize.ts';\n\nconst contentFields = [\n 'content',\n 'contents',\n 'packageLockParsed',\n 'yarnLockParsed',\n];\n\ntype ZodShortenedIssue =\n | null\n | string\n | string[]\n | {\n [key: string]: ZodShortenedIssue;\n };\n\nexport function prepareZodIssues(input: unknown): ZodShortenedIssue {\n if (!isPlainObject(input)) {\n return null;\n }\n\n let err: null | string | string[] = null;\n // v8 ignore else -- TODO: add test #40625\n if (isArray(input._errors, isString)) {\n if (input._errors.length === 1) {\n err = input._errors[0];\n } else if (input._errors.length > 1) {\n err = input._errors;\n } else {\n err = null;\n }\n }\n delete input._errors;\n\n if (isEmptyObject(input)) {\n return err;\n }\n\n const output: Record<string, ZodShortenedIssue> = {};\n const entries = Object.entries(input);\n for (const [key, value] of entries.slice(0, 3)) {\n const child = prepareZodIssues(value);\n // v8 ignore else -- TODO: add test #40625\n if (child !== null) {\n output[key] = child;\n }\n }\n\n if (entries.length > 3) {\n output.___ = `... ${entries.length - 3} more`;\n }\n\n return output;\n}\n\nexport function prepareZodError(err: ZodError): Record<string, unknown> {\n Object.defineProperty(err, 'message', {\n get: () => 'Schema error',\n /* v8 ignore start -- TODO: drop set? */\n set: () => {\n /* intentionally empty */\n },\n // v8 ignore stop -- TODO: drop set? */\n });\n\n return {\n message: err.message,\n stack: err.stack,\n issues: prepareZodIssues(err.format()),\n };\n}\n\nexport default function prepareError(err: Error): Record<string, unknown> {\n if (err instanceof ZodError) {\n return prepareZodError(err);\n }\n\n const response: Record<string, unknown> = {\n // We want to loose class information, but keep enumerable properties of the error\n // oxlint-disable-next-line typescript/no-misused-spread\n ...err,\n };\n\n // Required as message is non-enumerable\n if (!response.message && err.message) {\n response.message = err.message;\n }\n\n // Required as stack is non-enumerable\n if (!response.stack && err.stack) {\n response.stack = err.stack;\n }\n\n if (err instanceof AggregateError) {\n response.errors = err.errors.map((error) => prepareError(error));\n }\n\n // handle rawExec error\n if (err instanceof ExecError && isNonEmptyObject(err.options?.env)) {\n const env = Object.keys(err.options.env);\n response.options = { ...err.options, env };\n }\n\n // handle got error\n if (err instanceof HttpError) {\n const options: Record<string, unknown> = {\n headers: structuredClone({ ...err.options.headers }),\n url: err.options.url?.toString(),\n hostType: err.options.context.hostType,\n };\n response.options = options;\n\n options.username = err.options.username;\n options.password = err.options.password;\n options.method = err.options.method;\n options.http2 = err.options.http2;\n\n // v8 ignore else -- TODO: add test #40625\n if (err.response) {\n response.response = {\n statusCode: err.response.statusCode,\n statusMessage: err.response.statusMessage,\n body:\n err.name === 'TimeoutError'\n ? undefined\n : structuredClone(err.response.body),\n headers: structuredClone(err.response.headers),\n httpVersion: err.response.httpVersion,\n retryCount: err.response.retryCount,\n };\n }\n }\n\n return response;\n}\n\ntype NestedValue = unknown[] | object;\n\nfunction isNested(value: unknown): value is NestedValue {\n return isArray(value) || isObject(value);\n}\n\nexport function sanitizeValue(\n value: unknown,\n seen = new WeakMap<NestedValue, unknown>(),\n): any {\n if (isString(value)) {\n return sanitize(sanitizeUrls(value));\n }\n\n // Handle boxed String objects (e.g. from `new String()`), which `isString`\n // rejects but `isObject` would iterate character-by-character producing\n // `{\"0\":\"h\",\"1\":\"e\",...}` in log output.\n if (value instanceof String) {\n return sanitize(sanitizeUrls(value.toString()));\n }\n\n if (isDate(value)) {\n return value;\n }\n\n if (DateTime.isDateTime(value)) {\n return value.toISO();\n }\n\n if (isFunction(value)) {\n return '[function]';\n }\n\n if (isBuffer(value)) {\n return '[content]';\n }\n\n if (isError(value)) {\n const err = prepareError(value);\n return sanitizeValue(err, seen);\n }\n\n if (isArray(value)) {\n const length = value.length;\n const arrayResult = Array(length);\n seen.set(value, arrayResult);\n for (let idx = 0; idx < length; idx += 1) {\n const val = value[idx];\n arrayResult[idx] =\n isNested(val) && seen.has(val)\n ? seen.get(val)\n : sanitizeValue(val, seen);\n }\n return arrayResult;\n }\n\n if (isObject(value)) {\n const objectResult: Record<string, any> = {};\n seen.set(value, objectResult);\n for (const [key, val] of Object.entries<any>(value)) {\n let curValue: any;\n if (!val) {\n curValue = val;\n } else if (redactedFields.includes(key)) {\n // Do not mask/sanitize secrets templates\n if (isString(val) && regEx(/^{{\\s*secrets\\..*}}$/).test(val)) {\n curValue = val;\n } else {\n curValue = '***********';\n }\n } else if (contentFields.includes(key)) {\n curValue = '[content]';\n } else if (key === 'secrets') {\n curValue = {};\n Object.keys(val).forEach((secretKey) => {\n curValue[secretKey] = '***********';\n });\n } else {\n curValue = seen.has(val) ? seen.get(val) : sanitizeValue(val, seen);\n }\n\n const sanitizedKey = sanitizeValue(key, seen);\n objectResult[sanitizedKey] = curValue;\n }\n\n return objectResult;\n }\n\n return value;\n}\n\nconst urlRe = regEx(/[a-z]{3,9}:\\/\\/[^@/]+@[a-z0-9.-]+/gi);\nconst urlCredRe = regEx(/\\/\\/[^@]+@/g);\nconst dataUriCredRe = regEx(/^(?<prefix>data:[0-9a-z-]+\\/[0-9a-z-]+;).+/i);\n\nexport function sanitizeUrls(text: string): string {\n return text\n .replace(urlRe, (url) => {\n return url.replace(urlCredRe, '//**redacted**@');\n })\n .replace(dataUriCredRe, '$<prefix>**redacted**');\n}\n\nexport function getEnv(key: string): string | undefined {\n return [process.env[`RENOVATE_${key}`], process.env[key]]\n .map((v) => v?.toLowerCase().trim())\n .find(isNonEmptyStringAndNotWhitespace);\n}\n\nexport function getMessage(\n p1: string | Record<string, any>,\n p2?: string,\n): string | undefined {\n return isString(p1) ? p1 : p2;\n}\n\nexport function toMeta(\n p1: string | Record<string, any>,\n): Record<string, unknown> {\n return isObject(p1) ? p1 : {};\n}\n"],"mappings":"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"}
|
package/dist/util/http/github.js
CHANGED
|
@@ -272,9 +272,9 @@ var GithubHttp = class extends HttpBase {
|
|
|
272
272
|
for (; nextUrl && pageNumber <= cursorPageLimit; pageNumber += 1) {
|
|
273
273
|
if (nextUrl.origin !== resolvedUrl.origin) {
|
|
274
274
|
logger.once.warn({
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}, "Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different
|
|
275
|
+
requestOrigin: resolvedUrl.origin,
|
|
276
|
+
paginationOrigin: nextUrl.origin
|
|
277
|
+
}, "Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different origin in pagination links.");
|
|
278
278
|
break;
|
|
279
279
|
}
|
|
280
280
|
const nextPage = await super.requestJsonUnsafe(method, {
|
|
@@ -306,9 +306,9 @@ var GithubHttp = class extends HttpBase {
|
|
|
306
306
|
if (isArray(nextPage.body)) result.body.push(...nextPage.body);
|
|
307
307
|
}
|
|
308
308
|
} else logger.once.warn({
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
}, "Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different
|
|
309
|
+
requestOrigin: resolvedUrl.origin,
|
|
310
|
+
paginationOrigin: firstPageUrl.origin
|
|
311
|
+
}, "Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different origin in pagination links.");
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
314
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","names":["hostRules.find","p.all"],"sources":["../../../lib/util/http/github.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyObject,\n isNullOrUndefined,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { z } from 'zod/v4';\nimport { GlobalConfig } from '../../config/global.ts';\nimport {\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../constants/error-messages.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport { getCache } from '../cache/repository/index.ts';\nimport { getEnv } from '../env.ts';\nimport * as hostRules from '../host-rules.ts';\nimport { maskToken } from '../mask.ts';\nimport { coerceObject } from '../object.ts';\nimport * as p from '../promises.ts';\nimport { range } from '../range.ts';\nimport { regEx } from '../regex.ts';\nimport { LooseArray } from '../schema-utils/index.ts';\nimport { joinUrlParts, parseLinkHeader, parseUrl } from '../url.ts';\nimport { findMatchingRule } from './host-rules.ts';\nimport {\n HttpBase,\n type InternalHttpOptions,\n type InternalJsonUnsafeOptions,\n} from './http.ts';\nimport type { GotLegacyError } from './legacy.ts';\nimport type {\n GraphqlOptions,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types.ts';\n\nconst githubBaseUrl = 'https://api.github.com/';\nconst MAX_PAGINATION_PAGES = 100;\nlet baseUrl = githubBaseUrl;\nexport function setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\nexport interface GithubBaseHttpOptions extends HttpOptions {\n repository?: string;\n}\n\nexport interface GithubHttpOptions extends GithubBaseHttpOptions {\n paginate?: boolean | string;\n paginationField?: string;\n pageLimit?: number;\n}\n\ninterface GithubGraphqlRepoData<T = unknown> {\n repository?: T;\n}\n\nexport type GithubGraphqlResponse<T = unknown> =\n | {\n data: T;\n errors?: never;\n }\n | {\n data?: never;\n errors: {\n type?: string;\n code?: string;\n message: string;\n }[];\n };\n\n/**\n * GitHub reports a spent GraphQL budget in two shapes: `RATE_LIMITED` from the\n * GraphQL API itself, and `graphql_rate_limit` when an app installation has\n * exhausted its allowance. Both mean \"come back later\", not \"unknown error\".\n */\nfunction isGraphqlRateLimited(\n errors: { type?: string; code?: string }[] | undefined,\n): boolean {\n return !!errors?.some(\n (err) => err.type === 'RATE_LIMITED' || err.code === 'graphql_rate_limit',\n );\n}\n\nconst GithubError = z.object({\n field: z.string().optional(),\n code: z.string().optional(),\n message: z.string().optional(),\n});\n\n/**\n * GitHub usually returns `errors` as an array, but not always - normalize it\n * into an array of error objects, dropping anything that doesn't fit.\n */\nconst GithubErrors = z\n .union([LooseArray(GithubError), GithubError.transform((error) => [error])])\n .catch([]);\n\nfunction handleGotError(\n err: GotLegacyError,\n url: string | URL,\n opts: GithubBaseHttpOptions,\n): Error {\n const path = url.toString();\n let message = err.message || '';\n const body = err.response?.body;\n if (isPlainObject(body) && 'message' in body) {\n message = String(body.message);\n }\n if (\n err.code === 'ERR_HTTP2_STREAM_ERROR' ||\n err.code === 'ENOTFOUND' ||\n err.code === 'ETIMEDOUT' ||\n err.code === 'EAI_AGAIN' ||\n err.code === 'ECONNRESET'\n ) {\n logger.debug({ err }, 'GitHub failure: RequestError');\n return new ExternalHostError(err, 'github');\n }\n if (err.name === 'ParseError') {\n logger.debug({ err }, '');\n return new ExternalHostError(err, 'github');\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug({ err }, 'GitHub failure: 5xx');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have triggered an abuse detection mechanism')\n ) {\n logger.debug({ err }, 'GitHub failure: abuse detection');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have exceeded a secondary rate limit')\n ) {\n logger.warn({ err }, 'GitHub failure: secondary rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) {\n logger.debug(`Endpoint: ${path}, needs paid GitHub plan`);\n return err;\n }\n if (err.statusCode === 403 && message.includes('rate limit exceeded')) {\n logger.debug({ err }, 'GitHub failure: rate limit');\n\n const parsed = parseUrl(baseUrl);\n\n const rule = hostRules.find({ url: baseUrl });\n if (rule.token || rule.password) {\n logger.once.warn(\n 'Rate limit exceeded for api.github.com, even though we are authenticated',\n );\n } else {\n if (parsed?.hostname === 'api.github.com') {\n logger.once.warn(\n {\n documentationUrl: `${GlobalConfig.get('productLinks').documentation}getting-started/running/#githubcom-token-for-changelogs-and-tools`,\n },\n 'Rate limit exceeded for api.github.com, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN',\n );\n } else {\n logger.once.warn(\n { host: parsed!.host },\n 'Rate limit exceeded, as no hostRules set for this host',\n );\n }\n }\n\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('Resource not accessible by integration')\n ) {\n logger.debug(\n { err },\n 'GitHub failure: Resource not accessible by integration',\n );\n return new Error(PLATFORM_INTEGRATION_UNAUTHORIZED);\n }\n if (err.statusCode === 401) {\n // Warn once for github.com token if unauthorized\n const hostname = parseUrl(url)?.hostname;\n // v8 ignore else -- TODO: add test #40625\n if (hostname === 'github.com' || hostname === 'api.github.com') {\n logger.once.warn('github.com token 401 unauthorized');\n }\n if (message.includes('Bad credentials')) {\n const rateLimit = err.headers?.['x-ratelimit-limit'] ?? -1;\n logger.debug(\n {\n token: maskToken(opts.token),\n err,\n },\n 'GitHub failure: Bad credentials',\n );\n if (rateLimit === '60') {\n return new ExternalHostError(err, 'github');\n }\n return new Error(PLATFORM_BAD_CREDENTIALS);\n }\n }\n if (err.statusCode === 422) {\n if (\n message.includes('Review cannot be requested from pull request author')\n ) {\n return err;\n }\n\n const errors = GithubErrors.parse(err.body?.errors);\n if (errors.some((e) => e.field === 'milestone')) {\n return err;\n }\n if (errors.some((e) => e.code === 'invalid')) {\n logger.debug({ err }, 'Received invalid response - aborting');\n return new Error(REPOSITORY_CHANGED);\n }\n if (\n errors.some((e) => e.message?.startsWith('A pull request already exists'))\n ) {\n return err;\n }\n logger.debug({ err }, '422 Error thrown from GitHub');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 410 &&\n err.body?.message === 'Issues are disabled for this repo'\n ) {\n return err;\n }\n return err;\n}\n\ninterface GraphqlPaginatedContent<T = unknown> {\n nodes?: T[];\n edges?: T[];\n pageInfo: { hasNextPage: boolean; endCursor: string };\n}\n\nfunction constructAcceptString(input?: unknown): string {\n const defaultAccept = 'application/vnd.github.v3+json';\n const acceptStrings = isString(input) ? input.split(regEx(/\\s*,\\s*/)) : [];\n\n // TODO: regression of #6736\n // v8 ignore else -- TODO: add test #40625\n if (\n !acceptStrings.some((x) => x === defaultAccept) &&\n (!acceptStrings.some((x) => x.startsWith('application/vnd.github.')) ||\n acceptStrings.length < 2)\n ) {\n acceptStrings.push(defaultAccept);\n }\n return acceptStrings.join(', ');\n}\n\nconst MAX_GRAPHQL_PAGE_SIZE = 100;\n\ninterface GraphqlPageCacheItem {\n pageLastResizedAt: string;\n pageSize: number;\n}\n\nexport type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;\n\nfunction getGraphqlPageSize(\n fieldName: string,\n defaultPageSize = MAX_GRAPHQL_PAGE_SIZE,\n): number {\n const cache = getCache();\n const graphqlPageCache = cache?.platform?.github\n ?.graphqlPageCache as GraphqlPageCache;\n const cachedRecord = graphqlPageCache?.[fieldName];\n\n if (graphqlPageCache && cachedRecord) {\n logger.debug(\n { fieldName, ...cachedRecord },\n 'GraphQL page size: found cached value',\n );\n\n const oldPageSize = cachedRecord.pageSize;\n\n const now = DateTime.local();\n const then = DateTime.fromISO(cachedRecord.pageLastResizedAt);\n const expiry = then.plus({ hours: 24 });\n if (now > expiry) {\n const newPageSize = Math.min(oldPageSize * 2, MAX_GRAPHQL_PAGE_SIZE);\n if (newPageSize < MAX_GRAPHQL_PAGE_SIZE) {\n const timestamp = now.toISO();\n\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp },\n 'GraphQL page size: expanding',\n );\n\n cachedRecord.pageLastResizedAt = timestamp;\n cachedRecord.pageSize = newPageSize;\n } else {\n logger.debug(\n { fieldName, oldPageSize, newPageSize },\n 'GraphQL page size: expanded to default page size',\n );\n\n delete graphqlPageCache[fieldName];\n }\n\n return newPageSize;\n }\n\n return oldPageSize;\n }\n\n return defaultPageSize;\n}\n\nfunction setGraphqlPageSize(fieldName: string, newPageSize: number): void {\n const oldPageSize = getGraphqlPageSize(fieldName);\n if (newPageSize !== oldPageSize) {\n const now = DateTime.local();\n const pageLastResizedAt = now.toISO();\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp: pageLastResizedAt },\n 'GraphQL page size: shrinking',\n );\n const cache = getCache();\n cache.platform ??= {};\n cache.platform.github ??= {};\n cache.platform.github.graphqlPageCache ??= {};\n const graphqlPageCache = cache.platform.github\n .graphqlPageCache as GraphqlPageCache;\n graphqlPageCache[fieldName] = {\n pageLastResizedAt,\n pageSize: newPageSize,\n };\n }\n}\n\nfunction replaceUrlBase(url: URL, baseUrl: string): URL {\n const relativeUrl = `${url.pathname}${url.search}`;\n return new URL(relativeUrl, baseUrl);\n}\n\nfunction resolvePaginationUrl(\n url: string,\n baseUrl: string | undefined,\n rebasePaginationLinks: boolean,\n): URL {\n const parsedUrl = new URL(url, baseUrl);\n const rebasePagination =\n !!baseUrl &&\n rebasePaginationLinks &&\n // Preserve github.com URLs for use cases like release notes\n parsedUrl.origin !== 'https://api.github.com';\n return rebasePagination ? replaceUrlBase(parsedUrl, baseUrl) : parsedUrl;\n}\n\nexport class GithubHttp extends HttpBase<GithubHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType = 'github', options?: HttpOptions) {\n super(hostType, options);\n }\n\n protected override extraOptions(): readonly string[] {\n return super\n .extraOptions()\n .concat([\n 'pageLimit',\n 'paginate',\n 'paginationField',\n 'repository',\n ] as (keyof GithubHttpOptions)[]);\n }\n\n protected override processOptions(\n url: URL,\n opts: InternalHttpOptions & GithubBaseHttpOptions,\n ): void {\n if (!opts.token) {\n // create a mutable copy of `url`\n const authUrl = parseUrl(url.toString())!;\n\n if (opts.repository) {\n // set authUrl to https://api.github.com/repos/org/repo or https://gihub.domain.com/api/v3/repos/org/repo\n authUrl.hash = '';\n authUrl.search = '';\n authUrl.pathname = joinUrlParts(\n authUrl.pathname.startsWith('/api/v3') ? '/api/v3' : '',\n 'repos',\n `${opts.repository}`,\n );\n }\n\n let readOnly = opts.readOnly;\n const { method = 'get' } = opts;\n if (\n readOnly === undefined &&\n ['get', 'head'].includes(method.toLowerCase())\n ) {\n readOnly = true;\n }\n const { token } = findMatchingRule(authUrl.toString(), {\n hostType: this.hostType,\n readOnly,\n });\n opts.token = token;\n }\n\n const accept = constructAcceptString(opts.headers?.accept);\n\n opts.headers = {\n ...opts.headers,\n accept,\n };\n }\n\n protected override handleError(\n url: string | URL,\n opts: HttpOptions,\n err: GotLegacyError,\n ): never {\n throw handleGotError(err, url, opts);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GithubHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const httpOptions = coerceObject(options.httpOptions);\n const resolvedUrl = this.resolveUrl(options.url, httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (httpOptions.paginate) {\n delete httpOptions.cacheProvider;\n httpOptions.memCache = false;\n // Check if result is paginated\n const pageLimit = httpOptions.pageLimit ?? 10;\n const linkHeader = parseLinkHeader(result?.headers?.link);\n const next = linkHeader?.next;\n const env = getEnv();\n if (next?.url) {\n const baseUrl = httpOptions.baseUrl ?? this.baseUrl;\n const rebasePaginationLinks = !!env.RENOVATE_X_REBASE_PAGINATION_LINKS;\n const firstPageUrl = resolvePaginationUrl(\n next.url,\n baseUrl,\n rebasePaginationLinks,\n );\n // Don't follow a cross-origin request, unless we've been explicitly requested to do so with `RENOVATE_X_REBASE_PAGINATION_LINKS`\n if (firstPageUrl.origin === resolvedUrl.origin) {\n let pages: HttpResponse<T>[];\n if (linkHeader?.last?.page) {\n logger.debug('Using GitHub offset-based pagination');\n let lastPage = parseInt(linkHeader.last.page, 10);\n // v8 ignore else -- TODO: add test #40625\n if (!env.RENOVATE_PAGINATE_ALL && httpOptions.paginate !== 'all') {\n lastPage = Math.min(pageLimit, lastPage);\n }\n const queue = [...range(2, lastPage)].map(\n (pageNumber) => (): Promise<HttpResponse<T>> => {\n // copy before modifying searchParams\n const nextUrl = parseUrl(firstPageUrl.toString())!;\n nextUrl.searchParams.set('page', String(pageNumber));\n return super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n },\n );\n pages = await p.all(queue);\n } else {\n logger.debug('Using GitHub cursor-based pagination');\n pages = [];\n const paginateAll =\n !!env.RENOVATE_PAGINATE_ALL || httpOptions.paginate === 'all';\n const cursorPageLimit = paginateAll\n ? MAX_PAGINATION_PAGES\n : pageLimit;\n let nextUrl: URL | null = firstPageUrl;\n let pageNumber = 2;\n for (; nextUrl && pageNumber <= cursorPageLimit; pageNumber += 1) {\n if (nextUrl.origin !== resolvedUrl.origin) {\n logger.once.warn(\n {\n requestHost: resolvedUrl.host,\n paginationHost: nextUrl.host,\n },\n 'Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different host in pagination links.',\n );\n break;\n }\n const nextPage: HttpResponse<T> =\n await super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n pages.push(nextPage);\n const nextLink = parseLinkHeader(nextPage.headers.link)?.next;\n nextUrl = nextLink?.url\n ? resolvePaginationUrl(\n nextLink.url,\n baseUrl,\n rebasePaginationLinks,\n )\n : null;\n }\n if (paginateAll && nextUrl && pageNumber > cursorPageLimit) {\n logger.warn(\n { maxPages: MAX_PAGINATION_PAGES },\n 'GitHub cursor pagination limit reached',\n );\n }\n }\n // v8 ignore else -- TODO: add test #40625\n if (httpOptions.paginationField && isPlainObject(result.body)) {\n const paginatedResult = result.body[httpOptions.paginationField];\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(paginatedResult)) {\n for (const nextPage of pages) {\n // v8 ignore else -- TODO: add test #40625\n if (isPlainObject(nextPage.body)) {\n const nextPageResults =\n nextPage.body[httpOptions.paginationField];\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(nextPageResults)) {\n paginatedResult.push(...nextPageResults);\n }\n }\n }\n }\n } else if (isArray<T>(result.body)) {\n for (const nextPage of pages) {\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(nextPage.body)) {\n result.body.push(...nextPage.body);\n }\n }\n }\n } else {\n // make sure that users are aware if there are any (potentially malicious, or misconfigured) pagination links being returned\n logger.once.warn(\n {\n requestHost: resolvedUrl.host,\n paginationHost: firstPageUrl.host,\n },\n 'Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different host in pagination links.',\n );\n }\n }\n }\n return result;\n }\n\n public async requestGraphql<T = unknown>(\n query: string,\n options: GraphqlOptions = {},\n ): Promise<GithubGraphqlResponse<T> | null> {\n const path = 'graphql';\n\n const { paginate, count = MAX_GRAPHQL_PAGE_SIZE, cursor = null } = options;\n let { variables } = options;\n if (paginate) {\n variables = {\n ...variables,\n count,\n cursor,\n };\n }\n const body = variables ? { query, variables } : { query };\n\n const opts: GithubBaseHttpOptions = {\n baseUrl: baseUrl.replace('/v3/', '/'), // GHE uses unversioned graphql path\n body,\n headers: { accept: options?.acceptHeader },\n readOnly: options.readOnly,\n };\n if (options.token) {\n opts.token = options.token;\n }\n logger.trace(`Performing Github GraphQL request`);\n\n let response: GithubGraphqlResponse<T> | null;\n try {\n const res = await this.postJson<GithubGraphqlResponse<T>>(path, opts);\n response = res.body;\n } catch (err) {\n logger.debug({ err, query, options }, 'Unexpected GraphQL Error');\n if (err instanceof ExternalHostError && count && count > 10) {\n logger.info('Reducing pagination count to workaround graphql errors');\n return null;\n }\n throw handleGotError(err, path, opts);\n }\n\n if (isGraphqlRateLimited(response?.errors)) {\n throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n\n return response;\n }\n\n async queryRepoField<T = Record<string, unknown>>(\n query: string,\n fieldName: string,\n options: GraphqlOptions = {},\n ): Promise<T[]> {\n const result: T[] = [];\n\n const { paginate = true } = options;\n\n let optimalCount: null | number = null;\n let count = getGraphqlPageSize(\n fieldName,\n options.count ?? MAX_GRAPHQL_PAGE_SIZE,\n );\n let limit = options.limit ?? 1000;\n let cursor: string | null = null;\n\n let isIterating = true;\n while (isIterating) {\n const res = await this.requestGraphql<GithubGraphqlRepoData<T>>(query, {\n ...options,\n count: Math.min(count, limit),\n cursor,\n paginate,\n });\n const repositoryData = res?.data?.repository;\n if (\n isNonEmptyObject(repositoryData) &&\n !isNullOrUndefined(repositoryData[fieldName])\n ) {\n optimalCount = count;\n\n const {\n nodes = [],\n edges = [],\n pageInfo,\n } = repositoryData[fieldName] as GraphqlPaginatedContent<T>;\n result.push(...nodes);\n result.push(...edges);\n\n limit = Math.max(0, limit - nodes.length - edges.length);\n\n if (limit === 0) {\n isIterating = false;\n } else if (paginate && pageInfo) {\n const { hasNextPage, endCursor } = pageInfo;\n if (hasNextPage && endCursor) {\n cursor = endCursor;\n } else {\n isIterating = false;\n }\n }\n } else {\n count = Math.floor(count / 2);\n if (count === 0) {\n logger.warn({ query, options, res }, 'Error fetching GraphQL nodes');\n isIterating = false;\n }\n }\n\n if (!paginate) {\n isIterating = false;\n }\n }\n\n if (optimalCount && optimalCount < MAX_GRAPHQL_PAGE_SIZE) {\n setGraphqlPageSize(fieldName, optimalCount);\n }\n\n return result;\n }\n\n /**\n * Get the raw text file from a URL.\n * Only use this method to fetch text files.\n *\n * @param url Full API URL, contents path or path inside the repository to the file\n * @param options\n *\n * @example url = 'https://api.github.com/repos/renovatebot/renovate/contents/package.json'\n * @example url = 'renovatebot/renovate/contents/package.json'\n * @example url = 'package.json' & options.repository = 'renovatebot/renovate'\n */\n public async getRawTextFile(\n url: string,\n options: InternalHttpOptions & GithubBaseHttpOptions = {},\n ): Promise<HttpResponse> {\n const newOptions: InternalHttpOptions & GithubBaseHttpOptions = {\n ...options,\n headers: {\n accept: 'application/vnd.github.raw+json',\n },\n };\n\n let newURL = url;\n const httpRegex = regEx(/^https?:\\/\\//);\n if (options.repository && !httpRegex.test(options.repository)) {\n newURL = joinUrlParts(options.repository, 'contents', url);\n }\n\n return await this.getText(newURL, newOptions);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github.js","names":["hostRules.find","p.all"],"sources":["../../../lib/util/http/github.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyObject,\n isNullOrUndefined,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { z } from 'zod/v4';\nimport { GlobalConfig } from '../../config/global.ts';\nimport {\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../constants/error-messages.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport { getCache } from '../cache/repository/index.ts';\nimport { getEnv } from '../env.ts';\nimport * as hostRules from '../host-rules.ts';\nimport { maskToken } from '../mask.ts';\nimport { coerceObject } from '../object.ts';\nimport * as p from '../promises.ts';\nimport { range } from '../range.ts';\nimport { regEx } from '../regex.ts';\nimport { LooseArray } from '../schema-utils/index.ts';\nimport { joinUrlParts, parseLinkHeader, parseUrl } from '../url.ts';\nimport { findMatchingRule } from './host-rules.ts';\nimport {\n HttpBase,\n type InternalHttpOptions,\n type InternalJsonUnsafeOptions,\n} from './http.ts';\nimport type { GotLegacyError } from './legacy.ts';\nimport type {\n GraphqlOptions,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types.ts';\n\nconst githubBaseUrl = 'https://api.github.com/';\nconst MAX_PAGINATION_PAGES = 100;\nlet baseUrl = githubBaseUrl;\nexport function setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\nexport interface GithubBaseHttpOptions extends HttpOptions {\n repository?: string;\n}\n\nexport interface GithubHttpOptions extends GithubBaseHttpOptions {\n paginate?: boolean | string;\n paginationField?: string;\n pageLimit?: number;\n}\n\ninterface GithubGraphqlRepoData<T = unknown> {\n repository?: T;\n}\n\nexport type GithubGraphqlResponse<T = unknown> =\n | {\n data: T;\n errors?: never;\n }\n | {\n data?: never;\n errors: {\n type?: string;\n code?: string;\n message: string;\n }[];\n };\n\n/**\n * GitHub reports a spent GraphQL budget in two shapes: `RATE_LIMITED` from the\n * GraphQL API itself, and `graphql_rate_limit` when an app installation has\n * exhausted its allowance. Both mean \"come back later\", not \"unknown error\".\n */\nfunction isGraphqlRateLimited(\n errors: { type?: string; code?: string }[] | undefined,\n): boolean {\n return !!errors?.some(\n (err) => err.type === 'RATE_LIMITED' || err.code === 'graphql_rate_limit',\n );\n}\n\nconst GithubError = z.object({\n field: z.string().optional(),\n code: z.string().optional(),\n message: z.string().optional(),\n});\n\n/**\n * GitHub usually returns `errors` as an array, but not always - normalize it\n * into an array of error objects, dropping anything that doesn't fit.\n */\nconst GithubErrors = z\n .union([LooseArray(GithubError), GithubError.transform((error) => [error])])\n .catch([]);\n\nfunction handleGotError(\n err: GotLegacyError,\n url: string | URL,\n opts: GithubBaseHttpOptions,\n): Error {\n const path = url.toString();\n let message = err.message || '';\n const body = err.response?.body;\n if (isPlainObject(body) && 'message' in body) {\n message = String(body.message);\n }\n if (\n err.code === 'ERR_HTTP2_STREAM_ERROR' ||\n err.code === 'ENOTFOUND' ||\n err.code === 'ETIMEDOUT' ||\n err.code === 'EAI_AGAIN' ||\n err.code === 'ECONNRESET'\n ) {\n logger.debug({ err }, 'GitHub failure: RequestError');\n return new ExternalHostError(err, 'github');\n }\n if (err.name === 'ParseError') {\n logger.debug({ err }, '');\n return new ExternalHostError(err, 'github');\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug({ err }, 'GitHub failure: 5xx');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have triggered an abuse detection mechanism')\n ) {\n logger.debug({ err }, 'GitHub failure: abuse detection');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have exceeded a secondary rate limit')\n ) {\n logger.warn({ err }, 'GitHub failure: secondary rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) {\n logger.debug(`Endpoint: ${path}, needs paid GitHub plan`);\n return err;\n }\n if (err.statusCode === 403 && message.includes('rate limit exceeded')) {\n logger.debug({ err }, 'GitHub failure: rate limit');\n\n const parsed = parseUrl(baseUrl);\n\n const rule = hostRules.find({ url: baseUrl });\n if (rule.token || rule.password) {\n logger.once.warn(\n 'Rate limit exceeded for api.github.com, even though we are authenticated',\n );\n } else {\n if (parsed?.hostname === 'api.github.com') {\n logger.once.warn(\n {\n documentationUrl: `${GlobalConfig.get('productLinks').documentation}getting-started/running/#githubcom-token-for-changelogs-and-tools`,\n },\n 'Rate limit exceeded for api.github.com, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN',\n );\n } else {\n logger.once.warn(\n { host: parsed!.host },\n 'Rate limit exceeded, as no hostRules set for this host',\n );\n }\n }\n\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('Resource not accessible by integration')\n ) {\n logger.debug(\n { err },\n 'GitHub failure: Resource not accessible by integration',\n );\n return new Error(PLATFORM_INTEGRATION_UNAUTHORIZED);\n }\n if (err.statusCode === 401) {\n // Warn once for github.com token if unauthorized\n const hostname = parseUrl(url)?.hostname;\n // v8 ignore else -- TODO: add test #40625\n if (hostname === 'github.com' || hostname === 'api.github.com') {\n logger.once.warn('github.com token 401 unauthorized');\n }\n if (message.includes('Bad credentials')) {\n const rateLimit = err.headers?.['x-ratelimit-limit'] ?? -1;\n logger.debug(\n {\n token: maskToken(opts.token),\n err,\n },\n 'GitHub failure: Bad credentials',\n );\n if (rateLimit === '60') {\n return new ExternalHostError(err, 'github');\n }\n return new Error(PLATFORM_BAD_CREDENTIALS);\n }\n }\n if (err.statusCode === 422) {\n if (\n message.includes('Review cannot be requested from pull request author')\n ) {\n return err;\n }\n\n const errors = GithubErrors.parse(err.body?.errors);\n if (errors.some((e) => e.field === 'milestone')) {\n return err;\n }\n if (errors.some((e) => e.code === 'invalid')) {\n logger.debug({ err }, 'Received invalid response - aborting');\n return new Error(REPOSITORY_CHANGED);\n }\n if (\n errors.some((e) => e.message?.startsWith('A pull request already exists'))\n ) {\n return err;\n }\n logger.debug({ err }, '422 Error thrown from GitHub');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 410 &&\n err.body?.message === 'Issues are disabled for this repo'\n ) {\n return err;\n }\n return err;\n}\n\ninterface GraphqlPaginatedContent<T = unknown> {\n nodes?: T[];\n edges?: T[];\n pageInfo: { hasNextPage: boolean; endCursor: string };\n}\n\nfunction constructAcceptString(input?: unknown): string {\n const defaultAccept = 'application/vnd.github.v3+json';\n const acceptStrings = isString(input) ? input.split(regEx(/\\s*,\\s*/)) : [];\n\n // TODO: regression of #6736\n // v8 ignore else -- TODO: add test #40625\n if (\n !acceptStrings.some((x) => x === defaultAccept) &&\n (!acceptStrings.some((x) => x.startsWith('application/vnd.github.')) ||\n acceptStrings.length < 2)\n ) {\n acceptStrings.push(defaultAccept);\n }\n return acceptStrings.join(', ');\n}\n\nconst MAX_GRAPHQL_PAGE_SIZE = 100;\n\ninterface GraphqlPageCacheItem {\n pageLastResizedAt: string;\n pageSize: number;\n}\n\nexport type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;\n\nfunction getGraphqlPageSize(\n fieldName: string,\n defaultPageSize = MAX_GRAPHQL_PAGE_SIZE,\n): number {\n const cache = getCache();\n const graphqlPageCache = cache?.platform?.github\n ?.graphqlPageCache as GraphqlPageCache;\n const cachedRecord = graphqlPageCache?.[fieldName];\n\n if (graphqlPageCache && cachedRecord) {\n logger.debug(\n { fieldName, ...cachedRecord },\n 'GraphQL page size: found cached value',\n );\n\n const oldPageSize = cachedRecord.pageSize;\n\n const now = DateTime.local();\n const then = DateTime.fromISO(cachedRecord.pageLastResizedAt);\n const expiry = then.plus({ hours: 24 });\n if (now > expiry) {\n const newPageSize = Math.min(oldPageSize * 2, MAX_GRAPHQL_PAGE_SIZE);\n if (newPageSize < MAX_GRAPHQL_PAGE_SIZE) {\n const timestamp = now.toISO();\n\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp },\n 'GraphQL page size: expanding',\n );\n\n cachedRecord.pageLastResizedAt = timestamp;\n cachedRecord.pageSize = newPageSize;\n } else {\n logger.debug(\n { fieldName, oldPageSize, newPageSize },\n 'GraphQL page size: expanded to default page size',\n );\n\n delete graphqlPageCache[fieldName];\n }\n\n return newPageSize;\n }\n\n return oldPageSize;\n }\n\n return defaultPageSize;\n}\n\nfunction setGraphqlPageSize(fieldName: string, newPageSize: number): void {\n const oldPageSize = getGraphqlPageSize(fieldName);\n if (newPageSize !== oldPageSize) {\n const now = DateTime.local();\n const pageLastResizedAt = now.toISO();\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp: pageLastResizedAt },\n 'GraphQL page size: shrinking',\n );\n const cache = getCache();\n cache.platform ??= {};\n cache.platform.github ??= {};\n cache.platform.github.graphqlPageCache ??= {};\n const graphqlPageCache = cache.platform.github\n .graphqlPageCache as GraphqlPageCache;\n graphqlPageCache[fieldName] = {\n pageLastResizedAt,\n pageSize: newPageSize,\n };\n }\n}\n\nfunction replaceUrlBase(url: URL, baseUrl: string): URL {\n const relativeUrl = `${url.pathname}${url.search}`;\n return new URL(relativeUrl, baseUrl);\n}\n\nfunction resolvePaginationUrl(\n url: string,\n baseUrl: string | undefined,\n rebasePaginationLinks: boolean,\n): URL {\n const parsedUrl = new URL(url, baseUrl);\n const rebasePagination =\n !!baseUrl &&\n rebasePaginationLinks &&\n // Preserve github.com URLs for use cases like release notes\n parsedUrl.origin !== 'https://api.github.com';\n return rebasePagination ? replaceUrlBase(parsedUrl, baseUrl) : parsedUrl;\n}\n\nexport class GithubHttp extends HttpBase<GithubHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType = 'github', options?: HttpOptions) {\n super(hostType, options);\n }\n\n protected override extraOptions(): readonly string[] {\n return super\n .extraOptions()\n .concat([\n 'pageLimit',\n 'paginate',\n 'paginationField',\n 'repository',\n ] as (keyof GithubHttpOptions)[]);\n }\n\n protected override processOptions(\n url: URL,\n opts: InternalHttpOptions & GithubBaseHttpOptions,\n ): void {\n if (!opts.token) {\n // create a mutable copy of `url`\n const authUrl = parseUrl(url.toString())!;\n\n if (opts.repository) {\n // set authUrl to https://api.github.com/repos/org/repo or https://gihub.domain.com/api/v3/repos/org/repo\n authUrl.hash = '';\n authUrl.search = '';\n authUrl.pathname = joinUrlParts(\n authUrl.pathname.startsWith('/api/v3') ? '/api/v3' : '',\n 'repos',\n `${opts.repository}`,\n );\n }\n\n let readOnly = opts.readOnly;\n const { method = 'get' } = opts;\n if (\n readOnly === undefined &&\n ['get', 'head'].includes(method.toLowerCase())\n ) {\n readOnly = true;\n }\n const { token } = findMatchingRule(authUrl.toString(), {\n hostType: this.hostType,\n readOnly,\n });\n opts.token = token;\n }\n\n const accept = constructAcceptString(opts.headers?.accept);\n\n opts.headers = {\n ...opts.headers,\n accept,\n };\n }\n\n protected override handleError(\n url: string | URL,\n opts: HttpOptions,\n err: GotLegacyError,\n ): never {\n throw handleGotError(err, url, opts);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GithubHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const httpOptions = coerceObject(options.httpOptions);\n const resolvedUrl = this.resolveUrl(options.url, httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (httpOptions.paginate) {\n delete httpOptions.cacheProvider;\n httpOptions.memCache = false;\n // Check if result is paginated\n const pageLimit = httpOptions.pageLimit ?? 10;\n const linkHeader = parseLinkHeader(result?.headers?.link);\n const next = linkHeader?.next;\n const env = getEnv();\n if (next?.url) {\n const baseUrl = httpOptions.baseUrl ?? this.baseUrl;\n const rebasePaginationLinks = !!env.RENOVATE_X_REBASE_PAGINATION_LINKS;\n const firstPageUrl = resolvePaginationUrl(\n next.url,\n baseUrl,\n rebasePaginationLinks,\n );\n // Don't follow a cross-origin request, unless we've been explicitly requested to do so with `RENOVATE_X_REBASE_PAGINATION_LINKS`\n if (firstPageUrl.origin === resolvedUrl.origin) {\n let pages: HttpResponse<T>[];\n if (linkHeader?.last?.page) {\n logger.debug('Using GitHub offset-based pagination');\n let lastPage = parseInt(linkHeader.last.page, 10);\n // v8 ignore else -- TODO: add test #40625\n if (!env.RENOVATE_PAGINATE_ALL && httpOptions.paginate !== 'all') {\n lastPage = Math.min(pageLimit, lastPage);\n }\n const queue = [...range(2, lastPage)].map(\n (pageNumber) => (): Promise<HttpResponse<T>> => {\n // copy before modifying searchParams\n const nextUrl = parseUrl(firstPageUrl.toString())!;\n nextUrl.searchParams.set('page', String(pageNumber));\n return super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n },\n );\n pages = await p.all(queue);\n } else {\n logger.debug('Using GitHub cursor-based pagination');\n pages = [];\n const paginateAll =\n !!env.RENOVATE_PAGINATE_ALL || httpOptions.paginate === 'all';\n const cursorPageLimit = paginateAll\n ? MAX_PAGINATION_PAGES\n : pageLimit;\n let nextUrl: URL | null = firstPageUrl;\n let pageNumber = 2;\n for (; nextUrl && pageNumber <= cursorPageLimit; pageNumber += 1) {\n if (nextUrl.origin !== resolvedUrl.origin) {\n logger.once.warn(\n {\n requestOrigin: resolvedUrl.origin,\n paginationOrigin: nextUrl.origin,\n },\n 'Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different origin in pagination links.',\n );\n break;\n }\n const nextPage: HttpResponse<T> =\n await super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n pages.push(nextPage);\n const nextLink = parseLinkHeader(nextPage.headers.link)?.next;\n nextUrl = nextLink?.url\n ? resolvePaginationUrl(\n nextLink.url,\n baseUrl,\n rebasePaginationLinks,\n )\n : null;\n }\n if (paginateAll && nextUrl && pageNumber > cursorPageLimit) {\n logger.warn(\n { maxPages: MAX_PAGINATION_PAGES },\n 'GitHub cursor pagination limit reached',\n );\n }\n }\n // v8 ignore else -- TODO: add test #40625\n if (httpOptions.paginationField && isPlainObject(result.body)) {\n const paginatedResult = result.body[httpOptions.paginationField];\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(paginatedResult)) {\n for (const nextPage of pages) {\n // v8 ignore else -- TODO: add test #40625\n if (isPlainObject(nextPage.body)) {\n const nextPageResults =\n nextPage.body[httpOptions.paginationField];\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(nextPageResults)) {\n paginatedResult.push(...nextPageResults);\n }\n }\n }\n }\n } else if (isArray<T>(result.body)) {\n for (const nextPage of pages) {\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(nextPage.body)) {\n result.body.push(...nextPage.body);\n }\n }\n }\n } else {\n // make sure that users are aware if there are any (potentially malicious, or misconfigured) pagination links being returned\n logger.once.warn(\n {\n requestOrigin: resolvedUrl.origin,\n paginationOrigin: firstPageUrl.origin,\n },\n 'Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different origin in pagination links.',\n );\n }\n }\n }\n return result;\n }\n\n public async requestGraphql<T = unknown>(\n query: string,\n options: GraphqlOptions = {},\n ): Promise<GithubGraphqlResponse<T> | null> {\n const path = 'graphql';\n\n const { paginate, count = MAX_GRAPHQL_PAGE_SIZE, cursor = null } = options;\n let { variables } = options;\n if (paginate) {\n variables = {\n ...variables,\n count,\n cursor,\n };\n }\n const body = variables ? { query, variables } : { query };\n\n const opts: GithubBaseHttpOptions = {\n baseUrl: baseUrl.replace('/v3/', '/'), // GHE uses unversioned graphql path\n body,\n headers: { accept: options?.acceptHeader },\n readOnly: options.readOnly,\n };\n if (options.token) {\n opts.token = options.token;\n }\n logger.trace(`Performing Github GraphQL request`);\n\n let response: GithubGraphqlResponse<T> | null;\n try {\n const res = await this.postJson<GithubGraphqlResponse<T>>(path, opts);\n response = res.body;\n } catch (err) {\n logger.debug({ err, query, options }, 'Unexpected GraphQL Error');\n if (err instanceof ExternalHostError && count && count > 10) {\n logger.info('Reducing pagination count to workaround graphql errors');\n return null;\n }\n throw handleGotError(err, path, opts);\n }\n\n if (isGraphqlRateLimited(response?.errors)) {\n throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n\n return response;\n }\n\n async queryRepoField<T = Record<string, unknown>>(\n query: string,\n fieldName: string,\n options: GraphqlOptions = {},\n ): Promise<T[]> {\n const result: T[] = [];\n\n const { paginate = true } = options;\n\n let optimalCount: null | number = null;\n let count = getGraphqlPageSize(\n fieldName,\n options.count ?? MAX_GRAPHQL_PAGE_SIZE,\n );\n let limit = options.limit ?? 1000;\n let cursor: string | null = null;\n\n let isIterating = true;\n while (isIterating) {\n const res = await this.requestGraphql<GithubGraphqlRepoData<T>>(query, {\n ...options,\n count: Math.min(count, limit),\n cursor,\n paginate,\n });\n const repositoryData = res?.data?.repository;\n if (\n isNonEmptyObject(repositoryData) &&\n !isNullOrUndefined(repositoryData[fieldName])\n ) {\n optimalCount = count;\n\n const {\n nodes = [],\n edges = [],\n pageInfo,\n } = repositoryData[fieldName] as GraphqlPaginatedContent<T>;\n result.push(...nodes);\n result.push(...edges);\n\n limit = Math.max(0, limit - nodes.length - edges.length);\n\n if (limit === 0) {\n isIterating = false;\n } else if (paginate && pageInfo) {\n const { hasNextPage, endCursor } = pageInfo;\n if (hasNextPage && endCursor) {\n cursor = endCursor;\n } else {\n isIterating = false;\n }\n }\n } else {\n count = Math.floor(count / 2);\n if (count === 0) {\n logger.warn({ query, options, res }, 'Error fetching GraphQL nodes');\n isIterating = false;\n }\n }\n\n if (!paginate) {\n isIterating = false;\n }\n }\n\n if (optimalCount && optimalCount < MAX_GRAPHQL_PAGE_SIZE) {\n setGraphqlPageSize(fieldName, optimalCount);\n }\n\n return result;\n }\n\n /**\n * Get the raw text file from a URL.\n * Only use this method to fetch text files.\n *\n * @param url Full API URL, contents path or path inside the repository to the file\n * @param options\n *\n * @example url = 'https://api.github.com/repos/renovatebot/renovate/contents/package.json'\n * @example url = 'renovatebot/renovate/contents/package.json'\n * @example url = 'package.json' & options.repository = 'renovatebot/renovate'\n */\n public async getRawTextFile(\n url: string,\n options: InternalHttpOptions & GithubBaseHttpOptions = {},\n ): Promise<HttpResponse> {\n const newOptions: InternalHttpOptions & GithubBaseHttpOptions = {\n ...options,\n headers: {\n accept: 'application/vnd.github.raw+json',\n },\n };\n\n let newURL = url;\n const httpRegex = regEx(/^https?:\\/\\//);\n if (options.repository && !httpRegex.test(options.repository)) {\n newURL = joinUrlParts(options.repository, 'contents', url);\n }\n\n return await this.getText(newURL, newOptions);\n }\n}\n"],"mappings":"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"}
|
package/dist/util/http/gitlab.js
CHANGED
|
@@ -46,9 +46,9 @@ var GitlabHttp = class extends HttpBase {
|
|
|
46
46
|
// v8 ignore else -- TODO: add test #40625
|
|
47
47
|
if (isArray(nextResult.body)) result.body.push(...nextResult.body);
|
|
48
48
|
} else logger.once.warn({
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}, "Ignoring cross-origin GitLab pagination link. Set GITLAB_IGNORE_REPO_URL if this is a self-hosted instance that returns a different
|
|
49
|
+
requestOrigin: resolvedUrl.origin,
|
|
50
|
+
paginationOrigin: nextUrl.origin
|
|
51
|
+
}, "Ignoring cross-origin GitLab pagination link. Set GITLAB_IGNORE_REPO_URL if this is a self-hosted instance that returns a different origin in pagination links.");
|
|
52
52
|
}
|
|
53
53
|
} catch (err) {
|
|
54
54
|
logger.warn({ err }, "Pagination error");
|
|
@@ -95,9 +95,9 @@ var GitlabHttp = class extends HttpBase {
|
|
|
95
95
|
*/
|
|
96
96
|
function isRetryablePostError(error) {
|
|
97
97
|
const { response } = error;
|
|
98
|
-
if (response?.statusCode === 409) return response.rawBody.toString().includes("Resource lock");
|
|
98
|
+
if (response?.statusCode === 409) return Buffer.from(response.rawBody).toString().includes("Resource lock");
|
|
99
99
|
if (response?.statusCode === 400) {
|
|
100
|
-
const rawBody = response.rawBody.toString();
|
|
100
|
+
const rawBody = Buffer.from(response.rawBody).toString();
|
|
101
101
|
return rawBody.includes("source_branch") && rawBody.includes("does not exist");
|
|
102
102
|
}
|
|
103
103
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","names":[],"sources":["../../../lib/util/http/gitlab.ts"],"sourcesContent":["import { isArray, isString } from '@sindresorhus/is';\nimport { RequestError, type RetryObject } from 'got';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport { getEnv } from '../env.ts';\nimport { parseLinkHeader, parseUrl } from '../url.ts';\nimport { HttpBase, type InternalJsonUnsafeOptions } from './http.ts';\nimport type { HttpMethod, HttpOptions, HttpResponse } from './types.ts';\n\nlet baseUrl = 'https://gitlab.com/api/v4/';\nexport function setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\nexport interface GitlabHttpOptions extends HttpOptions {\n paginate?: boolean;\n}\n\nexport class GitlabHttp extends HttpBase<GitlabHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(type = 'gitlab', options?: GitlabHttpOptions) {\n super(type, options);\n }\n\n protected override extraOptions(): readonly string[] {\n return super\n .extraOptions()\n .concat(['paginate'] as (keyof GitlabHttpOptions)[]);\n }\n\n protected override async requestJsonUnsafe<T = unknown>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GitlabHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const resolvedUrl = this.resolveUrl(options.url, options.httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n opts.httpOptions ??= {};\n opts.httpOptions.throwHttpErrors = true;\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (opts.httpOptions.paginate && isArray(result.body)) {\n opts.httpOptions.memCache = false;\n\n // Check if result is paginated\n try {\n const linkHeader = parseLinkHeader(result.headers.link);\n const nextUrl = linkHeader?.next?.url\n ? parseUrl(linkHeader.next.url)\n : null;\n if (nextUrl) {\n if (getEnv().GITLAB_IGNORE_REPO_URL) {\n const defaultEndpoint = parseUrl(baseUrl)!;\n nextUrl.protocol = defaultEndpoint.protocol;\n nextUrl.host = defaultEndpoint.host;\n }\n\n // Don't follow a cross-origin request, unless we've been explicitly requested to do so with `RENOVATE_X_REBASE_PAGINATION_LINKS`\n if (nextUrl.origin === resolvedUrl.origin) {\n opts.url = nextUrl;\n\n const nextResult = await this.requestJsonUnsafe<T>(method, opts);\n // v8 ignore else -- TODO: add test #40625\n if (isArray(nextResult.body)) {\n result.body.push(...nextResult.body);\n }\n } else {\n // make sure that users are aware if there are any (potentially malicious, or misconfigured) pagination links being returned\n logger.once.warn(\n {
|
|
1
|
+
{"version":3,"file":"gitlab.js","names":[],"sources":["../../../lib/util/http/gitlab.ts"],"sourcesContent":["import { isArray, isString } from '@sindresorhus/is';\nimport { RequestError, type RetryObject } from 'got';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport { getEnv } from '../env.ts';\nimport { parseLinkHeader, parseUrl } from '../url.ts';\nimport { HttpBase, type InternalJsonUnsafeOptions } from './http.ts';\nimport type { HttpMethod, HttpOptions, HttpResponse } from './types.ts';\n\nlet baseUrl = 'https://gitlab.com/api/v4/';\nexport function setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\nexport interface GitlabHttpOptions extends HttpOptions {\n paginate?: boolean;\n}\n\nexport class GitlabHttp extends HttpBase<GitlabHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(type = 'gitlab', options?: GitlabHttpOptions) {\n super(type, options);\n }\n\n protected override extraOptions(): readonly string[] {\n return super\n .extraOptions()\n .concat(['paginate'] as (keyof GitlabHttpOptions)[]);\n }\n\n protected override async requestJsonUnsafe<T = unknown>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GitlabHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const resolvedUrl = this.resolveUrl(options.url, options.httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n opts.httpOptions ??= {};\n opts.httpOptions.throwHttpErrors = true;\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (opts.httpOptions.paginate && isArray(result.body)) {\n opts.httpOptions.memCache = false;\n\n // Check if result is paginated\n try {\n const linkHeader = parseLinkHeader(result.headers.link);\n const nextUrl = linkHeader?.next?.url\n ? parseUrl(linkHeader.next.url)\n : null;\n if (nextUrl) {\n if (getEnv().GITLAB_IGNORE_REPO_URL) {\n const defaultEndpoint = parseUrl(baseUrl)!;\n nextUrl.protocol = defaultEndpoint.protocol;\n nextUrl.host = defaultEndpoint.host;\n }\n\n // Don't follow a cross-origin request, unless we've been explicitly requested to do so with `RENOVATE_X_REBASE_PAGINATION_LINKS`\n if (nextUrl.origin === resolvedUrl.origin) {\n opts.url = nextUrl;\n\n const nextResult = await this.requestJsonUnsafe<T>(method, opts);\n // v8 ignore else -- TODO: add test #40625\n if (isArray(nextResult.body)) {\n result.body.push(...nextResult.body);\n }\n } else {\n // make sure that users are aware if there are any (potentially malicious, or misconfigured) pagination links being returned\n logger.once.warn(\n {\n requestOrigin: resolvedUrl.origin,\n paginationOrigin: nextUrl.origin,\n },\n 'Ignoring cross-origin GitLab pagination link. Set GITLAB_IGNORE_REPO_URL if this is a self-hosted instance that returns a different origin in pagination links.',\n );\n }\n }\n } catch (err) {\n logger.warn({ err }, 'Pagination error');\n }\n }\n return result;\n }\n\n protected override handleError(\n url: string | URL,\n _httpOptions: HttpOptions,\n err: Error,\n ): never {\n if (err instanceof RequestError && err.response?.statusCode) {\n if (err.response.statusCode === 404) {\n logger.trace({ err }, 'GitLab 404');\n logger.debug({ url }, 'GitLab API 404');\n throw err;\n }\n logger.debug({ err }, 'Gitlab API error');\n if (\n err.response.statusCode === 429 ||\n (err.response.statusCode >= 500 && err.response.statusCode < 600)\n ) {\n throw new ExternalHostError(err, 'gitlab');\n }\n }\n const platformFailureCodes = [\n 'EAI_AGAIN',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'UNABLE_TO_VERIFY_LEAF_SIGNATURE',\n ];\n // TODO: fix test, should be `RequestError`\n if (\n 'code' in err &&\n isString(err.code) &&\n platformFailureCodes.includes(err.code)\n ) {\n throw new ExternalHostError(err, 'gitlab');\n }\n if (err.name === 'ParseError') {\n throw new ExternalHostError(err, 'gitlab');\n }\n throw err;\n }\n\n protected override calculateRetryDelay(retryObject: RetryObject): number {\n const { error, attemptCount, retryOptions } = retryObject;\n if (\n attemptCount <= retryOptions.limit &&\n error.options.method === 'POST' &&\n isRetryablePostError(error)\n ) {\n const noise = Math.random() * 100;\n return 2 ** (attemptCount - 1) * 1000 + noise;\n }\n\n return super.calculateRetryDelay(retryObject);\n }\n}\n\n/**\n * Detects transient GitLab errors on POST requests that are safe to retry:\n *\n * - `409` with a `Resource lock` message, which happens when concurrent\n * requests conflict.\n * - `400` with a `source_branch does not exist` message, which happens when a\n * freshly pushed branch is not yet visible to the API due to Gitaly eventual\n * consistency.\n */\nfunction isRetryablePostError(error: RequestError): boolean {\n const { response } = error;\n if (response?.statusCode === 409) {\n return Buffer.from(response.rawBody).toString().includes('Resource lock');\n }\n\n if (response?.statusCode === 400) {\n const rawBody = Buffer.from(response.rawBody).toString();\n return (\n rawBody.includes('source_branch') && rawBody.includes('does not exist')\n );\n }\n\n return false;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-rules.js","names":["hostRules.find"],"sources":["../../../lib/util/http/host-rules.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../config/global.ts';\nimport {\n BITBUCKET_API_USING_HOST_TYPES,\n BITBUCKET_SERVER_API_USING_HOST_TYPES,\n FORGEJO_API_USING_HOST_TYPES,\n GITEA_API_USING_HOST_TYPES,\n GITHUB_API_USING_HOST_TYPES,\n GITLAB_API_USING_HOST_TYPES,\n} from '../../constants/index.ts';\nimport { logger } from '../../logger/index.ts';\nimport { hasProxy } from '../../proxy.ts';\nimport type { HostRule } from '../../types/index.ts';\nimport * as hostRules from '../host-rules.ts';\nimport { matchRegexOrGlobList } from '../string-match.ts';\nimport { parseUrl } from '../url.ts';\nimport type { InternalHttpOptions } from './http.ts';\nimport { keepAliveAgents } from './keep-alive.ts';\nimport type { GotOptions } from './types.ts';\n\nexport type HostRulesGotOptions = Pick<\n GotOptions & InternalHttpOptions,\n | 'hostType'\n | 'url'\n | 'noAuth'\n | 'headers'\n | 'token'\n | 'username'\n | 'password'\n | 'context'\n | 'enabled'\n | 'abortOnError'\n | 'abortIgnoreStatusCodes'\n | 'timeout'\n | 'agent'\n | 'http2'\n | 'https'\n | 'readOnly'\n>;\n\nexport function findMatchingRule<GotOptions extends HostRulesGotOptions>(\n url: string,\n options: GotOptions,\n): HostRule {\n const { hostType, readOnly } = options;\n let res = hostRules.find({ hostType, url, readOnly });\n\n if (\n isNonEmptyString(res.token) ||\n isNonEmptyString(res.username) ||\n isNonEmptyString(res.password)\n ) {\n // do not fallback if we already have auth infos\n return res;\n }\n\n // Fallback to `github` hostType\n if (\n hostType &&\n GITHUB_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'github'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'github',\n url,\n }),\n ...res,\n };\n }\n\n const platform = GlobalConfig.get('platform');\n const platformEndpoint = GlobalConfig.get('endpoint');\n\n // in the case that an API URL is used for GitHub.com, fallback to `github` hostType, and use the `url`'s host to find a `matchHost: api.github.com` (or `matchHost: github.com`)\n if (url.startsWith('https://api.github.com/')) {\n res = {\n ...hostRules.find({\n hostType: 'github',\n url,\n }),\n ...res,\n };\n } else if (platform === 'github' && platformEndpoint) {\n // Fallback to `github` hostType when the request URL targets the same host\n // as the configured GitHub platform endpoint.\n //\n // This covers GitHub Enterprise Server without hardcoding URLs.\n const requestHost = parseUrl(url)?.hostname;\n const endpointHost = parseUrl(platformEndpoint)?.hostname;\n if (requestHost && endpointHost && requestHost === endpointHost) {\n res = {\n ...hostRules.find({ hostType: 'github', url }),\n ...res,\n };\n }\n }\n\n // Fallback to `gitlab` hostType\n if (\n hostType &&\n GITLAB_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'gitlab'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'gitlab',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `bitbucket` hostType\n if (\n hostType &&\n BITBUCKET_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'bitbucket'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'bitbucket',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `bitbucket-server` hostType\n if (\n hostType &&\n BITBUCKET_SERVER_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'bitbucket-server'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'bitbucket-server',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `forgejo` hostType\n if (\n hostType &&\n FORGEJO_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'forgejo'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'forgejo',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `gitea` hostType\n if (\n hostType &&\n GITEA_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'gitea'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'gitea',\n url,\n }),\n ...res,\n };\n }\n\n return res;\n}\n\n// Apply host rules to requests\nexport function applyHostRule<GotOptions extends HostRulesGotOptions>(\n url: string,\n options: GotOptions,\n hostRule: HostRule,\n): GotOptions {\n if (hostRule.enabled === false) {\n options.enabled = false;\n return options;\n }\n\n const { username, password, token, authType } = hostRule;\n const host = parseUrl(url)?.host;\n if (options.noAuth) {\n logger.trace({ url }, `Authorization disabled`);\n } else if (\n isNonEmptyString(options.headers?.authorization) ||\n isNonEmptyString(options.password) ||\n isNonEmptyString(options.token)\n ) {\n logger.once.debug(`hostRules: authentication already set for ${host}`);\n logger.trace({ url }, `Authorization already set`);\n } else if (password !== undefined) {\n logger.once.debug(`hostRules: applying Basic authentication for ${host}`);\n logger.trace({ url }, `Applying Basic authentication`);\n options.username = username;\n options.password = password;\n } else if (token) {\n logger.once.debug(`hostRules: applying Bearer authentication for ${host}`);\n logger.trace({ url }, `Applying Bearer authentication`);\n options.token = token;\n options.context = { ...options.context, authType };\n } else {\n logger.once.debug(`hostRules: no authentication for ${host}`);\n }\n // Apply optional params\n if (hostRule.abortOnError) {\n options.abortOnError = hostRule.abortOnError;\n }\n\n if (hostRule.abortIgnoreStatusCodes) {\n options.abortIgnoreStatusCodes = hostRule.abortIgnoreStatusCodes;\n }\n\n if (hostRule.timeout) {\n options.timeout = hostRule.timeout;\n }\n\n if (hostRule.headers) {\n const allowedHeaders = GlobalConfig.get('allowedHeaders');\n const filteredHeaders: Record<string, string> = {};\n\n for (const [header, value] of Object.entries(hostRule.headers)) {\n if (matchRegexOrGlobList(header, allowedHeaders)) {\n filteredHeaders[header] = value;\n } else {\n logger.once.error(\n { allowedHeaders, header },\n 'Disallowed hostRules headers',\n );\n }\n }\n\n options.headers = {\n ...options.headers,\n ...filteredHeaders,\n };\n }\n\n if (hostRule.keepAlive) {\n options.agent = keepAliveAgents;\n }\n\n if (!hasProxy() && hostRule.enableHttp2 === true) {\n options.http2 = true;\n }\n\n if (isNonEmptyString(hostRule.httpsCertificateAuthority)) {\n options.https = {\n ...options.https,\n certificateAuthority: hostRule.httpsCertificateAuthority,\n };\n }\n\n if (isNonEmptyString(hostRule.httpsPrivateKey)) {\n options.https = {\n ...options.https,\n key: hostRule.httpsPrivateKey,\n };\n }\n\n if (isNonEmptyString(hostRule.httpsCertificate)) {\n options.https = {\n ...options.https,\n certificate: hostRule.httpsCertificate,\n };\n }\n\n return options;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"host-rules.js","names":["hostRules.find"],"sources":["../../../lib/util/http/host-rules.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../config/global.ts';\nimport {\n BITBUCKET_API_USING_HOST_TYPES,\n BITBUCKET_SERVER_API_USING_HOST_TYPES,\n FORGEJO_API_USING_HOST_TYPES,\n GITEA_API_USING_HOST_TYPES,\n GITHUB_API_USING_HOST_TYPES,\n GITLAB_API_USING_HOST_TYPES,\n} from '../../constants/index.ts';\nimport { logger } from '../../logger/index.ts';\nimport { hasProxy } from '../../proxy.ts';\nimport type { HostRule } from '../../types/index.ts';\nimport * as hostRules from '../host-rules.ts';\nimport { matchRegexOrGlobList } from '../string-match.ts';\nimport { parseUrl } from '../url.ts';\nimport type { InternalHttpOptions } from './http.ts';\nimport { keepAliveAgents } from './keep-alive.ts';\nimport type { GotOptions } from './types.ts';\n\nexport type HostRulesGotOptions = Pick<\n GotOptions & InternalHttpOptions,\n | 'hostType'\n | 'noAuth'\n | 'headers'\n | 'token'\n | 'username'\n | 'password'\n | 'context'\n | 'enabled'\n | 'abortOnError'\n | 'abortIgnoreStatusCodes'\n | 'timeout'\n | 'agent'\n | 'http2'\n | 'https'\n | 'readOnly'\n>;\n\nexport function findMatchingRule<GotOptions extends HostRulesGotOptions>(\n url: string,\n options: GotOptions,\n): HostRule {\n const { hostType, readOnly } = options;\n let res = hostRules.find({ hostType, url, readOnly });\n\n if (\n isNonEmptyString(res.token) ||\n isNonEmptyString(res.username) ||\n isNonEmptyString(res.password)\n ) {\n // do not fallback if we already have auth infos\n return res;\n }\n\n // Fallback to `github` hostType\n if (\n hostType &&\n GITHUB_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'github'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'github',\n url,\n }),\n ...res,\n };\n }\n\n const platform = GlobalConfig.get('platform');\n const platformEndpoint = GlobalConfig.get('endpoint');\n\n // in the case that an API URL is used for GitHub.com, fallback to `github` hostType, and use the `url`'s host to find a `matchHost: api.github.com` (or `matchHost: github.com`)\n if (url.startsWith('https://api.github.com/')) {\n res = {\n ...hostRules.find({\n hostType: 'github',\n url,\n }),\n ...res,\n };\n } else if (platform === 'github' && platformEndpoint) {\n // Fallback to `github` hostType when the request URL targets the same host\n // as the configured GitHub platform endpoint.\n //\n // This covers GitHub Enterprise Server without hardcoding URLs.\n const requestHost = parseUrl(url)?.hostname;\n const endpointHost = parseUrl(platformEndpoint)?.hostname;\n if (requestHost && endpointHost && requestHost === endpointHost) {\n res = {\n ...hostRules.find({ hostType: 'github', url }),\n ...res,\n };\n }\n }\n\n // Fallback to `gitlab` hostType\n if (\n hostType &&\n GITLAB_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'gitlab'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'gitlab',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `bitbucket` hostType\n if (\n hostType &&\n BITBUCKET_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'bitbucket'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'bitbucket',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `bitbucket-server` hostType\n if (\n hostType &&\n BITBUCKET_SERVER_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'bitbucket-server'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'bitbucket-server',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `forgejo` hostType\n if (\n hostType &&\n FORGEJO_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'forgejo'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'forgejo',\n url,\n }),\n ...res,\n };\n }\n\n // Fallback to `gitea` hostType\n if (\n hostType &&\n GITEA_API_USING_HOST_TYPES.includes(hostType) &&\n hostType !== 'gitea'\n ) {\n res = {\n ...hostRules.find({\n hostType: 'gitea',\n url,\n }),\n ...res,\n };\n }\n\n return res;\n}\n\n// Apply host rules to requests\nexport function applyHostRule<GotOptions extends HostRulesGotOptions>(\n url: string,\n options: GotOptions,\n hostRule: HostRule,\n): GotOptions {\n if (hostRule.enabled === false) {\n options.enabled = false;\n return options;\n }\n\n const { username, password, token, authType } = hostRule;\n const host = parseUrl(url)?.host;\n if (options.noAuth) {\n logger.trace({ url }, `Authorization disabled`);\n } else if (\n isNonEmptyString(options.headers?.authorization) ||\n isNonEmptyString(options.password) ||\n isNonEmptyString(options.token)\n ) {\n logger.once.debug(`hostRules: authentication already set for ${host}`);\n logger.trace({ url }, `Authorization already set`);\n } else if (password !== undefined) {\n logger.once.debug(`hostRules: applying Basic authentication for ${host}`);\n logger.trace({ url }, `Applying Basic authentication`);\n options.username = username;\n options.password = password;\n } else if (token) {\n logger.once.debug(`hostRules: applying Bearer authentication for ${host}`);\n logger.trace({ url }, `Applying Bearer authentication`);\n options.token = token;\n options.context = { ...options.context, authType };\n } else {\n logger.once.debug(`hostRules: no authentication for ${host}`);\n }\n // Apply optional params\n if (hostRule.abortOnError) {\n options.abortOnError = hostRule.abortOnError;\n }\n\n if (hostRule.abortIgnoreStatusCodes) {\n options.abortIgnoreStatusCodes = hostRule.abortIgnoreStatusCodes;\n }\n\n if (hostRule.timeout) {\n options.timeout = hostRule.timeout;\n }\n\n if (hostRule.headers) {\n const allowedHeaders = GlobalConfig.get('allowedHeaders');\n const filteredHeaders: Record<string, string> = {};\n\n for (const [header, value] of Object.entries(hostRule.headers)) {\n if (matchRegexOrGlobList(header, allowedHeaders)) {\n filteredHeaders[header] = value;\n } else {\n logger.once.error(\n { allowedHeaders, header },\n 'Disallowed hostRules headers',\n );\n }\n }\n\n options.headers = {\n ...options.headers,\n ...filteredHeaders,\n };\n }\n\n if (hostRule.keepAlive) {\n options.agent = keepAliveAgents;\n }\n\n if (!hasProxy() && hostRule.enableHttp2 === true) {\n options.http2 = true;\n }\n\n if (isNonEmptyString(hostRule.httpsCertificateAuthority)) {\n options.https = {\n ...options.https,\n certificateAuthority: hostRule.httpsCertificateAuthority,\n };\n }\n\n if (isNonEmptyString(hostRule.httpsPrivateKey)) {\n options.https = {\n ...options.https,\n key: hostRule.httpsPrivateKey,\n };\n }\n\n if (isNonEmptyString(hostRule.httpsCertificate)) {\n options.https = {\n ...options.https,\n certificate: hostRule.httpsCertificate,\n };\n }\n\n return options;\n}\n"],"mappings":"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"}
|
package/dist/util/http/http.d.ts
CHANGED
|
@@ -30,10 +30,10 @@ declare abstract class HttpBase<JSONOpts extends HttpOptions = HttpOptions, Opts
|
|
|
30
30
|
protected handleResponse(_url: URL, _res: HttpResponse<unknown>): void;
|
|
31
31
|
resolveUrl(requestUrl: string | URL, options?: HttpOptions): URL;
|
|
32
32
|
protected calculateRetryDelay({ computedValue }: RetryObject): number;
|
|
33
|
-
get(url: string, options?: HttpOptions): Promise<HttpResponse<string |
|
|
33
|
+
get(url: string, options?: HttpOptions): Promise<HttpResponse<string | Uint8Array>>;
|
|
34
34
|
head(url: string, options?: HttpOptions): Promise<HttpResponse<never>>;
|
|
35
35
|
getText(url: string | URL, options?: HttpOptions): Promise<HttpResponse>;
|
|
36
|
-
getBuffer(url: string | URL, options?: HttpOptions): Promise<HttpResponse<
|
|
36
|
+
getBuffer(url: string | URL, options?: HttpOptions): Promise<HttpResponse<Uint8Array>>;
|
|
37
37
|
protected requestJsonUnsafe<ResT>(method: HttpMethod, { url, httpOptions: requestOptions }: InternalJsonUnsafeOptions<JSONOpts>): Promise<HttpResponse<ResT>>;
|
|
38
38
|
private requestJson;
|
|
39
39
|
private resolveArgs;
|
package/dist/util/http/http.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","names":["memCache.get"],"sources":["../../../lib/util/http/http.ts"],"sourcesContent":["import { isPlainObject, isUndefined } from '@sindresorhus/is';\nimport merge from 'deepmerge';\nimport type { Options, OptionsInit, RetryObject } from 'got';\nimport type { Merge, SetRequired } from 'type-fest';\nimport type { z } from 'zod/v4';\nimport { ZodType } from 'zod/v4';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { HOST_DISABLED } from '../../constants/error-messages.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport * as memCache from '../cache/memory/index.ts';\nimport { getEnv } from '../env.ts';\nimport { hash } from '../hash.ts';\nimport { acquireLock } from '../mutex.ts';\nimport { coerceObject } from '../object.ts';\nimport { type AsyncResult, Result } from '../result.ts';\nimport { Toml } from '../schema-utils/index.ts';\nimport { ObsoleteCacheHitLogger } from '../stats.ts';\nimport { compile } from '../template/index.ts';\nimport { isHttpUrl, parseUrl, resolveBaseUrl } from '../url.ts';\nimport { parseSingleYaml } from '../yaml.ts';\nimport { applyAuthorization } from './auth.ts';\nimport type { HttpCacheProvider } from './cache/types.ts';\nimport { fetch, normalize, stream } from './got.ts';\nimport { applyHostRule, findMatchingRule } from './host-rules.ts';\nimport { getQueue } from './queue.ts';\nimport { getRetryAfter, wrapWithRetry } from './retry-after.ts';\nimport { getThrottle } from './throttle.ts';\nimport type {\n GotOptions,\n GotStreamOptions,\n GotTask,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n SafeJsonError,\n} from './types.ts';\nimport { copyResponse } from './util.ts';\n\nexport interface InternalJsonUnsafeOptions<\n Opts extends HttpOptions = HttpOptions,\n> {\n url: string | URL;\n httpOptions?: Opts;\n}\n\nexport interface InternalJsonOptions<\n Opts extends HttpOptions,\n ResT = unknown,\n Schema extends ZodType<ResT, any> = ZodType<ResT, any>,\n> extends InternalJsonUnsafeOptions<Opts> {\n schema?: Schema;\n}\n\nexport type InternalGotOptions = SetRequired<GotOptions, 'method' | 'context'>;\n\nexport interface InternalHttpOptions extends HttpOptions {\n json?: HttpOptions['body'];\n\n method?: HttpMethod;\n\n parseJson?: Options['parseJson'];\n}\n\nexport function applyDefaultHeaders(options: OptionsInit): void {\n const userAgentTemplate = GlobalConfig.get('userAgent');\n options.headers = {\n ...options.headers,\n 'user-agent': compile(userAgentTemplate, {}),\n };\n}\n\nexport abstract class HttpBase<\n JSONOpts extends HttpOptions = HttpOptions,\n Opts extends HttpOptions = HttpOptions,\n> {\n private readonly options: InternalGotOptions;\n\n protected get baseUrl(): string | undefined {\n return undefined;\n }\n\n protected hostType: string;\n\n constructor(hostType: string, options: HttpOptions = {}) {\n this.hostType = hostType;\n const retryLimit = getEnv().NODE_ENV === 'test' ? 0 : 2;\n this.options = merge<InternalGotOptions>(\n options,\n {\n method: 'get',\n context: { hostType },\n retry: {\n calculateDelay: (retryObject) =>\n this.calculateRetryDelay(retryObject),\n limit: retryLimit,\n maxRetryAfter: 0, // Don't rely on `got` retry-after handling, just let it fail and then we'll handle it\n },\n },\n { isMergeableObject: isPlainObject },\n );\n }\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'text' },\n ): Promise<HttpResponse>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'buffer' },\n ): Promise<HttpResponse<Buffer>>;\n private async request<T = unknown>(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'json' },\n ): Promise<HttpResponse<T>>;\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<unknown>> {\n const resolvedUrl = this.resolveUrl(requestUrl, httpOptions);\n const url = resolvedUrl.toString();\n\n this.processOptions(resolvedUrl, httpOptions);\n\n let options = merge<InternalGotOptions, InternalHttpOptions>(\n {\n ...this.options,\n hostType: this.hostType,\n },\n httpOptions,\n { isMergeableObject: isPlainObject },\n );\n\n const method = options.method.toLowerCase();\n const isReadMethod = ['head', 'get'].includes(method);\n\n logger.trace(`HTTP request: ${method.toUpperCase()} ${url}`);\n\n applyDefaultHeaders(options);\n\n if (isUndefined(options.readOnly) && isReadMethod) {\n options.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, options);\n options = applyHostRule(url, options, hostRule);\n if (options.enabled === false) {\n logger.debug(`Host is disabled - rejecting request. HostUrl: ${url}`);\n throw new Error(HOST_DISABLED);\n }\n options = applyAuthorization(options);\n const timeout = options.timeout ?? 60000;\n options.timeout = timeout;\n\n let cacheProvider: HttpCacheProvider | undefined;\n if (isReadMethod && options.cacheProvider) {\n cacheProvider = options.cacheProvider;\n }\n\n const memCacheKey =\n !process.env.RENOVATE_X_DISABLE_HTTP_MEMCACHE &&\n !cacheProvider &&\n options.memCache !== false &&\n isReadMethod\n ? hash(\n `got-${JSON.stringify({\n url,\n headers: options.headers,\n method,\n })}`,\n )\n : null;\n\n let resPromise: Promise<HttpResponse<unknown>> | null = null;\n\n // Cache GET requests unless memCache=false\n if (memCacheKey) {\n resPromise = memCache.get(memCacheKey);\n\n /* v8 ignore next: temporary code */\n if (resPromise && !cacheProvider) {\n ObsoleteCacheHitLogger.write(url);\n }\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (!resPromise) {\n if (cacheProvider) {\n await cacheProvider.setCacheHeaders(method, url, options);\n }\n\n const startTime = Date.now();\n const httpTask: GotTask = async () => {\n let releaseLock: undefined | (() => void);\n if (isReadMethod) {\n releaseLock = await acquireLock(\n `${options.method} ${url}`,\n 'http-mutex',\n timeout * 2,\n );\n }\n try {\n const cachedResponse = await cacheProvider?.bypassServer<unknown>(\n options.method,\n url,\n );\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const queueMs = Date.now() - startTime;\n return fetch(url, this._normalizeOptions(options), {\n queueMs,\n });\n } finally {\n releaseLock?.();\n }\n };\n\n const throttle = getThrottle(url);\n const throttledTask = throttle ? () => throttle.add(httpTask) : httpTask;\n\n const queue = getQueue(url);\n const queuedTask = queue ? () => queue.add(throttledTask) : throttledTask;\n\n const { maxRetryAfter = 60 } = hostRule;\n resPromise = wrapWithRetry(queuedTask, url, getRetryAfter, maxRetryAfter);\n\n if (memCacheKey) {\n memCache.set(memCacheKey, resPromise);\n }\n }\n\n try {\n const res = await resPromise;\n const deepCopyNeeded = !!memCacheKey && res.statusCode !== 304;\n const resCopy = copyResponse(res, deepCopyNeeded);\n resCopy.authorization = !!options?.headers?.authorization;\n\n this.handleResponse(resolvedUrl, resCopy);\n\n if (cacheProvider) {\n return await cacheProvider.wrapServerResponse(method, url, resCopy);\n }\n\n return resCopy;\n } catch (err) {\n const { abortOnError, abortIgnoreStatusCodes } = options;\n if (abortOnError && !abortIgnoreStatusCodes?.includes(err.statusCode)) {\n throw new ExternalHostError(err);\n }\n\n const staleResponse = await cacheProvider?.bypassServer<string | Buffer>(\n method,\n url,\n true,\n );\n if (staleResponse) {\n logger.debug(\n { err },\n `Request error: returning stale cache instead for ${url}`,\n );\n return staleResponse;\n }\n\n this.handleError(requestUrl, httpOptions, err);\n }\n }\n\n private _normalizeOptions<T extends OptionsInit>(options: T): T {\n return normalize(options, this.extraOptions());\n }\n\n /**\n * Returns Renovate extra options which needs to be removed before passing to got.\n * @returns extra Renovate options.\n */\n protected extraOptions(): readonly string[] {\n return ['baseUrl', 'cacheProvider', 'readOnly'] as (keyof HttpOptions)[];\n }\n\n protected processOptions(_url: URL, _options: InternalHttpOptions): void {\n // noop\n }\n\n protected handleError(\n _url: string | URL,\n _httpOptions: HttpOptions,\n err: Error,\n ): never {\n throw err;\n }\n\n protected handleResponse(_url: URL, _res: HttpResponse<unknown>): void {\n // noop\n }\n\n resolveUrl(requestUrl: string | URL, options?: HttpOptions): URL {\n let url = requestUrl;\n\n if (url instanceof URL) {\n // already a aboslute URL\n return url;\n }\n\n const baseUrl = options?.baseUrl ?? this.baseUrl;\n if (baseUrl) {\n url = resolveBaseUrl(baseUrl, url);\n }\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl || !isHttpUrl(parsedUrl)) {\n logger.error(\n { url: requestUrl, baseUrl, resolvedUrl: url },\n 'Request Error: cannot parse url',\n );\n throw new Error('Invalid URL');\n }\n return parsedUrl;\n }\n\n protected calculateRetryDelay({ computedValue }: RetryObject): number {\n return computedValue;\n }\n\n get(\n url: string,\n options: HttpOptions = {},\n ): Promise<HttpResponse<string | Buffer>> {\n return this.request(url, options);\n }\n\n head(url: string, options: HttpOptions = {}): Promise<HttpResponse<never>> {\n // to complex to validate\n return this.request(url, {\n ...options,\n responseType: 'text',\n method: 'head',\n }) as Promise<HttpResponse<never>>;\n }\n\n getText(url: string | URL, options: HttpOptions = {}): Promise<HttpResponse> {\n return this.request(url, { ...options, responseType: 'text' });\n }\n\n getBuffer(\n url: string | URL,\n options: HttpOptions = {},\n ): Promise<HttpResponse<Buffer>> {\n return this.request(url, { ...options, responseType: 'buffer' });\n }\n\n protected requestJsonUnsafe<ResT>(\n method: HttpMethod,\n { url, httpOptions: requestOptions }: InternalJsonUnsafeOptions<JSONOpts>,\n ): Promise<HttpResponse<ResT>> {\n const { body: json, ...httpOptions } = { ...requestOptions };\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method,\n };\n // signal that we expect a json response\n opts.headers = {\n accept: 'application/json',\n ...opts.headers,\n };\n if (json) {\n opts.json = json;\n }\n return this.request<ResT>(url, { ...opts, responseType: 'json' });\n }\n\n private async requestJson<\n ResT,\n Schema extends ZodType<ResT, any> = ZodType<ResT, any>,\n >(\n method: HttpMethod,\n options: InternalJsonOptions<JSONOpts, ResT, Schema>,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.requestJsonUnsafe<ResT>(method, options);\n\n if (options.schema) {\n res.body = await options.schema.parseAsync(res.body);\n }\n\n return res;\n }\n\n private resolveArgs<ResT = unknown>(\n arg1: string,\n arg2: JSONOpts | ZodType<ResT> | undefined,\n arg3: ZodType<ResT> | undefined,\n ): InternalJsonOptions<JSONOpts, ResT> {\n const res: InternalJsonOptions<JSONOpts, ResT> = { url: arg1 };\n\n if (arg2 instanceof ZodType) {\n res.schema = arg2;\n } else if (arg2) {\n res.httpOptions = arg2;\n }\n\n if (arg3) {\n res.schema = arg3;\n }\n\n return res;\n }\n\n async getPlain(url: string, options?: Opts): Promise<HttpResponse> {\n const opt = coerceObject(options);\n return await this.getText(url, {\n headers: {\n Accept: 'text/plain',\n },\n ...opt,\n });\n }\n\n /**\n * @deprecated use `getYaml` instead\n */\n async getYamlUnchecked<ResT>(\n url: string,\n options?: Opts,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.getText(url, options);\n const body = parseSingleYaml<ResT>(res.body);\n return { ...res, body };\n }\n\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n };\n\n const res = await this.getText(url, opts);\n const body = await schema.parseAsync(parseSingleYaml(res.body));\n return { ...res, body };\n }\n\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(url: string, schema: Schema): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n url: string,\n options: Opts,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n arg1: string,\n arg2: Opts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n let res: AsyncResult<HttpResponse<ResT>, SafeJsonError>;\n if (httpOptions) {\n res = Result.wrap(this.getYaml(url, httpOptions, schema));\n } else {\n res = Result.wrap(this.getYaml(url, schema));\n }\n\n return res.transform((response) => Result.ok(response.body));\n }\n\n /**\n * Request JSON and return the response without any validation.\n *\n * The usage of this method is discouraged, please use `getJson` instead.\n *\n * If you're new to Zod schema validation library:\n * - consult the [documentation of Zod library](https://github.com/colinhacks/zod?tab=readme-ov-file#basic-usage)\n * - search the Renovate codebase for 'zod' module usage\n * - take a look at the `schema-utils.ts` file for Renovate-specific schemas and utilities\n */\n getJsonUnchecked<ResT = unknown>(\n url: string,\n options?: JSONOpts,\n ): Promise<HttpResponse<ResT>> {\n return this.requestJson<ResT>('get', { url, httpOptions: options });\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * throwing an error if the response is not valid.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const args = this.resolveArgs<z.infer<Schema>>(arg1, arg2, arg3);\n return this.requestJson<z.infer<Schema>>('get', args);\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * wrapping response data in a `Result` class.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const args = this.resolveArgs<ResT>(arg1, arg2, arg3);\n return Result.wrap(this.requestJson<ResT>('get', args)).transform(\n (response) => Result.ok(response.body),\n );\n }\n\n /**\n * @deprecated use `head` instead\n */\n headJson(url: string, httpOptions?: JSONOpts): Promise<HttpResponse<never>> {\n return this.requestJson<never>('head', { url, httpOptions });\n }\n\n postJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n postJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('post', args);\n }\n\n putJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n putJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs<T>(arg1, arg2, arg3);\n return this.requestJson<T>('put', args);\n }\n\n patchJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n patchJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('patch', args);\n }\n\n deleteJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n deleteJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('delete', args);\n }\n\n stream(url: string, options?: HttpOptions): NodeJS.ReadableStream {\n let combinedOptions: Merge<\n GotStreamOptions,\n SetRequired<InternalHttpOptions, 'method'>\n > = {\n ...this.options,\n hostType: this.hostType,\n ...options,\n method: 'get',\n };\n\n const resolvedUrl = this.resolveUrl(url, options).toString();\n\n applyDefaultHeaders(combinedOptions);\n\n // v8 ignore else -- TODO: add test #40625\n if (\n isUndefined(combinedOptions.readOnly) &&\n ['head', 'get'].includes(combinedOptions.method)\n ) {\n combinedOptions.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, combinedOptions);\n combinedOptions = applyHostRule(resolvedUrl, combinedOptions, hostRule);\n if (combinedOptions.enabled === false) {\n throw new Error(HOST_DISABLED);\n }\n combinedOptions = applyAuthorization(combinedOptions);\n\n return stream(resolvedUrl, this._normalizeOptions(combinedOptions));\n }\n\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const { url, schema, httpOptions } = this.resolveArgs<z.infer<Schema>>(\n arg1,\n arg2,\n arg3,\n );\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n headers: {\n 'Content-Type': 'application/toml',\n ...httpOptions?.headers,\n },\n };\n\n const res = await this.getText(url, opts);\n if (schema) {\n res.body = await Toml.pipe(schema).parseAsync(res.body);\n } else {\n res.body = (await Toml.parseAsync(res.body)) as z.infer<Schema>;\n }\n\n return res as HttpResponse<z.infer<Schema>>;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http.js","names":["memCache.get"],"sources":["../../../lib/util/http/http.ts"],"sourcesContent":["import { isPlainObject, isUndefined } from '@sindresorhus/is';\nimport merge from 'deepmerge';\nimport type { Options, OptionsInit, RetryObject } from 'got';\nimport type { Merge, SetRequired } from 'type-fest';\nimport type { z } from 'zod/v4';\nimport { ZodType } from 'zod/v4';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { HOST_DISABLED } from '../../constants/error-messages.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport * as memCache from '../cache/memory/index.ts';\nimport { getEnv } from '../env.ts';\nimport { hash } from '../hash.ts';\nimport { acquireLock } from '../mutex.ts';\nimport { coerceObject } from '../object.ts';\nimport { type AsyncResult, Result } from '../result.ts';\nimport { Toml } from '../schema-utils/index.ts';\nimport { ObsoleteCacheHitLogger } from '../stats.ts';\nimport { compile } from '../template/index.ts';\nimport { isHttpUrl, parseUrl, resolveBaseUrl } from '../url.ts';\nimport { parseSingleYaml } from '../yaml.ts';\nimport { applyAuthorization } from './auth.ts';\nimport type { HttpCacheProvider } from './cache/types.ts';\nimport { fetch, normalize, stream } from './got.ts';\nimport { applyHostRule, findMatchingRule } from './host-rules.ts';\nimport { getQueue } from './queue.ts';\nimport { getRetryAfter, wrapWithRetry } from './retry-after.ts';\nimport { getThrottle } from './throttle.ts';\nimport type {\n GotOptions,\n GotStreamOptions,\n GotTask,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n SafeJsonError,\n} from './types.ts';\nimport { copyResponse } from './util.ts';\n\nexport interface InternalJsonUnsafeOptions<\n Opts extends HttpOptions = HttpOptions,\n> {\n url: string | URL;\n httpOptions?: Opts;\n}\n\nexport interface InternalJsonOptions<\n Opts extends HttpOptions,\n ResT = unknown,\n Schema extends ZodType<ResT, any> = ZodType<ResT, any>,\n> extends InternalJsonUnsafeOptions<Opts> {\n schema?: Schema;\n}\n\nexport type InternalGotOptions = SetRequired<GotOptions, 'method' | 'context'>;\n\nexport interface InternalHttpOptions extends HttpOptions {\n json?: HttpOptions['body'];\n\n method?: HttpMethod;\n\n parseJson?: Options['parseJson'];\n}\n\nexport function applyDefaultHeaders(options: OptionsInit): void {\n const userAgentTemplate = GlobalConfig.get('userAgent');\n options.headers = {\n ...options.headers,\n 'user-agent': compile(userAgentTemplate, {}),\n };\n}\n\nexport abstract class HttpBase<\n JSONOpts extends HttpOptions = HttpOptions,\n Opts extends HttpOptions = HttpOptions,\n> {\n private readonly options: InternalGotOptions;\n\n protected get baseUrl(): string | undefined {\n return undefined;\n }\n\n protected hostType: string;\n\n constructor(hostType: string, options: HttpOptions = {}) {\n this.hostType = hostType;\n const retryLimit = getEnv().NODE_ENV === 'test' ? 0 : 2;\n this.options = merge<InternalGotOptions>(\n options,\n {\n method: 'get',\n context: { hostType },\n retry: {\n calculateDelay: (retryObject) =>\n this.calculateRetryDelay(retryObject),\n limit: retryLimit,\n maxRetryAfter: 0, // Don't rely on `got` retry-after handling, just let it fail and then we'll handle it\n enforceRetryRules: false,\n },\n },\n { isMergeableObject: isPlainObject },\n );\n }\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'text' },\n ): Promise<HttpResponse>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'buffer' },\n ): Promise<HttpResponse<Uint8Array>>;\n private async request<T = unknown>(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'json' },\n ): Promise<HttpResponse<T>>;\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<unknown>> {\n const resolvedUrl = this.resolveUrl(requestUrl, httpOptions);\n const url = resolvedUrl.toString();\n\n this.processOptions(resolvedUrl, httpOptions);\n\n let options = merge<InternalGotOptions, InternalHttpOptions>(\n {\n ...this.options,\n hostType: this.hostType,\n },\n httpOptions,\n { isMergeableObject: isPlainObject },\n );\n\n const method = options.method.toLowerCase();\n const isReadMethod = ['head', 'get'].includes(method);\n\n logger.trace(`HTTP request: ${method.toUpperCase()} ${url}`);\n\n applyDefaultHeaders(options);\n\n if (isUndefined(options.readOnly) && isReadMethod) {\n options.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, options);\n options = applyHostRule(url, options, hostRule);\n if (options.enabled === false) {\n logger.debug(`Host is disabled - rejecting request. HostUrl: ${url}`);\n throw new Error(HOST_DISABLED);\n }\n options = applyAuthorization(options);\n const timeout = options.timeout ?? 60000;\n options.timeout = timeout;\n\n let cacheProvider: HttpCacheProvider | undefined;\n if (isReadMethod && options.cacheProvider) {\n cacheProvider = options.cacheProvider;\n }\n\n const memCacheKey =\n !process.env.RENOVATE_X_DISABLE_HTTP_MEMCACHE &&\n !cacheProvider &&\n options.memCache !== false &&\n isReadMethod\n ? hash(\n `got-${JSON.stringify({\n url,\n headers: options.headers,\n method,\n })}`,\n )\n : null;\n\n let resPromise: Promise<HttpResponse<unknown>> | null = null;\n\n // Cache GET requests unless memCache=false\n if (memCacheKey) {\n resPromise = memCache.get(memCacheKey);\n\n /* v8 ignore next: temporary code */\n if (resPromise && !cacheProvider) {\n ObsoleteCacheHitLogger.write(url);\n }\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (!resPromise) {\n if (cacheProvider) {\n await cacheProvider.setCacheHeaders(method, url, options);\n }\n\n const startTime = Date.now();\n const httpTask: GotTask = async () => {\n let releaseLock: undefined | (() => void);\n if (isReadMethod) {\n releaseLock = await acquireLock(\n `${options.method} ${url}`,\n 'http-mutex',\n timeout * 2,\n );\n }\n try {\n const cachedResponse = await cacheProvider?.bypassServer<unknown>(\n options.method,\n url,\n );\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const queueMs = Date.now() - startTime;\n return fetch(url, this._normalizeOptions(options), {\n queueMs,\n });\n } finally {\n releaseLock?.();\n }\n };\n\n const throttle = getThrottle(url);\n const throttledTask = throttle ? () => throttle.add(httpTask) : httpTask;\n\n const queue = getQueue(url);\n const queuedTask = queue ? () => queue.add(throttledTask) : throttledTask;\n\n const { maxRetryAfter = 60 } = hostRule;\n resPromise = wrapWithRetry(queuedTask, url, getRetryAfter, maxRetryAfter);\n\n if (memCacheKey) {\n memCache.set(memCacheKey, resPromise);\n }\n }\n\n try {\n const res = await resPromise;\n const deepCopyNeeded = !!memCacheKey && res.statusCode !== 304;\n const resCopy = copyResponse(res, deepCopyNeeded);\n resCopy.authorization = !!options?.headers?.authorization;\n\n this.handleResponse(resolvedUrl, resCopy);\n\n if (cacheProvider) {\n return await cacheProvider.wrapServerResponse(method, url, resCopy);\n }\n\n return resCopy;\n } catch (err) {\n const { abortOnError, abortIgnoreStatusCodes } = options;\n if (abortOnError && !abortIgnoreStatusCodes?.includes(err.statusCode)) {\n throw new ExternalHostError(err);\n }\n\n const staleResponse = await cacheProvider?.bypassServer<\n string | Uint8Array\n >(method, url, true);\n if (staleResponse) {\n logger.debug(\n { err },\n `Request error: returning stale cache instead for ${url}`,\n );\n return staleResponse;\n }\n\n this.handleError(requestUrl, httpOptions, err);\n }\n }\n\n private _normalizeOptions<T extends OptionsInit>(options: T): T {\n return normalize(options, this.extraOptions());\n }\n\n /**\n * Returns Renovate extra options which needs to be removed before passing to got.\n * @returns extra Renovate options.\n */\n protected extraOptions(): readonly string[] {\n return ['baseUrl', 'cacheProvider', 'readOnly'] as (keyof HttpOptions)[];\n }\n\n protected processOptions(_url: URL, _options: InternalHttpOptions): void {\n // noop\n }\n\n protected handleError(\n _url: string | URL,\n _httpOptions: HttpOptions,\n err: Error,\n ): never {\n throw err;\n }\n\n protected handleResponse(_url: URL, _res: HttpResponse<unknown>): void {\n // noop\n }\n\n resolveUrl(requestUrl: string | URL, options?: HttpOptions): URL {\n let url = requestUrl;\n\n if (url instanceof URL) {\n // already a aboslute URL\n return url;\n }\n\n const baseUrl = options?.baseUrl ?? this.baseUrl;\n if (baseUrl) {\n url = resolveBaseUrl(baseUrl, url);\n }\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl || !isHttpUrl(parsedUrl)) {\n logger.error(\n { url: requestUrl, baseUrl, resolvedUrl: url },\n 'Request Error: cannot parse url',\n );\n throw new Error('Invalid URL');\n }\n return parsedUrl;\n }\n\n protected calculateRetryDelay({ computedValue }: RetryObject): number {\n return computedValue;\n }\n\n get(\n url: string,\n options: HttpOptions = {},\n ): Promise<HttpResponse<string | Uint8Array>> {\n return this.request(url, options);\n }\n\n head(url: string, options: HttpOptions = {}): Promise<HttpResponse<never>> {\n // to complex to validate\n return this.request(url, {\n ...options,\n responseType: 'text',\n method: 'head',\n }) as Promise<HttpResponse<never>>;\n }\n\n getText(url: string | URL, options: HttpOptions = {}): Promise<HttpResponse> {\n return this.request(url, { ...options, responseType: 'text' });\n }\n\n getBuffer(\n url: string | URL,\n options: HttpOptions = {},\n ): Promise<HttpResponse<Uint8Array>> {\n return this.request(url, { ...options, responseType: 'buffer' });\n }\n\n protected requestJsonUnsafe<ResT>(\n method: HttpMethod,\n { url, httpOptions: requestOptions }: InternalJsonUnsafeOptions<JSONOpts>,\n ): Promise<HttpResponse<ResT>> {\n const { body: json, ...httpOptions } = { ...requestOptions };\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method,\n };\n // signal that we expect a json response\n opts.headers = {\n accept: 'application/json',\n ...opts.headers,\n };\n if (json) {\n opts.json = json;\n }\n return this.request<ResT>(url, { ...opts, responseType: 'json' });\n }\n\n private async requestJson<\n ResT,\n Schema extends ZodType<ResT, any> = ZodType<ResT, any>,\n >(\n method: HttpMethod,\n options: InternalJsonOptions<JSONOpts, ResT, Schema>,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.requestJsonUnsafe<ResT>(method, options);\n\n if (options.schema) {\n res.body = await options.schema.parseAsync(res.body);\n }\n\n return res;\n }\n\n private resolveArgs<ResT = unknown>(\n arg1: string,\n arg2: JSONOpts | ZodType<ResT> | undefined,\n arg3: ZodType<ResT> | undefined,\n ): InternalJsonOptions<JSONOpts, ResT> {\n const res: InternalJsonOptions<JSONOpts, ResT> = { url: arg1 };\n\n if (arg2 instanceof ZodType) {\n res.schema = arg2;\n } else if (arg2) {\n res.httpOptions = arg2;\n }\n\n if (arg3) {\n res.schema = arg3;\n }\n\n return res;\n }\n\n async getPlain(url: string, options?: Opts): Promise<HttpResponse> {\n const opt = coerceObject(options);\n return await this.getText(url, {\n headers: {\n Accept: 'text/plain',\n },\n ...opt,\n });\n }\n\n /**\n * @deprecated use `getYaml` instead\n */\n async getYamlUnchecked<ResT>(\n url: string,\n options?: Opts,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.getText(url, options);\n const body = parseSingleYaml<ResT>(res.body);\n return { ...res, body };\n }\n\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n };\n\n const res = await this.getText(url, opts);\n const body = await schema.parseAsync(parseSingleYaml(res.body));\n return { ...res, body };\n }\n\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(url: string, schema: Schema): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n url: string,\n options: Opts,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n arg1: string,\n arg2: Opts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n let res: AsyncResult<HttpResponse<ResT>, SafeJsonError>;\n if (httpOptions) {\n res = Result.wrap(this.getYaml(url, httpOptions, schema));\n } else {\n res = Result.wrap(this.getYaml(url, schema));\n }\n\n return res.transform((response) => Result.ok(response.body));\n }\n\n /**\n * Request JSON and return the response without any validation.\n *\n * The usage of this method is discouraged, please use `getJson` instead.\n *\n * If you're new to Zod schema validation library:\n * - consult the [documentation of Zod library](https://github.com/colinhacks/zod?tab=readme-ov-file#basic-usage)\n * - search the Renovate codebase for 'zod' module usage\n * - take a look at the `schema-utils.ts` file for Renovate-specific schemas and utilities\n */\n getJsonUnchecked<ResT = unknown>(\n url: string,\n options?: JSONOpts,\n ): Promise<HttpResponse<ResT>> {\n return this.requestJson<ResT>('get', { url, httpOptions: options });\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * throwing an error if the response is not valid.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const args = this.resolveArgs<z.infer<Schema>>(arg1, arg2, arg3);\n return this.requestJson<z.infer<Schema>>('get', args);\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * wrapping response data in a `Result` class.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): AsyncResult<z.infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const args = this.resolveArgs<ResT>(arg1, arg2, arg3);\n return Result.wrap(this.requestJson<ResT>('get', args)).transform(\n (response) => Result.ok(response.body),\n );\n }\n\n /**\n * @deprecated use `head` instead\n */\n headJson(url: string, httpOptions?: JSONOpts): Promise<HttpResponse<never>> {\n return this.requestJson<never>('head', { url, httpOptions });\n }\n\n postJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n postJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('post', args);\n }\n\n putJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n putJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs<T>(arg1, arg2, arg3);\n return this.requestJson<T>('put', args);\n }\n\n patchJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n patchJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('patch', args);\n }\n\n deleteJson<T>(url: string, options?: JSONOpts): Promise<HttpResponse<T>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n deleteJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('delete', args);\n }\n\n stream(url: string, options?: HttpOptions): NodeJS.ReadableStream {\n let combinedOptions: Merge<\n GotStreamOptions,\n SetRequired<InternalHttpOptions, 'method'>\n > = {\n ...this.options,\n hostType: this.hostType,\n ...options,\n method: 'get',\n };\n\n const resolvedUrl = this.resolveUrl(url, options).toString();\n\n applyDefaultHeaders(combinedOptions);\n\n // v8 ignore else -- TODO: add test #40625\n if (\n isUndefined(combinedOptions.readOnly) &&\n ['head', 'get'].includes(combinedOptions.method)\n ) {\n combinedOptions.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, combinedOptions);\n combinedOptions = applyHostRule(resolvedUrl, combinedOptions, hostRule);\n if (combinedOptions.enabled === false) {\n throw new Error(HOST_DISABLED);\n }\n combinedOptions = applyAuthorization(combinedOptions);\n\n return stream(resolvedUrl, this._normalizeOptions(combinedOptions));\n }\n\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: JSONOpts,\n schema: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>>;\n async getToml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: JSONOpts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<z.infer<Schema>>> {\n const { url, schema, httpOptions } = this.resolveArgs<z.infer<Schema>>(\n arg1,\n arg2,\n arg3,\n );\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n headers: {\n 'Content-Type': 'application/toml',\n ...httpOptions?.headers,\n },\n };\n\n const res = await this.getText(url, opts);\n if (schema) {\n res.body = await Toml.pipe(schema).parseAsync(res.body);\n } else {\n res.body = (await Toml.parseAsync(res.body)) as z.infer<Schema>;\n }\n\n return res as HttpResponse<z.infer<Schema>>;\n }\n}\n"],"mappings":"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"}
|
package/dist/util/http/util.js
CHANGED
|
@@ -8,7 +8,7 @@ function copyResponse({ statusCode, headers, body, cached }, deep) {
|
|
|
8
8
|
};
|
|
9
9
|
if (deep) {
|
|
10
10
|
res.headers = clone(headers);
|
|
11
|
-
res.body = body instanceof
|
|
11
|
+
res.body = body instanceof Uint8Array ? body.subarray() : clone(body);
|
|
12
12
|
}
|
|
13
13
|
if (cached) res.cached = true;
|
|
14
14
|
return res;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","names":[],"sources":["../../../lib/util/http/util.ts"],"sourcesContent":["import { clone } from '../clone.ts';\nimport type { HttpResponse } from './types.ts';\n\n// Copying will help to avoid circular structure\n// and mutation of the cached response.\nexport function copyResponse<T>(\n { statusCode, headers, body, cached }: HttpResponse<T>,\n deep: boolean,\n): HttpResponse<T> {\n const res: HttpResponse<T> = { statusCode, headers, body };\n\n if (deep) {\n res.headers = clone(headers);\n res.body
|
|
1
|
+
{"version":3,"file":"util.js","names":[],"sources":["../../../lib/util/http/util.ts"],"sourcesContent":["import { clone } from '../clone.ts';\nimport type { HttpResponse } from './types.ts';\n\n// Copying will help to avoid circular structure\n// and mutation of the cached response.\nexport function copyResponse<T>(\n { statusCode, headers, body, cached }: HttpResponse<T>,\n deep: boolean,\n): HttpResponse<T> {\n const res: HttpResponse<T> = { statusCode, headers, body };\n\n if (deep) {\n res.headers = clone(headers);\n res.body =\n body instanceof Uint8Array ? (body.subarray() as T) : clone<T>(body);\n }\n\n if (cached) {\n res.cached = true;\n }\n\n return res;\n}\n"],"mappings":";;AAKA,SAAgB,aACd,EAAE,YAAY,SAAS,MAAM,UAC7B,MACiB;CACjB,MAAM,MAAuB;EAAE;EAAY;EAAS;CAAK;CAEzD,IAAI,MAAM;EACR,IAAI,UAAU,MAAM,OAAO;EAC3B,IAAI,OACF,gBAAgB,aAAc,KAAK,SAAS,IAAU,MAAS,IAAI;CACvE;CAEA,IAAI,QACF,IAAI,SAAS;CAGf,OAAO;AACT"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "renovate",
|
|
3
3
|
"description": "Automated dependency updates. Flexible so you don't need to be.",
|
|
4
|
-
"version": "44.
|
|
4
|
+
"version": "44.71.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"renovate": "dist/renovate.js",
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
"glob": "13.0.6",
|
|
159
159
|
"global-agent": "3.0.0",
|
|
160
160
|
"google-auth-library": "10.9.1",
|
|
161
|
-
"got": "
|
|
161
|
+
"got": "16.0.0",
|
|
162
162
|
"graph-data-structure": "4.5.0",
|
|
163
163
|
"handlebars": "4.7.9",
|
|
164
164
|
"ignore": "7.0.8",
|
package/renovate-schema.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$id": "https://docs.renovatebot.com/renovate-schema.json",
|
|
3
|
-
"title": "JSON schema for Renovate 44.
|
|
3
|
+
"title": "JSON schema for Renovate 44.71.0 config files (https://renovatebot.com/)",
|
|
4
4
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
5
|
-
"x-renovate-version": "44.
|
|
5
|
+
"x-renovate-version": "44.71.0",
|
|
6
6
|
"allowComments": true,
|
|
7
7
|
"type": "object",
|
|
8
8
|
"definitions": {
|