From 4d4eb7757c40e9ece326c214891d571aec066955 Mon Sep 17 00:00:00 2001 From: Kirill Date: Fri, 23 Aug 2024 00:15:53 +0400 Subject: [PATCH] feat(orders-api): add getPublishedSecrets endpoint (#31) --- src/api/fusion-api.ts | 7 ++++++- src/api/orders/order-api.spec.ts | 29 +++++++++++++++++++++++++++++ src/api/orders/orders.api.ts | 9 +++++++++ src/api/orders/types.ts | 32 ++++++++++++++++++++++++++++++++ src/sdk/sdk.ts | 9 ++++++++- 5 files changed, 84 insertions(+), 2 deletions(-) diff --git a/src/api/fusion-api.ts b/src/api/fusion-api.ts index ea3a8a1..4912ec8 100644 --- a/src/api/fusion-api.ts +++ b/src/api/fusion-api.ts @@ -15,7 +15,8 @@ import { OrderStatusRequest, OrderStatusResponse, OrdersByMakerResponse, - ReadyToAcceptSecretFills + ReadyToAcceptSecretFills, + PublishedSecretsResponse } from './orders' export class FusionApi { @@ -86,6 +87,10 @@ export class FusionApi { return this.ordersApi.getReadyToAcceptSecretFills(orderHash) } + getPublishedSecrets(orderHash: string): Promise { + return this.ordersApi.getPublishedSecrets(orderHash) + } + submitOrder(params: RelayerRequest): Promise { return this.relayerApi.submit(params) } diff --git a/src/api/orders/order-api.spec.ts b/src/api/orders/order-api.spec.ts index d534f15..c44656f 100644 --- a/src/api/orders/order-api.spec.ts +++ b/src/api/orders/order-api.spec.ts @@ -7,6 +7,8 @@ import { OrdersByMakerResponse, OrderStatus, OrderStatusResponse, + OrderType, + PublishedSecretsResponse, ReadyToAcceptSecretFills, ValidationStatus } from './types' @@ -565,4 +567,31 @@ describe(__filename, () => { ) }) }) + + describe('getPublishedSecrets', () => { + it('success', async () => { + const url = 'https://test.com/orders' + + const expected: PublishedSecretsResponse = { + orderType: OrderType.SingleFill, + secrets: [] + } + const httpProvider = createHttpProviderFake(expected) + const api = new OrdersApi( + { + url + }, + httpProvider + ) + + const orderHash = + '0x035b5c86d29c154e1e677ef1237de6792ff18d5c92964222ee768c77148e0fb7' + const response = await api.getPublishedSecrets(orderHash) + + expect(response).toEqual(expected) + expect(httpProvider.get).toHaveBeenLastCalledWith( + `${url}/v1.0/order/secrets/${orderHash}` + ) + }) + }) }) diff --git a/src/api/orders/orders.api.ts b/src/api/orders/orders.api.ts index 1e824b9..ea909e9 100644 --- a/src/api/orders/orders.api.ts +++ b/src/api/orders/orders.api.ts @@ -9,6 +9,7 @@ import { OrdersApiConfig, OrdersByMakerResponse, OrderStatusResponse, + PublishedSecretsResponse, ReadyToAcceptSecretFills } from './types' import {concatQueryParams} from '../params' @@ -54,4 +55,12 @@ export class OrdersApi { return this.httpClient.get(url) } + + async getPublishedSecrets( + orderHash: string + ): Promise { + const url = `${this.config.url}/${OrdersApi.Version}/order/secrets/${orderHash}` + + return this.httpClient.get(url) + } } diff --git a/src/api/orders/types.ts b/src/api/orders/types.ts index 28e69af..689ef18 100644 --- a/src/api/orders/types.ts +++ b/src/api/orders/types.ts @@ -155,3 +155,35 @@ export type ReadyToAcceptSecretFill = { export type ReadyToAcceptSecretFills = { fills: ReadyToAcceptSecretFill[] } + +export enum OrderType { + SingleFill = 'SingleFill', + MultipleFills = 'MultipleFills' +} + +export type ChainImmutables = { + orderHash: string + hashlock: string + maker: string + taker: string + token: string + amount: string + safetyDeposit: string + timelocks: string +} + +export type PublicSecret = { + idx: number + secret: string + srcImmutables: ChainImmutables + dstImmutables: ChainImmutables +} + +export type PublishedSecretsResponse = { + orderType: OrderType + secrets: PublicSecret[] + + // empty for OrderType.SingleFill + merkleLeaves?: string[] + secretHashes?: string[] +} diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index dc13d5a..7684a5b 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -21,7 +21,8 @@ import { OrdersByMakerResponse, OrderStatusRequest, OrderStatusResponse, - ReadyToAcceptSecretFills + ReadyToAcceptSecretFills, + PublishedSecretsResponse } from '../api' import {CrossChainOrder} from '../cross-chain-order' import {SupportedChain} from '../chains' @@ -65,6 +66,12 @@ export class SDK { return this.api.getReadyToAcceptSecretFills(orderHash) } + async getPublishedSecrets( + orderHash: string + ): Promise { + return this.api.getPublishedSecrets(orderHash) + } + async submitSecret(orderHash: string, secret: string): Promise { return this.api.submitSecret(orderHash, secret) }