renovate 40.0.0-next.2 → 40.0.0-next.20

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.
Files changed (294) hide show
  1. package/dist/config/decrypt/legacy.js +0 -1
  2. package/dist/config/decrypt/legacy.js.map +1 -1
  3. package/dist/config/decrypt.d.ts +3 -1
  4. package/dist/config/decrypt.js +56 -13
  5. package/dist/config/decrypt.js.map +1 -1
  6. package/dist/config/migrate-validate.js +3 -2
  7. package/dist/config/migrate-validate.js.map +1 -1
  8. package/dist/config/migration.js +2 -1
  9. package/dist/config/migration.js.map +1 -1
  10. package/dist/config/migrations/custom/rebase-stale-prs-migration.js +1 -1
  11. package/dist/config/migrations/custom/rebase-stale-prs-migration.js.map +1 -1
  12. package/dist/config/options/index.js +3 -3
  13. package/dist/config/options/index.js.map +1 -1
  14. package/dist/config/parse.js +2 -2
  15. package/dist/config/parse.js.map +1 -1
  16. package/dist/config/presets/gitea/index.js +0 -1
  17. package/dist/config/presets/gitea/index.js.map +1 -1
  18. package/dist/config/presets/github/index.js +0 -1
  19. package/dist/config/presets/github/index.js.map +1 -1
  20. package/dist/config/presets/gitlab/index.js +1 -1
  21. package/dist/config/presets/gitlab/index.js.map +1 -1
  22. package/dist/config/presets/http/index.js +1 -2
  23. package/dist/config/presets/http/index.js.map +1 -1
  24. package/dist/config/presets/index.js +0 -7
  25. package/dist/config/presets/index.js.map +1 -1
  26. package/dist/config/presets/internal/custom-managers.js +3 -4
  27. package/dist/config/presets/internal/custom-managers.js.map +1 -1
  28. package/dist/config/presets/internal/index.js +1 -3
  29. package/dist/config/presets/internal/index.js.map +1 -1
  30. package/dist/config/schema.d.ts +2 -2
  31. package/dist/config/validation.js +3 -5
  32. package/dist/config/validation.js.map +1 -1
  33. package/dist/config-validator.js +0 -1
  34. package/dist/config-validator.js.map +1 -1
  35. package/dist/constants/category.js +0 -1
  36. package/dist/constants/category.js.map +1 -1
  37. package/dist/data/monorepo.json +2 -1
  38. package/dist/instrumentation/index.js +5 -3
  39. package/dist/instrumentation/index.js.map +1 -1
  40. package/dist/instrumentation/utils.js +1 -1
  41. package/dist/instrumentation/utils.js.map +1 -1
  42. package/dist/logger/cmd-serializer.js +0 -1
  43. package/dist/logger/cmd-serializer.js.map +1 -1
  44. package/dist/logger/config-serializer.js +0 -1
  45. package/dist/logger/config-serializer.js.map +1 -1
  46. package/dist/logger/index.js +0 -3
  47. package/dist/logger/index.js.map +1 -1
  48. package/dist/logger/once.js +4 -2
  49. package/dist/logger/once.js.map +1 -1
  50. package/dist/logger/pretty-stdout.js +0 -1
  51. package/dist/logger/pretty-stdout.js.map +1 -1
  52. package/dist/logger/renovate-logger.js +1 -1
  53. package/dist/logger/renovate-logger.js.map +1 -1
  54. package/dist/logger/utils.js +6 -11
  55. package/dist/logger/utils.js.map +1 -1
  56. package/dist/modules/datasource/artifactory/index.js +1 -1
  57. package/dist/modules/datasource/artifactory/index.js.map +1 -1
  58. package/dist/modules/datasource/azure-pipelines-tasks/index.js +11 -1
  59. package/dist/modules/datasource/azure-pipelines-tasks/index.js.map +1 -1
  60. package/dist/modules/datasource/azure-pipelines-tasks/schema.d.ts +16 -0
  61. package/dist/modules/datasource/azure-pipelines-tasks/schema.js +2 -0
  62. package/dist/modules/datasource/azure-pipelines-tasks/schema.js.map +1 -1
  63. package/dist/modules/datasource/crate/index.js +1 -1
  64. package/dist/modules/datasource/crate/index.js.map +1 -1
  65. package/dist/modules/datasource/custom/formats/html.js +1 -1
  66. package/dist/modules/datasource/custom/formats/html.js.map +1 -1
  67. package/dist/modules/datasource/custom/formats/yaml.js +1 -1
  68. package/dist/modules/datasource/custom/formats/yaml.js.map +1 -1
  69. package/dist/modules/datasource/custom/schema.d.ts +5 -5
  70. package/dist/modules/datasource/deb/index.js +1 -1
  71. package/dist/modules/datasource/deb/index.js.map +1 -1
  72. package/dist/modules/datasource/deno/schema.d.ts +8 -8
  73. package/dist/modules/datasource/docker/common.js +1 -1
  74. package/dist/modules/datasource/docker/common.js.map +1 -1
  75. package/dist/modules/datasource/docker/index.js +5 -3
  76. package/dist/modules/datasource/docker/index.js.map +1 -1
  77. package/dist/modules/datasource/docker/schema.d.ts +32 -32
  78. package/dist/modules/datasource/galaxy/schema.d.ts +1 -1
  79. package/dist/modules/datasource/galaxy-collection/schema.d.ts +3 -3
  80. package/dist/modules/datasource/gitea-releases/schema.d.ts +4 -4
  81. package/dist/modules/datasource/gitea-tags/schema.d.ts +4 -4
  82. package/dist/modules/datasource/github-release-attachments/index.js +2 -2
  83. package/dist/modules/datasource/github-release-attachments/index.js.map +1 -1
  84. package/dist/modules/datasource/go/base.js +1 -1
  85. package/dist/modules/datasource/go/base.js.map +1 -1
  86. package/dist/modules/datasource/go/releases-goproxy.js +1 -1
  87. package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
  88. package/dist/modules/datasource/golang-version/index.js +1 -1
  89. package/dist/modules/datasource/golang-version/index.js.map +1 -1
  90. package/dist/modules/datasource/hex/schema.d.ts +11 -11
  91. package/dist/modules/datasource/hexpm-bob/index.js +1 -1
  92. package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
  93. package/dist/modules/datasource/index.js +2 -2
  94. package/dist/modules/datasource/index.js.map +1 -1
  95. package/dist/modules/datasource/maven/util.js +1 -1
  96. package/dist/modules/datasource/maven/util.js.map +1 -1
  97. package/dist/modules/datasource/nuget/v2.js +1 -1
  98. package/dist/modules/datasource/nuget/v2.js.map +1 -1
  99. package/dist/modules/datasource/nuget/v3.js +1 -1
  100. package/dist/modules/datasource/nuget/v3.js.map +1 -1
  101. package/dist/modules/datasource/packagist/schema.d.ts +30 -30
  102. package/dist/modules/datasource/pod/index.js +1 -1
  103. package/dist/modules/datasource/pod/index.js.map +1 -1
  104. package/dist/modules/datasource/pypi/index.js +1 -1
  105. package/dist/modules/datasource/pypi/index.js.map +1 -1
  106. package/dist/modules/datasource/ruby-version/index.js +1 -1
  107. package/dist/modules/datasource/ruby-version/index.js.map +1 -1
  108. package/dist/modules/datasource/rubygems/index.js +1 -1
  109. package/dist/modules/datasource/rubygems/index.js.map +1 -1
  110. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js +2 -2
  111. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js.map +1 -1
  112. package/dist/modules/datasource/terraform-provider/index.js +1 -1
  113. package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
  114. package/dist/modules/datasource/unity3d/index.d.ts +4 -1
  115. package/dist/modules/datasource/unity3d/index.js +36 -42
  116. package/dist/modules/datasource/unity3d/index.js.map +1 -1
  117. package/dist/modules/datasource/unity3d/schema.d.ts +47 -0
  118. package/dist/modules/datasource/unity3d/schema.js +17 -0
  119. package/dist/modules/datasource/unity3d/schema.js.map +1 -0
  120. package/dist/modules/manager/argocd/schema.d.ts +10 -10
  121. package/dist/modules/manager/azure-pipelines/schema.d.ts +10 -10
  122. package/dist/modules/manager/batect/schema.d.ts +6 -6
  123. package/dist/modules/manager/batect-wrapper/artifacts.js +1 -1
  124. package/dist/modules/manager/batect-wrapper/artifacts.js.map +1 -1
  125. package/dist/modules/manager/bazel/rules/docker.d.ts +9 -9
  126. package/dist/modules/manager/bazel/rules/git.d.ts +10 -10
  127. package/dist/modules/manager/bazel/rules/git.js +7 -1
  128. package/dist/modules/manager/bazel/rules/git.js.map +1 -1
  129. package/dist/modules/manager/bazel/rules/go.d.ts +5 -5
  130. package/dist/modules/manager/bazel/rules/oci.d.ts +3 -3
  131. package/dist/modules/manager/bazel-module/parser/fragments.d.ts +40 -40
  132. package/dist/modules/manager/bazel-module/parser/maven.d.ts +27 -27
  133. package/dist/modules/manager/bazel-module/parser/oci.d.ts +17 -17
  134. package/dist/modules/manager/bazel-module/rules.d.ts +40 -40
  135. package/dist/modules/manager/bundler/artifacts.js.map +1 -1
  136. package/dist/modules/manager/cargo/schema.d.ts +100 -100
  137. package/dist/modules/manager/circleci/schema.d.ts +6 -6
  138. package/dist/modules/manager/composer/schema.d.ts +40 -40
  139. package/dist/modules/manager/composer/utils.js +9 -6
  140. package/dist/modules/manager/composer/utils.js.map +1 -1
  141. package/dist/modules/manager/crossplane/schema.d.ts +2 -2
  142. package/dist/modules/manager/custom/jsonata/index.js +4 -0
  143. package/dist/modules/manager/custom/jsonata/index.js.map +1 -1
  144. package/dist/modules/manager/custom/jsonata/schema.d.ts +7 -7
  145. package/dist/modules/manager/devbox/artifacts.d.ts +1 -1
  146. package/dist/modules/manager/devbox/artifacts.js +29 -11
  147. package/dist/modules/manager/devbox/artifacts.js.map +1 -1
  148. package/dist/modules/manager/fingerprint.generated.js +68 -68
  149. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  150. package/dist/modules/manager/fleet/schema.d.ts +12 -12
  151. package/dist/modules/manager/flux/schema.d.ts +50 -50
  152. package/dist/modules/manager/glasskube/schema.d.ts +8 -8
  153. package/dist/modules/manager/gradle-wrapper/artifacts.js +1 -1
  154. package/dist/modules/manager/gradle-wrapper/artifacts.js.map +1 -1
  155. package/dist/modules/manager/maven/extract.js +3 -1
  156. package/dist/modules/manager/maven/extract.js.map +1 -1
  157. package/dist/modules/manager/mise/extract.js +1 -1
  158. package/dist/modules/manager/mise/extract.js.map +1 -1
  159. package/dist/modules/manager/nix/schema.d.ts +24 -24
  160. package/dist/modules/manager/npm/schema.d.ts +13 -13
  161. package/dist/modules/manager/nuget/schema.d.ts +8 -8
  162. package/dist/modules/manager/ocb/schema.d.ts +6 -6
  163. package/dist/modules/manager/pep621/schema.d.ts +55 -55
  164. package/dist/modules/manager/pep621/utils.js +1 -1
  165. package/dist/modules/manager/pep621/utils.js.map +1 -1
  166. package/dist/modules/manager/poetry/artifacts.js +3 -3
  167. package/dist/modules/manager/poetry/artifacts.js.map +1 -1
  168. package/dist/modules/manager/poetry/extract.js +2 -1
  169. package/dist/modules/manager/poetry/extract.js.map +1 -1
  170. package/dist/modules/manager/poetry/schema.d.ts +48 -48
  171. package/dist/modules/manager/sveltos/schema.d.ts +12 -12
  172. package/dist/modules/manager/terraform/lockfile/hash.d.ts +1 -1
  173. package/dist/modules/manager/vendir/schema.d.ts +27 -27
  174. package/dist/modules/platform/api.d.ts +1 -1
  175. package/dist/modules/platform/bitbucket/index.d.ts +1 -0
  176. package/dist/modules/platform/bitbucket/index.js +6 -1
  177. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  178. package/dist/modules/platform/bitbucket/schema.d.ts +17 -17
  179. package/dist/modules/platform/bitbucket-server/index.d.ts +1 -1
  180. package/dist/modules/platform/bitbucket-server/index.js +13 -11
  181. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  182. package/dist/modules/platform/bitbucket-server/schema.d.ts +75 -0
  183. package/dist/modules/platform/bitbucket-server/schema.js +14 -1
  184. package/dist/modules/platform/bitbucket-server/schema.js.map +1 -1
  185. package/dist/modules/platform/bitbucket-server/types.d.ts +2 -1
  186. package/dist/modules/platform/bitbucket-server/types.js.map +1 -1
  187. package/dist/modules/platform/bitbucket-server/utils.d.ts +0 -2
  188. package/dist/modules/platform/bitbucket-server/utils.js +1 -51
  189. package/dist/modules/platform/bitbucket-server/utils.js.map +1 -1
  190. package/dist/modules/platform/gerrit/client.js +1 -1
  191. package/dist/modules/platform/gerrit/client.js.map +1 -1
  192. package/dist/modules/platform/gitea/index.d.ts +1 -0
  193. package/dist/modules/platform/gitea/index.js +11 -0
  194. package/dist/modules/platform/gitea/index.js.map +1 -1
  195. package/dist/modules/platform/gitea/schema.d.ts +8 -8
  196. package/dist/modules/platform/github/common.d.ts +2 -0
  197. package/dist/modules/platform/github/common.js +16 -0
  198. package/dist/modules/platform/github/common.js.map +1 -1
  199. package/dist/modules/platform/github/index.d.ts +1 -1
  200. package/dist/modules/platform/github/index.js +6 -4
  201. package/dist/modules/platform/github/index.js.map +1 -1
  202. package/dist/modules/platform/github/issue.d.ts +12 -12
  203. package/dist/modules/platform/github/schema.d.ts +65 -65
  204. package/dist/modules/platform/gitlab/index.d.ts +1 -0
  205. package/dist/modules/platform/gitlab/index.js +9 -0
  206. package/dist/modules/platform/gitlab/index.js.map +1 -1
  207. package/dist/modules/platform/scm.d.ts +1 -1
  208. package/dist/modules/versioning/composer/index.js +10 -0
  209. package/dist/modules/versioning/composer/index.js.map +1 -1
  210. package/dist/modules/versioning/npm/index.js +2 -1
  211. package/dist/modules/versioning/npm/index.js.map +1 -1
  212. package/dist/modules/versioning/schema.js +1 -1
  213. package/dist/modules/versioning/schema.js.map +1 -1
  214. package/dist/modules/versioning/types.d.ts +4 -0
  215. package/dist/modules/versioning/types.js.map +1 -1
  216. package/dist/proxy.js +2 -1
  217. package/dist/proxy.js.map +1 -1
  218. package/dist/renovate.js +2 -2
  219. package/dist/renovate.js.map +1 -1
  220. package/dist/util/cache/package/decorator.js +2 -2
  221. package/dist/util/cache/package/decorator.js.map +1 -1
  222. package/dist/util/cache/package/redis.js +0 -1
  223. package/dist/util/cache/package/redis.js.map +1 -1
  224. package/dist/util/cache/repository/impl/base.d.ts +1 -1
  225. package/dist/util/exec/containerbase.js +12 -12
  226. package/dist/util/exec/containerbase.js.map +1 -1
  227. package/dist/util/github/graphql/query-adapters/releases-query-adapter.d.ts +5 -5
  228. package/dist/util/http/auth.js +0 -1
  229. package/dist/util/http/auth.js.map +1 -1
  230. package/dist/util/http/bitbucket-server.d.ts +5 -4
  231. package/dist/util/http/bitbucket-server.js +17 -20
  232. package/dist/util/http/bitbucket-server.js.map +1 -1
  233. package/dist/util/http/bitbucket.d.ts +6 -5
  234. package/dist/util/http/bitbucket.js +30 -31
  235. package/dist/util/http/bitbucket.js.map +1 -1
  236. package/dist/util/http/cache/abstract-http-cache-provider.js +1 -1
  237. package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
  238. package/dist/util/http/cache/schema.d.ts +2 -2
  239. package/dist/util/http/errors.d.ts +2 -0
  240. package/dist/util/http/errors.js +8 -0
  241. package/dist/util/http/errors.js.map +1 -0
  242. package/dist/util/http/gerrit.d.ts +6 -4
  243. package/dist/util/http/gerrit.js +11 -12
  244. package/dist/util/http/gerrit.js.map +1 -1
  245. package/dist/util/http/gitea.d.ts +5 -4
  246. package/dist/util/http/gitea.js +12 -13
  247. package/dist/util/http/gitea.js.map +1 -1
  248. package/dist/util/http/github.d.ts +14 -8
  249. package/dist/util/http/github.js +64 -60
  250. package/dist/util/http/github.js.map +1 -1
  251. package/dist/util/http/gitlab.d.ts +7 -5
  252. package/dist/util/http/gitlab.js +56 -46
  253. package/dist/util/http/gitlab.js.map +1 -1
  254. package/dist/util/http/got.d.ts +9 -0
  255. package/dist/util/http/got.js +54 -0
  256. package/dist/util/http/got.js.map +1 -0
  257. package/dist/util/http/host-rules.d.ts +2 -1
  258. package/dist/util/http/host-rules.js.map +1 -1
  259. package/dist/util/http/http.d.ts +93 -0
  260. package/dist/util/http/http.js +339 -0
  261. package/dist/util/http/http.js.map +1 -0
  262. package/dist/util/http/index.d.ts +6 -74
  263. package/dist/util/http/index.js +5 -359
  264. package/dist/util/http/index.js.map +1 -1
  265. package/dist/util/http/legacy.js +4 -1
  266. package/dist/util/http/legacy.js.map +1 -1
  267. package/dist/util/http/types.d.ts +9 -16
  268. package/dist/util/http/types.js.map +1 -1
  269. package/dist/util/string.d.ts +15 -0
  270. package/dist/util/string.js +75 -0
  271. package/dist/util/string.js.map +1 -1
  272. package/dist/util/toml.d.ts +1 -0
  273. package/dist/util/toml.js +6 -0
  274. package/dist/util/toml.js.map +1 -1
  275. package/dist/util/url.js +3 -8
  276. package/dist/util/url.js.map +1 -1
  277. package/dist/util/yaml.js +2 -6
  278. package/dist/util/yaml.js.map +1 -1
  279. package/dist/workers/global/config/parse/env.js +3 -2
  280. package/dist/workers/global/config/parse/env.js.map +1 -1
  281. package/dist/workers/global/config/parse/file.js +19 -9
  282. package/dist/workers/global/config/parse/file.js.map +1 -1
  283. package/dist/workers/global/config/parse/host-rules-from-env.js +6 -2
  284. package/dist/workers/global/config/parse/host-rules-from-env.js.map +1 -1
  285. package/dist/workers/repository/cache.js +0 -1
  286. package/dist/workers/repository/cache.js.map +1 -1
  287. package/dist/workers/repository/onboarding/pr/config-description.js +3 -1
  288. package/dist/workers/repository/onboarding/pr/config-description.js.map +1 -1
  289. package/dist/workers/repository/update/pr/changelog/bitbucket/index.js +1 -1
  290. package/dist/workers/repository/update/pr/changelog/bitbucket/index.js.map +1 -1
  291. package/dist/workers/repository/update/pr/changelog/gitlab/index.js +1 -1
  292. package/dist/workers/repository/update/pr/changelog/gitlab/index.js.map +1 -1
  293. package/package.json +44 -49
  294. package/renovate-schema.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { PAGE_NOT_FOUND_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { HttpError } from '../../../util/http';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { hasKey } from '../../../util/object';\nimport { regEx } from '../../../util/regex';\nimport { type AsyncResult, Result } from '../../../util/result';\nimport { isDockerDigest } from '../../../util/string-match';\nimport { asTimestamp } from '../../../util/timestamp';\nimport {\n ensurePathPrefix,\n joinUrlParts,\n parseLinkHeader,\n} from '../../../util/url';\nimport { id as dockerVersioningId } from '../../versioning/docker';\nimport { Datasource } from '../datasource';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport { isArtifactoryServer } from '../util';\nimport {\n DOCKER_HUB,\n dockerDatasourceId,\n extractDigestFromResponseBody,\n findHelmSourceUrl,\n findLatestStable,\n getAuthHeaders,\n getRegistryRepository,\n gitRefLabel,\n imageUrlLabel,\n isDockerHost,\n sourceLabel,\n sourceLabels,\n} from './common';\nimport { DockerHubCache } from './dockerhub-cache';\nimport { ecrPublicRegex, ecrRegex, isECRMaxResultsError } from './ecr';\nimport type { DistributionManifest, OciImageManifest } from './schema';\nimport {\n DockerHubTagsPage,\n ManifestJson,\n OciHelmConfig,\n OciImageConfig,\n} from './schema';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} Docker tag',\n commitMessageExtra:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}',\n digest: {\n branchTopic: '{{{depNameSanitized}}}-{{{currentValue}}}',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic:\n '{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n commitMessageExtra: '',\n },\n },\n pin: {\n commitMessageExtra: '',\n groupName: 'Docker digests',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n branchTopic: 'digests-pin',\n },\n },\n};\n\nexport class DockerDatasource extends Datasource {\n static readonly id = dockerDatasourceId;\n\n override readonly defaultVersioning = dockerVersioningId;\n\n override readonly defaultRegistryUrls = [DOCKER_HUB];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `tag_last_pushed` field in thre results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';\n\n constructor() {\n super(DockerDatasource.id);\n }\n\n // TODO: debug why quay throws errors (#9612)\n private async getManifestResponse(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n mode: 'head' | 'get' = 'get',\n ): Promise<HttpResponse | null> {\n logger.debug(\n `getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`,\n );\n try {\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return null;\n }\n headers.accept = [\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n 'application/vnd.docker.distribution.manifest.v2+json',\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ].join(', ');\n const url = `${registryHost}/v2/${dockerRepository}/manifests/${tag}`;\n const manifestResponse = await this.http[mode](url, {\n headers,\n noAuth: true,\n });\n return manifestResponse;\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 404) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Docker Manifest is unknown',\n );\n return null;\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.code === 'ETIMEDOUT') {\n logger.debug(\n { registryHost },\n 'Timeout when attempting to connect to docker registry',\n );\n logger.debug({ err });\n return null;\n }\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Unknown Error looking up docker manifest',\n );\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciImageConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n // istanbul ignore if: Should never happen\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciImageConfig,\n );\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getHelmConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciHelmConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n // istanbul ignore if: Should never happen\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciHelmConfig,\n );\n }\n\n private async getConfigDigest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<string | null> {\n return (\n (await this.getManifest(registry, dockerRepository, tag))?.config\n ?.digest ?? null\n );\n }\n\n private async getManifest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<OciImageManifest | DistributionManifest | null> {\n const manifestResponse = await this.getManifestResponse(\n registry,\n dockerRepository,\n tag,\n );\n\n // If getting the manifest fails here, then abort\n // This means that the latest tag doesn't have a manifest, which shouldn't\n // be possible\n // istanbul ignore if\n if (!manifestResponse) {\n return null;\n }\n\n // Softfail on invalid manifests\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n if (!parsed.success) {\n logger.debug(\n {\n registry,\n dockerRepository,\n tag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Invalid manifest response',\n );\n return null;\n }\n\n const manifest = parsed.data;\n\n switch (manifest.mediaType) {\n case 'application/vnd.docker.distribution.manifest.v2+json':\n case 'application/vnd.oci.image.manifest.v1+json':\n return manifest;\n case 'application/vnd.docker.distribution.manifest.list.v2+json':\n case 'application/vnd.oci.image.index.v1+json':\n if (!manifest.manifests.length) {\n logger.debug(\n { manifest },\n 'Invalid manifest list with no manifests - returning',\n );\n return null;\n }\n logger.trace(\n { registry, dockerRepository, tag },\n 'Found manifest list, using first image',\n );\n return this.getManifest(\n registry,\n dockerRepository,\n manifest.manifests[0].digest,\n );\n // istanbul ignore next: can't happen\n default:\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-architecture',\n key: (\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ) => `${registryHost}:${dockerRepository}@${currentDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageArchitecture(\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ): Promise<string | null | undefined> {\n try {\n let manifestResponse: HttpResponse<string> | null;\n\n try {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n currentDigest,\n 'head',\n );\n } catch (_err) {\n const err =\n _err instanceof ExternalHostError\n ? _err.err\n : /* istanbul ignore next: can never happen */ _err;\n\n if (\n typeof err.statusCode === 'number' &&\n err.statusCode >= 500 &&\n err.statusCode < 600\n ) {\n // querying the digest manifest for a non existent image leads to a 500 statusCode\n return null;\n }\n\n /* istanbul ignore next */\n throw _err;\n }\n\n if (\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.docker.distribution.manifest.v2+json' &&\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.oci.image.manifest.v1+json'\n ) {\n return null;\n }\n\n const configDigest = await this.getConfigDigest(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n if (!configDigest) {\n return null;\n }\n\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n configDigest,\n );\n\n // TODO: fix me, architecture is required in spec\n if (\n configResponse &&\n ('config' in configResponse.body ||\n 'architecture' in configResponse.body)\n ) {\n const architecture = configResponse.body.architecture ?? null;\n logger.debug(\n `Current digest ${currentDigest} relates to architecture ${\n architecture ?? 'null'\n }`,\n );\n\n return architecture;\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode !== 404 || err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n logger.debug(\n { registryHost, dockerRepository, currentDigest, err },\n 'Unknown error getting image architecture',\n );\n }\n\n return undefined;\n }\n\n /*\n * docker.getLabels\n *\n * This function will:\n * - Return the labels for the requested image\n */\n @cache({\n namespace: 'datasource-docker-labels',\n key: (registryHost: string, dockerRepository: string, tag: string) =>\n `${registryHost}:${dockerRepository}:${tag}`,\n ttlMinutes: 24 * 60,\n })\n async getLabels(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n ): Promise<Record<string, string> | undefined> {\n logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);\n // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set\n if (\n process.env.RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&\n registryHost === 'https://index.docker.io'\n ) {\n logger.debug(\n 'Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP',\n );\n return {};\n }\n // Docker Hub library images don't have labels we need\n if (\n registryHost === 'https://index.docker.io' &&\n dockerRepository.startsWith('library/')\n ) {\n logger.debug('Docker Hub library image - skipping label lookup');\n return {};\n }\n try {\n let labels: Record<string, string> | undefined = {};\n const manifest = await this.getManifest(\n registryHost,\n dockerRepository,\n tag,\n );\n\n if (!manifest) {\n logger.debug(\n { registryHost, dockerRepository, tag },\n 'No manifest found',\n );\n return undefined;\n }\n\n if ('annotations' in manifest && manifest.annotations) {\n labels = manifest.annotations;\n }\n\n switch (manifest.config.mediaType) {\n case 'application/vnd.cncf.helm.config.v1+json': {\n if (labels[sourceLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getHelmConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n if (configResponse) {\n // Helm chart\n const url = findHelmSourceUrl(configResponse.body);\n if (url) {\n labels[sourceLabel] = url;\n }\n }\n break;\n }\n case 'application/vnd.oci.image.config.v1+json':\n case 'application/vnd.docker.container.image.v1+json': {\n if (labels[sourceLabel] && labels[gitRefLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n // istanbul ignore if: should never happen\n if (!configResponse) {\n return labels;\n }\n\n const body = configResponse.body;\n if (body.config) {\n labels = { ...labels, ...body.config.Labels };\n } else {\n logger.debug(\n { headers: configResponse.headers, body },\n `manifest blob response body missing the \"config\" property`,\n );\n }\n break;\n }\n }\n\n if (labels) {\n logger.debug(\n {\n labels,\n },\n 'found labels in manifest',\n );\n }\n return labels;\n } catch (err) /* istanbul ignore next: should be tested in future */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 400 || err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository, err },\n 'Unauthorized docker lookup',\n );\n } else if (err.statusCode === 404) {\n logger.warn(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Config Manifest is unknown',\n );\n } else if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn({ err }, 'docker registry failure: too many requests');\n } else if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'docker registry failure: internal error',\n );\n } else if (\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ETIMEDOUT'\n ) {\n logger.debug(\n { registryHost, err },\n 'Error connecting to docker registry',\n );\n } else if (registryHost === 'https://quay.io') {\n // istanbul ignore next\n logger.debug(\n 'Ignoring quay.io errors until they fully support v2 schema',\n );\n } else {\n logger.info(\n { registryHost, dockerRepository, tag, err },\n 'Unknown error getting Docker labels',\n );\n }\n return {};\n }\n }\n\n private async getTagsQuayRegistry(\n registry: string,\n repository: string,\n ): Promise<string[]> {\n let tags: string[] = [];\n const limit = 100;\n\n const pageUrl = (page: number): string =>\n `${registry}/api/v1/repository/${repository}/tag/?limit=${limit}&page=${page}&onlyActiveTags=true`;\n\n let page = 1;\n let url: string | null = pageUrl(page);\n while (url && page <= 20) {\n interface QuayRestDockerTags {\n tags: {\n name: string;\n }[];\n has_additional: boolean;\n }\n\n // typescript issue :-/\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const res = (await this.http.getJsonUnchecked<QuayRestDockerTags>(\n url,\n )) as HttpResponse<QuayRestDockerTags>;\n const pageTags = res.body.tags.map((tag) => tag.name);\n tags = tags.concat(pageTags);\n page += 1;\n url = res.body.has_additional ? pageUrl(page) : null;\n }\n return tags;\n }\n\n private async getDockerApiTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n let tags: string[] = [];\n // AWS ECR limits the maximum number of results to 1000\n // See https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n // See https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_DescribeRepositories.html#ecrpublic-DescribeRepositories-request-maxResults\n const limit =\n ecrRegex.test(registryHost) || ecrPublicRegex.test(registryHost)\n ? 1000\n : 10000;\n let url: string | null =\n `${registryHost}/${dockerRepository}/tags/list?n=${limit}`;\n url = ensurePathPrefix(url, '/v2');\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n url,\n );\n if (!headers) {\n logger.debug('Failed to get authHeaders for getTags lookup');\n return null;\n }\n let page = 0;\n const pages = GlobalConfig.get('dockerMaxPages', 20);\n let foundMaxResultsError = false;\n do {\n let res: HttpResponse<{ tags: string[] }>;\n try {\n res = await this.http.getJsonUnchecked<{ tags: string[] }>(url, {\n headers,\n noAuth: true,\n });\n } catch (err) {\n if (\n !foundMaxResultsError &&\n err instanceof HttpError &&\n isECRMaxResultsError(err)\n ) {\n const maxResults = 1000;\n url = `${registryHost}/${dockerRepository}/tags/list?n=${maxResults}`;\n url = ensurePathPrefix(url, '/v2');\n foundMaxResultsError = true;\n continue;\n }\n throw err;\n }\n tags = tags.concat(res.body.tags);\n const linkHeader = parseLinkHeader(res.headers.link);\n if (isArtifactoryServer(res)) {\n // Artifactory incorrectly returns a next link without the virtual repository name\n // this is due to a bug in Artifactory https://jfrog.atlassian.net/browse/RTFACT-18971\n url = linkHeader?.next?.last\n ? `${url}&last=${linkHeader.next.last}`\n : null;\n } else {\n url = linkHeader?.next ? new URL(linkHeader.next.url, url).href : null;\n }\n page += 1;\n } while (url && page < pages);\n return tags;\n }\n\n @cache({\n namespace: 'datasource-docker-tags',\n key: (registryHost: string, dockerRepository: string) =>\n `${registryHost}:${dockerRepository}`,\n })\n async getTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n try {\n const isQuay = regEx(/^https:\\/\\/quay\\.io(?::[1-9][0-9]{0,4})?$/i).test(\n registryHost,\n );\n let tags: string[] | null;\n if (isQuay) {\n tags = await this.getTagsQuayRegistry(registryHost, dockerRepository);\n } else {\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n }\n return tags;\n } catch (_err) /* istanbul ignore next */ {\n const err = _err instanceof ExternalHostError ? _err.err : _err;\n\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n !dockerRepository.includes('/')\n ) {\n logger.debug(\n `Retrying Tags for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getTags(registryHost, 'library/' + dockerRepository);\n }\n // JFrog Artifactory - Retry handling when resolving Docker Official Images\n // These follow the format of {{registryHost}}{{jFrogRepository}}/library/{{dockerRepository}}\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n isArtifactoryServer(err.response) &&\n dockerRepository.split('/').length === 2\n ) {\n logger.debug(\n `JFrog Artifactory: Retrying Tags for ${registryHost}/${dockerRepository} using library/ path between JFrog virtual repository and image`,\n );\n\n const dockerRepositoryParts = dockerRepository.split('/');\n const jfrogRepository = dockerRepositoryParts[0];\n const dockerImage = dockerRepositoryParts[1];\n\n return this.getTags(\n registryHost,\n jfrogRepository + '/library/' + dockerImage,\n );\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: too many requests',\n );\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: internal error',\n );\n throw new ExternalHostError(err);\n }\n const errorCodes = ['ECONNRESET', 'ETIMEDOUT'];\n if (errorCodes.includes(err.code)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry connection failure',\n );\n throw new ExternalHostError(err);\n }\n if (isDockerHost(registryHost)) {\n logger.info({ err }, 'Docker Hub lookup failure');\n }\n throw _err;\n }\n }\n\n /**\n * docker.getDigest\n *\n * The `newValue` supplied here should be a valid tag for the docker image.\n *\n * This function will:\n * - Look up a sha256 digest for a tag on its registry\n * - Return the digest as a string\n */\n @cache({\n namespace: 'datasource-docker-digest',\n key: (\n { registryUrl, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ) => {\n const newTag = newValue ?? 'latest';\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n const digest = currentDigest ? `@${currentDigest}` : '';\n return `${registryHost}:${dockerRepository}:${newTag}${digest}`;\n },\n })\n override async getDigest(\n { registryUrl, lookupName, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n let registryHost: string;\n let dockerRepository: string;\n if (registryUrl && lookupName) {\n // Reuse the resolved values from getReleases()\n registryHost = registryUrl;\n dockerRepository = lookupName;\n } else {\n // Resolve values independently\n ({ registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n ));\n }\n logger.debug(\n // TODO: types (#22198)\n `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`,\n );\n const newTag = is.nonEmptyString(newValue) ? newValue : 'latest';\n let digest: string | null = null;\n try {\n let architecture: string | null | undefined = null;\n if (currentDigest && isDockerDigest(currentDigest)) {\n architecture = await this.getImageArchitecture(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n }\n\n let manifestResponse: HttpResponse | null = null;\n if (!architecture) {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n 'head',\n );\n\n if (\n manifestResponse &&\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n digest =\n (manifestResponse.headers['docker-content-digest'] as string) ||\n null;\n }\n }\n\n if (\n is.string(architecture) ||\n (manifestResponse &&\n !hasKey('docker-content-digest', manifestResponse.headers))\n ) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Architecture-specific digest or missing docker-content-digest header - pulling full manifest',\n );\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n );\n\n if (architecture && manifestResponse) {\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n /* istanbul ignore else: hard to test */\n if (parsed.success) {\n const manifestList = parsed.data;\n if (\n manifestList.mediaType ===\n 'application/vnd.docker.distribution.manifest.list.v2+json' ||\n manifestList.mediaType ===\n 'application/vnd.oci.image.index.v1+json'\n ) {\n for (const manifest of manifestList.manifests) {\n if (manifest.platform?.architecture === architecture) {\n digest = manifest.digest;\n break;\n }\n }\n // TODO: return null if no matching architecture digest found\n // https://github.com/renovatebot/renovate/discussions/22639\n } else if (\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n // TODO: return null if no matching architecture, requires to fetch the config manifest\n // https://github.com/renovatebot/renovate/discussions/22639\n digest = manifestResponse.headers[\n 'docker-content-digest'\n ] as string;\n }\n } else {\n logger.debug(\n {\n registryHost,\n dockerRepository,\n newTag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Failed to parse manifest response',\n );\n }\n }\n\n if (!digest) {\n logger.debug(\n { registryHost, dockerRepository, newTag },\n 'Extraction digest from manifest response body is deprecated',\n );\n digest = extractDigestFromResponseBody(manifestResponse!);\n }\n }\n\n if (\n !manifestResponse &&\n !dockerRepository.includes('/') &&\n !packageName.includes('/')\n ) {\n logger.debug(\n `Retrying Digest for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getDigest(\n {\n registryUrl,\n packageName: 'library/' + packageName,\n currentDigest,\n },\n newValue,\n );\n }\n\n if (manifestResponse) {\n // TODO: fix types (#22198)\n logger.debug(`Got docker digest ${digest!}`);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n {\n err,\n packageName,\n newTag,\n },\n 'Unknown Error looking up docker image digest',\n );\n }\n return digest;\n }\n\n @cache({\n namespace: 'datasource-docker-hub-tags',\n key: (dockerRepository: string) => `${dockerRepository}`,\n })\n async getDockerHubTags(dockerRepository: string): Promise<Release[] | null> {\n let url = `https://hub.docker.com/v2/repositories/${dockerRepository}/tags?page_size=1000&ordering=last_updated`;\n\n const cache = await DockerHubCache.init(dockerRepository);\n let needNextPage = true;\n while (needNextPage) {\n const { val, err } = await this.http\n .getJsonSafe(url, DockerHubTagsPage)\n .unwrap();\n\n if (err) {\n logger.debug({ err }, `Docker: error fetching data from DockerHub`);\n return null;\n }\n\n const { results, next, count } = val;\n\n needNextPage = cache.reconcile(results, count);\n\n if (!next) {\n break;\n }\n\n url = next;\n }\n\n await cache.save();\n\n const items = cache.getItems();\n return items.map(\n ({ name: version, tag_last_pushed, digest: newDigest }) => {\n const release: Release = { version };\n\n const releaseTimestamp = asTimestamp(tag_last_pushed);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n\n if (newDigest) {\n release.newDigest = newDigest;\n }\n\n return release;\n },\n );\n }\n\n /**\n * docker.getReleases\n *\n * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine\n * In the above:\n * - 'somehost.io' is the registry\n * - 'owner/repo' is the package name\n * - '8.1.0-alpine' is the tag\n *\n * This function will filter only tags that contain a semver version\n */\n @cache({\n namespace: 'datasource-docker-releases-v2',\n key: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n return `${registryHost}:${dockerRepository}`;\n },\n cacheable: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost } = getRegistryRepository(packageName, registryUrl!);\n return registryHost === 'https://index.docker.io';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n\n type TagsResultType = AsyncResult<\n Release[],\n NonNullable<Error | 'tags-error' | 'dockerhub-error'>\n >;\n\n const getTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getTags(registryHost, dockerRepository),\n 'tags-error' as const,\n ).transform((tags) => tags.map((version) => ({ version })));\n\n const getDockerHubTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getDockerHubTags(dockerRepository),\n 'dockerhub-error' as const,\n ).catch(getTags);\n\n const tagsResult =\n registryHost === 'https://index.docker.io' &&\n !process.env.RENOVATE_X_DOCKER_HUB_TAGS_DISABLE\n ? getDockerHubTags()\n : getTags();\n\n const { val: releases, err } = await tagsResult.unwrap();\n if (err instanceof Error) {\n throw err;\n } else if (err) {\n return null;\n }\n\n const ret: ReleaseResult = {\n registryUrl: registryHost,\n releases,\n };\n if (dockerRepository !== packageName) {\n // This will be reused later if a getDigest() call is made\n ret.lookupName = dockerRepository;\n }\n\n const tags = releases.map((release) => release.version);\n const latestTag = tags.includes('latest')\n ? 'latest'\n : (findLatestStable(tags) ?? tags[tags.length - 1]);\n\n // istanbul ignore if: needs test\n if (!latestTag) {\n return ret;\n }\n const labels = await this.getLabels(\n registryHost,\n dockerRepository,\n latestTag,\n );\n if (labels) {\n if (is.nonEmptyString(labels[gitRefLabel])) {\n ret.gitRef = labels[gitRefLabel];\n }\n for (const label of sourceLabels) {\n if (is.nonEmptyString(labels[label])) {\n ret.sourceUrl = labels[label];\n break;\n }\n }\n if (is.nonEmptyString(labels[imageUrlLabel])) {\n ret.homepage = labels[imageUrlLabel];\n }\n }\n return ret;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/index.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAClC,mDAAsD;AACtD,sEAAyE;AACzE,4CAAyC;AACzC,mFAA8E;AAC9E,qEAA8D;AAC9D,6CAA+C;AAE/C,iDAA8C;AAC9C,+CAA4C;AAC5C,iDAAgE;AAChE,6DAA4D;AAC5D,uDAAsD;AACtD,2CAI2B;AAC3B,oDAAmE;AACnE,8CAA2C;AAO3C,kCAA8C;AAC9C,qCAakB;AAClB,uDAAmD;AACnD,+BAAuE;AAEvE,qCAKkB;AAElB,MAAM,aAAa,GAAG;IACpB,kBAAkB,EAAE,0BAA0B;IAC9C,kBAAkB,EAChB,mIAAmI;IACrI,MAAM,EAAE;QACN,WAAW,EAAE,2CAA2C;QACxD,kBAAkB,EAAE,uBAAuB;QAC3C,kBAAkB,EAChB,2EAA2E;QAC7E,KAAK,EAAE;YACL,kBAAkB,EAAE,iBAAiB;YACrC,kBAAkB,EAAE,EAAE;SACvB;KACF;IACD,GAAG,EAAE;QACH,kBAAkB,EAAE,EAAE;QACtB,SAAS,EAAE,gBAAgB;QAC3B,KAAK,EAAE;YACL,kBAAkB,EAAE,iBAAiB;YACrC,WAAW,EAAE,aAAa;SAC3B;KACF;CACF,CAAC;AAEF,MAAa,gBAAiB,SAAQ,uBAAU;IAC9C,MAAM,CAAU,EAAE,GAAG,2BAAkB,CAAC;IAEtB,iBAAiB,GAAG,WAAkB,CAAC;IAEvC,mBAAmB,GAAG,CAAC,mBAAU,CAAC,CAAC;IAEnC,aAAa,GAAG,aAAa,CAAC;IAE9B,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,uFAAuF,CAAC;IACxE,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,oMAAoM,CAAC;IAEvM;QACE,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,6CAA6C;IACrC,KAAK,CAAC,mBAAmB,CAC/B,YAAoB,EACpB,gBAAwB,EACxB,GAAW,EACX,OAA2B,SAAS;QAEpC,eAAM,CAAC,KAAK,CACV,uBAAuB,YAAY,KAAK,gBAAgB,KAAK,GAAG,KAAK,IAAI,GAAG,CAC7E,CAAC;QACF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAClC,IAAI,CAAC,IAAI,EACT,YAAY,EACZ,gBAAgB,CACjB,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,CAAC,MAAM,GAAG;gBACf,2DAA2D;gBAC3D,sDAAsD;gBACtD,4CAA4C;gBAC5C,yCAAyC;aAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,OAAO,gBAAgB,cAAc,GAAG,EAAE,CAAC;YACtE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;gBAClD,OAAO;gBACP,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;gBACrC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC3B,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAClC,4BAA4B,CAC7B,CAAC;gBACF,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC3B,eAAM,CAAC,KAAK,CACV;oBACE,GAAG;oBACH,YAAY;oBACZ,gBAAgB;oBAChB,GAAG;iBACJ,EACD,4BAA4B,CAC7B,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAClD,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC7B,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,EAChB,uDAAuD,CACxD,CAAC;gBACF,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,eAAM,CAAC,KAAK,CACV;gBACE,GAAG;gBACH,YAAY;gBACZ,gBAAgB;gBAChB,GAAG;aACJ,EACD,0CAA0C,CAC3C,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAWK,AAAN,KAAK,CAAC,cAAc,CAClB,YAAoB,EACpB,gBAAwB,EACxB,YAAoB;QAEpB,eAAM,CAAC,KAAK,CACV,kBAAkB,YAAY,KAAK,gBAAgB,KAAK,YAAY,GAAG,CACxE,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAClC,IAAI,CAAC,IAAI,EACT,YAAY,EACZ,gBAAgB,CACjB,CAAC;QACF,0CAA0C;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,kBAAY,EACtB,YAAY,EACZ,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,YAAY,CACb,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAC5B,GAAG,EACH;YACE,OAAO;YACP,MAAM,EAAE,IAAI;SACb,EACD,uBAAc,CACf,CAAC;IACJ,CAAC;IAWK,AAAN,KAAK,CAAC,aAAa,CACjB,YAAoB,EACpB,gBAAwB,EACxB,YAAoB;QAEpB,eAAM,CAAC,KAAK,CACV,kBAAkB,YAAY,KAAK,gBAAgB,KAAK,YAAY,GAAG,CACxE,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAClC,IAAI,CAAC,IAAI,EACT,YAAY,EACZ,gBAAgB,CACjB,CAAC;QACF,0CAA0C;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,kBAAY,EACtB,YAAY,EACZ,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,YAAY,CACb,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAC5B,GAAG,EACH;YACE,OAAO;YACP,MAAM,EAAE,IAAI;SACb,EACD,sBAAa,CACd,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,QAAgB,EAChB,gBAAwB,EACxB,GAAW;QAEX,OAAO,CACL,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM;YAC/D,EAAE,MAAM,IAAI,IAAI,CACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,QAAgB,EAChB,gBAAwB,EACxB,GAAW;QAEX,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CACrD,QAAQ,EACR,gBAAgB,EAChB,GAAG,CACJ,CAAC;QAEF,iDAAiD;QACjD,0EAA0E;QAC1E,cAAc;QACd,qBAAqB;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gCAAgC;QAChC,MAAM,MAAM,GAAG,qBAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CACV;gBACE,QAAQ;gBACR,gBAAgB;gBAChB,GAAG;gBACH,IAAI,EAAE,gBAAgB,CAAC,IAAI;gBAC3B,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,GAAG,EAAE,MAAM,CAAC,KAAK;aAClB,EACD,2BAA2B,CAC5B,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QAE7B,QAAQ,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC3B,KAAK,sDAAsD,CAAC;YAC5D,KAAK,4CAA4C;gBAC/C,OAAO,QAAQ,CAAC;YAClB,KAAK,2DAA2D,CAAC;YACjE,KAAK,yCAAyC;gBAC5C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;oBAC/B,eAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,EACZ,qDAAqD,CACtD,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACnC,wCAAwC,CACzC,CAAC;gBACF,OAAO,IAAI,CAAC,WAAW,CACrB,QAAQ,EACR,gBAAgB,EAChB,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAC7B,CAAC;YACJ,qCAAqC;YACrC;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAWK,AAAN,KAAK,CAAC,oBAAoB,CACxB,YAAoB,EACpB,gBAAwB,EACxB,aAAqB;QAErB,IAAI,CAAC;YACH,IAAI,gBAA6C,CAAC;YAElD,IAAI,CAAC;gBACH,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC/C,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,MAAM,CACP,CAAC;YACJ,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,MAAM,GAAG,GACP,IAAI,YAAY,uCAAiB;oBAC/B,CAAC,CAAC,IAAI,CAAC,GAAG;oBACV,CAAC,CAAC,4CAA4C,CAAC,IAAI,CAAC;gBAExD,IACE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;oBAClC,GAAG,CAAC,UAAU,IAAI,GAAG;oBACrB,GAAG,CAAC,UAAU,GAAG,GAAG,EACpB,CAAC;oBACD,kFAAkF;oBAClF,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,0BAA0B;gBAC1B,MAAM,IAAI,CAAC;YACb,CAAC;YAED,IACE,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC;gBACvC,sDAAsD;gBACxD,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC;oBACvC,4CAA4C,EAC9C,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAC7C,YAAY,EACZ,gBAAgB,EAChB,aAAa,CACd,CAAC;YACF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAC9C,YAAY,EACZ,gBAAgB,EAChB,YAAY,CACb,CAAC;YAEF,iDAAiD;YACjD,IACE,cAAc;gBACd,CAAC,QAAQ,IAAI,cAAc,CAAC,IAAI;oBAC9B,cAAc,IAAI,cAAc,CAAC,IAAI,CAAC,EACxC,CAAC;gBACD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;gBAC9D,eAAM,CAAC,KAAK,CACV,kBAAkB,aAAa,4BAC7B,YAAY,IAAI,MAClB,EAAE,CACH,CAAC;gBAEF,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,qCAAoB,EAAE,CAAC;gBACnE,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,EAAE,EACtD,0CAA0C,CAC3C,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IAOG,AAAN,KAAK,CAAC,SAAS,CACb,YAAoB,EACpB,gBAAwB,EACxB,GAAW;QAEX,eAAM,CAAC,KAAK,CAAC,aAAa,YAAY,KAAK,gBAAgB,KAAK,GAAG,GAAG,CAAC,CAAC;QACxE,6EAA6E;QAC7E,IACE,OAAO,CAAC,GAAG,CAAC,0CAA0C;YACtD,YAAY,KAAK,yBAAyB,EAC1C,CAAC;YACD,eAAM,CAAC,KAAK,CACV,4FAA4F,CAC7F,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,sDAAsD;QACtD,IACE,YAAY,KAAK,yBAAyB;YAC1C,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,EACvC,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC;YACH,IAAI,MAAM,GAAuC,EAAE,CAAC;YACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CACrC,YAAY,EACZ,gBAAgB,EAChB,GAAG,CACJ,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,mBAAmB,CACpB,CAAC;gBACF,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,aAAa,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACtD,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;YAChC,CAAC;YAED,QAAQ,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAClC,KAAK,0CAA0C,CAAC,CAAC,CAAC;oBAChD,IAAI,MAAM,CAAC,oBAAW,CAAC,EAAE,CAAC;wBACxB,gEAAgE;wBAChE,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAC7C,YAAY,EACZ,gBAAgB,EAChB,QAAQ,CAAC,MAAM,CAAC,MAAM,CACvB,CAAC;oBAEF,IAAI,cAAc,EAAE,CAAC;wBACnB,aAAa;wBACb,MAAM,GAAG,GAAG,IAAA,0BAAiB,EAAC,cAAc,CAAC,IAAI,CAAC,CAAC;wBACnD,IAAI,GAAG,EAAE,CAAC;4BACR,MAAM,CAAC,oBAAW,CAAC,GAAG,GAAG,CAAC;wBAC5B,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,0CAA0C,CAAC;gBAChD,KAAK,gDAAgD,CAAC,CAAC,CAAC;oBACtD,IAAI,MAAM,CAAC,oBAAW,CAAC,IAAI,MAAM,CAAC,oBAAW,CAAC,EAAE,CAAC;wBAC/C,gEAAgE;wBAChE,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAC9C,YAAY,EACZ,gBAAgB,EAChB,QAAQ,CAAC,MAAM,CAAC,MAAM,CACvB,CAAC;oBAEF,0CAA0C;oBAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,OAAO,MAAM,CAAC;oBAChB,CAAC;oBAED,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;oBACjC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAChB,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,eAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,EACzC,2DAA2D,CAC5D,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,eAAM,CAAC,KAAK,CACV;oBACE,MAAM;iBACP,EACD,0BAA0B,CAC3B,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,sDAAsD,CAAC,CAAC;YACpE,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;gBACrC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBACrD,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,4BAA4B,CAC7B,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAClC,eAAM,CAAC,IAAI,CACT;oBACE,GAAG;oBACH,YAAY;oBACZ,gBAAgB;oBAChB,GAAG;iBACJ,EACD,4BAA4B,CAC7B,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBAChE,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,4CAA4C,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBACzD,eAAM,CAAC,KAAK,CACV;oBACE,GAAG;oBACH,YAAY;oBACZ,gBAAgB;oBAChB,GAAG;iBACJ,EACD,yCAAyC,CAC1C,CAAC;YACJ,CAAC;iBAAM,IACL,GAAG,CAAC,IAAI,KAAK,8BAA8B;gBAC3C,GAAG,CAAC,IAAI,KAAK,WAAW,EACxB,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,GAAG,EAAE,EACrB,qCAAqC,CACtC,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAY,KAAK,iBAAiB,EAAE,CAAC;gBAC9C,uBAAuB;gBACvB,eAAM,CAAC,KAAK,CACV,4DAA4D,CAC7D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,EAC5C,qCAAqC,CACtC,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,QAAgB,EAChB,UAAkB;QAElB,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC;QAElB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CACvC,GAAG,QAAQ,sBAAsB,UAAU,eAAe,KAAK,SAAS,IAAI,sBAAsB,CAAC;QAErG,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,GAAG,GAAkB,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAQzB,uBAAuB;YACvB,4EAA4E;YAC5E,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAC3C,GAAG,CACJ,CAAqC,CAAC;YACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,CAAC;YACV,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,YAAoB,EACpB,gBAAwB;QAExB,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,uDAAuD;QACvD,0IAA0I;QAC1I,sJAAsJ;QACtJ,MAAM,KAAK,GACT,cAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,oBAAc,CAAC,IAAI,CAAC,YAAY,CAAC;YAC9D,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,GAAG,GACL,GAAG,YAAY,IAAI,gBAAgB,gBAAgB,KAAK,EAAE,CAAC;QAC7D,GAAG,GAAG,IAAA,sBAAgB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAClC,IAAI,CAAC,IAAI,EACT,YAAY,EACZ,gBAAgB,EAChB,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,MAAM,KAAK,GAAG,qBAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,GAAG,CAAC;YACF,IAAI,GAAqC,CAAC;YAC1C,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAqB,GAAG,EAAE;oBAC9D,OAAO;oBACP,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IACE,CAAC,oBAAoB;oBACrB,GAAG,YAAY,gBAAS;oBACxB,IAAA,0BAAoB,EAAC,GAAG,CAAC,EACzB,CAAC;oBACD,MAAM,UAAU,GAAG,IAAI,CAAC;oBACxB,GAAG,GAAG,GAAG,YAAY,IAAI,gBAAgB,gBAAgB,UAAU,EAAE,CAAC;oBACtE,GAAG,GAAG,IAAA,sBAAgB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACnC,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,IAAA,qBAAe,EAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,IAAA,0BAAmB,EAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,kFAAkF;gBAClF,sFAAsF;gBACtF,GAAG,GAAG,UAAU,EAAE,IAAI,EAAE,IAAI;oBAC1B,CAAC,CAAC,GAAG,GAAG,SAAS,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;oBACvC,CAAC,CAAC,IAAI,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,CAAC;YACD,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC,QAAQ,GAAG,IAAI,IAAI,GAAG,KAAK,EAAE;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAOK,AAAN,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,gBAAwB;QAExB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,aAAK,EAAC,4CAA4C,CAAC,CAAC,IAAI,CACrE,YAAY,CACb,CAAC;YACF,IAAI,IAAqB,CAAC;YAC1B,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,IAAI,EAAE,0BAA0B,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,YAAY,uCAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAEhE,IACE,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,qCAAoB,CAAC;gBAChE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC/B,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,qBAAqB,YAAY,IAAI,gBAAgB,wBAAwB,CAC9E,CAAC;gBACF,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,GAAG,gBAAgB,CAAC,CAAC;YACnE,CAAC;YACD,2EAA2E;YAC3E,8FAA8F;YAC9F,IACE,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,qCAAoB,CAAC;gBAChE,IAAA,0BAAmB,EAAC,GAAG,CAAC,QAAQ,CAAC;gBACjC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EACxC,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,wCAAwC,YAAY,IAAI,gBAAgB,iEAAiE,CAC1I,CAAC;gBAEF,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D,MAAM,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAE7C,OAAO,IAAI,CAAC,OAAO,CACjB,YAAY,EACZ,eAAe,GAAG,WAAW,GAAG,WAAW,CAC5C,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBACzD,eAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,4CAA4C,CAC7C,CAAC;gBACF,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAClD,eAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,yCAAyC,CAC1C,CAAC;gBACF,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,eAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,oCAAoC,CACrC,CAAC;gBACF,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBAC/B,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IAgBY,AAAN,KAAK,CAAC,SAAS,CACtB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAgB,EACrE,QAAiB;QAEjB,IAAI,YAAoB,CAAC;QACzB,IAAI,gBAAwB,CAAC;QAC7B,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;YAC9B,+CAA+C;YAC/C,YAAY,GAAG,WAAW,CAAC;YAC3B,gBAAgB,GAAG,UAAU,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAA,8BAAqB,EACzD,WAAW,EACX,WAAY,CACb,CAAC,CAAC;QACL,CAAC;QACD,eAAM,CAAC,KAAK;QACV,uBAAuB;QACvB,aAAa,YAAY,KAAK,gBAAgB,KAAK,QAAQ,GAAG,CAC/D,CAAC;QACF,MAAM,MAAM,GAAG,YAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjE,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,CAAC;YACH,IAAI,YAAY,GAA8B,IAAI,CAAC;YACnD,IAAI,aAAa,IAAI,IAAA,6BAAc,EAAC,aAAa,CAAC,EAAE,CAAC;gBACnD,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC5C,YAAY,EACZ,gBAAgB,EAChB,aAAa,CACd,CAAC;YACJ,CAAC;YAED,IAAI,gBAAgB,GAAwB,IAAI,CAAC;YACjD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC/C,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,MAAM,CACP,CAAC;gBAEF,IACE,gBAAgB;oBAChB,IAAA,eAAM,EAAC,uBAAuB,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACzD,CAAC;oBACD,MAAM;wBACH,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,CAAY;4BAC7D,IAAI,CAAC;gBACT,CAAC;YACH,CAAC;YAED,IACE,YAAE,CAAC,MAAM,CAAC,YAAY,CAAC;gBACvB,CAAC,gBAAgB;oBACf,CAAC,IAAA,eAAM,EAAC,uBAAuB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAC7D,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAClC,8FAA8F,CAC/F,CAAC;gBACF,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC/C,YAAY,EACZ,gBAAgB,EAChB,MAAM,CACP,CAAC;gBAEF,IAAI,YAAY,IAAI,gBAAgB,EAAE,CAAC;oBACrC,MAAM,MAAM,GAAG,qBAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC7D,wCAAwC;oBACxC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;wBACjC,IACE,YAAY,CAAC,SAAS;4BACpB,2DAA2D;4BAC7D,YAAY,CAAC,SAAS;gCACpB,yCAAyC,EAC3C,CAAC;4BACD,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gCAC9C,IAAI,QAAQ,CAAC,QAAQ,EAAE,YAAY,KAAK,YAAY,EAAE,CAAC;oCACrD,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oCACzB,MAAM;gCACR,CAAC;4BACH,CAAC;4BACD,6DAA6D;4BAC7D,4DAA4D;wBAC9D,CAAC;6BAAM,IACL,IAAA,eAAM,EAAC,uBAAuB,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACzD,CAAC;4BACD,uFAAuF;4BACvF,4DAA4D;4BAC5D,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAC/B,uBAAuB,CACd,CAAC;wBACd,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,eAAM,CAAC,KAAK,CACV;4BACE,YAAY;4BACZ,gBAAgB;4BAChB,MAAM;4BACN,IAAI,EAAE,gBAAgB,CAAC,IAAI;4BAC3B,OAAO,EAAE,gBAAgB,CAAC,OAAO;4BACjC,GAAG,EAAE,MAAM,CAAC,KAAK;yBAClB,EACD,mCAAmC,CACpC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAC1C,6DAA6D,CAC9D,CAAC;oBACF,MAAM,GAAG,IAAA,sCAA6B,EAAC,gBAAiB,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,IACE,CAAC,gBAAgB;gBACjB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC/B,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC1B,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,uBAAuB,YAAY,IAAI,gBAAgB,wBAAwB,CAChF,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CACnB;oBACE,WAAW;oBACX,WAAW,EAAE,UAAU,GAAG,WAAW;oBACrC,aAAa;iBACd,EACD,QAAQ,CACT,CAAC;YACJ,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,2BAA2B;gBAC3B,eAAM,CAAC,KAAK,CAAC,qBAAqB,MAAO,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;gBACrC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,eAAM,CAAC,KAAK,CACV;gBACE,GAAG;gBACH,WAAW;gBACX,MAAM;aACP,EACD,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAMK,AAAN,KAAK,CAAC,gBAAgB,CAAC,gBAAwB;QAC7C,IAAI,GAAG,GAAG,0CAA0C,gBAAgB,4CAA4C,CAAC;QAEjH,MAAM,KAAK,GAAG,MAAM,gCAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,qBAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,GAAG,CAAC,EACV,YAAY,GAAG,IAAI,CAAC;QACtB,OAAO,YAAY,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI;iBACjC,WAAW,CAAC,GAAG,EAAE,0BAAiB,CAAC;iBACnC,MAAM,EAAE,CAAC;YAEZ,IAAI,GAAG,EAAE,CAAC;gBACR,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,4CAA4C,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;YAErC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAE/C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM;YACR,CAAC;YAED,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;QAED,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,GAAG,CACd,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;YACxD,MAAM,OAAO,GAAY,EAAE,OAAO,EAAE,CAAC;YAErC,MAAM,gBAAgB,GAAG,IAAA,uBAAW,EAAC,eAAe,CAAC,CAAC;YACtD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YAC9C,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;YAChC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IAeG,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAA,8BAAqB,EAC9D,WAAW,EACX,WAAY,CACb,CAAC;QAOF,MAAM,OAAO,GAAG,GAAmB,EAAE,CACnC,eAAM,CAAC,YAAY,CACjB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAC5C,YAAqB,CACtB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,GAAmB,EAAE,CAC5C,eAAM,CAAC,YAAY,CACjB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EACvC,iBAA0B,CAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnB,MAAM,UAAU,GACd,YAAY,KAAK,yBAAyB;YAC1C,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC;YAC7C,CAAC,CAAC,gBAAgB,EAAE;YACpB,CAAC,CAAC,OAAO,EAAE,CAAC;QAEhB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;QACzD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC;QACZ,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAkB;YACzB,WAAW,EAAE,YAAY;YACzB,QAAQ;SACT,CAAC;QACF,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;YACrC,0DAA0D;YAC1D,GAAG,CAAC,UAAU,GAAG,gBAAgB,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,CAAC,IAAA,yBAAgB,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtD,iCAAiC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CACjC,YAAY,EACZ,gBAAgB,EAChB,SAAS,CACV,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,oBAAW,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,oBAAW,CAAC,CAAC;YACnC,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,qBAAY,EAAE,CAAC;gBACjC,IAAI,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACrC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC9B,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,sBAAa,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,sBAAa,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;;AA1hCH,4CA2hCC;AA36BO;IATL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,+BAA+B;QAC1C,GAAG,EAAE,CACH,YAAoB,EACpB,gBAAwB,EACxB,YAAoB,EACpB,EAAE,CAAC,GAAG,YAAY,IAAI,gBAAgB,IAAI,YAAY,EAAE;QAC1D,UAAU,EAAE,IAAI,GAAG,EAAE;KACtB,CAAC;sDAmCD;AAWK;IATL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,+BAA+B;QAC1C,GAAG,EAAE,CACH,YAAoB,EACpB,gBAAwB,EACxB,YAAoB,EACpB,EAAE,CAAC,GAAG,YAAY,IAAI,gBAAgB,IAAI,YAAY,EAAE;QAC1D,UAAU,EAAE,IAAI,GAAG,EAAE;KACtB,CAAC;qDAmCD;AAwFK;IATL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,gCAAgC;QAC3C,GAAG,EAAE,CACH,YAAoB,EACpB,gBAAwB,EACxB,aAAqB,EACrB,EAAE,CAAC,GAAG,YAAY,IAAI,gBAAgB,IAAI,aAAa,EAAE;QAC3D,UAAU,EAAE,IAAI,GAAG,EAAE;KACtB,CAAC;4DAqFD;AAcK;IANL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,0BAA0B;QACrC,GAAG,EAAE,CAAC,YAAoB,EAAE,gBAAwB,EAAE,GAAW,EAAE,EAAE,CACnE,GAAG,YAAY,IAAI,gBAAgB,IAAI,GAAG,EAAE;QAC9C,UAAU,EAAE,EAAE,GAAG,EAAE;KACpB,CAAC;iDA6JD;AAyGK;IALL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,wBAAwB;QACnC,GAAG,EAAE,CAAC,YAAoB,EAAE,gBAAwB,EAAE,EAAE,CACtD,GAAG,YAAY,IAAI,gBAAgB,EAAE;KACxC,CAAC;+CA2ED;AA0Bc;IAfd,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,0BAA0B;QACrC,GAAG,EAAE,CACH,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAgB,EACzD,QAAiB,EACjB,EAAE;YACF,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC;YACpC,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAA,8BAAqB,EAC9D,WAAW,EACX,WAAY,CACb,CAAC;YACF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,YAAY,IAAI,gBAAgB,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;QAClE,CAAC;KACF,CAAC;iDA4JD;AAMK;IAJL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,4BAA4B;QACvC,GAAG,EAAE,CAAC,gBAAwB,EAAE,EAAE,CAAC,GAAG,gBAAgB,EAAE;KACzD,CAAC;wDAgDD;AA2BK;IAdL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,+BAA+B;QAC1C,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAqB,EAAE,EAAE;YACvD,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAA,8BAAqB,EAC9D,WAAW,EACX,WAAY,CACb,CAAC;YACF,OAAO,GAAG,YAAY,IAAI,gBAAgB,EAAE,CAAC;QAC/C,CAAC;QACD,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAqB,EAAE,EAAE;YAC7D,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,8BAAqB,EAAC,WAAW,EAAE,WAAY,CAAC,CAAC;YAC1E,OAAO,YAAY,KAAK,yBAAyB,CAAC;QACpD,CAAC;KACF,CAAC;mDA8ED","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { PAGE_NOT_FOUND_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { HttpError } from '../../../util/http';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { hasKey } from '../../../util/object';\nimport { regEx } from '../../../util/regex';\nimport { type AsyncResult, Result } from '../../../util/result';\nimport { isDockerDigest } from '../../../util/string-match';\nimport { asTimestamp } from '../../../util/timestamp';\nimport {\n ensurePathPrefix,\n joinUrlParts,\n parseLinkHeader,\n} from '../../../util/url';\nimport { id as dockerVersioningId } from '../../versioning/docker';\nimport { Datasource } from '../datasource';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport { isArtifactoryServer } from '../util';\nimport {\n DOCKER_HUB,\n dockerDatasourceId,\n extractDigestFromResponseBody,\n findHelmSourceUrl,\n findLatestStable,\n getAuthHeaders,\n getRegistryRepository,\n gitRefLabel,\n imageUrlLabel,\n isDockerHost,\n sourceLabel,\n sourceLabels,\n} from './common';\nimport { DockerHubCache } from './dockerhub-cache';\nimport { ecrPublicRegex, ecrRegex, isECRMaxResultsError } from './ecr';\nimport type { DistributionManifest, OciImageManifest } from './schema';\nimport {\n DockerHubTagsPage,\n ManifestJson,\n OciHelmConfig,\n OciImageConfig,\n} from './schema';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} Docker tag',\n commitMessageExtra:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}',\n digest: {\n branchTopic: '{{{depNameSanitized}}}-{{{currentValue}}}',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic:\n '{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n commitMessageExtra: '',\n },\n },\n pin: {\n commitMessageExtra: '',\n groupName: 'Docker digests',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n branchTopic: 'digests-pin',\n },\n },\n};\n\nexport class DockerDatasource extends Datasource {\n static readonly id = dockerDatasourceId;\n\n override readonly defaultVersioning = dockerVersioningId;\n\n override readonly defaultRegistryUrls = [DOCKER_HUB];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `tag_last_pushed` field in thre results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';\n\n constructor() {\n super(DockerDatasource.id);\n }\n\n // TODO: debug why quay throws errors (#9612)\n private async getManifestResponse(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n mode: 'head' | 'getText' = 'getText',\n ): Promise<HttpResponse | null> {\n logger.debug(\n `getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`,\n );\n try {\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return null;\n }\n headers.accept = [\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n 'application/vnd.docker.distribution.manifest.v2+json',\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ].join(', ');\n const url = `${registryHost}/v2/${dockerRepository}/manifests/${tag}`;\n const manifestResponse = await this.http[mode](url, {\n headers,\n noAuth: true,\n });\n return manifestResponse;\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 404) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Docker Manifest is unknown',\n );\n return null;\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.code === 'ETIMEDOUT') {\n logger.debug(\n { registryHost },\n 'Timeout when attempting to connect to docker registry',\n );\n logger.debug({ err });\n return null;\n }\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Unknown Error looking up docker manifest',\n );\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciImageConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n // istanbul ignore if: Should never happen\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciImageConfig,\n );\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getHelmConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciHelmConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n // istanbul ignore if: Should never happen\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciHelmConfig,\n );\n }\n\n private async getConfigDigest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<string | null> {\n return (\n (await this.getManifest(registry, dockerRepository, tag))?.config\n ?.digest ?? null\n );\n }\n\n private async getManifest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<OciImageManifest | DistributionManifest | null> {\n const manifestResponse = await this.getManifestResponse(\n registry,\n dockerRepository,\n tag,\n );\n\n // If getting the manifest fails here, then abort\n // This means that the latest tag doesn't have a manifest, which shouldn't\n // be possible\n // istanbul ignore if\n if (!manifestResponse) {\n return null;\n }\n\n // Softfail on invalid manifests\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n if (!parsed.success) {\n logger.debug(\n {\n registry,\n dockerRepository,\n tag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Invalid manifest response',\n );\n return null;\n }\n\n const manifest = parsed.data;\n\n switch (manifest.mediaType) {\n case 'application/vnd.docker.distribution.manifest.v2+json':\n case 'application/vnd.oci.image.manifest.v1+json':\n return manifest;\n case 'application/vnd.docker.distribution.manifest.list.v2+json':\n case 'application/vnd.oci.image.index.v1+json':\n if (!manifest.manifests.length) {\n logger.debug(\n { manifest },\n 'Invalid manifest list with no manifests - returning',\n );\n return null;\n }\n logger.trace(\n { registry, dockerRepository, tag },\n 'Found manifest list, using first image',\n );\n return this.getManifest(\n registry,\n dockerRepository,\n manifest.manifests[0].digest,\n );\n // istanbul ignore next: can't happen\n default:\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-architecture',\n key: (\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ) => `${registryHost}:${dockerRepository}@${currentDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageArchitecture(\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ): Promise<string | null | undefined> {\n try {\n let manifestResponse: HttpResponse<string> | null;\n\n try {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n currentDigest,\n 'head',\n );\n } catch (_err) {\n const err =\n _err instanceof ExternalHostError\n ? _err.err\n : /* istanbul ignore next: can never happen */ _err;\n\n if (\n typeof err.statusCode === 'number' &&\n err.statusCode >= 500 &&\n err.statusCode < 600\n ) {\n // querying the digest manifest for a non existent image leads to a 500 statusCode\n return null;\n }\n\n /* istanbul ignore next */\n throw _err;\n }\n\n if (\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.docker.distribution.manifest.v2+json' &&\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.oci.image.manifest.v1+json'\n ) {\n return null;\n }\n\n const configDigest = await this.getConfigDigest(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n if (!configDigest) {\n return null;\n }\n\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n configDigest,\n );\n\n // TODO: fix me, architecture is required in spec\n if (\n configResponse &&\n ('config' in configResponse.body ||\n 'architecture' in configResponse.body)\n ) {\n const architecture = configResponse.body.architecture ?? null;\n logger.debug(\n `Current digest ${currentDigest} relates to architecture ${\n architecture ?? 'null'\n }`,\n );\n\n return architecture;\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode !== 404 || err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n logger.debug(\n { registryHost, dockerRepository, currentDigest, err },\n 'Unknown error getting image architecture',\n );\n }\n\n return undefined;\n }\n\n /*\n * docker.getLabels\n *\n * This function will:\n * - Return the labels for the requested image\n */\n @cache({\n namespace: 'datasource-docker-labels',\n key: (registryHost: string, dockerRepository: string, tag: string) =>\n `${registryHost}:${dockerRepository}:${tag}`,\n ttlMinutes: 24 * 60,\n })\n async getLabels(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n ): Promise<Record<string, string> | undefined> {\n logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);\n // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set\n if (\n process.env.RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&\n registryHost === 'https://index.docker.io'\n ) {\n logger.debug(\n 'Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP',\n );\n return {};\n }\n // Docker Hub library images don't have labels we need\n if (\n registryHost === 'https://index.docker.io' &&\n dockerRepository.startsWith('library/')\n ) {\n logger.debug('Docker Hub library image - skipping label lookup');\n return {};\n }\n try {\n let labels: Record<string, string> | undefined = {};\n const manifest = await this.getManifest(\n registryHost,\n dockerRepository,\n tag,\n );\n\n if (!manifest) {\n logger.debug(\n { registryHost, dockerRepository, tag },\n 'No manifest found',\n );\n return undefined;\n }\n\n if ('annotations' in manifest && manifest.annotations) {\n labels = manifest.annotations;\n }\n\n switch (manifest.config.mediaType) {\n case 'application/vnd.cncf.helm.config.v1+json': {\n if (labels[sourceLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getHelmConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n if (configResponse) {\n // Helm chart\n const url = findHelmSourceUrl(configResponse.body);\n if (url) {\n labels[sourceLabel] = url;\n }\n }\n break;\n }\n case 'application/vnd.oci.image.config.v1+json':\n case 'application/vnd.docker.container.image.v1+json': {\n if (labels[sourceLabel] && labels[gitRefLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n // istanbul ignore if: should never happen\n if (!configResponse) {\n return labels;\n }\n\n const body = configResponse.body;\n if (body.config) {\n labels = { ...labels, ...body.config.Labels };\n } else {\n logger.debug(\n { headers: configResponse.headers, body },\n `manifest blob response body missing the \"config\" property`,\n );\n }\n break;\n }\n }\n\n if (labels) {\n logger.debug(\n {\n labels,\n },\n 'found labels in manifest',\n );\n }\n return labels;\n } catch (err) /* istanbul ignore next: should be tested in future */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 400 || err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository, err },\n 'Unauthorized docker lookup',\n );\n } else if (err.statusCode === 404) {\n logger.warn(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Config Manifest is unknown',\n );\n } else if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn({ err }, 'docker registry failure: too many requests');\n } else if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'docker registry failure: internal error',\n );\n } else if (\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ETIMEDOUT'\n ) {\n logger.debug(\n { registryHost, err },\n 'Error connecting to docker registry',\n );\n } else if (registryHost === 'https://quay.io') {\n // istanbul ignore next\n logger.debug(\n 'Ignoring quay.io errors until they fully support v2 schema',\n );\n } else {\n logger.info(\n { registryHost, dockerRepository, tag, err },\n 'Unknown error getting Docker labels',\n );\n }\n return {};\n }\n }\n\n private async getTagsQuayRegistry(\n registry: string,\n repository: string,\n ): Promise<string[]> {\n let tags: string[] = [];\n const limit = 100;\n\n const pageUrl = (page: number): string =>\n `${registry}/api/v1/repository/${repository}/tag/?limit=${limit}&page=${page}&onlyActiveTags=true`;\n\n let page = 1;\n let url: string | null = pageUrl(page);\n while (url && page <= 20) {\n interface QuayRestDockerTags {\n tags: {\n name: string;\n }[];\n has_additional: boolean;\n }\n\n // typescript issue :-/\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const res = (await this.http.getJsonUnchecked<QuayRestDockerTags>(\n url,\n )) as HttpResponse<QuayRestDockerTags>;\n const pageTags = res.body.tags.map((tag) => tag.name);\n tags = tags.concat(pageTags);\n page += 1;\n url = res.body.has_additional ? pageUrl(page) : null;\n }\n return tags;\n }\n\n private async getDockerApiTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n let tags: string[] = [];\n // AWS ECR limits the maximum number of results to 1000\n // See https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n // See https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_DescribeRepositories.html#ecrpublic-DescribeRepositories-request-maxResults\n const limit =\n ecrRegex.test(registryHost) || ecrPublicRegex.test(registryHost)\n ? 1000\n : 10000;\n let url: string | null =\n `${registryHost}/${dockerRepository}/tags/list?n=${limit}`;\n url = ensurePathPrefix(url, '/v2');\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n url,\n );\n if (!headers) {\n logger.debug('Failed to get authHeaders for getTags lookup');\n return null;\n }\n let page = 0;\n const pages = GlobalConfig.get('dockerMaxPages', 20);\n let foundMaxResultsError = false;\n do {\n let res: HttpResponse<{ tags: string[] }>;\n try {\n res = await this.http.getJsonUnchecked<{ tags: string[] }>(url, {\n headers,\n noAuth: true,\n });\n } catch (err) {\n if (\n !foundMaxResultsError &&\n err instanceof HttpError &&\n isECRMaxResultsError(err)\n ) {\n const maxResults = 1000;\n url = `${registryHost}/${dockerRepository}/tags/list?n=${maxResults}`;\n url = ensurePathPrefix(url, '/v2');\n foundMaxResultsError = true;\n continue;\n }\n throw err;\n }\n tags = tags.concat(res.body.tags);\n const linkHeader = parseLinkHeader(res.headers.link);\n if (isArtifactoryServer(res)) {\n // Artifactory incorrectly returns a next link without the virtual repository name\n // this is due to a bug in Artifactory https://jfrog.atlassian.net/browse/RTFACT-18971\n url = linkHeader?.next?.last\n ? `${url}&last=${linkHeader.next.last}`\n : null;\n } else {\n url = linkHeader?.next ? new URL(linkHeader.next.url, url).href : null;\n }\n page += 1;\n } while (url && page < pages);\n return tags;\n }\n\n @cache({\n namespace: 'datasource-docker-tags',\n key: (registryHost: string, dockerRepository: string) =>\n `${registryHost}:${dockerRepository}`,\n })\n async getTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n try {\n const isQuay = regEx(/^https:\\/\\/quay\\.io(?::[1-9][0-9]{0,4})?$/i).test(\n registryHost,\n );\n let tags: string[] | null;\n if (isQuay) {\n tags = await this.getTagsQuayRegistry(registryHost, dockerRepository);\n } else {\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n }\n return tags;\n } catch (_err) /* istanbul ignore next */ {\n const err = _err instanceof ExternalHostError ? _err.err : _err;\n\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n !dockerRepository.includes('/')\n ) {\n logger.debug(\n `Retrying Tags for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getTags(registryHost, 'library/' + dockerRepository);\n }\n // JFrog Artifactory - Retry handling when resolving Docker Official Images\n // These follow the format of {{registryHost}}{{jFrogRepository}}/library/{{dockerRepository}}\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n isArtifactoryServer(err.response) &&\n dockerRepository.split('/').length === 2\n ) {\n logger.debug(\n `JFrog Artifactory: Retrying Tags for ${registryHost}/${dockerRepository} using library/ path between JFrog virtual repository and image`,\n );\n\n const dockerRepositoryParts = dockerRepository.split('/');\n const jfrogRepository = dockerRepositoryParts[0];\n const dockerImage = dockerRepositoryParts[1];\n\n return this.getTags(\n registryHost,\n jfrogRepository + '/library/' + dockerImage,\n );\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: too many requests',\n );\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: internal error',\n );\n throw new ExternalHostError(err);\n }\n const errorCodes = ['ECONNRESET', 'ETIMEDOUT'];\n if (errorCodes.includes(err.code)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry connection failure',\n );\n throw new ExternalHostError(err);\n }\n if (isDockerHost(registryHost)) {\n logger.info({ err }, 'Docker Hub lookup failure');\n }\n throw _err;\n }\n }\n\n /**\n * docker.getDigest\n *\n * The `newValue` supplied here should be a valid tag for the docker image.\n *\n * This function will:\n * - Look up a sha256 digest for a tag on its registry\n * - Return the digest as a string\n */\n @cache({\n namespace: 'datasource-docker-digest',\n key: (\n { registryUrl, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ) => {\n const newTag = newValue ?? 'latest';\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n const digest = currentDigest ? `@${currentDigest}` : '';\n return `${registryHost}:${dockerRepository}:${newTag}${digest}`;\n },\n })\n override async getDigest(\n { registryUrl, lookupName, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n let registryHost: string;\n let dockerRepository: string;\n if (registryUrl && lookupName) {\n // Reuse the resolved values from getReleases()\n registryHost = registryUrl;\n dockerRepository = lookupName;\n } else {\n // Resolve values independently\n ({ registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n ));\n }\n logger.debug(\n // TODO: types (#22198)\n `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`,\n );\n const newTag = is.nonEmptyString(newValue) ? newValue : 'latest';\n let digest: string | null = null;\n try {\n let architecture: string | null | undefined = null;\n if (currentDigest && isDockerDigest(currentDigest)) {\n architecture = await this.getImageArchitecture(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n }\n\n let manifestResponse: HttpResponse | null = null;\n if (!architecture) {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n 'head',\n );\n\n if (\n manifestResponse &&\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n digest =\n (manifestResponse.headers['docker-content-digest'] as string) ||\n null;\n }\n }\n\n if (\n is.string(architecture) ||\n (manifestResponse &&\n !hasKey('docker-content-digest', manifestResponse.headers))\n ) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Architecture-specific digest or missing docker-content-digest header - pulling full manifest',\n );\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n );\n\n if (architecture && manifestResponse) {\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n /* istanbul ignore else: hard to test */\n if (parsed.success) {\n const manifestList = parsed.data;\n if (\n manifestList.mediaType ===\n 'application/vnd.docker.distribution.manifest.list.v2+json' ||\n manifestList.mediaType ===\n 'application/vnd.oci.image.index.v1+json'\n ) {\n for (const manifest of manifestList.manifests) {\n if (manifest.platform?.architecture === architecture) {\n digest = manifest.digest;\n break;\n }\n }\n // TODO: return null if no matching architecture digest found\n // https://github.com/renovatebot/renovate/discussions/22639\n } else if (\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n // TODO: return null if no matching architecture, requires to fetch the config manifest\n // https://github.com/renovatebot/renovate/discussions/22639\n digest = manifestResponse.headers[\n 'docker-content-digest'\n ] as string;\n }\n } else {\n logger.debug(\n {\n registryHost,\n dockerRepository,\n newTag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Failed to parse manifest response',\n );\n }\n }\n\n if (!digest) {\n logger.debug(\n { registryHost, dockerRepository, newTag },\n 'Extraction digest from manifest response body is deprecated',\n );\n digest = extractDigestFromResponseBody(manifestResponse!);\n }\n }\n\n if (\n !manifestResponse &&\n !dockerRepository.includes('/') &&\n !packageName.includes('/')\n ) {\n logger.debug(\n `Retrying Digest for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getDigest(\n {\n registryUrl,\n packageName: 'library/' + packageName,\n currentDigest,\n },\n newValue,\n );\n }\n\n if (manifestResponse) {\n // TODO: fix types (#22198)\n logger.debug(`Got docker digest ${digest!}`);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n {\n err,\n packageName,\n newTag,\n },\n 'Unknown Error looking up docker image digest',\n );\n }\n return digest;\n }\n\n @cache({\n namespace: 'datasource-docker-hub-tags',\n key: (dockerRepository: string) => `${dockerRepository}`,\n })\n async getDockerHubTags(dockerRepository: string): Promise<Release[] | null> {\n let url = `https://hub.docker.com/v2/repositories/${dockerRepository}/tags?page_size=1000&ordering=last_updated`;\n\n const cache = await DockerHubCache.init(dockerRepository);\n const maxPages = GlobalConfig.get('dockerMaxPages', 20);\n let page = 0,\n needNextPage = true;\n while (needNextPage && page < maxPages) {\n const { val, err } = await this.http\n .getJsonSafe(url, DockerHubTagsPage)\n .unwrap();\n\n if (err) {\n logger.debug({ err }, `Docker: error fetching data from DockerHub`);\n return null;\n }\n page++;\n const { results, next, count } = val;\n\n needNextPage = cache.reconcile(results, count);\n\n if (!next) {\n break;\n }\n\n url = next;\n }\n\n await cache.save();\n\n const items = cache.getItems();\n return items.map(\n ({ name: version, tag_last_pushed, digest: newDigest }) => {\n const release: Release = { version };\n\n const releaseTimestamp = asTimestamp(tag_last_pushed);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n\n if (newDigest) {\n release.newDigest = newDigest;\n }\n\n return release;\n },\n );\n }\n\n /**\n * docker.getReleases\n *\n * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine\n * In the above:\n * - 'somehost.io' is the registry\n * - 'owner/repo' is the package name\n * - '8.1.0-alpine' is the tag\n *\n * This function will filter only tags that contain a semver version\n */\n @cache({\n namespace: 'datasource-docker-releases-v2',\n key: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n return `${registryHost}:${dockerRepository}`;\n },\n cacheable: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost } = getRegistryRepository(packageName, registryUrl!);\n return registryHost === 'https://index.docker.io';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n\n type TagsResultType = AsyncResult<\n Release[],\n NonNullable<Error | 'tags-error' | 'dockerhub-error'>\n >;\n\n const getTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getTags(registryHost, dockerRepository),\n 'tags-error' as const,\n ).transform((tags) => tags.map((version) => ({ version })));\n\n const getDockerHubTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getDockerHubTags(dockerRepository),\n 'dockerhub-error' as const,\n ).catch(getTags);\n\n const tagsResult =\n registryHost === 'https://index.docker.io' &&\n !process.env.RENOVATE_X_DOCKER_HUB_TAGS_DISABLE\n ? getDockerHubTags()\n : getTags();\n\n const { val: releases, err } = await tagsResult.unwrap();\n if (err instanceof Error) {\n throw err;\n } else if (err) {\n return null;\n }\n\n const ret: ReleaseResult = {\n registryUrl: registryHost,\n releases,\n };\n if (dockerRepository !== packageName) {\n // This will be reused later if a getDigest() call is made\n ret.lookupName = dockerRepository;\n }\n\n const tags = releases.map((release) => release.version);\n const latestTag = tags.includes('latest')\n ? 'latest'\n : (findLatestStable(tags) ?? tags[tags.length - 1]);\n\n // istanbul ignore if: needs test\n if (!latestTag) {\n return ret;\n }\n const labels = await this.getLabels(\n registryHost,\n dockerRepository,\n latestTag,\n );\n if (labels) {\n if (is.nonEmptyString(labels[gitRefLabel])) {\n ret.gitRef = labels[gitRefLabel];\n }\n for (const label of sourceLabels) {\n if (is.nonEmptyString(labels[label])) {\n ret.sourceUrl = labels[label];\n break;\n }\n }\n if (is.nonEmptyString(labels[imageUrlLabel])) {\n ret.homepage = labels[imageUrlLabel];\n }\n }\n return ret;\n }\n}\n"]}
@@ -149,17 +149,17 @@ export declare const OciImageIndexManifest: z.ZodObject<z.objectUtil.extendShape
149
149
  }>, "strip", z.ZodTypeAny, {
150
150
  digest: string;
151
151
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
152
+ size?: number | null | undefined;
152
153
  platform?: {
153
154
  architecture?: string | null | undefined;
154
155
  } | null | undefined;
155
- size?: number | null | undefined;
156
156
  }, {
157
157
  digest: string;
158
158
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
159
+ size?: number | null | undefined;
159
160
  platform?: {
160
161
  architecture?: string | null | undefined;
161
162
  } | null | undefined;
162
- size?: number | null | undefined;
163
163
  }>, "many">;
