74 lines
1.8 KiB
TypeScript
74 lines
1.8 KiB
TypeScript
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)
|
|
}
|
|
}
|