renovate 43.271.3 → 43.272.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,19 @@
1
+ import { logger } from "../../../logger/index.js";
1
2
  import { find } from "../../../util/host-rules.js";
3
+ import { isProbablyJwt } from "../../../util/http/jwt.js";
2
4
  import * as azure from "azure-devops-node-api";
3
- import { getBasicHandler, getHandlerFromToken } from "azure-devops-node-api";
5
+ import { getBasicHandler, getBearerHandler, getPersonalAccessTokenHandler } from "azure-devops-node-api";
4
6
  //#region lib/modules/platform/azure/azure-got-wrapper.ts
5
7
  const hostType = "azure";
6
8
  let endpoint;
7
9
  function getAuthenticationHandler(config) {
8
10
  if (!config.token && config.username && config.password) return getBasicHandler(config.username, config.password, true);
9
- return getHandlerFromToken(config.token, true);
11
+ if (config.token && isProbablyJwt(config.token)) {
12
+ logger.debug("Using Bearer authentication (JWT detected)");
13
+ return getBearerHandler(config.token, true);
14
+ }
15
+ logger.debug("Using PAT authentication");
16
+ return getPersonalAccessTokenHandler(config.token, true);
10
17
  }
11
18
  function azureObj() {
12
19
  const config = find({
@@ -1 +1 @@
1
- {"version":3,"file":"azure-got-wrapper.js","names":["hostRules.find"],"sources":["../../../../lib/modules/platform/azure/azure-got-wrapper.ts"],"sourcesContent":["import * as azure from 'azure-devops-node-api';\nimport { getBasicHandler, getHandlerFromToken } from 'azure-devops-node-api';\nimport type { ICoreApi } from 'azure-devops-node-api/CoreApi.js';\nimport type { IGitApi } from 'azure-devops-node-api/GitApi.js';\nimport type { IRequestHandler } from 'azure-devops-node-api/interfaces/common/VsoBaseInterfaces.js';\nimport type { IPolicyApi } from 'azure-devops-node-api/PolicyApi.js';\nimport type { IWorkItemTrackingApi } from 'azure-devops-node-api/WorkItemTrackingApi.js';\nimport type { HostRule } from '../../../types/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\n\nconst hostType = 'azure';\nlet endpoint: string;\n\nfunction getAuthenticationHandler(config: HostRule): IRequestHandler {\n if (!config.token && config.username && config.password) {\n return getBasicHandler(config.username, config.password, true);\n }\n // TODO: token can be undefined here (#22198)\n return getHandlerFromToken(config.token!, true);\n}\n\nexport function azureObj(): azure.WebApi {\n const config = hostRules.find({ hostType, url: endpoint });\n if (!config.token && !(config.username && config.password)) {\n throw new Error(`No config found for azure`);\n }\n const authHandler = getAuthenticationHandler(config);\n return new azure.WebApi(endpoint, authHandler, {\n allowRetries: true,\n maxRetries: 2,\n });\n}\n\nexport function gitApi(): Promise<IGitApi> {\n return azureObj().getGitApi();\n}\n\nexport function coreApi(): Promise<ICoreApi> {\n return azureObj().getCoreApi();\n}\n\nexport function policyApi(): Promise<IPolicyApi> {\n return azureObj().getPolicyApi();\n}\n\nexport function workItemTrackingApi(): Promise<IWorkItemTrackingApi> {\n return azureObj().getWorkItemTrackingApi();\n}\n\nexport function setEndpoint(e: string): void {\n endpoint = e;\n}\n"],"mappings":";;;;AAUA,MAAM,WAAW;AACjB,IAAI;AAEJ,SAAS,yBAAyB,QAAmC;CACnE,IAAI,CAAC,OAAO,SAAS,OAAO,YAAY,OAAO,UAC7C,OAAO,gBAAgB,OAAO,UAAU,OAAO,UAAU,IAAI;CAG/D,OAAO,oBAAoB,OAAO,OAAQ,IAAI;AAChD;AAEA,SAAgB,WAAyB;CACvC,MAAM,SAASA,KAAe;EAAE;EAAU,KAAK;CAAS,CAAC;CACzD,IAAI,CAAC,OAAO,SAAS,EAAE,OAAO,YAAY,OAAO,WAC/C,MAAM,IAAI,MAAM,2BAA2B;CAE7C,MAAM,cAAc,yBAAyB,MAAM;CACnD,OAAO,IAAI,MAAM,OAAO,UAAU,aAAa;EAC7C,cAAc;EACd,YAAY;CACd,CAAC;AACH;AAEA,SAAgB,SAA2B;CACzC,OAAO,SAAS,CAAC,CAAC,UAAU;AAC9B;AAEA,SAAgB,UAA6B;CAC3C,OAAO,SAAS,CAAC,CAAC,WAAW;AAC/B;AAEA,SAAgB,YAAiC;CAC/C,OAAO,SAAS,CAAC,CAAC,aAAa;AACjC;AAEA,SAAgB,sBAAqD;CACnE,OAAO,SAAS,CAAC,CAAC,uBAAuB;AAC3C;AAEA,SAAgB,YAAY,GAAiB;CAC3C,WAAW;AACb"}
1
+ {"version":3,"file":"azure-got-wrapper.js","names":["hostRules.find"],"sources":["../../../../lib/modules/platform/azure/azure-got-wrapper.ts"],"sourcesContent":["import * as azure from 'azure-devops-node-api';\nimport {\n getBasicHandler,\n getBearerHandler,\n getPersonalAccessTokenHandler,\n} from 'azure-devops-node-api';\nimport type { ICoreApi } from 'azure-devops-node-api/CoreApi.js';\nimport type { IGitApi } from 'azure-devops-node-api/GitApi.js';\nimport type { IRequestHandler } from 'azure-devops-node-api/interfaces/common/VsoBaseInterfaces.js';\nimport type { IPolicyApi } from 'azure-devops-node-api/PolicyApi.js';\nimport type { IWorkItemTrackingApi } from 'azure-devops-node-api/WorkItemTrackingApi.js';\nimport { logger } from '../../../logger/index.ts';\nimport type { HostRule } from '../../../types/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { isProbablyJwt } from '../../../util/http/jwt.ts';\n\nconst hostType = 'azure';\nlet endpoint: string;\n\nfunction getAuthenticationHandler(config: HostRule): IRequestHandler {\n if (!config.token && config.username && config.password) {\n return getBasicHandler(config.username, config.password, true);\n }\n if (config.token && isProbablyJwt(config.token)) {\n logger.debug('Using Bearer authentication (JWT detected)');\n return getBearerHandler(config.token, true);\n }\n logger.debug('Using PAT authentication');\n // TODO: token can be undefined here (#22198)\n return getPersonalAccessTokenHandler(config.token!, true);\n}\n\nexport function azureObj(): azure.WebApi {\n const config = hostRules.find({ hostType, url: endpoint });\n if (!config.token && !(config.username && config.password)) {\n throw new Error(`No config found for azure`);\n }\n const authHandler = getAuthenticationHandler(config);\n return new azure.WebApi(endpoint, authHandler, {\n allowRetries: true,\n maxRetries: 2,\n });\n}\n\nexport function gitApi(): Promise<IGitApi> {\n return azureObj().getGitApi();\n}\n\nexport function coreApi(): Promise<ICoreApi> {\n return azureObj().getCoreApi();\n}\n\nexport function policyApi(): Promise<IPolicyApi> {\n return azureObj().getPolicyApi();\n}\n\nexport function workItemTrackingApi(): Promise<IWorkItemTrackingApi> {\n return azureObj().getWorkItemTrackingApi();\n}\n\nexport function setEndpoint(e: string): void {\n endpoint = e;\n}\n"],"mappings":";;;;;;AAgBA,MAAM,WAAW;AACjB,IAAI;AAEJ,SAAS,yBAAyB,QAAmC;CACnE,IAAI,CAAC,OAAO,SAAS,OAAO,YAAY,OAAO,UAC7C,OAAO,gBAAgB,OAAO,UAAU,OAAO,UAAU,IAAI;CAE/D,IAAI,OAAO,SAAS,cAAc,OAAO,KAAK,GAAG;EAC/C,OAAO,MAAM,4CAA4C;EACzD,OAAO,iBAAiB,OAAO,OAAO,IAAI;CAC5C;CACA,OAAO,MAAM,0BAA0B;CAEvC,OAAO,8BAA8B,OAAO,OAAQ,IAAI;AAC1D;AAEA,SAAgB,WAAyB;CACvC,MAAM,SAASA,KAAe;EAAE;EAAU,KAAK;CAAS,CAAC;CACzD,IAAI,CAAC,OAAO,SAAS,EAAE,OAAO,YAAY,OAAO,WAC/C,MAAM,IAAI,MAAM,2BAA2B;CAE7C,MAAM,cAAc,yBAAyB,MAAM;CACnD,OAAO,IAAI,MAAM,OAAO,UAAU,aAAa;EAC7C,cAAc;EACd,YAAY;CACd,CAAC;AACH;AAEA,SAAgB,SAA2B;CACzC,OAAO,SAAS,CAAC,CAAC,UAAU;AAC9B;AAEA,SAAgB,UAA6B;CAC3C,OAAO,SAAS,CAAC,CAAC,WAAW;AAC/B;AAEA,SAAgB,YAAiC;CAC/C,OAAO,SAAS,CAAC,CAAC,aAAa;AACjC;AAEA,SAAgB,sBAAqD;CACnE,OAAO,SAAS,CAAC,CAAC,uBAAuB;AAC3C;AAEA,SAAgB,YAAY,GAAiB;CAC3C,WAAW;AACb"}
@@ -1,6 +1,7 @@
1
1
  import { toBase64 } from "../../../util/string.js";
2
2
  import { addSecretForSanitizing } from "../../../util/sanitize.js";
3
3
  import { logger } from "../../../logger/index.js";
4
+ import { isProbablyJwt } from "../../../util/http/jwt.js";
4
5
  import { getPrBodyStruct } from "../pr-body.js";
5
6
  import { GitPullRequestMergeStrategy, PullRequestStatus } from "azure-devops-node-api/interfaces/GitInterfaces.js";
6
7
  //#region lib/modules/platform/azure/util.ts
@@ -64,12 +65,12 @@ function getStorageExtraCloneOpts(config) {
64
65
  if (!config.token && config.username && config.password) {
65
66
  authType = "basic";
66
67
  authValue = toBase64(`${config.username}:${config.password}`);
67
- } else if (config.token?.length === 52) {
68
- authType = "basic";
69
- authValue = toBase64(`:${config.token}`);
70
- } else {
68
+ } else if (config.token && isProbablyJwt(config.token)) {
71
69
  authType = "bearer";
72
70
  authValue = config.token;
71
+ } else {
72
+ authType = "basic";
73
+ authValue = toBase64(`:${config.token}`);
73
74
  }
74
75
  addSecretForSanitizing(authValue, "global");
75
76
  return { "-c": `http.extraHeader=AUTHORIZATION: ${authType} ${authValue}` };
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","names":[],"sources":["../../../../lib/modules/platform/azure/util.ts"],"sourcesContent":["import type {\n GitPullRequest,\n GitRepository,\n GitStatusContext,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport {\n GitPullRequestMergeStrategy,\n PullRequestStatus,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport type { MergeStrategy } from '../../../config/types.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { GitOptions } from '../../../types/git.ts';\nimport type { HostRule, PrState } from '../../../types/index.ts';\nimport { addSecretForSanitizing } from '../../../util/sanitize.ts';\nimport { toBase64 } from '../../../util/string.ts';\nimport { getPrBodyStruct } from '../pr-body.ts';\nimport type { AzurePr } from './types.ts';\n\nexport function getGitStatusContextCombinedName(\n context: GitStatusContext | null | undefined,\n): string | undefined {\n if (!context) {\n return undefined;\n }\n const combinedName = `${context.genre ? `${context.genre}/` : ''}${\n // TODO: types (#22198)\n context.name!\n }`;\n logger.trace(`Got combined context name of ${combinedName}`);\n return combinedName;\n}\n\nexport function getGitStatusContextFromCombinedName(\n context: string | undefined | null,\n): GitStatusContext | undefined {\n if (!context) {\n return undefined;\n }\n let name = context;\n let genre: string | undefined;\n const lastSlash = context.lastIndexOf('/');\n if (lastSlash > 0) {\n name = context.substring(lastSlash + 1);\n genre = context.substring(0, lastSlash);\n }\n return {\n genre,\n name,\n };\n}\n\nexport function getBranchNameWithoutRefsheadsPrefix(\n branchPath: string | undefined,\n): string | undefined {\n if (!branchPath) {\n logger.error(`getBranchNameWithoutRefsheadsPrefix(undefined)`);\n return undefined;\n }\n if (!branchPath.startsWith('refs/heads/')) {\n logger.trace(\n `The refs/heads/ name should have started with 'refs/heads/' but it didn't. (${branchPath})`,\n );\n return branchPath;\n }\n return branchPath.substring(11, branchPath.length);\n}\n\nexport function getBranchNameWithoutRefsPrefix(\n branchPath?: string,\n): string | undefined {\n if (!branchPath) {\n logger.error(`getBranchNameWithoutRefsPrefix(undefined)`);\n return undefined;\n }\n if (!branchPath.startsWith('refs/')) {\n logger.trace(\n `The ref name should have started with 'refs/' but it didn't. (${branchPath})`,\n );\n return branchPath;\n }\n return branchPath.substring(5, branchPath.length);\n}\n\nconst stateMap = {\n [PullRequestStatus.Abandoned]: 'closed',\n [PullRequestStatus.Completed]: 'merged',\n} as Record<PullRequestStatus, PrState | undefined>;\n\nexport function getRenovatePRFormat(azurePr: GitPullRequest): AzurePr {\n const number = azurePr.pullRequestId;\n\n const sourceBranch = getBranchNameWithoutRefsheadsPrefix(\n azurePr.sourceRefName,\n );\n const targetBranch = getBranchNameWithoutRefsheadsPrefix(\n azurePr.targetRefName,\n );\n const bodyStruct = getPrBodyStruct(azurePr.description);\n\n const createdAt = azurePr.creationDate?.toISOString();\n\n // TODO #22198\n const state = stateMap[azurePr.status!] ?? 'open';\n\n const sourceRefName = azurePr.sourceRefName;\n\n return {\n ...azurePr,\n sourceBranch,\n state,\n number,\n bodyStruct,\n sourceRefName,\n targetBranch,\n createdAt,\n } as AzurePr;\n}\n\nexport function getStorageExtraCloneOpts(config: HostRule): GitOptions {\n let authType: string;\n let authValue: string;\n if (!config.token && config.username && config.password) {\n authType = 'basic';\n authValue = toBase64(`${config.username}:${config.password}`);\n } else if (config.token?.length === 52) {\n authType = 'basic';\n authValue = toBase64(`:${config.token}`);\n } else {\n authType = 'bearer';\n authValue = config.token!;\n }\n addSecretForSanitizing(authValue, 'global');\n return {\n '-c': `http.extraHeader=AUTHORIZATION: ${authType} ${authValue}`,\n };\n}\n\nexport function max4000Chars(str: string): string {\n if (str && str.length >= 4000) {\n return str.substring(0, 3999);\n }\n return str;\n}\n\nexport function getProjectAndRepo(str: string): {\n project: string;\n repo: string;\n} {\n logger.trace(`getProjectAndRepo(${str})`);\n const strSplit = str.split(`/`);\n if (strSplit.length === 1) {\n return {\n project: str,\n repo: str,\n };\n }\n if (strSplit.length === 2) {\n return {\n project: strSplit[0],\n repo: strSplit[1],\n };\n }\n const msg = `Azure repository can be only structured this way : 'repository' or 'projectName/repository'!`;\n logger.warn({ repository: str }, msg);\n throw new Error(msg);\n}\n\nexport function getRepoByName(\n name: string,\n repos: (GitRepository | null | undefined)[] | undefined | null,\n): GitRepository | null {\n logger.trace(`getRepoByName(${name})`);\n\n let { project, repo } = getProjectAndRepo(name);\n project = project.toLowerCase();\n repo = repo.toLowerCase();\n\n const foundRepo = repos?.find(\n (r) =>\n project === r?.project?.name?.toLowerCase() &&\n repo === r?.name?.toLowerCase(),\n );\n if (!foundRepo) {\n logger.debug(`Repo not found: ${name}`);\n }\n return foundRepo ?? null;\n}\n\nexport function mapMergeStrategy(\n mergeStrategy?: MergeStrategy,\n): GitPullRequestMergeStrategy {\n switch (mergeStrategy) {\n case 'rebase':\n case 'fast-forward':\n return GitPullRequestMergeStrategy.Rebase;\n case 'merge-commit':\n return GitPullRequestMergeStrategy.NoFastForward;\n case 'rebase-merge':\n return GitPullRequestMergeStrategy.RebaseMerge;\n case 'squash':\n return GitPullRequestMergeStrategy.Squash;\n default:\n return GitPullRequestMergeStrategy.NoFastForward;\n }\n}\n\nexport function getWorkItemTitle(rawTitle: string, repository: string): string {\n const repoName = repository.split('/').pop();\n const isDependencyDashboard = rawTitle.includes('Dependency Dashboard');\n if (isDependencyDashboard && !rawTitle.includes(`[${repoName}]`)) {\n return `[${repoName}] ${rawTitle}`;\n }\n return rawTitle;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"util.js","names":[],"sources":["../../../../lib/modules/platform/azure/util.ts"],"sourcesContent":["import type {\n GitPullRequest,\n GitRepository,\n GitStatusContext,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport {\n GitPullRequestMergeStrategy,\n PullRequestStatus,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport type { MergeStrategy } from '../../../config/types.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { GitOptions } from '../../../types/git.ts';\nimport type { HostRule, PrState } from '../../../types/index.ts';\nimport { isProbablyJwt } from '../../../util/http/jwt.ts';\nimport { addSecretForSanitizing } from '../../../util/sanitize.ts';\nimport { toBase64 } from '../../../util/string.ts';\nimport { getPrBodyStruct } from '../pr-body.ts';\nimport type { AzurePr } from './types.ts';\n\nexport function getGitStatusContextCombinedName(\n context: GitStatusContext | null | undefined,\n): string | undefined {\n if (!context) {\n return undefined;\n }\n const combinedName = `${context.genre ? `${context.genre}/` : ''}${\n // TODO: types (#22198)\n context.name!\n }`;\n logger.trace(`Got combined context name of ${combinedName}`);\n return combinedName;\n}\n\nexport function getGitStatusContextFromCombinedName(\n context: string | undefined | null,\n): GitStatusContext | undefined {\n if (!context) {\n return undefined;\n }\n let name = context;\n let genre: string | undefined;\n const lastSlash = context.lastIndexOf('/');\n if (lastSlash > 0) {\n name = context.substring(lastSlash + 1);\n genre = context.substring(0, lastSlash);\n }\n return {\n genre,\n name,\n };\n}\n\nexport function getBranchNameWithoutRefsheadsPrefix(\n branchPath: string | undefined,\n): string | undefined {\n if (!branchPath) {\n logger.error(`getBranchNameWithoutRefsheadsPrefix(undefined)`);\n return undefined;\n }\n if (!branchPath.startsWith('refs/heads/')) {\n logger.trace(\n `The refs/heads/ name should have started with 'refs/heads/' but it didn't. (${branchPath})`,\n );\n return branchPath;\n }\n return branchPath.substring(11, branchPath.length);\n}\n\nexport function getBranchNameWithoutRefsPrefix(\n branchPath?: string,\n): string | undefined {\n if (!branchPath) {\n logger.error(`getBranchNameWithoutRefsPrefix(undefined)`);\n return undefined;\n }\n if (!branchPath.startsWith('refs/')) {\n logger.trace(\n `The ref name should have started with 'refs/' but it didn't. (${branchPath})`,\n );\n return branchPath;\n }\n return branchPath.substring(5, branchPath.length);\n}\n\nconst stateMap = {\n [PullRequestStatus.Abandoned]: 'closed',\n [PullRequestStatus.Completed]: 'merged',\n} as Record<PullRequestStatus, PrState | undefined>;\n\nexport function getRenovatePRFormat(azurePr: GitPullRequest): AzurePr {\n const number = azurePr.pullRequestId;\n\n const sourceBranch = getBranchNameWithoutRefsheadsPrefix(\n azurePr.sourceRefName,\n );\n const targetBranch = getBranchNameWithoutRefsheadsPrefix(\n azurePr.targetRefName,\n );\n const bodyStruct = getPrBodyStruct(azurePr.description);\n\n const createdAt = azurePr.creationDate?.toISOString();\n\n // TODO #22198\n const state = stateMap[azurePr.status!] ?? 'open';\n\n const sourceRefName = azurePr.sourceRefName;\n\n return {\n ...azurePr,\n sourceBranch,\n state,\n number,\n bodyStruct,\n sourceRefName,\n targetBranch,\n createdAt,\n } as AzurePr;\n}\n\nexport function getStorageExtraCloneOpts(config: HostRule): GitOptions {\n let authType: string;\n let authValue: string;\n if (!config.token && config.username && config.password) {\n authType = 'basic';\n authValue = toBase64(`${config.username}:${config.password}`);\n } else if (config.token && isProbablyJwt(config.token)) {\n authType = 'bearer';\n authValue = config.token;\n } else {\n authType = 'basic';\n authValue = toBase64(`:${config.token}`);\n }\n addSecretForSanitizing(authValue, 'global');\n return {\n '-c': `http.extraHeader=AUTHORIZATION: ${authType} ${authValue}`,\n };\n}\n\nexport function max4000Chars(str: string): string {\n if (str && str.length >= 4000) {\n return str.substring(0, 3999);\n }\n return str;\n}\n\nexport function getProjectAndRepo(str: string): {\n project: string;\n repo: string;\n} {\n logger.trace(`getProjectAndRepo(${str})`);\n const strSplit = str.split(`/`);\n if (strSplit.length === 1) {\n return {\n project: str,\n repo: str,\n };\n }\n if (strSplit.length === 2) {\n return {\n project: strSplit[0],\n repo: strSplit[1],\n };\n }\n const msg = `Azure repository can be only structured this way : 'repository' or 'projectName/repository'!`;\n logger.warn({ repository: str }, msg);\n throw new Error(msg);\n}\n\nexport function getRepoByName(\n name: string,\n repos: (GitRepository | null | undefined)[] | undefined | null,\n): GitRepository | null {\n logger.trace(`getRepoByName(${name})`);\n\n let { project, repo } = getProjectAndRepo(name);\n project = project.toLowerCase();\n repo = repo.toLowerCase();\n\n const foundRepo = repos?.find(\n (r) =>\n project === r?.project?.name?.toLowerCase() &&\n repo === r?.name?.toLowerCase(),\n );\n if (!foundRepo) {\n logger.debug(`Repo not found: ${name}`);\n }\n return foundRepo ?? null;\n}\n\nexport function mapMergeStrategy(\n mergeStrategy?: MergeStrategy,\n): GitPullRequestMergeStrategy {\n switch (mergeStrategy) {\n case 'rebase':\n case 'fast-forward':\n return GitPullRequestMergeStrategy.Rebase;\n case 'merge-commit':\n return GitPullRequestMergeStrategy.NoFastForward;\n case 'rebase-merge':\n return GitPullRequestMergeStrategy.RebaseMerge;\n case 'squash':\n return GitPullRequestMergeStrategy.Squash;\n default:\n return GitPullRequestMergeStrategy.NoFastForward;\n }\n}\n\nexport function getWorkItemTitle(rawTitle: string, repository: string): string {\n const repoName = repository.split('/').pop();\n const isDependencyDashboard = rawTitle.includes('Dependency Dashboard');\n if (isDependencyDashboard && !rawTitle.includes(`[${repoName}]`)) {\n return `[${repoName}] ${rawTitle}`;\n }\n return rawTitle;\n}\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Json } from "../schema-utils/index.js";
2
+ import { isPlainObject } from "@sindresorhus/is";
3
+ //#region lib/util/http/jwt.ts
4
+ /**
5
+ * Detects whether a token string is likely a JWT (JSON Web Token).
6
+ *
7
+ * JWTs consist of three base64url-encoded segments separated by dots.
8
+ * The first segment (header) must decode to valid JSON containing
9
+ * at least a `typ` or `alg` field.
10
+ */
11
+ function isProbablyJwt(token) {
12
+ if (!token) return false;
13
+ const parts = token.split(".");
14
+ if (parts.length !== 3) return false;
15
+ const result = Json.safeParse(Buffer.from(parts[0], "base64url").toString("utf8"));
16
+ return result.success && isPlainObject(result.data) && ("typ" in result.data || "alg" in result.data);
17
+ }
18
+ //#endregion
19
+ export { isProbablyJwt };
20
+
21
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","names":[],"sources":["../../../lib/util/http/jwt.ts"],"sourcesContent":["import { isPlainObject } from '@sindresorhus/is';\nimport { Json } from '../schema-utils/index.ts';\n\n/**\n * Detects whether a token string is likely a JWT (JSON Web Token).\n *\n * JWTs consist of three base64url-encoded segments separated by dots.\n * The first segment (header) must decode to valid JSON containing\n * at least a `typ` or `alg` field.\n */\nexport function isProbablyJwt(token: string | undefined): boolean {\n if (!token) {\n return false;\n }\n\n const parts = token.split('.');\n if (parts.length !== 3) {\n return false;\n }\n\n const result = Json.safeParse(\n Buffer.from(parts[0], 'base64url').toString('utf8'),\n );\n return (\n result.success &&\n isPlainObject(result.data) &&\n ('typ' in result.data || 'alg' in result.data)\n );\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,cAAc,OAAoC;CAChE,IAAI,CAAC,OACH,OAAO;CAGT,MAAM,QAAQ,MAAM,MAAM,GAAG;CAC7B,IAAI,MAAM,WAAW,GACnB,OAAO;CAGT,MAAM,SAAS,KAAK,UAClB,OAAO,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,SAAS,MAAM,CACpD;CACA,OACE,OAAO,WACP,cAAc,OAAO,IAAI,MACxB,SAAS,OAAO,QAAQ,SAAS,OAAO;AAE7C"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "43.271.3",
4
+ "version": "43.272.0",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$id": "https://docs.renovatebot.com/renovate-schema.json",
3
- "title": "JSON schema for Renovate 43.271.3 config files (https://renovatebot.com/)",
3
+ "title": "JSON schema for Renovate 43.272.0 config files (https://renovatebot.com/)",
4
4
  "$schema": "http://json-schema.org/draft-07/schema#",
5
- "x-renovate-version": "43.271.3",
5
+ "x-renovate-version": "43.272.0",
6
6
  "allowComments": true,
7
7
  "type": "object",
8
8
  "definitions": {