164
164
  annotations: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
165
165
  }>, "strip", z.ZodTypeAny, {
@@ -168,10 +168,10 @@ export declare const OciImageIndexManifest: z.ZodObject<z.objectUtil.extendShape
168
168
  manifests: {
169
169
  digest: string;
170
170
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
171
+ size?: number | null | undefined;
171
172
  platform?: {
172
173
  architecture?: string | null | undefined;
173
174
  } | null | undefined;
174
- size?: number | null | undefined;
175
175
  }[];
176
176
  annotations?: Record<string, string> | null | undefined;
177
177
  }, {
@@ -180,10 +180,10 @@ export declare const OciImageIndexManifest: z.ZodObject<z.objectUtil.extendShape
180
180
  manifests: {
181
181
  digest: string;
182
182
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
183
+ size?: number | null | undefined;
183
184
  platform?: {
184
185
  architecture?: string | null | undefined;
185
186
  } | null | undefined;
186
- size?: number | null | undefined;
187
187
  }[];
188
188
  annotations?: Record<string, string> | null | undefined;
189
189
  }>;
@@ -254,17 +254,17 @@ export declare const DistributionListManifest: z.ZodObject<z.objectUtil.extendSh
254
254
  }>, "strip", z.ZodTypeAny, {
255
255
  digest: string;
256
256
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
257
+ size?: number | null | undefined;
257
258
  platform?: {
258
259
  architecture?: string | null | undefined;
259
260
  } | null | undefined;
260
- size?: number | null | undefined;
261
261
  }, {
262
262
  digest: string;
263
263
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
264
+ size?: number | null | undefined;
264
265
  platform?: {
265
266
  architecture?: string | null | undefined;
266
267
  } | null | undefined;
267
- size?: number | null | undefined;
268
268
  }>, "many">;
