Update types to reflect v2
This commit is contained in:
parent
c1cc92a46f
commit
ce88086e08
@ -9,8 +9,8 @@ import { schemas as clientSchemas } from './schemas/schemas';
|
|||||||
import {
|
import {
|
||||||
AssetPairsRequestOpts,
|
AssetPairsRequestOpts,
|
||||||
Client,
|
Client,
|
||||||
FeesRequest,
|
OrderConfigRequest,
|
||||||
FeesResponse,
|
OrderConfigResponse,
|
||||||
HttpRequestOptions,
|
HttpRequestOptions,
|
||||||
HttpRequestType,
|
HttpRequestType,
|
||||||
OrderbookRequest,
|
OrderbookRequest,
|
||||||
@ -65,8 +65,8 @@ export class HttpClient implements Client {
|
|||||||
this._apiEndpointUrl = url.replace(TRAILING_SLASHES_REGEX, ''); // remove trailing slashes
|
this._apiEndpointUrl = url.replace(TRAILING_SLASHES_REGEX, ''); // remove trailing slashes
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Retrieve token pair info from the API
|
* Retrieve assetData pair info from the API
|
||||||
* @param requestOpts Options specifying token 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 TokenPairsItems that match the request
|
||||||
*/
|
*/
|
||||||
public async getAssetPairsAsync(requestOpts?: AssetPairsRequestOpts & PagedRequestOpts): Promise<TokenPairsItem[]> {
|
public async getAssetPairsAsync(requestOpts?: AssetPairsRequestOpts & PagedRequestOpts): Promise<TokenPairsItem[]> {
|
||||||
@ -77,9 +77,9 @@ export class HttpClient implements Client {
|
|||||||
const httpRequestOpts = {
|
const httpRequestOpts = {
|
||||||
params: _.defaults({}, requestOpts, DEFAULT_PAGED_REQUEST_OPTS),
|
params: _.defaults({}, requestOpts, DEFAULT_PAGED_REQUEST_OPTS),
|
||||||
};
|
};
|
||||||
const responseJson = await this._requestAsync('/token_pairs', HttpRequestType.Get, httpRequestOpts);
|
const responseJson = await this._requestAsync('/assetData_pairs', HttpRequestType.Get, httpRequestOpts);
|
||||||
const tokenPairs = relayerResponseJsonParsers.parseTokenPairsJson(responseJson);
|
const assetDataPairs = relayerResponseJsonParsers.parseTokenPairsJson(responseJson);
|
||||||
return tokenPairs;
|
return assetDataPairs;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Retrieve orders from the API
|
* Retrieve orders from the API
|
||||||
@ -132,16 +132,16 @@ export class HttpClient implements Client {
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Retrieve fee information from the API
|
* Retrieve fee information from the API
|
||||||
* @param request A FeesRequest instance describing the specific fees to retrieve
|
* @param request A OrderConfigRequest instance describing the specific fees to retrieve
|
||||||
* @return The resulting FeesResponse that matches the request
|
* @return The resulting OrderConfigResponse that matches the request
|
||||||
*/
|
*/
|
||||||
public async getOrderConfigAsync(request: FeesRequest): Promise<FeesResponse> {
|
public async getOrderConfigAsync(request: OrderConfigRequest): Promise<OrderConfigResponse> {
|
||||||
assert.doesConformToSchema('request', request, clientSchemas.feesRequestSchema);
|
assert.doesConformToSchema('request', request, clientSchemas.feesRequestSchema);
|
||||||
const httpRequestOpts = {
|
const httpRequestOpts = {
|
||||||
payload: request,
|
payload: request,
|
||||||
};
|
};
|
||||||
const responseJson = await this._requestAsync('/fees', HttpRequestType.Post, httpRequestOpts);
|
const responseJson = await this._requestAsync('/fees', HttpRequestType.Post, httpRequestOpts);
|
||||||
const fees = relayerResponseJsonParsers.parseFeesResponseJson(responseJson);
|
const fees = relayerResponseJsonParsers.parseOrderConfigResponseJson(responseJson);
|
||||||
return fees;
|
return fees;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -2,8 +2,8 @@ export { HttpClient } from './http_client';
|
|||||||
export { orderbookChannelFactory } from './orderbook_channel_factory';
|
export { orderbookChannelFactory } from './orderbook_channel_factory';
|
||||||
export {
|
export {
|
||||||
Client,
|
Client,
|
||||||
FeesRequest,
|
OrderConfigRequest,
|
||||||
FeesResponse,
|
OrderConfigResponse,
|
||||||
OrderbookChannel,
|
OrderbookChannel,
|
||||||
OrderbookChannelHandler,
|
OrderbookChannelHandler,
|
||||||
OrderbookChannelSubscriptionOpts,
|
OrderbookChannelSubscriptionOpts,
|
||||||
@ -13,7 +13,7 @@ export {
|
|||||||
PagedRequestOpts,
|
PagedRequestOpts,
|
||||||
TokenPairsItem,
|
TokenPairsItem,
|
||||||
AssetPairsRequestOpts,
|
AssetPairsRequestOpts,
|
||||||
TokenTradeInfo,
|
Asset,
|
||||||
} from './types';
|
} from './types';
|
||||||
|
|
||||||
export { Order, SignedOrder } from '@0xproject/types';
|
export { Order, SignedOrder } from '@0xproject/types';
|
||||||
|
@ -1,26 +1,26 @@
|
|||||||
export const feesRequestSchema = {
|
export const feesRequestSchema = {
|
||||||
id: '/FeesRequest',
|
id: '/OrderConfigRequest',
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
exchangeContractAddress: { $ref: '/Address' },
|
exchangeAddress: { $ref: '/Address' },
|
||||||
maker: { $ref: '/Address' },
|
maker: { $ref: '/Address' },
|
||||||
taker: { $ref: '/Address' },
|
taker: { $ref: '/Address' },
|
||||||
makerTokenAddress: { $ref: '/Address' },
|
makerTokenAddress: { $ref: '/Address' },
|
||||||
takerTokenAddress: { $ref: '/Address' },
|
takerTokenAddress: { $ref: '/Address' },
|
||||||
makerTokenAmount: { $ref: '/Number' },
|
makerAssetAmount: { $ref: '/Number' },
|
||||||
takerTokenAmount: { $ref: '/Number' },
|
takerAssetAmount: { $ref: '/Number' },
|
||||||
expirationUnixTimestampSec: { $ref: '/Number' },
|
expirationTimeSeconds: { $ref: '/Number' },
|
||||||
salt: { $ref: '/Number' },
|
salt: { $ref: '/Number' },
|
||||||
},
|
},
|
||||||
required: [
|
required: [
|
||||||
'exchangeContractAddress',
|
'exchangeAddress',
|
||||||
'maker',
|
'maker',
|
||||||
'taker',
|
'taker',
|
||||||
'makerTokenAddress',
|
'makerTokenAddress',
|
||||||
'takerTokenAddress',
|
'takerTokenAddress',
|
||||||
'makerTokenAmount',
|
'makerAssetAmount',
|
||||||
'takerTokenAmount',
|
'takerAssetAmount',
|
||||||
'expirationUnixTimestampSec',
|
'expirationTimeSeconds',
|
||||||
'salt',
|
'salt',
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
@ -2,8 +2,8 @@ export const orderBookRequestSchema = {
|
|||||||
id: '/OrderBookRequest',
|
id: '/OrderBookRequest',
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
baseTokenAddress: { $ref: '/Address' },
|
baseAssetData: { $ref: '/Address' },
|
||||||
quoteTokenAddress: { $ref: '/Address' },
|
quoteAssetData: { $ref: '/Address' },
|
||||||
},
|
},
|
||||||
required: ['baseTokenAddress', 'quoteTokenAddress'],
|
required: ['baseAssetData', 'quoteAssetData'],
|
||||||
};
|
};
|
||||||
|
@ -2,12 +2,12 @@ export const ordersRequestOptsSchema = {
|
|||||||
id: '/OrdersRequestOpts',
|
id: '/OrdersRequestOpts',
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
exchangeContractAddress: { $ref: '/Address' },
|
exchangeAddress: { $ref: '/Address' },
|
||||||
tokenAddress: { $ref: '/Address' },
|
tokenAddress: { $ref: '/Address' },
|
||||||
makerTokenAddress: { $ref: '/Address' },
|
makerTokenAddress: { $ref: '/Address' },
|
||||||
takerTokenAddress: { $ref: '/Address' },
|
takerTokenAddress: { $ref: '/Address' },
|
||||||
tokenA: { $ref: '/Address' },
|
assetDataA: { $ref: '/Address' },
|
||||||
tokenB: { $ref: '/Address' },
|
assetDataB: { $ref: '/Address' },
|
||||||
maker: { $ref: '/Address' },
|
maker: { $ref: '/Address' },
|
||||||
taker: { $ref: '/Address' },
|
taker: { $ref: '/Address' },
|
||||||
trader: { $ref: '/Address' },
|
trader: { $ref: '/Address' },
|
||||||
|
@ -2,7 +2,7 @@ export const AssetPairsRequestOptsSchema = {
|
|||||||
id: '/AssetPairsRequestOpts',
|
id: '/AssetPairsRequestOpts',
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
tokenA: { $ref: '/Address' },
|
assetDataA: { $ref: '/Address' },
|
||||||
tokenB: { $ref: '/Address' },
|
assetDataB: { $ref: '/Address' },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -2,11 +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<TokenPairsItem[]>;
|
getAssetPairsAsync: (requestOpts?: AssetPairsRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<TokenPairsItem>>;
|
||||||
getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<SignedOrder[]>;
|
getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<APIOrder>>;
|
||||||
getOrderAsync: (orderHash: string) => Promise<SignedOrder>;
|
getOrderAsync: (orderHash: string) => Promise<APIOrder>;
|
||||||
getOrderbookAsync: (request: OrderbookRequest, requestOpts?: PagedRequestOpts) => Promise<OrderbookResponse>;
|
getOrderbookAsync: (request: OrderbookRequest, requestOpts?: PagedRequestOpts) => Promise<OrderbookResponse>;
|
||||||
getOrderConfigAsync: (request: FeesRequest) => Promise<FeesResponse>;
|
getOrderConfigAsync: (request: OrderConfigRequest) => Promise<OrderConfigResponse>;
|
||||||
|
getFeeRecipients: () => Promise<PaginatedCollection<string>>;
|
||||||
submitOrderAsync: (signedOrder: SignedOrder) => Promise<void>;
|
submitOrderAsync: (signedOrder: SignedOrder) => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,58 +17,45 @@ export interface OrderbookChannel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* baseTokenAddress: The address of token designated as the baseToken in the currency pair calculation of price
|
* baseAssetData: The address of assetData designated as the baseToken in the currency pair calculation of price
|
||||||
* quoteTokenAddress: The address of token designated as the quoteToken in the currency pair calculation of price
|
* quoteAssetData: The address of assetData designated as the quoteToken in the currency pair calculation of price
|
||||||
* snapshot: If true, a snapshot of the orderbook will be sent before the updates to the orderbook
|
* snapshot: If true, a snapshot of the orderbook will be sent before the updates to the orderbook
|
||||||
* limit: Maximum number of bids and asks in orderbook snapshot
|
* limit: Maximum number of bids and asks in orderbook snapshot
|
||||||
*/
|
*/
|
||||||
export interface OrderbookChannelSubscriptionOpts {
|
export interface OrderbookChannelSubscriptionOpts {
|
||||||
baseTokenAddress: string;
|
baseAssetData: string;
|
||||||
quoteTokenAddress: string;
|
quoteAssetData: string;
|
||||||
snapshot: boolean;
|
snapshot: boolean;
|
||||||
limit: number;
|
limit: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OrderbookChannelHandler {
|
export interface OrderbookChannelHandler {
|
||||||
onSnapshot: (
|
|
||||||
channel: OrderbookChannel,
|
|
||||||
subscriptionOpts: OrderbookChannelSubscriptionOpts,
|
|
||||||
snapshot: OrderbookResponse,
|
|
||||||
) => void;
|
|
||||||
onUpdate: (
|
onUpdate: (
|
||||||
channel: OrderbookChannel,
|
channel: OrderbookChannel,
|
||||||
subscriptionOpts: OrderbookChannelSubscriptionOpts,
|
subscriptionOpts: OrderbookChannelSubscriptionOpts,
|
||||||
order: SignedOrder,
|
order: APIOrder,
|
||||||
) => void;
|
) => void;
|
||||||
onError: (channel: OrderbookChannel, err: Error, subscriptionOpts?: OrderbookChannelSubscriptionOpts) => void;
|
onError: (channel: OrderbookChannel, err: Error, subscriptionOpts?: OrderbookChannelSubscriptionOpts) => void;
|
||||||
onClose: (channel: OrderbookChannel) => void;
|
onClose: (channel: OrderbookChannel) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OrderbookChannelMessage =
|
export type OrdersChannelMessage =
|
||||||
| SnapshotOrderbookChannelMessage
|
| UpdateOrdersChannelMessage
|
||||||
| UpdateOrderbookChannelMessage
|
| UnknownOrdersChannelMessage;
|
||||||
| UnknownOrderbookChannelMessage;
|
|
||||||
|
|
||||||
export enum OrderbookChannelMessageTypes {
|
export enum OrdersChannelMessageTypes {
|
||||||
Snapshot = 'snapshot',
|
|
||||||
Update = 'update',
|
Update = 'update',
|
||||||
Unknown = 'unknown',
|
Unknown = 'unknown',
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SnapshotOrderbookChannelMessage {
|
export interface UpdateOrdersChannelMessage {
|
||||||
type: OrderbookChannelMessageTypes.Snapshot;
|
type: OrdersChannelMessageTypes.Update;
|
||||||
requestId: number;
|
requestId: number;
|
||||||
payload: OrderbookResponse;
|
payload: APIOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface UpdateOrderbookChannelMessage {
|
export interface UnknownOrdersChannelMessage {
|
||||||
type: OrderbookChannelMessageTypes.Update;
|
type: OrdersChannelMessageTypes.Unknown;
|
||||||
requestId: number;
|
|
||||||
payload: SignedOrder;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface UnknownOrderbookChannelMessage {
|
|
||||||
type: OrderbookChannelMessageTypes.Unknown;
|
|
||||||
requestId: number;
|
requestId: number;
|
||||||
payload: undefined;
|
payload: undefined;
|
||||||
}
|
}
|
||||||
@ -83,25 +71,30 @@ export enum WebsocketClientEventType {
|
|||||||
ConnectFailed = 'connectFailed',
|
ConnectFailed = 'connectFailed',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface APIOrder {
|
||||||
|
order: SignedOrder;
|
||||||
|
metaData: object;
|
||||||
|
}
|
||||||
|
|
||||||
export interface AssetPairsRequestOpts {
|
export interface AssetPairsRequestOpts {
|
||||||
tokenA?: string;
|
assetDataA?: string;
|
||||||
tokenB?: string;
|
assetDataB?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TokenPairsItem {
|
export interface TokenPairsItem {
|
||||||
tokenA: TokenTradeInfo;
|
assetDataA: Asset;
|
||||||
tokenB: TokenTradeInfo;
|
assetDataB: Asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TokenTradeInfo {
|
export interface Asset {
|
||||||
address: string;
|
assetData: string;
|
||||||
minAmount: BigNumber;
|
minAmount: BigNumber;
|
||||||
maxAmount: BigNumber;
|
maxAmount: BigNumber;
|
||||||
precision: number;
|
precision: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OrdersRequestOpts {
|
export interface OrdersRequestOpts {
|
||||||
exchangeContractAddress?: string;
|
exchangeAddress?: string;
|
||||||
tokenAddress?: string;
|
tokenAddress?: string;
|
||||||
makerTokenAddress?: string;
|
makerTokenAddress?: string;
|
||||||
takerTokenAddress?: string;
|
takerTokenAddress?: string;
|
||||||
@ -112,35 +105,35 @@ export interface OrdersRequestOpts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface OrderbookRequest {
|
export interface OrderbookRequest {
|
||||||
baseTokenAddress: string;
|
baseAssetData: string;
|
||||||
quoteTokenAddress: string;
|
quoteAssetData: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OrderbookResponse {
|
export interface OrderbookResponse {
|
||||||
bids: SignedOrder[];
|
bids: PaginatedCollection<APIOrder>;
|
||||||
asks: SignedOrder[];
|
asks: PaginatedCollection<APIOrder>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PaginatedCollectionResponse<T> {
|
export interface PaginatedCollection<T> {
|
||||||
total: number;
|
total: number;
|
||||||
page: number;
|
page: number;
|
||||||
perPage: number;
|
perPage: number;
|
||||||
records: T[];
|
records: T[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FeesRequest {
|
export interface OrderConfigRequest {
|
||||||
exchangeContractAddress: string;
|
exchangeAddress: string;
|
||||||
maker: string;
|
maker: string;
|
||||||
taker: string;
|
taker: string;
|
||||||
makerTokenAddress: string;
|
makerTokenAddress: string;
|
||||||
takerTokenAddress: string;
|
takerTokenAddress: string;
|
||||||
makerTokenAmount: BigNumber;
|
makerAssetAmount: BigNumber;
|
||||||
takerTokenAmount: BigNumber;
|
takerAssetAmount: BigNumber;
|
||||||
expirationUnixTimestampSec: BigNumber;
|
expirationTimeSeconds: BigNumber;
|
||||||
salt: BigNumber;
|
salt: BigNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FeesResponse {
|
export interface OrderConfigResponse {
|
||||||
feeRecipient: string;
|
feeRecipient: string;
|
||||||
makerFee: BigNumber;
|
makerFee: BigNumber;
|
||||||
takerFee: BigNumber;
|
takerFee: BigNumber;
|
||||||
|
@ -2,12 +2,12 @@ import { assert } from '@0xproject/assert';
|
|||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { OrderbookChannelMessage, OrderbookChannelMessageTypes } from '../types';
|
import { OrdersChannelMessage, OrdersChannelMessageTypes } from '../types';
|
||||||
|
|
||||||
import { relayerResponseJsonParsers } from './relayer_response_json_parsers';
|
import { relayerResponseJsonParsers } from './relayer_response_json_parsers';
|
||||||
|
|
||||||
export const orderbookChannelMessageParser = {
|
export const orderbookChannelMessageParser = {
|
||||||
parse(utf8Data: string): OrderbookChannelMessage {
|
parse(utf8Data: string): OrdersChannelMessage {
|
||||||
// parse the message
|
// parse the message
|
||||||
const messageObj = JSON.parse(utf8Data);
|
const messageObj = JSON.parse(utf8Data);
|
||||||
// ensure we have a type parameter to switch on
|
// ensure we have a type parameter to switch on
|
||||||
@ -19,13 +19,13 @@ 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 OrderbookChannelMessageTypes.Snapshot: {
|
case OrdersChannelMessageTypes.Snapshot: {
|
||||||
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelSnapshotSchema);
|
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelSnapshotSchema);
|
||||||
const orderbookJson = messageObj.payload;
|
const orderbookJson = messageObj.payload;
|
||||||
const orderbook = relayerResponseJsonParsers.parseOrderbookResponseJson(orderbookJson);
|
const orderbook = relayerResponseJsonParsers.parseOrderbookResponseJson(orderbookJson);
|
||||||
return _.assign(messageObj, { payload: orderbook });
|
return _.assign(messageObj, { payload: orderbook });
|
||||||
}
|
}
|
||||||
case OrderbookChannelMessageTypes.Update: {
|
case OrdersChannelMessageTypes.Update: {
|
||||||
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelUpdateSchema);
|
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelUpdateSchema);
|
||||||
const orderJson = messageObj.payload;
|
const orderJson = messageObj.payload;
|
||||||
const order = relayerResponseJsonParsers.parseOrderJson(orderJson);
|
const order = relayerResponseJsonParsers.parseOrderJson(orderJson);
|
||||||
@ -33,7 +33,7 @@ export const orderbookChannelMessageParser = {
|
|||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
return {
|
return {
|
||||||
type: OrderbookChannelMessageTypes.Unknown,
|
type: OrdersChannelMessageTypes.Unknown,
|
||||||
requestId,
|
requestId,
|
||||||
payload: undefined,
|
payload: undefined,
|
||||||
};
|
};
|
||||||
|
@ -2,19 +2,19 @@ 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 { FeesResponse, OrderbookResponse, TokenPairsItem } from '../types';
|
import { OrderConfigResponse, OrderbookResponse, TokenPairsItem } from '../types';
|
||||||
|
|
||||||
import { typeConverters } from './type_converters';
|
import { typeConverters } from './type_converters';
|
||||||
|
|
||||||
export const relayerResponseJsonParsers = {
|
export const relayerResponseJsonParsers = {
|
||||||
parseTokenPairsJson(json: any): TokenPairsItem[] {
|
parseTokenPairsJson(json: any): TokenPairsItem[] {
|
||||||
assert.doesConformToSchema('tokenPairs', json, schemas.relayerApiTokenPairsResponseSchema);
|
assert.doesConformToSchema('assetDataPairs', json, schemas.relayerApiTokenPairsResponseSchema);
|
||||||
return json.map((tokenPair: any) => {
|
return json.map((assetDataPair: any) => {
|
||||||
return typeConverters.convertStringsFieldsToBigNumbers(tokenPair, [
|
return typeConverters.convertStringsFieldsToBigNumbers(assetDataPair, [
|
||||||
'tokenA.minAmount',
|
'assetDataA.minAmount',
|
||||||
'tokenA.maxAmount',
|
'assetDataA.maxAmount',
|
||||||
'tokenB.minAmount',
|
'assetDataB.minAmount',
|
||||||
'tokenB.maxAmount',
|
'assetDataB.maxAmount',
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -30,8 +30,8 @@ export const relayerResponseJsonParsers = {
|
|||||||
assert.doesConformToSchema('orderBook', json, schemas.relayerApiOrderBookResponseSchema);
|
assert.doesConformToSchema('orderBook', json, schemas.relayerApiOrderBookResponseSchema);
|
||||||
return typeConverters.convertOrderbookStringFieldsToBigNumber(json);
|
return typeConverters.convertOrderbookStringFieldsToBigNumber(json);
|
||||||
},
|
},
|
||||||
parseFeesResponseJson(json: any): FeesResponse {
|
parseOrderConfigResponseJson(json: any): OrderConfigResponse {
|
||||||
assert.doesConformToSchema('fees', json, schemas.relayerApiFeesResponseSchema);
|
assert.doesConformToSchema('fees', json, schemas.relayerApiOrderConfigResponseSchema);
|
||||||
return typeConverters.convertStringsFieldsToBigNumbers(json, ['makerFee', 'takerFee']);
|
return typeConverters.convertStringsFieldsToBigNumbers(json, ['makerFee', 'takerFee']);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -12,11 +12,11 @@ export const typeConverters = {
|
|||||||
},
|
},
|
||||||
convertOrderStringFieldsToBigNumber(order: any): any {
|
convertOrderStringFieldsToBigNumber(order: any): any {
|
||||||
return typeConverters.convertStringsFieldsToBigNumbers(order, [
|
return typeConverters.convertStringsFieldsToBigNumbers(order, [
|
||||||
'makerTokenAmount',
|
'makerAssetAmount',
|
||||||
'takerTokenAmount',
|
'takerAssetAmount',
|
||||||
'makerFee',
|
'makerFee',
|
||||||
'takerFee',
|
'takerFee',
|
||||||
'expirationUnixTimestampSec',
|
'expirationTimeSeconds',
|
||||||
'salt',
|
'salt',
|
||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
|
@ -4,8 +4,8 @@ import * as WebSocket from 'websocket';
|
|||||||
import {
|
import {
|
||||||
OrderbookChannel,
|
OrderbookChannel,
|
||||||
OrderbookChannelHandler,
|
OrderbookChannelHandler,
|
||||||
OrderbookChannelMessageTypes,
|
|
||||||
OrderbookChannelSubscriptionOpts,
|
OrderbookChannelSubscriptionOpts,
|
||||||
|
OrdersChannelMessageTypes,
|
||||||
} from './types';
|
} from './types';
|
||||||
import { assert } from './utils/assert';
|
import { assert } from './utils/assert';
|
||||||
import { orderbookChannelMessageParser } from './utils/orderbook_channel_message_parser';
|
import { orderbookChannelMessageParser } from './utils/orderbook_channel_message_parser';
|
||||||
@ -44,7 +44,7 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
|
|||||||
/**
|
/**
|
||||||
* Subscribe to orderbook snapshots and updates from the websocket
|
* Subscribe to orderbook snapshots and updates from the websocket
|
||||||
* @param subscriptionOpts An OrderbookChannelSubscriptionOpts instance describing which
|
* @param subscriptionOpts An OrderbookChannelSubscriptionOpts instance describing which
|
||||||
* token pair to subscribe to
|
* assetData pair to subscribe to
|
||||||
*/
|
*/
|
||||||
public subscribe(subscriptionOpts: OrderbookChannelSubscriptionOpts): void {
|
public subscribe(subscriptionOpts: OrderbookChannelSubscriptionOpts): void {
|
||||||
assert.isOrderbookChannelSubscriptionOpts('subscriptionOpts', subscriptionOpts);
|
assert.isOrderbookChannelSubscriptionOpts('subscriptionOpts', subscriptionOpts);
|
||||||
@ -82,11 +82,11 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (parserResult.type) {
|
switch (parserResult.type) {
|
||||||
case OrderbookChannelMessageTypes.Snapshot: {
|
case OrdersChannelMessageTypes.Snapshot: {
|
||||||
this._handler.onSnapshot(this, subscriptionOpts, parserResult.payload);
|
this._handler.onSnapshot(this, subscriptionOpts, parserResult.payload);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OrderbookChannelMessageTypes.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 { FeesResponse } from '../../../src/types';
|
import { OrderConfigResponse } from '../../../src/types';
|
||||||
|
|
||||||
export const feesResponse: FeesResponse = {
|
export const feesResponse: OrderConfigResponse = {
|
||||||
feeRecipient: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
feeRecipient: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
makerFee: new BigNumber('10000000000000000'),
|
makerFee: new BigNumber('10000000000000000'),
|
||||||
takerFee: new BigNumber('30000000000000000'),
|
takerFee: new BigNumber('30000000000000000'),
|
||||||
|
@ -3,14 +3,14 @@
|
|||||||
"taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32",
|
"taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32",
|
||||||
"makerFee": "100000000000000",
|
"makerFee": "100000000000000",
|
||||||
"takerFee": "200000000000000",
|
"takerFee": "200000000000000",
|
||||||
"makerTokenAmount": "10000000000000000",
|
"makerAssetAmount": "10000000000000000",
|
||||||
"takerTokenAmount": "20000000000000000",
|
"takerAssetAmount": "20000000000000000",
|
||||||
"makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
"makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
||||||
"takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
"takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
||||||
"salt": "256",
|
"salt": "256",
|
||||||
"feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da",
|
"feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da",
|
||||||
"exchangeContractAddress": "0x12459c951127e0c374ff9105dda097662a027093",
|
"exchangeAddress": "0x12459c951127e0c374ff9105dda097662a027093",
|
||||||
"expirationUnixTimestampSec": "42",
|
"expirationTimeSeconds": "42",
|
||||||
"ecSignature": {
|
"ecSignature": {
|
||||||
"v": 27,
|
"v": 27,
|
||||||
"r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33",
|
"r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33",
|
||||||
|
@ -5,14 +5,14 @@ export const orderResponse = {
|
|||||||
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||||
makerFee: new BigNumber('100000000000000'),
|
makerFee: new BigNumber('100000000000000'),
|
||||||
takerFee: new BigNumber('200000000000000'),
|
takerFee: new BigNumber('200000000000000'),
|
||||||
makerTokenAmount: new BigNumber('10000000000000000'),
|
makerAssetAmount: new BigNumber('10000000000000000'),
|
||||||
takerTokenAmount: new BigNumber('20000000000000000'),
|
takerAssetAmount: new BigNumber('20000000000000000'),
|
||||||
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
||||||
salt: new BigNumber('256'),
|
salt: new BigNumber('256'),
|
||||||
feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da',
|
feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da',
|
||||||
exchangeContractAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
||||||
expirationUnixTimestampSec: new BigNumber('42'),
|
expirationTimeSeconds: new BigNumber('42'),
|
||||||
ecSignature: {
|
ecSignature: {
|
||||||
v: 27,
|
v: 27,
|
||||||
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
||||||
|
@ -5,14 +5,14 @@
|
|||||||
"taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32",
|
"taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32",
|
||||||
"makerFee": "100000000000000",
|
"makerFee": "100000000000000",
|
||||||
"takerFee": "200000000000000",
|
"takerFee": "200000000000000",
|
||||||
"makerTokenAmount": "10000000000000000",
|
"makerAssetAmount": "10000000000000000",
|
||||||
"takerTokenAmount": "20000000000000000",
|
"takerAssetAmount": "20000000000000000",
|
||||||
"makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
"makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
||||||
"takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
"takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
||||||
"salt": "256",
|
"salt": "256",
|
||||||
"feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da",
|
"feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da",
|
||||||
"exchangeContractAddress": "0x12459c951127e0c374ff9105dda097662a027093",
|
"exchangeAddress": "0x12459c951127e0c374ff9105dda097662a027093",
|
||||||
"expirationUnixTimestampSec": "42",
|
"expirationTimeSeconds": "42",
|
||||||
"ecSignature": {
|
"ecSignature": {
|
||||||
"v": 27,
|
"v": 27,
|
||||||
"r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33",
|
"r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33",
|
||||||
@ -26,14 +26,14 @@
|
|||||||
"taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32",
|
"taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32",
|
||||||
"makerFee": "100000000000000",
|
"makerFee": "100000000000000",
|
||||||
"takerFee": "200000000000000",
|
"takerFee": "200000000000000",
|
||||||
"makerTokenAmount": "10000000000000000",
|
"makerAssetAmount": "10000000000000000",
|
||||||
"takerTokenAmount": "20000000000000000",
|
"takerAssetAmount": "20000000000000000",
|
||||||
"makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
"makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
||||||
"takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
"takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
||||||
"salt": "256",
|
"salt": "256",
|
||||||
"feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da",
|
"feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da",
|
||||||
"exchangeContractAddress": "0x12459c951127e0c374ff9105dda097662a027093",
|
"exchangeAddress": "0x12459c951127e0c374ff9105dda097662a027093",
|
||||||
"expirationUnixTimestampSec": "42",
|
"expirationTimeSeconds": "42",
|
||||||
"ecSignature": {
|
"ecSignature": {
|
||||||
"v": 27,
|
"v": 27,
|
||||||
"r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33",
|
"r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33",
|
||||||
|
@ -7,14 +7,14 @@ export const orderbookResponse = {
|
|||||||
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||||
makerFee: new BigNumber('100000000000000'),
|
makerFee: new BigNumber('100000000000000'),
|
||||||
takerFee: new BigNumber('200000000000000'),
|
takerFee: new BigNumber('200000000000000'),
|
||||||
makerTokenAmount: new BigNumber('10000000000000000'),
|
makerAssetAmount: new BigNumber('10000000000000000'),
|
||||||
takerTokenAmount: new BigNumber('20000000000000000'),
|
takerAssetAmount: new BigNumber('20000000000000000'),
|
||||||
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
||||||
salt: new BigNumber('256'),
|
salt: new BigNumber('256'),
|
||||||
feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da',
|
feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da',
|
||||||
exchangeContractAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
||||||
expirationUnixTimestampSec: new BigNumber('42'),
|
expirationTimeSeconds: new BigNumber('42'),
|
||||||
ecSignature: {
|
ecSignature: {
|
||||||
v: 27,
|
v: 27,
|
||||||
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
||||||
@ -28,14 +28,14 @@ export const orderbookResponse = {
|
|||||||
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||||
makerFee: new BigNumber('100000000000000'),
|
makerFee: new BigNumber('100000000000000'),
|
||||||
takerFee: new BigNumber('200000000000000'),
|
takerFee: new BigNumber('200000000000000'),
|
||||||
makerTokenAmount: new BigNumber('10000000000000000'),
|
makerAssetAmount: new BigNumber('10000000000000000'),
|
||||||
takerTokenAmount: new BigNumber('20000000000000000'),
|
takerAssetAmount: new BigNumber('20000000000000000'),
|
||||||
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
||||||
salt: new BigNumber('256'),
|
salt: new BigNumber('256'),
|
||||||
feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da',
|
feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da',
|
||||||
exchangeContractAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
||||||
expirationUnixTimestampSec: new BigNumber('42'),
|
expirationTimeSeconds: new BigNumber('42'),
|
||||||
ecSignature: {
|
ecSignature: {
|
||||||
v: 27,
|
v: 27,
|
||||||
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
"taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32",
|
"taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32",
|
||||||
"makerFee": "100000000000000",
|
"makerFee": "100000000000000",
|
||||||
"takerFee": "200000000000000",
|
"takerFee": "200000000000000",
|
||||||
"makerTokenAmount": "10000000000000000",
|
"makerAssetAmount": "10000000000000000",
|
||||||
"takerTokenAmount": "20000000000000000",
|
"takerAssetAmount": "20000000000000000",
|
||||||
"makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
"makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
||||||
"takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
"takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
||||||
"salt": "256",
|
"salt": "256",
|
||||||
"feeRecipient": "0x9e56625509c2f60af937f23b7b532600390e8c8b",
|
"feeRecipient": "0x9e56625509c2f60af937f23b7b532600390e8c8b",
|
||||||
"exchangeContractAddress": "0x9e56625509c2f60af937f23b7b532600390e8c8b",
|
"exchangeAddress": "0x9e56625509c2f60af937f23b7b532600390e8c8b",
|
||||||
"expirationUnixTimestampSec": "42",
|
"expirationTimeSeconds": "42",
|
||||||
"ecSignature": {
|
"ecSignature": {
|
||||||
"v": 27,
|
"v": 27,
|
||||||
"r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33",
|
"r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33",
|
||||||
|
@ -6,14 +6,14 @@ export const ordersResponse = [
|
|||||||
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||||
makerFee: new BigNumber('100000000000000'),
|
makerFee: new BigNumber('100000000000000'),
|
||||||
takerFee: new BigNumber('200000000000000'),
|
takerFee: new BigNumber('200000000000000'),
|
||||||
makerTokenAmount: new BigNumber('10000000000000000'),
|
makerAssetAmount: new BigNumber('10000000000000000'),
|
||||||
takerTokenAmount: new BigNumber('20000000000000000'),
|
takerAssetAmount: new BigNumber('20000000000000000'),
|
||||||
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
||||||
salt: new BigNumber('256'),
|
salt: new BigNumber('256'),
|
||||||
feeRecipient: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
|
feeRecipient: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
|
||||||
exchangeContractAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
|
exchangeAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
|
||||||
expirationUnixTimestampSec: new BigNumber('42'),
|
expirationTimeSeconds: new BigNumber('42'),
|
||||||
ecSignature: {
|
ecSignature: {
|
||||||
v: 27,
|
v: 27,
|
||||||
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
import * as orderbookJSON from './orderbook.json';
|
|
||||||
|
|
||||||
const orderbookJsonString = JSON.stringify(orderbookJSON);
|
|
||||||
|
|
||||||
export const snapshotOrderbookChannelMessage = `{
|
|
||||||
"type": "snapshot",
|
|
||||||
"channel": "orderbook",
|
|
||||||
"requestId": 1,
|
|
||||||
"payload": ${orderbookJsonString}
|
|
||||||
}`;
|
|
||||||
|
|
||||||
export const malformedSnapshotOrderbookChannelMessage = `{
|
|
||||||
"type": "snapshot",
|
|
||||||
"channel": "orderbook",
|
|
||||||
"requestId": 1,
|
|
||||||
"payload": {}
|
|
||||||
}`;
|
|
@ -1,12 +1,12 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"tokenA": {
|
"assetDataA": {
|
||||||
"address": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
"address": "0x323b5d4c32345ced77393b3530b1eed0f346429d",
|
||||||
"minAmount": "0",
|
"minAmount": "0",
|
||||||
"maxAmount": "10000000000000000000",
|
"maxAmount": "10000000000000000000",
|
||||||
"precision": 5
|
"precision": 5
|
||||||
},
|
},
|
||||||
"tokenB": {
|
"assetDataB": {
|
||||||
"address": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
"address": "0xef7fff64389b814a946f3e92105513705ca6b990",
|
||||||
"minAmount": "0",
|
"minAmount": "0",
|
||||||
"maxAmount": "50000000000000000000",
|
"maxAmount": "50000000000000000000",
|
||||||
|
@ -2,15 +2,15 @@ import { BigNumber } from '@0xproject/utils';
|
|||||||
|
|
||||||
import { TokenPairsItem } from '../../../src/types';
|
import { TokenPairsItem } from '../../../src/types';
|
||||||
|
|
||||||
export const tokenPairsResponse: TokenPairsItem[] = [
|
export const assetDataPairsResponse: TokenPairsItem[] = [
|
||||||
{
|
{
|
||||||
tokenA: {
|
assetDataA: {
|
||||||
address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
minAmount: new BigNumber(0),
|
minAmount: new BigNumber(0),
|
||||||
maxAmount: new BigNumber('10000000000000000000'),
|
maxAmount: new BigNumber('10000000000000000000'),
|
||||||
precision: 5,
|
precision: 5,
|
||||||
},
|
},
|
||||||
tokenB: {
|
assetDataB: {
|
||||||
address: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
address: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
||||||
minAmount: new BigNumber(0),
|
minAmount: new BigNumber(0),
|
||||||
maxAmount: new BigNumber('50000000000000000000'),
|
maxAmount: new BigNumber('50000000000000000000'),
|
||||||
|
@ -2,7 +2,7 @@ import * as orderResponseJSON from './order/0xabc67323774bdbd24d94f977fa9ac94a50
|
|||||||
|
|
||||||
const orderJSONString = JSON.stringify(orderResponseJSON);
|
const orderJSONString = JSON.stringify(orderResponseJSON);
|
||||||
|
|
||||||
export const unknownOrderbookChannelMessage = `{
|
export const unknownOrdersChannelMessage = `{
|
||||||
"type": "superGoodUpdate",
|
"type": "superGoodUpdate",
|
||||||
"channel": "orderbook",
|
"channel": "orderbook",
|
||||||
"requestId": 1,
|
"requestId": 1,
|
||||||
|
@ -2,14 +2,14 @@ import * as orderResponseJSON from './order/0xabc67323774bdbd24d94f977fa9ac94a50
|
|||||||
|
|
||||||
const orderJSONString = JSON.stringify(orderResponseJSON);
|
const orderJSONString = JSON.stringify(orderResponseJSON);
|
||||||
|
|
||||||
export const updateOrderbookChannelMessage = `{
|
export const updateOrdersChannelMessage = `{
|
||||||
"type": "update",
|
"type": "update",
|
||||||
"channel": "orderbook",
|
"channel": "orderbook",
|
||||||
"requestId": 1,
|
"requestId": 1,
|
||||||
"payload": ${orderJSONString}
|
"payload": ${orderJSONString}
|
||||||
}`;
|
}`;
|
||||||
|
|
||||||
export const malformedUpdateOrderbookChannelMessage = `{
|
export const malformedUpdateOrdersChannelMessage = `{
|
||||||
"type": "update",
|
"type": "update",
|
||||||
"channel": "orderbook",
|
"channel": "orderbook",
|
||||||
"requestId": 1,
|
"requestId": 1,
|
||||||
|
@ -15,8 +15,8 @@ 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 { tokenPairsResponse } from './fixtures/standard_relayer_api/token_pairs';
|
import { assetDataPairsResponse } from './fixtures/standard_relayer_api/assetData_pairs';
|
||||||
import * as tokenPairsResponseJSON from './fixtures/standard_relayer_api/token_pairs.json';
|
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);
|
||||||
@ -39,24 +39,24 @@ describe('HttpClient', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('#getAssetPairsAsync', () => {
|
describe('#getAssetPairsAsync', () => {
|
||||||
const url = `${relayUrl}/token_pairs`;
|
const url = `${relayUrl}/assetData_pairs`;
|
||||||
it('gets token pairs with default options when none are provided', async () => {
|
it('gets assetData pairs with default options when none are provided', async () => {
|
||||||
const urlWithQuery = `${url}?page=1&per_page=100`;
|
const urlWithQuery = `${url}?page=1&per_page=100`;
|
||||||
fetchMock.get(urlWithQuery, tokenPairsResponseJSON);
|
fetchMock.get(urlWithQuery, assetDataPairsResponseJSON);
|
||||||
const tokenPairs = await relayerClient.getAssetPairsAsync();
|
const assetDataPairs = await relayerClient.getAssetPairsAsync();
|
||||||
expect(tokenPairs).to.be.deep.equal(tokenPairsResponse);
|
expect(assetDataPairs).to.be.deep.equal(assetDataPairsResponse);
|
||||||
});
|
});
|
||||||
it('gets token pairs with specified request options', async () => {
|
it('gets assetData pairs with specified request options', async () => {
|
||||||
const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
|
const assetDataAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
|
||||||
const AssetPairsRequestOpts = {
|
const AssetPairsRequestOpts = {
|
||||||
tokenA: tokenAddress,
|
assetDataA: assetDataAddress,
|
||||||
page: 3,
|
page: 3,
|
||||||
perPage: 50,
|
perPage: 50,
|
||||||
};
|
};
|
||||||
const urlWithQuery = `${url}?page=3&per_page=50&tokenA=${tokenAddress}`;
|
const urlWithQuery = `${url}?page=3&per_page=50&assetDataA=${assetDataAddress}`;
|
||||||
fetchMock.get(urlWithQuery, tokenPairsResponseJSON);
|
fetchMock.get(urlWithQuery, assetDataPairsResponseJSON);
|
||||||
const tokenPairs = await relayerClient.getAssetPairsAsync(AssetPairsRequestOpts);
|
const assetDataPairs = await relayerClient.getAssetPairsAsync(AssetPairsRequestOpts);
|
||||||
expect(tokenPairs).to.be.deep.equal(tokenPairsResponse);
|
expect(assetDataPairs).to.be.deep.equal(assetDataPairsResponse);
|
||||||
});
|
});
|
||||||
it('throws an error for invalid JSON response', async () => {
|
it('throws an error for invalid JSON response', async () => {
|
||||||
fetchMock.get(url, { test: 'dummy' });
|
fetchMock.get(url, { test: 'dummy' });
|
||||||
@ -72,13 +72,13 @@ describe('HttpClient', () => {
|
|||||||
expect(orders).to.be.deep.equal(ordersResponse);
|
expect(orders).to.be.deep.equal(ordersResponse);
|
||||||
});
|
});
|
||||||
it('gets orders with specified request options', async () => {
|
it('gets orders with specified request options', async () => {
|
||||||
const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
|
const assetDataAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
|
||||||
const ordersRequest = {
|
const ordersRequest = {
|
||||||
tokenAddress,
|
assetDataAddress,
|
||||||
page: 3,
|
page: 3,
|
||||||
perPage: 50,
|
perPage: 50,
|
||||||
};
|
};
|
||||||
const urlWithQuery = `${url}?page=3&per_page=50&tokenAddress=${tokenAddress}`;
|
const urlWithQuery = `${url}?page=3&per_page=50&assetDataAddress=${assetDataAddress}`;
|
||||||
fetchMock.get(urlWithQuery, ordersResponseJSON);
|
fetchMock.get(urlWithQuery, ordersResponseJSON);
|
||||||
const orders = await relayerClient.getOrdersAsync(ordersRequest);
|
const orders = await relayerClient.getOrdersAsync(ordersRequest);
|
||||||
expect(orders).to.be.deep.equal(ordersResponse);
|
expect(orders).to.be.deep.equal(ordersResponse);
|
||||||
@ -103,22 +103,22 @@ describe('HttpClient', () => {
|
|||||||
});
|
});
|
||||||
describe('#getOrderBookAsync', () => {
|
describe('#getOrderBookAsync', () => {
|
||||||
const request = {
|
const request = {
|
||||||
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
baseAssetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
quoteTokenAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
quoteAssetData: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||||
};
|
};
|
||||||
const url = `${relayUrl}/orderbook`;
|
const url = `${relayUrl}/orderbook`;
|
||||||
it('gets orderbook with default page options when none are provided', async () => {
|
it('gets orderbook with default page options when none are provided', async () => {
|
||||||
const urlWithQuery = `${url}?baseTokenAddress=${
|
const urlWithQuery = `${url}?baseAssetData=${
|
||||||
request.baseTokenAddress
|
request.baseAssetData
|
||||||
}&page=1&per_page=100"eTokenAddress=${request.quoteTokenAddress}`;
|
}&page=1&per_page=100"eAssetData=${request.quoteAssetData}`;
|
||||||
fetchMock.get(urlWithQuery, orderbookJSON);
|
fetchMock.get(urlWithQuery, orderbookJSON);
|
||||||
const orderbook = await relayerClient.getOrderbookAsync(request);
|
const orderbook = await relayerClient.getOrderbookAsync(request);
|
||||||
expect(orderbook).to.be.deep.equal(orderbookResponse);
|
expect(orderbook).to.be.deep.equal(orderbookResponse);
|
||||||
});
|
});
|
||||||
it('gets orderbook with specified page options', async () => {
|
it('gets orderbook with specified page options', async () => {
|
||||||
const urlWithQuery = `${url}?baseTokenAddress=${
|
const urlWithQuery = `${url}?baseAssetData=${
|
||||||
request.baseTokenAddress
|
request.baseAssetData
|
||||||
}&page=3&per_page=50"eTokenAddress=${request.quoteTokenAddress}`;
|
}&page=3&per_page=50"eAssetData=${request.quoteAssetData}`;
|
||||||
fetchMock.get(urlWithQuery, orderbookJSON);
|
fetchMock.get(urlWithQuery, orderbookJSON);
|
||||||
const pagedRequestOptions = {
|
const pagedRequestOptions = {
|
||||||
page: 3,
|
page: 3,
|
||||||
@ -134,15 +134,15 @@ describe('HttpClient', () => {
|
|||||||
});
|
});
|
||||||
describe('#getOrderConfigAsync', () => {
|
describe('#getOrderConfigAsync', () => {
|
||||||
const request = {
|
const request = {
|
||||||
exchangeContractAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
||||||
maker: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
|
maker: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
|
||||||
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||||
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
||||||
makerTokenAmount: new BigNumber('10000000000000000000'),
|
makerAssetAmount: new BigNumber('10000000000000000000'),
|
||||||
takerTokenAmount: new BigNumber('30000000000000000000'),
|
takerAssetAmount: new BigNumber('30000000000000000000'),
|
||||||
salt: new BigNumber('256'),
|
salt: new BigNumber('256'),
|
||||||
expirationUnixTimestampSec: new BigNumber('42'),
|
expirationTimeSeconds: new BigNumber('42'),
|
||||||
};
|
};
|
||||||
const url = `${relayUrl}/fees`;
|
const url = `${relayUrl}/fees`;
|
||||||
it('gets fees', async () => {
|
it('gets fees', async () => {
|
||||||
@ -152,15 +152,15 @@ describe('HttpClient', () => {
|
|||||||
});
|
});
|
||||||
it('does not mutate input', async () => {
|
it('does not mutate input', async () => {
|
||||||
fetchMock.post(url, feesResponseJSON);
|
fetchMock.post(url, feesResponseJSON);
|
||||||
const makerTokenAmountBefore = new BigNumber(request.makerTokenAmount);
|
const makerAssetAmountBefore = new BigNumber(request.makerAssetAmount);
|
||||||
const takerTokenAmountBefore = new BigNumber(request.takerTokenAmount);
|
const takerAssetAmountBefore = new BigNumber(request.takerAssetAmount);
|
||||||
const saltBefore = new BigNumber(request.salt);
|
const saltBefore = new BigNumber(request.salt);
|
||||||
const expirationUnixTimestampSecBefore = new BigNumber(request.expirationUnixTimestampSec);
|
const expirationTimeSecondsBefore = new BigNumber(request.expirationTimeSeconds);
|
||||||
await relayerClient.getOrderConfigAsync(request);
|
await relayerClient.getOrderConfigAsync(request);
|
||||||
expect(makerTokenAmountBefore).to.be.deep.equal(request.makerTokenAmount);
|
expect(makerAssetAmountBefore).to.be.deep.equal(request.makerAssetAmount);
|
||||||
expect(takerTokenAmountBefore).to.be.deep.equal(request.takerTokenAmount);
|
expect(takerAssetAmountBefore).to.be.deep.equal(request.takerAssetAmount);
|
||||||
expect(saltBefore).to.be.deep.equal(request.salt);
|
expect(saltBefore).to.be.deep.equal(request.salt);
|
||||||
expect(expirationUnixTimestampSecBefore).to.be.deep.equal(request.expirationUnixTimestampSec);
|
expect(expirationTimeSecondsBefore).to.be.deep.equal(request.expirationTimeSeconds);
|
||||||
});
|
});
|
||||||
it('throws an error for invalid JSON response', async () => {
|
it('throws an error for invalid JSON response', async () => {
|
||||||
fetchMock.post(url, { test: 'dummy' });
|
fetchMock.post(url, { test: 'dummy' });
|
||||||
|
@ -7,13 +7,13 @@ import { orderbookChannelMessageParser } from '../src/utils/orderbook_channel_me
|
|||||||
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';
|
||||||
import {
|
import {
|
||||||
malformedSnapshotOrderbookChannelMessage,
|
malformedSnapshotOrdersChannelMessage,
|
||||||
snapshotOrderbookChannelMessage,
|
snapshotOrdersChannelMessage,
|
||||||
} from './fixtures/standard_relayer_api/snapshot_orderbook_channel_message';
|
} from './fixtures/standard_relayer_api/snapshot_orderbook_channel_message';
|
||||||
import { unknownOrderbookChannelMessage } from './fixtures/standard_relayer_api/unknown_orderbook_channel_message';
|
import { unknownOrdersChannelMessage } from './fixtures/standard_relayer_api/unknown_orderbook_channel_message';
|
||||||
import {
|
import {
|
||||||
malformedUpdateOrderbookChannelMessage,
|
malformedUpdateOrdersChannelMessage,
|
||||||
updateOrderbookChannelMessage,
|
updateOrdersChannelMessage,
|
||||||
} from './fixtures/standard_relayer_api/update_orderbook_channel_message';
|
} from './fixtures/standard_relayer_api/update_orderbook_channel_message';
|
||||||
|
|
||||||
chai.config.includeStack = true;
|
chai.config.includeStack = true;
|
||||||
@ -23,17 +23,17 @@ const expect = chai.expect;
|
|||||||
describe('orderbookChannelMessageParser', () => {
|
describe('orderbookChannelMessageParser', () => {
|
||||||
describe('#parser', () => {
|
describe('#parser', () => {
|
||||||
it('parses snapshot messages', () => {
|
it('parses snapshot messages', () => {
|
||||||
const snapshotMessage = orderbookChannelMessageParser.parse(snapshotOrderbookChannelMessage);
|
const snapshotMessage = orderbookChannelMessageParser.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(updateOrderbookChannelMessage);
|
const updateMessage = orderbookChannelMessageParser.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(unknownOrderbookChannelMessage);
|
const unknownMessage = orderbookChannelMessageParser.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();
|
||||||
});
|
});
|
||||||
@ -57,20 +57,20 @@ describe('orderbookChannelMessageParser', () => {
|
|||||||
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(malformedSnapshotOrderbookChannelMessage);
|
const badCall = () => orderbookChannelMessageParser.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(malformedUpdateOrderbookChannelMessage);
|
const badCall = () => orderbookChannelMessageParser.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 = () => orderbookChannelMessageParser.parse(nonJsonString);
|
||||||
expect(badCall).throws('Unexpected token h in JSON at position 0');
|
expect(badCall).throws('Unexpected assetData h in JSON at position 0');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -32,8 +32,8 @@ describe('WebSocketOrderbookChannel', () => {
|
|||||||
Sinon.stub(openClient, 'send').callsFake(_.noop.bind(_));
|
Sinon.stub(openClient, 'send').callsFake(_.noop.bind(_));
|
||||||
const openOrderbookChannel = new WebSocketOrderbookChannel(openClient, emptyOrderbookChannelHandler);
|
const openOrderbookChannel = new WebSocketOrderbookChannel(openClient, emptyOrderbookChannelHandler);
|
||||||
const subscriptionOpts = {
|
const subscriptionOpts = {
|
||||||
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
baseAssetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
quoteTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
quoteAssetData: '0xef7fff64389b814a946f3e92105513705ca6b990',
|
||||||
snapshot: true,
|
snapshot: true,
|
||||||
limit: 100,
|
limit: 100,
|
||||||
};
|
};
|
||||||
@ -41,7 +41,7 @@ describe('WebSocketOrderbookChannel', () => {
|
|||||||
it('throws when subscriptionOpts does not conform to schema', () => {
|
it('throws when subscriptionOpts does not conform to schema', () => {
|
||||||
const badSubscribeCall = openOrderbookChannel.subscribe.bind(openOrderbookChannel, {});
|
const badSubscribeCall = openOrderbookChannel.subscribe.bind(openOrderbookChannel, {});
|
||||||
expect(badSubscribeCall).throws(
|
expect(badSubscribeCall).throws(
|
||||||
'Expected subscriptionOpts to conform to schema /RelayerApiOrderbookChannelSubscribePayload\nEncountered: {}\nValidation errors: instance requires property "baseTokenAddress", instance requires property "quoteTokenAddress"',
|
'Expected subscriptionOpts to conform to schema /RelayerApiOrderbookChannelSubscribePayload\nEncountered: {}\nValidation errors: instance requires property "baseAssetData", instance requires property "quoteAssetData"',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('does not throw when inputs are of correct types', () => {
|
it('does not throw when inputs are of correct types', () => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user