renovate 39.184.0 → 39.185.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/modules/manager/terraform/lockfile/hash.d.ts +1 -1
- package/dist/modules/platform/github/common.d.ts +2 -0
- package/dist/modules/platform/github/common.js +16 -0
- package/dist/modules/platform/github/common.js.map +1 -1
- package/dist/modules/platform/github/index.d.ts +1 -1
- package/dist/modules/platform/github/index.js +6 -4
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/util/http/bitbucket-server.d.ts +2 -3
- package/dist/util/http/bitbucket-server.js +2 -2
- package/dist/util/http/bitbucket-server.js.map +1 -1
- package/dist/util/http/bitbucket.d.ts +2 -3
- package/dist/util/http/bitbucket.js +6 -7
- package/dist/util/http/bitbucket.js.map +1 -1
- package/dist/util/http/errors.d.ts +2 -0
- package/dist/util/http/errors.js +8 -0
- package/dist/util/http/errors.js.map +1 -0
- package/dist/util/http/gerrit.d.ts +2 -3
- package/dist/util/http/gerrit.js +2 -2
- package/dist/util/http/gerrit.js.map +1 -1
- package/dist/util/http/gitea.d.ts +2 -3
- package/dist/util/http/gitea.js +2 -2
- package/dist/util/http/gitea.js.map +1 -1
- package/dist/util/http/github.d.ts +9 -8
- package/dist/util/http/github.js +2 -2
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/gitlab.d.ts +2 -3
- package/dist/util/http/gitlab.js +2 -2
- package/dist/util/http/gitlab.js.map +1 -1
- package/dist/util/http/got.d.ts +9 -0
- package/dist/util/http/got.js +54 -0
- package/dist/util/http/got.js.map +1 -0
- package/dist/util/http/http.d.ts +79 -3
- package/dist/util/http/http.js +336 -0
- package/dist/util/http/http.js.map +1 -1
- package/dist/util/http/index.d.ts +6 -81
- package/dist/util/http/index.js +5 -372
- package/dist/util/http/index.js.map +1 -1
- package/dist/util/http/types.d.ts +5 -8
- package/dist/util/http/types.js.map +1 -1
- package/package.json +1 -1
@@ -1,12 +1,11 @@
|
|
1
|
-
import type
|
1
|
+
import { HttpBase, type InternalJsonUnsafeOptions } from './http';
|
2
2
|
import type { HttpMethod, HttpOptions, HttpResponse } from './types';
|
3
|
-
import { Http } from '.';
|
4
3
|
export declare const setBaseUrl: (url: string) => void;
|
5
4
|
export interface BitbucketServerHttpOptions extends HttpOptions {
|
6
5
|
paginate?: boolean;
|
7
6
|
limit?: number;
|
8
7
|
}
|
9
|
-
export declare class BitbucketServerHttp extends
|
8
|
+
export declare class BitbucketServerHttp extends HttpBase<BitbucketServerHttpOptions> {
|
10
9
|
protected get baseUrl(): string | undefined;
|
11
10
|
constructor(options?: HttpOptions);
|
12
11
|
protected requestJsonUnsafe<T>(method: HttpMethod, options: InternalJsonUnsafeOptions<BitbucketServerHttpOptions>): Promise<HttpResponse<T>>;
|
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BitbucketServerHttp = exports.setBaseUrl = void 0;
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
|
6
|
-
const
|
6
|
+
const http_1 = require("./http");
|
7
7
|
const MAX_LIMIT = 100;
|
8
8
|
let baseUrl;
|
9
9
|
const setBaseUrl = (url) => {
|
10
10
|
baseUrl = url;
|
11
11
|
};
|
12
12
|
exports.setBaseUrl = setBaseUrl;
|
13
|
-
class BitbucketServerHttp extends
|
13
|
+
class BitbucketServerHttp extends http_1.HttpBase {
|
14
14
|
get baseUrl() {
|
15
15
|
return baseUrl;
|
16
16
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bitbucket-server.js","sourceRoot":"","sources":["../../../lib/util/http/bitbucket-server.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;
|
1
|
+
{"version":3,"file":"bitbucket-server.js","sourceRoot":"","sources":["../../../lib/util/http/bitbucket-server.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAClC,iCAAkE;AAGlE,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,IAAI,OAAe,CAAC;AACb,MAAM,UAAU,GAAG,CAAC,GAAW,EAAQ,EAAE;IAC9C,OAAO,GAAG,GAAG,CAAC;AAChB,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB;AAYF,MAAa,mBAAoB,SAAQ,eAAoC;IAC3E,IAAuB,OAAO;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY,OAAqB;QAC/B,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEkB,KAAK,CAAC,iBAAiB,CACxC,MAAkB,EAClB,OAA8D;QAE9D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;QAC9C,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,OAAO,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,UAAU,CAAC;QAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,SAAS,CAAC;YAClD,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAC1C,MAAM,EACN,IAAI,CACL,CAAC;QAEF,IAAI,QAAQ,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,eAAe,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YAE9C,OAAO,aAAa,EAAE,CAAC;gBACrB,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAEhE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAC9C,MAAM,EACN,IAAI,CACL,CAAC;gBACF,eAAe,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChD,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;YAChD,CAAC;YAED,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,eAAoB,EAAE,CAAC;QACnD,CAAC;QAED,OAAO,MAAyB,CAAC;IACnC,CAAC;CACF;AAlDD,kDAkDC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,OAAO,YAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { HttpBase, type InternalJsonUnsafeOptions } from './http';\nimport type { HttpMethod, HttpOptions, HttpResponse } from './types';\n\nconst MAX_LIMIT = 100;\n\nlet baseUrl: string;\nexport const setBaseUrl = (url: string): void => {\n baseUrl = url;\n};\n\nexport interface BitbucketServerHttpOptions extends HttpOptions {\n paginate?: boolean;\n limit?: number;\n}\n\ninterface PagedResult<T = unknown> {\n nextPageStart?: number;\n values: T[];\n}\n\nexport class BitbucketServerHttp extends HttpBase<BitbucketServerHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(options?: HttpOptions) {\n super('bitbucket-server', options);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<BitbucketServerHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const resolvedUrl = this.resolveUrl(options.url, options.httpOptions);\n const opts = { ...options, url: resolvedUrl };\n opts.httpOptions ??= {};\n opts.httpOptions.headers ??= {};\n opts.httpOptions.headers['X-Atlassian-Token'] = 'no-check';\n\n const paginate = opts.httpOptions.paginate;\n if (paginate) {\n const limit = opts.httpOptions.limit ?? MAX_LIMIT;\n resolvedUrl.searchParams.set('limit', limit.toString());\n }\n\n const result = await super.requestJsonUnsafe<T | PagedResult<T>>(\n method,\n opts,\n );\n\n if (paginate && isPagedResult(result.body)) {\n const collectedValues = [...result.body.values];\n let nextPageStart = result.body.nextPageStart;\n\n while (nextPageStart) {\n resolvedUrl.searchParams.set('start', nextPageStart.toString());\n\n const nextResult = await super.requestJsonUnsafe<PagedResult<T>>(\n method,\n opts,\n );\n collectedValues.push(...nextResult.body.values);\n nextPageStart = nextResult.body.nextPageStart;\n }\n\n return { ...result, body: collectedValues as T };\n }\n\n return result as HttpResponse<T>;\n }\n}\n\nfunction isPagedResult(obj: unknown): obj is PagedResult {\n return is.nonEmptyObject(obj) && is.array(obj.values);\n}\n"]}
|
@@ -1,12 +1,11 @@
|
|
1
|
-
import type
|
1
|
+
import { HttpBase, type InternalJsonUnsafeOptions } from './http';
|
2
2
|
import type { HttpMethod, HttpOptions, HttpResponse } from './types';
|
3
|
-
import { Http } from '.';
|
4
3
|
export declare function setBaseUrl(url: string): void;
|
5
4
|
export interface BitbucketHttpOptions extends HttpOptions {
|
6
5
|
paginate?: boolean;
|
7
6
|
pagelen?: number;
|
8
7
|
}
|
9
|
-
export declare class BitbucketHttp extends
|
8
|
+
export declare class BitbucketHttp extends HttpBase<BitbucketHttpOptions> {
|
10
9
|
protected get baseUrl(): string | undefined;
|
11
10
|
constructor(type?: string, options?: BitbucketHttpOptions);
|
12
11
|
protected requestJsonUnsafe<T>(method: HttpMethod, options: InternalJsonUnsafeOptions<BitbucketHttpOptions>): Promise<HttpResponse<T>>;
|
@@ -4,14 +4,14 @@ exports.BitbucketHttp = void 0;
|
|
4
4
|
exports.setBaseUrl = setBaseUrl;
|
5
5
|
const tslib_1 = require("tslib");
|
6
6
|
const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
|
7
|
-
const
|
7
|
+
const http_1 = require("./http");
|
8
8
|
const MAX_PAGES = 100;
|
9
9
|
const MAX_PAGELEN = 100;
|
10
10
|
let baseUrl = 'https://api.bitbucket.org/';
|
11
11
|
function setBaseUrl(url) {
|
12
12
|
baseUrl = url;
|
13
13
|
}
|
14
|
-
class BitbucketHttp extends
|
14
|
+
class BitbucketHttp extends http_1.HttpBase {
|
15
15
|
get baseUrl() {
|
16
16
|
return baseUrl;
|
17
17
|
}
|
@@ -39,12 +39,11 @@ class BitbucketHttp extends _1.Http {
|
|
39
39
|
}
|
40
40
|
// Override other page-related attributes
|
41
41
|
resultBody.pagelen = resultBody.values.length;
|
42
|
+
/* v8 ignore start: hard to test all branches */
|
42
43
|
resultBody.size =
|
43
|
-
page <= MAX_PAGES
|
44
|
-
|
45
|
-
|
46
|
-
resultBody.next =
|
47
|
-
page <= MAX_PAGES ? nextURL : /* v8 ignore next */ undefined;
|
44
|
+
page <= MAX_PAGES ? resultBody.values.length : undefined;
|
45
|
+
resultBody.next = page <= MAX_PAGES ? nextURL : undefined;
|
46
|
+
/* v8 ignore stop */
|
48
47
|
}
|
49
48
|
return result;
|
50
49
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bitbucket.js","sourceRoot":"","sources":["../../../lib/util/http/bitbucket.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"bitbucket.js","sourceRoot":"","sources":["../../../lib/util/http/bitbucket.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport type { PagedResult } from '../../modules/platform/bitbucket/types';\nimport { HttpBase, type InternalJsonUnsafeOptions } from './http';\nimport type { HttpMethod, HttpOptions, HttpResponse } from './types';\n\nconst MAX_PAGES = 100;\nconst MAX_PAGELEN = 100;\n\nlet baseUrl = 'https://api.bitbucket.org/';\n\nexport function setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\nexport interface BitbucketHttpOptions extends HttpOptions {\n paginate?: boolean;\n pagelen?: number;\n}\n\nexport class BitbucketHttp extends HttpBase<BitbucketHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(type = 'bitbucket', options?: BitbucketHttpOptions) {\n super(type, options);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<BitbucketHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const resolvedUrl = this.resolveUrl(options.url, options.httpOptions);\n const opts = { ...options, url: resolvedUrl };\n const paginate = opts.httpOptions?.paginate;\n\n if (paginate && !hasPagelen(resolvedUrl)) {\n const pagelen = opts.httpOptions!.pagelen ?? MAX_PAGELEN;\n resolvedUrl.searchParams.set('pagelen', pagelen.toString());\n }\n\n const result = await super.requestJsonUnsafe<T | PagedResult<T>>(\n method,\n opts,\n );\n\n if (paginate && isPagedResult(result.body)) {\n const resultBody = result.body;\n let nextURL = result.body.next;\n let page = 2;\n\n for (; nextURL && page <= MAX_PAGES; page++) {\n resolvedUrl.searchParams.set('page', page.toString());\n const nextResult = await super.requestJsonUnsafe<PagedResult<T>>(\n method,\n opts,\n );\n\n resultBody.values.push(...nextResult.body.values);\n nextURL = nextResult.body.next;\n }\n\n // Override other page-related attributes\n resultBody.pagelen = resultBody.values.length;\n /* v8 ignore start: hard to test all branches */\n resultBody.size =\n page <= MAX_PAGES ? resultBody.values.length : undefined;\n resultBody.next = page <= MAX_PAGES ? nextURL : undefined;\n /* v8 ignore stop */\n }\n\n return result as HttpResponse<T>;\n }\n}\n\nfunction hasPagelen(url: URL): boolean {\n return !is.nullOrUndefined(url.searchParams.get('pagelen'));\n}\n\nfunction isPagedResult<T>(obj: any): obj is PagedResult<T> {\n return is.nonEmptyObject(obj) && Array.isArray(obj.values);\n}\n"]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.EmptyResultError = void 0;
|
4
|
+
// required for zod type safety with `Result.wrap`
|
5
|
+
class EmptyResultError extends Error {
|
6
|
+
}
|
7
|
+
exports.EmptyResultError = EmptyResultError;
|
8
|
+
//# sourceMappingURL=errors.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../lib/util/http/errors.ts"],"names":[],"mappings":";;;AAAA,kDAAkD;AAClD,MAAa,gBAAiB,SAAQ,KAAK;CAAG;AAA9C,4CAA8C","sourcesContent":["// required for zod type safety with `Result.wrap`\nexport class EmptyResultError extends Error {}\n"]}
|
@@ -1,12 +1,11 @@
|
|
1
|
-
import type
|
1
|
+
import { HttpBase, type InternalHttpOptions } from './http';
|
2
2
|
import type { HttpOptions } from './types';
|
3
|
-
import { Http } from '.';
|
4
3
|
export declare function setBaseUrl(url: string): void;
|
5
4
|
/**
|
6
5
|
* Access Gerrit REST-API and strip-of the "magic prefix" from responses.
|
7
6
|
* @see https://gerrit-review.googlesource.com/Documentation/rest-api.html
|
8
7
|
*/
|
9
|
-
export declare class GerritHttp extends
|
8
|
+
export declare class GerritHttp extends HttpBase {
|
10
9
|
private static magicPrefix;
|
11
10
|
protected get baseUrl(): string | undefined;
|
12
11
|
constructor(options?: HttpOptions);
|
package/dist/util/http/gerrit.js
CHANGED
@@ -5,7 +5,7 @@ exports.setBaseUrl = setBaseUrl;
|
|
5
5
|
const common_1 = require("../common");
|
6
6
|
const regex_1 = require("../regex");
|
7
7
|
const url_1 = require("../url");
|
8
|
-
const
|
8
|
+
const http_1 = require("./http");
|
9
9
|
let baseUrl;
|
10
10
|
function setBaseUrl(url) {
|
11
11
|
baseUrl = url;
|
@@ -14,7 +14,7 @@ function setBaseUrl(url) {
|
|
14
14
|
* Access Gerrit REST-API and strip-of the "magic prefix" from responses.
|
15
15
|
* @see https://gerrit-review.googlesource.com/Documentation/rest-api.html
|
16
16
|
*/
|
17
|
-
class GerritHttp extends
|
17
|
+
class GerritHttp extends http_1.HttpBase {
|
18
18
|
static magicPrefix = (0, regex_1.regEx)(/^\)]}'\n/g);
|
19
19
|
get baseUrl() {
|
20
20
|
return baseUrl;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"gerrit.js","sourceRoot":"","sources":["../../../lib/util/http/gerrit.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"gerrit.js","sourceRoot":"","sources":["../../../lib/util/http/gerrit.ts"],"names":[],"mappings":";;;AAOA,gCAEC;AATD,sCAAsC;AACtC,oCAAiC;AACjC,gCAAmC;AACnC,iCAA4D;AAG5D,IAAI,OAAe,CAAC;AACpB,SAAgB,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG,GAAG,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAa,UAAW,SAAQ,eAAQ;IAC9B,MAAM,CAAC,WAAW,GAAG,IAAA,aAAK,EAAC,WAAW,CAAC,CAAC;IAEhD,IAAuB,OAAO;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY,OAAqB;QAC/B,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAEkB,UAAU,CAC3B,UAAwB,EACxB,OAAgC;QAEhC,mCAAmC;QACnC,OAAO,KAAK,CAAC,UAAU,CACrB,IAAA,eAAS,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,UAAU,EAAE,EAC9D,OAAO,CACR,CAAC;IACJ,CAAC;IAEkB,cAAc,CAC/B,GAAQ,EACR,OAA4B;QAE5B,OAAO,CAAC,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CACnC,IAAA,kBAAS,EAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC;;AA5BH,gCA6BC","sourcesContent":["import { parseJson } from '../common';\nimport { regEx } from '../regex';\nimport { isHttpUrl } from '../url';\nimport { HttpBase, type InternalHttpOptions } from './http';\nimport type { HttpOptions } from './types';\n\nlet baseUrl: string;\nexport function setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\n/**\n * Access Gerrit REST-API and strip-of the \"magic prefix\" from responses.\n * @see https://gerrit-review.googlesource.com/Documentation/rest-api.html\n */\nexport class GerritHttp extends HttpBase {\n private static magicPrefix = regEx(/^\\)]}'\\n/g);\n\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(options?: HttpOptions) {\n super('gerrit', options);\n }\n\n protected override resolveUrl(\n requestUrl: string | URL,\n options: HttpOptions | undefined,\n ): URL {\n // ensure trailing slash for gerrit\n return super.resolveUrl(\n isHttpUrl(requestUrl) ? requestUrl : `${baseUrl}${requestUrl}`,\n options,\n );\n }\n\n protected override processOptions(\n url: URL,\n options: InternalHttpOptions,\n ): void {\n options.parseJson = (text: string) =>\n parseJson(text.replace(GerritHttp.magicPrefix, ''), url.pathname);\n }\n}\n"]}
|
@@ -1,11 +1,10 @@
|
|
1
|
-
import type
|
1
|
+
import { HttpBase, type InternalJsonUnsafeOptions } from './http';
|
2
2
|
import type { HttpMethod, HttpOptions, HttpResponse } from './types';
|
3
|
-
import { Http } from '.';
|
4
3
|
export declare const setBaseUrl: (newBaseUrl: string) => void;
|
5
4
|
export interface GiteaHttpOptions extends HttpOptions {
|
6
5
|
paginate?: boolean;
|
7
6
|
}
|
8
|
-
export declare class GiteaHttp extends
|
7
|
+
export declare class GiteaHttp extends HttpBase<GiteaHttpOptions> {
|
9
8
|
protected get baseUrl(): string | undefined;
|
10
9
|
constructor(hostType?: string, options?: HttpOptions);
|
11
10
|
protected requestJsonUnsafe<T = unknown>(method: HttpMethod, options: InternalJsonUnsafeOptions<GiteaHttpOptions>): Promise<HttpResponse<T>>;
|
package/dist/util/http/gitea.js
CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GiteaHttp = exports.setBaseUrl = void 0;
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
|
6
|
-
const
|
6
|
+
const http_1 = require("./http");
|
7
7
|
let baseUrl;
|
8
8
|
const setBaseUrl = (newBaseUrl) => {
|
9
9
|
baseUrl = newBaseUrl.replace(/\/*$/, '/'); // TODO #12875
|
@@ -18,7 +18,7 @@ function getPaginationContainer(body) {
|
|
18
18
|
}
|
19
19
|
return null;
|
20
20
|
}
|
21
|
-
class GiteaHttp extends
|
21
|
+
class GiteaHttp extends http_1.HttpBase {
|
22
22
|
get baseUrl() {
|
23
23
|
return baseUrl;
|
24
24
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"gitea.js","sourceRoot":"","sources":["../../../lib/util/http/gitea.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;
|
1
|
+
{"version":3,"file":"gitea.js","sourceRoot":"","sources":["../../../lib/util/http/gitea.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAClC,iCAAkE;AAGlE,IAAI,OAAe,CAAC;AACb,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAQ,EAAE;IACrD,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,cAAc;AAC3D,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB;AAMF,SAAS,sBAAsB,CAAc,IAAa;IACxD,IAAI,YAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,IAAW,CAAC;IACrB,CAAC;IAED,IAAI,YAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,YAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,IAAW,CAAC;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAa,SAAU,SAAQ,eAA0B;IACvD,IAAuB,OAAO;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY,QAAiB,EAAE,OAAqB;QAClD,KAAK,CAAC,QAAQ,IAAI,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAEkB,KAAK,CAAC,iBAAiB,CACxC,MAAkB,EAClB,OAAoD;QAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG;YACX,GAAG,OAAO;YACV,GAAG,EAAE,WAAW;SACjB,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAI,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,EAAE,GAAG,sBAAsB,CAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;YACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAW,EAAE,EAAE,CAAC,CAAC;YACnE,IAAI,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAEzE,OAAO,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBAClC,QAAQ,IAAI,CAAC,CAAC;gBACd,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAE1D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAI,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,sBAAsB,CAAI,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,MAAM;gBACR,CAAC;gBAED,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAzCD,8BAyCC","sourcesContent":["import is from '@sindresorhus/is';\nimport { HttpBase, type InternalJsonUnsafeOptions } from './http';\nimport type { HttpMethod, HttpOptions, HttpResponse } from './types';\n\nlet baseUrl: string;\nexport const setBaseUrl = (newBaseUrl: string): void => {\n baseUrl = newBaseUrl.replace(/\\/*$/, '/'); // TODO #12875\n};\n\nexport interface GiteaHttpOptions extends HttpOptions {\n paginate?: boolean;\n}\n\nfunction getPaginationContainer<T = unknown>(body: unknown): T[] | null {\n if (is.array(body) && body.length) {\n return body as T[];\n }\n\n if (is.plainObject(body) && is.array(body?.data) && body.data.length) {\n return body.data as T[];\n }\n\n return null;\n}\n\nexport class GiteaHttp extends HttpBase<GiteaHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType?: string, options?: HttpOptions) {\n super(hostType ?? 'gitea', options);\n }\n\n protected override async requestJsonUnsafe<T = unknown>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GiteaHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const resolvedUrl = this.resolveUrl(options.url, options.httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n const res = await super.requestJsonUnsafe<T>(method, opts);\n const pc = getPaginationContainer<T>(res.body);\n if (opts.httpOptions?.paginate && pc) {\n delete opts.httpOptions.paginate;\n const total = parseInt(res.headers['x-total-count'] as string, 10);\n let nextPage = parseInt(resolvedUrl.searchParams.get('page') ?? '1', 10);\n\n while (total && pc.length < total) {\n nextPage += 1;\n resolvedUrl.searchParams.set('page', nextPage.toString());\n\n const nextRes = await super.requestJsonUnsafe<T>(method, opts);\n const nextPc = getPaginationContainer<T>(nextRes.body);\n if (nextPc === null) {\n break;\n }\n\n pc.push(...nextPc);\n }\n }\n\n return res;\n }\n}\n"]}
|
@@ -1,13 +1,14 @@
|
|
1
|
-
import type
|
1
|
+
import { HttpBase, type InternalHttpOptions, type InternalJsonUnsafeOptions } from './http';
|
2
2
|
import type { GotLegacyError } from './legacy';
|
3
3
|
import type { GraphqlOptions, HttpMethod, HttpOptions, HttpResponse } from './types';
|
4
|
-
import { Http } from '.';
|
5
4
|
export declare const setBaseUrl: (url: string) => void;
|
6
|
-
export interface
|
5
|
+
export interface GithubBaseHttpOptions extends HttpOptions {
|
6
|
+
repository?: string;
|
7
|
+
}
|
8
|
+
export interface GithubHttpOptions extends GithubBaseHttpOptions {
|
7
9
|
paginate?: boolean | string;
|
8
10
|
paginationField?: string;
|
9
11
|
pageLimit?: number;
|
10
|
-
repository?: string;
|
11
12
|
}
|
12
13
|
export type GithubGraphqlResponse<T = unknown> = {
|
13
14
|
data: T;
|
@@ -24,10 +25,10 @@ interface GraphqlPageCacheItem {
|
|
24
25
|
pageSize: number;
|
25
26
|
}
|
26
27
|
export type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;
|
27
|
-
export declare class GithubHttp extends
|
28
|
+
export declare class GithubHttp extends HttpBase<GithubHttpOptions> {
|
28
29
|
protected get baseUrl(): string | undefined;
|
29
|
-
constructor(hostType?: string, options?:
|
30
|
-
protected processOptions(url: URL, opts: InternalHttpOptions &
|
30
|
+
constructor(hostType?: string, options?: HttpOptions);
|
31
|
+
protected processOptions(url: URL, opts: InternalHttpOptions & GithubBaseHttpOptions): void;
|
31
32
|
protected handleError(url: string | URL, opts: HttpOptions, err: GotLegacyError): never;
|
32
33
|
protected requestJsonUnsafe<T>(method: HttpMethod, options: InternalJsonUnsafeOptions<GithubHttpOptions>): Promise<HttpResponse<T>>;
|
33
34
|
requestGraphql<T = unknown>(query: string, options?: GraphqlOptions): Promise<GithubGraphqlResponse<T> | null>;
|
@@ -43,6 +44,6 @@ export declare class GithubHttp extends Http<GithubHttpOptions> {
|
|
43
44
|
* @example url = 'renovatebot/renovate/contents/package.json'
|
44
45
|
* @example url = 'package.json' & options.repository = 'renovatebot/renovate'
|
45
46
|
*/
|
46
|
-
getRawTextFile(url: string, options?: InternalHttpOptions &
|
47
|
+
getRawTextFile(url: string, options?: InternalHttpOptions & GithubBaseHttpOptions): Promise<HttpResponse>;
|
47
48
|
}
|
48
49
|
export {};
|
package/dist/util/http/github.js
CHANGED
@@ -14,7 +14,7 @@ const range_1 = require("../range");
|
|
14
14
|
const regex_1 = require("../regex");
|
15
15
|
const url_1 = require("../url");
|
16
16
|
const host_rules_1 = require("./host-rules");
|
17
|
-
const
|
17
|
+
const http_1 = require("./http");
|
18
18
|
const githubBaseUrl = 'https://api.github.com/';
|
19
19
|
let baseUrl = githubBaseUrl;
|
20
20
|
const setBaseUrl = (url) => {
|
@@ -164,7 +164,7 @@ function replaceUrlBase(url, baseUrl) {
|
|
164
164
|
const relativeUrl = `${url.pathname}${url.search}`;
|
165
165
|
return new URL(relativeUrl, baseUrl);
|
166
166
|
}
|
167
|
-
class GithubHttp extends
|
167
|
+
class GithubHttp extends http_1.HttpBase {
|
168
168
|
get baseUrl() {
|
169
169
|
return baseUrl;
|
170
170
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../lib/util/http/github.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport {\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport { getCache } from '../cache/repository';\nimport { maskToken } from '../mask';\nimport * as p from '../promises';\nimport { range } from '../range';\nimport { regEx } from '../regex';\nimport { joinUrlParts, parseLinkHeader } from '../url';\nimport { findMatchingRule } from './host-rules';\nimport type { InternalHttpOptions, InternalJsonUnsafeOptions } from './http';\nimport type { GotLegacyError } from './legacy';\nimport type {\n GraphqlOptions,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types';\nimport { Http } from '.';\n\nconst githubBaseUrl = 'https://api.github.com/';\nlet baseUrl = githubBaseUrl;\nexport const setBaseUrl = (url: string): void => {\n baseUrl = url;\n};\n\nexport interface GithubHttpOptions extends HttpOptions {\n paginate?: boolean | string;\n paginationField?: string;\n pageLimit?: number;\n repository?: string;\n}\n\ninterface GithubGraphqlRepoData<T = unknown> {\n repository?: T;\n}\n\nexport type GithubGraphqlResponse<T = unknown> =\n | {\n data: T;\n errors?: never;\n }\n | {\n data?: never;\n errors: {\n type?: string;\n message: string;\n }[];\n };\n\nfunction handleGotError(\n err: GotLegacyError,\n url: string | URL,\n opts: GithubHttpOptions,\n): Error {\n const path = url.toString();\n let message = err.message || '';\n const body = err.response?.body;\n if (is.plainObject(body) && 'message' in body) {\n message = String(body.message);\n }\n if (\n err.code === 'ERR_HTTP2_STREAM_ERROR' ||\n err.code === 'ENOTFOUND' ||\n err.code === 'ETIMEDOUT' ||\n err.code === 'EAI_AGAIN' ||\n err.code === 'ECONNRESET'\n ) {\n logger.debug({ err }, 'GitHub failure: RequestError');\n return new ExternalHostError(err, 'github');\n }\n if (err.name === 'ParseError') {\n logger.debug({ err }, '');\n return new ExternalHostError(err, 'github');\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug({ err }, 'GitHub failure: 5xx');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have triggered an abuse detection mechanism')\n ) {\n logger.debug({ err }, 'GitHub failure: abuse detection');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have exceeded a secondary rate limit')\n ) {\n logger.warn({ err }, 'GitHub failure: secondary rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) {\n logger.debug(`Endpoint: ${path}, needs paid GitHub plan`);\n return err;\n }\n if (err.statusCode === 403 && message.includes('rate limit exceeded')) {\n logger.debug({ err }, 'GitHub failure: rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('Resource not accessible by integration')\n ) {\n logger.debug(\n { err },\n 'GitHub failure: Resource not accessible by integration',\n );\n return new Error(PLATFORM_INTEGRATION_UNAUTHORIZED);\n }\n if (err.statusCode === 401 && message.includes('Bad credentials')) {\n const rateLimit = err.headers?.['x-ratelimit-limit'] ?? -1;\n logger.debug(\n {\n token: maskToken(opts.token),\n err,\n },\n 'GitHub failure: Bad credentials',\n );\n if (rateLimit === '60') {\n return new ExternalHostError(err, 'github');\n }\n return new Error(PLATFORM_BAD_CREDENTIALS);\n }\n if (err.statusCode === 422) {\n if (\n message.includes('Review cannot be requested from pull request author')\n ) {\n return err;\n } else if (err.body?.errors?.find((e: any) => e.field === 'milestone')) {\n return err;\n } else if (err.body?.errors?.find((e: any) => e.code === 'invalid')) {\n logger.debug({ err }, 'Received invalid response - aborting');\n return new Error(REPOSITORY_CHANGED);\n } else if (\n err.body?.errors?.find((e: any) =>\n e.message?.startsWith('A pull request already exists'),\n )\n ) {\n return err;\n }\n logger.debug({ err }, '422 Error thrown from GitHub');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 410 &&\n err.body?.message === 'Issues are disabled for this repo'\n ) {\n return err;\n }\n return err;\n}\n\ninterface GraphqlPaginatedContent<T = unknown> {\n nodes: T[];\n edges: T[];\n pageInfo: { hasNextPage: boolean; endCursor: string };\n}\n\nfunction constructAcceptString(input?: any): string {\n const defaultAccept = 'application/vnd.github.v3+json';\n const acceptStrings =\n typeof input === 'string' ? input.split(regEx(/\\s*,\\s*/)) : [];\n\n // TODO: regression of #6736\n if (\n !acceptStrings.some((x) => x === defaultAccept) &&\n (!acceptStrings.some((x) => x.startsWith('application/vnd.github.')) ||\n acceptStrings.length < 2)\n ) {\n acceptStrings.push(defaultAccept);\n }\n return acceptStrings.join(', ');\n}\n\nconst MAX_GRAPHQL_PAGE_SIZE = 100;\n\ninterface GraphqlPageCacheItem {\n pageLastResizedAt: string;\n pageSize: number;\n}\n\nexport type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;\n\nfunction getGraphqlPageSize(\n fieldName: string,\n defaultPageSize = MAX_GRAPHQL_PAGE_SIZE,\n): number {\n const cache = getCache();\n const graphqlPageCache = cache?.platform?.github\n ?.graphqlPageCache as GraphqlPageCache;\n const cachedRecord = graphqlPageCache?.[fieldName];\n\n if (graphqlPageCache && cachedRecord) {\n logger.debug(\n { fieldName, ...cachedRecord },\n 'GraphQL page size: found cached value',\n );\n\n const oldPageSize = cachedRecord.pageSize;\n\n const now = DateTime.local();\n const then = DateTime.fromISO(cachedRecord.pageLastResizedAt);\n const expiry = then.plus({ hours: 24 });\n if (now > expiry) {\n const newPageSize = Math.min(oldPageSize * 2, MAX_GRAPHQL_PAGE_SIZE);\n if (newPageSize < MAX_GRAPHQL_PAGE_SIZE) {\n const timestamp = now.toISO();\n\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp },\n 'GraphQL page size: expanding',\n );\n\n cachedRecord.pageLastResizedAt = timestamp;\n cachedRecord.pageSize = newPageSize;\n } else {\n logger.debug(\n { fieldName, oldPageSize, newPageSize },\n 'GraphQL page size: expanded to default page size',\n );\n\n delete graphqlPageCache[fieldName];\n }\n\n return newPageSize;\n }\n\n return oldPageSize;\n }\n\n return defaultPageSize;\n}\n\nfunction setGraphqlPageSize(fieldName: string, newPageSize: number): void {\n const oldPageSize = getGraphqlPageSize(fieldName);\n if (newPageSize !== oldPageSize) {\n const now = DateTime.local();\n const pageLastResizedAt = now.toISO();\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp: pageLastResizedAt },\n 'GraphQL page size: shrinking',\n );\n const cache = getCache();\n cache.platform ??= {};\n cache.platform.github ??= {};\n cache.platform.github.graphqlPageCache ??= {};\n const graphqlPageCache = cache.platform.github\n .graphqlPageCache as GraphqlPageCache;\n graphqlPageCache[fieldName] = {\n pageLastResizedAt,\n pageSize: newPageSize,\n };\n }\n}\n\nfunction replaceUrlBase(url: URL, baseUrl: string): URL {\n const relativeUrl = `${url.pathname}${url.search}`;\n return new URL(relativeUrl, baseUrl);\n}\n\nexport class GithubHttp extends Http<GithubHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType = 'github', options?: GithubHttpOptions) {\n super(hostType, options);\n }\n\n protected override processOptions(\n url: URL,\n opts: InternalHttpOptions & GithubHttpOptions,\n ): void {\n if (!opts.token) {\n const authUrl = new URL(url);\n\n if (opts.repository) {\n // set authUrl to https://api.github.com/repos/org/repo or https://gihub.domain.com/api/v3/repos/org/repo\n authUrl.hash = '';\n authUrl.search = '';\n authUrl.pathname = joinUrlParts(\n authUrl.pathname.startsWith('/api/v3') ? '/api/v3' : '',\n 'repos',\n `${opts.repository}`,\n );\n }\n\n let readOnly = opts.readOnly;\n const { method = 'get' } = opts;\n if (\n readOnly === undefined &&\n ['get', 'head'].includes(method.toLowerCase())\n ) {\n readOnly = true;\n }\n const { token } = findMatchingRule(authUrl.toString(), {\n hostType: this.hostType,\n readOnly,\n });\n opts.token = token;\n }\n\n const accept = constructAcceptString(opts.headers?.accept);\n\n opts.headers = {\n ...opts.headers,\n accept,\n };\n }\n\n protected override handleError(\n url: string | URL,\n opts: HttpOptions,\n err: GotLegacyError,\n ): never {\n throw handleGotError(err, url, opts);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GithubHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const httpOptions = options.httpOptions ?? {};\n const resolvedUrl = this.resolveUrl(options.url, httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (httpOptions.paginate) {\n delete httpOptions.cacheProvider;\n // Check if result is paginated\n const pageLimit = httpOptions.pageLimit ?? 10;\n const linkHeader = parseLinkHeader(result?.headers?.link);\n const next = linkHeader?.next;\n if (next?.url && linkHeader?.last?.page) {\n let lastPage = parseInt(linkHeader.last.page, 10);\n if (\n !process.env.RENOVATE_PAGINATE_ALL &&\n httpOptions.paginate !== 'all'\n ) {\n lastPage = Math.min(pageLimit, lastPage);\n }\n const baseUrl = httpOptions.baseUrl ?? this.baseUrl;\n const parsedUrl = new URL(next.url, baseUrl);\n const rebasePagination =\n !!baseUrl &&\n !!process.env.RENOVATE_X_REBASE_PAGINATION_LINKS &&\n // Preserve github.com URLs for use cases like release notes\n parsedUrl.origin !== 'https://api.github.com';\n const firstPageUrl = rebasePagination\n ? replaceUrlBase(parsedUrl, baseUrl)\n : parsedUrl;\n const queue = [...range(2, lastPage)].map(\n (pageNumber) => (): Promise<HttpResponse<T>> => {\n // copy before modifying searchParams\n const nextUrl = new URL(firstPageUrl);\n nextUrl.searchParams.set('page', String(pageNumber));\n return super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n },\n );\n const pages = await p.all(queue);\n if (httpOptions.paginationField && is.plainObject(result.body)) {\n const paginatedResult = result.body[httpOptions.paginationField];\n if (is.array<T>(paginatedResult)) {\n for (const nextPage of pages) {\n if (is.plainObject(nextPage.body)) {\n const nextPageResults =\n nextPage.body[httpOptions.paginationField];\n if (is.array<T>(nextPageResults)) {\n paginatedResult.push(...nextPageResults);\n }\n }\n }\n }\n } else if (is.array<T>(result.body)) {\n for (const nextPage of pages) {\n if (is.array<T>(nextPage.body)) {\n result.body.push(...nextPage.body);\n }\n }\n }\n }\n }\n return result;\n }\n\n public async requestGraphql<T = unknown>(\n query: string,\n options: GraphqlOptions = {},\n ): Promise<GithubGraphqlResponse<T> | null> {\n const path = 'graphql';\n\n const { paginate, count = MAX_GRAPHQL_PAGE_SIZE, cursor = null } = options;\n let { variables } = options;\n if (paginate) {\n variables = {\n ...variables,\n count,\n cursor,\n };\n }\n const body = variables ? { query, variables } : { query };\n\n const opts: GithubHttpOptions = {\n baseUrl: baseUrl.replace('/v3/', '/'), // GHE uses unversioned graphql path\n body,\n headers: { accept: options?.acceptHeader },\n readOnly: options.readOnly,\n };\n if (options.token) {\n opts.token = options.token;\n }\n logger.trace(`Performing Github GraphQL request`);\n\n try {\n const res = await this.postJson<GithubGraphqlResponse<T>>(path, opts);\n return res?.body;\n } catch (err) {\n logger.debug({ err, query, options }, 'Unexpected GraphQL Error');\n if (err instanceof ExternalHostError && count && count > 10) {\n logger.info('Reducing pagination count to workaround graphql errors');\n return null;\n }\n throw handleGotError(err, path, opts);\n }\n }\n\n async queryRepoField<T = Record<string, unknown>>(\n query: string,\n fieldName: string,\n options: GraphqlOptions = {},\n ): Promise<T[]> {\n const result: T[] = [];\n\n const { paginate = true } = options;\n\n let optimalCount: null | number = null;\n let count = getGraphqlPageSize(\n fieldName,\n options.count ?? MAX_GRAPHQL_PAGE_SIZE,\n );\n let limit = options.limit ?? 1000;\n let cursor: string | null = null;\n\n let isIterating = true;\n while (isIterating) {\n const res = await this.requestGraphql<GithubGraphqlRepoData<T>>(query, {\n ...options,\n count: Math.min(count, limit),\n cursor,\n paginate,\n });\n const repositoryData = res?.data?.repository;\n if (\n is.nonEmptyObject(repositoryData) &&\n !is.nullOrUndefined(repositoryData[fieldName])\n ) {\n optimalCount = count;\n\n const {\n nodes = [],\n edges = [],\n pageInfo,\n } = repositoryData[fieldName] as GraphqlPaginatedContent<T>;\n result.push(...nodes);\n result.push(...edges);\n\n limit = Math.max(0, limit - nodes.length - edges.length);\n\n if (limit === 0) {\n isIterating = false;\n } else if (paginate && pageInfo) {\n const { hasNextPage, endCursor } = pageInfo;\n if (hasNextPage && endCursor) {\n cursor = endCursor;\n } else {\n isIterating = false;\n }\n }\n } else {\n count = Math.floor(count / 2);\n if (count === 0) {\n logger.warn({ query, options, res }, 'Error fetching GraphQL nodes');\n isIterating = false;\n }\n }\n\n if (!paginate) {\n isIterating = false;\n }\n }\n\n if (optimalCount && optimalCount < MAX_GRAPHQL_PAGE_SIZE) {\n setGraphqlPageSize(fieldName, optimalCount);\n }\n\n return result;\n }\n\n /**\n * Get the raw text file from a URL.\n * Only use this method to fetch text files.\n *\n * @param url Full API URL, contents path or path inside the repository to the file\n * @param options\n *\n * @example url = 'https://api.github.com/repos/renovatebot/renovate/contents/package.json'\n * @example url = 'renovatebot/renovate/contents/package.json'\n * @example url = 'package.json' & options.repository = 'renovatebot/renovate'\n */\n public async getRawTextFile(\n url: string,\n options: InternalHttpOptions & GithubHttpOptions = {},\n ): Promise<HttpResponse> {\n const newOptions: InternalHttpOptions & GithubHttpOptions = {\n ...options,\n headers: {\n accept: 'application/vnd.github.raw+json',\n },\n };\n\n let newURL = url;\n const httpRegex = regEx(/^https?:\\/\\//);\n if (options.repository && !httpRegex.test(options.repository)) {\n newURL = joinUrlParts(options.repository, 'contents', url);\n }\n\n return await this.getText(newURL, newOptions);\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../lib/util/http/github.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport {\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport { getCache } from '../cache/repository';\nimport { maskToken } from '../mask';\nimport * as p from '../promises';\nimport { range } from '../range';\nimport { regEx } from '../regex';\nimport { joinUrlParts, parseLinkHeader } from '../url';\nimport { findMatchingRule } from './host-rules';\nimport {\n HttpBase,\n type InternalHttpOptions,\n type InternalJsonUnsafeOptions,\n} from './http';\nimport type { GotLegacyError } from './legacy';\nimport type {\n GraphqlOptions,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types';\n\nconst githubBaseUrl = 'https://api.github.com/';\nlet baseUrl = githubBaseUrl;\nexport const setBaseUrl = (url: string): void => {\n baseUrl = url;\n};\n\nexport interface GithubBaseHttpOptions extends HttpOptions {\n repository?: string;\n}\n\nexport interface GithubHttpOptions extends GithubBaseHttpOptions {\n paginate?: boolean | string;\n paginationField?: string;\n pageLimit?: number;\n}\n\ninterface GithubGraphqlRepoData<T = unknown> {\n repository?: T;\n}\n\nexport type GithubGraphqlResponse<T = unknown> =\n | {\n data: T;\n errors?: never;\n }\n | {\n data?: never;\n errors: {\n type?: string;\n message: string;\n }[];\n };\n\nfunction handleGotError(\n err: GotLegacyError,\n url: string | URL,\n opts: GithubBaseHttpOptions,\n): Error {\n const path = url.toString();\n let message = err.message || '';\n const body = err.response?.body;\n if (is.plainObject(body) && 'message' in body) {\n message = String(body.message);\n }\n if (\n err.code === 'ERR_HTTP2_STREAM_ERROR' ||\n err.code === 'ENOTFOUND' ||\n err.code === 'ETIMEDOUT' ||\n err.code === 'EAI_AGAIN' ||\n err.code === 'ECONNRESET'\n ) {\n logger.debug({ err }, 'GitHub failure: RequestError');\n return new ExternalHostError(err, 'github');\n }\n if (err.name === 'ParseError') {\n logger.debug({ err }, '');\n return new ExternalHostError(err, 'github');\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug({ err }, 'GitHub failure: 5xx');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have triggered an abuse detection mechanism')\n ) {\n logger.debug({ err }, 'GitHub failure: abuse detection');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have exceeded a secondary rate limit')\n ) {\n logger.warn({ err }, 'GitHub failure: secondary rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) {\n logger.debug(`Endpoint: ${path}, needs paid GitHub plan`);\n return err;\n }\n if (err.statusCode === 403 && message.includes('rate limit exceeded')) {\n logger.debug({ err }, 'GitHub failure: rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('Resource not accessible by integration')\n ) {\n logger.debug(\n { err },\n 'GitHub failure: Resource not accessible by integration',\n );\n return new Error(PLATFORM_INTEGRATION_UNAUTHORIZED);\n }\n if (err.statusCode === 401 && message.includes('Bad credentials')) {\n const rateLimit = err.headers?.['x-ratelimit-limit'] ?? -1;\n logger.debug(\n {\n token: maskToken(opts.token),\n err,\n },\n 'GitHub failure: Bad credentials',\n );\n if (rateLimit === '60') {\n return new ExternalHostError(err, 'github');\n }\n return new Error(PLATFORM_BAD_CREDENTIALS);\n }\n if (err.statusCode === 422) {\n if (\n message.includes('Review cannot be requested from pull request author')\n ) {\n return err;\n } else if (err.body?.errors?.find((e: any) => e.field === 'milestone')) {\n return err;\n } else if (err.body?.errors?.find((e: any) => e.code === 'invalid')) {\n logger.debug({ err }, 'Received invalid response - aborting');\n return new Error(REPOSITORY_CHANGED);\n } else if (\n err.body?.errors?.find((e: any) =>\n e.message?.startsWith('A pull request already exists'),\n )\n ) {\n return err;\n }\n logger.debug({ err }, '422 Error thrown from GitHub');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 410 &&\n err.body?.message === 'Issues are disabled for this repo'\n ) {\n return err;\n }\n return err;\n}\n\ninterface GraphqlPaginatedContent<T = unknown> {\n nodes: T[];\n edges: T[];\n pageInfo: { hasNextPage: boolean; endCursor: string };\n}\n\nfunction constructAcceptString(input?: any): string {\n const defaultAccept = 'application/vnd.github.v3+json';\n const acceptStrings =\n typeof input === 'string' ? input.split(regEx(/\\s*,\\s*/)) : [];\n\n // TODO: regression of #6736\n if (\n !acceptStrings.some((x) => x === defaultAccept) &&\n (!acceptStrings.some((x) => x.startsWith('application/vnd.github.')) ||\n acceptStrings.length < 2)\n ) {\n acceptStrings.push(defaultAccept);\n }\n return acceptStrings.join(', ');\n}\n\nconst MAX_GRAPHQL_PAGE_SIZE = 100;\n\ninterface GraphqlPageCacheItem {\n pageLastResizedAt: string;\n pageSize: number;\n}\n\nexport type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;\n\nfunction getGraphqlPageSize(\n fieldName: string,\n defaultPageSize = MAX_GRAPHQL_PAGE_SIZE,\n): number {\n const cache = getCache();\n const graphqlPageCache = cache?.platform?.github\n ?.graphqlPageCache as GraphqlPageCache;\n const cachedRecord = graphqlPageCache?.[fieldName];\n\n if (graphqlPageCache && cachedRecord) {\n logger.debug(\n { fieldName, ...cachedRecord },\n 'GraphQL page size: found cached value',\n );\n\n const oldPageSize = cachedRecord.pageSize;\n\n const now = DateTime.local();\n const then = DateTime.fromISO(cachedRecord.pageLastResizedAt);\n const expiry = then.plus({ hours: 24 });\n if (now > expiry) {\n const newPageSize = Math.min(oldPageSize * 2, MAX_GRAPHQL_PAGE_SIZE);\n if (newPageSize < MAX_GRAPHQL_PAGE_SIZE) {\n const timestamp = now.toISO();\n\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp },\n 'GraphQL page size: expanding',\n );\n\n cachedRecord.pageLastResizedAt = timestamp;\n cachedRecord.pageSize = newPageSize;\n } else {\n logger.debug(\n { fieldName, oldPageSize, newPageSize },\n 'GraphQL page size: expanded to default page size',\n );\n\n delete graphqlPageCache[fieldName];\n }\n\n return newPageSize;\n }\n\n return oldPageSize;\n }\n\n return defaultPageSize;\n}\n\nfunction setGraphqlPageSize(fieldName: string, newPageSize: number): void {\n const oldPageSize = getGraphqlPageSize(fieldName);\n if (newPageSize !== oldPageSize) {\n const now = DateTime.local();\n const pageLastResizedAt = now.toISO();\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp: pageLastResizedAt },\n 'GraphQL page size: shrinking',\n );\n const cache = getCache();\n cache.platform ??= {};\n cache.platform.github ??= {};\n cache.platform.github.graphqlPageCache ??= {};\n const graphqlPageCache = cache.platform.github\n .graphqlPageCache as GraphqlPageCache;\n graphqlPageCache[fieldName] = {\n pageLastResizedAt,\n pageSize: newPageSize,\n };\n }\n}\n\nfunction replaceUrlBase(url: URL, baseUrl: string): URL {\n const relativeUrl = `${url.pathname}${url.search}`;\n return new URL(relativeUrl, baseUrl);\n}\n\nexport class GithubHttp extends HttpBase<GithubHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType = 'github', options?: HttpOptions) {\n super(hostType, options);\n }\n\n protected override processOptions(\n url: URL,\n opts: InternalHttpOptions & GithubBaseHttpOptions,\n ): void {\n if (!opts.token) {\n const authUrl = new URL(url);\n\n if (opts.repository) {\n // set authUrl to https://api.github.com/repos/org/repo or https://gihub.domain.com/api/v3/repos/org/repo\n authUrl.hash = '';\n authUrl.search = '';\n authUrl.pathname = joinUrlParts(\n authUrl.pathname.startsWith('/api/v3') ? '/api/v3' : '',\n 'repos',\n `${opts.repository}`,\n );\n }\n\n let readOnly = opts.readOnly;\n const { method = 'get' } = opts;\n if (\n readOnly === undefined &&\n ['get', 'head'].includes(method.toLowerCase())\n ) {\n readOnly = true;\n }\n const { token } = findMatchingRule(authUrl.toString(), {\n hostType: this.hostType,\n readOnly,\n });\n opts.token = token;\n }\n\n const accept = constructAcceptString(opts.headers?.accept);\n\n opts.headers = {\n ...opts.headers,\n accept,\n };\n }\n\n protected override handleError(\n url: string | URL,\n opts: HttpOptions,\n err: GotLegacyError,\n ): never {\n throw handleGotError(err, url, opts);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GithubHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const httpOptions = options.httpOptions ?? {};\n const resolvedUrl = this.resolveUrl(options.url, httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (httpOptions.paginate) {\n delete httpOptions.cacheProvider;\n // Check if result is paginated\n const pageLimit = httpOptions.pageLimit ?? 10;\n const linkHeader = parseLinkHeader(result?.headers?.link);\n const next = linkHeader?.next;\n if (next?.url && linkHeader?.last?.page) {\n let lastPage = parseInt(linkHeader.last.page, 10);\n if (\n !process.env.RENOVATE_PAGINATE_ALL &&\n httpOptions.paginate !== 'all'\n ) {\n lastPage = Math.min(pageLimit, lastPage);\n }\n const baseUrl = httpOptions.baseUrl ?? this.baseUrl;\n const parsedUrl = new URL(next.url, baseUrl);\n const rebasePagination =\n !!baseUrl &&\n !!process.env.RENOVATE_X_REBASE_PAGINATION_LINKS &&\n // Preserve github.com URLs for use cases like release notes\n parsedUrl.origin !== 'https://api.github.com';\n const firstPageUrl = rebasePagination\n ? replaceUrlBase(parsedUrl, baseUrl)\n : parsedUrl;\n const queue = [...range(2, lastPage)].map(\n (pageNumber) => (): Promise<HttpResponse<T>> => {\n // copy before modifying searchParams\n const nextUrl = new URL(firstPageUrl);\n nextUrl.searchParams.set('page', String(pageNumber));\n return super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n },\n );\n const pages = await p.all(queue);\n if (httpOptions.paginationField && is.plainObject(result.body)) {\n const paginatedResult = result.body[httpOptions.paginationField];\n if (is.array<T>(paginatedResult)) {\n for (const nextPage of pages) {\n if (is.plainObject(nextPage.body)) {\n const nextPageResults =\n nextPage.body[httpOptions.paginationField];\n if (is.array<T>(nextPageResults)) {\n paginatedResult.push(...nextPageResults);\n }\n }\n }\n }\n } else if (is.array<T>(result.body)) {\n for (const nextPage of pages) {\n if (is.array<T>(nextPage.body)) {\n result.body.push(...nextPage.body);\n }\n }\n }\n }\n }\n return result;\n }\n\n public async requestGraphql<T = unknown>(\n query: string,\n options: GraphqlOptions = {},\n ): Promise<GithubGraphqlResponse<T> | null> {\n const path = 'graphql';\n\n const { paginate, count = MAX_GRAPHQL_PAGE_SIZE, cursor = null } = options;\n let { variables } = options;\n if (paginate) {\n variables = {\n ...variables,\n count,\n cursor,\n };\n }\n const body = variables ? { query, variables } : { query };\n\n const opts: GithubBaseHttpOptions = {\n baseUrl: baseUrl.replace('/v3/', '/'), // GHE uses unversioned graphql path\n body,\n headers: { accept: options?.acceptHeader },\n readOnly: options.readOnly,\n };\n if (options.token) {\n opts.token = options.token;\n }\n logger.trace(`Performing Github GraphQL request`);\n\n try {\n const res = await this.postJson<GithubGraphqlResponse<T>>(path, opts);\n return res?.body;\n } catch (err) {\n logger.debug({ err, query, options }, 'Unexpected GraphQL Error');\n if (err instanceof ExternalHostError && count && count > 10) {\n logger.info('Reducing pagination count to workaround graphql errors');\n return null;\n }\n throw handleGotError(err, path, opts);\n }\n }\n\n async queryRepoField<T = Record<string, unknown>>(\n query: string,\n fieldName: string,\n options: GraphqlOptions = {},\n ): Promise<T[]> {\n const result: T[] = [];\n\n const { paginate = true } = options;\n\n let optimalCount: null | number = null;\n let count = getGraphqlPageSize(\n fieldName,\n options.count ?? MAX_GRAPHQL_PAGE_SIZE,\n );\n let limit = options.limit ?? 1000;\n let cursor: string | null = null;\n\n let isIterating = true;\n while (isIterating) {\n const res = await this.requestGraphql<GithubGraphqlRepoData<T>>(query, {\n ...options,\n count: Math.min(count, limit),\n cursor,\n paginate,\n });\n const repositoryData = res?.data?.repository;\n if (\n is.nonEmptyObject(repositoryData) &&\n !is.nullOrUndefined(repositoryData[fieldName])\n ) {\n optimalCount = count;\n\n const {\n nodes = [],\n edges = [],\n pageInfo,\n } = repositoryData[fieldName] as GraphqlPaginatedContent<T>;\n result.push(...nodes);\n result.push(...edges);\n\n limit = Math.max(0, limit - nodes.length - edges.length);\n\n if (limit === 0) {\n isIterating = false;\n } else if (paginate && pageInfo) {\n const { hasNextPage, endCursor } = pageInfo;\n if (hasNextPage && endCursor) {\n cursor = endCursor;\n } else {\n isIterating = false;\n }\n }\n } else {\n count = Math.floor(count / 2);\n if (count === 0) {\n logger.warn({ query, options, res }, 'Error fetching GraphQL nodes');\n isIterating = false;\n }\n }\n\n if (!paginate) {\n isIterating = false;\n }\n }\n\n if (optimalCount && optimalCount < MAX_GRAPHQL_PAGE_SIZE) {\n setGraphqlPageSize(fieldName, optimalCount);\n }\n\n return result;\n }\n\n /**\n * Get the raw text file from a URL.\n * Only use this method to fetch text files.\n *\n * @param url Full API URL, contents path or path inside the repository to the file\n * @param options\n *\n * @example url = 'https://api.github.com/repos/renovatebot/renovate/contents/package.json'\n * @example url = 'renovatebot/renovate/contents/package.json'\n * @example url = 'package.json' & options.repository = 'renovatebot/renovate'\n */\n public async getRawTextFile(\n url: string,\n options: InternalHttpOptions & GithubBaseHttpOptions = {},\n ): Promise<HttpResponse> {\n const newOptions: InternalHttpOptions & GithubBaseHttpOptions = {\n ...options,\n headers: {\n accept: 'application/vnd.github.raw+json',\n },\n };\n\n let newURL = url;\n const httpRegex = regEx(/^https?:\\/\\//);\n if (options.repository && !httpRegex.test(options.repository)) {\n newURL = joinUrlParts(options.repository, 'contents', url);\n }\n\n return await this.getText(newURL, newOptions);\n }\n}\n"]}
|
@@ -1,12 +1,11 @@
|
|
1
1
|
import { type RetryObject } from 'got';
|
2
|
-
import type
|
2
|
+
import { HttpBase, type InternalJsonUnsafeOptions } from './http';
|
3
3
|
import type { HttpMethod, HttpOptions, HttpResponse } from './types';
|
4
|
-
import { Http } from '.';
|
5
4
|
export declare const setBaseUrl: (url: string) => void;
|
6
5
|
export interface GitlabHttpOptions extends HttpOptions {
|
7
6
|
paginate?: boolean;
|
8
7
|
}
|
9
|
-
export declare class GitlabHttp extends
|
8
|
+
export declare class GitlabHttp extends HttpBase<GitlabHttpOptions> {
|
10
9
|
protected get baseUrl(): string | undefined;
|
11
10
|
constructor(type?: string, options?: GitlabHttpOptions);
|
12
11
|
protected requestJsonUnsafe<T = unknown>(method: HttpMethod, options: InternalJsonUnsafeOptions<GitlabHttpOptions>): Promise<HttpResponse<T>>;
|
package/dist/util/http/gitlab.js
CHANGED
@@ -7,13 +7,13 @@ const got_1 = require("got");
|
|
7
7
|
const logger_1 = require("../../logger");
|
8
8
|
const external_host_error_1 = require("../../types/errors/external-host-error");
|
9
9
|
const url_1 = require("../url");
|
10
|
-
const
|
10
|
+
const http_1 = require("./http");
|
11
11
|
let baseUrl = 'https://gitlab.com/api/v4/';
|
12
12
|
const setBaseUrl = (url) => {
|
13
13
|
baseUrl = url;
|
14
14
|
};
|
15
15
|
exports.setBaseUrl = setBaseUrl;
|
16
|
-
class GitlabHttp extends
|
16
|
+
class GitlabHttp extends http_1.HttpBase {
|
17
17
|
get baseUrl() {
|
18
18
|
return baseUrl;
|
19
19
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../../lib/util/http/gitlab.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAClC,6BAAqD;AACrD,yCAAsC;AACtC,gFAA2E;AAC3E,gCAAmD;
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../../lib/util/http/gitlab.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { RequestError, type RetryObject } from 'got';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport { parseLinkHeader, parseUrl } from '../url';\nimport { HttpBase, type InternalJsonUnsafeOptions } from './http';\nimport type { HttpMethod, HttpOptions, HttpResponse } from './types';\n\nlet baseUrl = 'https://gitlab.com/api/v4/';\nexport const setBaseUrl = (url: string): void => {\n baseUrl = url;\n};\n\nexport interface GitlabHttpOptions extends HttpOptions {\n paginate?: boolean;\n}\n\nexport class GitlabHttp extends HttpBase<GitlabHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(type = 'gitlab', options?: GitlabHttpOptions) {\n super(type, options);\n }\n\n protected override async requestJsonUnsafe<T = unknown>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GitlabHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const resolvedUrl = this.resolveUrl(options.url, options.httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n opts.httpOptions ??= {};\n opts.httpOptions.throwHttpErrors = true;\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (opts.httpOptions.paginate && is.array(result.body)) {\n // Check if result is paginated\n try {\n const linkHeader = parseLinkHeader(result.headers.link);\n const nextUrl = linkHeader?.next?.url\n ? parseUrl(linkHeader.next.url)\n : null;\n if (nextUrl) {\n if (process.env.GITLAB_IGNORE_REPO_URL) {\n const defaultEndpoint = new URL(baseUrl);\n nextUrl.protocol = defaultEndpoint.protocol;\n nextUrl.host = defaultEndpoint.host;\n }\n\n opts.url = nextUrl;\n\n const nextResult = await this.requestJsonUnsafe<T>(method, opts);\n if (is.array(nextResult.body)) {\n result.body.push(...nextResult.body);\n }\n }\n } catch (err) {\n logger.warn({ err }, 'Pagination error');\n }\n }\n return result;\n }\n\n protected override handleError(\n url: string | URL,\n _httpOptions: HttpOptions,\n err: Error,\n ): never {\n if (err instanceof RequestError && err.response?.statusCode) {\n if (err.response.statusCode === 404) {\n logger.trace({ err }, 'GitLab 404');\n logger.debug({ url }, 'GitLab API 404');\n throw err;\n }\n logger.debug({ err }, 'Gitlab API error');\n if (\n err.response.statusCode === 429 ||\n (err.response.statusCode >= 500 && err.response.statusCode < 600)\n ) {\n throw new ExternalHostError(err, 'gitlab');\n }\n }\n const platformFailureCodes = [\n 'EAI_AGAIN',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'UNABLE_TO_VERIFY_LEAF_SIGNATURE',\n ];\n // TODO: fix test, should be `RequestError`\n if (\n 'code' in err &&\n is.string(err.code) &&\n platformFailureCodes.includes(err.code)\n ) {\n throw new ExternalHostError(err, 'gitlab');\n }\n if (err.name === 'ParseError') {\n throw new ExternalHostError(err, 'gitlab');\n }\n throw err;\n }\n\n protected override calculateRetryDelay(retryObject: RetryObject): number {\n const { error, attemptCount, retryOptions } = retryObject;\n if (\n attemptCount <= retryOptions.limit &&\n error.options.method === 'POST' &&\n error.response?.statusCode === 409 &&\n error.response.rawBody.toString().includes('Resource lock')\n ) {\n const noise = Math.random() * 100;\n return 2 ** (attemptCount - 1) * 1000 + noise;\n }\n\n return super.calculateRetryDelay(retryObject);\n }\n}\n"]}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import './legacy';
|
2
|
+
import type { Options } from 'got';
|
3
|
+
import type { SetRequired } from 'type-fest';
|
4
|
+
import { type HttpRequestStatsDataPoint } from '../stats';
|
5
|
+
import type { GotOptions, HttpResponse } from './types';
|
6
|
+
export { RequestError } from 'got';
|
7
|
+
type QueueStatsData = Pick<HttpRequestStatsDataPoint, 'queueMs'>;
|
8
|
+
export declare function fetch(url: string, options: SetRequired<GotOptions, 'method'>, queueStats: QueueStatsData): Promise<HttpResponse<unknown>>;
|
9
|
+
export declare function stream(url: string, options: Omit<Options, 'isStream'>): NodeJS.ReadableStream;
|
@@ -0,0 +1,54 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.RequestError = void 0;
|
4
|
+
exports.fetch = fetch;
|
5
|
+
exports.stream = stream;
|
6
|
+
const tslib_1 = require("tslib");
|
7
|
+
// TODO: refactor code to remove this (#9651)
|
8
|
+
require("./legacy");
|
9
|
+
const got_1 = tslib_1.__importStar(require("got"));
|
10
|
+
const logger_1 = require("../../logger");
|
11
|
+
const number_1 = require("../number");
|
12
|
+
const stats_1 = require("../stats");
|
13
|
+
const string_1 = require("../string");
|
14
|
+
const hooks_1 = require("./hooks");
|
15
|
+
var got_2 = require("got");
|
16
|
+
Object.defineProperty(exports, "RequestError", { enumerable: true, get: function () { return got_2.RequestError; } });
|
17
|
+
async function fetch(url, options, queueStats) {
|
18
|
+
logger_1.logger.trace({ url, options }, 'got request');
|
19
|
+
let duration = 0;
|
20
|
+
let statusCode = 0;
|
21
|
+
try {
|
22
|
+
// Cheat the TS compiler using `as` to pick a specific overload.
|
23
|
+
// Otherwise it doesn't typecheck.
|
24
|
+
const resp = await (0, got_1.default)(url, { ...options, hooks: hooks_1.hooks });
|
25
|
+
statusCode = resp.statusCode;
|
26
|
+
duration = (0, number_1.coerceNumber)(resp.timings.phases.total, 0);
|
27
|
+
return resp;
|
28
|
+
}
|
29
|
+
catch (error) {
|
30
|
+
if (error instanceof got_1.RequestError) {
|
31
|
+
statusCode = (0, number_1.coerceNumber)(error.response?.statusCode, -1);
|
32
|
+
duration = (0, number_1.coerceNumber)(error.timings?.phases.total, -1);
|
33
|
+
const method = options.method.toUpperCase();
|
34
|
+
const code = (0, string_1.coerceString)(error.code, 'UNKNOWN');
|
35
|
+
const retryCount = (0, number_1.coerceNumber)(error.request?.retryCount, -1);
|
36
|
+
logger_1.logger.debug(`${method} ${url} = (code=${code}, statusCode=${statusCode} retryCount=${retryCount}, duration=${duration})`);
|
37
|
+
}
|
38
|
+
throw error;
|
39
|
+
/* v8 ignore next: 🐛 https://github.com/bcoe/c8/issues/229 */
|
40
|
+
}
|
41
|
+
finally {
|
42
|
+
stats_1.HttpStats.write({
|
43
|
+
method: options.method,
|
44
|
+
url,
|
45
|
+
reqMs: duration,
|
46
|
+
queueMs: queueStats.queueMs,
|
47
|
+
status: statusCode,
|
48
|
+
});
|
49
|
+
}
|
50
|
+
}
|
51
|
+
function stream(url, options) {
|
52
|
+
return got_1.default.stream(url, options);
|
53
|
+
}
|
54
|
+
//# sourceMappingURL=got.js.map
|