From cc45da8e86330b81f3a46a229feba5a1513c07e3 Mon Sep 17 00:00:00 2001 From: Oleg Nechiporenko Date: Tue, 26 Jul 2022 08:50:25 +0300 Subject: [PATCH] =?UTF-8?q?OP-2363:=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8?= =?UTF-8?q?=D0=B3=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D1=8B=20(#18)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add pair config subscription * Small fix * feat: add kind to update pair callback * chore: version bump Co-authored-by: Aleksandr Kraiz --- package.json | 2 +- .../OrionAggregator/ws/MessageType.ts | 1 + .../OrionAggregator/ws/SubscriptionType.ts | 1 + src/services/OrionAggregator/ws/index.ts | 35 +++++++++++++++++-- .../ws/schemas/assetPairConfigSchema.ts | 16 +++++++++ .../ws/schemas/assetPairsConfigSchema.ts | 2 +- 6 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 src/services/OrionAggregator/ws/schemas/assetPairConfigSchema.ts diff --git a/package.json b/package.json index 8047430..da587cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.12.16", + "version": "0.13.0-rc.8", "description": "Orion Protocol SDK", "main": "./lib/esm/index.js", "module": "./lib/esm/index.js", diff --git a/src/services/OrionAggregator/ws/MessageType.ts b/src/services/OrionAggregator/ws/MessageType.ts index cb51d25..fe4bc7f 100644 --- a/src/services/OrionAggregator/ws/MessageType.ts +++ b/src/services/OrionAggregator/ws/MessageType.ts @@ -5,6 +5,7 @@ const MessageType = { INITIALIZATION: 'i', AGGREGATED_ORDER_BOOK_UPDATE: 'aobu', ASSET_PAIRS_CONFIG_UPDATE: 'apcu', + ASSET_PAIR_CONFIG_UPDATE: 'apiu', ADDRESS_UPDATE: 'au', BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATE: 'btasabu', UNSUBSCRIPTION_DONE: 'ud', diff --git a/src/services/OrionAggregator/ws/SubscriptionType.ts b/src/services/OrionAggregator/ws/SubscriptionType.ts index 0170123..66b0c0c 100644 --- a/src/services/OrionAggregator/ws/SubscriptionType.ts +++ b/src/services/OrionAggregator/ws/SubscriptionType.ts @@ -1,5 +1,6 @@ const SubscriptionType = { ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE: 'apcus', + ASSET_PAIR_CONFIG_UPDATES_SUBSCRIBE: 'apius', AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE: 'aobus', ADDRESS_UPDATES_SUBSCRIBE: 'aus', BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_SUBSCRIBE: 'btasabus', diff --git a/src/services/OrionAggregator/ws/index.ts b/src/services/OrionAggregator/ws/index.ts index ee1fd5d..6bd51bd 100644 --- a/src/services/OrionAggregator/ws/index.ts +++ b/src/services/OrionAggregator/ws/index.ts @@ -15,6 +15,7 @@ import { FullOrder, OrderUpdate, AssetPairUpdate, OrderbookItem, Balance, Exchange, } from '../../../types'; import unsubscriptionDoneSchema from './schemas/unsubscriptionDoneSchema'; +import assetPairConfigSchema from './schemas/assetPairConfigSchema'; // import errorSchema from './schemas/errorSchema'; const mapFullOrder = (o: z.infer): FullOrder => ({ @@ -77,13 +78,21 @@ type BrokerTradableAtomicSwapBalanceSubscription = { callback: (balances: Partial>) => void, } -type PairConfigSubscription = { +type PairsConfigSubscription = { callback: ({ kind, data }: { kind: 'initial' | 'update', data: Partial>, }) => void, } +type PairConfigSubscription = { + payload: string, + callback: ({ kind, data }: { + kind: 'initial' | 'update', + data: AssetPairUpdate, + }) => void, +} + type AggregatedOrderbookSubscription = { payload: string, callback: ( @@ -128,7 +137,8 @@ type AddressUpdateSubscription = { type Subscription = { [SubscriptionType.ADDRESS_UPDATES_SUBSCRIBE]: AddressUpdateSubscription, [SubscriptionType.AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE]: AggregatedOrderbookSubscription, - [SubscriptionType.ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE]: PairConfigSubscription, + [SubscriptionType.ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE]: PairsConfigSubscription, + [SubscriptionType.ASSET_PAIR_CONFIG_UPDATES_SUBSCRIBE]: PairConfigSubscription, [SubscriptionType.BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_SUBSCRIBE]: BrokerTradableAtomicSwapBalanceSubscription, [SubscriptionType.SWAP_SUBSCRIBE]: SwapInfoSubscription } @@ -243,8 +253,10 @@ class OrionAggregatorWS { delete this.subscriptions[SubscriptionType.ADDRESS_UPDATES_SUBSCRIBE]?.[key]; } } - } else if (uuidValidate(subscription)) { // is swap info subscription (contains hyphen) + } else if (uuidValidate(subscription)) { + // is swap info subscription (contains hyphen) delete this.subscriptions[SubscriptionType.SWAP_SUBSCRIBE]?.[subscription]; + delete this.subscriptions[SubscriptionType.ASSET_PAIR_CONFIG_UPDATES_SUBSCRIBE]?.[subscription]; // !!! swap info subscription is uuid that contains hyphen } else if (subscription.includes('-') && subscription.split('-').length === 2) { // is pair name(AGGREGATED_ORDER_BOOK_UPDATE) const aobSubscriptions = this.subscriptions[SubscriptionType.AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE]; @@ -305,6 +317,7 @@ class OrionAggregatorWS { pingPongMessageSchema, addressUpdateSchema, assetPairsConfigSchema, + assetPairConfigSchema, brokerMessageSchema, orderBookSchema, swapInfoSchema, @@ -407,6 +420,22 @@ class OrionAggregatorWS { ); } break; + case MessageType.ASSET_PAIR_CONFIG_UPDATE: { + const pair = json.u; + const [, minQty, pricePrecision] = pair; + + this.subscriptions[ + SubscriptionType.ASSET_PAIR_CONFIG_UPDATES_SUBSCRIBE + ]?.[json.id]?.callback({ + data: { + minQty, + pricePrecision, + }, + kind: json.k === 'i' ? 'initial' : 'update', + }); + + break; + } case MessageType.ASSET_PAIRS_CONFIG_UPDATE: { const pairs = json; const priceUpdates: Partial> = {}; diff --git a/src/services/OrionAggregator/ws/schemas/assetPairConfigSchema.ts b/src/services/OrionAggregator/ws/schemas/assetPairConfigSchema.ts new file mode 100644 index 0000000..0b17754 --- /dev/null +++ b/src/services/OrionAggregator/ws/schemas/assetPairConfigSchema.ts @@ -0,0 +1,16 @@ +import { z } from 'zod'; +import MessageType from '../MessageType'; +import baseMessageSchema from './baseMessageSchema'; + +const assetPairConfigSchema = baseMessageSchema.extend({ + id: z.string(), + T: z.literal(MessageType.ASSET_PAIR_CONFIG_UPDATE), + k: z.enum(['i', 'u']), + u: z.tuple([ + z.string(), // pairName + z.number(), // minQty + z.number().int(), // pricePrecision + ]), +}); + +export default assetPairConfigSchema; diff --git a/src/services/OrionAggregator/ws/schemas/assetPairsConfigSchema.ts b/src/services/OrionAggregator/ws/schemas/assetPairsConfigSchema.ts index 04fcbb5..0557f7e 100644 --- a/src/services/OrionAggregator/ws/schemas/assetPairsConfigSchema.ts +++ b/src/services/OrionAggregator/ws/schemas/assetPairsConfigSchema.ts @@ -10,7 +10,7 @@ const assetPairsConfigSchema = baseMessageSchema.extend({ z.tuple([ z.string(), // pairName z.number(), // minQty - z.number(), // pricePrecision + z.number().int(), // pricePrecision ]), ), });