Update json-schemas, update HTTPClient types
This commit is contained in:
parent
ce88086e08
commit
5c40c466f6
@ -52,7 +52,7 @@
|
|||||||
"homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md",
|
"homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/assert": "^0.2.14",
|
"@0xproject/assert": "^0.2.14",
|
||||||
"@0xproject/json-schemas": "^0.8.3",
|
"@0xproject/json-schemas": "^1.0.1-rc.4",
|
||||||
"@0xproject/types": "^0.8.2",
|
"@0xproject/types": "^0.8.2",
|
||||||
"@0xproject/typescript-typings": "^1.0.4",
|
"@0xproject/typescript-typings": "^1.0.4",
|
||||||
"@0xproject/utils": "^1.0.5",
|
"@0xproject/utils": "^1.0.5",
|
||||||
|
@ -7,17 +7,19 @@ import * as queryString from 'query-string';
|
|||||||
|
|
||||||
import { schemas as clientSchemas } from './schemas/schemas';
|
import { schemas as clientSchemas } from './schemas/schemas';
|
||||||
import {
|
import {
|
||||||
|
APIOrder,
|
||||||
|
AssetPairsItem,
|
||||||
AssetPairsRequestOpts,
|
AssetPairsRequestOpts,
|
||||||
Client,
|
Client,
|
||||||
OrderConfigRequest,
|
|
||||||
OrderConfigResponse,
|
|
||||||
HttpRequestOptions,
|
HttpRequestOptions,
|
||||||
HttpRequestType,
|
HttpRequestType,
|
||||||
OrderbookRequest,
|
OrderbookRequest,
|
||||||
OrderbookResponse,
|
OrderbookResponse,
|
||||||
|
OrderConfigRequest,
|
||||||
|
OrderConfigResponse,
|
||||||
OrdersRequestOpts,
|
OrdersRequestOpts,
|
||||||
PagedRequestOpts,
|
PagedRequestOpts,
|
||||||
TokenPairsItem,
|
PaginatedCollection,
|
||||||
} from './types';
|
} from './types';
|
||||||
import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers';
|
import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers';
|
||||||
|
|
||||||
@ -26,12 +28,6 @@ const DEFAULT_PAGED_REQUEST_OPTS: PagedRequestOpts = {
|
|||||||
page: 1,
|
page: 1,
|
||||||
perPage: 100,
|
perPage: 100,
|
||||||
};
|
};
|
||||||
/**
|
|
||||||
* This mapping defines how an option property name gets converted into an HTTP request query field
|
|
||||||
*/
|
|
||||||
const OPTS_TO_QUERY_FIELD_MAP = {
|
|
||||||
perPage: 'per_page',
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class includes all the functionality related to interacting with a set of HTTP endpoints
|
* This class includes all the functionality related to interacting with a set of HTTP endpoints
|
||||||
@ -47,12 +43,8 @@ export class HttpClient implements Client {
|
|||||||
if (_.isUndefined(params) || _.isEmpty(params)) {
|
if (_.isUndefined(params) || _.isEmpty(params)) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
// format params into a form the api expects
|
|
||||||
const formattedParams = _.mapKeys(params, (_value: any, key: string) => {
|
|
||||||
return _.get(OPTS_TO_QUERY_FIELD_MAP, key, key);
|
|
||||||
});
|
|
||||||
// stringify the formatted object
|
// stringify the formatted object
|
||||||
const stringifiedParams = queryString.stringify(formattedParams);
|
const stringifiedParams = queryString.stringify(params);
|
||||||
return `?${stringifiedParams}`;
|
return `?${stringifiedParams}`;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -67,9 +59,9 @@ export class HttpClient implements Client {
|
|||||||
/**
|
/**
|
||||||
* Retrieve assetData pair info from the API
|
* Retrieve assetData pair info from the API
|
||||||
* @param requestOpts Options specifying assetData information to retrieve and page information, defaults to { page: 1, perPage: 100 }
|
* @param requestOpts Options specifying assetData information to retrieve and page information, defaults to { page: 1, perPage: 100 }
|
||||||
* @return The resulting TokenPairsItems that match the request
|
* @return The resulting AssetPairsItems that match the request
|
||||||
*/
|
*/
|
||||||
public async getAssetPairsAsync(requestOpts?: AssetPairsRequestOpts & PagedRequestOpts): Promise<TokenPairsItem[]> {
|
public async getAssetPairsAsync(requestOpts?: AssetPairsRequestOpts & PagedRequestOpts): Promise<PaginatedCollection<AssetPairsItem>> {
|
||||||
if (!_.isUndefined(requestOpts)) {
|
if (!_.isUndefined(requestOpts)) {
|
||||||
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.AssetPairsRequestOptsSchema);
|
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.AssetPairsRequestOptsSchema);
|
||||||
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
|
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
|
||||||
@ -78,7 +70,7 @@ export class HttpClient implements Client {
|
|||||||
params: _.defaults({}, requestOpts, DEFAULT_PAGED_REQUEST_OPTS),
|
params: _.defaults({}, requestOpts, DEFAULT_PAGED_REQUEST_OPTS),
|
||||||
};
|
};
|
||||||
const responseJson = await this._requestAsync('/assetData_pairs', HttpRequestType.Get, httpRequestOpts);
|
const responseJson = await this._requestAsync('/assetData_pairs', HttpRequestType.Get, httpRequestOpts);
|
||||||
const assetDataPairs = relayerResponseJsonParsers.parseTokenPairsJson(responseJson);
|
const assetDataPairs = relayerResponseJsonParsers.parseAssetDataPairsJson(responseJson);
|
||||||
return assetDataPairs;
|
return assetDataPairs;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -86,7 +78,7 @@ export class HttpClient implements Client {
|
|||||||
* @param requestOpts Options specifying orders to retrieve and page information, defaults to { page: 1, perPage: 100 }
|
* @param requestOpts Options specifying orders to retrieve and page information, defaults to { page: 1, perPage: 100 }
|
||||||
* @return The resulting SignedOrders that match the request
|
* @return The resulting SignedOrders that match the request
|
||||||
*/
|
*/
|
||||||
public async getOrdersAsync(requestOpts?: OrdersRequestOpts & PagedRequestOpts): Promise<SignedOrder[]> {
|
public async getOrdersAsync(requestOpts?: OrdersRequestOpts & PagedRequestOpts): Promise<PaginatedCollection<APIOrder>> {
|
||||||
if (!_.isUndefined(requestOpts)) {
|
if (!_.isUndefined(requestOpts)) {
|
||||||
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.ordersRequestOptsSchema);
|
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.ordersRequestOptsSchema);
|
||||||
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
|
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
|
||||||
@ -103,7 +95,7 @@ export class HttpClient implements Client {
|
|||||||
* @param orderHash An orderHash generated from the desired order
|
* @param orderHash An orderHash generated from the desired order
|
||||||
* @return The SignedOrder that matches the supplied orderHash
|
* @return The SignedOrder that matches the supplied orderHash
|
||||||
*/
|
*/
|
||||||
public async getOrderAsync(orderHash: string): Promise<SignedOrder> {
|
public async getOrderAsync(orderHash: string): Promise<APIOrder> {
|
||||||
assert.doesConformToSchema('orderHash', orderHash, schemas.orderHashSchema);
|
assert.doesConformToSchema('orderHash', orderHash, schemas.orderHashSchema);
|
||||||
const responseJson = await this._requestAsync(`/order/${orderHash}`, HttpRequestType.Get);
|
const responseJson = await this._requestAsync(`/order/${orderHash}`, HttpRequestType.Get);
|
||||||
const order = relayerResponseJsonParsers.parseOrderJson(responseJson);
|
const order = relayerResponseJsonParsers.parseOrderJson(responseJson);
|
||||||
@ -144,6 +136,12 @@ export class HttpClient implements Client {
|
|||||||
const fees = relayerResponseJsonParsers.parseOrderConfigResponseJson(responseJson);
|
const fees = relayerResponseJsonParsers.parseOrderConfigResponseJson(responseJson);
|
||||||
return fees;
|
return fees;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getFeeRecipientsAsync(): Promise<PaginatedCollection<string>> {
|
||||||
|
// TODO
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submit a signed order to the API
|
* Submit a signed order to the API
|
||||||
* @param signedOrder A SignedOrder instance to submit
|
* @param signedOrder A SignedOrder instance to submit
|
||||||
|
@ -11,7 +11,7 @@ export {
|
|||||||
OrderbookResponse,
|
OrderbookResponse,
|
||||||
OrdersRequestOpts,
|
OrdersRequestOpts,
|
||||||
PagedRequestOpts,
|
PagedRequestOpts,
|
||||||
TokenPairsItem,
|
AssetPairsItem,
|
||||||
AssetPairsRequestOpts,
|
AssetPairsRequestOpts,
|
||||||
Asset,
|
Asset,
|
||||||
} from './types';
|
} from './types';
|
||||||
|
@ -2,12 +2,12 @@ import { SignedOrder } from '@0xproject/types';
|
|||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
export interface Client {
|
export interface Client {
|
||||||
getAssetPairsAsync: (requestOpts?: AssetPairsRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<TokenPairsItem>>;
|
getAssetPairsAsync: (requestOpts?: AssetPairsRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<AssetPairsItem>>;
|
||||||
getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<APIOrder>>;
|
getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<APIOrder>>;
|
||||||
getOrderAsync: (orderHash: string) => Promise<APIOrder>;
|
getOrderAsync: (orderHash: string) => Promise<APIOrder>;
|
||||||
getOrderbookAsync: (request: OrderbookRequest, requestOpts?: PagedRequestOpts) => Promise<OrderbookResponse>;
|
getOrderbookAsync: (request: OrderbookRequest, requestOpts?: PagedRequestOpts) => Promise<OrderbookResponse>;
|
||||||
getOrderConfigAsync: (request: OrderConfigRequest) => Promise<OrderConfigResponse>;
|
getOrderConfigAsync: (request: OrderConfigRequest) => Promise<OrderConfigResponse>;
|
||||||
getFeeRecipients: () => Promise<PaginatedCollection<string>>;
|
getFeeRecipientsAsync: () => Promise<PaginatedCollection<string>>;
|
||||||
submitOrderAsync: (signedOrder: SignedOrder) => Promise<void>;
|
submitOrderAsync: (signedOrder: SignedOrder) => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ export interface AssetPairsRequestOpts {
|
|||||||
assetDataB?: string;
|
assetDataB?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TokenPairsItem {
|
export interface AssetPairsItem {
|
||||||
assetDataA: Asset;
|
assetDataA: Asset;
|
||||||
assetDataB: Asset;
|
assetDataB: Asset;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ import { OrdersChannelMessage, OrdersChannelMessageTypes } from '../types';
|
|||||||
|
|
||||||
import { relayerResponseJsonParsers } from './relayer_response_json_parsers';
|
import { relayerResponseJsonParsers } from './relayer_response_json_parsers';
|
||||||
|
|
||||||
export const orderbookChannelMessageParser = {
|
export const ordersChannelMessageParser = {
|
||||||
parse(utf8Data: string): OrdersChannelMessage {
|
parse(utf8Data: string): OrdersChannelMessage {
|
||||||
// parse the message
|
// parse the message
|
||||||
const messageObj = JSON.parse(utf8Data);
|
const messageObj = JSON.parse(utf8Data);
|
||||||
@ -19,14 +19,8 @@ export const orderbookChannelMessageParser = {
|
|||||||
assert.assert(!_.isUndefined(requestId), `Message is missing a requestId parameter: ${utf8Data}`);
|
assert.assert(!_.isUndefined(requestId), `Message is missing a requestId parameter: ${utf8Data}`);
|
||||||
assert.isNumber('requestId', requestId);
|
assert.isNumber('requestId', requestId);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case OrdersChannelMessageTypes.Snapshot: {
|
|
||||||
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelSnapshotSchema);
|
|
||||||
const orderbookJson = messageObj.payload;
|
|
||||||
const orderbook = relayerResponseJsonParsers.parseOrderbookResponseJson(orderbookJson);
|
|
||||||
return _.assign(messageObj, { payload: orderbook });
|
|
||||||
}
|
|
||||||
case OrdersChannelMessageTypes.Update: {
|
case OrdersChannelMessageTypes.Update: {
|
||||||
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelUpdateSchema);
|
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrdersChannelUpdateSchema);
|
||||||
const orderJson = messageObj.payload;
|
const orderJson = messageObj.payload;
|
||||||
const order = relayerResponseJsonParsers.parseOrderJson(orderJson);
|
const order = relayerResponseJsonParsers.parseOrderJson(orderJson);
|
||||||
return _.assign(messageObj, { payload: order });
|
return _.assign(messageObj, { payload: order });
|
||||||
|
@ -2,13 +2,13 @@ import { assert } from '@0xproject/assert';
|
|||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
import { SignedOrder } from '@0xproject/types';
|
import { SignedOrder } from '@0xproject/types';
|
||||||
|
|
||||||
import { OrderConfigResponse, OrderbookResponse, TokenPairsItem } from '../types';
|
import { AssetPairsItem, OrderbookResponse, OrderConfigResponse } from '../types';
|
||||||
|
|
||||||
import { typeConverters } from './type_converters';
|
import { typeConverters } from './type_converters';
|
||||||
|
|
||||||
export const relayerResponseJsonParsers = {
|
export const relayerResponseJsonParsers = {
|
||||||
parseTokenPairsJson(json: any): TokenPairsItem[] {
|
parseAssetDataPairsJson(json: any): AssetPairsItem[] {
|
||||||
assert.doesConformToSchema('assetDataPairs', json, schemas.relayerApiTokenPairsResponseSchema);
|
assert.doesConformToSchema('assetDataPairs', json, schemas.relayerApiAssetDataPairsResponseSchema);
|
||||||
return json.map((assetDataPair: any) => {
|
return json.map((assetDataPair: any) => {
|
||||||
return typeConverters.convertStringsFieldsToBigNumbers(assetDataPair, [
|
return typeConverters.convertStringsFieldsToBigNumbers(assetDataPair, [
|
||||||
'assetDataA.minAmount',
|
'assetDataA.minAmount',
|
||||||
@ -27,7 +27,7 @@ export const relayerResponseJsonParsers = {
|
|||||||
return typeConverters.convertOrderStringFieldsToBigNumber(json);
|
return typeConverters.convertOrderStringFieldsToBigNumber(json);
|
||||||
},
|
},
|
||||||
parseOrderbookResponseJson(json: any): OrderbookResponse {
|
parseOrderbookResponseJson(json: any): OrderbookResponse {
|
||||||
assert.doesConformToSchema('orderBook', json, schemas.relayerApiOrderBookResponseSchema);
|
assert.doesConformToSchema('orderBook', json, schemas.relayerApiOrdersResponseSchema);
|
||||||
return typeConverters.convertOrderbookStringFieldsToBigNumber(json);
|
return typeConverters.convertOrderbookStringFieldsToBigNumber(json);
|
||||||
},
|
},
|
||||||
parseOrderConfigResponseJson(json: any): OrderConfigResponse {
|
parseOrderConfigResponseJson(json: any): OrderConfigResponse {
|
||||||
|
@ -8,7 +8,7 @@ import {
|
|||||||
OrdersChannelMessageTypes,
|
OrdersChannelMessageTypes,
|
||||||
} from './types';
|
} from './types';
|
||||||
import { assert } from './utils/assert';
|
import { assert } from './utils/assert';
|
||||||
import { orderbookChannelMessageParser } from './utils/orderbook_channel_message_parser';
|
import { ordersChannelMessageParser } from './utils/orderbook_channel_message_parser';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class includes all the functionality related to interacting with a websocket endpoint
|
* This class includes all the functionality related to interacting with a websocket endpoint
|
||||||
@ -72,7 +72,7 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const data = message.data;
|
const data = message.data;
|
||||||
const parserResult = orderbookChannelMessageParser.parse(data);
|
const parserResult = ordersChannelMessageParser.parse(data);
|
||||||
const subscriptionOpts = this._subscriptionOptsList[parserResult.requestId];
|
const subscriptionOpts = this._subscriptionOptsList[parserResult.requestId];
|
||||||
if (_.isUndefined(subscriptionOpts)) {
|
if (_.isUndefined(subscriptionOpts)) {
|
||||||
this._handler.onError(
|
this._handler.onError(
|
||||||
@ -82,10 +82,6 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (parserResult.type) {
|
switch (parserResult.type) {
|
||||||
case OrdersChannelMessageTypes.Snapshot: {
|
|
||||||
this._handler.onSnapshot(this, subscriptionOpts, parserResult.payload);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case OrdersChannelMessageTypes.Update: {
|
case OrdersChannelMessageTypes.Update: {
|
||||||
this._handler.onUpdate(this, subscriptionOpts, parserResult.payload);
|
this._handler.onUpdate(this, subscriptionOpts, parserResult.payload);
|
||||||
break;
|
break;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
import { TokenPairsItem } from '../../../src/types';
|
import { AssetPairsItem } from '../../../src/types';
|
||||||
|
|
||||||
export const assetDataPairsResponse: TokenPairsItem[] = [
|
export const assetDataPairsResponse: AssetPairsItem[] = [
|
||||||
{
|
{
|
||||||
assetDataA: {
|
assetDataA: {
|
||||||
address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
|
@ -7,6 +7,8 @@ import 'mocha';
|
|||||||
|
|
||||||
import { HttpClient } from '../src/index';
|
import { HttpClient } from '../src/index';
|
||||||
|
|
||||||
|
import { assetDataPairsResponse } from './fixtures/standard_relayer_api/assetData_pairs';
|
||||||
|
import * as assetDataPairsResponseJSON from './fixtures/standard_relayer_api/assetData_pairs.json';
|
||||||
import { feesResponse } from './fixtures/standard_relayer_api/fees';
|
import { feesResponse } from './fixtures/standard_relayer_api/fees';
|
||||||
import * as feesResponseJSON from './fixtures/standard_relayer_api/fees.json';
|
import * as feesResponseJSON from './fixtures/standard_relayer_api/fees.json';
|
||||||
import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
||||||
@ -15,8 +17,6 @@ import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook';
|
|||||||
import * as orderbookJSON from './fixtures/standard_relayer_api/orderbook.json';
|
import * as orderbookJSON from './fixtures/standard_relayer_api/orderbook.json';
|
||||||
import { ordersResponse } from './fixtures/standard_relayer_api/orders';
|
import { ordersResponse } from './fixtures/standard_relayer_api/orders';
|
||||||
import * as ordersResponseJSON from './fixtures/standard_relayer_api/orders.json';
|
import * as ordersResponseJSON from './fixtures/standard_relayer_api/orders.json';
|
||||||
import { assetDataPairsResponse } from './fixtures/standard_relayer_api/assetData_pairs';
|
|
||||||
import * as assetDataPairsResponseJSON from './fixtures/standard_relayer_api/assetData_pairs.json';
|
|
||||||
|
|
||||||
chai.config.includeStack = true;
|
chai.config.includeStack = true;
|
||||||
chai.use(dirtyChai);
|
chai.use(dirtyChai);
|
||||||
|
@ -2,7 +2,7 @@ import * as chai from 'chai';
|
|||||||
import * as dirtyChai from 'dirty-chai';
|
import * as dirtyChai from 'dirty-chai';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
|
|
||||||
import { orderbookChannelMessageParser } from '../src/utils/orderbook_channel_message_parser';
|
import { ordersChannelMessageParser } from '../src/utils/orderbook_channel_message_parser';
|
||||||
|
|
||||||
import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
||||||
import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook';
|
import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook';
|
||||||
@ -20,20 +20,20 @@ chai.config.includeStack = true;
|
|||||||
chai.use(dirtyChai);
|
chai.use(dirtyChai);
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
|
|
||||||
describe('orderbookChannelMessageParser', () => {
|
describe('ordersChannelMessageParser', () => {
|
||||||
describe('#parser', () => {
|
describe('#parser', () => {
|
||||||
it('parses snapshot messages', () => {
|
it('parses snapshot messages', () => {
|
||||||
const snapshotMessage = orderbookChannelMessageParser.parse(snapshotOrdersChannelMessage);
|
const snapshotMessage = ordersChannelMessageParser.parse(snapshotOrdersChannelMessage);
|
||||||
expect(snapshotMessage.type).to.be.equal('snapshot');
|
expect(snapshotMessage.type).to.be.equal('snapshot');
|
||||||
expect(snapshotMessage.payload).to.be.deep.equal(orderbookResponse);
|
expect(snapshotMessage.payload).to.be.deep.equal(orderbookResponse);
|
||||||
});
|
});
|
||||||
it('parses update messages', () => {
|
it('parses update messages', () => {
|
||||||
const updateMessage = orderbookChannelMessageParser.parse(updateOrdersChannelMessage);
|
const updateMessage = ordersChannelMessageParser.parse(updateOrdersChannelMessage);
|
||||||
expect(updateMessage.type).to.be.equal('update');
|
expect(updateMessage.type).to.be.equal('update');
|
||||||
expect(updateMessage.payload).to.be.deep.equal(orderResponse);
|
expect(updateMessage.payload).to.be.deep.equal(orderResponse);
|
||||||
});
|
});
|
||||||
it('returns unknown message for messages with unsupported types', () => {
|
it('returns unknown message for messages with unsupported types', () => {
|
||||||
const unknownMessage = orderbookChannelMessageParser.parse(unknownOrdersChannelMessage);
|
const unknownMessage = ordersChannelMessageParser.parse(unknownOrdersChannelMessage);
|
||||||
expect(unknownMessage.type).to.be.equal('unknown');
|
expect(unknownMessage.type).to.be.equal('unknown');
|
||||||
expect(unknownMessage.payload).to.be.undefined();
|
expect(unknownMessage.payload).to.be.undefined();
|
||||||
});
|
});
|
||||||
@ -43,7 +43,7 @@ describe('orderbookChannelMessageParser', () => {
|
|||||||
"requestId": 1,
|
"requestId": 1,
|
||||||
"payload": {}
|
"payload": {}
|
||||||
}`;
|
}`;
|
||||||
const badCall = () => orderbookChannelMessageParser.parse(typelessMessage);
|
const badCall = () => ordersChannelMessageParser.parse(typelessMessage);
|
||||||
expect(badCall).throws(`Message is missing a type parameter: ${typelessMessage}`);
|
expect(badCall).throws(`Message is missing a type parameter: ${typelessMessage}`);
|
||||||
});
|
});
|
||||||
it('throws when type is not a string', () => {
|
it('throws when type is not a string', () => {
|
||||||
@ -53,23 +53,23 @@ describe('orderbookChannelMessageParser', () => {
|
|||||||
"requestId": 1,
|
"requestId": 1,
|
||||||
"payload": {}
|
"payload": {}
|
||||||
}`;
|
}`;
|
||||||
const badCall = () => orderbookChannelMessageParser.parse(messageWithBadType);
|
const badCall = () => ordersChannelMessageParser.parse(messageWithBadType);
|
||||||
expect(badCall).throws('Expected type to be of type string, encountered: 1');
|
expect(badCall).throws('Expected type to be of type string, encountered: 1');
|
||||||
});
|
});
|
||||||
it('throws when snapshot message has malformed payload', () => {
|
it('throws when snapshot message has malformed payload', () => {
|
||||||
const badCall = () => orderbookChannelMessageParser.parse(malformedSnapshotOrdersChannelMessage);
|
const badCall = () => ordersChannelMessageParser.parse(malformedSnapshotOrdersChannelMessage);
|
||||||
// tslint:disable-next-line:max-line-length
|
// tslint:disable-next-line:max-line-length
|
||||||
const errMsg =
|
const errMsg =
|
||||||
'Validation errors: instance.payload requires property "bids", instance.payload requires property "asks"';
|
'Validation errors: instance.payload requires property "bids", instance.payload requires property "asks"';
|
||||||
expect(badCall).throws(errMsg);
|
expect(badCall).throws(errMsg);
|
||||||
});
|
});
|
||||||
it('throws when update message has malformed payload', () => {
|
it('throws when update message has malformed payload', () => {
|
||||||
const badCall = () => orderbookChannelMessageParser.parse(malformedUpdateOrdersChannelMessage);
|
const badCall = () => ordersChannelMessageParser.parse(malformedUpdateOrdersChannelMessage);
|
||||||
expect(badCall).throws(/^Expected message to conform to schema/);
|
expect(badCall).throws(/^Expected message to conform to schema/);
|
||||||
});
|
});
|
||||||
it('throws when input message is not valid JSON', () => {
|
it('throws when input message is not valid JSON', () => {
|
||||||
const nonJsonString = 'h93b{sdfs9fsd f';
|
const nonJsonString = 'h93b{sdfs9fsd f';
|
||||||
const badCall = () => orderbookChannelMessageParser.parse(nonJsonString);
|
const badCall = () => ordersChannelMessageParser.parse(nonJsonString);
|
||||||
expect(badCall).throws('Unexpected assetData h in JSON at position 0');
|
expect(badCall).throws('Unexpected assetData h in JSON at position 0');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
66
yarn.lock
66
yarn.lock
@ -1369,9 +1369,9 @@ aes-js@3.0.0:
|
|||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
|
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
|
||||||
|
|
||||||
aes-js@^0.2.3:
|
aes-js@^3.1.1:
|
||||||
version "0.2.4"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-0.2.4.tgz#94b881ab717286d015fa219e08fb66709dda5a3d"
|
resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.1.tgz#89fd1f94ae51b4c72d62466adc1a7323ff52f072"
|
||||||
|
|
||||||
ajv-keywords@^2.1.0:
|
ajv-keywords@^2.1.0:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
@ -2429,10 +2429,6 @@ balanced-match@^1.0.0:
|
|||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||||
|
|
||||||
base-x@^1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/base-x/-/base-x-1.1.0.tgz#42d3d717474f9ea02207f6d1aa1f426913eeb7ac"
|
|
||||||
|
|
||||||
base-x@^3.0.2:
|
base-x@^3.0.2:
|
||||||
version "3.0.4"
|
version "3.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.4.tgz#94c1788736da065edb1d68808869e357c977fa77"
|
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.4.tgz#94c1788736da065edb1d68808869e357c977fa77"
|
||||||
@ -2836,7 +2832,7 @@ browserslist@^2.1.2:
|
|||||||
caniuse-lite "^1.0.30000792"
|
caniuse-lite "^1.0.30000792"
|
||||||
electron-to-chromium "^1.3.30"
|
electron-to-chromium "^1.3.30"
|
||||||
|
|
||||||
bs58@=4.0.1:
|
bs58@=4.0.1, bs58@^4.0.0:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
|
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -2846,18 +2842,13 @@ bs58@^2.0.1:
|
|||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d"
|
resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d"
|
||||||
|
|
||||||
bs58@^3.1.0:
|
bs58check@^2.1.2:
|
||||||
version "3.1.0"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/bs58/-/bs58-3.1.0.tgz#d4c26388bf4804cac714141b1945aa47e5eb248e"
|
resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
|
||||||
dependencies:
|
dependencies:
|
||||||
base-x "^1.1.0"
|
bs58 "^4.0.0"
|
||||||
|
|
||||||
bs58check@^1.0.8:
|
|
||||||
version "1.3.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-1.3.4.tgz#c52540073749117714fa042c3047eb8f9151cbf8"
|
|
||||||
dependencies:
|
|
||||||
bs58 "^3.1.0"
|
|
||||||
create-hash "^1.1.0"
|
create-hash "^1.1.0"
|
||||||
|
safe-buffer "^5.1.2"
|
||||||
|
|
||||||
btoa@1.1.2:
|
btoa@1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
@ -5209,7 +5200,7 @@ ethereumjs-util@5.1.5, ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumj
|
|||||||
safe-buffer "^5.1.1"
|
safe-buffer "^5.1.1"
|
||||||
secp256k1 "^3.0.1"
|
secp256k1 "^3.0.1"
|
||||||
|
|
||||||
ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0, ethereumjs-util@^4.4.0:
|
ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0:
|
||||||
version "4.5.0"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6"
|
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -5263,17 +5254,18 @@ ethereumjs-vm@^2.0.2, ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4:
|
|||||||
rustbn.js "~0.1.1"
|
rustbn.js "~0.1.1"
|
||||||
safe-buffer "^5.1.1"
|
safe-buffer "^5.1.1"
|
||||||
|
|
||||||
ethereumjs-wallet@0.6.0:
|
ethereumjs-wallet@~0.6.0:
|
||||||
version "0.6.0"
|
version "0.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.0.tgz#82763b1697ee7a796be7155da9dfb49b2f98cfdb"
|
resolved "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.2.tgz#67244b6af3e8113b53d709124b25477b64aeccda"
|
||||||
dependencies:
|
dependencies:
|
||||||
aes-js "^0.2.3"
|
aes-js "^3.1.1"
|
||||||
bs58check "^1.0.8"
|
bs58check "^2.1.2"
|
||||||
ethereumjs-util "^4.4.0"
|
ethereumjs-util "^5.2.0"
|
||||||
hdkey "^0.7.0"
|
hdkey "^1.0.0"
|
||||||
|
safe-buffer "^5.1.2"
|
||||||
scrypt.js "^0.2.0"
|
scrypt.js "^0.2.0"
|
||||||
utf8 "^2.1.1"
|
utf8 "^3.0.0"
|
||||||
uuid "^2.0.1"
|
uuid "^3.3.2"
|
||||||
|
|
||||||
ethers@3.0.22:
|
ethers@3.0.22:
|
||||||
version "3.0.22"
|
version "3.0.22"
|
||||||
@ -6693,13 +6685,21 @@ hawk@~6.0.2:
|
|||||||
hoek "4.x.x"
|
hoek "4.x.x"
|
||||||
sntp "2.x.x"
|
sntp "2.x.x"
|
||||||
|
|
||||||
hdkey@^0.7.0, hdkey@^0.7.1:
|
hdkey@^0.7.1:
|
||||||
version "0.7.1"
|
version "0.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.7.1.tgz#caee4be81aa77921e909b8d228dd0f29acaee632"
|
resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.7.1.tgz#caee4be81aa77921e909b8d228dd0f29acaee632"
|
||||||
dependencies:
|
dependencies:
|
||||||
coinstring "^2.0.0"
|
coinstring "^2.0.0"
|
||||||
secp256k1 "^3.0.1"
|
secp256k1 "^3.0.1"
|
||||||
|
|
||||||
|
hdkey@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.npmjs.org/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:
|
he@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||||
@ -14036,6 +14036,10 @@ utf8@^2.1.1:
|
|||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96"
|
resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96"
|
||||||
|
|
||||||
|
utf8@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
|
||||||
|
|
||||||
util-deprecate@~1.0.1:
|
util-deprecate@~1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||||
@ -14081,6 +14085,10 @@ uuid@^2.0.1:
|
|||||||
version "2.0.3"
|
version "2.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
|
||||||
|
|
||||||
|
uuid@^3.3.2:
|
||||||
|
version "3.3.2"
|
||||||
|
resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
|
||||||
|
|
||||||
uvm@1.7.0:
|
uvm@1.7.0:
|
||||||
version "1.7.0"
|
version "1.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/uvm/-/uvm-1.7.0.tgz#685d3a149ec7118fb73a73dfdc158ab46b0f0634"
|
resolved "https://registry.yarnpkg.com/uvm/-/uvm-1.7.0.tgz#685d3a149ec7118fb73a73dfdc158ab46b0f0634"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user