Skip to content

Commit

Permalink
feat: [LW-12030] use drep provider active status override proxy (#1620)
Browse files Browse the repository at this point in the history
  • Loading branch information
mchappell authored Dec 27, 2024
1 parent 6b3e2e4 commit c0abea8
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ export const getProviders = async (chainName: Wallet.ChainName): Promise<Wallet.
const { customSubmitTxUrl, featureFlags } = await getBackgroundStorage();
const useWebSocket = !!(featureFlags?.[magic]?.[ExperimentName.WEBSOCKET_API] ?? false);
const useBlockfrostAssetProvider = !!(featureFlags?.[magic]?.[ExperimentName.BLOCKFROST_ASSET_PROVIDER] ?? false);
const useDrepProviderOverrideActiveStatus = !!(
featureFlags?.[magic]?.[ExperimentName.USE_DREP_PROVIDER_OVERRIDE] ?? false
);

return Wallet.createProviders({
axiosAdapter: axiosFetchAdapter,
Expand All @@ -58,7 +61,7 @@ export const getProviders = async (chainName: Wallet.ChainName): Promise<Wallet.
}
},
logger,
experiments: { useWebSocket, useBlockfrostAssetProvider }
experiments: { useWebSocket, useBlockfrostAssetProvider, useDrepProviderOverrideActiveStatus }
});
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ export const getDefaultFeatureFlags = (): FallbackConfiguration => ({
[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 = {
Expand Down Expand Up @@ -38,5 +39,9 @@ export const experiments: ExperimentsConfig = {
[ExperimentName.EXTENSION_STORAGE]: {
value: false,
default: false
},
[ExperimentName.USE_DREP_PROVIDER_OVERRIDE]: {
value: false,
default: false
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
36 changes: 33 additions & 3 deletions packages/cardano/src/wallet/lib/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
TxSubmitProvider,
UtxoProvider
} from '@cardano-sdk/core';
import type { DRepInfo } from '@cardano-sdk/core';

import {
CardanoWsClient,
Expand Down Expand Up @@ -81,6 +82,7 @@ export interface ProvidersConfig {
experiments: {
useWebSocket?: boolean;
useBlockfrostAssetProvider?: boolean;
useDrepProviderOverrideActiveStatus?: boolean;
};
}

Expand All @@ -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;

Expand All @@ -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);

Expand All @@ -133,7 +163,7 @@ export const createProviders = ({
chainHistoryProvider: wsProvider.chainHistoryProvider,
rewardsProvider,
wsProvider,
drepProvider
drepProvider: useDrepProviderOverrideActiveStatus ? drepProviderOverrideActiveStatus : drepProvider
};
}

Expand All @@ -145,7 +175,7 @@ export const createProviders = ({
utxoProvider: utxoHttpProvider(httpProviderConfig),
chainHistoryProvider,
rewardsProvider,
drepProvider
drepProvider: useDrepProviderOverrideActiveStatus ? drepProviderOverrideActiveStatus : drepProvider
};
};

Expand Down

0 comments on commit c0abea8

Please sign in to comment.