import { getApiClientConfig, ServiceConfig } from '@reyaxyz/common'; import VoteModule from '../modules/vote'; import LGEModule from '../modules/lge'; import ReferralModule from '../modules/referral'; import DiscordModule from '../modules/discord'; import TGEModule from '../modules/tge'; /** * @description Client for Community SDK, used to interact with the Reya community. */ export class CommunityClient { private static instance: CommunityClient; private static config: ServiceConfig = getApiClientConfig('test'); private readonly _voteModule: VoteModule; private readonly _lgeModule: LGEModule; private readonly _referralModule: ReferralModule; private readonly _discordModule: DiscordModule; private readonly _tgeModule: TGEModule; private constructor() { this._voteModule = new VoteModule( CommunityClient.config.apiEndpoint, CommunityClient.config.logging, ); this._lgeModule = new LGEModule( CommunityClient.config.apiEndpoint, CommunityClient.config.logging, ); this._referralModule = new ReferralModule( CommunityClient.config.apiEndpoint, CommunityClient.config.logging, ); this._discordModule = new DiscordModule( CommunityClient.config.apiEndpoint, CommunityClient.config.logging, ); this._tgeModule = new TGEModule( CommunityClient.config.apiEndpoint, CommunityClient.config.logging, ); } public static configure(environment: ServiceConfig['environment']): void { CommunityClient.config = getApiClientConfig(environment); CommunityClient.instance = new CommunityClient(); } private static getInstance(): CommunityClient { if (!CommunityClient.instance) { throw new Error( 'Client is not configured. Please configure it before using.', ); } return CommunityClient.instance; } /** * Provides access to the VoteModule instance. * This getter allows for interacting with vote-related functionalities. * * @returns {VoteModule} An instance of VoteModule for vote operations. * @memberof CommunityClient */ public static get vote(): VoteModule { return CommunityClient.getInstance()._voteModule; } /** * Provides access to the LGEModule instance. * This getter allows for interacting with LGE-related functionalities. * * @returns {LGEModule} An instance of LGEModule for LGE operations. * @memberof CommunityClient */ public static get lge(): LGEModule { return CommunityClient.getInstance()._lgeModule; } /** * Provides access to the TGEModule instance. * This getter allows for interacting with TGE-related functionalities. * * @returns {TGEModule} An instance of TGEModule for TGE operations. * @memberof CommunityClient */ public static get tge(): TGEModule { return CommunityClient.getInstance()._tgeModule; } /** * Provides access to the ReferralModule instance. * This getter allows for interacting with referral related functionalities. * * @returns {ReferralModule} An instance of ReferralModule . * @memberof CommunityClient */ public static get referral(): ReferralModule { return CommunityClient.getInstance()._referralModule; } /** * Provides access to the DiscordModule instance. * This getter allows for interacting with discord-related functionalities. * * @returns {DiscordModule} An instance of DiscordModule. * @memberof CommunityClient */ public static get discord(): DiscordModule { return CommunityClient.getInstance()._discordModule; } public static get supportedChain(): number { return CommunityClient.config.chain; } }