Update parsing code

This commit is contained in:
fragosti 2018-08-14 19:16:36 -07:00
parent 3eeb9ddfa6
commit bb992f8a49
4 changed files with 44 additions and 23 deletions

View File

@ -8,8 +8,8 @@ import * as queryString from 'query-string';
import { schemas as clientSchemas } from './schemas/schemas'; import { schemas as clientSchemas } from './schemas/schemas';
import { import {
APIOrder, APIOrder,
AssetPairsItem,
AssetPairsRequestOpts, AssetPairsRequestOpts,
AssetPairsResponse,
Client, Client,
HttpRequestOptions, HttpRequestOptions,
HttpRequestType, HttpRequestType,
@ -18,6 +18,7 @@ import {
OrderConfigRequest, OrderConfigRequest,
OrderConfigResponse, OrderConfigResponse,
OrdersRequestOpts, OrdersRequestOpts,
OrdersResponse,
PagedRequestOpts, PagedRequestOpts,
PaginatedCollection, PaginatedCollection,
} from './types'; } from './types';
@ -61,9 +62,9 @@ export class HttpClient implements Client {
* @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 AssetPairsItems that match the request * @return The resulting AssetPairsItems that match the request
*/ */
public async getAssetPairsAsync(requestOpts?: AssetPairsRequestOpts & PagedRequestOpts): Promise<PaginatedCollection<AssetPairsItem>> { public async getAssetPairsAsync(requestOpts?: AssetPairsRequestOpts & PagedRequestOpts): Promise<AssetPairsResponse> {
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);
} }
const httpRequestOpts = { const httpRequestOpts = {
@ -78,7 +79,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<PaginatedCollection<APIOrder>> { public async getOrdersAsync(requestOpts?: OrdersRequestOpts & PagedRequestOpts): Promise<OrdersResponse> {
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);
@ -98,7 +99,7 @@ export class HttpClient implements Client {
public async getOrderAsync(orderHash: string): Promise<APIOrder> { 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.parseAPIOrderJson(responseJson);
return order; return order;
} }
/** /**
@ -128,18 +129,19 @@ export class HttpClient implements Client {
* @return The resulting OrderConfigResponse that matches the request * @return The resulting OrderConfigResponse that matches the request
*/ */
public async getOrderConfigAsync(request: OrderConfigRequest): Promise<OrderConfigResponse> { public async getOrderConfigAsync(request: OrderConfigRequest): Promise<OrderConfigResponse> {
assert.doesConformToSchema('request', request, clientSchemas.feesRequestSchema); assert.doesConformToSchema('request', request, clientSchemas.orderConfigRequestSchema);
const httpRequestOpts = { const httpRequestOpts = {
payload: request, payload: request,
}; };
const responseJson = await this._requestAsync('/fees', HttpRequestType.Post, httpRequestOpts); const responseJson = await this._requestAsync('/order_config', HttpRequestType.Post, httpRequestOpts);
const fees = relayerResponseJsonParsers.parseOrderConfigResponseJson(responseJson); const fees = relayerResponseJsonParsers.parseOrderConfigResponseJson(responseJson);
return fees; return fees;
} }
/**
* Retrieve the list of fee recipient addresses used by
*/
public async getFeeRecipientsAsync(): Promise<PaginatedCollection<string>> { public async getFeeRecipientsAsync(): Promise<PaginatedCollection<string>> {
// TODO return this._requestAsync('/fee_recipients', HttpRequestType.Get);
return;
} }
/** /**

View File

@ -71,6 +71,8 @@ export enum WebsocketClientEventType {
ConnectFailed = 'connectFailed', ConnectFailed = 'connectFailed',
} }
export type OrdersResponse = PaginatedCollection<APIOrder>;
export interface APIOrder { export interface APIOrder {
order: SignedOrder; order: SignedOrder;
metaData: object; metaData: object;
@ -81,6 +83,8 @@ export interface AssetPairsRequestOpts {
assetDataB?: string; assetDataB?: string;
} }
export type AssetPairsResponse = PaginatedCollection<AssetPairsItem>;
export interface AssetPairsItem { export interface AssetPairsItem {
assetDataA: Asset; assetDataA: Asset;
assetDataB: Asset; assetDataB: Asset;

View File

@ -1,14 +1,16 @@
import { assert } from '@0xproject/assert'; import { assert } from '@0xproject/assert';
import { schemas } from '@0xproject/json-schemas'; import { schemas } from '@0xproject/json-schemas';
import { SignedOrder } from '@0xproject/types';
import { AssetPairsItem, OrderbookResponse, OrderConfigResponse } from '../types'; import { APIOrder, AssetPairsItem, AssetPairsResponse, OrderbookResponse, OrderConfigResponse, OrdersResponse } from '../types';
import { typeConverters } from './type_converters'; import { typeConverters } from './type_converters';
export const relayerResponseJsonParsers = { export const relayerResponseJsonParsers = {
parseAssetDataPairsJson(json: any): AssetPairsItem[] { parseAssetDataPairsJson(json: any): AssetPairsResponse {
assert.doesConformToSchema('assetDataPairs', json, schemas.relayerApiAssetDataPairsResponseSchema); assert.doesConformToSchema('assetDataPairs', json, schemas.relayerApiAssetDataPairsResponseSchema);
return { ...json, records: relayerResponseJsonParsers.parseAssetDataPairsJson(json.records) };
},
parseAssetPairsItemJson(json: any): AssetPairsItem[] {
return json.map((assetDataPair: any) => { return json.map((assetDataPair: any) => {
return typeConverters.convertStringsFieldsToBigNumbers(assetDataPair, [ return typeConverters.convertStringsFieldsToBigNumbers(assetDataPair, [
'assetDataA.minAmount', 'assetDataA.minAmount',
@ -18,20 +20,20 @@ export const relayerResponseJsonParsers = {
]); ]);
}); });
}, },
parseOrdersJson(json: any): SignedOrder[] { parseOrdersJson(json: any): OrdersResponse {
assert.doesConformToSchema('orders', json, schemas.signedOrdersSchema); assert.doesConformToSchema('relayerApiOrdersResponse', json, schemas.relayerApiOrdersResponseSchema);
return json.map((order: object) => typeConverters.convertOrderStringFieldsToBigNumber(order)); return { ...json, records: json.records.map(relayerResponseJsonParsers.parseAPIOrderJson.bind(relayerResponseJsonParsers)) };
}, },
parseOrderJson(json: any): SignedOrder { parseAPIOrderJson(json: any): APIOrder {
assert.doesConformToSchema('order', json, schemas.signedOrderSchema); assert.doesConformToSchema('relayerApiOrder', json, schemas.relayerApiOrderSchema);
return typeConverters.convertOrderStringFieldsToBigNumber(json); return typeConverters.convertOrderStringFieldsToBigNumber(json);
}, },
parseOrderbookResponseJson(json: any): OrderbookResponse { parseOrderbookResponseJson(json: any): OrderbookResponse {
assert.doesConformToSchema('orderBook', json, schemas.relayerApiOrdersResponseSchema); assert.doesConformToSchema('orderBook', json, schemas.relayerApiOrderbookResponseSchema);
return typeConverters.convertOrderbookStringFieldsToBigNumber(json); return typeConverters.convertOrderbookStringFieldsToBigNumber(json);
}, },
parseOrderConfigResponseJson(json: any): OrderConfigResponse { parseOrderConfigResponseJson(json: any): OrderConfigResponse {
assert.doesConformToSchema('fees', json, schemas.relayerApiOrderConfigResponseSchema); assert.doesConformToSchema('orderConfig', json, schemas.relayerApiOrderConfigResponseSchema);
return typeConverters.convertStringsFieldsToBigNumbers(json, ['makerFee', 'takerFee']); return typeConverters.convertStringsFieldsToBigNumbers(json, ['makerFee', 'takerFee']);
}, },
}; };

View File

@ -1,14 +1,27 @@
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash'; import * as _ from 'lodash';
import { APIOrder } from '../types';
export const typeConverters = { export const typeConverters = {
convertOrderbookStringFieldsToBigNumber(orderbook: any): any { convertOrderbookStringFieldsToBigNumber(orderbook: any): any {
const bids = _.get(orderbook, 'bids', []); const bids = _.get(orderbook, 'bids', []);
const asks = _.get(orderbook, 'asks', []); const asks = _.get(orderbook, 'asks', []);
return { const convertedBids = {
bids: bids.map((order: any) => typeConverters.convertOrderStringFieldsToBigNumber(order)), ...bids,
asks: asks.map((order: any) => typeConverters.convertOrderStringFieldsToBigNumber(order)), records: bids.records.map((order: any) => typeConverters.convertAPIOrderStringFieldsToBigNumber(order)),
}; };
const convertedAsks = {
...asks,
records: asks.records.map((order: any) => typeConverters.convertAPIOrderStringFieldsToBigNumber(order)),
};
return {
bids: convertedBids,
asks: convertedAsks,
};
},
convertAPIOrderStringFieldsToBigNumber(apiOrder: any): APIOrder {
return { ...apiOrder, order: typeConverters.convertOrderStringFieldsToBigNumber(apiOrder.order) };
}, },
convertOrderStringFieldsToBigNumber(order: any): any { convertOrderStringFieldsToBigNumber(order: any): any {
return typeConverters.convertStringsFieldsToBigNumbers(order, [ return typeConverters.convertStringsFieldsToBigNumbers(order, [