import { createContext, useContext } from 'react'; export type HashRouterConfig = { enabled?: boolean; basename?: string; }; export type SlidingSyncListConfig = { ranges: number[][]; sort?: string[]; timeline_limit?: number; required_state?: string[][]; filters?: Record; }; export type SlidingSyncConfig = { enabled?: boolean; proxyUrl?: string | null; defaultLists?: Record; }; export type ClientConfig = { defaultHomeserver?: number; homeserverList?: string[]; allowCustomHomeservers?: boolean; featuredCommunities?: { openAsDefault?: boolean; spaces?: string[]; rooms?: string[]; servers?: string[]; }; hashRouter?: HashRouterConfig; slidingSync?: SlidingSyncConfig; }; const ClientConfigContext = createContext(null); export const ClientConfigProvider = ClientConfigContext.Provider; export function useClientConfig(): ClientConfig { const config = useContext(ClientConfigContext); if (!config) throw new Error('Client config are not provided!'); return config; } export const clientDefaultServer = (clientConfig: ClientConfig): string => clientConfig.homeserverList?.[clientConfig.defaultHomeserver ?? 0] ?? 'matrix.org'; export const clientAllowedServer = (clientConfig: ClientConfig, server: string): boolean => { const { homeserverList, allowCustomHomeservers } = clientConfig; if (allowCustomHomeservers) return true; return homeserverList?.includes(server) === true; };