From f9e86745c3e242466eabc364973c8e0c69f3724c Mon Sep 17 00:00:00 2001 From: Kim Persson Date: Mon, 28 Jun 2021 11:09:48 +0200 Subject: [PATCH] fix: return all json schema validation errors and expose Ajv types (#38) * fix: return all json schema validation errors and expose Ajv types * fix: doc generation Ajv incompatibility issues * fix! remove outdated relayer api json schemas * chore: add changelog entry for monorepo-scripts --- doc-gen-config.json | 3 +- json-schemas/CHANGELOG.json | 9 + ..._api_asset_data_pairs_response_schema.json | 13 - .../relayer_api_asset_data_pairs_schema.json | 12 - ...ayer_api_asset_data_trade_info_schema.json | 11 - .../relayer_api_error_response_schema.json | 21 - ...er_api_fee_recipients_response_schema.json | 16 - ...layer_api_order_config_payload_schema.json | 24 - ...ayer_api_order_config_response_schema.json | 32 -- .../schemas/relayer_api_order_schema.json | 9 - ...relayer_api_orderbook_response_schema.json | 9 - ...ders_channel_subscribe_payload_schema.json | 27 - ...r_api_orders_channel_subscribe_schema.json | 11 - ...orders_channel_update_response_schema.json | 11 - .../relayer_api_orders_response_schema.json | 13 - .../schemas/relayer_api_orders_schema.json | 7 - json-schemas/src/index.ts | 1 + json-schemas/src/schema_validator.ts | 2 +- json-schemas/src/schemas.ts | 28 -- json-schemas/test/schema_test.ts | 469 ------------------ json-schemas/tsconfig.json | 14 - monorepo-scripts/CHANGELOG.json | 9 + .../src/utils/doc_generate_utils.ts | 8 +- 23 files changed, 29 insertions(+), 730 deletions(-) delete mode 100644 json-schemas/schemas/relayer_api_asset_data_pairs_response_schema.json delete mode 100644 json-schemas/schemas/relayer_api_asset_data_pairs_schema.json delete mode 100644 json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json delete mode 100644 json-schemas/schemas/relayer_api_error_response_schema.json delete mode 100644 json-schemas/schemas/relayer_api_fee_recipients_response_schema.json delete mode 100644 json-schemas/schemas/relayer_api_order_config_payload_schema.json delete mode 100644 json-schemas/schemas/relayer_api_order_config_response_schema.json delete mode 100644 json-schemas/schemas/relayer_api_order_schema.json delete mode 100644 json-schemas/schemas/relayer_api_orderbook_response_schema.json delete mode 100644 json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json delete mode 100644 json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json delete mode 100644 json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json delete mode 100644 json-schemas/schemas/relayer_api_orders_response_schema.json delete mode 100644 json-schemas/schemas/relayer_api_orders_schema.json diff --git a/doc-gen-config.json b/doc-gen-config.json index cf0fd85534..91786c1fe6 100644 --- a/doc-gen-config.json +++ b/doc-gen-config.json @@ -19,7 +19,8 @@ "TFillData": true, "IterableIterator": true, "Set": true, - "Exclude": true + "Exclude": true, + "Ajv": true }, "ignoredExcessiveTypes": [ "NonceSubproviderErrors", diff --git a/json-schemas/CHANGELOG.json b/json-schemas/CHANGELOG.json index d8698fc0fa..03fea5dd9c 100644 --- a/json-schemas/CHANGELOG.json +++ b/json-schemas/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "6.2.0", + "changes": [ + { + "note": "Return all schema validation errors and expose Ajv types, remove outdated relayer api schemas", + "pr": 38 + } + ] + }, { "timestamp": 1619585664, "version": "6.1.3", diff --git a/json-schemas/schemas/relayer_api_asset_data_pairs_response_schema.json b/json-schemas/schemas/relayer_api_asset_data_pairs_response_schema.json deleted file mode 100644 index d1150d3dbc..0000000000 --- a/json-schemas/schemas/relayer_api_asset_data_pairs_response_schema.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "id": "/relayerApiAssetDataPairsResponseSchema", - "type": "object", - "allOf": [ - { "$ref": "/paginatedCollectionSchema" }, - { - "properties": { - "records": { "$ref": "/relayerApiAssetDataPairsSchema" } - }, - "required": ["records"] - } - ] -} diff --git a/json-schemas/schemas/relayer_api_asset_data_pairs_schema.json b/json-schemas/schemas/relayer_api_asset_data_pairs_schema.json deleted file mode 100644 index 62d4745b8c..0000000000 --- a/json-schemas/schemas/relayer_api_asset_data_pairs_schema.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "id": "/relayerApiAssetDataPairsSchema", - "type": "array", - "items": { - "properties": { - "assetDataA": { "$ref": "/relayerApiAssetDataTradeInfoSchema" }, - "assetDataB": { "$ref": "/relayerApiAssetDataTradeInfoSchema" } - }, - "required": ["assetDataA", "assetDataB"], - "type": "object" - } -} diff --git a/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json b/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json deleted file mode 100644 index e0f274c5d8..0000000000 --- a/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "id": "/relayerApiAssetDataTradeInfoSchema", - "type": "object", - "properties": { - "assetData": { "$ref": "/hexSchema" }, - "minAmount": { "$ref": "/wholeNumberSchema" }, - "maxAmount": { "$ref": "/wholeNumberSchema" }, - "precision": { "type": "number" } - }, - "required": ["assetData"] -} diff --git a/json-schemas/schemas/relayer_api_error_response_schema.json b/json-schemas/schemas/relayer_api_error_response_schema.json deleted file mode 100644 index be4659b0bd..0000000000 --- a/json-schemas/schemas/relayer_api_error_response_schema.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": "/relayerApiErrorResponseSchema", - "type": "object", - "properties": { - "code": { "type": "integer", "minimum": 100, "maximum": 103 }, - "reason": { "type": "string" }, - "validationErrors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "field": { "type": "string" }, - "code": { "type": "integer", "minimum": 1000, "maximum": 1006 }, - "reason": { "type": "string" } - }, - "required": ["field", "code", "reason"] - } - } - }, - "required": ["code", "reason"] -} diff --git a/json-schemas/schemas/relayer_api_fee_recipients_response_schema.json b/json-schemas/schemas/relayer_api_fee_recipients_response_schema.json deleted file mode 100644 index c73506dbb1..0000000000 --- a/json-schemas/schemas/relayer_api_fee_recipients_response_schema.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "id": "/relayerApiFeeRecipientsResponseSchema", - "type": "object", - "allOf": [ - { "$ref": "/paginatedCollectionSchema" }, - { - "properties": { - "records": { - "type": "array", - "items": { "$ref": "/addressSchema" } - } - }, - "required": ["records"] - } - ] -} diff --git a/json-schemas/schemas/relayer_api_order_config_payload_schema.json b/json-schemas/schemas/relayer_api_order_config_payload_schema.json deleted file mode 100644 index f4583fc625..0000000000 --- a/json-schemas/schemas/relayer_api_order_config_payload_schema.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": "/relayerApiOrderConfigPayloadSchema", - "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" - ] -} diff --git a/json-schemas/schemas/relayer_api_order_config_response_schema.json b/json-schemas/schemas/relayer_api_order_config_response_schema.json deleted file mode 100644 index 3d060a7631..0000000000 --- a/json-schemas/schemas/relayer_api_order_config_response_schema.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": "/relayerApiOrderConfigResponseSchema", - "type": "object", - "properties": { - "makerFee": { - "$ref": "/wholeNumberSchema" - }, - "takerFee": { - "$ref": "/wholeNumberSchema" - }, - "feeRecipientAddress": { - "$ref": "/addressSchema" - }, - "senderAddress": { - "$ref": "/addressSchema" - }, - "makerFeeAssetData": { - "$ref": "/hexSchema" - }, - "takerFeeAssetData": { - "$ref": "/hexSchema" - } - }, - "required": [ - "makerFee", - "takerFee", - "feeRecipientAddress", - "senderAddress", - "makerFeeAssetData", - "takerFeeAssetData" - ] -} diff --git a/json-schemas/schemas/relayer_api_order_schema.json b/json-schemas/schemas/relayer_api_order_schema.json deleted file mode 100644 index e0f6539b9f..0000000000 --- a/json-schemas/schemas/relayer_api_order_schema.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "id": "/relayerApiOrderSchema", - "type": "object", - "properties": { - "order": { "$ref": "/orderSchema" }, - "metaData": { "type": "object" } - }, - "required": ["order", "metaData"] -} diff --git a/json-schemas/schemas/relayer_api_orderbook_response_schema.json b/json-schemas/schemas/relayer_api_orderbook_response_schema.json deleted file mode 100644 index b44f2a7408..0000000000 --- a/json-schemas/schemas/relayer_api_orderbook_response_schema.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "id": "/relayerApiOrderbookResponseSchema", - "type": "object", - "properties": { - "bids": { "$ref": "/relayerApiOrdersResponseSchema" }, - "asks": { "$ref": "/relayerApiOrdersResponseSchema" } - }, - "required": ["bids", "asks"] -} diff --git a/json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json b/json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json deleted file mode 100644 index a002c21fb9..0000000000 --- a/json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": "/relayerApiOrdersChannelSubscribePayloadSchema", - "type": "object", - "properties": { - "makerAssetProxyId": { - "$ref": "/hexSchema" - }, - "takerAssetProxyId": { - "$ref": "/hexSchema" - }, - "makerAssetAddress": { - "$ref": "/addressSchema" - }, - "takerAssetAddress": { - "$ref": "/addressSchema" - }, - "makerAssetData": { - "$ref": "/hexSchema" - }, - "takerAssetData": { - "$ref": "/hexSchema" - }, - "traderAssetData": { - "$ref": "/hexSchema" - } - } -} diff --git a/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json b/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json deleted file mode 100644 index 29561d09fc..0000000000 --- a/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "id": "/relayerApiOrdersChannelSubscribeSchema", - "type": "object", - "properties": { - "type": { "enum": ["subscribe"] }, - "channel": { "enum": ["orders"] }, - "requestId": { "type": "string" }, - "payload": { "$ref": "/relayerApiOrdersChannelSubscribePayloadSchema" } - }, - "required": ["type", "channel", "requestId"] -} diff --git a/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json b/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json deleted file mode 100644 index 239e7c5861..0000000000 --- a/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "id": "/relayerApiOrdersChannelUpdateSchema", - "type": "object", - "properties": { - "type": { "enum": ["update"] }, - "channel": { "enum": ["orders"] }, - "requestId": { "type": "string" }, - "payload": { "$ref": "/relayerApiOrdersSchema" } - }, - "required": ["type", "channel", "requestId"] -} diff --git a/json-schemas/schemas/relayer_api_orders_response_schema.json b/json-schemas/schemas/relayer_api_orders_response_schema.json deleted file mode 100644 index a5023a3fc1..0000000000 --- a/json-schemas/schemas/relayer_api_orders_response_schema.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "id": "/relayerApiOrdersResponseSchema", - "type": "object", - "allOf": [ - { "$ref": "/paginatedCollectionSchema" }, - { - "properties": { - "records": { "$ref": "/relayerApiOrdersSchema" } - }, - "required": ["records"] - } - ] -} diff --git a/json-schemas/schemas/relayer_api_orders_schema.json b/json-schemas/schemas/relayer_api_orders_schema.json deleted file mode 100644 index a8c970e718..0000000000 --- a/json-schemas/schemas/relayer_api_orders_schema.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "id": "/relayerApiOrdersSchema", - "type": "array", - "items": { - "$ref": "/relayerApiOrderSchema" - } -} diff --git a/json-schemas/src/index.ts b/json-schemas/src/index.ts index 031e66ec28..1112307d07 100644 --- a/json-schemas/src/index.ts +++ b/json-schemas/src/index.ts @@ -2,4 +2,5 @@ export { SchemaValidator } from './schema_validator'; export { schemas } from './schemas'; export { Ajv } from 'ajv'; import * as AJV from 'ajv'; +export { AJV }; module.exports.AJV = AJV; diff --git a/json-schemas/src/schema_validator.ts b/json-schemas/src/schema_validator.ts index 92adda81e7..954c1b5c8a 100644 --- a/json-schemas/src/schema_validator.ts +++ b/json-schemas/src/schema_validator.ts @@ -13,7 +13,7 @@ export class SchemaValidator { * Instantiates a SchemaValidator instance */ constructor(newSchemas: object[] = []) { - this._validator = new AJV({ schemaId: 'auto' }); + this._validator = new AJV({ schemaId: 'auto', allErrors: true }); this._validator.addSchema(values(schemas).filter(s => s !== undefined && s.id !== undefined)); this._validator.addSchema(newSchemas.filter(s => s !== undefined)); } diff --git a/json-schemas/src/schemas.ts b/json-schemas/src/schemas.ts index 34a5ee99cf..9f7229de6d 100644 --- a/json-schemas/src/schemas.ts +++ b/json-schemas/src/schemas.ts @@ -23,20 +23,6 @@ import * as ordersRequestOptsSchema from '../schemas/orders_request_opts_schema. 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 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 relayerApiAssetDataTradeInfoSchema from '../schemas/relayer_api_asset_data_trade_info_schema.json'; -import * as relayerApiErrorResponseSchema from '../schemas/relayer_api_error_response_schema.json'; -import * as relayerApiFeeRecipientsResponseSchema from '../schemas/relayer_api_fee_recipients_response_schema.json'; -import * as relayerApiOrderConfigPayloadSchema from '../schemas/relayer_api_order_config_payload_schema.json'; -import * as relayerApiOrderConfigResponseSchema from '../schemas/relayer_api_order_config_response_schema.json'; -import * as relayerApiOrderSchema from '../schemas/relayer_api_order_schema.json'; -import * as relayerApiOrderbookResponseSchema from '../schemas/relayer_api_orderbook_response_schema.json'; -import * as relayerApiOrdersChannelSubscribePayloadSchema from '../schemas/relayer_api_orders_channel_subscribe_payload_schema.json'; -import * as relayerApiOrdersChannelSubscribeSchema from '../schemas/relayer_api_orders_channel_subscribe_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 relayerApiOrdersSchema from '../schemas/relayer_api_orders_schema.json'; import * as signedOrderSchema from '../schemas/signed_order_schema.json'; import * as signedOrdersSchema from '../schemas/signed_orders_schema.json'; import * as tokenSchema from '../schemas/token_schema.json'; @@ -76,20 +62,6 @@ export const schemas = { assetPairsRequestOptsSchema, txDataSchema, paginatedCollectionSchema, - relayerApiErrorResponseSchema, - relayerApiFeeRecipientsResponseSchema, - relayerApiOrderSchema, - relayerApiOrdersSchema, - relayerApiOrderConfigPayloadSchema, - relayerApiOrderConfigResponseSchema, - relayerApiOrderbookResponseSchema, - relayerApiAssetDataPairsResponseSchema, - relayerApiAssetDataTradeInfoSchema, - relayerApiOrdersChannelSubscribeSchema, - relayerApiOrdersChannelSubscribePayloadSchema, - relayerApiOrdersChannelUpdateSchema, - relayerApiOrdersResponseSchema, - relayerApiAssetDataPairsSchema, zeroExTransactionSchema, exchangeProxyMetaTransactionSchema, wholeNumberSchema, diff --git a/json-schemas/test/schema_test.ts b/json-schemas/test/schema_test.ts index 97d3d51fdb..23f4153c7a 100644 --- a/json-schemas/test/schema_test.ts +++ b/json-schemas/test/schema_test.ts @@ -28,15 +28,6 @@ const { jsNumber, txDataSchema, paginatedCollectionSchema, - relayerApiErrorResponseSchema, - relayerApiOrderbookResponseSchema, - relayerApiAssetDataPairsResponseSchema, - relayerApiOrderConfigPayloadSchema, - relayerApiOrderConfigResponseSchema, - relayerApiOrdersChannelSubscribeSchema, - relayerApiOrdersChannelUpdateSchema, - relayerApiOrdersResponseSchema, - relayerApiOrderSchema, wholeNumberSchema, v4RfqSignedOrderSchema, } = schemas; @@ -252,16 +243,6 @@ describe('Schema', () => { exchangeAddress: NULL_ADDRESS, chainId: CHAIN_ID, }; - const relayerApiOrder = { - order, - metaData: { - someMetaData: 5, - }, - }; - const relayerApiOrdersResponse = { - ...paginatedResponse, - records: [relayerApiOrder, relayerApiOrder], - }; describe('#orderSchema', () => { it('should validate valid order', () => { const testCases = [order]; @@ -388,456 +369,6 @@ describe('Schema', () => { validateAgainstSchema(testCases, orderFillRequestsSchema, shouldFail); }); }); - describe('standard relayer api schemas', () => { - describe('#relayerApiOrderSchema', () => { - it('should validate valid relayer api order', () => { - const testCases = [relayerApiOrder]; - validateAgainstSchema(testCases, relayerApiOrderSchema); - }); - it('should fail for invalid relayer api orders', () => { - const testCases = [{}, order, { order }, { order, metaData: 5 }]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiOrderSchema, shouldFail); - }); - }); - describe('#relayerApiErrorResponseSchema', () => { - it('should validate valid errorResponse', () => { - const testCases = [ - { - code: 102, - reason: 'Order submission disabled', - }, - { - code: 101, - reason: 'Validation failed', - validationErrors: [ - { - field: 'maker', - code: 1002, - reason: 'Invalid address', - }, - ], - }, - ]; - validateAgainstSchema(testCases, relayerApiErrorResponseSchema); - }); - it('should fail for invalid error responses', () => { - const testCases = [ - {}, - { - code: 102, - }, - { - code: '102', - reason: 'Order submission disabled', - }, - { - reason: 'Order submission disabled', - }, - { - code: 101, - reason: 'Validation failed', - validationErrors: [ - { - field: 'maker', - reason: 'Invalid address', - }, - ], - }, - { - code: 101, - reason: 'Validation failed', - validationErrors: [ - { - field: 'maker', - code: '1002', - reason: 'Invalid address', - }, - ], - }, - ]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiErrorResponseSchema, shouldFail); - }); - }); - describe('#relayerApiOrderConfigPayloadSchema', () => { - it('should validate valid fees payloads', () => { - const testCases = [ - { - exchangeAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - makerAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - takerAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - makerAssetData: NULL_ADDRESS, - takerAssetData: NULL_ADDRESS, - makerAssetAmount: '10000000000000000000', - takerAssetAmount: '30000000000000000000', - expirationTimeSeconds: '42', - }, - ]; - validateAgainstSchema(testCases, relayerApiOrderConfigPayloadSchema); - }); - it('should fail for invalid fees payloads', () => { - const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32'; - const testCases = [ - {}, - { - makerAssetAmount: '10000000000000000000', - takerAssetAmount: '30000000000000000000', - makerAssetData: NULL_ADDRESS, - takerAssetData: NULL_ADDRESS, - }, - { - takerAddress: checksummedAddress, - makerAssetAmount: '10000000000000000000', - takerAssetAmount: '30000000000000000000', - }, - { - makerAssetAmount: 10000000000000000000, - takerAssetAmount: 30000000000000000000, - }, - ]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiOrderConfigPayloadSchema, shouldFail); - }); - }); - describe('#relayerApiOrderConfigResponseSchema', () => { - it('should validate valid fees responses', () => { - const testCases = [ - { - makerFee: '10000000000000000', - takerFee: '30000000000000000', - feeRecipientAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - senderAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - makerFeeAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d', - takerFeeAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d', - }, - ]; - validateAgainstSchema(testCases, relayerApiOrderConfigResponseSchema); - }); - it('should fail for invalid fees responses', () => { - const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32'; - const testCases = [ - {}, - { - makerFee: 10000000000000000, - takerFee: 30000000000000000, - }, - { - feeRecipient: checksummedAddress, - takerToSpecify: checksummedAddress, - makerFee: '10000000000000000', - takerFee: '30000000000000000', - }, - ]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiOrderConfigResponseSchema, shouldFail); - }); - }); - describe('#relayerAssetDataPairsResponseSchema', () => { - it('should validate valid assetPairs response', () => { - const testCases = [ - { - ...paginatedResponse, - records: [], - }, - { - ...paginatedResponse, - records: [ - { - assetDataA: { - assetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - minAmount: '0', - maxAmount: '10000000000000000000', - precision: 5, - }, - assetDataB: { - assetData: '0xef7fff64389b814a946f3e92105513705ca6b990', - minAmount: '0', - maxAmount: '50000000000000000000', - precision: 5, - }, - }, - ], - }, - { - ...paginatedResponse, - records: [ - { - assetDataA: { - assetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - }, - assetDataB: { - assetData: '0xef7fff64389b814a946f3e92105513705ca6b990', - }, - }, - ], - }, - ]; - validateAgainstSchema(testCases, relayerApiAssetDataPairsResponseSchema); - }); - it('should fail for invalid assetPairs responses', () => { - const testCases = [ - { - ...paginatedResponse, - records: [ - { - assetDataA: { - assetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - minAmount: '0', - maxAmount: '10000000000000000000', - precision: 5, - }, - assetDataC: { - assetData: '0xef7fff64389b814a946f3e92105513705ca6b990', - minAmount: '0', - maxAmount: '50000000000000000000', - precision: 5, - }, - }, - ], - }, - { - records: [ - { - assetDataA: { - assetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - minAmount: '0', - maxAmount: '10000000000000000000', - precision: 5, - }, - assetDataB: { - assetData: '0xef7fff64389b814a946f3e92105513705ca6b990', - minAmount: '0', - maxAmount: '50000000000000000000', - precision: 5, - }, - }, - ], - }, - { - ...paginatedResponse, - records: [ - { - assetDataA: { - minAmount: '0', - maxAmount: '10000000000000000000', - precision: 5, - }, - assetDataB: { - minAmount: '0', - maxAmount: '50000000000000000000', - precision: 5, - }, - }, - ], - }, - ]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiAssetDataPairsResponseSchema, shouldFail); - }); - }); - describe('#relayerApiOrdersResponseSchema', () => { - it('should validate valid orders responses', () => { - const testCases = [ - relayerApiOrdersResponse, - { - ...paginatedResponse, - records: [], - }, - ]; - validateAgainstSchema(testCases, relayerApiOrdersResponseSchema); - }); - it('should fail for invalid orders responses', () => { - const testCases = [ - { - records: [relayerApiOrder, relayerApiOrder], - }, - { - ...paginatedResponse, - }, - { - ...paginatedResponse, - records: [{}, relayerApiOrder], - }, - ]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiOrdersResponseSchema, shouldFail); - }); - }); - describe('#relayerApiOrderbookResponseSchema', () => { - it('should validate valid order book responses', () => { - const testCases = [ - { - bids: { - ...paginatedResponse, - records: [relayerApiOrder], - }, - asks: { - ...paginatedResponse, - records: [], - }, - }, - { - bids: { - ...paginatedResponse, - records: [relayerApiOrder, relayerApiOrder], - }, - asks: { - ...paginatedResponse, - records: [relayerApiOrder, relayerApiOrder], - }, - }, - { - bids: { - ...paginatedResponse, - records: [], - }, - asks: { - ...paginatedResponse, - records: [relayerApiOrder, relayerApiOrder], - }, - }, - ]; - validateAgainstSchema(testCases, relayerApiOrderbookResponseSchema); - }); - it('should fail for invalid order fill requests', () => { - const testCases = [ - {}, - { - bids: { - records: [relayerApiOrder], - }, - asks: { - ...paginatedResponse, - records: [], - }, - }, - { - bids: { - ...paginatedResponse, - records: [relayerApiOrder, relayerApiOrder], - }, - asks: {}, - }, - { - bids: { - ...paginatedResponse, - }, - asks: { - ...paginatedResponse, - records: [relayerApiOrder, relayerApiOrder], - }, - }, - ]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiOrdersResponseSchema, shouldFail); - }); - }); - describe('#relayerApiOrdersChannelSubscribeSchema', () => { - it('should validate valid orders channel websocket subscribe message', () => { - const testCases = [ - { - type: 'subscribe', - channel: 'orders', - requestId: 'randomId', - }, - { - type: 'subscribe', - channel: 'orders', - requestId: 'randomId', - payload: { - makerAssetProxyId: '0x02571792', - takerAssetProxyId: '0xf47261b0', - }, - }, - { - type: 'subscribe', - channel: 'orders', - requestId: 'randomId', - payload: {}, - }, - ]; - validateAgainstSchema(testCases, relayerApiOrdersChannelSubscribeSchema); - }); - it('should fail for invalid orders channel websocket subscribe message', () => { - const bogusAddress = '0xz2b31daCf30a9C50ca473337c01d8A201ae33e32'; - const testCases = [ - { - type: 'subscribe', - channel: 'orders', - }, - { - type: 'subscribe', - channel: 'orders', - requestId: 'randomId', - payload: { - makerAssetProxyId: '0x02571792', - takerAssetProxyId: '0xf47261b0', - makerAssetAddress: bogusAddress, - }, - }, - { - type: 'subscribe', - channel: 'orders', - requestId: 'randomId', - payload: { - makerAssetProxyId: 'invalidId', - }, - }, - ]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiOrdersChannelSubscribeSchema, shouldFail); - }); - }); - describe('#relayerApiOrdersChannelUpdateSchema', () => { - it('should validate valid orders channel websocket update message', () => { - const testCases = [ - { - type: 'update', - channel: 'orders', - requestId: 'randomId', - payload: [relayerApiOrder], - }, - { - type: 'update', - channel: 'orders', - requestId: 'randomId', - payload: [], - }, - ]; - validateAgainstSchema(testCases, relayerApiOrdersChannelUpdateSchema); - }); - it('should fail for invalid orders channel websocket update message', () => { - const testCases = [ - { - type: 'foo', - channel: 'orders', - requestId: 'randomId', - }, - { - type: 'update', - channel: 'bar', - requestId: 2, - payload: [relayerApiOrder], - }, - { - type: 'update', - channel: 'orders', - requestId: 'randomId', - payload: {}, - }, - { - type: 'update', - channel: 'orders', - requestId: 'randomId', - payload: relayerApiErrorResponseSchema, - }, - ]; - const shouldFail = true; - validateAgainstSchema(testCases, relayerApiOrdersChannelUpdateSchema, shouldFail); - }); - }); - }); }); }); describe('BigNumber serialization', () => { diff --git a/json-schemas/tsconfig.json b/json-schemas/tsconfig.json index cd6801b6bf..5bdad10bc0 100644 --- a/json-schemas/tsconfig.json +++ b/json-schemas/tsconfig.json @@ -26,20 +26,6 @@ "./schemas/signed_order_schema.json", "./schemas/orders_schema.json", "./schemas/paginated_collection_schema.json", - "./schemas/relayer_api_asset_data_pairs_response_schema.json", - "./schemas/relayer_api_asset_data_pairs_schema.json", - "./schemas/relayer_api_asset_data_trade_info_schema.json", - "./schemas/relayer_api_error_response_schema.json", - "./schemas/relayer_api_fee_recipients_response_schema.json", - "./schemas/relayer_api_order_config_payload_schema.json", - "./schemas/relayer_api_order_config_response_schema.json", - "./schemas/relayer_api_order_schema.json", - "./schemas/relayer_api_orderbook_response_schema.json", - "./schemas/relayer_api_orders_channel_subscribe_payload_schema.json", - "./schemas/relayer_api_orders_channel_subscribe_schema.json", - "./schemas/relayer_api_orders_channel_update_response_schema.json", - "./schemas/relayer_api_orders_response_schema.json", - "./schemas/relayer_api_orders_schema.json", "./schemas/signed_orders_schema.json", "./schemas/token_schema.json", "./schemas/js_number_schema.json", diff --git a/monorepo-scripts/CHANGELOG.json b/monorepo-scripts/CHANGELOG.json index 57f56c02e8..a3957a2c2e 100644 --- a/monorepo-scripts/CHANGELOG.json +++ b/monorepo-scripts/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "3.1.8", + "changes": [ + { + "note": "Fix doc generate TS parsing potentially undefined export token", + "pr": 38 + } + ] + }, { "timestamp": 1619585664, "version": "3.1.7", diff --git a/monorepo-scripts/src/utils/doc_generate_utils.ts b/monorepo-scripts/src/utils/doc_generate_utils.ts index 069ec78a28..680c3394ad 100644 --- a/monorepo-scripts/src/utils/doc_generate_utils.ts +++ b/monorepo-scripts/src/utils/doc_generate_utils.ts @@ -104,7 +104,13 @@ export class DocGenerateUtils { if (exportClause === undefined) { return; } - const exportPath = exportClause.parent.moduleSpecifier.text; + const exportPath = + exportClause.parent && + exportClause.parent.moduleSpecifier && + exportClause.parent.moduleSpecifier.text; + if (!exportPath) { + return; + } _.each(exportClause.elements, element => { const exportItem = element.name.escapedText; if (!_.includes(exportsToOmit, exportItem)) {