Move OrderWatcher Websocket schemas to json-schemas and convert to JSON so that they are language agnostic

This commit is contained in:
Fabio Berger 2018-12-16 16:52:37 -08:00
parent 7661cfc85e
commit ee4185ab46
6 changed files with 71 additions and 64 deletions

View File

@ -0,0 +1,52 @@
{
"id": "/orderWatcherWebSocketRequestSchema",
"type": "object",
"definitions": {
"signedOrderParam": {
"type": "object",
"properties": {
"signedOrder": { "$ref": "/signedOrderSchema" }
},
"required": ["signedOrder"]
},
"orderHashParam": {
"type": "object",
"properties": {
"orderHash": { "$ref": "/hexSchema" }
},
"required": ["orderHash"]
}
},
"oneOf": [
{
"type": "object",
"properties": {
"id": { "type": "string" },
"jsonrpc": { "type": "string" },
"method": { "enum": ["ADD_ORDER"] },
"params": { "$ref": "#/definitions/signedOrderParam" }
},
"required": ["id", "jsonrpc", "method", "params"]
},
{
"type": "object",
"properties": {
"id": { "type": "string" },
"jsonrpc": { "type": "string" },
"method": { "enum": ["REMOVE_ORDER"] },
"params": { "$ref": "#/definitions/orderHashParam" }
},
"required": ["id", "jsonrpc", "method", "params"]
},
{
"type": "object",
"properties": {
"id": { "type": "string" },
"jsonrpc": { "type": "string" },
"method": { "enum": ["GET_STATS"] },
"params": {}
},
"required": ["id", "jsonrpc", "method"]
}
]
}

View File

@ -0,0 +1,10 @@
{
"id": "/orderWatcherWebSocketUtf8MessageSchema",
"properties": {
"utf8Data": { "type": "string" }
},
"required": [
"utf8Data"
],
"type": "object"
}

View File

@ -16,6 +16,8 @@ import * as orderFillOrKillRequestsSchema from '../schemas/order_fill_or_kill_re
import * as orderFillRequestsSchema from '../schemas/order_fill_requests_schema.json';
import * as orderHashSchema from '../schemas/order_hash_schema.json';
import * as orderSchema from '../schemas/order_schema.json';
import * as orderWatcherWebSocketRequestSchema from '../schemas/order_watcher_web_socket_request_schema.json';
import * as orderWatcherWebSocketUtf8MessageSchema from '../schemas/order_watcher_web_socket_utf8_message_schema.json';
import * as orderBookRequestSchema from '../schemas/orderbook_request_schema.json';
import * as ordersRequestOptsSchema from '../schemas/orders_request_opts_schema.json';
import * as ordersSchema from '../schemas/orders_schema.json';
@ -66,6 +68,8 @@ export const schemas = {
jsNumber,
requestOptsSchema,
pagedRequestOptsSchema,
orderWatcherWebSocketRequestSchema,
orderWatcherWebSocketUtf8MessageSchema,
ordersRequestOptsSchema,
orderBookRequestSchema,
orderConfigRequestSchema,

View File

@ -23,6 +23,8 @@
"./schemas/order_schema.json",
"./schemas/signed_order_schema.json",
"./schemas/orders_schema.json",
"./schemas/order_watcher_web_socket_request_schema.json",
"./schemas/order_watcher_web_socket_utf8_message_schema.json",
"./schemas/paginated_collection_schema.json",
"./schemas/relayer_api_asset_data_pairs_response_schema.json",
"./schemas/relayer_api_asset_data_pairs_schema.json",

View File

@ -1,11 +1,11 @@
import { ContractAddresses } from '@0x/contract-addresses';
import { schemas } from '@0x/json-schemas';
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, OrderWatcherConfig, OrderWatcherMethod, WebSocketRequest, WebSocketResponse } from '../types';
import { assert } from '../utils/assert';
@ -105,9 +105,9 @@ export class OrderWatcherWebSocketServer {
private async _onMessageCallbackAsync(connection: WebSocket.connection, message: any): Promise<void> {
let response: WebSocketResponse;
assert.doesConformToSchema('message', message, webSocketUtf8MessageSchema);
assert.doesConformToSchema('message', message, schemas.orderWatcherWebSocketUtf8MessageSchema);
const request: WebSocketRequest = JSON.parse(message.utf8Data);
assert.doesConformToSchema('request', request, webSocketRequestSchema);
assert.doesConformToSchema('request', request, schemas.orderWatcherWebSocketRequestSchema);
assert.isString(request.jsonrpc, JSON_RPC_VERSION);
try {
response = {

View File

@ -1,63 +1,2 @@
// TODO: Move these schemas to the `json-schemas` package and convert to JSON
// Rename to `OrderWatcherWebSocketRequestSchema`, etc...
export const webSocketUtf8MessageSchema = {
id: '/webSocketUtf8MessageSchema',
properties: {
utf8Data: { type: 'string' },
},
type: 'object',
required: ['utf8Data'],
};
export const webSocketRequestSchema = {
id: '/webSocketRequestSchema',
type: 'object',
definitions: {
signedOrderParam: {
type: 'object',
properties: {
signedOrder: { $ref: '/signedOrderSchema' },
},
required: ['signedOrder'],
},
orderHashParam: {
type: 'object',
properties: {
orderHash: { $ref: '/hexSchema' },
},
required: ['orderHash'],
},
},
oneOf: [
{
type: 'object',
properties: {
id: { type: 'string' },
jsonrpc: { type: 'string' },
method: { enum: ['ADD_ORDER'] },
params: { $ref: '#/definitions/signedOrderParam' },
},
required: ['id', 'jsonrpc', 'method', 'params'],
},
{
type: 'object',
properties: {
id: { type: 'string' },
jsonrpc: { type: 'string' },
method: { enum: ['REMOVE_ORDER'] },
params: { $ref: '#/definitions/orderHashParam' },
},
required: ['id', 'jsonrpc', 'method', 'params'],
},
{
type: 'object',
properties: {
id: { type: 'string' },
jsonrpc: { type: 'string' },
method: { enum: ['GET_STATS'] },
params: {},
},
required: ['id', 'jsonrpc', 'method'],
},
],
};