From 75b51a87b6b392616a28cde39fb30de0918b5e1f Mon Sep 17 00:00:00 2001 From: secustor Date: Thu, 25 Jan 2024 19:32:54 +0100 Subject: [PATCH] return interface instead of boolean Signed-off-by: secustor --- .../src/reading/GithubUrlReader.ts | 2 +- packages/integration/api-report.md | 8 +++++++- .../src/github/GithubIntegration.test.ts | 6 ++++-- .../src/github/GithubIntegration.ts | 19 ++++++++++++------- packages/integration/src/index.ts | 1 + packages/integration/src/types.ts | 9 +++++++++ 6 files changed, 34 insertions(+), 11 deletions(-) diff --git a/packages/backend-common/src/reading/GithubUrlReader.ts b/packages/backend-common/src/reading/GithubUrlReader.ts index edd5269649..462821a20f 100644 --- a/packages/backend-common/src/reading/GithubUrlReader.ts +++ b/packages/backend-common/src/reading/GithubUrlReader.ts @@ -333,7 +333,7 @@ export class GithubUrlReader implements UrlReader { // GitHub returns a 403 response with a couple of headers indicating rate // limit status. See more in the GitHub docs: // https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting - if (this.integration.isRateLimited(response)) { + if (this.integration.parseRateLimitInfo(response).isRateLimited) { message += ' (rate limit exceeded)'; } diff --git a/packages/integration/api-report.md b/packages/integration/api-report.md index f830437cf1..07b4f7d012 100644 --- a/packages/integration/api-report.md +++ b/packages/integration/api-report.md @@ -568,7 +568,7 @@ export class GithubIntegration implements ScmIntegration { // (undocumented) static factory: ScmIntegrationsFactory; // (undocumented) - isRateLimited(response: ConsumedResponse): boolean; + parseRateLimitInfo(response: ConsumedResponse): RateLimitInfo; // (undocumented) resolveEditUrl(url: string): string; // (undocumented) @@ -697,6 +697,12 @@ export type PersonalAccessTokenCredential = AzureCredentialBase & { personalAccessToken: string; }; +// @public +export interface RateLimitInfo { + // (undocumented) + isRateLimited: boolean; +} + // @public export function readAwsS3IntegrationConfig( config: Config, diff --git a/packages/integration/src/github/GithubIntegration.test.ts b/packages/integration/src/github/GithubIntegration.test.ts index 36c802da52..70f1c4a16c 100644 --- a/packages/integration/src/github/GithubIntegration.test.ts +++ b/packages/integration/src/github/GithubIntegration.test.ts @@ -95,11 +95,13 @@ describe('GithubIntegration', () => { const headers = new Headers({ 'x-ratelimit-remaining': ratelimitRemaining, }); - const result = integration.isRateLimited({ + const result = integration.parseRateLimitInfo({ status, headers, } as Response); - expect(expected).toBe(result); + expect(result).toMatchObject({ + isRateLimited: expected, + }); }, ); }); diff --git a/packages/integration/src/github/GithubIntegration.ts b/packages/integration/src/github/GithubIntegration.ts index 7a6ac5675d..880a2bed21 100644 --- a/packages/integration/src/github/GithubIntegration.ts +++ b/packages/integration/src/github/GithubIntegration.ts @@ -15,7 +15,11 @@ */ import { basicIntegrations, defaultScmResolveUrl } from '../helpers'; -import { ScmIntegration, ScmIntegrationsFactory } from '../types'; +import { + RateLimitInfo, + ScmIntegration, + ScmIntegrationsFactory, +} from '../types'; import { GithubIntegrationConfig, readGithubIntegrationConfigs, @@ -67,12 +71,13 @@ export class GithubIntegration implements ScmIntegration { return replaceGithubUrlType(url, 'edit'); } - isRateLimited(response: ConsumedResponse): boolean { - return ( - response.status === 429 || - (response.status === 403 && - response.headers.get('x-ratelimit-remaining') === '0') - ); + parseRateLimitInfo(response: ConsumedResponse): RateLimitInfo { + return { + isRateLimited: + response.status === 429 || + (response.status === 403 && + response.headers.get('x-ratelimit-remaining') === '0'), + }; } } diff --git a/packages/integration/src/index.ts b/packages/integration/src/index.ts index 5738da3da0..700d7dc67c 100644 --- a/packages/integration/src/index.ts +++ b/packages/integration/src/index.ts @@ -37,5 +37,6 @@ export type { ScmIntegration, ScmIntegrationsFactory, ScmIntegrationsGroup, + RateLimitInfo, } from './types'; export type { ScmIntegrationRegistry } from './registry'; diff --git a/packages/integration/src/types.ts b/packages/integration/src/types.ts index cb4b78eb7c..0f0fca942e 100644 --- a/packages/integration/src/types.ts +++ b/packages/integration/src/types.ts @@ -108,3 +108,12 @@ export interface ScmIntegrationsGroup { export type ScmIntegrationsFactory = (options: { config: Config; }) => ScmIntegrationsGroup; + +/** + * Encapsulates information about the RateLimit state + * + * @public + */ +export interface RateLimitInfo { + isRateLimited: boolean; +}