import type {IPlugger, PLUGIN_LIST, TConfig} from '../types' import PluggerBridgeModule from '../PluggerBridgeModule' import PluggerLog from '../PluggerLog' import {getJSIModule} from '../PluggerJSIModule' import PluginManager from '../PluginManager' import {modifyEventPlugins} from '../utils' let isInitializedInSync = false const core: IPlugger = { init: async (config: TConfig): Promise => { try { PluggerLog.print('PluggerCore: init called') PluginManager.addPlugins(config.plugins) const p = await PluggerBridgeModule.initializePlugger(config) return p } catch (e) { PluggerLog.error(e) } }, initSync: (config: TConfig): boolean => { try { PluggerLog.print('PluggerCore: init called') PluginManager.addPlugins(config.plugins) isInitializedInSync = true return getJSIModule().initializePluggerInSync(modifyEventPlugins(config)) } catch (e) { PluggerLog.error(e) return false } }, getPluginSync: (pluginName: PLUGIN_LIST): T => { PluggerLog.print('PluggerCore: getPluginSync called: ', pluginName) try { let p if (PluginManager.pluginsInstance[pluginName]) { p = PluginManager.pluginsInstance[pluginName] as T } else { p = PluginManager.getPluginSync(pluginName) } return p } catch (e) { PluggerLog.error('PluggerCore: getPluginSync failed: ', e) return {} as T } }, getPlugin: async (pluginName: PLUGIN_LIST): Promise => { PluggerLog.print('PluggerCore: getPlugin called: ', pluginName) try { let p if (PluginManager.pluginsInstance[pluginName]) { p = PluginManager.pluginsInstance[pluginName] as T } else { p = await PluginManager.getPlugin(pluginName) } return p } catch (e) { PluggerLog.error(e) return {} as T } }, isPluggerInitializedSync: (): boolean => { PluggerLog.print('PluggerCore: isPluggerInitialized called') return getJSIModule().isPluggerInitialized() }, user: { setUser: async (id: String) => { PluggerLog.print('PluggerCore: setUser called') return getJSIModule().setUser(id) }, setGuest: async (id: String) => { PluggerLog.print('PluggerCore: setGuest called') return getJSIModule().setGuest(id) }, setLocation: async (latitude: Number, longitude: Number) => { PluggerLog.print('PluggerCore: setLocation called') return getJSIModule().setLocation(latitude, longitude) }, }, isPluggerInitialized: (): Promise => { PluggerLog.print('PluggerCore: isPluggerInitialized called') return Promise.resolve(getJSIModule().isPluggerInitialized()) }, isInitializedUsingSync: function (): boolean { return isInitializedInSync }, } export default core