From 0297381625f36e771d59a3f7d937f3a71fcdeb6a Mon Sep 17 00:00:00 2001 From: Chalenge Masekera <5385518+chalenge@users.noreply.github.com> Date: Wed, 17 Apr 2024 14:58:12 -0400 Subject: [PATCH] add rate limiting headers to error response Signed-off-by: Chalenge Masekera <5385518+chalenge@users.noreply.github.com> --- package-lock.json | 6 +++--- src/clients/baseClient.ts | 12 +++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0f1578eabd..d8fb164a84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5602,9 +5602,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "dependencies": { "chownr": "^2.0.0", diff --git a/src/clients/baseClient.ts b/src/clients/baseClient.ts index 2578332b53..c0132b82b9 100644 --- a/src/clients/baseClient.ts +++ b/src/clients/baseClient.ts @@ -8,6 +8,8 @@ import type { RequestConfig } from '../requestConfig'; const STRICT_GDPR_FLAG = 'x-atlassian-force-account-id'; const ATLASSIAN_TOKEN_CHECK_FLAG = 'X-Atlassian-Token'; const ATLASSIAN_TOKEN_CHECK_NOCHECK_VALUE = 'no-check'; +const RETRY_AFTER = 'Retry-After'; +const RATE_LIMIT_RESET = 'X-RateLimit-Reset'; export class BaseClient implements Client { private instance: AxiosInstance; @@ -133,11 +135,19 @@ export class BaseClient implements Client { } private buildErrorHandlingResponse(error: AxiosError) { + const headers = error.response?.headers ?? {}; + const responseData = error.response?.data ?? {}; + const data = typeof responseData === 'object' ? responseData : { data: responseData }; + return { code: error.code, + headers: this.removeUndefinedProperties({ + [RETRY_AFTER]: headers[RETRY_AFTER], + [RATE_LIMIT_RESET]: headers[RATE_LIMIT_RESET], + }), status: error.response?.status, statusText: error.response?.statusText, - ...(error.response?.data ?? {}), + ...data, }; } }