269
269
  }>, "strip", z.ZodTypeAny, {
270
270
  schemaVersion: 2;
@@ -272,10 +272,10 @@ export declare const DistributionListManifest: z.ZodObject<z.objectUtil.extendSh
272
272
  manifests: {
273
273
  digest: string;
274
274
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
275
+ size?: number | null | undefined;
275
276
  platform?: {
276
277
  architecture?: string | null | undefined;
277
278
  } | null | undefined;
278
- size?: number | null | undefined;
279
279
  }[];
280
280
  }, {
281
281
  schemaVersion: 2;
@@ -283,10 +283,10 @@ export declare const DistributionListManifest: z.ZodObject<z.objectUtil.extendSh
283
283
  manifests: {
284
284
  digest: string;
285
285
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
286
+ size?: number | null | undefined;
286
287
  platform?: {
287
288
  architecture?: string | null | undefined;
288
289
  } | null | undefined;
289
- size?: number | null | undefined;
290
290
  }[];
291
291
  }>;
292
292
  export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
@@ -361,17 +361,17 @@ export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
361
361
  }>, "strip", z.ZodTypeAny, {
362
362
  digest: string;
363
363
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
364
+ size?: number | null | undefined;
364
365
  platform?: {
365
366
  architecture?: string | null | undefined;
366
367
  } | null | undefined;
367
- size?: number | null | undefined;
368
368
  }, {
369
369
  digest: string;
370
370
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
371
+ size?: number | null | undefined;
371
372
  platform?: {
372
373
  architecture?: string | null | undefined;
373
374
  } | null | undefined;
374
- size?: number | null | undefined;
375
375
  }>, "many">;
