From c0abea8211189f704c2ee6827fd8cd22efa12e1a Mon Sep 17 00:00:00 2001 From: Michael Chappell <7581002+mchappell@users.noreply.github.com> Date: Fri, 27 Dec 2024 21:47:22 +0000 Subject: [PATCH] feat: [LW-12030] use drep provider active status override proxy (#1620) --- .../src/lib/scripts/background/config.ts | 5 ++- .../providers/ExperimentsProvider/config.ts | 7 +++- .../providers/ExperimentsProvider/types.ts | 3 +- .../client/PostHogClient.ts | 3 +- packages/cardano/src/wallet/lib/providers.ts | 36 +++++++++++++++++-- 5 files changed, 47 insertions(+), 7 deletions(-) diff --git a/apps/browser-extension-wallet/src/lib/scripts/background/config.ts b/apps/browser-extension-wallet/src/lib/scripts/background/config.ts index 20ac32585e..d6fa63c539 100644 --- a/apps/browser-extension-wallet/src/lib/scripts/background/config.ts +++ b/apps/browser-extension-wallet/src/lib/scripts/background/config.ts @@ -45,6 +45,9 @@ export const getProviders = async (chainName: Wallet.ChainName): Promise ({ [ExperimentName.SHARED_WALLETS]: false, [ExperimentName.WEBSOCKET_API]: false, [ExperimentName.BLOCKFROST_ASSET_PROVIDER]: false, - [ExperimentName.EXTENSION_STORAGE]: false + [ExperimentName.EXTENSION_STORAGE]: false, + [ExperimentName.USE_DREP_PROVIDER_OVERRIDE]: false }); export const experiments: ExperimentsConfig = { @@ -38,5 +39,9 @@ export const experiments: ExperimentsConfig = { [ExperimentName.EXTENSION_STORAGE]: { value: false, default: false + }, + [ExperimentName.USE_DREP_PROVIDER_OVERRIDE]: { + value: false, + default: false } }; diff --git a/apps/browser-extension-wallet/src/providers/ExperimentsProvider/types.ts b/apps/browser-extension-wallet/src/providers/ExperimentsProvider/types.ts index 60c6257005..0baf38c098 100644 --- a/apps/browser-extension-wallet/src/providers/ExperimentsProvider/types.ts +++ b/apps/browser-extension-wallet/src/providers/ExperimentsProvider/types.ts @@ -12,7 +12,8 @@ export enum ExperimentName { SHARED_WALLETS = 'shared-wallets', WEBSOCKET_API = 'websocket-api', BLOCKFROST_ASSET_PROVIDER = 'blockfrost-asset-provider', - EXTENSION_STORAGE = 'extension-storage' + EXTENSION_STORAGE = 'extension-storage', + USE_DREP_PROVIDER_OVERRIDE = 'use-drep-provider-override' } interface FeatureFlag { diff --git a/apps/browser-extension-wallet/src/providers/PostHogClientProvider/client/PostHogClient.ts b/apps/browser-extension-wallet/src/providers/PostHogClientProvider/client/PostHogClient.ts index d9863d10f8..8f3ce5e373 100644 --- a/apps/browser-extension-wallet/src/providers/PostHogClientProvider/client/PostHogClient.ts +++ b/apps/browser-extension-wallet/src/providers/PostHogClientProvider/client/PostHogClient.ts @@ -32,7 +32,8 @@ type FeatureFlag = | 'use-switch-to-nami-mode' | 'websocket-api' | ExperimentName.BLOCKFROST_ASSET_PROVIDER - | ExperimentName.EXTENSION_STORAGE; + | ExperimentName.EXTENSION_STORAGE + | ExperimentName.USE_DREP_PROVIDER_OVERRIDE; type FeatureFlags = { [key in FeatureFlag]: boolean; diff --git a/packages/cardano/src/wallet/lib/providers.ts b/packages/cardano/src/wallet/lib/providers.ts index e0bf452b61..e5b4404e17 100644 --- a/packages/cardano/src/wallet/lib/providers.ts +++ b/packages/cardano/src/wallet/lib/providers.ts @@ -15,6 +15,7 @@ import { TxSubmitProvider, UtxoProvider } from '@cardano-sdk/core'; +import type { DRepInfo } from '@cardano-sdk/core'; import { CardanoWsClient, @@ -81,6 +82,7 @@ export interface ProvidersConfig { experiments: { useWebSocket?: boolean; useBlockfrostAssetProvider?: boolean; + useDrepProviderOverrideActiveStatus?: boolean; }; } @@ -94,7 +96,7 @@ export const createProviders = ({ axiosAdapter, env: { baseCardanoServicesUrl: baseUrl, customSubmitTxUrl, blockfrostConfig }, logger, - experiments: { useBlockfrostAssetProvider, useWebSocket } + experiments: { useBlockfrostAssetProvider, useWebSocket, useDrepProviderOverrideActiveStatus } }: ProvidersConfig): WalletProvidersDependencies => { if (!logger) logger = console; @@ -112,6 +114,34 @@ export const createProviders = ({ const txSubmitProvider = createTxSubmitProvider(httpProviderConfig, customSubmitTxUrl); const drepProvider = new BlockfrostDRepProvider(blockfrostClient, logger); + // Temporary proxy for drepProvider to overwrite the 'active' property to always be true + const drepProviderOverrideActiveStatus = new Proxy(drepProvider, { + get(target, property, receiver) { + const original = Reflect.get(target, property, receiver); + if (property === 'getDRepInfo') { + return async function (...args: any[]) { + const response: DRepInfo = await original.apply(target, args); + return { + ...response, + active: true + }; + }; + } + + if (property === 'getDRepsInfo') { + return async function (...args: any[]) { + const response: DRepInfo[] = await original.apply(target, args); + return response.map((drepInfo) => ({ + ...drepInfo, + active: true + })); + }; + } + + return original; + } + }); + if (useWebSocket) { const url = new URL(baseUrl); @@ -133,7 +163,7 @@ export const createProviders = ({ chainHistoryProvider: wsProvider.chainHistoryProvider, rewardsProvider, wsProvider, - drepProvider + drepProvider: useDrepProviderOverrideActiveStatus ? drepProviderOverrideActiveStatus : drepProvider }; } @@ -145,7 +175,7 @@ export const createProviders = ({ utxoProvider: utxoHttpProvider(httpProviderConfig), chainHistoryProvider, rewardsProvider, - drepProvider + drepProvider: useDrepProviderOverrideActiveStatus ? drepProviderOverrideActiveStatus : drepProvider }; };