Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ln-markets/api-js
LN Markets Node JS API
https://github.com/ln-markets/api-js
Last synced: about 1 month ago
JSON representation
LN Markets Node JS API
- Host: GitHub
- URL: https://github.com/ln-markets/api-js
- Owner: ln-markets
- License: mit
- Created: 2021-08-04T08:31:37.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-10-10T12:16:21.000Z (4 months ago)
- Last Synced: 2024-12-05T17:48:05.784Z (2 months ago)
- Language: TypeScript
- Homepage:
- Size: 627 KB
- Stars: 16
- Watchers: 3
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# @ln-markets/api
[@ln-markets/api](https://www.npmjs.com/package/@ln-markets/api) is a simple way to connect your Node JS application to [LN Markets](https://lnmarkets.com) !
## Install
You can install this package with npm or yarn:
```shell
$> npm install @ln-markets/api
``````shell
$> pnpm install @ln-markets/api
``````shell
$> yarn add @ln-markets/api
```Then go to on your LN Markets account under the API section of the Profile to generate an API Key with the right permissions to fit your needs.
## Usage
You can import either use websocket or rest api from `@ln-markets/api`
:warning: **This module does not work in the browser**
:warning: **This package only work with ES Modules**```javascript
import { createRestClient, createWebsocketClient } from '@ln-markets/api'
```## REST API
Create a new client with the `createRestClient` function
```javascript
import { createRestClient } from '@ln-markets/api'
const client = createRestClient()
```All these functions are wrappers for documented public endpoints from LN Markets API v2. See specification [here](https://docs.lnmarkets.com/api/v2/).
You can use the `client.request` for routes that are not implemented yet.
### Configuration
You can pass the `network` and `version` to the builder function
By default the package will connect to the mainnet api.
#### Authentication
> For authentication you need your api **key** **secret** and **passphrase**
Without you will not bet able to authenticate and use routes that require authentication
> :warning: **Never share your API Key, Secret or Passphrase**
- As a js variable
```javascript
import { createRestClient } from '@ln-markets/api'
const key = ``
const secret = ``
const passphrase = ``const client = new createRestClient({ key, secret, passphrase })
const trades = await client.futuresGetTrades()
console.log(trades)
```- As env variable
```javascript
// process.env.LNM_API_KEY = ``
// process.env.LNM_API_SECRET = ``
// process.env.LNM_API_PASSPHRASE = ``const client = new createRestClient({ key, secret })
const trades = await client.futuresGetTrades()
console.log(trades)
```#### Network
```javascript
import { createRestClient } from '@ln-markets/api'
const client = createRestClient({ network: 'testnet' })
```- Pass `LNM_API_NETWORK` env var to your app
```javascript
// process.env.LNM_API_NETWORK = 'testnet'
import { createRestClient } from '@ln-markets/api'
const client = createRestClient()
```#### Version
```javascript
import { createRestClient } from '@ln-markets/api'
const client = createRestClient({ version: 'v42' })
```- Pass `LNM_API_VERSION` env var to your app
```javascript
// process.env.LNM_API_VERSION = 'v42'
import { createRestClient } from '@ln-markets/api'
const client = createRestClient()
```#### Headers
Add custom headers to your requests
```javascript
import { createRestClient } from '@ln-markets/api'
const client = createRestClient({
headers: {
'X-My-Header': 'My value',
},
})
```## Websocket API
> :warning: **Websocket API only support subscription**
Websocket API is limited now for price and index update.
The message format is using [JSON-RPC](https://www.jsonrpc.org/specification) spec.
```javascript
import { createWebsocketClient } from '@ln-markets/api'
// Need to be async
const client = await createWebsocketClient()await client.publicSubscribe([
'futures:btc_usd:last-price',
'futures:btc_usd:index',
])// Event on all response
client.on('response', console.log)
// Event emitter on subscribed channels
client.on('futures:btc_usd:last-price', console.log)
client.on('futures:btc_usd:index', console.log)// Handle websocket error here
client.ws.on('error', console.error)
```### Configuration
#### Network
- Testnet with constructor params
```javascript
import { createWebsocketClient } from '@ln-markets/api'
const client = createWebsocketClient({ network: 'testnet' })
```- Pass `LNM_API_NETWORK` env var to your app
```javascript
// process.env.LNM_API_NETWORK = 'testnet'
import { createWebsocketClient } from '@ln-markets/api'
const client = createWebsocketClient()
```#### Version
```javascript
import { createWebsocketClient } from '@ln-markets/api'
const client = createWebsocketClient({ version: 'v42' })
```- Pass `LNM_API_VERSION` env var to your app
```javascript
// process.env.LNM_API_VERSION = 'v42'
import { createWebsocketClient } from '@ln-markets/api'
const client = createWebsocketClient()
```#### HearthBeat
Default to `true` will send a ping every 5s to the server to keep the connection alive.
```javascript
import { createWebsocketClient } from '@ln-markets/api'
const client = createWebsocketClient({ heartbeat: false })
```