// @flow import Bourne from '@hapi/bourne'; import { NativeModules } from 'react-native'; import { loadScript } from '../util'; import logger from './logger'; export * from './functions.any'; const { JavaScriptSandbox } = NativeModules; /** * Loads config.js from a specific remote server. * * @param {string} url - The URL to load. * @returns {Promise} */ export async function loadConfig(url: string): Promise { try { const configTxt = await loadScript(url, 10 * 1000 /* Timeout in ms */, true /* skipeval */); const configJson = await JavaScriptSandbox.evaluate(`${configTxt}\nJSON.stringify(config);`); const config = Bourne.parse(configJson); if (typeof config !== 'object') { throw new Error('config is not an object'); } logger.info(`Config loaded from ${url}`); return config; } catch (err) { logger.error(`Failed to load config from ${url}`, err); throw err; } }