Implement ProvidedOrderFetcher

This commit is contained in:
Brandon Millman
2018-09-15 14:08:19 +02:00
parent 190bf2599c
commit 4e59be9afc
3 changed files with 48 additions and 1 deletions

View File

@@ -0,0 +1,41 @@
import { schemas } from '@0xproject/json-schemas';
import { SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { constants } from '../constants';
import {
AssetBuyerError,
OrderFetcher,
OrderFetcherRequest,
OrderFetcherResponse,
SignedOrderWithRemainingFillableMakerAssetAmount,
} from '../types';
import { assert } from '../utils/assert';
import { orderUtils } from '../utils/order_utils';
export class ProvidedOrderFetcher implements OrderFetcher {
public readonly providedOrders: SignedOrder[];
/**
* Instantiates a new ProvidedOrderFetcher instance
* @param providedOrders An array of objects that conform to SignedOrder to fetch from.
* @return An instance of ProvidedOrderFetcher
*/
constructor(providedOrders: SignedOrder[]) {
assert.doesConformToSchema('providedOrders', providedOrders, schemas.signedOrdersSchema);
this.providedOrders = providedOrders;
}
/**
* Given an object that conforms to OrderFetcherRequest, return the corresponding OrderFetcherResponse that satisfies the request.
* @param orderFetchRequest An instance of OrderFetcherRequest. See type for more information.
* @return An instance of OrderFetcherResponse. See type for more information.
*/
public async fetchOrdersAsync(orderFetchRequest: OrderFetcherRequest): Promise<OrderFetcherResponse> {
assert.isValidOrderFetcherRequest('orderFetchRequest', orderFetchRequest);
const { makerAssetData, takerAssetData } = orderFetchRequest;
const orders = _.filter(this.providedOrders, order => {
return order.makerAssetData === makerAssetData && order.takerAssetData === takerAssetData;
});
return { orders };
}
}

View File

@@ -60,6 +60,7 @@ export class StandardRelayerAPIOrderFetcher implements OrderFetcher {
* @return An instance of OrderFetcherResponse. See type for more information.
*/
public async fetchOrdersAsync(orderFetchRequest: OrderFetcherRequest): Promise<OrderFetcherResponse> {
assert.isValidOrderFetcherRequest('orderFetchRequest', orderFetchRequest);
const { makerAssetData, takerAssetData, networkId } = orderFetchRequest;
const orderbookRequest = { baseAssetData: makerAssetData, quoteAssetData: takerAssetData };
const requestOpts = { networkId };

View File

@@ -2,7 +2,7 @@ import { assert as sharedAssert } from '@0xproject/assert';
import { schemas } from '@0xproject/json-schemas';
import * as _ from 'lodash';
import { BuyQuote, OrderFetcher } from '../types';
import { BuyQuote, OrderFetcher, OrderFetcherRequest } from '../types';
export const assert = {
...sharedAssert,
@@ -20,4 +20,9 @@ export const assert = {
isValidOrderFetcher(variableName: string, orderFetcher: OrderFetcher): void {
sharedAssert.isFunction(`${variableName}.fetchOrdersAsync`, orderFetcher.fetchOrdersAsync);
},
isValidOrderFetcherRequest(variableName: string, orderFetcherRequest: OrderFetcherRequest): void {
sharedAssert.isHexString(`${variableName}.makerAssetData`, orderFetcherRequest.makerAssetData);
sharedAssert.isHexString(`${variableName}.takerAssetData`, orderFetcherRequest.takerAssetData);
sharedAssert.isNumber(`${variableName}.networkId`, orderFetcherRequest.networkId);
},
};