Skip to content

Commit 0a9da11

Browse files
fix: wire JumperSolanaProvider into widget via sdkProvider factory
The widget reads chain providers through WalletManagementProviders (isExternalContext=true), not via WidgetConfig.sdkConfig.providers which was silently overridden at runtime and has now been removed from the type. Inject JumperSolanaProvider through the Solana widget-provider's new sdkProvider factory form so the widget supplies getWallet from its wallet-standard context rather than the removed setOptions mutation path. Also stamp a synthetic blockNumber (BigInt(Date.now())) on proxy token balances — the widget's getTokenBalancesWithRetry retries until every TokenAmount has a truthy blockNumber, causing infinite loading otherwise. Remove dead sdkConfig.providers injection in useWidgetConfig and debug console statements added during investigation. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent ad0d5a8 commit 0a9da11

4 files changed

Lines changed: 21 additions & 16 deletions

File tree

src/components/Widgets/variants/base/Widget.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { useWidgetConfig } from '../widgetConfig/useWidgetConfig';
55
import { ClientOnly } from '@/components/ClientOnly';
66

77
export const Widget: FC<WidgetProps> = ({ ctx, type, formRef }) => {
8-
console.log('jumper w1');
98
const { config, isReady } = useWidgetConfig(type, ctx);
109

1110
return (

src/components/Widgets/variants/widgetConfig/useWidgetConfig.tsx

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { AB_TEST_NAME } from '@/const/abtests';
22
import { useABTest } from '@/hooks/useABTest';
3-
import { makeProviders } from '@/utils/instrumentation/lifiSdkConfig';
43
import { useAccount } from '@lifi/wallet-management';
54
import { HiddenUI, type WidgetConfig } from '@lifi/widget';
65
import merge from 'lodash/merge';
@@ -144,13 +143,6 @@ export function useWidgetConfig<T extends WidgetType>(
144143
};
145144
}
146145

147-
baseConfig.sdkConfig = {
148-
...(baseConfig.sdkConfig ?? {}),
149-
providers: makeProviders(),
150-
};
151-
152-
console.error('jumper init baseConfig', baseConfig);
153-
154146
return baseConfig;
155147
}, [
156148
sharedBase,

src/providers/WalletProvider/WalletProvider.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { SolanaProvider as SolanaWidgetProvider } from '@lifi/widget-provider-so
2828
import { BitcoinProvider as BitcoinWidgetProvider } from '@lifi/widget-provider-bitcoin';
2929
import { SuiProvider as SuiWidgetProvider } from '@lifi/widget-provider-sui';
3030
import { TronProvider as TronWidgetProvider } from '@lifi/widget-provider-tron';
31+
import { JumperSolanaProvider } from '@/utils/instrumentation/JumperSolanaProvider';
3132
import { defaultWalletConnectConfig } from '@/config/walletConnect';
3233
import { defaultCoinbaseConfig } from '@/config/coinbase';
3334
import { defaultMetaMaskConfig } from '@/config/metaMask';
@@ -40,7 +41,9 @@ export const widgetProviders = [
4041
porto: true,
4142
baseAccount: true,
4243
}),
43-
SolanaWidgetProvider(),
44+
SolanaWidgetProvider({
45+
sdkProvider: ({ getWallet }) => JumperSolanaProvider({ getWallet }),
46+
}),
4447
BitcoinWidgetProvider(),
4548
SuiWidgetProvider(),
4649
TronWidgetProvider({

src/utils/instrumentation/JumperSolanaProvider.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import type { SDKProvider, Token, TokenAmount } from '@lifi/sdk';
2-
import type { SolanaSDKProvider } from '@lifi/sdk-provider-solana';
2+
import type {
3+
SolanaProviderOptions,
4+
SolanaSDKProvider,
5+
} from '@lifi/sdk-provider-solana';
36
import { SolanaProvider } from '@lifi/sdk-provider-solana';
47
import { partition } from 'lodash';
58
import { getProxyTokenBalances } from '@/app/lib/getProxyTokenBalances';
@@ -18,29 +21,37 @@ async function jumperGetBalance(
1821
return [];
1922
}
2023

24+
// Synthetic, truthy slot stamp: @lifi/widget keeps balances in a loading
25+
// state until every TokenAmount has a non-zero blockNumber. We have no real
26+
// Solana slot for proxy tokens, so we mint a wall-clock millis value -
27+
// always truthy, monotonically increasing, obviously synthetic in logs.
28+
// See widget's `getTokenBalancesWithRetry` for implementation details.
29+
const blockNumber = BigInt(Date.now());
30+
2131
try {
2232
const responseTokens = await getProxyTokenBalances({
2333
address: walletAddress,
2434
chainType: 'SVM',
2535
tokens: tokens.map((t) => t.address),
2636
});
2737

28-
console.log('jumper GetBalance responseTokens', responseTokens);
29-
3038
return responseTokens.map(
3139
({ amount, ...token }): TokenAmount => ({
3240
...token,
3341
amount: amount != null ? BigInt(amount) : 0n,
42+
blockNumber,
3443
}),
3544
);
3645
} catch (error) {
3746
console.warn('jumperGetBalance failed, returning zero balances', error);
38-
return tokens.map((t): TokenAmount => ({ ...t, amount: 0n }));
47+
return tokens.map((t): TokenAmount => ({ ...t, amount: 0n, blockNumber }));
3948
}
4049
}
4150

42-
export const JumperSolanaProvider = (): SolanaSDKProvider => {
43-
const lifiProvider = SolanaProvider();
51+
export const JumperSolanaProvider = (
52+
options?: SolanaProviderOptions,
53+
): SolanaSDKProvider => {
54+
const lifiProvider = SolanaProvider(options);
4455
const lifiGetBalance: GetSolanaBalance = lifiProvider.getBalance;
4556

4657
const overrideGetBalances: GetSolanaBalance = async (

0 commit comments

Comments
 (0)