Implement ProvidedOrderFetcher
This commit is contained in:
@@ -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 };
|
||||
}
|
||||
}
|
||||
@@ -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 };
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user