From 4b20d75ae8d7910aa2621bf387689117269c8cb3 Mon Sep 17 00:00:00 2001 From: danielailie Date: Mon, 11 Nov 2024 11:08:01 +0200 Subject: [PATCH 1/4] Set userAgent only on network and update message --- src/networkProviders/apiNetworkProvider.ts | 6 ++++-- src/networkProviders/proxyNetworkProvider.ts | 6 ++++-- src/networkProviders/userAgent.ts | 20 ++++++++++++++------ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/networkProviders/apiNetworkProvider.ts b/src/networkProviders/apiNetworkProvider.ts index 177f3ab3..b0e092c3 100644 --- a/src/networkProviders/apiNetworkProvider.ts +++ b/src/networkProviders/apiNetworkProvider.ts @@ -18,7 +18,7 @@ import { DefinitionOfFungibleTokenOnNetwork, DefinitionOfTokenCollectionOnNetwor import { FungibleTokenOfAccountOnNetwork, NonFungibleTokenOfAccountOnNetwork } from "./tokens"; import { TransactionOnNetwork, prepareTransactionForBroadcasting } from "./transactions"; import { TransactionStatus } from "./transactionStatus"; -import { extendUserAgent } from "./userAgent"; +import { extendUserAgent, isBackend } from "./userAgent"; // TODO: Find & remove duplicate code between "ProxyNetworkProvider" and "ApiNetworkProvider". export class ApiNetworkProvider implements INetworkProvider { @@ -34,7 +34,9 @@ export class ApiNetworkProvider implements INetworkProvider { this.config = { ...defaultAxiosConfig, ...config }; this.backingProxyNetworkProvider = new ProxyNetworkProvider(url, proxyConfig); this.axios = getAxios(); - extendUserAgent(this.userAgentPrefix, this.config); + if (isBackend()) { + extendUserAgent(this.userAgentPrefix, this.config); + } } private getProxyConfig(config: NetworkProviderConfig | undefined) { diff --git a/src/networkProviders/proxyNetworkProvider.ts b/src/networkProviders/proxyNetworkProvider.ts index 3762f0b7..505ca908 100644 --- a/src/networkProviders/proxyNetworkProvider.ts +++ b/src/networkProviders/proxyNetworkProvider.ts @@ -15,7 +15,7 @@ import { DefinitionOfFungibleTokenOnNetwork, DefinitionOfTokenCollectionOnNetwor import { FungibleTokenOfAccountOnNetwork, NonFungibleTokenOfAccountOnNetwork } from "./tokens"; import { TransactionOnNetwork, prepareTransactionForBroadcasting } from "./transactions"; import { TransactionStatus } from "./transactionStatus"; -import { extendUserAgent } from "./userAgent"; +import { extendUserAgent, isBackend } from "./userAgent"; // TODO: Find & remove duplicate code between "ProxyNetworkProvider" and "ApiNetworkProvider". export class ProxyNetworkProvider implements INetworkProvider { @@ -28,7 +28,9 @@ export class ProxyNetworkProvider implements INetworkProvider { this.url = url; this.config = { ...defaultAxiosConfig, ...config }; this.axios = getAxios(); - extendUserAgent(this.userAgentPrefix, this.config); + if (isBackend()) { + extendUserAgent(this.userAgentPrefix, this.config); + } } async getNetworkConfig(): Promise { diff --git a/src/networkProviders/userAgent.ts b/src/networkProviders/userAgent.ts index e102f114..41b6a55b 100644 --- a/src/networkProviders/userAgent.ts +++ b/src/networkProviders/userAgent.ts @@ -1,19 +1,27 @@ import { AxiosHeaders } from "axios"; -import { NetworkProviderConfig } from "./networkProviderConfig"; import { UnknownClientName } from "./constants"; +import { NetworkProviderConfig } from "./networkProviderConfig"; export function extendUserAgent(userAgentPrefix: string, config: NetworkProviderConfig) { if (!config.headers) { - config.headers = new AxiosHeaders({}) - }; + config.headers = new AxiosHeaders({}); + } if (!config.clientName) { - console.log("Can you please provide the client name of the application that uses the SDK? It will be used for metrics.") + console.log( + "We recommend providing the `clientName` when instantiating a NetworkProvider (e.g. ProxyNetworkProvider, ApiNetworkProvider). This information will be used for metrics collection and improving our services.", + ); } const headers = AxiosHeaders.from(config.headers as AxiosHeaders).normalize(true); const resolvedClientName = config.clientName || UnknownClientName; - const currentUserAgent = headers.hasUserAgent() ? headers.getUserAgent() : ''; - const newUserAgent = currentUserAgent ? `${currentUserAgent} ${userAgentPrefix}/${resolvedClientName}` : `${userAgentPrefix}/${resolvedClientName}`; + const currentUserAgent = headers.hasUserAgent() ? headers.getUserAgent() : ""; + const newUserAgent = currentUserAgent + ? `${currentUserAgent} ${userAgentPrefix}/${resolvedClientName}` + : `${userAgentPrefix}/${resolvedClientName}`; headers.setUserAgent(newUserAgent, true); } + +export function isBackend(): boolean { + return typeof window === "undefined"; +} From 28eed72aa2a332b18802c8925112cd747fe13270 Mon Sep 17 00:00:00 2001 From: danielailie Date: Mon, 11 Nov 2024 11:08:35 +0200 Subject: [PATCH 2/4] Bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a4489a3..c2db39f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@multiversx/sdk-core", - "version": "13.14.0", + "version": "13.14.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@multiversx/sdk-core", - "version": "13.14.0", + "version": "13.14.1", "license": "MIT", "dependencies": { "@multiversx/sdk-transaction-decoder": "1.0.2", diff --git a/package.json b/package.json index 7782f9de..07643a15 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-core", - "version": "13.14.0", + "version": "13.14.1", "description": "MultiversX SDK for JavaScript and TypeScript", "author": "MultiversX", "homepage": "https://multiversx.com", From 3c99fb70380497343c960870407af2103acc38b2 Mon Sep 17 00:00:00 2001 From: danielailie Date: Mon, 11 Nov 2024 12:03:02 +0200 Subject: [PATCH 3/4] Bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2db39f5..ccfde954 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@multiversx/sdk-core", - "version": "13.14.1", + "version": "13.14.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@multiversx/sdk-core", - "version": "13.14.1", + "version": "13.14.2", "license": "MIT", "dependencies": { "@multiversx/sdk-transaction-decoder": "1.0.2", diff --git a/package.json b/package.json index 07643a15..681ff735 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-core", - "version": "13.14.1", + "version": "13.14.2", "description": "MultiversX SDK for JavaScript and TypeScript", "author": "MultiversX", "homepage": "https://multiversx.com", From 3b4235677c7f6f9e0d520f0e140b0b15f46855b4 Mon Sep 17 00:00:00 2001 From: danielailie Date: Mon, 11 Nov 2024 12:10:57 +0200 Subject: [PATCH 4/4] Extract if in function --- src/networkProviders/apiNetworkProvider.ts | 6 ++---- src/networkProviders/proxyNetworkProvider.ts | 6 ++---- src/networkProviders/userAgent.ts | 10 ++++++++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/networkProviders/apiNetworkProvider.ts b/src/networkProviders/apiNetworkProvider.ts index b0e092c3..bf9cf685 100644 --- a/src/networkProviders/apiNetworkProvider.ts +++ b/src/networkProviders/apiNetworkProvider.ts @@ -18,7 +18,7 @@ import { DefinitionOfFungibleTokenOnNetwork, DefinitionOfTokenCollectionOnNetwor import { FungibleTokenOfAccountOnNetwork, NonFungibleTokenOfAccountOnNetwork } from "./tokens"; import { TransactionOnNetwork, prepareTransactionForBroadcasting } from "./transactions"; import { TransactionStatus } from "./transactionStatus"; -import { extendUserAgent, isBackend } from "./userAgent"; +import { extendUserAgentIfBackend } from "./userAgent"; // TODO: Find & remove duplicate code between "ProxyNetworkProvider" and "ApiNetworkProvider". export class ApiNetworkProvider implements INetworkProvider { @@ -34,9 +34,7 @@ export class ApiNetworkProvider implements INetworkProvider { this.config = { ...defaultAxiosConfig, ...config }; this.backingProxyNetworkProvider = new ProxyNetworkProvider(url, proxyConfig); this.axios = getAxios(); - if (isBackend()) { - extendUserAgent(this.userAgentPrefix, this.config); - } + extendUserAgentIfBackend(this.userAgentPrefix, this.config); } private getProxyConfig(config: NetworkProviderConfig | undefined) { diff --git a/src/networkProviders/proxyNetworkProvider.ts b/src/networkProviders/proxyNetworkProvider.ts index 505ca908..5b205975 100644 --- a/src/networkProviders/proxyNetworkProvider.ts +++ b/src/networkProviders/proxyNetworkProvider.ts @@ -15,7 +15,7 @@ import { DefinitionOfFungibleTokenOnNetwork, DefinitionOfTokenCollectionOnNetwor import { FungibleTokenOfAccountOnNetwork, NonFungibleTokenOfAccountOnNetwork } from "./tokens"; import { TransactionOnNetwork, prepareTransactionForBroadcasting } from "./transactions"; import { TransactionStatus } from "./transactionStatus"; -import { extendUserAgent, isBackend } from "./userAgent"; +import { extendUserAgentIfBackend } from "./userAgent"; // TODO: Find & remove duplicate code between "ProxyNetworkProvider" and "ApiNetworkProvider". export class ProxyNetworkProvider implements INetworkProvider { @@ -28,9 +28,7 @@ export class ProxyNetworkProvider implements INetworkProvider { this.url = url; this.config = { ...defaultAxiosConfig, ...config }; this.axios = getAxios(); - if (isBackend()) { - extendUserAgent(this.userAgentPrefix, this.config); - } + extendUserAgentIfBackend(this.userAgentPrefix, this.config); } async getNetworkConfig(): Promise { diff --git a/src/networkProviders/userAgent.ts b/src/networkProviders/userAgent.ts index 41b6a55b..bea3d1cb 100644 --- a/src/networkProviders/userAgent.ts +++ b/src/networkProviders/userAgent.ts @@ -2,7 +2,13 @@ import { AxiosHeaders } from "axios"; import { UnknownClientName } from "./constants"; import { NetworkProviderConfig } from "./networkProviderConfig"; -export function extendUserAgent(userAgentPrefix: string, config: NetworkProviderConfig) { +export function extendUserAgentIfBackend(userAgentPrefix: string, config: NetworkProviderConfig) { + if (isBackend()) { + extendUserAgent(userAgentPrefix, config); + } +} + +function extendUserAgent(userAgentPrefix: string, config: NetworkProviderConfig) { if (!config.headers) { config.headers = new AxiosHeaders({}); } @@ -22,6 +28,6 @@ export function extendUserAgent(userAgentPrefix: string, config: NetworkProvider headers.setUserAgent(newUserAgent, true); } -export function isBackend(): boolean { +function isBackend(): boolean { return typeof window === "undefined"; }