From cbac5fde11d6677648ca28b46bb75d6d7a871077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=A8=20Audrey=20=E2=9C=A8?= Date: Tue, 30 Jul 2024 15:39:49 -0400 Subject: [PATCH] [PM-10259] improve forwarder rpc error handling (#10330) * only accept `application/json` responses --- libs/common/src/tools/integration/rpc/rest-client.ts | 3 ++- .../core/src/engine/rpc/create-forwarding-address.spec.ts | 2 +- .../core/src/engine/rpc/create-forwarding-address.ts | 4 +--- .../generator/core/src/engine/rpc/get-account-id.spec.ts | 1 + libs/tools/generator/core/src/engine/rpc/get-account-id.ts | 1 + 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libs/common/src/tools/integration/rpc/rest-client.ts b/libs/common/src/tools/integration/rpc/rest-client.ts index 05abb047d38..c9096d0ce1d 100644 --- a/libs/common/src/tools/integration/rpc/rest-client.ts +++ b/libs/common/src/tools/integration/rpc/rest-client.ts @@ -48,7 +48,7 @@ export class RestClient { const message = await this.tryGetErrorMessage(response); const key = message ? "forwaderInvalidTokenWithMessage" : "forwaderInvalidToken"; return [key, message]; - } else if (response.status === 429 || response.status >= 500) { + } else if (response.status >= 400) { const message = await this.tryGetErrorMessage(response); const key = message ? "forwarderError" : "forwarderUnknownError"; return [key, message]; @@ -59,6 +59,7 @@ export class RestClient { const body = (await response.text()) ?? ""; // nullish continues processing; false returns undefined + // FIXME: inspect content-type header to determine extraction process const error = this.tryFindErrorAsJson(body) ?? this.tryFindErrorAsText(body) ?? response.statusText; diff --git a/libs/tools/generator/core/src/engine/rpc/create-forwarding-address.spec.ts b/libs/tools/generator/core/src/engine/rpc/create-forwarding-address.spec.ts index d522b5f38ed..b0459e16a79 100644 --- a/libs/tools/generator/core/src/engine/rpc/create-forwarding-address.spec.ts +++ b/libs/tools/generator/core/src/engine/rpc/create-forwarding-address.spec.ts @@ -37,7 +37,7 @@ describe("CreateForwardingAddressRpc", () => { expect(result.cache).toEqual("no-store"); expect(result.method).toEqual("POST"); expect(result.headers.get("Content-Type")).toEqual("application/json"); - expect(result.headers.get("X-Requested-With")).toEqual("XMLHttpRequest"); + expect(result.headers.get("Accept")).toEqual("application/json"); }); it("provides the request and context to the rpc definition functions", () => { diff --git a/libs/tools/generator/core/src/engine/rpc/create-forwarding-address.ts b/libs/tools/generator/core/src/engine/rpc/create-forwarding-address.ts index 210a7a1b21c..4d4a5ba2ded 100644 --- a/libs/tools/generator/core/src/engine/rpc/create-forwarding-address.ts +++ b/libs/tools/generator/core/src/engine/rpc/create-forwarding-address.ts @@ -29,10 +29,8 @@ export class CreateForwardingAddressRpc< method: "POST", headers: new Headers({ ...token, - // X-Requested-With header required by some endpoints for - // detailed error descriptions (see #5565) - "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/json", + Accept: "application/json", }), body, }); diff --git a/libs/tools/generator/core/src/engine/rpc/get-account-id.spec.ts b/libs/tools/generator/core/src/engine/rpc/get-account-id.spec.ts index 1772bf9901c..6bbfb691d8d 100644 --- a/libs/tools/generator/core/src/engine/rpc/get-account-id.spec.ts +++ b/libs/tools/generator/core/src/engine/rpc/get-account-id.spec.ts @@ -32,6 +32,7 @@ describe("GetAccountIdRpc", () => { expect(result.cache).toEqual("no-store"); expect(result.method).toEqual("GET"); expect(result.headers.get("Content-Type")).toEqual("application/json"); + expect(result.headers.get("Accept")).toEqual("application/json"); }); it("provides the request and context to the rpc definition functions", () => { diff --git a/libs/tools/generator/core/src/engine/rpc/get-account-id.ts b/libs/tools/generator/core/src/engine/rpc/get-account-id.ts index 4e90df77ff0..17bb24e4781 100644 --- a/libs/tools/generator/core/src/engine/rpc/get-account-id.ts +++ b/libs/tools/generator/core/src/engine/rpc/get-account-id.ts @@ -33,6 +33,7 @@ export class GetAccountIdRpc< headers: new Headers({ ...token, "Content-Type": "application/json", + Accept: "application/json", }), });