From 2f341a0df31395fc5fb2a5181a8d40568d5b1def Mon Sep 17 00:00:00 2001 From: Eugene Chybisov Date: Mon, 23 Mar 2026 13:38:08 +0100 Subject: [PATCH] feat: initialize SDK providers from configuration Allow createClient to accept an optional providers array in SDKConfig, so providers can be set at creation time instead of requiring a separate setProviders call. Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/sdk/src/client/createClient.ts | 16 ++++--- .../sdk/src/client/createClient.unit.spec.ts | 45 +++++++++++++++++++ packages/sdk/src/types/core.ts | 1 + 3 files changed, 55 insertions(+), 7 deletions(-) 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>