Add POST order endpoint
This commit is contained in:
@@ -196,7 +196,7 @@ export const api: OpenApiSpec = {
|
||||
},
|
||||
},
|
||||
],
|
||||
true,
|
||||
false,
|
||||
),
|
||||
responses: generateResponses(
|
||||
'relayerApiOrderSchema',
|
||||
@@ -245,6 +245,7 @@ export const api: OpenApiSpec = {
|
||||
get: {
|
||||
description: `Relayers have full discretion over the orders that they are willing to host on their orderbooks (e.g what fees they charge, etc...). In order for traders to discover their requirements programmatically, they can send an incomplete order to this endpoint and receive the missing fields, specifc to that order. This gives relayers a large amount of flexibility to tailor fees to unique traders, trading pairs and volume amounts. Submit a partial order and receive information required to complete the order: \`senderAddress\`, \`feeRecipientAddress\`, \`makerFee\`, \`takerFee\`. `,
|
||||
operationId: 'getOrderConfig',
|
||||
parameters: generateParameters([], false),
|
||||
requestBody: {
|
||||
description:
|
||||
'The fields of a 0x order the relayer may want to decide what configuration to send back.',
|
||||
@@ -276,6 +277,25 @@ export const api: OpenApiSpec = {
|
||||
),
|
||||
},
|
||||
},
|
||||
'/v2/order': {
|
||||
post: {
|
||||
description: `Submit a signed order to the relayer.`,
|
||||
operationId: 'postOrder',
|
||||
parameters: generateParameters([], false),
|
||||
requestBody: {
|
||||
description: 'A valid signed 0x order based on the schema.',
|
||||
content: {
|
||||
'application/json': {
|
||||
schema: {
|
||||
$ref: '#/components/schemas/signedOrderSchema',
|
||||
},
|
||||
example: examples.signedOrder,
|
||||
},
|
||||
},
|
||||
},
|
||||
responses: generateResponses(),
|
||||
},
|
||||
},
|
||||
},
|
||||
components: {
|
||||
schemas: openApiSchemas,
|
||||
|
||||
@@ -6,6 +6,7 @@ import { relayerApiOrderBookResponse } from './relayerApiOrderBookResponse';
|
||||
import { relayerApiOrderConfigPayload } from './relayerApiOrderConfigPayload';
|
||||
import { relayerApiOrderConfigResponse } from './relayerApiOrderConfigResponse';
|
||||
import { relayerApiOrdersResponse } from './relayerApiOrdersResponse';
|
||||
import { signedOrder } from './signedOrder';
|
||||
|
||||
export const examples = {
|
||||
validationError,
|
||||
@@ -16,4 +17,5 @@ export const examples = {
|
||||
relayerApiOrderConfigPayload,
|
||||
relayerApiOrderConfigResponse,
|
||||
relayerApiOrdersResponse,
|
||||
signedOrder,
|
||||
};
|
||||
|
||||
16
packages/sra-api/src/examples/signedOrder.ts
Normal file
16
packages/sra-api/src/examples/signedOrder.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
export const signedOrder = {
|
||||
makerAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
|
||||
takerAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||
feeRecipientAddress: '0xb046140686d052fff581f63f8136cce132e857da',
|
||||
senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||
makerAssetAmount: '10000000000000000',
|
||||
takerAssetAmount: '20000000000000000',
|
||||
makerFee: '100000000000000',
|
||||
takerFee: '200000000000000',
|
||||
expirationTimeSeconds: '1532560590',
|
||||
salt: '1532559225',
|
||||
makerAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d',
|
||||
takerAssetData: '0x0257179264389b814a946f3e92105513705ca6b990',
|
||||
exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093',
|
||||
signature: '0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
||||
};
|
||||
@@ -20,7 +20,7 @@ export const paginationParameters: ParameterObject[] = [
|
||||
},
|
||||
];
|
||||
|
||||
export const networkdIdParameter = {
|
||||
export const networkdIdParameter: ParameterObject = {
|
||||
name: 'network_id',
|
||||
in: 'query',
|
||||
description: 'The id of the Ethereum network',
|
||||
@@ -33,5 +33,5 @@ export const networkdIdParameter = {
|
||||
|
||||
export const generateParameters = (parameters: ParameterObject[], isPaginated: boolean = false): ParameterObject[] => {
|
||||
const optionalParameters = isPaginated ? paginationParameters : [];
|
||||
return [...optionalParameters, ...parameters];
|
||||
return [networkdIdParameter, ...optionalParameters, ...parameters];
|
||||
};
|
||||
|
||||
@@ -3,16 +3,22 @@ import { ResponsesObject } from '@loopback/openapi-v3-types';
|
||||
import { errorResponses } from './errors';
|
||||
import { headers } from './headers';
|
||||
|
||||
export const generateResponses = (schemaName: string, example: any, description: string = 'OK'): ResponsesObject => ({
|
||||
'200': {
|
||||
headers,
|
||||
description,
|
||||
content: {
|
||||
export const generateResponses = (schemaName?: string, example?: any, description: string = 'OK'): ResponsesObject => {
|
||||
const responses = {
|
||||
'200': {
|
||||
headers,
|
||||
description,
|
||||
content: {},
|
||||
},
|
||||
...errorResponses,
|
||||
};
|
||||
if (schemaName) {
|
||||
responses['200'].content = {
|
||||
'application/json': {
|
||||
schema: { $ref: `#/components/schemas/${schemaName}` },
|
||||
example,
|
||||
},
|
||||
},
|
||||
},
|
||||
...errorResponses,
|
||||
});
|
||||
};
|
||||
}
|
||||
return responses;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user