import { initConfigFromRemote, isInitialized, type XuqmInitOptions, setUserId as setCommonUserId, getUserId as getCommonUserId } from './config' import { DEFAULT_IM_WS_URL, DEFAULT_TENANT_PLATFORM_URL } from './constants' export const XuqmSDK = { /** * @param options.appKey - Your application key (from the tenant platform) * @param options.debug - Enable verbose logging */ async initialize(options: XuqmInitOptions): Promise { if (isInitialized()) return const configUrl = `${DEFAULT_TENANT_PLATFORM_URL}/api/sdk/config?appId=${options.appKey}` try { const res = await fetch(configUrl) const json = await res.json() const remote = json.data ?? json initConfigFromRemote(options, { imWsUrl: remote.imWsUrl, fileServiceUrl: remote.fileServiceUrl, apiUrl: remote.imApiUrl ?? DEFAULT_TENANT_PLATFORM_URL, }) } catch (e) { // Fallback: construct URLs from the built-in platform endpoint initConfigFromRemote(options, { imWsUrl: DEFAULT_IM_WS_URL, fileServiceUrl: DEFAULT_TENANT_PLATFORM_URL, apiUrl: DEFAULT_TENANT_PLATFORM_URL, }) if (options.debug) console.warn('[XuqmSDK] Config fetch failed, using fallback URLs', e) } }, /** * @param options.appKey - Your application key (from the tenant platform) * @param options.debug - Enable verbose logging */ init(options: XuqmInitOptions): void { if (isInitialized()) return initConfigFromRemote(options, { imWsUrl: DEFAULT_IM_WS_URL, fileServiceUrl: DEFAULT_TENANT_PLATFORM_URL, apiUrl: DEFAULT_TENANT_PLATFORM_URL, }) }, setUserId(userId: string | null): void { setCommonUserId(userId) }, getUserId(): string | null { return getCommonUserId() }, }