376
376
  }>, "strip", z.ZodTypeAny, {
377
377
  schemaVersion: 2;
@@ -379,10 +379,10 @@ export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
379
379
  manifests: {
380
380
  digest: string;
381
381
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
382
+ size?: number | null | undefined;
382
383
  platform?: {
383
384
  architecture?: string | null | undefined;
384
385
  } | null | undefined;
385
- size?: number | null | undefined;
386
386
  }[];
387
387
  }, {
388
388
  schemaVersion: 2;
@@ -390,10 +390,10 @@ export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
390
390
  manifests: {
391
391
  digest: string;
392
392
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
393
+ size?: number | null | undefined;
393
394
  platform?: {
394
395
  architecture?: string | null | undefined;
395
396
  } | null | undefined;
396
- size?: number | null | undefined;
397
397
  }[];
398
398
  }>, z.ZodObject<z.objectUtil.extendShape<{
399
399
  schemaVersion: z.ZodLiteral<2>;
@@ -455,17 +455,17 @@ export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
455
455
  }>, "strip", z.ZodTypeAny, {
456
456
  digest: string;
457
457
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
458
+ size?: number | null | undefined;
458
459
  platform?: {
459
460
  architecture?: string | null | undefined;
460
461
  } | null | undefined;
461
- size?: number | null | undefined;
462
462
  }, {
463
463
  digest: string;
464
464
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
465
+ size?: number | null | undefined;
465
466
  platform?: {
466
467
  architecture?: string | null | undefined;
467
468
  } | null | undefined;
468
- size?: number | null | undefined;
469
469
  }>, "many">;
