Move connect schemas to JSON Schemas

This commit is contained in:
Leonid Logvinov 2018-11-12 13:44:24 +01:00
parent 66261102de
commit 33dbdb0184
No known key found for this signature in database
GPG Key ID: 0DD294BFDE8C95D4
17 changed files with 112 additions and 107 deletions

View File

@ -19,7 +19,6 @@ import { fetchAsync } from '@0x/utils';
import * as _ from 'lodash'; import * as _ from 'lodash';
import * as queryString from 'query-string'; import * as queryString from 'query-string';
import { schemas as clientSchemas } from './schemas/schemas';
import { Client, HttpRequestOptions, HttpRequestType } from './types'; import { Client, HttpRequestOptions, HttpRequestType } from './types';
import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers'; import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers';
@ -61,9 +60,9 @@ export class HttpClient implements Client {
requestOpts?: RequestOpts & AssetPairsRequestOpts & PagedRequestOpts, requestOpts?: RequestOpts & AssetPairsRequestOpts & PagedRequestOpts,
): Promise<AssetPairsResponse> { ): Promise<AssetPairsResponse> {
if (!_.isUndefined(requestOpts)) { if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.assetPairsRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.assetPairsRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.pagedRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.requestOptsSchema);
} }
const httpRequestOpts = { const httpRequestOpts = {
params: requestOpts, params: requestOpts,
@ -81,9 +80,9 @@ export class HttpClient implements Client {
requestOpts?: RequestOpts & OrdersRequestOpts & PagedRequestOpts, requestOpts?: RequestOpts & OrdersRequestOpts & PagedRequestOpts,
): Promise<OrdersResponse> { ): Promise<OrdersResponse> {
if (!_.isUndefined(requestOpts)) { if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.ordersRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.ordersRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.pagedRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.requestOptsSchema);
} }
const httpRequestOpts = { const httpRequestOpts = {
params: requestOpts, params: requestOpts,
@ -99,7 +98,7 @@ export class HttpClient implements Client {
*/ */
public async getOrderAsync(orderHash: string, requestOpts?: RequestOpts): Promise<APIOrder> { public async getOrderAsync(orderHash: string, requestOpts?: RequestOpts): Promise<APIOrder> {
if (!_.isUndefined(requestOpts)) { if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.requestOptsSchema);
} }
assert.doesConformToSchema('orderHash', orderHash, schemas.orderHashSchema); assert.doesConformToSchema('orderHash', orderHash, schemas.orderHashSchema);
const httpRequestOpts = { const httpRequestOpts = {
@ -119,10 +118,10 @@ export class HttpClient implements Client {
request: OrderbookRequest, request: OrderbookRequest,
requestOpts?: RequestOpts & PagedRequestOpts, requestOpts?: RequestOpts & PagedRequestOpts,
): Promise<OrderbookResponse> { ): Promise<OrderbookResponse> {
assert.doesConformToSchema('request', request, clientSchemas.orderBookRequestSchema); assert.doesConformToSchema('request', request, schemas.orderBookRequestSchema);
if (!_.isUndefined(requestOpts)) { if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.pagedRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.requestOptsSchema);
} }
const httpRequestOpts = { const httpRequestOpts = {
params: _.defaults({}, request, requestOpts), params: _.defaults({}, request, requestOpts),
@ -142,9 +141,9 @@ export class HttpClient implements Client {
requestOpts?: RequestOpts, requestOpts?: RequestOpts,
): Promise<OrderConfigResponse> { ): Promise<OrderConfigResponse> {
if (!_.isUndefined(requestOpts)) { if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.requestOptsSchema);
} }
assert.doesConformToSchema('request', request, clientSchemas.orderConfigRequestSchema); assert.doesConformToSchema('request', request, schemas.orderConfigRequestSchema);
const httpRequestOpts = { const httpRequestOpts = {
params: requestOpts, params: requestOpts,
payload: request, payload: request,
@ -160,8 +159,8 @@ export class HttpClient implements Client {
*/ */
public async getFeeRecipientsAsync(requestOpts?: RequestOpts & PagedRequestOpts): Promise<FeeRecipientsResponse> { public async getFeeRecipientsAsync(requestOpts?: RequestOpts & PagedRequestOpts): Promise<FeeRecipientsResponse> {
if (!_.isUndefined(requestOpts)) { if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.pagedRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.requestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, schemas.requestOptsSchema);
} }
const httpRequestOpts = { const httpRequestOpts = {
params: requestOpts, params: requestOpts,

View File

@ -1,8 +0,0 @@
export const assetPairsRequestOptsSchema = {
id: '/AssetPairsRequestOpts',
type: 'object',
properties: {
assetDataA: { $ref: '/hexSchema' },
assetDataB: { $ref: '/hexSchema' },
},
};

View File

@ -1,24 +0,0 @@
export const orderConfigRequestSchema = {
id: '/OrderConfigRequest',
type: 'object',
properties: {
makerAddress: { $ref: '/addressSchema' },
takerAddress: { $ref: '/addressSchema' },
makerAssetAmount: { $ref: '/numberSchema' },
takerAssetAmount: { $ref: '/numberSchema' },
makerAssetData: { $ref: '/hexSchema' },
takerAssetData: { $ref: '/hexSchema' },
exchangeAddress: { $ref: '/addressSchema' },
expirationTimeSeconds: { $ref: '/numberSchema' },
},
required: [
'makerAddress',
'takerAddress',
'makerAssetAmount',
'takerAssetAmount',
'makerAssetData',
'takerAssetData',
'exchangeAddress',
'expirationTimeSeconds',
],
};

View File

@ -1,9 +0,0 @@
export const orderBookRequestSchema = {
id: '/OrderBookRequest',
type: 'object',
properties: {
baseAssetData: { $ref: '/hexSchema' },
quoteAssetData: { $ref: '/hexSchema' },
},
required: ['baseAssetData', 'quoteAssetData'],
};

View File

@ -1,19 +0,0 @@
export const ordersRequestOptsSchema = {
id: '/OrdersRequestOpts',
type: 'object',
properties: {
makerAssetProxyId: { $ref: '/hexSchema' },
takerAssetProxyId: { $ref: '/hexSchema' },
makerAssetAddress: { $ref: '/addressSchema' },
takerAssetAddress: { $ref: '/addressSchema' },
exchangeAddress: { $ref: '/addressSchema' },
senderAddress: { $ref: '/addressSchema' },
makerAssetData: { $ref: '/hexSchema' },
takerAssetData: { $ref: '/hexSchema' },
traderAssetData: { $ref: '/hexSchema' },
makerAddress: { $ref: '/addressSchema' },
takerAddress: { $ref: '/addressSchema' },
traderAddress: { $ref: '/addressSchema' },
feeRecipientAddress: { $ref: '/addressSchema' },
},
};

View File

@ -1,8 +0,0 @@
export const pagedRequestOptsSchema = {
id: '/PagedRequestOpts',
type: 'object',
properties: {
page: { type: 'number' },
perPage: { type: 'number' },
},
};

View File

@ -1,7 +0,0 @@
export const requestOptsSchema = {
id: '/RequestOpts',
type: 'object',
properties: {
networkId: { type: 'number' },
},
};

View File

@ -1,15 +0,0 @@
import { assetPairsRequestOptsSchema } from './asset_pairs_request_opts_schema';
import { orderConfigRequestSchema } from './order_config_request_schema';
import { orderBookRequestSchema } from './orderbook_request_schema';
import { ordersRequestOptsSchema } from './orders_request_opts_schema';
import { pagedRequestOptsSchema } from './paged_request_opts_schema';
import { requestOptsSchema } from './request_opts_schema';
export const schemas = {
orderConfigRequestSchema,
orderBookRequestSchema,
ordersRequestOptsSchema,
pagedRequestOptsSchema,
requestOptsSchema,
assetPairsRequestOptsSchema,
};

View File

@ -1,11 +1,14 @@
[ [
{ {
"version": "2.0.1", "version": "2.1.0",
"changes": [ "changes": [
{ {
"note": "note":
"Improve schemas by enforcing that amounts that must be whole numbers (e.g Order asset amounts) no longer allow decimal amounts", "Improve schemas by enforcing that amounts that must be whole numbers (e.g Order asset amounts) no longer allow decimal amounts",
"pr": 1173 "pr": 1173
},
{
"note": "Add schemas from @0x/connect"
} }
] ]
}, },

View File

@ -0,0 +1,8 @@
{
"id": "/AssetPairsRequestOpts",
"type": "object",
"properties": {
"assetDataA": { "$ref": "/hexSchema" },
"assetDataB": { "$ref": "/hexSchema" }
}
}

View File

@ -0,0 +1,24 @@
{
"id": "/OrderConfigRequest",
"type": "object",
"properties": {
"makerAddress": { "$ref": "/addressSchema" },
"takerAddress": { "$ref": "/addressSchema" },
"makerAssetAmount": { "$ref": "/wholeNumberSchema" },
"takerAssetAmount": { "$ref": "/wholeNumberSchema" },
"makerAssetData": { "$ref": "/hexSchema" },
"takerAssetData": { "$ref": "/hexSchema" },
"exchangeAddress": { "$ref": "/addressSchema" },
"expirationTimeSeconds": { "$ref": "/wholeNumberSchema" }
},
"required": [
"makerAddress",
"takerAddress",
"makerAssetAmount",
"takerAssetAmount",
"makerAssetData",
"takerAssetData",
"exchangeAddress",
"expirationTimeSeconds"
]
}

View File

@ -0,0 +1,9 @@
{
"id": "/OrderBookRequest",
"type": "object",
"properties": {
"baseAssetData": { "$ref": "/hexSchema" },
"quoteAssetData": { "$ref": "/hexSchema" }
},
"required": ["baseAssetData", "quoteAssetData"]
}

View File

@ -0,0 +1,19 @@
{
"id": "/OrdersRequestOpts",
"type": "object",
"properties": {
"makerAssetProxyId": { "$ref": "/hexSchema" },
"takerAssetProxyId": { "$ref": "/hexSchema" },
"makerAssetAddress": { "$ref": "/addressSchema" },
"takerAssetAddress": { "$ref": "/addressSchema" },
"exchangeAddress": { "$ref": "/addressSchema" },
"senderAddress": { "$ref": "/addressSchema" },
"makerAssetData": { "$ref": "/hexSchema" },
"takerAssetData": { "$ref": "/hexSchema" },
"traderAssetData": { "$ref": "/hexSchema" },
"makerAddress": { "$ref": "/addressSchema" },
"takerAddress": { "$ref": "/addressSchema" },
"traderAddress": { "$ref": "/addressSchema" },
"feeRecipientAddress": { "$ref": "/addressSchema" }
}
}

View File

@ -0,0 +1,8 @@
{
"id": "/PagedRequestOpts",
"type": "object",
"properties": {
"page": { "type": "number" },
"perPage": { "type": "number" }
}
}

View File

@ -0,0 +1,7 @@
{
"id": "/RequestOpts",
"type": "object",
"properties": {
"networkId": { "type": "number" }
}
}

View File

@ -1,4 +1,5 @@
import * as addressSchema from '../schemas/address_schema.json'; import * as addressSchema from '../schemas/address_schema.json';
import * as assetPairsRequestOptsSchema from '../schemas/asset_pairs_request_opts_schema.json';
import * as blockParamSchema from '../schemas/block_param_schema.json'; import * as blockParamSchema from '../schemas/block_param_schema.json';
import * as blockRangeSchema from '../schemas/block_range_schema.json'; import * as blockRangeSchema from '../schemas/block_range_schema.json';
import * as callDataSchema from '../schemas/call_data_schema.json'; import * as callDataSchema from '../schemas/call_data_schema.json';
@ -10,11 +11,15 @@ import * as indexFilterValuesSchema from '../schemas/index_filter_values_schema.
import * as jsNumber from '../schemas/js_number.json'; import * as jsNumber from '../schemas/js_number.json';
import * as numberSchema from '../schemas/number_schema.json'; import * as numberSchema from '../schemas/number_schema.json';
import * as orderCancellationRequestsSchema from '../schemas/order_cancel_schema.json'; import * as orderCancellationRequestsSchema from '../schemas/order_cancel_schema.json';
import * as orderConfigRequestSchema from '../schemas/order_config_request_schema.json';
import * as orderFillOrKillRequestsSchema from '../schemas/order_fill_or_kill_requests_schema.json'; import * as orderFillOrKillRequestsSchema from '../schemas/order_fill_or_kill_requests_schema.json';
import * as orderFillRequestsSchema from '../schemas/order_fill_requests_schema.json'; import * as orderFillRequestsSchema from '../schemas/order_fill_requests_schema.json';
import * as orderHashSchema from '../schemas/order_hash_schema.json'; import * as orderHashSchema from '../schemas/order_hash_schema.json';
import * as orderSchema from '../schemas/order_schema.json'; import * as orderSchema from '../schemas/order_schema.json';
import * as orderBookRequestSchema from '../schemas/orderbook_request_schema.json';
import * as ordersRequestOptsSchema from '../schemas/orders_request_opts_schema.json';
import * as ordersSchema from '../schemas/orders_schema.json'; import * as ordersSchema from '../schemas/orders_schema.json';
import * as pagedRequestOptsSchema from '../schemas/paged_request_opts_schema.json';
import * as paginatedCollectionSchema from '../schemas/paginated_collection_schema.json'; import * as paginatedCollectionSchema from '../schemas/paginated_collection_schema.json';
import * as relayerApiAssetDataPairsResponseSchema from '../schemas/relayer_api_asset_data_pairs_response_schema.json'; import * as relayerApiAssetDataPairsResponseSchema from '../schemas/relayer_api_asset_data_pairs_response_schema.json';
import * as relayerApiAssetDataPairsSchema from '../schemas/relayer_api_asset_data_pairs_schema.json'; import * as relayerApiAssetDataPairsSchema from '../schemas/relayer_api_asset_data_pairs_schema.json';
@ -30,6 +35,7 @@ import * as relayerApiOrdersChannelSubscribeSchema from '../schemas/relayer_api_
import * as relayerApiOrdersChannelUpdateSchema from '../schemas/relayer_api_orders_channel_update_response_schema.json'; import * as relayerApiOrdersChannelUpdateSchema from '../schemas/relayer_api_orders_channel_update_response_schema.json';
import * as relayerApiOrdersResponseSchema from '../schemas/relayer_api_orders_response_schema.json'; import * as relayerApiOrdersResponseSchema from '../schemas/relayer_api_orders_response_schema.json';
import * as relayerApiOrdersSchema from '../schemas/relayer_api_orders_schema.json'; import * as relayerApiOrdersSchema from '../schemas/relayer_api_orders_schema.json';
import * as requestOptsSchema from '../schemas/request_opts_schema.json';
import * as signedOrderSchema from '../schemas/signed_order_schema.json'; import * as signedOrderSchema from '../schemas/signed_order_schema.json';
import * as signedOrdersSchema from '../schemas/signed_orders_schema.json'; import * as signedOrdersSchema from '../schemas/signed_orders_schema.json';
import * as tokenSchema from '../schemas/token_schema.json'; import * as tokenSchema from '../schemas/token_schema.json';
@ -58,6 +64,12 @@ export const schemas = {
blockRangeSchema, blockRangeSchema,
tokenSchema, tokenSchema,
jsNumber, jsNumber,
requestOptsSchema,
pagedRequestOptsSchema,
ordersRequestOptsSchema,
orderBookRequestSchema,
orderConfigRequestSchema,
assetPairsRequestOptsSchema,
txDataSchema, txDataSchema,
paginatedCollectionSchema, paginatedCollectionSchema,
relayerApiErrorResponseSchema, relayerApiErrorResponseSchema,

View File

@ -44,6 +44,12 @@
"./schemas/zero_ex_transaction_schema.json", "./schemas/zero_ex_transaction_schema.json",
"./schemas/tx_data_schema.json", "./schemas/tx_data_schema.json",
"./schemas/index_filter_values_schema.json", "./schemas/index_filter_values_schema.json",
"./schemas/whole_number_schema.json" "./schemas/whole_number_schema.json",
"./schemas/asset_pairs_request_opts_schema.json",
"./schemas/orderbook_request_schema.json",
"./schemas/orders_request_opts_schema.json",
"./schemas/paged_request_opts_schema.json",
"./schemas/request_opts_schema.json",
"./schemas/order_config_request_schema.json"
] ]
} }