From 2d4126877e6db11a23f556163316b15a6ebc36f5 Mon Sep 17 00:00:00 2001 From: fang377 Date: Tue, 22 Jul 2025 15:04:57 +1000 Subject: [PATCH 01/30] Migrate to v2 sanction API and add token info --- .../sdk/src/riskAssessment/riskAssessment.ts | 30 ++++++++++++++++--- packages/checkout/sdk/src/sdk.ts | 10 +++++-- .../src/functions/checkSanctionedAddresses.ts | 3 +- .../widgets/add-tokens/views/AddTokens.tsx | 22 +++++++++++++- .../widgets/bridge/components/BridgeForm.tsx | 18 +++++++++-- .../src/widgets/on-ramp/views/OnRampMain.tsx | 9 +++++- .../sale/context/SaleContextProvider.tsx | 2 ++ .../src/widgets/swap/SwapWidget.tsx | 9 +++++- 8 files changed, 90 insertions(+), 13 deletions(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts index cee58705d9..83839fadfb 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts @@ -22,9 +22,17 @@ export type AssessmentResult = { }; }; +// New type for v2 request items +type SanctionsCheckV2RequestItem = { + address?: string; + amount?: string; + token_addr?: string; +}; + export const fetchRiskAssessment = async ( addresses: string[], config: CheckoutConfiguration, + tokenData?: Array<{ address: string; tokenAddr?: string; amount?: string }>, ): Promise => { const result = Object.fromEntries( addresses.map((address) => [address.toLowerCase(), { sanctioned: false }]), @@ -41,11 +49,25 @@ export const fetchRiskAssessment = async ( try { const riskLevels = riskConfig?.levels.map((l) => l.toLowerCase()) ?? []; + // Prepare v2 request payload + const requestPayload: SanctionsCheckV2RequestItem[] = addresses.map((address) => { + const item: SanctionsCheckV2RequestItem = { address }; + + // Add token and amount data if available + if (tokenData) { + const tokenInfo = tokenData.find(t => t.address.toLowerCase() === address.toLowerCase()); + if (tokenInfo) { + if (tokenInfo.tokenAddr) item.token_addr = tokenInfo.tokenAddr; + if (tokenInfo.amount) item.amount = tokenInfo.amount; + } + } + + return item; + }); + const response = await axios.post( - `${IMMUTABLE_API_BASE_URL[config.environment]}/v1/sanctions/check`, - { - addresses, - }, + `${IMMUTABLE_API_BASE_URL[config.environment]}/v2/sanctions/check`, + requestPayload, ); for (const assessment of response.data) { diff --git a/packages/checkout/sdk/src/sdk.ts b/packages/checkout/sdk/src/sdk.ts index e290c037aa..409119d8a8 100644 --- a/packages/checkout/sdk/src/sdk.ts +++ b/packages/checkout/sdk/src/sdk.ts @@ -226,12 +226,16 @@ export class Checkout { } /** - * Fetches the risk assessment for the given addresses. + * Fetches risk assessment for the given addresses. * @param {string[]} addresses - The addresses to assess. + * @param {Array<{address: string; tokenAddr?: string; amount?: string}>} [tokenData] - Optional token and amount data for each address. * @returns {Promise} - A promise that resolves to the risk assessment result. */ - public async getRiskAssessment(addresses: string[]): Promise { - return await fetchRiskAssessment(addresses, this.config); + public async getRiskAssessment( + addresses: string[], + tokenData?: Array<{ address: string; tokenAddr?: string; amount?: string }>, + ): Promise { + return await fetchRiskAssessment(addresses, this.config, tokenData); } /** diff --git a/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts b/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts index 598e305e33..f278af18af 100644 --- a/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts +++ b/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts @@ -7,7 +7,8 @@ import { export const checkSanctionedAddresses = async ( addresses: string[], config: CheckoutConfiguration, + tokenData?: Array<{ address: string; tokenAddr?: string; amount?: string }>, ): Promise => { - const result = await fetchRiskAssessment(addresses, config); + const result = await fetchRiskAssessment(addresses, config, tokenData); return isAddressSanctioned(result, undefined); }; diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index d075b0bd24..2e706b5494 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -425,7 +425,15 @@ export function AddTokens({ const sendRequestOnRampEvent = async () => { if ( toAddress - && (await checkSanctionedAddresses([toAddress], checkout.config)) + && (await checkSanctionedAddresses( + [toAddress], + checkout.config, + selectedToken?.address && selectedAmount ? [{ + address: toAddress, + tokenAddr: selectedToken.address, + amount: selectedAmount, + }] : undefined, + )) ) { viewDispatch({ payload: { @@ -502,6 +510,18 @@ export function AddTokens({ && (await checkSanctionedAddresses( [fromAddress, toAddress], checkout.config, + selectedToken?.address && selectedAmount ? [ + { + address: fromAddress, + tokenAddr: selectedToken.address, + amount: selectedAmount, + }, + { + address: toAddress, + tokenAddr: selectedToken.address, + amount: selectedAmount, + }, + ] : undefined, )) ) { viewDispatch({ diff --git a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx index 510e7e10f4..ad998a3dcc 100644 --- a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx +++ b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx @@ -188,7 +188,21 @@ export function BridgeForm(props: BridgeFormProps) { addresses.push(to.walletAddress); } - const assessment = await fetchRiskAssessment(addresses, checkout.config); + // Prepare token data for v2 API if available + const tokenData = formToken && formAmount ? [ + { + address: from.walletAddress, + tokenAddr: formToken.token.address, + amount: formAmount, + }, + ...(to.walletAddress.toLowerCase() !== from.walletAddress.toLowerCase() ? [{ + address: to.walletAddress, + tokenAddr: formToken.token.address, + amount: formAmount, + }] : []), + ] : undefined; + + const assessment = await fetchRiskAssessment(addresses, checkout.config, tokenData); bridgeDispatch({ payload: { type: BridgeActions.SET_RISK_ASSESSMENT, @@ -196,7 +210,7 @@ export function BridgeForm(props: BridgeFormProps) { }, }); })(); - }, [checkout, from, to]); + }, [checkout, from, to, formToken, formAmount]); const canFetchEstimates = (silently: boolean): boolean => { if (Number.isNaN(parseFloat(formAmount))) return false; diff --git a/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx b/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx index 7d30a41dee..6db0e692b7 100644 --- a/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx +++ b/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx @@ -231,7 +231,14 @@ export function OnRampMain({ (async () => { const walletAddress = await (await provider.getSigner()).getAddress(); - const assessment = await fetchRiskAssessment([walletAddress], checkout.config); + // Prepare token data for v2 API if available + const tokenData = tokenAddress && tokenAmount ? [{ + address: walletAddress, + tokenAddr: tokenAddress, + amount: tokenAmount, + }] : undefined; + + const assessment = await fetchRiskAssessment([walletAddress], checkout.config, tokenData); if (isAddressSanctioned(assessment)) { viewDispatch({ diff --git a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx index 0e934136f6..544e8f3fc6 100644 --- a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx +++ b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx @@ -257,6 +257,8 @@ export function SaleContextProvider(props: { return; } + // For sale context, we don't have specific token/amount data at this point + // as it's determined during the sale flow, so we pass undefined for tokenData const assessment = await fetchRiskAssessment([address], checkout.config); setRiskAssessment(assessment); })(); diff --git a/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx b/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx index 5555bf1a06..19bf2e2265 100644 --- a/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx +++ b/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx @@ -205,7 +205,14 @@ export default function SwapWidget({ return; } - const assessment = await fetchRiskAssessment([address], checkout.config); + // Prepare token data for v2 API if available + const tokenData = fromTokenAddress && amount ? [{ + address, + tokenAddr: fromTokenAddress, + amount, + }] : undefined; + + const assessment = await fetchRiskAssessment([address], checkout.config, tokenData); swapDispatch({ payload: { type: SwapActions.SET_RISK_ASSESSMENT, From ea811254c965511a1bf08eec6fb47f8ac977d323 Mon Sep 17 00:00:00 2001 From: fang377 Date: Tue, 22 Jul 2025 15:21:14 +1000 Subject: [PATCH 02/30] Fix linter --- packages/checkout/sdk/src/riskAssessment/riskAssessment.ts | 6 +++--- .../widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts index 83839fadfb..2cd0edf045 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts @@ -52,16 +52,16 @@ export const fetchRiskAssessment = async ( // Prepare v2 request payload const requestPayload: SanctionsCheckV2RequestItem[] = addresses.map((address) => { const item: SanctionsCheckV2RequestItem = { address }; - + // Add token and amount data if available if (tokenData) { - const tokenInfo = tokenData.find(t => t.address.toLowerCase() === address.toLowerCase()); + const tokenInfo = tokenData.find((t) => t.address.toLowerCase() === address.toLowerCase()); if (tokenInfo) { if (tokenInfo.tokenAddr) item.token_addr = tokenInfo.tokenAddr; if (tokenInfo.amount) item.amount = tokenInfo.amount; } } - + return item; }); diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 2e706b5494..7134836580 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -426,7 +426,7 @@ export function AddTokens({ if ( toAddress && (await checkSanctionedAddresses( - [toAddress], + [toAddress], checkout.config, selectedToken?.address && selectedAmount ? [{ address: toAddress, From e54975241db56d88458b748a3b8fcd539fc9314d Mon Sep 17 00:00:00 2001 From: fang377 Date: Tue, 22 Jul 2025 15:33:32 +1000 Subject: [PATCH 03/30] Fix test --- packages/checkout/sdk/src/connect/connect.test.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/checkout/sdk/src/connect/connect.test.ts b/packages/checkout/sdk/src/connect/connect.test.ts index e0051217f5..f99fe17e93 100644 --- a/packages/checkout/sdk/src/connect/connect.test.ts +++ b/packages/checkout/sdk/src/connect/connect.test.ts @@ -7,6 +7,9 @@ import { checkIsWalletConnected, connectSite, requestPermissions } from './conne import { WrappedBrowserProvider, WalletAction, WalletProviderName } from '../types'; import { CheckoutErrorType } from '../errors'; import { createProvider } from '../provider'; +import { RemoteConfigFetcher } from '../config/remoteConfigFetcher'; + +jest.mock('../config/remoteConfigFetcher'); let windowSpy: any; @@ -26,6 +29,13 @@ describe('connect', () => { addEventListener: jest.fn(), removeEventListener: jest.fn(), })); + + // Mock RemoteConfigFetcher to prevent test failures + (RemoteConfigFetcher as unknown as jest.Mock).mockReturnValue({ + getConfig: jest.fn().mockResolvedValue({ + segmentPublishableKey: 'test-key', + }), + }); }); afterEach(() => { From 2a332f35614f853bdf044e71116bdca50909833c Mon Sep 17 00:00:00 2001 From: fang377 Date: Thu, 24 Jul 2025 15:11:46 +1000 Subject: [PATCH 04/30] Add token info in sale context --- .../widgets/sale/context/SaleContextProvider.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx index 544e8f3fc6..d1b5c1b8eb 100644 --- a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx +++ b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx @@ -257,12 +257,18 @@ export function SaleContextProvider(props: { return; } - // For sale context, we don't have specific token/amount data at this point - // as it's determined during the sale flow, so we pass undefined for tokenData - const assessment = await fetchRiskAssessment([address], checkout.config); + // Prepare token data for v2 API if available + // Use selectedCurrency and orderQuote to get token address and amount when they exist + const tokenData = selectedCurrency?.address && orderQuote.totalAmount[selectedCurrency.name] ? [{ + address, + tokenAddr: selectedCurrency.address, + amount: orderQuote.totalAmount[selectedCurrency.name].amount.toString(), + }] : undefined; + + const assessment = await fetchRiskAssessment([address], checkout.config, tokenData); setRiskAssessment(assessment); })(); - }, [checkout, provider]); + }, [checkout, provider, selectedCurrency, orderQuote]); const { sign: signOrder, From 0a18d90768a6770b5847444f45c9fb19513212cb Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 09:44:23 +1000 Subject: [PATCH 05/30] Mark token info as non-optional in v2 sanction --- .../sdk/src/riskAssessment/riskAssessment.ts | 28 ++++++++++--------- packages/checkout/sdk/src/sdk.ts | 4 +-- .../src/functions/checkSanctionedAddresses.ts | 2 +- .../widgets/add-tokens/views/AddTokens.tsx | 20 ++++++------- .../widgets/bridge/components/BridgeForm.tsx | 14 +++++----- .../src/widgets/on-ramp/views/OnRampMain.tsx | 10 +++---- .../sale/context/SaleContextProvider.tsx | 12 ++++---- .../src/widgets/swap/SwapWidget.tsx | 10 +++---- 8 files changed, 52 insertions(+), 48 deletions(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts index 2cd0edf045..ad172e52bb 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts @@ -24,15 +24,15 @@ export type AssessmentResult = { // New type for v2 request items type SanctionsCheckV2RequestItem = { - address?: string; - amount?: string; - token_addr?: string; + address: string; + amount: string; + token_addr: string; }; export const fetchRiskAssessment = async ( addresses: string[], config: CheckoutConfiguration, - tokenData?: Array<{ address: string; tokenAddr?: string; amount?: string }>, + tokenData: Array<{ address: string; tokenAddr: string; amount: string }>, ): Promise => { const result = Object.fromEntries( addresses.map((address) => [address.toLowerCase(), { sanctioned: false }]), @@ -51,15 +51,17 @@ export const fetchRiskAssessment = async ( // Prepare v2 request payload const requestPayload: SanctionsCheckV2RequestItem[] = addresses.map((address) => { - const item: SanctionsCheckV2RequestItem = { address }; - - // Add token and amount data if available - if (tokenData) { - const tokenInfo = tokenData.find((t) => t.address.toLowerCase() === address.toLowerCase()); - if (tokenInfo) { - if (tokenInfo.tokenAddr) item.token_addr = tokenInfo.tokenAddr; - if (tokenInfo.amount) item.amount = tokenInfo.amount; - } + const item: SanctionsCheckV2RequestItem = { + address, + token_addr: '', + amount: '0' + }; + + // Add token and amount data + const tokenInfo = tokenData.find((t) => t.address.toLowerCase() === address.toLowerCase()); + if (tokenInfo) { + item.token_addr = tokenInfo.tokenAddr; + item.amount = tokenInfo.amount; } return item; diff --git a/packages/checkout/sdk/src/sdk.ts b/packages/checkout/sdk/src/sdk.ts index 409119d8a8..da94f1cce6 100644 --- a/packages/checkout/sdk/src/sdk.ts +++ b/packages/checkout/sdk/src/sdk.ts @@ -228,12 +228,12 @@ export class Checkout { /** * Fetches risk assessment for the given addresses. * @param {string[]} addresses - The addresses to assess. - * @param {Array<{address: string; tokenAddr?: string; amount?: string}>} [tokenData] - Optional token and amount data for each address. + * @param {Array<{address: string; tokenAddr: string; amount: string}>} tokenData - Required token and amount data for each address. * @returns {Promise} - A promise that resolves to the risk assessment result. */ public async getRiskAssessment( addresses: string[], - tokenData?: Array<{ address: string; tokenAddr?: string; amount?: string }>, + tokenData: Array<{ address: string; tokenAddr: string; amount: string }>, ): Promise { return await fetchRiskAssessment(addresses, this.config, tokenData); } diff --git a/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts b/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts index f278af18af..59bb759ebe 100644 --- a/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts +++ b/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts @@ -7,7 +7,7 @@ import { export const checkSanctionedAddresses = async ( addresses: string[], config: CheckoutConfiguration, - tokenData?: Array<{ address: string; tokenAddr?: string; amount?: string }>, + tokenData: Array<{ address: string; tokenAddr: string; amount: string }>, ): Promise => { const result = await fetchRiskAssessment(addresses, config, tokenData); return isAddressSanctioned(result, undefined); diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 7134836580..42874d8f71 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -428,11 +428,11 @@ export function AddTokens({ && (await checkSanctionedAddresses( [toAddress], checkout.config, - selectedToken?.address && selectedAmount ? [{ + [{ address: toAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, - }] : undefined, + tokenAddr: selectedToken?.address || '', + amount: selectedAmount || '0', + }], )) ) { viewDispatch({ @@ -510,18 +510,18 @@ export function AddTokens({ && (await checkSanctionedAddresses( [fromAddress, toAddress], checkout.config, - selectedToken?.address && selectedAmount ? [ + [ { address: fromAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, + tokenAddr: selectedToken?.address || '', + amount: selectedAmount || '0', }, { address: toAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, + tokenAddr: selectedToken?.address || '', + amount: selectedAmount || '0', }, - ] : undefined, + ], )) ) { viewDispatch({ diff --git a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx index ad998a3dcc..da9721a91c 100644 --- a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx +++ b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx @@ -188,19 +188,19 @@ export function BridgeForm(props: BridgeFormProps) { addresses.push(to.walletAddress); } - // Prepare token data for v2 API if available - const tokenData = formToken && formAmount ? [ + // Prepare token data for v2 API - now required + const tokenData = [ { address: from.walletAddress, - tokenAddr: formToken.token.address, - amount: formAmount, + tokenAddr: formToken?.token.address || '', + amount: formAmount || '0', }, ...(to.walletAddress.toLowerCase() !== from.walletAddress.toLowerCase() ? [{ address: to.walletAddress, - tokenAddr: formToken.token.address, - amount: formAmount, + tokenAddr: formToken?.token.address || '', + amount: formAmount || '0', }] : []), - ] : undefined; + ]; const assessment = await fetchRiskAssessment(addresses, checkout.config, tokenData); bridgeDispatch({ diff --git a/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx b/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx index 6db0e692b7..7c803e7ca1 100644 --- a/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx +++ b/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx @@ -231,12 +231,12 @@ export function OnRampMain({ (async () => { const walletAddress = await (await provider.getSigner()).getAddress(); - // Prepare token data for v2 API if available - const tokenData = tokenAddress && tokenAmount ? [{ + // Prepare token data for v2 API - now required + const tokenData = [{ address: walletAddress, - tokenAddr: tokenAddress, - amount: tokenAmount, - }] : undefined; + tokenAddr: tokenAddress || '', + amount: tokenAmount || '0', + }]; const assessment = await fetchRiskAssessment([walletAddress], checkout.config, tokenData); diff --git a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx index d1b5c1b8eb..0d8aba56ad 100644 --- a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx +++ b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx @@ -257,13 +257,15 @@ export function SaleContextProvider(props: { return; } - // Prepare token data for v2 API if available + // Prepare token data for v2 API - now required // Use selectedCurrency and orderQuote to get token address and amount when they exist - const tokenData = selectedCurrency?.address && orderQuote.totalAmount[selectedCurrency.name] ? [{ + const tokenData = [{ address, - tokenAddr: selectedCurrency.address, - amount: orderQuote.totalAmount[selectedCurrency.name].amount.toString(), - }] : undefined; + tokenAddr: selectedCurrency?.address || '', + amount: (selectedCurrency?.address && orderQuote.totalAmount[selectedCurrency.name]) + ? orderQuote.totalAmount[selectedCurrency.name].amount.toString() + : '0', + }]; const assessment = await fetchRiskAssessment([address], checkout.config, tokenData); setRiskAssessment(assessment); diff --git a/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx b/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx index 19bf2e2265..373384397d 100644 --- a/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx +++ b/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx @@ -205,12 +205,12 @@ export default function SwapWidget({ return; } - // Prepare token data for v2 API if available - const tokenData = fromTokenAddress && amount ? [{ + // Prepare token data for v2 API - now required + const tokenData = [{ address, - tokenAddr: fromTokenAddress, - amount, - }] : undefined; + tokenAddr: fromTokenAddress || '', + amount: amount || '0', + }]; const assessment = await fetchRiskAssessment([address], checkout.config, tokenData); swapDispatch({ From 389da8a01b0d9c7bef52e27b4a841d2771647978 Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 09:49:10 +1000 Subject: [PATCH 06/30] Fix linting --- packages/checkout/sdk/src/riskAssessment/riskAssessment.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts index ad172e52bb..a88ab07cb3 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts @@ -51,10 +51,10 @@ export const fetchRiskAssessment = async ( // Prepare v2 request payload const requestPayload: SanctionsCheckV2RequestItem[] = addresses.map((address) => { - const item: SanctionsCheckV2RequestItem = { + const item: SanctionsCheckV2RequestItem = { address, token_addr: '', - amount: '0' + amount: '0', }; // Add token and amount data From 26ac3b5189983ebf3bc1ad6636fe108dede6554c Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 09:59:26 +1000 Subject: [PATCH 07/30] Fix test --- .../sdk/src/riskAssessment/riskAssessment.test.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts index 49bee4460f..554a38738e 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts @@ -45,6 +45,10 @@ describe('riskAssessment', () => { const sanctions = await fetchRiskAssessment( [address1, address2], mockedConfig, + [ + { address: address1, tokenAddr: '0xtest1', amount: '100' }, + { address: address2, tokenAddr: '0xtest2', amount: '200' }, + ], ); expect(sanctions[address1.toLowerCase()]).toEqual({ sanctioned: false }); @@ -62,13 +66,14 @@ describe('riskAssessment', () => { const sanctions = await fetchRiskAssessment( [address1], mockedConfig, + [{ address: address1, tokenAddr: '0xtest', amount: '100' }], ); expect(sanctions[address1.toLowerCase()]).toEqual({ sanctioned: false }); expect(mockedAxios.post).not.toHaveBeenCalled(); }); - it('should return default risk assessment not found for address', async () => { + it('should return default risk assessment on empty response', async () => { mockRemoteConfig.mockResolvedValue({ enabled: true, levels: ['severe'], @@ -85,6 +90,7 @@ describe('riskAssessment', () => { const sanctions = await fetchRiskAssessment( [address1], mockedConfig, + [{ address: address1, tokenAddr: '0xtest', amount: '100' }], ); expect(sanctions[address1.toLowerCase()]).toEqual({ sanctioned: false }); From 754805f4258d505b5593d97266f7c788b11cc214 Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 10:21:15 +1000 Subject: [PATCH 08/30] Fix linting --- .../src/widgets/sale/context/SaleContextProvider.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx index 0d8aba56ad..c750c8aadb 100644 --- a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx +++ b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx @@ -262,8 +262,8 @@ export function SaleContextProvider(props: { const tokenData = [{ address, tokenAddr: selectedCurrency?.address || '', - amount: (selectedCurrency?.address && orderQuote.totalAmount[selectedCurrency.name]) - ? orderQuote.totalAmount[selectedCurrency.name].amount.toString() + amount: (selectedCurrency?.address && orderQuote.totalAmount[selectedCurrency.name]) + ? orderQuote.totalAmount[selectedCurrency.name].amount.toString() : '0', }]; From 094778bf00c4e31d2637f0d5c06049274429883d Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 12:50:07 +1000 Subject: [PATCH 09/30] Avoid invalid token info --- .../src/riskAssessment/riskAssessment.test.ts | 5 +-- .../sdk/src/riskAssessment/riskAssessment.ts | 37 ++++++++++--------- packages/checkout/sdk/src/sdk.ts | 10 ++--- .../src/functions/checkSanctionedAddresses.ts | 5 +-- .../widgets/add-tokens/views/AddTokens.tsx | 23 ++++++------ .../widgets/bridge/components/BridgeForm.tsx | 22 +++++------ .../src/widgets/on-ramp/views/OnRampMain.tsx | 13 ++++--- .../sale/context/SaleContextProvider.tsx | 16 ++++---- .../src/widgets/swap/SwapWidget.tsx | 15 ++++---- 9 files changed, 69 insertions(+), 77 deletions(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts index 554a38738e..fb1608e61f 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts @@ -43,7 +43,6 @@ describe('riskAssessment', () => { mockedAxios.post.mockResolvedValueOnce(mockRiskResponse); const sanctions = await fetchRiskAssessment( - [address1, address2], mockedConfig, [ { address: address1, tokenAddr: '0xtest1', amount: '100' }, @@ -64,9 +63,8 @@ describe('riskAssessment', () => { const address1 = '0x1234567890'; const sanctions = await fetchRiskAssessment( - [address1], mockedConfig, - [{ address: address1, tokenAddr: '0xtest', amount: '100' }], + [{ address: address1 }], // Test without token data when disabled ); expect(sanctions[address1.toLowerCase()]).toEqual({ sanctioned: false }); @@ -88,7 +86,6 @@ describe('riskAssessment', () => { mockedAxios.post.mockResolvedValueOnce(mockRiskResponse); const sanctions = await fetchRiskAssessment( - [address1], mockedConfig, [{ address: address1, tokenAddr: '0xtest', amount: '100' }], ); diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts index a88ab07cb3..8a4f0b5d55 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts @@ -25,17 +25,23 @@ export type AssessmentResult = { // New type for v2 request items type SanctionsCheckV2RequestItem = { address: string; - amount: string; - token_addr: string; + amount?: string; + token_addr?: string; +}; + +// Simplified assessment data - no redundant address info +type AssessmentData = { + address: string; + tokenAddr?: string; + amount?: string; }; export const fetchRiskAssessment = async ( - addresses: string[], config: CheckoutConfiguration, - tokenData: Array<{ address: string; tokenAddr: string; amount: string }>, + assessmentData: AssessmentData[], ): Promise => { const result = Object.fromEntries( - addresses.map((address) => [address.toLowerCase(), { sanctioned: false }]), + assessmentData.map((data) => [data.address.toLowerCase(), { sanctioned: false }]), ); const riskConfig = (await config.remote.getConfig('riskAssessment')) as @@ -49,19 +55,14 @@ export const fetchRiskAssessment = async ( try { const riskLevels = riskConfig?.levels.map((l) => l.toLowerCase()) ?? []; - // Prepare v2 request payload - const requestPayload: SanctionsCheckV2RequestItem[] = addresses.map((address) => { - const item: SanctionsCheckV2RequestItem = { - address, - token_addr: '', - amount: '0', - }; - - // Add token and amount data - const tokenInfo = tokenData.find((t) => t.address.toLowerCase() === address.toLowerCase()); - if (tokenInfo) { - item.token_addr = tokenInfo.tokenAddr; - item.amount = tokenInfo.amount; + // Prepare v2 request payload - only include token data when meaningful + const requestPayload: SanctionsCheckV2RequestItem[] = assessmentData.map((data) => { + const item: SanctionsCheckV2RequestItem = { address: data.address }; + + // Only add token data if we have meaningful values (not empty strings or zero amounts) + if (data.tokenAddr && data.amount && data.amount !== '0') { + item.token_addr = data.tokenAddr; + item.amount = data.amount; } return item; diff --git a/packages/checkout/sdk/src/sdk.ts b/packages/checkout/sdk/src/sdk.ts index da94f1cce6..cca34b8a07 100644 --- a/packages/checkout/sdk/src/sdk.ts +++ b/packages/checkout/sdk/src/sdk.ts @@ -226,16 +226,14 @@ export class Checkout { } /** - * Fetches risk assessment for the given addresses. - * @param {string[]} addresses - The addresses to assess. - * @param {Array<{address: string; tokenAddr: string; amount: string}>} tokenData - Required token and amount data for each address. + * Fetches risk assessment for the given assessment data. + * @param {Array<{address: string; tokenAddr?: string; amount?: string}>} assessmentData - Assessment data with addresses and optional token context. * @returns {Promise} - A promise that resolves to the risk assessment result. */ public async getRiskAssessment( - addresses: string[], - tokenData: Array<{ address: string; tokenAddr: string; amount: string }>, + assessmentData: Array<{ address: string; tokenAddr?: string; amount?: string }>, ): Promise { - return await fetchRiskAssessment(addresses, this.config, tokenData); + return await fetchRiskAssessment(this.config, assessmentData); } /** diff --git a/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts b/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts index 59bb759ebe..2f046d80ca 100644 --- a/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts +++ b/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts @@ -5,10 +5,9 @@ import { } from '@imtbl/checkout-sdk'; export const checkSanctionedAddresses = async ( - addresses: string[], config: CheckoutConfiguration, - tokenData: Array<{ address: string; tokenAddr: string; amount: string }>, + assessmentData: Array<{ address: string; tokenAddr?: string; amount?: string }>, ): Promise => { - const result = await fetchRiskAssessment(addresses, config, tokenData); + const result = await fetchRiskAssessment(config, assessmentData); return isAddressSanctioned(result, undefined); }; diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 42874d8f71..557a91427c 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -426,13 +426,12 @@ export function AddTokens({ if ( toAddress && (await checkSanctionedAddresses( - [toAddress], checkout.config, - [{ + selectedToken?.address && selectedAmount ? [{ address: toAddress, - tokenAddr: selectedToken?.address || '', - amount: selectedAmount || '0', - }], + tokenAddr: selectedToken.address, + amount: selectedAmount, + }] : [{ address: toAddress }], )) ) { viewDispatch({ @@ -508,19 +507,21 @@ export function AddTokens({ fromAddress && toAddress && (await checkSanctionedAddresses( - [fromAddress, toAddress], checkout.config, - [ + selectedToken?.address && selectedAmount ? [ { address: fromAddress, - tokenAddr: selectedToken?.address || '', - amount: selectedAmount || '0', + tokenAddr: selectedToken.address, + amount: selectedAmount, }, { address: toAddress, - tokenAddr: selectedToken?.address || '', - amount: selectedAmount || '0', + tokenAddr: selectedToken.address, + amount: selectedAmount, }, + ] : [ + { address: fromAddress }, + { address: toAddress }, ], )) ) { diff --git a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx index da9721a91c..59ef3ffa2d 100644 --- a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx +++ b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx @@ -178,31 +178,27 @@ export function BridgeForm(props: BridgeFormProps) { ); useEffect(() => { - if (!checkout || !from || !to) { + // Only run risk assessment when we have meaningful token and amount selection + if (!checkout || !from || !to || !formToken?.token.address || !formAmount) { return; } (async () => { - const addresses = [from.walletAddress]; - if (to.walletAddress.toLowerCase() !== from.walletAddress.toLowerCase()) { - addresses.push(to.walletAddress); - } - - // Prepare token data for v2 API - now required - const tokenData = [ + // We have meaningful token data - call enhanced risk assessment + const assessmentData = [ { address: from.walletAddress, - tokenAddr: formToken?.token.address || '', - amount: formAmount || '0', + tokenAddr: formToken.token.address, + amount: formAmount, }, ...(to.walletAddress.toLowerCase() !== from.walletAddress.toLowerCase() ? [{ address: to.walletAddress, - tokenAddr: formToken?.token.address || '', - amount: formAmount || '0', + tokenAddr: formToken.token.address, + amount: formAmount, }] : []), ]; - const assessment = await fetchRiskAssessment(addresses, checkout.config, tokenData); + const assessment = await fetchRiskAssessment(checkout.config, assessmentData); bridgeDispatch({ payload: { type: BridgeActions.SET_RISK_ASSESSMENT, diff --git a/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx b/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx index 7c803e7ca1..a9dddb2d1f 100644 --- a/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx +++ b/packages/checkout/widgets-lib/src/widgets/on-ramp/views/OnRampMain.tsx @@ -224,21 +224,22 @@ export function OnRampMain({ }; useEffect(() => { - if (!checkout || !provider) return; + // Only run risk assessment when we have meaningful token and amount data + if (!checkout || !provider || !tokenAddress || !tokenAmount) return; let userWalletAddress = ''; (async () => { const walletAddress = await (await provider.getSigner()).getAddress(); - // Prepare token data for v2 API - now required - const tokenData = [{ + // We have meaningful token data - call enhanced risk assessment + const assessmentData = [{ address: walletAddress, - tokenAddr: tokenAddress || '', - amount: tokenAmount || '0', + tokenAddr: tokenAddress, + amount: tokenAmount, }]; - const assessment = await fetchRiskAssessment([walletAddress], checkout.config, tokenData); + const assessment = await fetchRiskAssessment(checkout.config, assessmentData); if (isAddressSanctioned(assessment)) { viewDispatch({ diff --git a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx index c750c8aadb..0b25d9eafe 100644 --- a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx +++ b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx @@ -246,7 +246,8 @@ export function SaleContextProvider(props: { }, [provider]); useEffect(() => { - if (!checkout || riskAssessment) { + // Only run risk assessment when we have meaningful token selection + if (!checkout || riskAssessment || !selectedCurrency?.address || !orderQuote.totalAmount[selectedCurrency.name]?.amount) { return; } @@ -257,17 +258,14 @@ export function SaleContextProvider(props: { return; } - // Prepare token data for v2 API - now required - // Use selectedCurrency and orderQuote to get token address and amount when they exist - const tokenData = [{ + // We have meaningful token data - call enhanced risk assessment + const assessmentData = [{ address, - tokenAddr: selectedCurrency?.address || '', - amount: (selectedCurrency?.address && orderQuote.totalAmount[selectedCurrency.name]) - ? orderQuote.totalAmount[selectedCurrency.name].amount.toString() - : '0', + tokenAddr: selectedCurrency.address, + amount: orderQuote.totalAmount[selectedCurrency.name].amount.toString(), }]; - const assessment = await fetchRiskAssessment([address], checkout.config, tokenData); + const assessment = await fetchRiskAssessment(checkout.config, assessmentData); setRiskAssessment(assessment); })(); }, [checkout, provider, selectedCurrency, orderQuote]); diff --git a/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx b/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx index 373384397d..3951553dbb 100644 --- a/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx +++ b/packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx @@ -194,7 +194,8 @@ export default function SwapWidget({ }, [checkout, provider]); useEffect(() => { - if (!checkout || swapState.riskAssessment) { + // Only run risk assessment when we have meaningful token and amount data + if (!checkout || swapState.riskAssessment || !fromTokenAddress || !amount) { return; } @@ -205,14 +206,14 @@ export default function SwapWidget({ return; } - // Prepare token data for v2 API - now required - const tokenData = [{ + // We have meaningful token data - call enhanced risk assessment + const assessmentData = [{ address, - tokenAddr: fromTokenAddress || '', - amount: amount || '0', + tokenAddr: fromTokenAddress, + amount, }]; - const assessment = await fetchRiskAssessment([address], checkout.config, tokenData); + const assessment = await fetchRiskAssessment(checkout.config, assessmentData); swapDispatch({ payload: { type: SwapActions.SET_RISK_ASSESSMENT, @@ -220,7 +221,7 @@ export default function SwapWidget({ }, }); })(); - }, [checkout, provider]); + }, [checkout, provider, fromTokenAddress, amount]); useEffect(() => { swapDispatch({ From 65f13873396ab31615d63623ec64c70065b3c64d Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 12:55:16 +1000 Subject: [PATCH 10/30] Fix linting --- packages/checkout/sdk/src/sdk.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/checkout/sdk/src/sdk.ts b/packages/checkout/sdk/src/sdk.ts index cca34b8a07..7e5aef8318 100644 --- a/packages/checkout/sdk/src/sdk.ts +++ b/packages/checkout/sdk/src/sdk.ts @@ -227,7 +227,8 @@ export class Checkout { /** * Fetches risk assessment for the given assessment data. - * @param {Array<{address: string; tokenAddr?: string; amount?: string}>} assessmentData - Assessment data with addresses and optional token context. + * @param {Array<{address: string; tokenAddr?: string; amount?: string}>} assessmentData + * Assessment data with addresses and optional token context. * @returns {Promise} - A promise that resolves to the risk assessment result. */ public async getRiskAssessment( From dd6fa2d2b58efa8db807435b88f68bf2f86d2934 Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 14:10:08 +1000 Subject: [PATCH 11/30] Fix linting --- packages/checkout/sdk/src/sdk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/checkout/sdk/src/sdk.ts b/packages/checkout/sdk/src/sdk.ts index 7e5aef8318..d423f09875 100644 --- a/packages/checkout/sdk/src/sdk.ts +++ b/packages/checkout/sdk/src/sdk.ts @@ -227,7 +227,7 @@ export class Checkout { /** * Fetches risk assessment for the given assessment data. - * @param {Array<{address: string; tokenAddr?: string; amount?: string}>} assessmentData + * @param {Array<{address: string; tokenAddr?: string; amount?: string}>} assessmentData * Assessment data with addresses and optional token context. * @returns {Promise} - A promise that resolves to the risk assessment result. */ From ffeba32f78e91cede4df7319ed135544a1383f07 Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 14:20:22 +1000 Subject: [PATCH 12/30] Fix linting --- .../src/widgets/sale/context/SaleContextProvider.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx index 0b25d9eafe..60177aae81 100644 --- a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx +++ b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx @@ -247,7 +247,8 @@ export function SaleContextProvider(props: { useEffect(() => { // Only run risk assessment when we have meaningful token selection - if (!checkout || riskAssessment || !selectedCurrency?.address || !orderQuote.totalAmount[selectedCurrency.name]?.amount) { + if (!checkout || riskAssessment || !selectedCurrency?.address + || !orderQuote.totalAmount[selectedCurrency.name]?.amount) { return; } From 3c4ee62732f943ca0fb7ea9a040775b6102ac13a Mon Sep 17 00:00:00 2001 From: fang377 Date: Fri, 25 Jul 2025 14:24:48 +1000 Subject: [PATCH 13/30] Fix linting --- .../src/widgets/sale/context/SaleContextProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx index 60177aae81..f0ed413538 100644 --- a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx +++ b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx @@ -247,7 +247,7 @@ export function SaleContextProvider(props: { useEffect(() => { // Only run risk assessment when we have meaningful token selection - if (!checkout || riskAssessment || !selectedCurrency?.address + if (!checkout || riskAssessment || !selectedCurrency?.address || !orderQuote.totalAmount[selectedCurrency.name]?.amount) { return; } From 4fa0fb83febe26b6b8fc08145bbbe94880b217a3 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:10:21 +1000 Subject: [PATCH 14/30] Make token addr and amount required in v2 request --- .../sdk/src/riskAssessment/riskAssessment.ts | 24 ++++++++----------- packages/checkout/sdk/src/sdk.ts | 6 ++--- .../src/functions/checkSanctionedAddresses.ts | 2 +- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts index 8a4f0b5d55..5acc2a49ff 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts @@ -25,15 +25,15 @@ export type AssessmentResult = { // New type for v2 request items type SanctionsCheckV2RequestItem = { address: string; - amount?: string; - token_addr?: string; + amount: string; + token_addr: string; }; // Simplified assessment data - no redundant address info type AssessmentData = { address: string; - tokenAddr?: string; - amount?: string; + tokenAddr: string; + amount: string; }; export const fetchRiskAssessment = async ( @@ -55,17 +55,13 @@ export const fetchRiskAssessment = async ( try { const riskLevels = riskConfig?.levels.map((l) => l.toLowerCase()) ?? []; - // Prepare v2 request payload - only include token data when meaningful + // Prepare v2 request payload - always include token data const requestPayload: SanctionsCheckV2RequestItem[] = assessmentData.map((data) => { - const item: SanctionsCheckV2RequestItem = { address: data.address }; - - // Only add token data if we have meaningful values (not empty strings or zero amounts) - if (data.tokenAddr && data.amount && data.amount !== '0') { - item.token_addr = data.tokenAddr; - item.amount = data.amount; - } - - return item; + return { + address: data.address, + token_addr: data.tokenAddr, + amount: data.amount, + }; }); const response = await axios.post( diff --git a/packages/checkout/sdk/src/sdk.ts b/packages/checkout/sdk/src/sdk.ts index d423f09875..950b1473b1 100644 --- a/packages/checkout/sdk/src/sdk.ts +++ b/packages/checkout/sdk/src/sdk.ts @@ -227,12 +227,12 @@ export class Checkout { /** * Fetches risk assessment for the given assessment data. - * @param {Array<{address: string; tokenAddr?: string; amount?: string}>} assessmentData - * Assessment data with addresses and optional token context. + * @param {Array<{address: string; tokenAddr: string; amount: string}>} assessmentData + * Assessment data with addresses and required token context. * @returns {Promise} - A promise that resolves to the risk assessment result. */ public async getRiskAssessment( - assessmentData: Array<{ address: string; tokenAddr?: string; amount?: string }>, + assessmentData: Array<{ address: string; tokenAddr: string; amount: string }>, ): Promise { return await fetchRiskAssessment(this.config, assessmentData); } diff --git a/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts b/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts index 2f046d80ca..315f74a0b5 100644 --- a/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts +++ b/packages/checkout/widgets-lib/src/functions/checkSanctionedAddresses.ts @@ -6,7 +6,7 @@ import { export const checkSanctionedAddresses = async ( config: CheckoutConfiguration, - assessmentData: Array<{ address: string; tokenAddr?: string; amount?: string }>, + assessmentData: Array<{ address: string; tokenAddr: string; amount: string }>, ): Promise => { const result = await fetchRiskAssessment(config, assessmentData); return isAddressSanctioned(result, undefined); From 24141fd44fee1b9e90e7fa79061aaaff8bdea5a8 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:13:49 +1000 Subject: [PATCH 15/30] Fix build --- packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts index fb1608e61f..6bd422bb2f 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.test.ts @@ -64,7 +64,7 @@ describe('riskAssessment', () => { const sanctions = await fetchRiskAssessment( mockedConfig, - [{ address: address1 }], // Test without token data when disabled + [{ address: address1, tokenAddr: 'native', amount: '100' }], // Include required fields even when disabled ); expect(sanctions[address1.toLowerCase()]).toEqual({ sanctioned: false }); From 3d2e8c2edac028a82147f42274c4c3ae05f573be Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:16:44 +1000 Subject: [PATCH 16/30] Fix linting --- .../sdk/src/riskAssessment/riskAssessment.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts index 5acc2a49ff..03c9ccf6d8 100644 --- a/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts +++ b/packages/checkout/sdk/src/riskAssessment/riskAssessment.ts @@ -56,13 +56,11 @@ export const fetchRiskAssessment = async ( const riskLevels = riskConfig?.levels.map((l) => l.toLowerCase()) ?? []; // Prepare v2 request payload - always include token data - const requestPayload: SanctionsCheckV2RequestItem[] = assessmentData.map((data) => { - return { - address: data.address, - token_addr: data.tokenAddr, - amount: data.amount, - }; - }); + const requestPayload: SanctionsCheckV2RequestItem[] = assessmentData.map((data) => ({ + address: data.address, + token_addr: data.tokenAddr, + amount: data.amount, + })); const response = await axios.post( `${IMMUTABLE_API_BASE_URL[config.environment]}/v2/sanctions/check`, From 8f5d2b19e9df854e332e74f70ff78719606f747b Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:20:03 +1000 Subject: [PATCH 17/30] Fix addToken --- .../src/widgets/add-tokens/views/AddTokens.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 557a91427c..4cbd901de3 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -427,11 +427,11 @@ export function AddTokens({ toAddress && (await checkSanctionedAddresses( checkout.config, - selectedToken?.address && selectedAmount ? [{ + [{ address: toAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, - }] : [{ address: toAddress }], + tokenAddr: selectedToken?.address || 'native', + amount: selectedAmount || '0', + }], )) ) { viewDispatch({ From 5917288d4abac4a44f2a3304c585d31059cd7a5f Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:20:53 +1000 Subject: [PATCH 18/30] Fix addToken --- .../src/widgets/add-tokens/views/AddTokens.tsx | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 4cbd901de3..8183f24b9b 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -508,20 +508,17 @@ export function AddTokens({ && toAddress && (await checkSanctionedAddresses( checkout.config, - selectedToken?.address && selectedAmount ? [ + [ { address: fromAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, + tokenAddr: selectedToken?.address || 'native', + amount: selectedAmount || '0', }, { address: toAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, + tokenAddr: selectedToken?.address || 'native', + amount: selectedAmount || '0', }, - ] : [ - { address: fromAddress }, - { address: toAddress }, ], )) ) { From 99194c650d3102b8b03ad703c492c86674f67576 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:27:35 +1000 Subject: [PATCH 19/30] Fix addToken --- .../widgets/add-tokens/views/AddTokens.tsx | 61 ++++++++++--------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 8183f24b9b..4907247fdb 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -423,17 +423,18 @@ export function AddTokens({ }, [checkout, id]); const sendRequestOnRampEvent = async () => { - if ( - toAddress - && (await checkSanctionedAddresses( - checkout.config, - [{ - address: toAddress, - tokenAddr: selectedToken?.address || 'native', - amount: selectedAmount || '0', - }], - )) - ) { + // Only check sanctions if we have meaningful token and amount data + const shouldCheckSanctions = selectedToken?.address && selectedAmount; + const isSanctioned = shouldCheckSanctions && await checkSanctionedAddresses( + checkout.config, + [{ + address: toAddress, + tokenAddr: selectedToken.address, + amount: selectedAmount, + }], + ); + + if (toAddress && isSanctioned) { viewDispatch({ payload: { type: ViewActions.UPDATE_VIEW, @@ -503,25 +504,25 @@ export function AddTokens({ const handleReviewClick = async () => { if (!selectedRouteData || !selectedToken?.address) return; - if ( - fromAddress - && toAddress - && (await checkSanctionedAddresses( - checkout.config, - [ - { - address: fromAddress, - tokenAddr: selectedToken?.address || 'native', - amount: selectedAmount || '0', - }, - { - address: toAddress, - tokenAddr: selectedToken?.address || 'native', - amount: selectedAmount || '0', - }, - ], - )) - ) { + // Only check sanctions if we have meaningful amount data + const shouldCheckSanctions = selectedAmount; + const isSanctioned = shouldCheckSanctions && fromAddress && toAddress && await checkSanctionedAddresses( + checkout.config, + [ + { + address: fromAddress, + tokenAddr: selectedToken.address, + amount: selectedAmount, + }, + { + address: toAddress, + tokenAddr: selectedToken.address, + amount: selectedAmount, + }, + ], + ); + + if (isSanctioned) { viewDispatch({ payload: { type: ViewActions.UPDATE_VIEW, From df4292b979daf1a16a2f3c7af4618ecd2439c839 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:38:38 +1000 Subject: [PATCH 20/30] Fix widgets --- .../src/widgets/add-tokens/views/AddTokens.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 4907247fdb..aac05fbc08 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -423,8 +423,8 @@ export function AddTokens({ }, [checkout, id]); const sendRequestOnRampEvent = async () => { - // Only check sanctions if we have meaningful token and amount data - const shouldCheckSanctions = selectedToken?.address && selectedAmount; + // Only check sanctions if we have meaningful data + const shouldCheckSanctions = toAddress && selectedToken?.address && selectedAmount; const isSanctioned = shouldCheckSanctions && await checkSanctionedAddresses( checkout.config, [{ @@ -434,7 +434,7 @@ export function AddTokens({ }], ); - if (toAddress && isSanctioned) { + if (isSanctioned) { viewDispatch({ payload: { type: ViewActions.UPDATE_VIEW, @@ -505,8 +505,8 @@ export function AddTokens({ if (!selectedRouteData || !selectedToken?.address) return; // Only check sanctions if we have meaningful amount data - const shouldCheckSanctions = selectedAmount; - const isSanctioned = shouldCheckSanctions && fromAddress && toAddress && await checkSanctionedAddresses( + const shouldCheckSanctions = selectedAmount && fromAddress && toAddress && selectedToken.address; + const isSanctioned = shouldCheckSanctions && await checkSanctionedAddresses( checkout.config, [ { From da5381895b6967e7ec83a170e5520e4052ef4885 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:41:44 +1000 Subject: [PATCH 21/30] Fix linting --- .../widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index aac05fbc08..3e054591d3 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -433,7 +433,7 @@ export function AddTokens({ amount: selectedAmount, }], ); - + if (isSanctioned) { viewDispatch({ payload: { From d51ca86cd7935841094b1236cf5a0b3bcf88a9a6 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:45:03 +1000 Subject: [PATCH 22/30] Fix build --- .../src/widgets/add-tokens/views/AddTokens.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 3e054591d3..d23d1398dc 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -428,9 +428,9 @@ export function AddTokens({ const isSanctioned = shouldCheckSanctions && await checkSanctionedAddresses( checkout.config, [{ - address: toAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, + address: toAddress!, + tokenAddr: selectedToken!.address!, + amount: selectedAmount!, }], ); @@ -510,14 +510,14 @@ export function AddTokens({ checkout.config, [ { - address: fromAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, + address: fromAddress!, + tokenAddr: selectedToken!.address!, + amount: selectedAmount!, }, { - address: toAddress, - tokenAddr: selectedToken.address, - amount: selectedAmount, + address: toAddress!, + tokenAddr: selectedToken!.address!, + amount: selectedAmount!, }, ], ); From 94a4cebc700b2ee555197076ec313b93138437b7 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 11:49:17 +1000 Subject: [PATCH 23/30] Fix bridgeForm --- .../src/widgets/bridge/components/BridgeForm.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx index 59ef3ffa2d..367cff78ca 100644 --- a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx +++ b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx @@ -188,13 +188,13 @@ export function BridgeForm(props: BridgeFormProps) { const assessmentData = [ { address: from.walletAddress, - tokenAddr: formToken.token.address, - amount: formAmount, + tokenAddr: formToken!.token.address!, + amount: formAmount!, }, ...(to.walletAddress.toLowerCase() !== from.walletAddress.toLowerCase() ? [{ address: to.walletAddress, - tokenAddr: formToken.token.address, - amount: formAmount, + tokenAddr: formToken!.token.address!, + amount: formAmount!, }] : []), ]; From 0671d68e83429961fef4b61c1966df00fc51c44d Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 15:39:57 +1000 Subject: [PATCH 24/30] Update packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx Co-authored-by: Keith Broughton <101608096+keithbro-imx@users.noreply.github.com> --- .../widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index d23d1398dc..c5167460cc 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -428,9 +428,9 @@ export function AddTokens({ const isSanctioned = shouldCheckSanctions && await checkSanctionedAddresses( checkout.config, [{ - address: toAddress!, - tokenAddr: selectedToken!.address!, - amount: selectedAmount!, + address: toAddress, + tokenAddr: selectedToken.address!, + amount: selectedAmount, }], ); From 698ff0e170b36dbd9e48c3027d86eee6de8a9278 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 15:54:16 +1000 Subject: [PATCH 25/30] Update packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx Co-authored-by: Keith Broughton <101608096+keithbro-imx@users.noreply.github.com> --- .../widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index c5167460cc..06611e4e11 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -505,7 +505,7 @@ export function AddTokens({ if (!selectedRouteData || !selectedToken?.address) return; // Only check sanctions if we have meaningful amount data - const shouldCheckSanctions = selectedAmount && fromAddress && toAddress && selectedToken.address; + const shouldCheckSanctions = selectedAmount && fromAddress && toAddress; const isSanctioned = shouldCheckSanctions && await checkSanctionedAddresses( checkout.config, [ From 72aed4f9aa16b417383b0ea3422ffbfbcec71740 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 15:54:26 +1000 Subject: [PATCH 26/30] Update packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx Co-authored-by: Keith Broughton <101608096+keithbro-imx@users.noreply.github.com> --- .../src/widgets/add-tokens/views/AddTokens.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx index 06611e4e11..6a71a64468 100644 --- a/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx +++ b/packages/checkout/widgets-lib/src/widgets/add-tokens/views/AddTokens.tsx @@ -510,14 +510,14 @@ export function AddTokens({ checkout.config, [ { - address: fromAddress!, - tokenAddr: selectedToken!.address!, - amount: selectedAmount!, + address: fromAddress, + tokenAddr: selectedToken.address, + amount: selectedAmount, }, { - address: toAddress!, - tokenAddr: selectedToken!.address!, - amount: selectedAmount!, + address: toAddress, + tokenAddr: selectedToken.address, + amount: selectedAmount, }, ], ); From 265cb8a6252c0f97d9ee11f316780ef9481af17f Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 15:54:35 +1000 Subject: [PATCH 27/30] Update packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx Co-authored-by: Keith Broughton <101608096+keithbro-imx@users.noreply.github.com> --- .../widgets-lib/src/widgets/bridge/components/BridgeForm.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx index 367cff78ca..72947643b0 100644 --- a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx +++ b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx @@ -188,8 +188,8 @@ export function BridgeForm(props: BridgeFormProps) { const assessmentData = [ { address: from.walletAddress, - tokenAddr: formToken!.token.address!, - amount: formAmount!, + tokenAddr: formToken.token.address, + amount: formAmount, }, ...(to.walletAddress.toLowerCase() !== from.walletAddress.toLowerCase() ? [{ address: to.walletAddress, From f0c9ecad8489bd2fb2462fb719c7a40cbff06580 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 15:54:43 +1000 Subject: [PATCH 28/30] Update packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx Co-authored-by: Keith Broughton <101608096+keithbro-imx@users.noreply.github.com> --- .../widgets-lib/src/widgets/bridge/components/BridgeForm.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx index 72947643b0..59ef3ffa2d 100644 --- a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx +++ b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx @@ -193,8 +193,8 @@ export function BridgeForm(props: BridgeFormProps) { }, ...(to.walletAddress.toLowerCase() !== from.walletAddress.toLowerCase() ? [{ address: to.walletAddress, - tokenAddr: formToken!.token.address!, - amount: formAmount!, + tokenAddr: formToken.token.address, + amount: formAmount, }] : []), ]; From 62c0846b073b6648a6a9e3663385744d2391f464 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 15:54:52 +1000 Subject: [PATCH 29/30] Update packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx Co-authored-by: Keith Broughton <101608096+keithbro-imx@users.noreply.github.com> --- .../src/widgets/sale/context/SaleContextProvider.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx index f0ed413538..2485c09204 100644 --- a/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx +++ b/packages/checkout/widgets-lib/src/widgets/sale/context/SaleContextProvider.tsx @@ -247,8 +247,7 @@ export function SaleContextProvider(props: { useEffect(() => { // Only run risk assessment when we have meaningful token selection - if (!checkout || riskAssessment || !selectedCurrency?.address - || !orderQuote.totalAmount[selectedCurrency.name]?.amount) { + if (!checkout || riskAssessment || !selectedCurrency) { return; } From d689bb3c645916998cd677993bb2a00c3243d7a0 Mon Sep 17 00:00:00 2001 From: fang377 Date: Mon, 28 Jul 2025 16:22:40 +1000 Subject: [PATCH 30/30] Fix linting --- .../src/widgets/bridge/components/BridgeForm.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx index 59ef3ffa2d..70b2e3fcf6 100644 --- a/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx +++ b/packages/checkout/widgets-lib/src/widgets/bridge/components/BridgeForm.tsx @@ -188,13 +188,13 @@ export function BridgeForm(props: BridgeFormProps) { const assessmentData = [ { address: from.walletAddress, - tokenAddr: formToken.token.address, - amount: formAmount, + tokenAddr: formToken.token.address as string, + amount: formAmount as string, }, ...(to.walletAddress.toLowerCase() !== from.walletAddress.toLowerCase() ? [{ address: to.walletAddress, - tokenAddr: formToken.token.address, - amount: formAmount, + tokenAddr: formToken.token.address as string, + amount: formAmount as string, }] : []), ];