470
470
  annotations: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
471
471
  }>, "strip", z.ZodTypeAny, {
@@ -474,10 +474,10 @@ export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
474
474
  manifests: {
475
475
  digest: string;
476
476
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
477
+ size?: number | null | undefined;
477
478
  platform?: {
478
479
  architecture?: string | null | undefined;
479
480
  } | null | undefined;
480
- size?: number | null | undefined;
481
481
  }[];
482
482
  annotations?: Record<string, string> | null | undefined;
483
483
  }, {
@@ -486,10 +486,10 @@ export declare const Manifest: z.ZodPipeline<z.ZodEffects<z.ZodObject<{
486
486
  manifests: {
487
487
  digest: string;
488
488
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
489
+ size?: number | null | undefined;
489
490
  platform?: {
490
491
  architecture?: string | null | undefined;
491
492
  } | null | undefined;
492
- size?: number | null | undefined;
493
493
  }[];
494
494
  annotations?: Record<string, string> | null | undefined;
495
495
  }>]>>;
@@ -566,17 +566,17 @@ export declare const ManifestJson: z.ZodPipeline<z.ZodEffects<z.ZodString, strin
566
566
  }>, "strip", z.ZodTypeAny, {
567
567
  digest: string;
568
568
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
569
+ size?: number | null | undefined;
569
570
  platform?: {
570
571
  architecture?: string | null | undefined;
571
572
  } | null | undefined;
572
- size?: number | null | undefined;
573
573
  }, {
574
574
  digest: string;
575
575
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
576
+ size?: number | null | undefined;
576
577
  platform?: {
577
578
  architecture?: string | null | undefined;
578
579
  } | null | undefined;
579
- size?: number | null | undefined;
580
580
  }>, "many">;
