aboutsummaryrefslogtreecommitdiffstats
path: root/packages/json-schemas
diff options
context:
space:
mode:
Diffstat (limited to 'packages/json-schemas')
-rw-r--r--packages/json-schemas/CHANGELOG.json4
-rw-r--r--packages/json-schemas/schemas/basic_type_schemas.ts6
-rw-r--r--packages/json-schemas/schemas/block_range_schema.ts8
-rw-r--r--packages/json-schemas/schemas/call_data_schema.ts12
-rw-r--r--packages/json-schemas/schemas/ec_signature_schema.ts6
-rw-r--r--packages/json-schemas/schemas/index_filter_values_schema.ts4
-rw-r--r--packages/json-schemas/schemas/order_cancel_schema.ts6
-rw-r--r--packages/json-schemas/schemas/order_fill_or_kill_requests_schema.ts6
-rw-r--r--packages/json-schemas/schemas/order_fill_requests_schema.ts6
-rw-r--r--packages/json-schemas/schemas/order_hash_schema.ts2
-rw-r--r--packages/json-schemas/schemas/order_schemas.ts34
-rw-r--r--packages/json-schemas/schemas/orders_schema.ts2
-rw-r--r--packages/json-schemas/schemas/paginated_collection_schema.ts10
-rw-r--r--packages/json-schemas/schemas/relayer_api_asset_pairs_response_schema.ts38
-rw-r--r--packages/json-schemas/schemas/relayer_api_error_response_schema.ts6
-rw-r--r--packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.ts13
-rw-r--r--packages/json-schemas/schemas/relayer_api_fees_payload_schema.ts24
-rw-r--r--packages/json-schemas/schemas/relayer_api_fees_response_schema.ts10
-rw-r--r--packages/json-schemas/schemas/relayer_api_orberbook_channel_subscribe_schema.ts23
-rw-r--r--packages/json-schemas/schemas/relayer_api_order_config_payload_schema.ts24
-rw-r--r--packages/json-schemas/schemas/relayer_api_order_config_response_schema.ts11
-rw-r--r--packages/json-schemas/schemas/relayer_api_order_schema.ts9
-rw-r--r--packages/json-schemas/schemas/relayer_api_orderbook_channel_snapshot_schema.ts21
-rw-r--r--packages/json-schemas/schemas/relayer_api_orderbook_channel_update_response_schema.ts11
-rw-r--r--packages/json-schemas/schemas/relayer_api_orderbook_response_schema.ts8
-rw-r--r--packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.ts26
-rw-r--r--packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.ts11
-rw-r--r--packages/json-schemas/schemas/relayer_api_orders_response_schema.ts13
-rw-r--r--packages/json-schemas/schemas/relayer_api_orders_schema.ts5
-rw-r--r--packages/json-schemas/schemas/relayer_api_token_pairs_response_schema.ts24
-rw-r--r--packages/json-schemas/schemas/signed_orders_schema.ts2
-rw-r--r--packages/json-schemas/schemas/token_schema.ts4
-rw-r--r--packages/json-schemas/schemas/tx_data_schema.ts14
-rw-r--r--packages/json-schemas/src/schemas.ts56
-rw-r--r--packages/json-schemas/test/schema_test.ts955
35 files changed, 725 insertions, 689 deletions
diff --git a/packages/json-schemas/CHANGELOG.json b/packages/json-schemas/CHANGELOG.json
index 33cf126e3..6017b2f2b 100644
--- a/packages/json-schemas/CHANGELOG.json
+++ b/packages/json-schemas/CHANGELOG.json
@@ -5,6 +5,10 @@
{
"note": "Change hexSchema to match `0x`",
"pr": 937
+ },
+ {
+ "note": "Upgrade Relayer API schemas for relayer API V2",
+ "pr": 916
}
]
},
diff --git a/packages/json-schemas/schemas/basic_type_schemas.ts b/packages/json-schemas/schemas/basic_type_schemas.ts
index 301f9ec73..a59afaef8 100644
--- a/packages/json-schemas/schemas/basic_type_schemas.ts
+++ b/packages/json-schemas/schemas/basic_type_schemas.ts
@@ -1,17 +1,17 @@
export const addressSchema = {
- id: '/Address',
+ id: '/addressSchema',
type: 'string',
pattern: '^0x[0-9a-f]{40}$',
};
export const hexSchema = {
- id: '/Hex',
+ id: '/hexSchema',
type: 'string',
pattern: '^0x(([0-9a-f][0-9a-f])+)?$',
};
export const numberSchema = {
- id: '/Number',
+ id: '/numberSchema',
type: 'string',
pattern: '^\\d+(\\.\\d+)?$',
};
diff --git a/packages/json-schemas/schemas/block_range_schema.ts b/packages/json-schemas/schemas/block_range_schema.ts
index 1f6a63151..9eb242fc6 100644
--- a/packages/json-schemas/schemas/block_range_schema.ts
+++ b/packages/json-schemas/schemas/block_range_schema.ts
@@ -1,5 +1,5 @@
export const blockParamSchema = {
- id: '/BlockParam',
+ id: '/blockParamSchema',
oneOf: [
{
type: 'number',
@@ -11,10 +11,10 @@ export const blockParamSchema = {
};
export const blockRangeSchema = {
- id: '/BlockRange',
+ id: '/blockRangeSchema',
properties: {
- fromBlock: { $ref: '/BlockParam' },
- toBlock: { $ref: '/BlockParam' },
+ fromBlock: { $ref: '/blockParamSchema' },
+ toBlock: { $ref: '/blockParamSchema' },
},
type: 'object',
};
diff --git a/packages/json-schemas/schemas/call_data_schema.ts b/packages/json-schemas/schemas/call_data_schema.ts
index b9d00ad2a..4c77d9f9d 100644
--- a/packages/json-schemas/schemas/call_data_schema.ts
+++ b/packages/json-schemas/schemas/call_data_schema.ts
@@ -1,16 +1,16 @@
export const callDataSchema = {
- id: '/CallData',
+ id: '/callDataSchema',
properties: {
- from: { $ref: '/Address' },
- to: { $ref: '/Address' },
+ from: { $ref: '/addressSchema' },
+ to: { $ref: '/addressSchema' },
value: {
- oneOf: [{ $ref: '/Number' }, { $ref: '/JsNumber' }],
+ oneOf: [{ $ref: '/numberSchema' }, { $ref: '/jsNumber' }],
},
gas: {
- oneOf: [{ $ref: '/Number' }, { $ref: '/JsNumber' }],
+ oneOf: [{ $ref: '/numberSchema' }, { $ref: '/jsNumber' }],
},
gasPrice: {
- oneOf: [{ $ref: '/Number' }, { $ref: '/JsNumber' }],
+ oneOf: [{ $ref: '/numberSchema' }, { $ref: '/jsNumber' }],
},
data: {
type: 'string',
diff --git a/packages/json-schemas/schemas/ec_signature_schema.ts b/packages/json-schemas/schemas/ec_signature_schema.ts
index 71b840dd8..c59532f09 100644
--- a/packages/json-schemas/schemas/ec_signature_schema.ts
+++ b/packages/json-schemas/schemas/ec_signature_schema.ts
@@ -1,5 +1,5 @@
export const ecSignatureParameterSchema = {
- id: '/ECSignatureParameter',
+ id: '/ecSignatureParameterSchema',
type: 'string',
pattern: '^0[xX][0-9A-Fa-f]{64}$',
};
@@ -12,8 +12,8 @@ export const ecSignatureSchema = {
minimum: 27,
maximum: 28,
},
- r: { $ref: '/ECSignatureParameter' },
- s: { $ref: '/ECSignatureParameter' },
+ r: { $ref: '/ecSignatureParameterSchema' },
+ s: { $ref: '/ecSignatureParameterSchema' },
},
required: ['v', 'r', 's'],
type: 'object',
diff --git a/packages/json-schemas/schemas/index_filter_values_schema.ts b/packages/json-schemas/schemas/index_filter_values_schema.ts
index 3374d63e0..f3c8cef68 100644
--- a/packages/json-schemas/schemas/index_filter_values_schema.ts
+++ b/packages/json-schemas/schemas/index_filter_values_schema.ts
@@ -1,7 +1,7 @@
export const indexFilterValuesSchema = {
- id: '/IndexFilterValues',
+ id: '/indexFilterValuesSchema',
additionalProperties: {
- oneOf: [{ $ref: '/Number' }, { $ref: '/Address' }, { $ref: '/OrderHashSchema' }],
+ oneOf: [{ $ref: '/numberSchema' }, { $ref: '/addressSchema' }, { $ref: '/orderHashSchema' }],
},
type: 'object',
};
diff --git a/packages/json-schemas/schemas/order_cancel_schema.ts b/packages/json-schemas/schemas/order_cancel_schema.ts
index ad23d01cc..e4edfbca9 100644
--- a/packages/json-schemas/schemas/order_cancel_schema.ts
+++ b/packages/json-schemas/schemas/order_cancel_schema.ts
@@ -1,10 +1,10 @@
export const orderCancellationRequestsSchema = {
- id: '/OrderCancellationRequests',
+ id: '/orderCancellationRequestsSchema',
type: 'array',
items: {
properties: {
- order: { $ref: '/Order' },
- takerTokenCancelAmount: { $ref: '/Number' },
+ order: { $ref: '/orderSchema' },
+ takerTokenCancelAmount: { $ref: '/numberSchema' },
},
required: ['order', 'takerTokenCancelAmount'],
type: 'object',
diff --git a/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.ts b/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.ts
index 61f2c8849..e2c18ef0a 100644
--- a/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.ts
+++ b/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.ts
@@ -1,10 +1,10 @@
export const orderFillOrKillRequestsSchema = {
- id: '/OrderFillOrKillRequests',
+ id: '/orderFillOrKillRequestsSchema',
type: 'array',
items: {
properties: {
- signedOrder: { $ref: '/SignedOrder' },
- fillTakerAmount: { $ref: '/Number' },
+ signedOrder: { $ref: '/signedOrderSchema' },
+ fillTakerAmount: { $ref: '/numberSchema' },
},
required: ['signedOrder', 'fillTakerAmount'],
type: 'object',
diff --git a/packages/json-schemas/schemas/order_fill_requests_schema.ts b/packages/json-schemas/schemas/order_fill_requests_schema.ts
index 419d0670f..ea8b35e54 100644
--- a/packages/json-schemas/schemas/order_fill_requests_schema.ts
+++ b/packages/json-schemas/schemas/order_fill_requests_schema.ts
@@ -1,10 +1,10 @@
export const orderFillRequestsSchema = {
- id: '/OrderFillRequests',
+ id: '/orderFillRequestsSchema',
type: 'array',
items: {
properties: {
- signedOrder: { $ref: '/SignedOrder' },
- takerTokenFillAmount: { $ref: '/Number' },
+ signedOrder: { $ref: '/signedOrderSchema' },
+ takerTokenFillAmount: { $ref: '/numberSchema' },
},
required: ['signedOrder', 'takerTokenFillAmount'],
type: 'object',
diff --git a/packages/json-schemas/schemas/order_hash_schema.ts b/packages/json-schemas/schemas/order_hash_schema.ts
index 6af06927f..9773a88f9 100644
--- a/packages/json-schemas/schemas/order_hash_schema.ts
+++ b/packages/json-schemas/schemas/order_hash_schema.ts
@@ -1,5 +1,5 @@
export const orderHashSchema = {
- id: '/OrderHashSchema',
+ id: '/orderHashSchema',
type: 'string',
pattern: '^0x[0-9a-fA-F]{64}$',
};
diff --git a/packages/json-schemas/schemas/order_schemas.ts b/packages/json-schemas/schemas/order_schemas.ts
index dcbfde6e0..eb7fdaf5a 100644
--- a/packages/json-schemas/schemas/order_schemas.ts
+++ b/packages/json-schemas/schemas/order_schemas.ts
@@ -1,19 +1,19 @@
export const orderSchema = {
- id: '/Order',
+ id: '/orderSchema',
properties: {
- makerAddress: { $ref: '/Address' },
- takerAddress: { $ref: '/Address' },
- makerFee: { $ref: '/Number' },
- takerFee: { $ref: '/Number' },
- senderAddress: { $ref: '/Address' },
- makerAssetAmount: { $ref: '/Number' },
- takerAssetAmount: { $ref: '/Number' },
- makerAssetData: { $ref: '/Hex' },
- takerAssetData: { $ref: '/Hex' },
- salt: { $ref: '/Number' },
- exchangeAddress: { $ref: '/Address' },
- feeRecipientAddress: { $ref: '/Address' },
- expirationTimeSeconds: { $ref: '/Number' },
+ makerAddress: { $ref: '/addressSchema' },
+ takerAddress: { $ref: '/addressSchema' },
+ makerFee: { $ref: '/numberSchema' },
+ takerFee: { $ref: '/numberSchema' },
+ senderAddress: { $ref: '/addressSchema' },
+ makerAssetAmount: { $ref: '/numberSchema' },
+ takerAssetAmount: { $ref: '/numberSchema' },
+ makerAssetData: { $ref: '/hexSchema' },
+ takerAssetData: { $ref: '/hexSchema' },
+ salt: { $ref: '/numberSchema' },
+ exchangeAddress: { $ref: '/addressSchema' },
+ feeRecipientAddress: { $ref: '/addressSchema' },
+ expirationTimeSeconds: { $ref: '/numberSchema' },
},
required: [
'makerAddress',
@@ -34,12 +34,12 @@ export const orderSchema = {
};
export const signedOrderSchema = {
- id: '/SignedOrder',
+ id: '/signedOrderSchema',
allOf: [
- { $ref: '/Order' },
+ { $ref: '/orderSchema' },
{
properties: {
- signature: { $ref: '/Hex' },
+ signature: { $ref: '/hexSchema' },
},
required: ['signature'],
},
diff --git a/packages/json-schemas/schemas/orders_schema.ts b/packages/json-schemas/schemas/orders_schema.ts
index 3ba3291a2..de0abcf00 100644
--- a/packages/json-schemas/schemas/orders_schema.ts
+++ b/packages/json-schemas/schemas/orders_schema.ts
@@ -1,5 +1,5 @@
export const ordersSchema = {
id: '/ordersSchema',
type: 'array',
- items: { $ref: '/Order' },
+ items: { $ref: '/orderSchema' },
};
diff --git a/packages/json-schemas/schemas/paginated_collection_schema.ts b/packages/json-schemas/schemas/paginated_collection_schema.ts
new file mode 100644
index 000000000..16044c70a
--- /dev/null
+++ b/packages/json-schemas/schemas/paginated_collection_schema.ts
@@ -0,0 +1,10 @@
+export const paginatedCollectionSchema = {
+ id: '/paginatedCollectionSchema',
+ type: 'object',
+ properties: {
+ total: { type: 'number' },
+ perPage: { type: 'number' },
+ page: { type: 'number' },
+ },
+ required: ['total', 'perPage', 'page'],
+};
diff --git a/packages/json-schemas/schemas/relayer_api_asset_pairs_response_schema.ts b/packages/json-schemas/schemas/relayer_api_asset_pairs_response_schema.ts
new file mode 100644
index 000000000..c13396d29
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_asset_pairs_response_schema.ts
@@ -0,0 +1,38 @@
+export const relayerApiAssetDataPairsResponseSchema = {
+ id: '/relayerApiAssetDataPairsResponseSchema',
+ type: 'object',
+ allOf: [
+ { $ref: '/paginatedCollectionSchema' },
+ {
+ properties: {
+ records: { $ref: '/relayerApiAssetDataPairsSchema' },
+ },
+ required: ['records'],
+ },
+ ],
+};
+
+export const relayerApiAssetDataPairsSchema = {
+ id: '/relayerApiAssetDataPairsSchema',
+ type: 'array',
+ items: {
+ properties: {
+ assetDataA: { $ref: '/relayerApiAssetDataTradeInfoSchema' },
+ assetDataB: { $ref: '/relayerApiAssetDataTradeInfoSchema' },
+ },
+ required: ['assetDataA', 'assetDataB'],
+ type: 'object',
+ },
+};
+
+export const relayerApiAssetDataTradeInfoSchema = {
+ id: '/relayerApiAssetDataTradeInfoSchema',
+ type: 'object',
+ properties: {
+ assetData: { $ref: '/hexSchema' },
+ minAmount: { $ref: '/numberSchema' },
+ maxAmount: { $ref: '/numberSchema' },
+ precision: { type: 'number' },
+ },
+ required: ['assetData'],
+};
diff --git a/packages/json-schemas/schemas/relayer_api_error_response_schema.ts b/packages/json-schemas/schemas/relayer_api_error_response_schema.ts
index 27fdb166f..79e33fc85 100644
--- a/packages/json-schemas/schemas/relayer_api_error_response_schema.ts
+++ b/packages/json-schemas/schemas/relayer_api_error_response_schema.ts
@@ -1,8 +1,8 @@
export const relayerApiErrorResponseSchema = {
- id: '/RelayerApiErrorResponse',
+ id: '/relayerApiErrorResponseSchema',
type: 'object',
properties: {
- code: { type: 'number' },
+ code: { type: 'integer', minimum: 100, maximum: 103 },
reason: { type: 'string' },
validationErrors: {
type: 'array',
@@ -10,7 +10,7 @@ export const relayerApiErrorResponseSchema = {
type: 'object',
properties: {
field: { type: 'string' },
- code: { type: 'number' },
+ code: { type: 'integer', minimum: 1000, maximum: 1006 },
reason: { type: 'string' },
},
required: ['field', 'code', 'reason'],
diff --git a/packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.ts b/packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.ts
new file mode 100644
index 000000000..84d39eb20
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.ts
@@ -0,0 +1,13 @@
+export const relayerApiFeeRecipientsResponseSchema = {
+ id: '/relayerApiFeeRecipientsResponseSchema',
+ type: 'object',
+ allOf: [
+ { $ref: '/paginatedCollectionSchema' },
+ {
+ properties: {
+ records: { $ref: '/addressSchema' },
+ },
+ required: ['records'],
+ },
+ ],
+};
diff --git a/packages/json-schemas/schemas/relayer_api_fees_payload_schema.ts b/packages/json-schemas/schemas/relayer_api_fees_payload_schema.ts
deleted file mode 100644
index eaaf777a1..000000000
--- a/packages/json-schemas/schemas/relayer_api_fees_payload_schema.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-export const relayerApiFeesPayloadSchema = {
- id: '/RelayerApiFeesPayload',
- type: 'object',
- properties: {
- exchangeContractAddress: { $ref: '/Address' },
- maker: { $ref: '/Address' },
- taker: { $ref: '/Address' },
- makerTokenAddress: { $ref: '/Address' },
- takerTokenAddress: { $ref: '/Address' },
- makerTokenAmount: { $ref: '/Number' },
- takerTokenAmount: { $ref: '/Number' },
- expirationUnixTimestampSec: { $ref: '/Number' },
- salt: { $ref: '/Number' },
- },
- required: [
- 'exchangeContractAddress',
- 'maker',
- 'taker',
- 'makerTokenAddress',
- 'takerTokenAddress',
- 'expirationUnixTimestampSec',
- 'salt',
- ],
-};
diff --git a/packages/json-schemas/schemas/relayer_api_fees_response_schema.ts b/packages/json-schemas/schemas/relayer_api_fees_response_schema.ts
deleted file mode 100644
index e7440613f..000000000
--- a/packages/json-schemas/schemas/relayer_api_fees_response_schema.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export const relayerApiFeesResponseSchema = {
- id: '/RelayerApiFeesResponse',
- type: 'object',
- properties: {
- makerFee: { $ref: '/Number' },
- takerFee: { $ref: '/Number' },
- feeRecipient: { $ref: '/Address' },
- },
- required: ['makerFee', 'takerFee', 'feeRecipient'],
-};
diff --git a/packages/json-schemas/schemas/relayer_api_orberbook_channel_subscribe_schema.ts b/packages/json-schemas/schemas/relayer_api_orberbook_channel_subscribe_schema.ts
deleted file mode 100644
index d93fa73d6..000000000
--- a/packages/json-schemas/schemas/relayer_api_orberbook_channel_subscribe_schema.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-export const relayerApiOrderbookChannelSubscribeSchema = {
- id: '/RelayerApiOrderbookChannelSubscribe',
- type: 'object',
- properties: {
- type: { enum: ['subscribe'] },
- channel: { enum: ['orderbook'] },
- requestId: { type: 'number' },
- payload: { $ref: '/RelayerApiOrderbookChannelSubscribePayload' },
- },
- required: ['type', 'channel', 'requestId', 'payload'],
-};
-
-export const relayerApiOrderbookChannelSubscribePayload = {
- id: '/RelayerApiOrderbookChannelSubscribePayload',
- type: 'object',
- properties: {
- baseTokenAddress: { $ref: '/Address' },
- quoteTokenAddress: { $ref: '/Address' },
- snapshot: { type: 'boolean' },
- limit: { type: 'number' },
- },
- required: ['baseTokenAddress', 'quoteTokenAddress'],
-};
diff --git a/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.ts b/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.ts
new file mode 100644
index 000000000..8d1d408d6
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.ts
@@ -0,0 +1,24 @@
+export const relayerApiOrderConfigPayloadSchema = {
+ id: '/relayerApiOrderConfigPayloadSchema',
+ 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',
+ ],
+};
diff --git a/packages/json-schemas/schemas/relayer_api_order_config_response_schema.ts b/packages/json-schemas/schemas/relayer_api_order_config_response_schema.ts
new file mode 100644
index 000000000..390d0b262
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_order_config_response_schema.ts
@@ -0,0 +1,11 @@
+export const relayerApiOrderConfigResponseSchema = {
+ id: '/relayerApiOrderConfigResponseSchema',
+ type: 'object',
+ properties: {
+ makerFee: { $ref: '/numberSchema' },
+ takerFee: { $ref: '/numberSchema' },
+ feeRecipientAddress: { $ref: '/addressSchema' },
+ senderAddress: { $ref: '/addressSchema' },
+ },
+ required: ['makerFee', 'takerFee', 'feeRecipientAddress', 'senderAddress'],
+};
diff --git a/packages/json-schemas/schemas/relayer_api_order_schema.ts b/packages/json-schemas/schemas/relayer_api_order_schema.ts
new file mode 100644
index 000000000..3952e9683
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_order_schema.ts
@@ -0,0 +1,9 @@
+export const relayerApiOrderSchema = {
+ id: '/relayerApiOrderSchema',
+ type: 'object',
+ properties: {
+ order: { $ref: '/orderSchema' },
+ metaData: { type: 'object' },
+ },
+ required: ['order', 'metaData'],
+};
diff --git a/packages/json-schemas/schemas/relayer_api_orderbook_channel_snapshot_schema.ts b/packages/json-schemas/schemas/relayer_api_orderbook_channel_snapshot_schema.ts
deleted file mode 100644
index fe1510d5b..000000000
--- a/packages/json-schemas/schemas/relayer_api_orderbook_channel_snapshot_schema.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-export const relayerApiOrderbookChannelSnapshotSchema = {
- id: '/RelayerApiOrderbookChannelSnapshot',
- type: 'object',
- properties: {
- type: { enum: ['snapshot'] },
- channel: { enum: ['orderbook'] },
- requestId: { type: 'number' },
- payload: { $ref: '/RelayerApiOrderbookChannelSnapshotPayload' },
- },
- required: ['type', 'channel', 'requestId', 'payload'],
-};
-
-export const relayerApiOrderbookChannelSnapshotPayload = {
- id: '/RelayerApiOrderbookChannelSnapshotPayload',
- type: 'object',
- properties: {
- bids: { $ref: '/signedOrdersSchema' },
- asks: { $ref: '/signedOrdersSchema' },
- },
- required: ['bids', 'asks'],
-};
diff --git a/packages/json-schemas/schemas/relayer_api_orderbook_channel_update_response_schema.ts b/packages/json-schemas/schemas/relayer_api_orderbook_channel_update_response_schema.ts
deleted file mode 100644
index 9a6d83d4c..000000000
--- a/packages/json-schemas/schemas/relayer_api_orderbook_channel_update_response_schema.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export const relayerApiOrderbookChannelUpdateSchema = {
- id: '/RelayerApiOrderbookChannelUpdate',
- type: 'object',
- properties: {
- type: { enum: ['update'] },
- channel: { enum: ['orderbook'] },
- requestId: { type: 'number' },
- payload: { $ref: '/SignedOrder' },
- },
- required: ['type', 'channel', 'requestId', 'payload'],
-};
diff --git a/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.ts b/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.ts
index 5c409c807..7c0b8e0df 100644
--- a/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.ts
+++ b/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.ts
@@ -1,9 +1,9 @@
-export const relayerApiOrderBookResponseSchema = {
- id: '/RelayerApiOrderBookResponse',
+export const relayerApiOrderbookResponseSchema = {
+ id: '/relayerApiOrderbookResponseSchema',
type: 'object',
properties: {
- bids: { $ref: '/signedOrdersSchema' },
- asks: { $ref: '/signedOrdersSchema' },
+ bids: { $ref: '/relayerApiOrdersResponseSchema' },
+ asks: { $ref: '/relayerApiOrdersResponseSchema' },
},
required: ['bids', 'asks'],
};
diff --git a/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.ts b/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.ts
new file mode 100644
index 000000000..a3b9b6d95
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.ts
@@ -0,0 +1,26 @@
+export const relayerApiOrdersChannelSubscribeSchema = {
+ id: '/relayerApiOrdersChannelSubscribeSchema',
+ type: 'object',
+ properties: {
+ type: { enum: ['subscribe'] },
+ channel: { enum: ['orders'] },
+ requestId: { type: 'string' },
+ payload: { $ref: '/relayerApiOrdersChannelSubscribePayload' },
+ },
+ required: ['type', 'channel', 'requestId'],
+};
+
+export const relayerApiOrdersChannelSubscribePayload = {
+ id: '/relayerApiOrdersChannelSubscribePayload',
+ type: 'object',
+ properties: {
+ makerAssetProxyId: { $ref: '/hexSchema' },
+ takerAssetProxyId: { $ref: '/hexSchema' },
+ networkId: { type: 'number' },
+ makerAssetAddress: { $ref: '/addressSchema' },
+ takerAssetAddress: { $ref: '/addressSchema' },
+ makerAssetData: { $ref: '/hexSchema' },
+ takerAssetData: { $ref: '/hexSchema' },
+ traderAssetData: { $ref: '/hexSchema' },
+ },
+};
diff --git a/packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.ts b/packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.ts
new file mode 100644
index 000000000..800b818e2
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.ts
@@ -0,0 +1,11 @@
+export const relayerApiOrdersChannelUpdateSchema = {
+ id: '/relayerApiOrdersChannelUpdateSchema',
+ type: 'object',
+ properties: {
+ type: { enum: ['update'] },
+ channel: { enum: ['orders'] },
+ requestId: { type: 'string' },
+ payload: { $ref: '/relayerApiOrdersSchema' },
+ },
+ required: ['type', 'channel', 'requestId'],
+};
diff --git a/packages/json-schemas/schemas/relayer_api_orders_response_schema.ts b/packages/json-schemas/schemas/relayer_api_orders_response_schema.ts
new file mode 100644
index 000000000..c10d64ca9
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_orders_response_schema.ts
@@ -0,0 +1,13 @@
+export const relayerApiOrdersResponseSchema = {
+ id: '/relayerApiOrdersResponseSchema',
+ type: 'object',
+ allOf: [
+ { $ref: '/paginatedCollectionSchema' },
+ {
+ properties: {
+ records: { $ref: '/relayerApiOrdersSchema' },
+ },
+ required: ['records'],
+ },
+ ],
+};
diff --git a/packages/json-schemas/schemas/relayer_api_orders_schema.ts b/packages/json-schemas/schemas/relayer_api_orders_schema.ts
new file mode 100644
index 000000000..ba8ce4722
--- /dev/null
+++ b/packages/json-schemas/schemas/relayer_api_orders_schema.ts
@@ -0,0 +1,5 @@
+export const relayerApiOrdersSchema = {
+ id: '/relayerApiOrdersSchema',
+ type: 'array',
+ items: { $ref: '/relayerApiOrderSchema' },
+};
diff --git a/packages/json-schemas/schemas/relayer_api_token_pairs_response_schema.ts b/packages/json-schemas/schemas/relayer_api_token_pairs_response_schema.ts
deleted file mode 100644
index 5009c7955..000000000
--- a/packages/json-schemas/schemas/relayer_api_token_pairs_response_schema.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-export const relayerApiTokenPairsResponseSchema = {
- id: '/RelayerApiTokenPairsResponse',
- type: 'array',
- items: {
- properties: {
- tokenA: { $ref: '/RelayerApiTokenTradeInfo' },
- tokenB: { $ref: '/RelayerApiTokenTradeInfo' },
- },
- required: ['tokenA', 'tokenB'],
- type: 'object',
- },
-};
-
-export const relayerApiTokenTradeInfoSchema = {
- id: '/RelayerApiTokenTradeInfo',
- type: 'object',
- properties: {
- address: { $ref: '/Address' },
- minAmount: { $ref: '/Number' },
- maxAmount: { $ref: '/Number' },
- precision: { type: 'number' },
- },
- required: ['address'],
-};
diff --git a/packages/json-schemas/schemas/signed_orders_schema.ts b/packages/json-schemas/schemas/signed_orders_schema.ts
index 34d956836..e2a5aeb56 100644
--- a/packages/json-schemas/schemas/signed_orders_schema.ts
+++ b/packages/json-schemas/schemas/signed_orders_schema.ts
@@ -1,5 +1,5 @@
export const signedOrdersSchema = {
id: '/signedOrdersSchema',
type: 'array',
- items: { $ref: '/SignedOrder' },
+ items: { $ref: '/signedOrderSchema' },
};
diff --git a/packages/json-schemas/schemas/token_schema.ts b/packages/json-schemas/schemas/token_schema.ts
index e64565c8b..a0b1ae27f 100644
--- a/packages/json-schemas/schemas/token_schema.ts
+++ b/packages/json-schemas/schemas/token_schema.ts
@@ -1,10 +1,10 @@
export const tokenSchema = {
- id: '/Token',
+ id: '/tokenSchema',
properties: {
name: { type: 'string' },
symbol: { type: 'string' },
decimals: { type: 'number' },
- address: { $ref: '/Address' },
+ address: { $ref: '/addressSchema' },
},
required: ['name', 'symbol', 'decimals', 'address'],
type: 'object',
diff --git a/packages/json-schemas/schemas/tx_data_schema.ts b/packages/json-schemas/schemas/tx_data_schema.ts
index 4274c553f..41a5c708a 100644
--- a/packages/json-schemas/schemas/tx_data_schema.ts
+++ b/packages/json-schemas/schemas/tx_data_schema.ts
@@ -1,22 +1,22 @@
export const jsNumber = {
- id: '/JsNumber',
+ id: '/jsNumber',
type: 'number',
minimum: 0,
};
export const txDataSchema = {
- id: '/TxData',
+ id: '/txDataSchema',
properties: {
- from: { $ref: '/Address' },
- to: { $ref: '/Address' },
+ from: { $ref: '/addressSchema' },
+ to: { $ref: '/addressSchema' },
value: {
- oneOf: [{ $ref: '/Number' }, { $ref: '/JsNumber' }],
+ oneOf: [{ $ref: '/numberSchema' }, { $ref: '/jsNumber' }],
},
gas: {
- oneOf: [{ $ref: '/Number' }, { $ref: '/JsNumber' }],
+ oneOf: [{ $ref: '/numberSchema' }, { $ref: '/jsNumber' }],
},
gasPrice: {
- oneOf: [{ $ref: '/Number' }, { $ref: '/JsNumber' }],
+ oneOf: [{ $ref: '/numberSchema' }, { $ref: '/jsNumber' }],
},
data: {
type: 'string',
diff --git a/packages/json-schemas/src/schemas.ts b/packages/json-schemas/src/schemas.ts
index 8b7c538ed..3bc37f96b 100644
--- a/packages/json-schemas/src/schemas.ts
+++ b/packages/json-schemas/src/schemas.ts
@@ -9,23 +9,25 @@ import { orderFillRequestsSchema } from '../schemas/order_fill_requests_schema';
import { orderHashSchema } from '../schemas/order_hash_schema';
import { orderSchema, signedOrderSchema } from '../schemas/order_schemas';
import { ordersSchema } from '../schemas/orders_schema';
-import { relayerApiErrorResponseSchema } from '../schemas/relayer_api_error_response_schema';
-import { relayerApiFeesPayloadSchema } from '../schemas/relayer_api_fees_payload_schema';
-import { relayerApiFeesResponseSchema } from '../schemas/relayer_api_fees_response_schema';
-import {
- relayerApiOrderbookChannelSubscribePayload,
- relayerApiOrderbookChannelSubscribeSchema,
-} from '../schemas/relayer_api_orberbook_channel_subscribe_schema';
+import { paginatedCollectionSchema } from '../schemas/paginated_collection_schema';
import {
- relayerApiOrderbookChannelSnapshotPayload,
- relayerApiOrderbookChannelSnapshotSchema,
-} from '../schemas/relayer_api_orderbook_channel_snapshot_schema';
-import { relayerApiOrderbookChannelUpdateSchema } from '../schemas/relayer_api_orderbook_channel_update_response_schema';
-import { relayerApiOrderBookResponseSchema } from '../schemas/relayer_api_orderbook_response_schema';
+ relayerApiAssetDataPairsResponseSchema,
+ relayerApiAssetDataPairsSchema,
+ relayerApiAssetDataTradeInfoSchema,
+} from '../schemas/relayer_api_asset_pairs_response_schema';
+import { relayerApiErrorResponseSchema } from '../schemas/relayer_api_error_response_schema';
+import { relayerApiFeeRecipientsResponseSchema } from '../schemas/relayer_api_fee_recipients_response_schema';
+import { relayerApiOrderConfigPayloadSchema } from '../schemas/relayer_api_order_config_payload_schema';
+import { relayerApiOrderConfigResponseSchema } from '../schemas/relayer_api_order_config_response_schema';
+import { relayerApiOrderSchema } from '../schemas/relayer_api_order_schema';
+import { relayerApiOrderbookResponseSchema } from '../schemas/relayer_api_orderbook_response_schema';
import {
- relayerApiTokenPairsResponseSchema,
- relayerApiTokenTradeInfoSchema,
-} from '../schemas/relayer_api_token_pairs_response_schema';
+ relayerApiOrdersChannelSubscribePayload,
+ relayerApiOrdersChannelSubscribeSchema,
+} from '../schemas/relayer_api_orders_channel_subscribe_schema';
+import { relayerApiOrdersChannelUpdateSchema } from '../schemas/relayer_api_orders_channel_update_response_schema';
+import { relayerApiOrdersResponseSchema } from '../schemas/relayer_api_orders_response_schema';
+import { relayerApiOrdersSchema } from '../schemas/relayer_api_orders_schema';
import { signedOrdersSchema } from '../schemas/signed_orders_schema';
import { tokenSchema } from '../schemas/token_schema';
import { jsNumber, txDataSchema } from '../schemas/tx_data_schema';
@@ -51,15 +53,19 @@ export const schemas = {
tokenSchema,
jsNumber,
txDataSchema,
+ paginatedCollectionSchema,
relayerApiErrorResponseSchema,
- relayerApiFeesPayloadSchema,
- relayerApiFeesResponseSchema,
- relayerApiOrderBookResponseSchema,
- relayerApiTokenPairsResponseSchema,
- relayerApiTokenTradeInfoSchema,
- relayerApiOrderbookChannelSubscribeSchema,
- relayerApiOrderbookChannelSubscribePayload,
- relayerApiOrderbookChannelUpdateSchema,
- relayerApiOrderbookChannelSnapshotSchema,
- relayerApiOrderbookChannelSnapshotPayload,
+ relayerApiFeeRecipientsResponseSchema,
+ relayerApiOrderSchema,
+ relayerApiOrdersSchema,
+ relayerApiOrderConfigPayloadSchema,
+ relayerApiOrderConfigResponseSchema,
+ relayerApiOrderbookResponseSchema,
+ relayerApiAssetDataPairsResponseSchema,
+ relayerApiAssetDataTradeInfoSchema,
+ relayerApiOrdersChannelSubscribeSchema,
+ relayerApiOrdersChannelSubscribePayload,
+ relayerApiOrdersChannelUpdateSchema,
+ relayerApiOrdersResponseSchema,
+ relayerApiAssetDataPairsSchema,
};
diff --git a/packages/json-schemas/test/schema_test.ts b/packages/json-schemas/test/schema_test.ts
index f84553df1..61ef3d7ac 100644
--- a/packages/json-schemas/test/schema_test.ts
+++ b/packages/json-schemas/test/schema_test.ts
@@ -26,14 +26,16 @@ const {
tokenSchema,
jsNumber,
txDataSchema,
+ paginatedCollectionSchema,
relayerApiErrorResponseSchema,
- relayerApiOrderBookResponseSchema,
- relayerApiTokenPairsResponseSchema,
- relayerApiFeesPayloadSchema,
- relayerApiFeesResponseSchema,
- relayerApiOrderbookChannelSubscribeSchema,
- relayerApiOrderbookChannelUpdateSchema,
- relayerApiOrderbookChannelSnapshotSchema,
+ relayerApiOrderbookResponseSchema,
+ relayerApiAssetDataPairsResponseSchema,
+ relayerApiOrderConfigPayloadSchema,
+ relayerApiOrderConfigResponseSchema,
+ relayerApiOrdersChannelSubscribeSchema,
+ relayerApiOrdersChannelUpdateSchema,
+ relayerApiOrdersResponseSchema,
+ relayerApiOrderSchema,
} = schemas;
describe('Schema', () => {
@@ -55,6 +57,11 @@ describe('Schema', () => {
}
});
};
+ const paginatedResponse = {
+ total: 100,
+ perPage: 10,
+ page: 3,
+ };
describe('#numberSchema', () => {
it('should validate valid numbers', () => {
const testCases = ['42', '0', '1.3', '0.2', '00.00'];
@@ -166,6 +173,29 @@ describe('Schema', () => {
validateAgainstSchema(testCases, tokenSchema, shouldFail);
});
});
+ describe('#paginatedCollectionSchema', () => {
+ it('should validate valid paginated collections', () => {
+ const testCases = [paginatedResponse];
+ validateAgainstSchema(testCases, paginatedCollectionSchema);
+ });
+ it('should fail for invalid paginated collections', () => {
+ const paginatedCollectionNoTotal = {
+ page: 10,
+ perPage: 2,
+ };
+ const paginatedCollectionNoPerPage = {
+ page: 10,
+ total: 100,
+ };
+ const paginatedCollectionNoPage = {
+ total: 10,
+ perPage: 20,
+ };
+ const testCases = [{}, paginatedCollectionNoPage, paginatedCollectionNoPerPage, paginatedCollectionNoTotal];
+ const shouldFail = true;
+ validateAgainstSchema(testCases, paginatedCollectionSchema, shouldFail);
+ });
+ });
describe('order including schemas', () => {
const order = {
makerAddress: NULL_ADDRESS,
@@ -182,6 +212,16 @@ describe('Schema', () => {
exchangeAddress: NULL_ADDRESS,
expirationTimeSeconds: '42',
};
+ const relayerApiOrder = {
+ order,
+ metaData: {
+ someMetaData: 5,
+ },
+ };
+ const relayerApiOrdersResponse = {
+ ...paginatedResponse,
+ records: [relayerApiOrder, relayerApiOrder],
+ };
describe('#orderSchema', () => {
it('should validate valid order', () => {
const testCases = [order];
@@ -308,303 +348,453 @@ describe('Schema', () => {
validateAgainstSchema(testCases, orderFillRequestsSchema, shouldFail);
});
});
- describe('#relayerApiOrderBookResponseSchema', () => {
- it('should validate valid order book responses', () => {
- const testCases = [
- {
- bids: [],
- asks: [],
- },
- {
- bids: [signedOrder, signedOrder],
- asks: [],
- },
- {
- bids: [],
- asks: [signedOrder, signedOrder],
- },
- {
- bids: [signedOrder],
- asks: [signedOrder, signedOrder],
- },
- ];
- validateAgainstSchema(testCases, relayerApiOrderBookResponseSchema);
+ 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);
+ });
});
- it('should fail for invalid order fill requests', () => {
- const testCases = [
- {},
- {
- bids: [signedOrder, signedOrder],
- },
- {
- asks: [signedOrder, signedOrder],
- },
- {
- bids: signedOrder,
- asks: [signedOrder, signedOrder],
- },
- {
- bids: [signedOrder],
- asks: signedOrder,
- },
- ];
- const shouldFail = true;
- validateAgainstSchema(testCases, relayerApiOrderBookResponseSchema, 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('#relayerApiOrderbookChannelSubscribeSchema', () => {
- it('should validate valid orderbook channel websocket subscribe message', () => {
- const testCases = [
- {
- type: 'subscribe',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- snapshot: true,
- limit: 100,
+ 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',
},
- },
- {
- type: 'subscribe',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ ];
+ 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,
},
- },
- ];
- validateAgainstSchema(testCases, relayerApiOrderbookChannelSubscribeSchema);
+ {
+ takerAddress: checksummedAddress,
+ makerAssetAmount: '10000000000000000000',
+ takerAssetAmount: '30000000000000000000',
+ },
+ {
+ makerAssetAmount: 10000000000000000000,
+ takerAssetAmount: 30000000000000000000,
+ },
+ ];
+ const shouldFail = true;
+ validateAgainstSchema(testCases, relayerApiOrderConfigPayloadSchema, shouldFail);
+ });
});
- it('should fail for invalid orderbook channel websocket subscribe message', () => {
- const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
- const testCases = [
- {
- type: 'subscribe',
- channel: 'orderbook',
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- snapshot: true,
- limit: 100,
+ describe('#relayerApiOrderConfigResponseSchema', () => {
+ it('should validate valid fees responses', () => {
+ const testCases = [
+ {
+ makerFee: '10000000000000000',
+ takerFee: '30000000000000000',
+ feeRecipientAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ senderAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
},
- },
- {
- type: 'foo',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ ];
+ validateAgainstSchema(testCases, relayerApiOrderConfigResponseSchema);
+ });
+ it('should fail for invalid fees responses', () => {
+ const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
+ const testCases = [
+ {},
+ {
+ makerFee: 10000000000000000,
+ takerFee: 30000000000000000,
},
- },
- {
- type: 'subscribe',
- channel: 'bar',
- requestId: 1,
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ {
+ feeRecipient: checksummedAddress,
+ takerToSpecify: checksummedAddress,
+ makerFee: '10000000000000000',
+ takerFee: '30000000000000000',
},
- },
- {
- type: 'subscribe',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- baseTokenAddress: checksummedAddress,
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ ];
+ const shouldFail = true;
+ validateAgainstSchema(testCases, relayerApiOrderConfigResponseSchema, shouldFail);
+ });
+ });
+ describe('#relayerAssetDataPairsResponseSchema', () => {
+ it('should validate valid assetPairs response', () => {
+ const testCases = [
+ {
+ ...paginatedResponse,
+ records: [],
},
- },
- {
- type: 'subscribe',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- quoteTokenAddress: checksummedAddress,
+ {
+ ...paginatedResponse,
+ records: [
+ {
+ assetDataA: {
+ assetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ minAmount: '0',
+ maxAmount: '10000000000000000000',
+ precision: 5,
+ },
+ assetDataB: {
+ assetData: '0xef7fff64389b814a946f3e92105513705ca6b990',
+ minAmount: '0',
+ maxAmount: '50000000000000000000',
+ precision: 5,
+ },
+ },
+ ],
},
- },
- {
- type: 'subscribe',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ {
+ ...paginatedResponse,
+ records: [
+ {
+ assetDataA: {
+ assetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ },
+ assetDataB: {
+ assetData: '0xef7fff64389b814a946f3e92105513705ca6b990',
+ },
+ },
+ ],
},
- },
- {
- type: 'subscribe',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ ];
+ validateAgainstSchema(testCases, relayerApiAssetDataPairsResponseSchema);
+ });
+ it('should fail for invalid assetPairs responses', () => {
+ const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
+ const testCases = [
+ {
+ ...paginatedResponse,
+ records: [
+ {
+ assetDataA: {
+ assetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ minAmount: '0',
+ maxAmount: '10000000000000000000',
+ precision: 5,
+ },
+ assetDataC: {
+ assetData: '0xef7fff64389b814a946f3e92105513705ca6b990',
+ minAmount: '0',
+ maxAmount: '50000000000000000000',
+ precision: 5,
+ },
+ },
+ ],
},
- },
- {
- type: 'subscribe',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- snapshot: 'true',
- limit: 100,
+ {
+ records: [
+ {
+ assetDataA: {
+ assetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
+ minAmount: '0',
+ maxAmount: '10000000000000000000',
+ precision: 5,
+ },
+ assetDataB: {
+ assetData: '0xef7fff64389b814a946f3e92105513705ca6b990',
+ minAmount: '0',
+ maxAmount: '50000000000000000000',
+ precision: 5,
+ },
+ },
+ ],
},
- },
- {
- type: 'subscribe',
- channel: 'orderbook',
- requestId: 1,
- payload: {
- baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- quoteTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- snapshot: true,
- limit: '100',
+ {
+ ...paginatedResponse,
+ records: [
+ {
+ assetDataA: {
+ minAmount: '0',
+ maxAmount: '10000000000000000000',
+ precision: 5,
+ },
+ assetDataB: {
+ minAmount: '0',
+ maxAmount: '50000000000000000000',
+ precision: 5,
+ },
+ },
+ ],
},
- },
- ];
- const shouldFail = true;
- validateAgainstSchema(testCases, relayerApiOrderbookChannelSubscribeSchema, shouldFail);
+ ];
+ const shouldFail = true;
+ validateAgainstSchema(testCases, relayerApiAssetDataPairsResponseSchema, shouldFail);
+ });
});
- });
- describe('#relayerApiOrderbookChannelSnapshotSchema', () => {
- it('should validate valid orderbook channel websocket snapshot message', () => {
- const testCases = [
- {
- type: 'snapshot',
- channel: 'orderbook',
- requestId: 2,
- payload: {
- bids: [],
- asks: [],
+ describe('#relayerApiOrdersResponseSchema', () => {
+ it('should validate valid orders responses', () => {
+ const testCases = [
+ relayerApiOrdersResponse,
+ {
+ ...paginatedResponse,
+ records: [],
},
- },
- {
- type: 'snapshot',
- channel: 'orderbook',
- requestId: 2,
- payload: {
- bids: [signedOrder],
- asks: [signedOrder],
+ ];
+ validateAgainstSchema(testCases, relayerApiOrdersResponseSchema);
+ });
+ it('should fail for invalid orders responses', () => {
+ const testCases = [
+ {
+ records: [relayerApiOrder, relayerApiOrder],
},
- },
- ];
- validateAgainstSchema(testCases, relayerApiOrderbookChannelSnapshotSchema);
- });
- it('should fail for invalid orderbook channel websocket snapshot message', () => {
- const testCases = [
- {
- type: 'foo',
- channel: 'orderbook',
- requestId: 2,
- payload: {
- bids: [signedOrder],
- asks: [signedOrder],
+ {
+ ...paginatedResponse,
},
- },
- {
- type: 'snapshot',
- channel: 'bar',
- requestId: 2,
- payload: {
- bids: [signedOrder],
- asks: [signedOrder],
+ {
+ ...paginatedResponse,
+ records: [{}, relayerApiOrder],
},
- },
- {
- type: 'snapshot',
- channel: 'orderbook',
- payload: {
- bids: [signedOrder],
- asks: [signedOrder],
+ ];
+ 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: [],
+ },
},
- },
- {
- type: 'snapshot',
- channel: 'orderbook',
- requestId: '2',
- payload: {
- bids: [signedOrder],
- asks: [signedOrder],
+ {
+ bids: {
+ ...paginatedResponse,
+ records: [relayerApiOrder, relayerApiOrder],
+ },
+ asks: {
+ ...paginatedResponse,
+ records: [relayerApiOrder, relayerApiOrder],
+ },
},
- },
- {
- type: 'snapshot',
- channel: 'orderbook',
- requestId: 2,
- payload: {
- bids: [signedOrder],
+ {
+ bids: {
+ ...paginatedResponse,
+ records: [],
+ },
+ asks: {
+ ...paginatedResponse,
+ records: [relayerApiOrder, relayerApiOrder],
+ },
},
- },
- {
- type: 'snapshot',
- channel: 'orderbook',
- requestId: 2,
- payload: {
- asks: [signedOrder],
+ ];
+ validateAgainstSchema(testCases, relayerApiOrderbookResponseSchema);
+ });
+ it('should fail for invalid order fill requests', () => {
+ const testCases = [
+ {},
+ {
+ bids: {
+ records: [relayerApiOrder],
+ },
+ asks: {
+ ...paginatedResponse,
+ records: [],
+ },
},
- },
- {
- type: 'snapshot',
- channel: 'orderbook',
- requestId: 2,
- payload: {
- bids: [signedOrder],
- asks: [{}],
+ {
+ bids: {
+ ...paginatedResponse,
+ records: [relayerApiOrder, relayerApiOrder],
+ },
+ asks: {},
},
- },
- {
- type: 'snapshot',
- channel: 'orderbook',
- requestId: 2,
- payload: {
- bids: [{}],
- asks: [signedOrder],
+ {
+ bids: {
+ ...paginatedResponse,
+ },
+ asks: {
+ ...paginatedResponse,
+ records: [relayerApiOrder, relayerApiOrder],
+ },
},
- },
- ];
- const shouldFail = true;
- validateAgainstSchema(testCases, relayerApiOrderbookChannelSnapshotSchema, shouldFail);
+ ];
+ const shouldFail = true;
+ validateAgainstSchema(testCases, relayerApiOrdersResponseSchema, shouldFail);
+ });
});
- });
- describe('#relayerApiOrderbookChannelUpdateSchema', () => {
- it('should validate valid orderbook channel websocket update message', () => {
- const testCases = [
- {
- type: 'update',
- channel: 'orderbook',
- requestId: 2,
- payload: signedOrder,
- },
- ];
- validateAgainstSchema(testCases, relayerApiOrderbookChannelUpdateSchema);
+ 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 checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
+ const testCases = [
+ {
+ type: 'subscribe',
+ channel: 'orders',
+ },
+ {
+ type: 'subscribe',
+ channel: 'orders',
+ requestId: 'randomId',
+ payload: {
+ makerAssetProxyId: '0x02571792',
+ takerAssetProxyId: '0xf47261b0',
+ makerAssetAddress: checksummedAddress,
+ },
+ },
+ {
+ type: 'subscribe',
+ channel: 'orders',
+ requestId: 'randomId',
+ payload: {
+ makerAssetProxyId: 'invalidId',
+ },
+ },
+ ];
+ const shouldFail = true;
+ validateAgainstSchema(testCases, relayerApiOrdersChannelSubscribeSchema, shouldFail);
+ });
});
- it('should fail for invalid orderbook channel websocket update message', () => {
- const testCases = [
- {
- type: 'foo',
- channel: 'orderbook',
- requestId: 2,
- payload: signedOrder,
- },
- {
- type: 'update',
- channel: 'bar',
- requestId: 2,
- payload: signedOrder,
- },
- {
- type: 'update',
- channel: 'orderbook',
- requestId: 2,
- payload: {},
- },
- ];
- const shouldFail = true;
- validateAgainstSchema(testCases, relayerApiOrderbookChannelUpdateSchema, 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);
+ });
});
});
});
@@ -624,217 +814,6 @@ describe('Schema', () => {
});
});
});
- 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('#relayerApiFeesPayloadSchema', () => {
- it('should validate valid fees payloads', () => {
- const testCases = [
- {
- exchangeContractAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- maker: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- taker: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
- makerTokenAmount: '10000000000000000000',
- takerTokenAmount: '30000000000000000000',
- expirationUnixTimestampSec: '42',
- salt: '67006738228878699843088602623665307406148487219438534730168799356281242528500',
- },
- ];
- validateAgainstSchema(testCases, relayerApiFeesPayloadSchema);
- });
- it('should fail for invalid fees payloads', () => {
- const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
- const testCases = [
- {},
- {
- takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
- makerTokenAmount: '10000000000000000000',
- takerTokenAmount: '30000000000000000000',
- },
- {
- taker: checksummedAddress,
- makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
- makerTokenAmount: '10000000000000000000',
- takerTokenAmount: '30000000000000000000',
- },
- {
- makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
- makerTokenAmount: 10000000000000000000,
- takerTokenAmount: 30000000000000000000,
- },
- ];
- const shouldFail = true;
- validateAgainstSchema(testCases, relayerApiFeesPayloadSchema, shouldFail);
- });
- });
- describe('#relayerApiFeesResponseSchema', () => {
- it('should validate valid fees responses', () => {
- const testCases = [
- {
- makerFee: '10000000000000000',
- takerFee: '30000000000000000',
- feeRecipient: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- },
- ];
- validateAgainstSchema(testCases, relayerApiFeesResponseSchema);
- });
- 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, relayerApiFeesResponseSchema, shouldFail);
- });
- });
- describe('#relayerApiTokenPairsResponseSchema', () => {
- it('should validate valid tokenPairs response', () => {
- const testCases = [
- [],
- [
- {
- tokenA: {
- address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- minAmount: '0',
- maxAmount: '10000000000000000000',
- precision: 5,
- },
- tokenB: {
- address: '0xef7fff64389b814a946f3e92105513705ca6b990',
- minAmount: '0',
- maxAmount: '50000000000000000000',
- precision: 5,
- },
- },
- ],
- [
- {
- tokenA: {
- address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- },
- tokenB: {
- address: '0xef7fff64389b814a946f3e92105513705ca6b990',
- },
- },
- ],
- ];
- validateAgainstSchema(testCases, relayerApiTokenPairsResponseSchema);
- });
- it('should fail for invalid tokenPairs responses', () => {
- const checksummedAddress = '0xA2b31daCf30a9C50ca473337c01d8A201ae33e32';
- const testCases = [
- [
- {
- tokenA: {
- address: checksummedAddress,
- },
- tokenB: {
- address: checksummedAddress,
- },
- },
- ],
- [
- {
- tokenA: {
- address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- minAmount: 0,
- maxAmount: 10000000000000000000,
- },
- tokenB: {
- address: '0xef7fff64389b814a946f3e92105513705ca6b990',
- minAmount: 0,
- maxAmount: 50000000000000000000,
- },
- },
- ],
- [
- {
- tokenA: {
- address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
- precision: '5',
- },
- tokenB: {
- address: '0xef7fff64389b814a946f3e92105513705ca6b990',
- precision: '5',
- },
- },
- ],
- ];
- const shouldFail = true;
- validateAgainstSchema(testCases, relayerApiTokenPairsResponseSchema, shouldFail);
- });
- });
describe('#jsNumberSchema', () => {
it('should validate valid js number', () => {
// tslint:disable-next-line:custom-no-magic-numbers