diff --git a/cef/package.json b/cef/package.json index 10dc1a6..2ee2132 100644 --- a/cef/package.json +++ b/cef/package.json @@ -17,8 +17,13 @@ "@ragempcommunity/types-cef": "^2.1.8", "rage-fw-shared-types": "workspace:^" }, + "description": "RageFW CEF side", "keywords": [], "author": "SashaGoncharov19", - "license": "MIT", - "description": "CEF side for rage-fw" + "contributors": [{ + "name": "rilaxik", + "email": "dev.rilaxik@gmail.com", + "url": "https://github.com/rilaxik" + }], + "license": "MIT" } diff --git a/cli/package.json b/cli/package.json index 95b6ef9..408aeba 100644 --- a/cli/package.json +++ b/cli/package.json @@ -14,10 +14,6 @@ "dist/**/*", "readme.md" ], - "description": "CLI to scaffold a template project for RageFW", - "keywords": [], - "author": "rilaxik", - "license": "ISC", "dependencies": { "@inquirer/prompts": "^5.0.5", "axios": "^1.7.2", @@ -31,5 +27,12 @@ "@types/yargs": "^17.0.32", "prettier": "^3.3.2", "typescript": "^5.4.5" - } + }, + "description": "CLI to scaffold a template project for RageFW", + "keywords": [], + "author": "rilaxik", + "contributors": [{ + "name": "SashaGoncharov19" + }], + "license": "MIT" } diff --git a/client/package.json b/client/package.json index 9c18bea..f6f30d5 100644 --- a/client/package.json +++ b/client/package.json @@ -17,9 +17,14 @@ "@ragempcommunity/types-client": "^2.1.8", "rage-fw-shared-types": "workspace:^" }, + "description": "RageFW Client side", "keywords": [], "author": "SashaGoncharov19", + "contributors": [{ + "name": "rilaxik", + "email": "dev.rilaxik@gmail.com", + "url": "https://github.com/rilaxik" + }], "license": "MIT", - "description": "Client side of rage-fw", "gitHead": "053e4fd12aa120d53e11e0d2009c0df78c1a2ad0" } diff --git a/rpc/index.d.ts b/rpc/index.d.ts new file mode 100644 index 0000000..3255831 --- /dev/null +++ b/rpc/index.d.ts @@ -0,0 +1,13 @@ +declare const mp: any +// declare const console: any + +// declare const setTimeout: (fn: Function, time: number) => number +// declare const clearTimeout: (id: number) => void + +declare const global: { + [p: string]: (...args: any[]) => unknown +} + +// declare const window: { +// [p: string]: (...args: any[]) => unknown +// } diff --git a/rpc/package.json b/rpc/package.json index 2ec891c..75d662b 100644 --- a/rpc/package.json +++ b/rpc/package.json @@ -4,19 +4,25 @@ "main": "dist/index.js", "types": "dist/src/index.d.ts", "scripts": { - "watch": "tsc -w", "build": "tsup", "start": "npx ./dist create" }, "files": [ "dist/**/*" ], - "description": "CLI to scaffold a template project for RageFW", - "keywords": [], - "author": "rilaxik", - "license": "ISC", "devDependencies": { - "prettier": "^3.3.2", - "typescript": "^5.4.5" - } + "prettier": "^3.3.2" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "description": "RageFW RPC", + "keywords": [], + "author": "SashaGoncharov19", + "contributors": [{ + "name": "rilaxik", + "email": "dev.rilaxik@gmail.com", + "url": "https://github.com/rilaxik" + }], + "license": "MIT" } diff --git a/rpc/src-old/events.ts b/rpc/src-old/events.ts deleted file mode 100644 index b3df93f..0000000 --- a/rpc/src-old/events.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const EVENT_LISTENER = '__rpc:listener' -export const EVENT_RESPONSE = '__rpc:response' -export const CEF_EVENT_LISTENER = '__rpc:cef_listener' - -export const CLIENT_ROUTER_LISTENER = '__rpc:clientRouter' diff --git a/rpc/src-old/index.ts b/rpc/src-old/index.ts deleted file mode 100644 index 8941b79..0000000 --- a/rpc/src-old/index.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { Environment, utils } from './utils' -import { EVENT_LISTENER } from './events' - -import { client } from './modules/client' -import { server } from './modules/server' -import { cef } from './modules/cef' - -const environment = utils.getEnvironment() - -const state = environment === Environment.CEF ? window : global - -class rpc { - constructor() { - if (environment === Environment.UNKNOWN) return - - mp.events.add(EVENT_LISTENER, async (player: any, request: string) => { - switch (environment) { - case Environment.SERVER: - await server.listenEvent(player, request) - break - - case Environment.CLIENT: - request = player - - await client.listenEvent(request) - break - - case Environment.CEF: - request = player - - await cef - } - }) - } - - public register( - eventName: string, - cb: (...args: Callback) => Return, - ) { - if (environment === Environment.UNKNOWN) return - state[eventName] = cb - } - - public async callClient( - player: any, - eventName: string, - ...args: Args - ): Promise { - if (environment === Environment.UNKNOWN) return - if (environment === Environment.SERVER) { - return client.executeClient(player, eventName, args) - } - } - - public async callServer( - eventName: string, - ...args: Args - ): Promise { - switch (environment) { - case Environment.UNKNOWN: - return - - case Environment.SERVER: - return - - case Environment.CEF: - return client - - case Environment.CLIENT: - return server.executeServer(eventName, args) - } - } -} - -const testRpc = new rpc() -export { testRpc } diff --git a/rpc/src-old/types.d.ts b/rpc/src-old/types.d.ts deleted file mode 100644 index d2cfb72..0000000 --- a/rpc/src-old/types.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare const mp: any -declare const console: any - -declare const setTimeout: (fn: Function, time: number) => number -declare const clearTimeout: (id: number) => void - -declare const global: { - [p: string]: (...args: any[]) => unknown -} - -declare const window: { - [p: string]: (...args: any[]) => unknown -} diff --git a/rpc/src-old/utils.ts b/rpc/src-old/utils.ts deleted file mode 100644 index 94ec71c..0000000 --- a/rpc/src-old/utils.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { EVENT_RESPONSE } from './events' - -export enum Environment { - CEF = 'CEF', - CLIENT = 'CLIENT', - SERVER = 'SERVER', - UNKNOWN = 'UNKNOWN', -} - -export enum Errors { - EVENT_NOT_REGISTERED = 'Event not registered', -} - -export type RPCState = { - eventName: string - uuid: string - knownError?: string - data?: any - calledFrom: Environment - calledTo: Environment -} - -class Utils { - public getEnvironment(): Environment { - if (mp.joaat) return Environment.SERVER - if (mp.game && mp.game.joaat) return Environment.CLIENT - if ('mp' in window) return Environment.CEF - return Environment.UNKNOWN - } - - public prepareForExecute(data: string): RPCState { - return JSON.parse(data) - } - - public prepareForTransfer(data: RPCState): string { - return JSON.stringify(data) - } - - public 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 generateResponseEventName(uuid: string): string { - return `${EVENT_RESPONSE}_${uuid}` - } -} - -export const utils = new Utils() diff --git a/rpc/src/client.ts b/rpc/src/client.ts deleted file mode 100644 index 1a5dc2e..0000000 --- a/rpc/src/client.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { utils } from './utils' -import type { RPCData } from './types' - -export class Client { - public async listen(data: string) { - const parsedData = utils.parseData(data) - await this.transferTo(parsedData) - } - - private transferTo(data: RPCData) { - switch (data.to) { - case utils.environment.CLIENT: - return this.executeLocal(data) - case utils.environment.CEF: - // todo transfer to cef - case utils.environment.SERVER: - // todo transfer to server - } - } - - private async executeLocal(data: RPCData) { - const state = - utils.getEnvironment() === utils.environment.CEF - ? window.rpcEvents - : global.rpcEvents - const fnResponse = await state[data.eventName](...data.data) - - const response = { - data: fnResponse, - ...data, - } - - this.sendResponseToServer(response) - } - - private sendResponseToServer(data: RPCData) { - const eventName = utils.generateResponseEventName(data.uuid) - const prepareForTransfer = utils.stringifyData(data) - - mp.events.callRemote(eventName, prepareForTransfer) - } -} - -export const client = new Client() diff --git a/rpc/src/events.ts b/rpc/src/events.ts index 94e59ef..b3df93f 100644 --- a/rpc/src/events.ts +++ b/rpc/src/events.ts @@ -1,3 +1,5 @@ -export const RPC_LISTENER = 'rpc::listener' +export const EVENT_LISTENER = '__rpc:listener' +export const EVENT_RESPONSE = '__rpc:response' +export const CEF_EVENT_LISTENER = '__rpc:cef_listener' -export const CLIENT_ROUTER_LISTENER = 'rpc::clientRouterListener' \ No newline at end of file +export const CLIENT_ROUTER_LISTENER = '__rpc:clientRouter' diff --git a/rpc/src/index.ts b/rpc/src/index.ts index 6dab4d9..f9a07ab 100644 --- a/rpc/src/index.ts +++ b/rpc/src/index.ts @@ -1,104 +1,78 @@ -import { RPC_LISTENER } from './events' import { Environment, utils } from './utils' +import { EVENT_LISTENER } from './events' -import { client } from './client' -import { server } from './server' -import type { RPCData } from './types.ts' +import { client } from './modules/client' +import { server } from './modules/server' +import { cef } from './modules/cef' -class FrameworkRpc { - private readonly _environment: Environment - private readonly _environmentGlobal: Record +class Rpc { + private _environment = utils.getEnvironment() + private _state = + utils.getEnvironment() === Environment.CEF + ? window.rpcEvents + : global.rpcEvents constructor() { - this._environment = utils.getEnvironment() - this._environmentGlobal = - utils.getEnvironment() === utils.environment.CEF - ? window.rpcEvents - : global.rpcEvents + if (this._environment === Environment.UNKNOWN) return - mp.events.add(RPC_LISTENER, async (player: any, data: string) => { + mp.events.add(EVENT_LISTENER, async (player: any, request: string) => { switch (this._environment) { - case utils.environment.UNKNOWN: - return + case Environment.SERVER: + await server.listenEvent(player, request) + break - case utils.environment.CLIENT: - player = data - return client.listen(player) + case Environment.CLIENT: + request = player - case utils.environment.SERVER: - return server.listen(player, data) + // await client.listenEvent(request) + break - case utils.environment.CEF: + case Environment.CEF: + request = player + // + // await cef } }) } - public register( + public register( eventName: string, - cb: (...args: Args) => Return, + cb: (...args: Callback) => Return, ) { - if (this._environment === utils.environment.UNKNOWN) return - this._environmentGlobal[eventName] = cb + if (this._environment === Environment.UNKNOWN) return + this._state[eventName] = cb } - public callClient( + public async callClient( player: any, eventName: string, ...args: Args ): Promise { - return new Promise((resolve, _reject) => { - const uuid = utils.generateUUID() - - const data: RPCData = { - uuid, - eventName, - from: this._environment, - to: utils.environment.CLIENT, - data: args, - } - - player.call(RPC_LISTENER, [utils.stringifyData(data)]) - - const responseEventName = utils.generateResponseEventName(uuid) - - const handler = (_player: any, data: string) => { - resolve(utils.parseData(data).data) - mp.events.remove(responseEventName) - } - - mp.events.add(responseEventName, handler) - }) + if (this._environment === Environment.UNKNOWN) return + if (this._environment === Environment.SERVER) { + // return client.executeClient(player, eventName, args) + } } - public callServer( + public async callServer( eventName: string, ...args: Args ): Promise { - return new Promise((resolve, _reject) => { - const uuid = utils.generateUUID() + switch (this._environment) { + case Environment.UNKNOWN: + return - const data: RPCData = { - uuid, - eventName, - from: this._environment, - to: utils.environment.CLIENT, - data: args, - } + case Environment.SERVER: + return - mp.events.callRemote(RPC_LISTENER, utils.stringifyData(data)) + case Environment.CEF: + return client - const responseEventName = utils.generateResponseEventName(uuid) - - const handler = (_player: any, data: string) => { - resolve(utils.parseData(data).data) - mp.events.remove(responseEventName) - } - - mp.events.add(responseEventName, handler) - }) + case Environment.CLIENT: + return server.executeServer(eventName, args) + } } } -const rpc = new FrameworkRpc() - -export { rpc } +const testRpc = new Rpc() +export { testRpc } diff --git a/rpc/src-old/modules/cef.ts b/rpc/src/modules/cef.ts similarity index 98% rename from rpc/src-old/modules/cef.ts rename to rpc/src/modules/cef.ts index c7071f7..b1133a8 100644 --- a/rpc/src-old/modules/cef.ts +++ b/rpc/src/modules/cef.ts @@ -27,7 +27,7 @@ class Cef extends Wrapper { public async callServer( eventName: string, ...args: Args - ): Promise {} + ): Promise {} private async handleReturn( uuid: string, diff --git a/rpc/src-old/modules/client.ts b/rpc/src/modules/client.ts similarity index 97% rename from rpc/src-old/modules/client.ts rename to rpc/src/modules/client.ts index 9d09411..02b6c04 100644 --- a/rpc/src-old/modules/client.ts +++ b/rpc/src/modules/client.ts @@ -1,6 +1,6 @@ -import { CLIENT_ROUTER_LISTENER, EVENT_LISTENER } from '../events' +import { CLIENT_ROUTER_LISTENER } from '../events' import { Wrapper } from './wrapper' -import { Environment, RPCState } from '../utils' +import { Environment } from '../utils' class Client extends Wrapper { constructor() { diff --git a/rpc/src-old/modules/server.ts b/rpc/src/modules/server.ts similarity index 100% rename from rpc/src-old/modules/server.ts rename to rpc/src/modules/server.ts diff --git a/rpc/src-old/modules/wrapper.ts b/rpc/src/modules/wrapper.ts similarity index 66% rename from rpc/src-old/modules/wrapper.ts rename to rpc/src/modules/wrapper.ts index 8b99b9c..01f5905 100644 --- a/rpc/src-old/modules/wrapper.ts +++ b/rpc/src/modules/wrapper.ts @@ -1,11 +1,14 @@ import { Environment, Errors, RPCState, utils } from '../utils' export class Wrapper { - public _utils = utils - public _environment = utils.getEnvironment() - public _state = this._environment === Environment.CEF ? window : global + protected _utils = utils + protected _environment = utils.getEnvironment() + protected _state = + this._environment === Environment.CEF + ? window.rpcEvents + : global.rpcEvents - public _verifyEvent(data: string): RPCState { + protected _verifyEvent(data: string): RPCState { const rpcData = utils.prepareForExecute(data) if (!this._state[rpcData.eventName]) { @@ -15,7 +18,7 @@ export class Wrapper { return rpcData } - public _triggerError(rpcData: RPCState, error?: any) { + protected _triggerError(rpcData: RPCState, error?: any) { const errorMessage = [ `${rpcData.knownError}`, `Caller: ${rpcData.calledFrom}`, diff --git a/rpc/src/server.ts b/rpc/src/server.ts deleted file mode 100644 index 0202cc0..0000000 --- a/rpc/src/server.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { utils } from './utils' -import type { RPCData } from './types' - -export class Server { - public async listen(player: any, data: string) { - const parsedData = utils.parseData(data) - await this.executeLocal(player, parsedData) - } - - private async executeLocal(player: any, data: RPCData) { - const state = - utils.getEnvironment() === utils.environment.CEF - ? window.rpcEvents - : global.rpcEvents - const fnResponse = await state[data.eventName](...data.data) - - const response = { - data: fnResponse, - ...data, - } - - this.sendResponseToClient(player, response) - } - - private sendResponseToClient(player: any, data: RPCData) { - const eventName = utils.generateResponseEventName(data.uuid) - const prepareForTransfer = utils.stringifyData(data) - - player.call(eventName, prepareForTransfer) - } -} - -export const server = new Server() diff --git a/rpc/src/types.ts b/rpc/src/types.ts deleted file mode 100644 index dd62519..0000000 --- a/rpc/src/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Environment } from './utils' - -export type RPCData = { - data?: any - from: Environment - to: Environment - eventName: string - uuid: string -} diff --git a/rpc/src/utils.ts b/rpc/src/utils.ts index ce06975..94ec71c 100644 --- a/rpc/src/utils.ts +++ b/rpc/src/utils.ts @@ -1,5 +1,4 @@ -import type { RPCData } from './types' -import { RPC_LISTENER } from './events' +import { EVENT_RESPONSE } from './events' export enum Environment { CEF = 'CEF', @@ -8,35 +7,57 @@ export enum Environment { UNKNOWN = 'UNKNOWN', } -function 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 +export enum Errors { + EVENT_NOT_REGISTERED = 'Event not registered', } -export const utils = { - environment: Environment, - getEnvironment: () => { +export type RPCState = { + eventName: string + uuid: string + knownError?: string + data?: any + calledFrom: Environment + calledTo: Environment +} + +class Utils { + public getEnvironment(): Environment { if (mp.joaat) return Environment.SERVER if (mp.game && mp.game.joaat) return Environment.CLIENT if ('mp' in window) return Environment.CEF return Environment.UNKNOWN - }, - parseData: (data: string): RPCData => JSON.parse(data), - stringifyData: (data: RPCData): string => JSON.stringify(data), - generateResponseEventName: (uuid: string) => `${RPC_LISTENER}_${uuid}`, - generateUUID, + } + + public prepareForExecute(data: string): RPCState { + return JSON.parse(data) + } + + public prepareForTransfer(data: RPCState): string { + return JSON.stringify(data) + } + + public 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 generateResponseEventName(uuid: string): string { + return `${EVENT_RESPONSE}_${uuid}` + } } + +export const utils = new Utils() diff --git a/rpc/tsup.config.ts b/rpc/tsup.config.ts index af724fb..b1987c1 100644 --- a/rpc/tsup.config.ts +++ b/rpc/tsup.config.ts @@ -4,7 +4,6 @@ export default defineConfig({ entry: ['src/index.ts'], outDir: './dist', format: ['cjs'], - noExternal: ['rage-rpc'], experimentalDts: true, splitting: false, sourcemap: false, diff --git a/server/package.json b/server/package.json index 9ccae0e..671e23e 100644 --- a/server/package.json +++ b/server/package.json @@ -17,9 +17,14 @@ "@ragempcommunity/types-server": "^2.1.8", "rage-fw-shared-types": "workspace:^" }, + "description": "RageFW Server side", "keywords": [], "author": "SashaGoncharov19", + "contributors": [{ + "name": "rilaxik", + "email": "dev.rilaxik@gmail.com", + "url": "https://github.com/rilaxik" + }], "license": "MIT", - "description": "Server side for rage-fw", "gitHead": "053e4fd12aa120d53e11e0d2009c0df78c1a2ad0" }