581
581
  }>, "strip", z.ZodTypeAny, {
582
582
  schemaVersion: 2;
@@ -584,10 +584,10 @@ export declare const ManifestJson: z.ZodPipeline<z.ZodEffects<z.ZodString, strin
584
584
  manifests: {
585
585
  digest: string;
586
586
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
587
+ size?: number | null | undefined;
587
588
  platform?: {
588
589
  architecture?: string | null | undefined;
589
590
  } | null | undefined;
590
- size?: number | null | undefined;
591
591
  }[];
592
592
  }, {
593
593
  schemaVersion: 2;
@@ -595,10 +595,10 @@ export declare const ManifestJson: z.ZodPipeline<z.ZodEffects<z.ZodString, strin
595
595
  manifests: {
596
596
  digest: string;
597
597
  mediaType: "application/vnd.docker.distribution.manifest.v2+json";
598
+ size?: number | null | undefined;
598
599
  platform?: {
599
600
  architecture?: string | null | undefined;
600
601
  } | null | undefined;
601
- size?: number | null | undefined;
602
602
  }[];
603
603
  }>, z.ZodObject<z.objectUtil.extendShape<{
604
604
  schemaVersion: z.ZodLiteral<2>;
@@ -660,17 +660,17 @@ export declare const ManifestJson: z.ZodPipeline<z.ZodEffects<z.ZodString, strin
660
660
  }>, "strip", z.ZodTypeAny, {
661
661
  digest: string;
662
662
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
663
+ size?: number | null | undefined;
663
664
  platform?: {
664
665
  architecture?: string | null | undefined;
665
666
  } | null | undefined;
666
- size?: number | null | undefined;
667
667
  }, {
668
668
  digest: string;
669
669
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
670
+ size?: number | null | undefined;
670
671
  platform?: {
671
672
  architecture?: string | null | undefined;
672
673
  } | null | undefined;
673
- size?: number | null | undefined;
674
674
  }>, "many">;
