@@ -4,7 +4,6 @@ import { impressionsTrackerFactory } from '../trackers/impressionsTracker';
44import { eventTrackerFactory } from '../trackers/eventTracker' ;
55import { telemetryTrackerFactory } from '../trackers/telemetryTracker' ;
66import SplitIO from '../../types/splitio' ;
7- import { validateAndTrackApiKey } from '../utils/inputValidation/apiKey' ;
87import { createLoggerAPI } from '../logger/sdkLogger' ;
98import { NEW_FACTORY , RETRIEVE_MANAGER } from '../logger/constants' ;
109import { SDK_SPLITS_ARRIVED , SDK_SEGMENTS_ARRIVED , SDK_SPLITS_CACHE_LOADED } from '../readiness/constants' ;
@@ -33,15 +32,6 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ISDK | SplitIO.IA
3332 // @TODO handle non-recoverable errors, such as, global `fetch` not available, invalid SDK Key, etc.
3433 // On non-recoverable errors, we should mark the SDK as destroyed and not start synchronization.
3534
36- // initialization
37- let hasInit = false ;
38- const initCallbacks : ( ( ) => void ) [ ] = [ ] ;
39-
40- function whenInit ( cb : ( ) => void ) {
41- if ( hasInit ) cb ( ) ;
42- else initCallbacks . push ( cb ) ;
43- }
44-
4535 const sdkReadinessManager = sdkReadinessManagerFactory ( platform . EventEmitter , settings ) ;
4636 const readiness = sdkReadinessManager . readinessManager ;
4737
@@ -68,7 +58,7 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ISDK | SplitIO.IA
6858 if ( ( storage as IStorageSync ) . splits . getChangeNumber ( ) > - 1 ) readiness . splits . emit ( SDK_SPLITS_CACHE_LOADED , { initialCacheLoad : false /* Not an initial load, cache exists */ } ) ;
6959 }
7060
71- const clients : Record < string , SplitIO . IBasicClient > = { } ;
61+ const clients : Record < string , SplitIO . IBasicClient & { init : ( ) => void } > = { } ;
7262 const telemetryTracker = telemetryTrackerFactory ( storage . telemetry , platform . now ) ;
7363 const integrationsManager = integrationsManagerFactory && integrationsManagerFactory ( { settings, storage, telemetryTracker } ) ;
7464
@@ -82,8 +72,8 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ISDK | SplitIO.IA
8272 strategyDebugFactory ( observer ) :
8373 noneStrategy ;
8474
85- const impressionsTracker = impressionsTrackerFactory ( settings , storage . impressions , noneStrategy , strategy , whenInit , integrationsManager , storage . telemetry ) ;
86- const eventTracker = eventTrackerFactory ( settings , storage . events , whenInit , integrationsManager , storage . telemetry ) ;
75+ const impressionsTracker = impressionsTrackerFactory ( settings , storage . impressions , noneStrategy , strategy , integrationsManager , storage . telemetry ) ;
76+ const eventTracker = eventTrackerFactory ( settings , storage . events , integrationsManager , storage . telemetry ) ;
8777
8878 // splitApi is used by SyncManager and Browser signal listener
8979 const splitApi = splitApiFactory && splitApiFactory ( settings , platform , telemetryTracker ) ;
@@ -93,6 +83,7 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ISDK | SplitIO.IA
9383 const syncManager = syncManagerFactory && syncManagerFactory ( ctx as ISdkFactoryContextSync ) ;
9484 ctx . syncManager = syncManager ;
9585
86+ // @TODO : move into platform, and call inside sdkClientFactory (if it's used only there)
9687 const signalListener = SignalListener && new SignalListener ( syncManager , settings , storage , splitApi ) ;
9788 ctx . signalListener = signalListener ;
9889
@@ -102,18 +93,7 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ISDK | SplitIO.IA
10293
10394
10495 function init ( ) {
105- if ( hasInit ) return ;
106- hasInit = true ;
107-
108- // We will just log and allow for the SDK to end up throwing an SDK_TIMEOUT event for devs to handle.
109- validateAndTrackApiKey ( log , settings . core . authorizationKey ) ;
110- readiness . init ( ) ;
111- uniqueKeysTracker . start ( ) ;
112- syncManager && syncManager . start ( ) ;
113- signalListener && signalListener . start ( ) ;
114-
115- initCallbacks . forEach ( ( cb ) => cb ( ) ) ;
116- initCallbacks . length = 0 ;
96+ Object . keys ( clients ) . map ( key => clients [ key ] . init ( ) ) ;
11797 }
11898
11999 log . info ( NEW_FACTORY , [ settings . version ] ) ;
@@ -135,7 +115,6 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ISDK | SplitIO.IA
135115 settings,
136116
137117 destroy ( ) {
138- hasInit = false ;
139118 return Promise . all ( Object . keys ( clients ) . map ( key => clients [ key ] . destroy ( ) ) ) . then ( ( ) => { } ) ;
140119 }
141120 } , extraProps && extraProps ( ctx ) , lazyInit ? { init } : init ( ) ) ;
0 commit comments