@urban-mp/rpc
v0.1.9
Published
FiveM RPC is an all-in-one package with asynchronous RPC implementation for FiveM servers in JS/TS
Readme
FiveM RPC
Small Promise-based RPC for FiveM server, client, and cef runtimes.
Installation
npm install @urban-mp/rpcCreate An Instance
Create one instance per runtime.
import { RPC } from '@urban-mp/rpc'
export const rpc = new RPC({ env: 'server' }).get()export const rpc = new RPC({ env: 'client' }).get()export const rpc = new RPC({ env: 'cef' }).get()resourceName is optional. Server/client default to GetCurrentResourceName(), and CEF defaults to GetParentResourceName().
export const rpc = new RPC({
env: 'cef',
resourceName: 'my_resource',
}).get()Register Events
Use register everywhere.
rpc.register('profile:get', async userId => {
return getProfile(userId)
})On server, handlers receive player as the first argument when the call comes from client or cef.
rpc.register('inventory:get', async (player, itemId) => {
return getInventoryItem(player, itemId)
})Call Events
Use call(targetEnv, eventName, ...args) everywhere.
const profile = await rpc.call('server', 'profile:get', userId)From CEF, pass resourceName before eventName to call a handler registered in another resource. The NUI HTTP request still goes through the parent NUI resource, but the RPC payload targets resourceName.
const result = await rpc.call(
'server',
'core',
'server:player:account:login',
{ name: 'cataadv', password: '12' },
)Server calls to a player runtime use eventName before player.
await rpc.call('client', 'hud:setVisible', player, true)
await rpc.call('cef', 'modal:open', player, { id: 'inventory' })Call Matrix
| From | To | Example |
| --- | --- | --- |
| Server | Server | rpc.call('server', 'cache:flush') |
| Server | Client | rpc.call('client', 'hud:getState', player) |
| Server | CEF | rpc.call('cef', 'modal:open', player, payload) |
| Client | Server | rpc.call('server', 'profile:get', userId) |
| Client | Client | rpc.call('client', 'player:getPosition') |
| Client | CEF | rpc.call('cef', 'settings:get', key) |
| CEF | Server | rpc.call('server', 'profile:save', payload) |
| CEF | Server resource | rpc.call('server', 'core', 'profile:save', payload) |
| CEF | Client | rpc.call('client', 'camera:getMode') |
| CEF | Client resource | rpc.call('client', 'hud', 'camera:getMode') |
| CEF | CEF | rpc.call('cef', 'theme:get') |
Broadcast From Server
Server can call all clients with callClientEveryone.
await rpc.callClientEveryone('my_resource', 'hud:announce', 'Hello')Configuration
type RPCConfig = {
env: 'server' | 'client' | 'cef'
debug?: boolean
resourceName?: string
}Errors
| Error | Meaning |
| --- | --- |
| EVENT_NOT_REGISTERED | The target runtime has no handler for that event. |
| INVALID_DATA | The received payload could not be parsed. |
| NO_PLAYER | FiveM could not resolve the player. |
| UNKNOWN_ENVIRONMENT | The env is not server, client, or cef. |
Exports
import { RPC, RPCFactory } from '@urban-mp/rpc'