diff --git a/apps/wallet-mobile/src/features/Swap/common/useSwapConfig.ts b/apps/wallet-mobile/src/features/Swap/common/useSwapConfig.ts index 6d4d92d457..5ee395638b 100644 --- a/apps/wallet-mobile/src/features/Swap/common/useSwapConfig.ts +++ b/apps/wallet-mobile/src/features/Swap/common/useSwapConfig.ts @@ -1,10 +1,11 @@ -import {getSwapConfig, useSwapTokensOnlyVerified} from '@yoroi/swap' +import {getSwapConfigApiMaker, useSwapTokensOnlyVerified} from '@yoroi/swap' import {useQuery} from 'react-query' import {usePortfolioTokenInfos} from '../../Portfolio/common/hooks/usePortfolioTokenInfos' import {useSelectedWallet} from '../../WalletManager/common/hooks/useSelectedWallet' export const useSwapConfig = () => { + const getSwapConfig = getSwapConfigApiMaker() const query = useQuery({ suspense: true, queryKey: ['useSwapConfig'], diff --git a/packages/swap/src/adapters/getSwapConfig.test.ts b/packages/swap/src/adapters/getSwapConfig.test.ts index b682cb5787..d9d20c0cb7 100644 --- a/packages/swap/src/adapters/getSwapConfig.test.ts +++ b/packages/swap/src/adapters/getSwapConfig.test.ts @@ -1,4 +1,4 @@ -import {getSwapConfig} from './getSwapConfig' +import {getSwapConfigApiMaker} from './getSwapConfig' import {FetchData} from '@yoroi/common' import {Portfolio} from '@yoroi/types' import {freeze} from 'immer' @@ -25,9 +25,9 @@ const mockFetchData = (async ({url}: {url: string}) => { }) }) as FetchData -describe('getSwapConfig', () => { +describe('getSwapConfigApiMaker', () => { it('should return swap config data when the response is valid', async () => { - const result = await getSwapConfig({request: mockFetchData}) + const result = await getSwapConfigApiMaker({request: mockFetchData})() expect(result).toEqual({ initialPair: { tokenIn: '.' as Portfolio.Token.Id, @@ -52,7 +52,9 @@ describe('getSwapConfig', () => { }, } as any) - await expect(getSwapConfig({request: invalidFetchData})).rejects.toThrow( + await expect( + getSwapConfigApiMaker({request: invalidFetchData})(), + ).rejects.toThrow( 'Invalid swap config response: {"initialPair":{"tokenIn":123,"tokenOut":"tokenOutId"}}', ) }) @@ -65,7 +67,11 @@ describe('getSwapConfig', () => { } as any) await expect( - getSwapConfig({request: networkErrorFetchData}), + getSwapConfigApiMaker({request: networkErrorFetchData})(), ).rejects.toThrow('Network error') }) + + it('should not require passing a param', async () => { + expect(getSwapConfigApiMaker()).toBeDefined() + }) }) diff --git a/packages/swap/src/adapters/getSwapConfig.ts b/packages/swap/src/adapters/getSwapConfig.ts index 66fcf652d1..23652e6a54 100644 --- a/packages/swap/src/adapters/getSwapConfig.ts +++ b/packages/swap/src/adapters/getSwapConfig.ts @@ -1,33 +1,34 @@ import {FetchData, fetchData, getApiError, isLeft} from '@yoroi/common' import {TokenIdSchema} from '@yoroi/portfolio' import {Portfolio} from '@yoroi/types' -import {freeze} from 'immer' import {z} from 'zod' type SwapConfig = z.infer -const initialDeps = freeze({request: fetchData}, true) +export const getSwapConfigApiMaker = + ( + { + request, + }: { + request: FetchData + } = {request: fetchData}, + ) => + async (): Promise => { + const response = await request({ + url: 'https://daehx1qv45z7c.cloudfront.net/swapConfig.json', + }) -export const getSwapConfig = async ({ - request, -}: { - request: FetchData -} = initialDeps): Promise => { - const response = await request({ - url: 'https://daehx1qv45z7c.cloudfront.net/swapConfig.json', - }) + if (isLeft(response)) throw getApiError(response.error) - if (isLeft(response)) throw getApiError(response.error) + if (!SwapConfigResponseSchema.safeParse(response.value.data).success) { + throw new Error( + 'Invalid swap config response: ' + JSON.stringify(response.value.data), + ) + } - if (!SwapConfigResponseSchema.safeParse(response.value.data).success) { - throw new Error( - 'Invalid swap config response: ' + JSON.stringify(response.value.data), - ) + return response.value.data } - return response.value.data -} - const SwapConfigResponseSchema = z.object({ initialPair: z.object({ tokenIn: TokenIdSchema.refine((_): _ is Portfolio.Token.Id => true), diff --git a/packages/swap/src/index.ts b/packages/swap/src/index.ts index f603004e58..f284eada3b 100644 --- a/packages/swap/src/index.ts +++ b/packages/swap/src/index.ts @@ -56,6 +56,4 @@ export { makeStorageMaker, makeStorageMakerDefault, } from './adapters/async-storage/storage.mocks' - -// static -export {getSwapConfig} from './adapters/getSwapConfig' +export {getSwapConfigApiMaker} from './adapters/getSwapConfig'