From 2826a73629489b8dd0af2f452cc99822b243fdf8 Mon Sep 17 00:00:00 2001 From: Michal Date: Fri, 2 Aug 2024 17:24:46 +0100 Subject: [PATCH] Refactor to use network --- .../src/features/Discover/common/helpers.ts | 1 + .../network-manager/network-manager.ts | 2 +- .../cardano/constants/sanchonet/constants.ts | 2 +- .../dapp-connector/src/adapters/api.test.ts | 23 +++++++++++++------ packages/dapp-connector/src/adapters/api.ts | 18 +++------------ .../dapp-connector/src/dapp-connector.test.ts | 2 ++ packages/dapp-connector/src/dapp-connector.ts | 9 ++++---- packages/dapp-connector/src/manager.mocks.ts | 3 ++- packages/dapp-connector/src/resolver.ts | 2 ++ .../src/translators/reactjs/useDappList.ts | 2 +- 10 files changed, 34 insertions(+), 30 deletions(-) diff --git a/apps/wallet-mobile/src/features/Discover/common/helpers.ts b/apps/wallet-mobile/src/features/Discover/common/helpers.ts index 8895a86d9f..46c0cc8f92 100644 --- a/apps/wallet-mobile/src/features/Discover/common/helpers.ts +++ b/apps/wallet-mobile/src/features/Discover/common/helpers.ts @@ -95,6 +95,7 @@ export const createDappConnector = (options: CreateDappConnectorOptions) => { : undefined const handlerWallet: ResolverWallet = { + network: wallet.networkManager.network, id: wallet.id, networkId: wallet.networkManager.chainId, getUsedAddresses: (params) => cip30.getUsedAddresses(params), diff --git a/apps/wallet-mobile/src/features/WalletManager/network-manager/network-manager.ts b/apps/wallet-mobile/src/features/WalletManager/network-manager/network-manager.ts index e8c05f904b..025d90b278 100644 --- a/apps/wallet-mobile/src/features/WalletManager/network-manager/network-manager.ts +++ b/apps/wallet-mobile/src/features/WalletManager/network-manager/network-manager.ts @@ -100,7 +100,7 @@ export const networkConfigs: Readonly { describe('getDApps', () => { it('should throw error if fetching fails', async () => { const fakeFetchData = () => Promise.reject(new Error('fake error')) - await expect(() => dappConnectorApiMaker({request: fakeFetchData}).getDApps({chainId: 1})).rejects.toThrow() + await expect(() => + dappConnectorApiMaker({request: fakeFetchData}).getDApps({network: Chain.Network.Mainnet}), + ).rejects.toThrow() }) it('should throw error if response is invalid', async () => { const fakeResult = {tag: 'right' as const, value: {data: {dapps: 1}}} as const const fakeFetchData = () => Promise.resolve(fakeResult) await expect(() => - dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({chainId: 1}), + dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({network: Chain.Network.Mainnet}), ).rejects.toThrow() }) @@ -20,14 +23,16 @@ describe('dappConnectorApiMaker', () => { const fakeResult = {tag: 'left' as const, error: {status: 404, message: 'Not found', responseData: null}} as const const fakeFetchData = () => Promise.resolve(fakeResult) await expect(() => - dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({chainId: 1}), + dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({network: Chain.Network.Mainnet}), ).rejects.toThrow() }) it('should return data if response is valid', async () => { const fakeResult = {tag: 'right' as const, value: {data: await managerMock.getDAppList()}} as const const fakeFetchData = () => Promise.resolve(fakeResult) - const result = await dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({chainId: 1}) + const result = await dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({ + network: Chain.Network.Mainnet, + }) expect(result).toEqual({ ...fakeResult.value.data, dapps: fakeResult.value.data.dapps.map((d) => ({...d, logo: 'https://daehx1qv45z7c.cloudfront.net/icon.png'})), @@ -37,7 +42,9 @@ describe('dappConnectorApiMaker', () => { it('should support preprod', async () => { const fakeResult = {tag: 'right' as const, value: {data: await managerMock.getDAppList()}} as const const fakeFetchData = () => Promise.resolve(fakeResult) - const result = await dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({chainId: 0}) + const result = await dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({ + network: Chain.Network.Preprod, + }) expect(result).toEqual({ ...fakeResult.value.data, dapps: fakeResult.value.data.dapps.map((d) => ({...d, logo: 'https://daehx1qv45z7c.cloudfront.net/icon.png'})), @@ -47,7 +54,9 @@ describe('dappConnectorApiMaker', () => { it('should support sancho', async () => { const fakeResult = {tag: 'right' as const, value: {data: await managerMock.getDAppList()}} as const const fakeFetchData = () => Promise.resolve(fakeResult) - const result = await dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({chainId: 450}) + const result = await dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({ + network: Chain.Network.Sancho, + }) expect(result).toEqual({ ...fakeResult.value.data, dapps: fakeResult.value.data.dapps.map((d) => ({...d, logo: 'https://daehx1qv45z7c.cloudfront.net/icon.png'})), @@ -58,7 +67,7 @@ describe('dappConnectorApiMaker', () => { const fakeResult = {tag: 'right' as const, value: {data: await managerMock.getDAppList()}} as const const fakeFetchData = () => Promise.resolve(fakeResult) await expect(() => - dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({chainId: -1}), + dappConnectorApiMaker({request: fakeFetchData as any}).getDApps({network: Chain.Network.Preview} as any), ).rejects.toThrow() }) }) diff --git a/packages/dapp-connector/src/adapters/api.ts b/packages/dapp-connector/src/adapters/api.ts index 644566fada..310cf98ab4 100644 --- a/packages/dapp-connector/src/adapters/api.ts +++ b/packages/dapp-connector/src/adapters/api.ts @@ -2,6 +2,7 @@ import {FetchData, fetchData, getApiError, isLeft, createTypeGuardFromSchema} fr import {freeze} from 'immer' import {AxiosRequestConfig} from 'axios' import {z} from 'zod' +import {Chain} from '@yoroi/types' const dappListHosts = { mainnet: 'https://daehx1qv45z7c.cloudfront.net/data.json', @@ -12,7 +13,7 @@ const dappListHosts = { const initialDeps = freeze({request: fetchData}, true) type GetDAppsOptions = { - chainId: number + network: Chain.SupportedNetworks } export type Api = { @@ -21,7 +22,7 @@ export type Api = { export const dappConnectorApiMaker = ({request}: {request: FetchData} = initialDeps): Api => { const getDApps = async (options: GetDAppsOptions, fetcherConfig?: AxiosRequestConfig): Promise => { - const url = dappListHosts[getNetworkNameByChainId(options.chainId)] + const url = dappListHosts[options.network] const response = await request({url}, fetcherConfig) @@ -81,16 +82,3 @@ interface DappResponse { uri: string origins: string[] } - -const getNetworkNameByChainId = (chainId: number): 'mainnet' | 'preprod' | 'sancho' => { - switch (chainId) { - case 1: - return 'mainnet' - case 0: - return 'preprod' - case 450: - return 'sancho' - default: - throw new Error('Invalid chain id') - } -} diff --git a/packages/dapp-connector/src/dapp-connector.test.ts b/packages/dapp-connector/src/dapp-connector.test.ts index b2f6c28a35..a0476298e5 100644 --- a/packages/dapp-connector/src/dapp-connector.test.ts +++ b/packages/dapp-connector/src/dapp-connector.test.ts @@ -6,6 +6,7 @@ import {Api, dappConnectorApiMaker} from './adapters/api' import {mockedDAppList} from './manager.mocks' import {ResolverWallet} from './resolver' import {init} from '@emurgo/cross-csl-nodejs' +import {Chain} from '@yoroi/types' const getDappConnector = (wallet = mockWallet) => { const storage = connectionStorageMaker({storage: storageMock}) @@ -615,6 +616,7 @@ const mockWallet: ResolverWallet = { signTx: () => Promise.resolve(CSL.TransactionWitnessSet.new()), signData: () => Promise.resolve({key: '', signature: ''}), id: walletId, + network: Chain.Network.Mainnet, networkId: 1, confirmConnection: async () => true, getBalance: () => CSL.Value.fromHex('1a062ea8a0'), diff --git a/packages/dapp-connector/src/dapp-connector.ts b/packages/dapp-connector/src/dapp-connector.ts index d5810e4ff8..c15ee29c97 100644 --- a/packages/dapp-connector/src/dapp-connector.ts +++ b/packages/dapp-connector/src/dapp-connector.ts @@ -3,6 +3,7 @@ import {resolverHandleEvent, ResolverWallet} from './resolver' import {connectWallet} from './connector' import {DappConnection, Storage} from './adapters/async-storage' import {Api, DappListResponse} from './adapters/api' +import {Chain} from '@yoroi/types' export type DappConnectorManager = { getDAppList(): Promise @@ -15,7 +16,7 @@ export type DappConnectorManager = { trustedUrl: string, sendMessage: (id: string, result: unknown, error?: Error) => void, ): Promise - readonly chainId: number + readonly network: Chain.SupportedNetworks readonly walletId: string } @@ -24,15 +25,15 @@ export const dappConnectorMaker = (storage: Storage, wallet: ResolverWallet, api } export class DappConnector implements DappConnectorManager { - chainId: number + network: Chain.SupportedNetworks walletId: string constructor(private storage: Storage, private wallet: ResolverWallet, private api: Api) { - this.chainId = wallet.networkId + this.network = wallet.network this.walletId = wallet.id } async getDAppList() { - return this.api.getDApps({chainId: this.wallet.networkId}) + return this.api.getDApps({network: this.wallet.network}) } async listAllConnections() { diff --git a/packages/dapp-connector/src/manager.mocks.ts b/packages/dapp-connector/src/manager.mocks.ts index 0291eca905..76ae8ca715 100644 --- a/packages/dapp-connector/src/manager.mocks.ts +++ b/packages/dapp-connector/src/manager.mocks.ts @@ -1,8 +1,9 @@ import {DappConnectorManager} from './dapp-connector' import {DappListResponse} from './adapters/api' +import {Chain} from '@yoroi/types' export const managerMock: DappConnectorManager = { - chainId: 1, + network: Chain.Network.Mainnet, walletId: 'walletId', getDAppList(): Promise { return Promise.resolve(mockedDAppList) diff --git a/packages/dapp-connector/src/resolver.ts b/packages/dapp-connector/src/resolver.ts index 88c9be2c66..a2b8c6453e 100644 --- a/packages/dapp-connector/src/resolver.ts +++ b/packages/dapp-connector/src/resolver.ts @@ -3,6 +3,7 @@ import {Storage} from './adapters/async-storage' import {z} from 'zod' import {Address, TransactionUnspentOutput, TransactionWitnessSet, Value} from '@emurgo/cross-csl-core' import BigNumber from 'bignumber.js' +import {Chain} from '@yoroi/types' type Context = { browserOrigin: string @@ -336,6 +337,7 @@ export const resolverHandleEvent = async ( export type ResolverWallet = { id: string networkId: number + network: Chain.SupportedNetworks confirmConnection: (dappOrigin: string) => Promise getBalance: (tokenId?: string) => Promise getUnusedAddresses: () => Promise diff --git a/packages/dapp-connector/src/translators/reactjs/useDappList.ts b/packages/dapp-connector/src/translators/reactjs/useDappList.ts index 0a0118b875..955f481b4a 100644 --- a/packages/dapp-connector/src/translators/reactjs/useDappList.ts +++ b/packages/dapp-connector/src/translators/reactjs/useDappList.ts @@ -6,7 +6,7 @@ export const useDappList = ( options?: UseQueryOptions, ) => { const {manager} = useDappConnector() - return useQuery([manager.walletId, 'dappList', String(manager.chainId)], { + return useQuery([manager.walletId, 'dappList', String(manager.network)], { queryFn: () => manager.getDAppList(), refetchOnMount: false, refetchInterval: ONE_DAY,