diff --git a/packages/orderbook/src/api-client/api-client.ts b/packages/orderbook/src/api-client/api-client.ts index 05f63c91b1..966e4bb224 100644 --- a/packages/orderbook/src/api-client/api-client.ts +++ b/packages/orderbook/src/api-client/api-client.ts @@ -13,7 +13,8 @@ import { ListListingsParams, ListTradesParams, } from '../types'; -import { FulfillmentDataResult } from '../openapi/sdk/models/FulfillmentDataResult'; +import { FulfillableOrder } from '../openapi/sdk/models/FulfillableOrder'; +import { UnfulfillableOrder } from '../openapi/sdk/models/UnfulfillableOrder'; import { FulfillmentDataRequest } from '../openapi/sdk/models/FulfillmentDataRequest'; import { ItemType, SEAPORT_CONTRACT_VERSION_V1_5 } from '../seaport'; @@ -26,7 +27,12 @@ export class ImmutableApiClient { async fulfillmentData( requests: Array, - ): Promise<{ result: FulfillmentDataResult[] }> { + ): Promise<{ + result: { + fulfillable_orders: Array; + unfulfillable_orders: Array; + }; + }> { return this.orderbookService.fulfillmentData({ chainName: this.chainName, requestBody: requests, diff --git a/packages/orderbook/src/openapi/sdk/index.ts b/packages/orderbook/src/openapi/sdk/index.ts index 14474cd83c..d06dc8de33 100644 --- a/packages/orderbook/src/openapi/sdk/index.ts +++ b/packages/orderbook/src/openapi/sdk/index.ts @@ -16,8 +16,8 @@ export type { ERC20Item } from './models/ERC20Item'; export type { ERC721Item } from './models/ERC721Item'; export type { Error } from './models/Error'; export { Fee } from './models/Fee'; +export type { FulfillableOrder } from './models/FulfillableOrder'; export type { FulfillmentDataRequest } from './models/FulfillmentDataRequest'; -export type { FulfillmentDataResult } from './models/FulfillmentDataResult'; export type { Item } from './models/Item'; export type { ListingResult } from './models/ListingResult'; export type { ListListingsResult } from './models/ListListingsResult'; @@ -32,5 +32,6 @@ export { ProtocolData } from './models/ProtocolData'; export type { Trade } from './models/Trade'; export type { TradeBlockchainMetadata } from './models/TradeBlockchainMetadata'; export type { TradeResult } from './models/TradeResult'; +export type { UnfulfillableOrder } from './models/UnfulfillableOrder'; export { OrdersService } from './services/OrdersService'; diff --git a/packages/orderbook/src/openapi/sdk/models/FulfillmentDataResult.ts b/packages/orderbook/src/openapi/sdk/models/FulfillableOrder.ts similarity index 79% rename from packages/orderbook/src/openapi/sdk/models/FulfillmentDataResult.ts rename to packages/orderbook/src/openapi/sdk/models/FulfillableOrder.ts index f330ae6144..f30a0f2264 100644 --- a/packages/orderbook/src/openapi/sdk/models/FulfillmentDataResult.ts +++ b/packages/orderbook/src/openapi/sdk/models/FulfillableOrder.ts @@ -4,7 +4,7 @@ import type { Order } from './Order'; -export type FulfillmentDataResult = { +export type FulfillableOrder = { extra_data: string; order: Order; }; diff --git a/packages/orderbook/src/openapi/sdk/models/UnfulfillableOrder.ts b/packages/orderbook/src/openapi/sdk/models/UnfulfillableOrder.ts new file mode 100644 index 0000000000..102e483ee5 --- /dev/null +++ b/packages/orderbook/src/openapi/sdk/models/UnfulfillableOrder.ts @@ -0,0 +1,15 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type UnfulfillableOrder = { + /** + * OrderID for the requested but unfulfillable order + */ + order_id: string; + /** + * Nullable string containing error reason if the signing is unsuccessful for the order + */ + reason: string; +}; + diff --git a/packages/orderbook/src/openapi/sdk/services/OrdersService.ts b/packages/orderbook/src/openapi/sdk/services/OrdersService.ts index f951374dbc..d7b32ecf42 100644 --- a/packages/orderbook/src/openapi/sdk/services/OrdersService.ts +++ b/packages/orderbook/src/openapi/sdk/services/OrdersService.ts @@ -3,8 +3,8 @@ /* eslint-disable */ import type { ChainName } from '../models/ChainName'; import type { CreateListingRequestBody } from '../models/CreateListingRequestBody'; +import type { FulfillableOrder } from '../models/FulfillableOrder'; import type { FulfillmentDataRequest } from '../models/FulfillmentDataRequest'; -import type { FulfillmentDataResult } from '../models/FulfillmentDataResult'; import type { ListingResult } from '../models/ListingResult'; import type { ListListingsResult } from '../models/ListListingsResult'; import type { ListTradeResult } from '../models/ListTradeResult'; @@ -12,6 +12,7 @@ import type { OrderStatus } from '../models/OrderStatus'; import type { PageCursor } from '../models/PageCursor'; import type { PageSize } from '../models/PageSize'; import type { TradeResult } from '../models/TradeResult'; +import type { UnfulfillableOrder } from '../models/UnfulfillableOrder'; import type { CancelablePromise } from '../core/CancelablePromise'; import type { BaseHttpRequest } from '../core/BaseHttpRequest'; @@ -168,7 +169,10 @@ export class OrdersService { chainName: ChainName, requestBody: Array, }): CancelablePromise<{ - result: Array; + result: { + fulfillable_orders: Array; + unfulfillable_orders: Array; + }; }> { return this.httpRequest.request({ method: 'POST', diff --git a/packages/orderbook/src/orderbook.ts b/packages/orderbook/src/orderbook.ts index 9f1d7a3c34..525d2971f3 100644 --- a/packages/orderbook/src/orderbook.ts +++ b/packages/orderbook/src/orderbook.ts @@ -212,12 +212,14 @@ export class Orderbook { }, ]); - if (fulfillmentDataRes.result.length !== 1) { - throw new Error('unexpected fulfillment data result length'); + if (fulfillmentDataRes.result.unfulfillable_orders?.length > 0) { + throw new Error(`Unable to prepare fulfillment date: ${fulfillmentDataRes.result.unfulfillable_orders[0].reason}`); + } else if (fulfillmentDataRes.result.fulfillable_orders?.length !== 1) { + throw new Error('unexpected fulfillable order result length'); } - const extraData = fulfillmentDataRes.result[0].extra_data; - const orderResult = fulfillmentDataRes.result[0].order; + const extraData = fulfillmentDataRes.result.fulfillable_orders[0].extra_data; + const orderResult = fulfillmentDataRes.result.fulfillable_orders[0].order; if (orderResult.status !== OrderStatus.ACTIVE) { throw new Error(