export enum Environment { BROWSER = 'BROWSER', CLIENT = 'CLIENT', SERVER = 'SERVER', UNKNOWN = 'UNKNOWN', } export enum Events { EVENT_LISTENER = '__rpc:listener', EVENT_RESPONSE = '__rpc:response', } export enum Errors { EVENT_NOT_REGISTERED = 'Event not registered', UNKNOWN_ENVIRONMENT = 'Unknown environment', NO_DATA = 'No data', NO_BROWSER = 'You need to initialize browser first', } export type RPCState = { eventName: string uuid: string knownError?: string data?: any calledFrom: Environment calledTo: Environment } export class Utils { public static getEnvironment(): Environment { if ('joaat' in mp) return Environment.SERVER if ('game' in mp && 'joaat' in (mp.game as { joaat?: unknown })) return Environment.CLIENT if ('mp' in window) return Environment.BROWSER return Environment.UNKNOWN } public static prepareExecution(data: string): RPCState { return JSON.parse(data) } public static prepareTransfer(data: RPCState): string { return JSON.stringify(data) } public static generateUUID(): string { let uuid = '', random for (let i = 0; i < 32; i++) { random = (Math.random() * 16) | 0 if (i === 8 || i === 12 || i === 16 || i === 20) { uuid += '-' } uuid += ( i === 12 ? 4 : i === 16 ? (random & 3) | 8 : random ).toString(16) } return uuid } public static generateResponseEventName(uuid: string): string { return `${Events.EVENT_RESPONSE}_${uuid}` } public static errorUnknownEnvironment(environment: Environment) { if (environment === Environment.UNKNOWN) throw new Error(Errors.UNKNOWN_ENVIRONMENT) } }