## Modules
bfx-api-mock-srv

This module hosts mock servers for the WSv2 and RESTv2 Bitfinex APIs, and is intended for testing the Bitfinex API libraries.

## Classes
MockRESTv2ServerMockServer

REST v2 API server mock

Exposes the same routes as the real API, and maps them to a response table. Multiple potential responses can be defined for endpoints with arguments, with the best match sent to clients on request.

i.e. If the following responses are configured:

A GET on /v2/auth/r/orders/tBTCUSD/hist would return [42], but a query for a different symbol (tETHUSD) would return [41].

MockServerevents.EventEmitter

Mock server base class, listens for commands to get/set responses

MockWSv2ServerMockServer

Acts as a mock for v2 of the Bitfinex websocket API. Responses to available commands are loaded from data/ws2.json and can be modified at runtime. The command API allows for arbitrary packets to be injected into the ws stream.

Responses are of the form [{ packets: [...] }], where mulitple packets are sent in order. A packet can be a string referencing another response by key.

## bfx-api-mock-srv This module hosts mock servers for the [WSv2](#MockWSv2Server) and [RESTv2](#MockRESTv2Server) Bitfinex APIs, and is intended for testing the Bitfinex API libraries. **License**: Apache-2.0 **Example** ```js const { MockRESTv2Server } = require('bfx-api-mock-srv') const FUNDING_OFFER = [ 41215275, 'fUSD', 1524784806000, 1524784806000, 1000, 1000, 'FRRDELTAVAR', null, null, 0, 'ACTIVE', null, null, null, 0, 30, 0, 0, null, 0, 0.00207328 ] debug('spawning mock server...') const srv = new MockRESTv2Server({ listen: true }) const rest = new RESTv2({ apiKey: 'dummy', apiSecret: 'dummy', url: 'http://localhost:9999' }) srv.setResponse('f_offers.fUSD', [FUNDING_OFFER]) debug('requesting preset response...') rest.fundingOffers({ symbol: 'fUSD' }).then(([incomingFundingOffer]) => { assert.deepStrictEqual(incomingFundingOffer, FUNDING_OFFER) debug('correct response received') srv.close() return null }).catch((e) => { debug(`error: ${e.message}`) }) ``` ## MockRESTv2Server ⇐ [MockServer](#MockServer) REST v2 API server mock Exposes the same routes as the real API, and maps them to a response table. Multiple potential responses can be defined for endpoints with arguments, with the best match sent to clients on request. i.e. If the following responses are configured: - `orders.tBTCUSD: [42]` - `orders: [41]` A `GET` on `/v2/auth/r/orders/tBTCUSD/hist` would return `[42]`, but a query for a different symbol (`tETHUSD`) would return `[41]`. **Kind**: global class **Extends**: [MockServer](#MockServer) * [MockRESTv2Server](#MockRESTv2Server) ⇐ [MockServer](#MockServer) * [new MockRESTv2Server([args])](#new_MockRESTv2Server_new) * _instance_ * [.listen()](#MockRESTv2Server+listen) * [.close()](#MockRESTv2Server+close) ⇒ Promise * [.getResponse(key)](#MockServer+getResponse) ⇒ string * [.setResponse(key, data)](#MockServer+setResponse) * _static_ * [.keysForRoute(req, routeKey)](#MockRESTv2Server.keysForRoute) ⇒ Array.<string> ### new MockRESTv2Server([args]) | Param | Type | Default | Description | | --- | --- | --- | --- | | [args] | object | {} | args | | [args.apiPort] | number | 9999 | API port number | | [args.cmdPort] | number | 9998 | command port number | | [args.listen] | boolean | true | enables auto listen() | ### mockRESTv2Server.listen() Starts the API server listening on the configured port. This is a no-op if the server is already up **Kind**: instance method of [MockRESTv2Server](#MockRESTv2Server) **Overrides**: [listen](#MockServer+listen) ### mockRESTv2Server.close() ⇒ Promise Closes the API server if it is running; This is a no-op if it is not. **Kind**: instance method of [MockRESTv2Server](#MockRESTv2Server) **Overrides**: [close](#MockServer+close) **Returns**: Promise - p ### mockRESTv2Server.getResponse(key) ⇒ string Returns the configured server response for the given key **Kind**: instance method of [MockRESTv2Server](#MockRESTv2Server) **Overrides**: [getResponse](#MockServer+getResponse) **Returns**: string - response - JSON | Param | Type | Description | | --- | --- | --- | | key | string | key | ### mockRESTv2Server.setResponse(key, data) Sets the provided data as the server response for the given key. **Kind**: instance method of [MockRESTv2Server](#MockRESTv2Server) **Overrides**: [setResponse](#MockServer+setResponse) | Param | Type | Description | | --- | --- | --- | | key | string | key | | data | Array \| object | data | ### MockRESTv2Server.keysForRoute(req, routeKey) ⇒ Array.<string> **Kind**: static method of [MockRESTv2Server](#MockRESTv2Server) **Returns**: Array.<string> - keys | Param | Type | Description | | --- | --- | --- | | req | express.Request | request | | routeKey | string | key | ## MockServer ⇐ events.EventEmitter Mock server base class, listens for commands to get/set responses **Kind**: global class **Extends**: events.EventEmitter * [MockServer](#MockServer) ⇐ events.EventEmitter * [new MockServer(args, dataPath)](#new_MockServer_new) * [.listen()](#MockServer+listen) * [.close()](#MockServer+close) ⇒ Promise * [.getResponse(key)](#MockServer+getResponse) ⇒ string * [.setResponse(key, data)](#MockServer+setResponse) ### new MockServer(args, dataPath) | Param | Type | Default | Description | | --- | --- | --- | --- | | args | object | | args | | [args.cmdPort] | number | 9998 | port to listen on for HTTP commands | | dataPath | string | | path to JSON file with responses | ### mockServer.listen() Starts the HTTP command server listening on the configured port. This is a no-op if the server is already up. **Kind**: instance method of [MockServer](#MockServer) ### mockServer.close() ⇒ Promise Closes the command server if it is running, no-op if not. **Kind**: instance method of [MockServer](#MockServer) **Returns**: Promise - p ### mockServer.getResponse(key) ⇒ string Returns the configured server response for the given key **Kind**: instance method of [MockServer](#MockServer) **Returns**: string - response - JSON | Param | Type | Description | | --- | --- | --- | | key | string | key | ### mockServer.setResponse(key, data) Sets the provided data as the server response for the given key. **Kind**: instance method of [MockServer](#MockServer) | Param | Type | Description | | --- | --- | --- | | key | string | key | | data | Array \| object | data | ## MockWSv2Server ⇐ [MockServer](#MockServer) Acts as a mock for v2 of the Bitfinex websocket API. Responses to available commands are loaded from data/ws2.json and can be modified at runtime. The command API allows for arbitrary packets to be injected into the ws stream. Responses are of the form `[{ packets: [...] }]`, where mulitple packets are sent in order. A packet can be a string referencing another response by key. **Kind**: global class **Extends**: [MockServer](#MockServer) * [MockWSv2Server](#MockWSv2Server) ⇐ [MockServer](#MockServer) * [new MockWSv2Server([args])](#new_MockWSv2Server_new) * [.isOpen()](#MockWSv2Server+isOpen) ⇒ boolean * [.listen()](#MockWSv2Server+listen) * [.close()](#MockWSv2Server+close) ⇒ Promise * [.once(eventName, cb)](#MockWSv2Server+once) * [.send(packet)](#MockWSv2Server+send) * [.getResponse(key)](#MockServer+getResponse) ⇒ string * [.setResponse(key, data)](#MockServer+setResponse) ### new MockWSv2Server([args]) Spawns a new mock WS2 API server. Supported commands: - POST /send - body is parsed as JSON and sent to all clients - POST /config - body is parsed as JSON, and valid config keys are saved | Param | Type | Default | Description | | --- | --- | --- | --- | | [args] | object | [] | arguments | | [args.apiPort] | number | 9997 | which port to listen on for ws clients | | [args.cmdPort] | number | 9996 | which port to listen on for commands | | [args.syncOnConnect] | boolean | true | send snapshots to clients on connect | | [args.authMiddleware=] | function | | handle auth response | | [args.listen] | boolean | true | if true, listen() is called automatically | ### mockWSv2Server.isOpen() ⇒ boolean Returns server active status **Kind**: instance method of [MockWSv2Server](#MockWSv2Server) **Returns**: boolean - open ### mockWSv2Server.listen() Starts the API server listening on the configured port. This is a no-op if the server is already up **Kind**: instance method of [MockWSv2Server](#MockWSv2Server) **Overrides**: [listen](#MockServer+listen) ### mockWSv2Server.close() ⇒ Promise Closes the API server if it is running; This is a no-op if it is not. **Kind**: instance method of [MockWSv2Server](#MockWSv2Server) **Overrides**: [close](#MockServer+close) **Returns**: Promise - p ### mockWSv2Server.once(eventName, cb) Configures an event handler to be called once when the specified event is emitted by the API server. No-op if the server is not yet up. **Kind**: instance method of [MockWSv2Server](#MockWSv2Server) | Param | Type | Description | | --- | --- | --- | | eventName | string | event name | | cb | function | callback | ### mockWSv2Server.send(packet) Sends the provided packet to all connected clients **Kind**: instance method of [MockWSv2Server](#MockWSv2Server) | Param | Type | Description | | --- | --- | --- | | packet | object \| Array | stringifed before being sent | ### mockWSv2Server.getResponse(key) ⇒ string Returns the configured server response for the given key **Kind**: instance method of [MockWSv2Server](#MockWSv2Server) **Overrides**: [getResponse](#MockServer+getResponse) **Returns**: string - response - JSON | Param | Type | Description | | --- | --- | --- | | key | string | key | ### mockWSv2Server.setResponse(key, data) Sets the provided data as the server response for the given key. **Kind**: instance method of [MockWSv2Server](#MockWSv2Server) **Overrides**: [setResponse](#MockServer+setResponse) | Param | Type | Description | | --- | --- | --- | | key | string | key | | data | Array \| object | data |