diff --git a/packages/sdk/src/client/createClient.ts b/packages/sdk/src/client/createClient.ts index 02a25005..44402787 100644 --- a/packages/sdk/src/client/createClient.ts +++ b/packages/sdk/src/client/createClient.ts @@ -20,16 +20,18 @@ export function createClient(options: SDKConfig): SDKClient { checkPackageUpdates(name, version) } + const { providers, ...configOptions } = options + const _config: SDKBaseConfig = { - ...options, - apiUrl: options?.apiUrl ?? 'https://li.quest/v1', - rpcUrls: options?.rpcUrls ?? {}, - debug: options?.debug ?? false, - preloadChains: options?.preloadChains ?? true, - integrator: options?.integrator ?? 'lifi-sdk', + ...configOptions, + apiUrl: configOptions?.apiUrl ?? 'https://li.quest/v1', + rpcUrls: configOptions?.rpcUrls ?? {}, + debug: configOptions?.debug ?? false, + preloadChains: configOptions?.preloadChains ?? true, + integrator: configOptions?.integrator ?? 'lifi-sdk', } - let _providers: SDKProvider[] = [] + let _providers: SDKProvider[] = providers ?? [] const _storage = getClientStorage(_config) const client: SDKClient = { diff --git a/packages/sdk/src/client/createClient.unit.spec.ts b/packages/sdk/src/client/createClient.unit.spec.ts index 67e7a482..9d7e2225 100644 --- a/packages/sdk/src/client/createClient.unit.spec.ts +++ b/packages/sdk/src/client/createClient.unit.spec.ts @@ -111,6 +111,51 @@ describe('createClient', () => { expect(client.getProvider(ChainType.EVM)).toBeUndefined() }) + it('should initialize providers from config', () => { + const evmProvider = EVM() + const solanaProvider = Solana() + + const client = createClient({ + integrator: 'test-app', + providers: [evmProvider, solanaProvider], + }) + + expect(client.providers).toHaveLength(2) + expect(client.getProvider(ChainType.EVM)).toBe(evmProvider) + expect(client.getProvider(ChainType.SVM)).toBe(solanaProvider) + }) + + it('should merge providers set via setProviders with initial providers', () => { + const evmProvider = EVM() + const utxoProvider = UTXO() + + const client = createClient({ + integrator: 'test-app', + providers: [evmProvider], + }) + + client.setProviders([utxoProvider]) + + expect(client.providers).toHaveLength(2) + expect(client.getProvider(ChainType.EVM)).toBe(evmProvider) + expect(client.getProvider(ChainType.UTXO)).toBe(utxoProvider) + }) + + it('should replace initial providers of the same type via setProviders', () => { + const evmProvider1 = EVM() + const evmProvider2 = EVM() + + const client = createClient({ + integrator: 'test-app', + providers: [evmProvider1], + }) + + client.setProviders([evmProvider2]) + + expect(client.providers).toHaveLength(1) + expect(client.getProvider(ChainType.EVM)).toBe(evmProvider2) + }) + it('should set and get providers', () => { const client = createClient({ integrator: 'test-app' }) const evmProvider = EVM() diff --git a/packages/sdk/src/types/core.ts b/packages/sdk/src/types/core.ts index e986ec5e..34ab1299 100644 --- a/packages/sdk/src/types/core.ts +++ b/packages/sdk/src/types/core.ts @@ -40,6 +40,7 @@ export interface SDKBaseConfig { export interface SDKConfig extends Partial> { integrator: string + providers?: SDKProvider[] } export type RPCUrls = Partial>