@lifi/perps-sdk-provider-ondo 0.0.0-preview-7ff840c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +38 -0
- package/dist/cjs/OndoProvider.d.ts +8 -0
- package/dist/cjs/OndoProvider.d.ts.map +1 -0
- package/dist/cjs/OndoProvider.js +338 -0
- package/dist/cjs/OndoProvider.js.map +1 -0
- package/dist/cjs/accountConfig.d.ts +3 -0
- package/dist/cjs/accountConfig.d.ts.map +1 -0
- package/dist/cjs/accountConfig.js +59 -0
- package/dist/cjs/accountConfig.js.map +1 -0
- package/dist/cjs/accountSummary.d.ts +3 -0
- package/dist/cjs/accountSummary.d.ts.map +1 -0
- package/dist/cjs/accountSummary.js +8 -0
- package/dist/cjs/accountSummary.js.map +1 -0
- package/dist/cjs/auth/OndoTokenStore.d.ts +13 -0
- package/dist/cjs/auth/OndoTokenStore.d.ts.map +1 -0
- package/dist/cjs/auth/OndoTokenStore.js +53 -0
- package/dist/cjs/auth/OndoTokenStore.js.map +1 -0
- package/dist/cjs/auth/completeSiweLogin.d.ts +13 -0
- package/dist/cjs/auth/completeSiweLogin.d.ts.map +1 -0
- package/dist/cjs/auth/completeSiweLogin.js +15 -0
- package/dist/cjs/auth/completeSiweLogin.js.map +1 -0
- package/dist/cjs/auth/index.d.ts +4 -0
- package/dist/cjs/auth/index.d.ts.map +1 -0
- package/dist/cjs/auth/index.js +11 -0
- package/dist/cjs/auth/index.js.map +1 -0
- package/dist/cjs/auth/signActions.d.ts +13 -0
- package/dist/cjs/auth/signActions.d.ts.map +1 -0
- package/dist/cjs/auth/signActions.js +86 -0
- package/dist/cjs/auth/signActions.js.map +1 -0
- package/dist/cjs/constants.d.ts +9 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +12 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +37 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/types/auth.d.ts +16 -0
- package/dist/cjs/types/auth.d.ts.map +1 -0
- package/dist/cjs/types/auth.js +3 -0
- package/dist/cjs/types/auth.js.map +1 -0
- package/dist/cjs/types/index.d.ts +4 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +3 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/wire.d.ts +154 -0
- package/dist/cjs/types/wire.d.ts.map +1 -0
- package/dist/cjs/types/wire.js +3 -0
- package/dist/cjs/types/wire.js.map +1 -0
- package/dist/cjs/types/ws.d.ts +92 -0
- package/dist/cjs/types/ws.d.ts.map +1 -0
- package/dist/cjs/types/ws.js +3 -0
- package/dist/cjs/types/ws.js.map +1 -0
- package/dist/cjs/utils/activityCursor.d.ts +9 -0
- package/dist/cjs/utils/activityCursor.d.ts.map +1 -0
- package/dist/cjs/utils/activityCursor.js +79 -0
- package/dist/cjs/utils/activityCursor.js.map +1 -0
- package/dist/cjs/utils/apiClient.d.ts +43 -0
- package/dist/cjs/utils/apiClient.d.ts.map +1 -0
- package/dist/cjs/utils/apiClient.js +134 -0
- package/dist/cjs/utils/apiClient.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +11 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +39 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/liquidation.d.ts +4 -0
- package/dist/cjs/utils/liquidation.d.ts.map +1 -0
- package/dist/cjs/utils/liquidation.js +16 -0
- package/dist/cjs/utils/liquidation.js.map +1 -0
- package/dist/cjs/utils/mapActivity.d.ts +5 -0
- package/dist/cjs/utils/mapActivity.d.ts.map +1 -0
- package/dist/cjs/utils/mapActivity.js +34 -0
- package/dist/cjs/utils/mapActivity.js.map +1 -0
- package/dist/cjs/utils/mapFill.d.ts +4 -0
- package/dist/cjs/utils/mapFill.d.ts.map +1 -0
- package/dist/cjs/utils/mapFill.js +36 -0
- package/dist/cjs/utils/mapFill.js.map +1 -0
- package/dist/cjs/utils/mapOrder.d.ts +16 -0
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -0
- package/dist/cjs/utils/mapOrder.js +135 -0
- package/dist/cjs/utils/mapOrder.js.map +1 -0
- package/dist/cjs/utils/mapPosition.d.ts +5 -0
- package/dist/cjs/utils/mapPosition.d.ts.map +1 -0
- package/dist/cjs/utils/mapPosition.js +26 -0
- package/dist/cjs/utils/mapPosition.js.map +1 -0
- package/dist/cjs/utils/ohlcvInterval.d.ts +4 -0
- package/dist/cjs/utils/ohlcvInterval.d.ts.map +1 -0
- package/dist/cjs/utils/ohlcvInterval.js +49 -0
- package/dist/cjs/utils/ohlcvInterval.js.map +1 -0
- package/dist/cjs/utils/ondoAsset.d.ts +3 -0
- package/dist/cjs/utils/ondoAsset.d.ts.map +1 -0
- package/dist/cjs/utils/ondoAsset.js +12 -0
- package/dist/cjs/utils/ondoAsset.js.map +1 -0
- package/dist/cjs/utils/orderFormatting.d.ts +4 -0
- package/dist/cjs/utils/orderFormatting.d.ts.map +1 -0
- package/dist/cjs/utils/orderFormatting.js +40 -0
- package/dist/cjs/utils/orderFormatting.js.map +1 -0
- package/dist/cjs/websocket/OndoWsProvider.d.ts +56 -0
- package/dist/cjs/websocket/OndoWsProvider.d.ts.map +1 -0
- package/dist/cjs/websocket/OndoWsProvider.js +515 -0
- package/dist/cjs/websocket/OndoWsProvider.js.map +1 -0
- package/dist/esm/OndoProvider.d.ts +39 -0
- package/dist/esm/OndoProvider.d.ts.map +1 -0
- package/dist/esm/OndoProvider.js +366 -0
- package/dist/esm/OndoProvider.js.map +1 -0
- package/dist/esm/accountConfig.d.ts +13 -0
- package/dist/esm/accountConfig.d.ts.map +1 -0
- package/dist/esm/accountConfig.js +77 -0
- package/dist/esm/accountConfig.js.map +1 -0
- package/dist/esm/accountSummary.d.ts +12 -0
- package/dist/esm/accountSummary.d.ts.map +1 -0
- package/dist/esm/accountSummary.js +14 -0
- package/dist/esm/accountSummary.js.map +1 -0
- package/dist/esm/auth/OndoTokenStore.d.ts +20 -0
- package/dist/esm/auth/OndoTokenStore.d.ts.map +1 -0
- package/dist/esm/auth/OndoTokenStore.js +61 -0
- package/dist/esm/auth/OndoTokenStore.js.map +1 -0
- package/dist/esm/auth/completeSiweLogin.d.ts +28 -0
- package/dist/esm/auth/completeSiweLogin.d.ts.map +1 -0
- package/dist/esm/auth/completeSiweLogin.js +21 -0
- package/dist/esm/auth/completeSiweLogin.js.map +1 -0
- package/dist/esm/auth/index.d.ts +4 -0
- package/dist/esm/auth/index.d.ts.map +1 -0
- package/dist/esm/auth/index.js +5 -0
- package/dist/esm/auth/index.js.map +1 -0
- package/dist/esm/auth/signActions.d.ts +35 -0
- package/dist/esm/auth/signActions.d.ts.map +1 -0
- package/dist/esm/auth/signActions.js +103 -0
- package/dist/esm/auth/signActions.js.map +1 -0
- package/dist/esm/constants.d.ts +35 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +35 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +19 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +21 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/types/auth.d.ts +32 -0
- package/dist/esm/types/auth.d.ts.map +1 -0
- package/dist/esm/types/auth.js +2 -0
- package/dist/esm/types/auth.js.map +1 -0
- package/dist/esm/types/index.d.ts +4 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +3 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/wire.d.ts +195 -0
- package/dist/esm/types/wire.d.ts.map +1 -0
- package/dist/esm/types/wire.js +7 -0
- package/dist/esm/types/wire.js.map +1 -0
- package/dist/esm/types/ws.d.ts +108 -0
- package/dist/esm/types/ws.d.ts.map +1 -0
- package/dist/esm/types/ws.js +7 -0
- package/dist/esm/types/ws.js.map +1 -0
- package/dist/esm/utils/activityCursor.d.ts +47 -0
- package/dist/esm/utils/activityCursor.d.ts.map +1 -0
- package/dist/esm/utils/activityCursor.js +93 -0
- package/dist/esm/utils/activityCursor.js.map +1 -0
- package/dist/esm/utils/apiClient.d.ts +90 -0
- package/dist/esm/utils/apiClient.d.ts.map +1 -0
- package/dist/esm/utils/apiClient.js +169 -0
- package/dist/esm/utils/apiClient.js.map +1 -0
- package/dist/esm/utils/index.d.ts +11 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +12 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/liquidation.d.ts +20 -0
- package/dist/esm/utils/liquidation.d.ts.map +1 -0
- package/dist/esm/utils/liquidation.js +29 -0
- package/dist/esm/utils/liquidation.js.map +1 -0
- package/dist/esm/utils/mapActivity.d.ts +21 -0
- package/dist/esm/utils/mapActivity.d.ts.map +1 -0
- package/dist/esm/utils/mapActivity.js +45 -0
- package/dist/esm/utils/mapActivity.js.map +1 -0
- package/dist/esm/utils/mapFill.d.ts +12 -0
- package/dist/esm/utils/mapFill.d.ts.map +1 -0
- package/dist/esm/utils/mapFill.js +37 -0
- package/dist/esm/utils/mapFill.js.map +1 -0
- package/dist/esm/utils/mapOrder.d.ts +50 -0
- package/dist/esm/utils/mapOrder.d.ts.map +1 -0
- package/dist/esm/utils/mapOrder.js +155 -0
- package/dist/esm/utils/mapOrder.js.map +1 -0
- package/dist/esm/utils/mapPosition.d.ts +19 -0
- package/dist/esm/utils/mapPosition.d.ts.map +1 -0
- package/dist/esm/utils/mapPosition.js +32 -0
- package/dist/esm/utils/mapPosition.js.map +1 -0
- package/dist/esm/utils/ohlcvInterval.d.ts +11 -0
- package/dist/esm/utils/ohlcvInterval.d.ts.map +1 -0
- package/dist/esm/utils/ohlcvInterval.js +59 -0
- package/dist/esm/utils/ohlcvInterval.js.map +1 -0
- package/dist/esm/utils/ondoAsset.d.ts +4 -0
- package/dist/esm/utils/ondoAsset.d.ts.map +1 -0
- package/dist/esm/utils/ondoAsset.js +9 -0
- package/dist/esm/utils/ondoAsset.js.map +1 -0
- package/dist/esm/utils/orderFormatting.d.ts +33 -0
- package/dist/esm/utils/orderFormatting.d.ts.map +1 -0
- package/dist/esm/utils/orderFormatting.js +62 -0
- package/dist/esm/utils/orderFormatting.js.map +1 -0
- package/dist/esm/websocket/OndoWsProvider.d.ts +122 -0
- package/dist/esm/websocket/OndoWsProvider.d.ts.map +1 -0
- package/dist/esm/websocket/OndoWsProvider.js +591 -0
- package/dist/esm/websocket/OndoWsProvider.js.map +1 -0
- package/dist/types/OndoProvider.d.ts +39 -0
- package/dist/types/OndoProvider.d.ts.map +1 -0
- package/dist/types/accountConfig.d.ts +13 -0
- package/dist/types/accountConfig.d.ts.map +1 -0
- package/dist/types/accountSummary.d.ts +12 -0
- package/dist/types/accountSummary.d.ts.map +1 -0
- package/dist/types/auth/OndoTokenStore.d.ts +20 -0
- package/dist/types/auth/OndoTokenStore.d.ts.map +1 -0
- package/dist/types/auth/completeSiweLogin.d.ts +28 -0
- package/dist/types/auth/completeSiweLogin.d.ts.map +1 -0
- package/dist/types/auth/index.d.ts +4 -0
- package/dist/types/auth/index.d.ts.map +1 -0
- package/dist/types/auth/signActions.d.ts +35 -0
- package/dist/types/auth/signActions.d.ts.map +1 -0
- package/dist/types/constants.d.ts +35 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types/auth.d.ts +32 -0
- package/dist/types/types/auth.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +4 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/wire.d.ts +195 -0
- package/dist/types/types/wire.d.ts.map +1 -0
- package/dist/types/types/ws.d.ts +108 -0
- package/dist/types/types/ws.d.ts.map +1 -0
- package/dist/types/utils/activityCursor.d.ts +47 -0
- package/dist/types/utils/activityCursor.d.ts.map +1 -0
- package/dist/types/utils/apiClient.d.ts +90 -0
- package/dist/types/utils/apiClient.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +11 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/liquidation.d.ts +20 -0
- package/dist/types/utils/liquidation.d.ts.map +1 -0
- package/dist/types/utils/mapActivity.d.ts +21 -0
- package/dist/types/utils/mapActivity.d.ts.map +1 -0
- package/dist/types/utils/mapFill.d.ts +12 -0
- package/dist/types/utils/mapFill.d.ts.map +1 -0
- package/dist/types/utils/mapOrder.d.ts +50 -0
- package/dist/types/utils/mapOrder.d.ts.map +1 -0
- package/dist/types/utils/mapPosition.d.ts +19 -0
- package/dist/types/utils/mapPosition.d.ts.map +1 -0
- package/dist/types/utils/ohlcvInterval.d.ts +11 -0
- package/dist/types/utils/ohlcvInterval.d.ts.map +1 -0
- package/dist/types/utils/ondoAsset.d.ts +4 -0
- package/dist/types/utils/ondoAsset.d.ts.map +1 -0
- package/dist/types/utils/orderFormatting.d.ts +33 -0
- package/dist/types/utils/orderFormatting.d.ts.map +1 -0
- package/dist/types/websocket/OndoWsProvider.d.ts +122 -0
- package/dist/types/websocket/OndoWsProvider.d.ts.map +1 -0
- package/package.json +64 -0
- package/src/OndoProvider.ts +635 -0
- package/src/accountConfig.ts +105 -0
- package/src/accountSummary.ts +22 -0
- package/src/auth/OndoTokenStore.ts +83 -0
- package/src/auth/completeSiweLogin.ts +43 -0
- package/src/auth/index.ts +12 -0
- package/src/auth/signActions.ts +160 -0
- package/src/constants.ts +38 -0
- package/src/index.ts +36 -0
- package/src/types/auth.ts +32 -0
- package/src/types/index.ts +5 -0
- package/src/types/wire.ts +228 -0
- package/src/types/ws.ts +79 -0
- package/src/utils/activityCursor.ts +140 -0
- package/src/utils/apiClient.ts +257 -0
- package/src/utils/index.ts +35 -0
- package/src/utils/liquidation.ts +37 -0
- package/src/utils/mapActivity.ts +61 -0
- package/src/utils/mapFill.ts +47 -0
- package/src/utils/mapOrder.ts +201 -0
- package/src/utils/mapPosition.ts +44 -0
- package/src/utils/ohlcvInterval.ts +69 -0
- package/src/utils/ondoAsset.ts +10 -0
- package/src/utils/orderFormatting.ts +70 -0
- package/src/websocket/OndoWsProvider.ts +752 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FundingActivity, LiquidationActivity, MarketDisplay } from '@lifi/perps-types';
|
|
2
|
+
import type { OndoFundingFeeTransfer, OndoLiquidationEvent } from '../types/wire.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map an Ondo funding-fee transfer to a {@link FundingActivity}. Ondo carries
|
|
5
|
+
* no transfer id on the wire, so a deterministic `funding:<market>:<ISO time>`
|
|
6
|
+
* id is synthesized — funding settles at most once per market per interval,
|
|
7
|
+
* so the pair is unique.
|
|
8
|
+
*
|
|
9
|
+
* @param market - Backend-resolved market identity for `transfer.market`.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export declare const mapFundingActivity: (transfer: OndoFundingFeeTransfer, market: MarketDisplay) => FundingActivity;
|
|
13
|
+
/**
|
|
14
|
+
* Map an Ondo liquidation event to a {@link LiquidationActivity}. Ondo does
|
|
15
|
+
* not report the account value at liquidation time, and its margin accounts
|
|
16
|
+
* are cross-only, so `accountValue` is `'0'` and `leverageType` is `'cross'`.
|
|
17
|
+
*
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
export declare const mapLiquidationActivity: (event: OndoLiquidationEvent, resolveMarket: (market: string) => MarketDisplay) => LiquidationActivity;
|
|
21
|
+
//# sourceMappingURL=mapActivity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapActivity.d.ts","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,aAAa,EACd,MAAM,mBAAmB,CAAA;AAG1B,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,sBAAsB,EAChC,QAAQ,aAAa,KACpB,eAYF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,oBAAoB,EAC3B,eAAe,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,KAC/C,mBAYD,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ActivityType } from '@lifi/perps-types';
|
|
2
|
+
import { ONDO_PROVIDER_KEY } from '../constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map an Ondo funding-fee transfer to a {@link FundingActivity}. Ondo carries
|
|
5
|
+
* no transfer id on the wire, so a deterministic `funding:<market>:<ISO time>`
|
|
6
|
+
* id is synthesized — funding settles at most once per market per interval,
|
|
7
|
+
* so the pair is unique.
|
|
8
|
+
*
|
|
9
|
+
* @param market - Backend-resolved market identity for `transfer.market`.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export const mapFundingActivity = (transfer, market) => {
|
|
13
|
+
const timestamp = new Date(transfer.time).toISOString();
|
|
14
|
+
return {
|
|
15
|
+
id: `funding:${transfer.market}:${timestamp}`,
|
|
16
|
+
provider: ONDO_PROVIDER_KEY,
|
|
17
|
+
timestamp,
|
|
18
|
+
type: ActivityType.FUNDING,
|
|
19
|
+
market,
|
|
20
|
+
amount: transfer.amount,
|
|
21
|
+
positionSize: transfer.positionSize,
|
|
22
|
+
fundingRate: transfer.rate,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Map an Ondo liquidation event to a {@link LiquidationActivity}. Ondo does
|
|
27
|
+
* not report the account value at liquidation time, and its margin accounts
|
|
28
|
+
* are cross-only, so `accountValue` is `'0'` and `leverageType` is `'cross'`.
|
|
29
|
+
*
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
export const mapLiquidationActivity = (event, resolveMarket) => ({
|
|
33
|
+
id: event.id,
|
|
34
|
+
provider: ONDO_PROVIDER_KEY,
|
|
35
|
+
timestamp: new Date(event.time).toISOString(),
|
|
36
|
+
type: ActivityType.LIQUIDATION,
|
|
37
|
+
liquidatedNotionalPosition: event.filledQuoteSize ?? '0',
|
|
38
|
+
accountValue: '0',
|
|
39
|
+
leverageType: 'cross',
|
|
40
|
+
liquidatedPositions: (event.triggeringPositions ?? []).map((p) => ({
|
|
41
|
+
market: resolveMarket(p.market),
|
|
42
|
+
size: p.netQuantity,
|
|
43
|
+
})),
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=mapActivity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapActivity.js","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAMnD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAgC,EAChC,MAAqB,EACJ,EAAE;IACnB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IACvD,OAAO;QACL,EAAE,EAAE,WAAW,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE;QAC7C,QAAQ,EAAE,iBAAiB;QAC3B,SAAS;QACT,IAAI,EAAE,YAAY,CAAC,OAAO;QAC1B,MAAM;QACN,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,WAAW,EAAE,QAAQ,CAAC,IAAI;KAC3B,CAAA;AACH,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAA2B,EAC3B,aAAgD,EAC3B,EAAE,CAAC,CAAC;IACzB,EAAE,EAAE,KAAK,CAAC,EAAE;IACZ,QAAQ,EAAE,iBAAiB;IAC3B,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;IAC7C,IAAI,EAAE,YAAY,CAAC,WAAW;IAC9B,0BAA0B,EAAE,KAAK,CAAC,eAAe,IAAI,GAAG;IACxD,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,OAAO;IACrB,mBAAmB,EAAE,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/B,IAAI,EAAE,CAAC,CAAC,WAAW;KACpB,CAAC,CAAC;CACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Fill, MarketDisplay } from '@lifi/perps-types';
|
|
2
|
+
import type { OndoFill } from '../types/wire.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map a raw Ondo fill to the generic {@link Fill}. The fee is netted against
|
|
5
|
+
* Ondo's `feeRebate`; when the wire `direction` is absent the classification
|
|
6
|
+
* falls back to the fill side.
|
|
7
|
+
*
|
|
8
|
+
* @param market - Backend-resolved market identity for `fill.market`.
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare const mapFill: (fill: OndoFill, market: MarketDisplay) => Fill;
|
|
12
|
+
//# sourceMappingURL=mapFill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAQ5D,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,kBAAkB,CAAA;AAYnE;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,QAAQ,EAAE,QAAQ,aAAa,KAAG,IAkB9D,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { FillClassification, FillStatus, LiquidityRole, OrderSide, } from '@lifi/perps-types';
|
|
2
|
+
import Big from 'big.js';
|
|
3
|
+
const DIRECTION_CLASSIFICATIONS = {
|
|
4
|
+
openLong: FillClassification.OPENED_LONG,
|
|
5
|
+
openShort: FillClassification.OPENED_SHORT,
|
|
6
|
+
closeLong: FillClassification.CLOSED_LONG,
|
|
7
|
+
closeShort: FillClassification.CLOSED_SHORT,
|
|
8
|
+
flipLongToShort: FillClassification.SWITCHED_SHORT,
|
|
9
|
+
flipShortToLong: FillClassification.SWITCHED_LONG,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Map a raw Ondo fill to the generic {@link Fill}. The fee is netted against
|
|
13
|
+
* Ondo's `feeRebate`; when the wire `direction` is absent the classification
|
|
14
|
+
* falls back to the fill side.
|
|
15
|
+
*
|
|
16
|
+
* @param market - Backend-resolved market identity for `fill.market`.
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
export const mapFill = (fill, market) => ({
|
|
20
|
+
id: fill.id,
|
|
21
|
+
orderId: fill.orderId,
|
|
22
|
+
market,
|
|
23
|
+
side: fill.side === 'buy' ? OrderSide.BUY : OrderSide.SELL,
|
|
24
|
+
size: fill.size,
|
|
25
|
+
price: fill.price,
|
|
26
|
+
status: FillStatus.FILLED,
|
|
27
|
+
liquidity: fill.isMaker ? LiquidityRole.MAKER : LiquidityRole.TAKER,
|
|
28
|
+
fee: new Big(fill.fee).minus(fill.feeRebate ?? '0').toFixed(),
|
|
29
|
+
realizedPnl: fill.pnl,
|
|
30
|
+
classification: fill.direction !== undefined
|
|
31
|
+
? DIRECTION_CLASSIFICATIONS[fill.direction]
|
|
32
|
+
: fill.side === 'buy'
|
|
33
|
+
? FillClassification.OPENED_LONG
|
|
34
|
+
: FillClassification.OPENED_SHORT,
|
|
35
|
+
createdAt: new Date(fill.time).toISOString(),
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=mapFill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,SAAS,GACV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB,MAAM,yBAAyB,GAC7B;IACE,QAAQ,EAAE,kBAAkB,CAAC,WAAW;IACxC,SAAS,EAAE,kBAAkB,CAAC,YAAY;IAC1C,SAAS,EAAE,kBAAkB,CAAC,WAAW;IACzC,UAAU,EAAE,kBAAkB,CAAC,YAAY;IAC3C,eAAe,EAAE,kBAAkB,CAAC,cAAc;IAClD,eAAe,EAAE,kBAAkB,CAAC,aAAa;CAClD,CAAA;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAc,EAAE,MAAqB,EAAQ,EAAE,CAAC,CAAC;IACvE,EAAE,EAAE,IAAI,CAAC,EAAE;IACX,OAAO,EAAE,IAAI,CAAC,OAAO;IACrB,MAAM;IACN,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;IAC1D,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK;IACnE,GAAG,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE;IAC7D,WAAW,EAAE,IAAI,CAAC,GAAG;IACrB,cAAc,EACZ,IAAI,CAAC,SAAS,KAAK,SAAS;QAC1B,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK;YACnB,CAAC,CAAC,kBAAkB,CAAC,WAAW;YAChC,CAAC,CAAC,kBAAkB,CAAC,YAAY;IACvC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;CAC7C,CAAC,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { MarketDisplay, OpenOrder, Order, TriggerOrder } from '@lifi/perps-types';
|
|
2
|
+
import { OrderStatus, OrderType } from '@lifi/perps-types';
|
|
3
|
+
import type { OndoOrder, OndoOrderStatus, OndoOrderType } from '../types/wire.js';
|
|
4
|
+
/** @public */
|
|
5
|
+
export declare const mapOrderType: (type: OndoOrderType) => OrderType;
|
|
6
|
+
/**
|
|
7
|
+
* Map Ondo's order status onto the generic enum. `untriggered` stop orders
|
|
8
|
+
* are active resting orders from the trader's point of view, so they map to
|
|
9
|
+
* OPEN.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export declare const mapOrderStatus: (status: OndoOrderStatus) => OrderStatus;
|
|
13
|
+
/**
|
|
14
|
+
* Plain-English `statusReason` for a cancelled order; `undefined` for every
|
|
15
|
+
* other status. Unknown wire reasons fall back to the generic sentence rather
|
|
16
|
+
* than leaking raw enum values into the UI.
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
export declare const mapStatusReason: (order: OndoOrder) => string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Whether an order rests on a trigger. Checks `stopOrderType` and
|
|
22
|
+
* `triggerPrice` besides the type so a lagging `type` field cannot
|
|
23
|
+
* misclassify a trigger as a plain order.
|
|
24
|
+
* @public
|
|
25
|
+
*/
|
|
26
|
+
export declare const isTriggerOrder: (order: OndoOrder) => boolean;
|
|
27
|
+
/** Map an active non-trigger Ondo order to an {@link OpenOrder}. @public */
|
|
28
|
+
export declare const mapOrder: (order: OndoOrder, market: MarketDisplay) => OpenOrder;
|
|
29
|
+
/** Map an active trigger Ondo order to a {@link TriggerOrder}. @public */
|
|
30
|
+
export declare const mapTriggerOrder: (order: OndoOrder, market: MarketDisplay) => TriggerOrder;
|
|
31
|
+
/**
|
|
32
|
+
* Bucket a venue order list into active open/trigger orders (mapped) and
|
|
33
|
+
* terminal order ids. Orders whose market the resolver does not know are
|
|
34
|
+
* skipped.
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
export declare const classifyAndMapOrders: (orders: OndoOrder[], resolveMarket: (market: string) => MarketDisplay | undefined) => {
|
|
38
|
+
openOrders: OpenOrder[];
|
|
39
|
+
triggerOrders: TriggerOrder[];
|
|
40
|
+
terminated: string[];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Map a single venue order onto the rich {@link Order} detail shape.
|
|
44
|
+
* `remainingSize` and `averagePrice` are derived (`size − filledSize`,
|
|
45
|
+
* `filledCost ÷ filledSize`); `updatedAt` is the latest transition timestamp
|
|
46
|
+
* Ondo exposes, falling back to `createdAt`.
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
export declare const mapOrderDetail: (order: OndoOrder, market: MarketDisplay) => Order;
|
|
50
|
+
//# sourceMappingURL=mapOrder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,KAAK,EACL,YAAY,EACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,WAAW,EACX,SAAS,EAEV,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACd,MAAM,kBAAkB,CAAA;AAOzB,cAAc;AACd,eAAO,MAAM,YAAY,GAAI,MAAM,aAAa,KAAG,SAWlD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,eAAe,KAAG,WAYxD,CAAA;AASD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,SAAS,KAAG,MAAM,GAAG,SAK3D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,KAAG,OAIhB,CAAA;AAElC,4EAA4E;AAC5E,eAAO,MAAM,QAAQ,GACnB,OAAO,SAAS,EAChB,QAAQ,aAAa,KACpB,SAUD,CAAA;AAEF,0EAA0E;AAC1E,eAAO,MAAM,eAAe,GAC1B,OAAO,SAAS,EAChB,QAAQ,aAAa,KACpB,YAOD,CAAA;AAOF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,SAAS,EAAE,EACnB,eAAe,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KAC3D;IACD,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAA;CAqBrB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,SAAS,EAChB,QAAQ,aAAa,KACpB,KA+BF,CAAA"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { OrderSide, OrderStatus, OrderType, TimeInForce, } from '@lifi/perps-types';
|
|
2
|
+
import Big from 'big.js';
|
|
3
|
+
const toIso = (time) => new Date(time).toISOString();
|
|
4
|
+
const mapSide = (side) => side === 'buy' ? OrderSide.BUY : OrderSide.SELL;
|
|
5
|
+
/** @public */
|
|
6
|
+
export const mapOrderType = (type) => {
|
|
7
|
+
switch (type) {
|
|
8
|
+
case 'limit':
|
|
9
|
+
return OrderType.LIMIT;
|
|
10
|
+
case 'market':
|
|
11
|
+
return OrderType.MARKET;
|
|
12
|
+
case 'stopMarket':
|
|
13
|
+
return OrderType.STOP_MARKET;
|
|
14
|
+
case 'takeProfitMarket':
|
|
15
|
+
return OrderType.TAKE_PROFIT_MARKET;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Map Ondo's order status onto the generic enum. `untriggered` stop orders
|
|
20
|
+
* are active resting orders from the trader's point of view, so they map to
|
|
21
|
+
* OPEN.
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export const mapOrderStatus = (status) => {
|
|
25
|
+
switch (status) {
|
|
26
|
+
case 'open':
|
|
27
|
+
case 'untriggered':
|
|
28
|
+
return OrderStatus.OPEN;
|
|
29
|
+
case 'pending':
|
|
30
|
+
return OrderStatus.PENDING;
|
|
31
|
+
case 'fullyfilled':
|
|
32
|
+
return OrderStatus.FILLED;
|
|
33
|
+
case 'canceled':
|
|
34
|
+
return OrderStatus.CANCELLED;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const CANCEL_REASON_SENTENCES = {
|
|
38
|
+
liquidation: 'Order cancelled: position was liquidated.',
|
|
39
|
+
selfMatchPrevention: 'Order cancelled: would self-match against your own resting order.',
|
|
40
|
+
immediateOrCancel: 'Order cancelled: immediate-or-cancel remainder.',
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Plain-English `statusReason` for a cancelled order; `undefined` for every
|
|
44
|
+
* other status. Unknown wire reasons fall back to the generic sentence rather
|
|
45
|
+
* than leaking raw enum values into the UI.
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
export const mapStatusReason = (order) => {
|
|
49
|
+
if (order.status !== 'canceled') {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return CANCEL_REASON_SENTENCES[order.cancelReason ?? ''] ?? 'Order cancelled.';
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Whether an order rests on a trigger. Checks `stopOrderType` and
|
|
56
|
+
* `triggerPrice` besides the type so a lagging `type` field cannot
|
|
57
|
+
* misclassify a trigger as a plain order.
|
|
58
|
+
* @public
|
|
59
|
+
*/
|
|
60
|
+
export const isTriggerOrder = (order) => order.type === 'stopMarket' ||
|
|
61
|
+
order.type === 'takeProfitMarket' ||
|
|
62
|
+
order.stopOrderType !== undefined ||
|
|
63
|
+
order.triggerPrice !== undefined;
|
|
64
|
+
/** Map an active non-trigger Ondo order to an {@link OpenOrder}. @public */
|
|
65
|
+
export const mapOrder = (order, market) => ({
|
|
66
|
+
orderId: order.orderId,
|
|
67
|
+
market,
|
|
68
|
+
side: mapSide(order.side),
|
|
69
|
+
type: mapOrderType(order.type),
|
|
70
|
+
size: order.size,
|
|
71
|
+
price: order.price,
|
|
72
|
+
filledSize: order.filledSize,
|
|
73
|
+
reduceOnly: order.reduceOnly ?? false,
|
|
74
|
+
createdAt: toIso(order.createdAt),
|
|
75
|
+
});
|
|
76
|
+
/** Map an active trigger Ondo order to a {@link TriggerOrder}. @public */
|
|
77
|
+
export const mapTriggerOrder = (order, market) => ({
|
|
78
|
+
orderId: order.orderId,
|
|
79
|
+
market,
|
|
80
|
+
type: mapOrderType(order.type),
|
|
81
|
+
size: order.size,
|
|
82
|
+
triggerPrice: order.triggerPrice ?? '0',
|
|
83
|
+
createdAt: toIso(order.createdAt),
|
|
84
|
+
});
|
|
85
|
+
const TERMINAL_STATUSES = new Set([
|
|
86
|
+
'canceled',
|
|
87
|
+
'fullyfilled',
|
|
88
|
+
]);
|
|
89
|
+
/**
|
|
90
|
+
* Bucket a venue order list into active open/trigger orders (mapped) and
|
|
91
|
+
* terminal order ids. Orders whose market the resolver does not know are
|
|
92
|
+
* skipped.
|
|
93
|
+
* @public
|
|
94
|
+
*/
|
|
95
|
+
export const classifyAndMapOrders = (orders, resolveMarket) => {
|
|
96
|
+
const openOrders = [];
|
|
97
|
+
const triggerOrders = [];
|
|
98
|
+
const terminated = [];
|
|
99
|
+
for (const order of orders) {
|
|
100
|
+
if (TERMINAL_STATUSES.has(order.status)) {
|
|
101
|
+
terminated.push(order.orderId);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const market = resolveMarket(order.market);
|
|
105
|
+
if (market === undefined) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (isTriggerOrder(order)) {
|
|
109
|
+
triggerOrders.push(mapTriggerOrder(order, market));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
openOrders.push(mapOrder(order, market));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return { openOrders, triggerOrders, terminated };
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Map a single venue order onto the rich {@link Order} detail shape.
|
|
119
|
+
* `remainingSize` and `averagePrice` are derived (`size − filledSize`,
|
|
120
|
+
* `filledCost ÷ filledSize`); `updatedAt` is the latest transition timestamp
|
|
121
|
+
* Ondo exposes, falling back to `createdAt`.
|
|
122
|
+
* @public
|
|
123
|
+
*/
|
|
124
|
+
export const mapOrderDetail = (order, market) => {
|
|
125
|
+
const filled = new Big(order.filledSize);
|
|
126
|
+
const trigger = isTriggerOrder(order);
|
|
127
|
+
return {
|
|
128
|
+
orderId: order.orderId,
|
|
129
|
+
market,
|
|
130
|
+
side: mapSide(order.side),
|
|
131
|
+
type: mapOrderType(order.type),
|
|
132
|
+
price: order.price,
|
|
133
|
+
originalSize: order.size,
|
|
134
|
+
remainingSize: new Big(order.size).minus(filled).toFixed(),
|
|
135
|
+
filledSize: order.filledSize,
|
|
136
|
+
timeInForce: order.timeInForce === undefined
|
|
137
|
+
? undefined
|
|
138
|
+
: TimeInForce[order.timeInForce],
|
|
139
|
+
reduceOnly: order.reduceOnly ?? false,
|
|
140
|
+
isTrigger: trigger,
|
|
141
|
+
...(trigger && order.triggerPrice !== undefined
|
|
142
|
+
? { triggerPrice: order.triggerPrice }
|
|
143
|
+
: {}),
|
|
144
|
+
status: mapOrderStatus(order.status),
|
|
145
|
+
...(mapStatusReason(order) !== undefined
|
|
146
|
+
? { statusReason: mapStatusReason(order) }
|
|
147
|
+
: {}),
|
|
148
|
+
...(filled.gt(0)
|
|
149
|
+
? { averagePrice: new Big(order.filledCost).div(filled).toFixed() }
|
|
150
|
+
: {}),
|
|
151
|
+
createdAt: toIso(order.createdAt),
|
|
152
|
+
updatedAt: toIso(order.canceledAt ?? order.filledAt ?? order.createdAt),
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=mapOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MarketDisplay, Position } from '@lifi/perps-types';
|
|
2
|
+
import type { OndoPosition } from '../types/wire.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map a raw Ondo position to the generic Position type. Ondo margin accounts
|
|
5
|
+
* are cross-margined only.
|
|
6
|
+
*
|
|
7
|
+
* @param market - Backend-resolved market identity for `pos.market`.
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export declare const mapPosition: (pos: OndoPosition, market: MarketDisplay) => Position;
|
|
11
|
+
/**
|
|
12
|
+
* Map raw Ondo positions to open {@link Position}s, dropping neutral and
|
|
13
|
+
* zero-quantity rows. Only valid for payloads carrying the full position
|
|
14
|
+
* set — dropping zeros from a partial frame would make closes unobservable.
|
|
15
|
+
*
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export declare const mapOpenPositions: (positions: OndoPosition[], resolveMarket: (market: string) => MarketDisplay) => Position[];
|
|
19
|
+
//# sourceMappingURL=mapPosition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,KAAK,YAAY,EACjB,QAAQ,aAAa,KACpB,QAWD,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,YAAY,EAAE,EACzB,eAAe,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,KAC/C,QAAQ,EAK6C,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { MarginMode, PositionSide } from '@lifi/perps-types';
|
|
2
|
+
import Big from 'big.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map a raw Ondo position to the generic Position type. Ondo margin accounts
|
|
5
|
+
* are cross-margined only.
|
|
6
|
+
*
|
|
7
|
+
* @param market - Backend-resolved market identity for `pos.market`.
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export const mapPosition = (pos, market) => ({
|
|
11
|
+
market,
|
|
12
|
+
side: pos.direction === 'short' ? PositionSide.SHORT : PositionSide.LONG,
|
|
13
|
+
size: new Big(pos.netQuantity).abs().toFixed(),
|
|
14
|
+
entryPrice: pos.averageEntryPrice,
|
|
15
|
+
markPrice: pos.markPrice,
|
|
16
|
+
liquidationPrice: pos.liquidationPrice,
|
|
17
|
+
unrealizedPnl: pos.unrealizedPnl,
|
|
18
|
+
leverage: Number.parseFloat(pos.leverage),
|
|
19
|
+
marginUsed: pos.usedMargin,
|
|
20
|
+
marginMode: MarginMode.CROSS,
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Map raw Ondo positions to open {@link Position}s, dropping neutral and
|
|
24
|
+
* zero-quantity rows. Only valid for payloads carrying the full position
|
|
25
|
+
* set — dropping zeros from a partial frame would make closes unobservable.
|
|
26
|
+
*
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
export const mapOpenPositions = (positions, resolveMarket) => positions
|
|
30
|
+
.filter((p) => p.direction !== 'neutral' && Number.parseFloat(p.netQuantity) !== 0)
|
|
31
|
+
.map((p) => mapPosition(p, resolveMarket(p.market)));
|
|
32
|
+
//# sourceMappingURL=mapPosition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapPosition.js","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,GAAiB,EACjB,MAAqB,EACX,EAAE,CAAC,CAAC;IACd,MAAM;IACN,IAAI,EAAE,GAAG,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI;IACxE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;IAC9C,UAAU,EAAE,GAAG,CAAC,iBAAiB;IACjC,SAAS,EAAE,GAAG,CAAC,SAAS;IACxB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;IACtC,aAAa,EAAE,GAAG,CAAC,aAAa;IAChC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;IACzC,UAAU,EAAE,GAAG,CAAC,UAAU;IAC1B,UAAU,EAAE,UAAU,CAAC,KAAK;CAC7B,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAAyB,EACzB,aAAgD,EACpC,EAAE,CACd,SAAS;KACN,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAC3E;KACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { OhlcvInterval } from '@lifi/perps-types';
|
|
2
|
+
/** @public */
|
|
3
|
+
export declare const mapInterval: (interval: string) => string;
|
|
4
|
+
/**
|
|
5
|
+
* Recover the SDK interval from a kline frame's bar span in seconds. Ondo's
|
|
6
|
+
* kline updates carry no resolution field — only the interval start/end —
|
|
7
|
+
* so the span is the only way to route a frame to its subscription.
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export declare const intervalFromBarSpan: (spanSecs: number) => OhlcvInterval | undefined;
|
|
11
|
+
//# sourceMappingURL=ohlcvInterval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlcvInterval.d.ts","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAoCtD,cAAc;AACd,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,MAU9C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,KACf,aAAa,GAAG,SAUlB,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { PerpsError } from '@lifi/perps-sdk';
|
|
2
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
3
|
+
/**
|
|
4
|
+
* Map our `OhlcvInterval` literal to Ondo's kline `resolution` enum.
|
|
5
|
+
*
|
|
6
|
+
* Ondo exposes only the timeframes listed below. SDK intervals without a
|
|
7
|
+
* direct match (3m, 2h, 8h, 12h, 3d) raise a validation error rather than
|
|
8
|
+
* silently rounding — the caller picks a supported timeframe.
|
|
9
|
+
*/
|
|
10
|
+
const ONDO_SUPPORTED_INTERVALS = {
|
|
11
|
+
'1m': '1',
|
|
12
|
+
'5m': '5',
|
|
13
|
+
'15m': '15',
|
|
14
|
+
'30m': '30',
|
|
15
|
+
'1h': '1H',
|
|
16
|
+
'4h': '4H',
|
|
17
|
+
'1d': '1D',
|
|
18
|
+
'1w': '1W',
|
|
19
|
+
'1M': '1M',
|
|
20
|
+
};
|
|
21
|
+
const INTERVAL_SECONDS = {
|
|
22
|
+
60: '1m',
|
|
23
|
+
300: '5m',
|
|
24
|
+
900: '15m',
|
|
25
|
+
1800: '30m',
|
|
26
|
+
3600: '1h',
|
|
27
|
+
14400: '4h',
|
|
28
|
+
86400: '1d',
|
|
29
|
+
604800: '1w',
|
|
30
|
+
};
|
|
31
|
+
const MONTH_MIN_SECS = 28 * 86400;
|
|
32
|
+
const MONTH_MAX_SECS = 31 * 86400;
|
|
33
|
+
/** @public */
|
|
34
|
+
export const mapInterval = (interval) => {
|
|
35
|
+
const resolution = ONDO_SUPPORTED_INTERVALS[interval];
|
|
36
|
+
if (!resolution) {
|
|
37
|
+
throw new PerpsError(PerpsErrorCode.ValidationError, `Ondo does not support OHLCV interval '${interval}'. ` +
|
|
38
|
+
`Supported: ${Object.keys(ONDO_SUPPORTED_INTERVALS).join(', ')}.`);
|
|
39
|
+
}
|
|
40
|
+
return resolution;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Recover the SDK interval from a kline frame's bar span in seconds. Ondo's
|
|
44
|
+
* kline updates carry no resolution field — only the interval start/end —
|
|
45
|
+
* so the span is the only way to route a frame to its subscription.
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
export const intervalFromBarSpan = (spanSecs) => {
|
|
49
|
+
const fixed = INTERVAL_SECONDS[spanSecs];
|
|
50
|
+
if (fixed !== undefined) {
|
|
51
|
+
return fixed;
|
|
52
|
+
}
|
|
53
|
+
// Monthly bars span a calendar month, so their second-count varies by month.
|
|
54
|
+
if (spanSecs >= MONTH_MIN_SECS && spanSecs <= MONTH_MAX_SECS) {
|
|
55
|
+
return '1M';
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=ohlcvInterval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlcvInterval.js","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,wBAAwB,GAA2B;IACvD,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAA;AAED,MAAM,gBAAgB,GAAkC;IACtD,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;CACb,CAAA;AAED,MAAM,cAAc,GAAG,EAAE,GAAG,KAAK,CAAA;AACjC,MAAM,cAAc,GAAG,EAAE,GAAG,KAAK,CAAA;AAEjC,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAU,EAAE;IACtD,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,yCAAyC,QAAQ,KAAK;YACpD,cAAc,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpE,CAAA;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,QAAgB,EACW,EAAE;IAC7B,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,6EAA6E;IAC7E,IAAI,QAAQ,IAAI,cAAc,IAAI,QAAQ,IAAI,cAAc,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ondoAsset.d.ts","sourceRoot":"","sources":["../../../src/utils/ondoAsset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C,cAAc;AACd,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,EAAE,eAAe,MAAM,KAAG,KAK5D,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ondoAsset.js","sourceRoot":"","sources":["../../../src/utils/ondoAsset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD,cAAc;AACd,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAE,aAAqB,EAAS,EAAE,CAAC,CAAC;IACtE,UAAU,EAAE,iBAAiB;IAC7B,EAAE;IACF,aAAa;IACb,OAAO,EAAE,EAAE;CACZ,CAAC,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ondo order size and price formatting for exchange submission.
|
|
3
|
+
*
|
|
4
|
+
* Ondo's tick and lot grids are exact contract increments (`quoteIncrement` /
|
|
5
|
+
* `baseIncrement`) that need not be powers of ten. When the generic
|
|
6
|
+
* {@link Market} carries the raw increment (`priceIncrement` / `sizeIncrement`)
|
|
7
|
+
* these helpers snap onto that grid; otherwise they fall back to the
|
|
8
|
+
* power-of-ten grid implied by `priceDecimals` / `szDecimals`. Prices round
|
|
9
|
+
* half-up to the nearest tick; sizes truncate toward zero to the lot.
|
|
10
|
+
*/
|
|
11
|
+
import { type Market } from '@lifi/perps-types';
|
|
12
|
+
/**
|
|
13
|
+
* Format a price onto an Ondo market's tick grid: snapped half-up to the
|
|
14
|
+
* nearest `priceIncrement` (or the grid implied by `priceDecimals`), trailing
|
|
15
|
+
* zeros stripped.
|
|
16
|
+
*
|
|
17
|
+
* @throws {PerpsError} `ValidationError` when the market carries neither
|
|
18
|
+
* `priceIncrement` nor `priceDecimals` — without the venue's tick grid no
|
|
19
|
+
* correct price can be produced.
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatOrderPrice(market: Market, price: number): string;
|
|
23
|
+
/**
|
|
24
|
+
* Format a size onto an Ondo market's lot grid: truncated toward zero (never
|
|
25
|
+
* rounded up, so the size cannot exceed the user's balance) to the market's
|
|
26
|
+
* `sizeIncrement` (or the grid implied by `szDecimals`), trailing zeros
|
|
27
|
+
* stripped.
|
|
28
|
+
*
|
|
29
|
+
* @param size - Size in base-asset units as a non-negative magnitude.
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatOrderSize(market: Market, size: number): string;
|
|
33
|
+
//# sourceMappingURL=orderFormatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,KAAK,MAAM,EAAkB,MAAM,mBAAmB,CAAA;AAmB/D;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAUpE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ondo order size and price formatting for exchange submission.
|
|
3
|
+
*
|
|
4
|
+
* Ondo's tick and lot grids are exact contract increments (`quoteIncrement` /
|
|
5
|
+
* `baseIncrement`) that need not be powers of ten. When the generic
|
|
6
|
+
* {@link Market} carries the raw increment (`priceIncrement` / `sizeIncrement`)
|
|
7
|
+
* these helpers snap onto that grid; otherwise they fall back to the
|
|
8
|
+
* power-of-ten grid implied by `priceDecimals` / `szDecimals`. Prices round
|
|
9
|
+
* half-up to the nearest tick; sizes truncate toward zero to the lot.
|
|
10
|
+
*/
|
|
11
|
+
import { PerpsError } from '@lifi/perps-sdk';
|
|
12
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
13
|
+
import Big from 'big.js';
|
|
14
|
+
const powerOfTenIncrement = (decimals) => new Big(`1e-${decimals}`);
|
|
15
|
+
const priceGrid = (market) => {
|
|
16
|
+
if (market.priceIncrement !== undefined) {
|
|
17
|
+
return new Big(market.priceIncrement);
|
|
18
|
+
}
|
|
19
|
+
if (market.priceDecimals !== undefined) {
|
|
20
|
+
return powerOfTenIncrement(market.priceDecimals);
|
|
21
|
+
}
|
|
22
|
+
throw new PerpsError(PerpsErrorCode.ValidationError, `Market '${market.id}' carries no price grid; Ondo order prices cannot ` +
|
|
23
|
+
`be formatted without the market's tick increment.`);
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Format a price onto an Ondo market's tick grid: snapped half-up to the
|
|
27
|
+
* nearest `priceIncrement` (or the grid implied by `priceDecimals`), trailing
|
|
28
|
+
* zeros stripped.
|
|
29
|
+
*
|
|
30
|
+
* @throws {PerpsError} `ValidationError` when the market carries neither
|
|
31
|
+
* `priceIncrement` nor `priceDecimals` — without the venue's tick grid no
|
|
32
|
+
* correct price can be produced.
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export function formatOrderPrice(market, price) {
|
|
36
|
+
const increment = priceGrid(market);
|
|
37
|
+
const snapped = new Big(price)
|
|
38
|
+
.div(increment)
|
|
39
|
+
.round(0, Big.roundHalfUp)
|
|
40
|
+
.times(increment);
|
|
41
|
+
return snapped.eq(0) ? '0' : snapped.toFixed();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Format a size onto an Ondo market's lot grid: truncated toward zero (never
|
|
45
|
+
* rounded up, so the size cannot exceed the user's balance) to the market's
|
|
46
|
+
* `sizeIncrement` (or the grid implied by `szDecimals`), trailing zeros
|
|
47
|
+
* stripped.
|
|
48
|
+
*
|
|
49
|
+
* @param size - Size in base-asset units as a non-negative magnitude.
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
export function formatOrderSize(market, size) {
|
|
53
|
+
const increment = market.sizeIncrement !== undefined
|
|
54
|
+
? new Big(market.sizeIncrement)
|
|
55
|
+
: powerOfTenIncrement(market.szDecimals);
|
|
56
|
+
const snapped = new Big(size)
|
|
57
|
+
.div(increment)
|
|
58
|
+
.round(0, Big.roundDown)
|
|
59
|
+
.times(increment);
|
|
60
|
+
return snapped.eq(0) ? '0' : snapped.toFixed();
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=orderFormatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAe,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAO,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAA;AAEhF,MAAM,SAAS,GAAG,CAAC,MAAc,EAAO,EAAE;IACxC,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,mBAAmB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,WAAW,MAAM,CAAC,EAAE,oDAAoD;QACtE,mDAAmD,CACtD,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,KAAa;IAC5D,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;SAC3B,GAAG,CAAC,SAAS,CAAC;SACd,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;SACzB,KAAK,CAAC,SAAS,CAAC,CAAA;IACnB,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,IAAY;IAC1D,MAAM,SAAS,GACb,MAAM,CAAC,aAAa,KAAK,SAAS;QAChC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;QAC/B,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;SAC1B,GAAG,CAAC,SAAS,CAAC;SACd,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC;SACvB,KAAK,CAAC,SAAS,CAAC,CAAA;IACnB,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;AAChD,CAAC"}
|