diff --git a/packages/libs/src/sdk/api/users/UsersApi.ts b/packages/libs/src/sdk/api/users/UsersApi.ts index 2699cc595d0..c946e888354 100644 --- a/packages/libs/src/sdk/api/users/UsersApi.ts +++ b/packages/libs/src/sdk/api/users/UsersApi.ts @@ -208,7 +208,8 @@ export class UsersApi extends GeneratedUsersApi { } /** - * Downloads the sales the user has made as a CSV file + * Downloads the sales the user has made as a CSV file. + * Similar to generated raw method, but forced response type as blob */ async downloadSalesAsCSVBlob( params: DownloadSalesAsCSVRequest @@ -228,39 +229,22 @@ export class UsersApi extends GeneratedUsersApi { const headerParameters: runtime.HTTPHeaders = {} - if ( - params.encodedDataMessage !== undefined && - params.encodedDataMessage !== null - ) { - headerParameters['Encoded-Data-Message'] = String( - params.encodedDataMessage - ) - } - - if ( - params.encodedDataSignature !== undefined && - params.encodedDataSignature !== null - ) { - headerParameters['Encoded-Data-Signature'] = String( - params.encodedDataSignature - ) - } - - const host = await this.discoveryNodeSelectorService.getSelectedEndpoint() - const path = `/users/{id}/sales/download`.replace( - `{${'id'}}`, - encodeURIComponent(String(params.id)) - ) - const url = `${host}${BASE_PATH}${path}` - const response = await fetch(url, { + const response = await this.request({ + path: `/users/{id}/sales/download`.replace( + `{${'id'}}`, + encodeURIComponent(String(params.id)) + ), method: 'GET', - headers: headerParameters + headers: headerParameters, + query: queryParameters }) - return response.blob() + + return await new runtime.BlobApiResponse(response).value() } /** - * Downloads the purchases the user has made as a CSV file + * Downloads the purchases the user has made as a CSV file. + * Similar to generated raw method, but forced response type as blob */ async downloadPurchasesAsCSVBlob( params: DownloadPurchasesAsCSVRequest @@ -280,39 +264,22 @@ export class UsersApi extends GeneratedUsersApi { const headerParameters: runtime.HTTPHeaders = {} - if ( - params.encodedDataMessage !== undefined && - params.encodedDataMessage !== null - ) { - headerParameters['Encoded-Data-Message'] = String( - params.encodedDataMessage - ) - } - - if ( - params.encodedDataSignature !== undefined && - params.encodedDataSignature !== null - ) { - headerParameters['Encoded-Data-Signature'] = String( - params.encodedDataSignature - ) - } - - const host = await this.discoveryNodeSelectorService.getSelectedEndpoint() - const path = `/users/{id}/purchases/download`.replace( - `{${'id'}}`, - encodeURIComponent(String(params.id)) - ) - const url = `${host}${BASE_PATH}${path}` - const response = await fetch(url, { + const response = await this.request({ + path: `/users/{id}/purchases/download`.replace( + `{${'id'}}`, + encodeURIComponent(String(params.id)) + ), method: 'GET', - headers: headerParameters + headers: headerParameters, + query: queryParameters }) - return response.blob() + + return await new runtime.BlobApiResponse(response).value() } /** * Downloads the USDC withdrawals the user has made as a CSV file + * Similar to generated raw method, but forced response type as blob */ async downloadUSDCWithdrawalsAsCSVBlob( params: DownloadUSDCWithdrawalsAsCSVRequest @@ -325,42 +292,23 @@ export class UsersApi extends GeneratedUsersApi { } const queryParameters: any = {} - if (params.userId !== undefined) { queryParameters.user_id = params.userId } const headerParameters: runtime.HTTPHeaders = {} - if ( - params.encodedDataMessage !== undefined && - params.encodedDataMessage !== null - ) { - headerParameters['Encoded-Data-Message'] = String( - params.encodedDataMessage - ) - } - - if ( - params.encodedDataSignature !== undefined && - params.encodedDataSignature !== null - ) { - headerParameters['Encoded-Data-Signature'] = String( - params.encodedDataSignature - ) - } - - const host = await this.discoveryNodeSelectorService.getSelectedEndpoint() - const path = `/users/{id}/withdrawals/download`.replace( - `{${'id'}}`, - encodeURIComponent(String(params.id)) - ) - const url = `${host}${BASE_PATH}${path}` - const response = await fetch(url, { + const response = await this.request({ + path: `/users/{id}/withdrawals/download`.replace( + `{${'id'}}`, + encodeURIComponent(String(params.id)) + ), method: 'GET', - headers: headerParameters + headers: headerParameters, + query: queryParameters }) - return response.blob() + + return await new runtime.BlobApiResponse(response).value() } /** diff --git a/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.test.ts b/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.test.ts index 0689393000a..a41f7bc61a0 100644 --- a/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.test.ts +++ b/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.test.ts @@ -434,7 +434,9 @@ describe('discoveryNodeSelector', () => { fetch, url: `${HEALTHY_NODE}/v1/full/tracks`, init: {}, - response: new Response(JSON.stringify(data)) + response: new Response(JSON.stringify(data), { + headers: { 'Content-Type': 'application/json' } + }) }) // Force reselection @@ -442,7 +444,9 @@ describe('discoveryNodeSelector', () => { fetch, url: `${HEALTHY_NODE}/v1/full/tracks`, init: {}, - response: new Response(JSON.stringify(data)) + response: new Response(JSON.stringify(data), { + headers: { 'Content-Type': 'application/json' } + }) }) // Is up to date now @@ -496,7 +500,9 @@ describe('discoveryNodeSelector', () => { fetch, url: `${BEHIND_BLOCKDIFF_NODE}/v1/full/tracks`, init: {}, - response: new Response(JSON.stringify(data)) + response: new Response(JSON.stringify(data), { + headers: { 'Content-Type': 'application/json' } + }) }) expect(changeHandler).toHaveBeenCalledWith(HEALTHY_NODE) }) @@ -531,7 +537,9 @@ describe('discoveryNodeSelector', () => { fetch, url: `${BEHIND_BLOCKDIFF_NODE}/v1/full/tracks`, init: {}, - response: new Response(JSON.stringify(data)) + response: new Response(JSON.stringify(data), { + headers: { 'Content-Type': 'application/json' } + }) }) expect(changeHandler).not.toHaveBeenCalled() }) @@ -688,7 +696,9 @@ describe('discoveryNodeSelector', () => { fetch, url: `${BEHIND_BLOCKDIFF_NODE}/v1/full/tracks`, init: {}, - response: new Response(JSON.stringify(data)) + response: new Response(JSON.stringify(data), { + headers: { 'Content-Type': 'application/json' } + }) }) expect(selector.isBehind).toBe(false) }) diff --git a/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.ts b/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.ts index bfd11d3b121..ab194ae7df0 100644 --- a/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.ts +++ b/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.ts @@ -194,6 +194,11 @@ export class DiscoveryNodeSelector implements DiscoveryNodeSelectorService { // This will get the client to pick new discovery providers // if the selected one falls behind, even if requests are succeeding const responseClone = response.clone() + const contentType = responseClone.headers.get('Content-Type') + if (!contentType?.includes('json')) { + return response + } + const data = (await responseClone.json()) as ApiHealthResponseData const { health, reason } = parseApiHealthStatusReason({ data,