A lightweight, zero dependency wrapper around the WebSockets Web API
and the native Node WebSocket
(Node V22 and above) that is fully typed to Deriv's Backend WebSocket (Deriv WS API Explorer).
- Node version 22 and above (With native WebSocket API): for running it on the Backend or a Node runner
- For browser - generally all is supported
You can start by installing the library via the following commands:
npm i @deriv-com/api-client
pnpm install @deriv-com/api-client
yarn add @deriv-com/api-client
To use it in your codebase, simply initialise the `DerivAPICLient` class and invoke the methods available. Most of the things you need (Deriv WS endpoints, handler, etc) are all included and internalised within the library itself.
const derivAPI = new DerivAPIClient();
const response = await derivAPI.send({ name: 'get_account_status' });
console.log(response);
This project comes with a sandbox served with HMR. In it you have a sample code which you can test your changes. To run the sandbox run:
npm run dev
- Conversion of Request/Response Deriv WS Calls to JavaScript Promises
- Deduping Subscriptions via Internal Subscription Tracking
- Separating data handlers (
onData
) with WebSocket message streams - there will always be only one subscription per payload to Deriv WS BE - Asynchronous queuing calls when WebSocket calls are
connecting
,disconnect
orreconnecting
- Connection keep alive mechanism
- Allow error handling via callbacks by forwarding the generic Deriv WS
response.error
property - Fully typed safe endpoints - Typed payload based on endpoint names
async send({ name, payload })
The send method is for request/response Deriv WS call that do not have subscriptions. These types of call will only return one response for every call you make.
name
- typesafe to all deriv WS request/response endpoint names (TSocketEndpointNames
).payload
- typesafe to the expected payload (mapped to thename
). Default payload will always be set to{ [name]: 1 }
. For example for theget_account_status
call, if no payload is passed will result in the following payload sent to the BE
{
"get_account_status": 1
}