From 4e59be9afce49fca8b396c305d5271c8299c85c1 Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Sat, 15 Sep 2018 14:08:19 +0200 Subject: Implement ProvidedOrderFetcher --- .../src/order_fetchers/provided_order_fetcher.ts | 41 ++++++++++++++++++++++ .../standard_relayer_api_order_fetcher.ts | 1 + packages/asset-buyer/src/utils/assert.ts | 7 +++- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 packages/asset-buyer/src/order_fetchers/provided_order_fetcher.ts diff --git a/packages/asset-buyer/src/order_fetchers/provided_order_fetcher.ts b/packages/asset-buyer/src/order_fetchers/provided_order_fetcher.ts new file mode 100644 index 000000000..29b03f1c4 --- /dev/null +++ b/packages/asset-buyer/src/order_fetchers/provided_order_fetcher.ts @@ -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 { + assert.isValidOrderFetcherRequest('orderFetchRequest', orderFetchRequest); + const { makerAssetData, takerAssetData } = orderFetchRequest; + const orders = _.filter(this.providedOrders, order => { + return order.makerAssetData === makerAssetData && order.takerAssetData === takerAssetData; + }); + return { orders }; + } +} diff --git a/packages/asset-buyer/src/order_fetchers/standard_relayer_api_order_fetcher.ts b/packages/asset-buyer/src/order_fetchers/standard_relayer_api_order_fetcher.ts index bf177b93b..5688daf69 100644 --- a/packages/asset-buyer/src/order_fetchers/standard_relayer_api_order_fetcher.ts +++ b/packages/asset-buyer/src/order_fetchers/standard_relayer_api_order_fetcher.ts @@ -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 { + assert.isValidOrderFetcherRequest('orderFetchRequest', orderFetchRequest); const { makerAssetData, takerAssetData, networkId } = orderFetchRequest; const orderbookRequest = { baseAssetData: makerAssetData, quoteAssetData: takerAssetData }; const requestOpts = { networkId }; diff --git a/packages/asset-buyer/src/utils/assert.ts b/packages/asset-buyer/src/utils/assert.ts index c4d611477..0085ca41e 100644 --- a/packages/asset-buyer/src/utils/assert.ts +++ b/packages/asset-buyer/src/utils/assert.ts @@ -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); + }, }; -- cgit v1.2.3