675
675
  annotations: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
676
676
  }>, "strip", z.ZodTypeAny, {
@@ -679,10 +679,10 @@ export declare const ManifestJson: z.ZodPipeline<z.ZodEffects<z.ZodString, strin
679
679
  manifests: {
680
680
  digest: string;
681
681
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
682
+ size?: number | null | undefined;
682
683
  platform?: {
683
684
  architecture?: string | null | undefined;
684
685
  } | null | undefined;
685
- size?: number | null | undefined;
686
686
  }[];
687
687
  annotations?: Record<string, string> | null | undefined;
688
688
  }, {
@@ -691,10 +691,10 @@ export declare const ManifestJson: z.ZodPipeline<z.ZodEffects<z.ZodString, strin
691
691
  manifests: {
692
692
  digest: string;
693
693
  mediaType: "application/vnd.oci.image.manifest.v1+json" | "application/vnd.oci.image.index.v1+json";
694
+ size?: number | null | undefined;
694
695
  platform?: {
695
696
  architecture?: string | null | undefined;
696
697
  } | null | undefined;
697
- size?: number | null | undefined;
698
698
  }[];
699
699
  annotations?: Record<string, string> | null | undefined;
700
700
  }>]>>>;
@@ -705,14 +705,14 @@ export declare const DockerHubTag: z.ZodObject<{
705
705
  tag_last_pushed: z.ZodCatch<z.ZodNullable<z.ZodString>>;
706
706
  digest: z.ZodCatch<z.ZodNullable<z.ZodString>>;
707
707
  }, "strip", z.ZodTypeAny, {
708
- name: string;
709
- id: number;
710
708
  digest: string | null;
709
+ id: number;
710
+ name: string;
711
711
  last_updated: string;
712
712
  tag_last_pushed: string | null;
713
713
  }, {
714
- name: string;
715
714
  id: number;
715
+ name: string;
716
716
  last_updated: string;
717
717
  digest?: unknown;
718
718
  tag_last_pushed?: unknown;
@@ -722,19 +722,19 @@ export declare const DockerHubTagsPage: z.ZodObject<{
722
722
  count: z.ZodNumber;
723
723
  next: z.ZodCatch<z.ZodNullable<z.ZodString>>;
724
724
  results: z.ZodEffects<z.ZodArray<z.ZodAny, "many">, {
725
- name: string;
726
- id: number;
727
725
  digest: string | null;
726
+ id: number;
727
+ name: string;
728
728
  last_updated: string;
729
729
  tag_last_pushed: string | null;
730
730
  }[], any[]>;
731
731
  }, "strip", z.ZodTypeAny, {
732
- next: string | null;
733
732
  count: number;
733
+ next: string | null;
734
734
  results: {
735
- name: string;
736
- id: number;
737
735
  digest: string | null;
736
+ id: number;
737
+ name: string;
738
738
  last_updated: string;
739
739
  tag_last_pushed: string | null;
740
740
  }[];
@@ -7,8 +7,8 @@ export declare const GalaxyV1: z.ZodObject<{
7
7
  name: z.ZodString;
8
8
  created: z.ZodCatch<z.ZodNullable<z.ZodEffects<z.ZodUnknown, import("../../../util/timestamp").Timestamp, unknown>>>;
9
9
  }, "strip", z.ZodTypeAny, {
10
- name: string;
11
10
  created: import("../../../util/timestamp").Timestamp | null;
11
+ name: string;
12
12
  }, {
13
13
  name: string;
14
14
  created?: unknown;
@@ -76,23 +76,23 @@ export declare const GalaxyV3DetailedVersion: z.ZodEffects<z.ZodObject<{
76
76
  dependencies?: Record<string, string> | undefined;
77
77
  }>;
78
78
  }, "strip", z.ZodTypeAny, {
79
+ version: string;
79
80
  metadata: {
80
81
  repository: string;
81
82
  homepage: string;
82
83
  dependencies?: Record<string, string> | undefined;
83
84
  };
84
- version: string;
85
85
  download_url: string;
86
86
  artifact: {
87
87
  sha256: string;
88
88
  };
89
89
  }, {
90
+ version: string;
90
91
  metadata: {
91
92
  repository: string;
92
93
  homepage: string;
93
94
  dependencies?: Record<string, string> | undefined;
94
95
  };
95
- version: string;
96
96
  download_url: string;
97
97
  artifact: {
98
98
  sha256: string;
@@ -104,12 +104,12 @@ export declare const GalaxyV3DetailedVersion: z.ZodEffects<z.ZodObject<{
104
104
  dependencies: Record<string, string> | undefined;
105
105
  sourceUrl: string;
106
106
  }, {
107
+ version: string;
107
108
  metadata: {
108
109
  repository: string;
109
110
  homepage: string;
110
111
  dependencies?: Record<string, string> | undefined;
111
112
  };
112
- version: string;
113
113
  download_url: string;
114
114
  artifact: {
115
115
  sha256: string;