mirror of
https://github.com/rilaxik/fivem-rpc.git
synced 2026-09-28 01:29:13 +00:00
82 lines
2.6 KiB
Markdown
82 lines
2.6 KiB
Markdown
# FiveM RPC
|
|
|
|
is an all-in-one package with asynchronous RPC implementation for FiveM servers in JS/TS
|
|
|
|
## Motivation
|
|
|
|
The idea was to create an extensible package, with various features to simplify the development process and provide as much comfort as possible. Inspired by usage of [altv-xrpc](https://github.com/xxshady/altv-xrpc)
|
|
|
|
## Packages
|
|
|
|
| Package | Docs |
|
|
| ----------------------------------------------------- | -------------------------------------- |
|
|
| [`@entityseven/fivem-rpc`](rpc) | [API reference](rpc/readme.md) |
|
|
| [`@entityseven/fivem-rpc-shared-types`](shared-types) | [Typing setup](shared-types/readme.md) |
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm i @entityseven/fivem-rpc
|
|
pnpm add @entityseven/fivem-rpc
|
|
yarn add @entityseven/fivem-rpc
|
|
bun add @entityseven/fivem-rpc
|
|
```
|
|
|
|
Optional, for typed event names, arguments and results ([typing setup](shared-types/readme.md)):
|
|
|
|
```bash
|
|
npm i -D @entityseven/fivem-rpc-shared-types
|
|
pnpm add -D @entityseven/fivem-rpc-shared-types
|
|
yarn add -D @entityseven/fivem-rpc-shared-types
|
|
bun add -d @entityseven/fivem-rpc-shared-types
|
|
```
|
|
|
|
## Quick start
|
|
|
|
Create exactly one instance per environment and import it from your own module, not from the library. The client needs one even if it only relays between server and webview.
|
|
|
|
```ts
|
|
// server/rpc.ts
|
|
import { createRPC } from '@entityseven/fivem-rpc'
|
|
export const rpc = createRPC({ env: 'server' })
|
|
|
|
// client/rpc.ts
|
|
import { createRPC } from '@entityseven/fivem-rpc'
|
|
export const rpc = createRPC({ env: 'client' })
|
|
|
|
// webview/rpc.ts
|
|
import { createRPC } from '@entityseven/fivem-rpc'
|
|
export const rpc = createRPC({ env: 'webview' })
|
|
```
|
|
|
|
Listen on one side, emit from the other and await the listener's return value:
|
|
|
|
```ts
|
|
// server
|
|
rpc.onClient('ping', (player, message) => `pong: ${message} (from ${player})`)
|
|
|
|
// client
|
|
const reply = await rpc.emitServer('ping', 'hello')
|
|
```
|
|
|
|
All methods: [API reference](rpc/readme.md).
|
|
|
|
## Features
|
|
|
|
- Type-Safe Development: Eliminate runtime errors and enhance code reliability with comprehensive type safety
|
|
- All-in-one package: Communicate effortlessly between server, client and webview
|
|
|
|
## Contributing
|
|
|
|
Issues and pull requests are very welcome
|
|
|
|
## License
|
|
|
|
Licensed under Custom Attribution-NoDerivs Software License
|
|
|
|
## WIP
|
|
|
|
- client observers to catch events between server and webview (subscribe-like behaviour)
|
|
- client observers to prevent events (middleware-like behaviour)
|
|
- player manager (transform player id to desired data straight from a listener)
|