diff --git a/package.json b/package.json index fe29a0d..48979e1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.79-rc0", + "version": "0.20.79-rc1", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Frontage/index.ts b/src/services/Frontage/index.ts index 2646156..77b3d8c 100644 --- a/src/services/Frontage/index.ts +++ b/src/services/Frontage/index.ts @@ -1,5 +1,6 @@ import { fetchWithValidation } from 'simple-typed-fetch'; -import { searchTickersSchema } from './schemas'; +import { tickersSchema } from './schemas'; +import type { tickersBaseSearchParams, tickersCategories } from '../../types'; export class Frontage { private readonly apiUrl: string; @@ -8,11 +9,56 @@ export class Frontage { this.apiUrl = apiUrl; this.searchTickers = this.searchTickers.bind(this); + this.getTickers = this.getTickers.bind(this); } - searchTickers = () => { - return fetchWithValidation(`${this.apiUrl}/api/v1/tickers/search`, - searchTickersSchema + searchTickers = ({ + searchValue, + currentNetwork, + targetNetwork, + sortBy, + sortType, + offset, + limit, + }: { searchValue: string } & tickersBaseSearchParams) => { + const queryParams = [ + `searchValue=${encodeURIComponent(searchValue)}`, + currentNetwork !== undefined ? `¤tNetwork=${encodeURIComponent(currentNetwork)}` : '', + targetNetwork !== undefined ? `&targetNetwork=${encodeURIComponent(targetNetwork)}` : '', + sortBy !== undefined ? `&sortBy=${encodeURIComponent(sortBy)}` : '', + sortType !== undefined ? `&sortType=${encodeURIComponent(sortType)}` : '', + offset !== undefined ? `&offset=${offset}` : '', + limit !== undefined ? `&limit=${limit}` : '', + ].filter(Boolean).join('&'); + + return fetchWithValidation( + `${this.apiUrl}/api/v1/tickers/search?${queryParams}`, + tickersSchema + ); + }; + + getTickers = ({ + category, + currentNetwork, + targetNetwork, + sortBy, + sortType, + offset, + limit, + }: { category: tickersCategories } & tickersBaseSearchParams) => { + const queryParams = [ + `category=${encodeURIComponent(category)}`, + currentNetwork !== undefined ? `¤tNetwork=${encodeURIComponent(currentNetwork)}` : '', + targetNetwork !== undefined ? `&targetNetwork=${encodeURIComponent(targetNetwork)}` : '', + sortBy !== undefined ? `&sortBy=${encodeURIComponent(sortBy)}` : '', + sortType !== undefined ? `&sortType=${encodeURIComponent(sortType)}` : '', + offset !== undefined ? `&offset=${offset}` : '', + limit !== undefined ? `&limit=${limit}` : '', + ].filter(Boolean).join('&'); + + return fetchWithValidation( + `/api/v1/tickers/get?${queryParams}`, + tickersSchema ); }; } diff --git a/src/services/Frontage/schemas/index.ts b/src/services/Frontage/schemas/index.ts index c03475f..4611949 100644 --- a/src/services/Frontage/schemas/index.ts +++ b/src/services/Frontage/schemas/index.ts @@ -1 +1 @@ -export * from './search-tickers-schema'; +export * from './tickers-schema'; diff --git a/src/services/Frontage/schemas/search-tickers-schema.ts b/src/services/Frontage/schemas/tickers-schema.ts similarity index 74% rename from src/services/Frontage/schemas/search-tickers-schema.ts rename to src/services/Frontage/schemas/tickers-schema.ts index 3822030..46f894f 100644 --- a/src/services/Frontage/schemas/search-tickers-schema.ts +++ b/src/services/Frontage/schemas/tickers-schema.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const searchTickersSchema = z.array(z.object({ +export const tickersSchema = z.array(z.object({ pair: z.string(), volume24: z.number(), change24: z.number(), diff --git a/src/types.ts b/src/types.ts index 3607a8d..63ea7ef 100644 --- a/src/types.ts +++ b/src/types.ts @@ -3,8 +3,9 @@ import type factories from './constants/factories.js'; import type { BigNumber } from 'bignumber.js'; import type subOrderStatuses from './constants/subOrderStatuses.js'; import type positionStatuses from './constants/positionStatuses.js'; -import type { knownEnvs } from './config/schemas/index.js'; +import type { knownEnvs } from './config/schemas'; import type getHistory from './Orion/bridge/getHistory.js'; +import type uppercasedNetworkCodes from './constants/uppercasedNetworkCodes'; export type DeepPartial = T extends object ? { [P in keyof T]?: DeepPartial; @@ -465,3 +466,21 @@ export type AtomicSwap = Partial< } export type OrderSource = 'TERMINAL_MARKET' | 'TERMINAL_LIMIT' | 'SWAP_UI' | 'WIDGET'; + +// Frontage +export type NetworkCode = typeof uppercasedNetworkCodes[number]; + +export type tickersCategories = 'USD' | 'ORN' | 'BNB' | 'ALTS'; + +export type tickersSortBy = 'PRICE' | 'CHANGE' | 'VOLUME'; + +export type tickersSortType = 'ASCENDING' | 'DESCENDING'; + +export type tickersBaseSearchParams = { + currentNetwork?: NetworkCode + targetNetwork?: NetworkCode + sortBy?: tickersSortBy + sortType?: tickersSortType + offset?: number + limit?: number +}