aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2018-12-16 13:34:35 +0800
committerFabio Berger <me@fabioberger.com>2018-12-16 13:34:35 +0800
commit7cafe396de676cec3859c76d6407a0948a8e398e (patch)
tree746594ed8d3a83819b8c06f173f716c029068e3a
parent6bb2ef923894a3572c3fa824c3bf1a69759eb43a (diff)
downloaddexon-0x-contracts-7cafe396de676cec3859c76d6407a0948a8e398e.tar.gz
dexon-0x-contracts-7cafe396de676cec3859c76d6407a0948a8e398e.tar.zst
dexon-0x-contracts-7cafe396de676cec3859c76d6407a0948a8e398e.zip
Ensure fileName matches class name, fix broadcast
-rw-r--r--packages/order-watcher/src/index.ts1
-rw-r--r--packages/order-watcher/src/order_watcher/order_watcher_websocket_server.ts (renamed from packages/order-watcher/src/order_watcher/order_watcher_websocket.ts)40
-rw-r--r--packages/order-watcher/src/types.ts8
-rw-r--r--packages/order-watcher/test/order_watcher_websocket_server_test.ts (renamed from packages/order-watcher/test/order_watcher_websocket_test.ts)4
-rw-r--r--yarn.lock39
5 files changed, 33 insertions, 59 deletions
diff --git a/packages/order-watcher/src/index.ts b/packages/order-watcher/src/index.ts
index 5eeba3e87..5bdef4504 100644
--- a/packages/order-watcher/src/index.ts
+++ b/packages/order-watcher/src/index.ts
@@ -1,4 +1,5 @@
export { OrderWatcher } from './order_watcher/order_watcher';
+export { OrderWatcherWebSocketServer } from './order_watcher/order_watcher_websocket_server';
export { ExpirationWatcher } from './order_watcher/expiration_watcher';
export {
diff --git a/packages/order-watcher/src/order_watcher/order_watcher_websocket.ts b/packages/order-watcher/src/order_watcher/order_watcher_websocket_server.ts
index 7a88597ef..2d2d9e82e 100644
--- a/packages/order-watcher/src/order_watcher/order_watcher_websocket.ts
+++ b/packages/order-watcher/src/order_watcher/order_watcher_websocket_server.ts
@@ -1,19 +1,12 @@
import { ContractAddresses } from '@0x/contract-addresses';
-import { OrderState, SignedOrder } from '@0x/types';
+import { OrderStateInvalid, OrderStateValid, SignedOrder } from '@0x/types';
import { BigNumber, logUtils } from '@0x/utils';
import { Provider } from 'ethereum-types';
import * as http from 'http';
import * as WebSocket from 'websocket';
import { webSocketRequestSchema, webSocketUtf8MessageSchema } from '../schemas/websocket_schemas';
-import {
- GetStatsResult,
- OnOrderStateChangeCallback,
- OrderWatcherConfig,
- OrderWatcherMethod,
- WebSocketRequest,
- WebSocketResponse,
-} from '../types';
+import { GetStatsResult, OrderWatcherConfig, OrderWatcherMethod, WebSocketRequest, WebSocketResponse } from '../types';
import { assert } from '../utils/assert';
import { OrderWatcher } from './order_watcher';
@@ -29,6 +22,7 @@ export class OrderWatcherWebSocketServer {
private readonly _httpServer: http.Server;
private readonly _connectionStore: Set<WebSocket.connection>;
private readonly _wsServer: WebSocket.server;
+ private _jsonRpcRequestId: number;
/**
* Recover types lost when the payload is stringified.
*/
@@ -61,6 +55,7 @@ export class OrderWatcherWebSocketServer {
contractAddresses?: ContractAddresses,
partialConfig?: Partial<OrderWatcherConfig>,
) {
+ this._jsonRpcRequestId = 1;
this._orderWatcher = new OrderWatcher(provider, networkId, contractAddresses, partialConfig);
this._connectionStore = new Set();
this._httpServer = http.createServer();
@@ -87,8 +82,7 @@ export class OrderWatcherWebSocketServer {
// Have the WebSocket server subscribe to the OrderWatcher to receive updates.
// These updates are then broadcast to clients in the _connectionStore.
- const broadcastCallback: OnOrderStateChangeCallback = this._broadcastCallback.bind(this);
- this._orderWatcher.subscribe(broadcastCallback);
+ this._orderWatcher.subscribe(this._broadcastCallback.bind(this));
}
/**
@@ -168,14 +162,24 @@ export class OrderWatcherWebSocketServer {
* we do not support clients subscribing to only a subset of orders. As such,
* Client B will be notified of changes to an order that Client A added.
*/
- private _broadcastCallback(err: Error | null, orderState?: OrderState): void {
+ private _broadcastCallback(err: Error | null, orderState?: OrderStateValid | OrderStateInvalid | undefined): void {
+ const method = OrderWatcherMethod.Update;
+ const response =
+ err === null
+ ? {
+ jsonrpc: JSONRPC_VERSION,
+ method,
+ result: orderState,
+ }
+ : {
+ jsonrpc: JSONRPC_VERSION,
+ method,
+ error: {
+ code: -32000,
+ message: err.message,
+ },
+ };
this._connectionStore.forEach((connection: WebSocket.connection) => {
- const response: WebSocketResponse = {
- id: null,
- jsonrpc: JSONRPC_VERSION,
- method: OrderWatcherMethod.Update,
- result: orderState,
- };
connection.sendUTF(JSON.stringify(response));
});
}
diff --git a/packages/order-watcher/src/types.ts b/packages/order-watcher/src/types.ts
index 90d383660..ecbebe305 100644
--- a/packages/order-watcher/src/types.ts
+++ b/packages/order-watcher/src/types.ts
@@ -83,7 +83,13 @@ interface ErrorWebSocketResponse {
id: null;
jsonrpc: string;
method: null;
- error: string;
+ error: JSONRPCError;
+}
+
+interface JSONRPCError {
+ code: number;
+ message: string;
+ data?: string | object;
}
export interface GetStatsResult {
diff --git a/packages/order-watcher/test/order_watcher_websocket_test.ts b/packages/order-watcher/test/order_watcher_websocket_server_test.ts
index c4d1ede45..9f9db7b1f 100644
--- a/packages/order-watcher/test/order_watcher_websocket_test.ts
+++ b/packages/order-watcher/test/order_watcher_websocket_server_test.ts
@@ -10,7 +10,7 @@ import * as chai from 'chai';
import 'mocha';
import * as WebSocket from 'websocket';
-import { OrderWatcherWebSocketServer } from '../src/order_watcher/order_watcher_websocket';
+import { OrderWatcherWebSocketServer } from '../src/order_watcher/order_watcher_websocket_server';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
@@ -25,7 +25,7 @@ interface WsMessage {
data: string;
}
-describe.only('OrderWatcherWebSocket', async () => {
+describe.only('OrderWatcherWebSocketServer', async () => {
let contractWrappers: ContractWrappers;
let wsServer: OrderWatcherWebSocketServer;
let wsClient: WebSocket.w3cwebsocket;
diff --git a/yarn.lock b/yarn.lock
index 6522c9979..f391c8f97 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2008,10 +2008,6 @@ aes-js@^0.2.3:
version "0.2.4"
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-0.2.4.tgz#94b881ab717286d015fa219e08fb66709dda5a3d"
-aes-js@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a"
-
agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
@@ -3470,7 +3466,7 @@ bs-logger@0.x:
dependencies:
fast-json-stable-stringify "^2.0.0"
-bs58@=4.0.1, bs58@^4.0.0:
+bs58@=4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
dependencies:
@@ -3493,14 +3489,6 @@ bs58check@^1.0.8:
bs58 "^3.1.0"
create-hash "^1.1.0"
-bs58check@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
- dependencies:
- bs58 "^4.0.0"
- create-hash "^1.1.0"
- safe-buffer "^5.1.2"
-
bser@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
@@ -6175,19 +6163,6 @@ ethereumjs-wallet@0.6.0:
utf8 "^2.1.1"
uuid "^2.0.1"
-ethereumjs-wallet@~0.6.0:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.2.tgz#67244b6af3e8113b53d709124b25477b64aeccda"
- dependencies:
- aes-js "^3.1.1"
- bs58check "^2.1.2"
- ethereumjs-util "^5.2.0"
- hdkey "^1.0.0"
- safe-buffer "^5.1.2"
- scrypt.js "^0.2.0"
- utf8 "^3.0.0"
- uuid "^3.3.2"
-
ethers@~4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.4.tgz#d3f85e8b27f4b59537e06526439b0fb15b44dc65"
@@ -7752,14 +7727,6 @@ hdkey@^0.7.0, hdkey@^0.7.1:
coinstring "^2.0.0"
secp256k1 "^3.0.1"
-hdkey@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.0.tgz#e74e7b01d2c47f797fa65d1d839adb7a44639f29"
- dependencies:
- coinstring "^2.0.0"
- safe-buffer "^5.1.1"
- secp256k1 "^3.0.1"
-
he@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
@@ -16177,10 +16144,6 @@ utf8@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96"
-utf8@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
-
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"