@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.
Files changed (280) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +38 -0
  3. package/dist/cjs/OndoProvider.d.ts +8 -0
  4. package/dist/cjs/OndoProvider.d.ts.map +1 -0
  5. package/dist/cjs/OndoProvider.js +338 -0
  6. package/dist/cjs/OndoProvider.js.map +1 -0
  7. package/dist/cjs/accountConfig.d.ts +3 -0
  8. package/dist/cjs/accountConfig.d.ts.map +1 -0
  9. package/dist/cjs/accountConfig.js +59 -0
  10. package/dist/cjs/accountConfig.js.map +1 -0
  11. package/dist/cjs/accountSummary.d.ts +3 -0
  12. package/dist/cjs/accountSummary.d.ts.map +1 -0
  13. package/dist/cjs/accountSummary.js +8 -0
  14. package/dist/cjs/accountSummary.js.map +1 -0
  15. package/dist/cjs/auth/OndoTokenStore.d.ts +13 -0
  16. package/dist/cjs/auth/OndoTokenStore.d.ts.map +1 -0
  17. package/dist/cjs/auth/OndoTokenStore.js +53 -0
  18. package/dist/cjs/auth/OndoTokenStore.js.map +1 -0
  19. package/dist/cjs/auth/completeSiweLogin.d.ts +13 -0
  20. package/dist/cjs/auth/completeSiweLogin.d.ts.map +1 -0
  21. package/dist/cjs/auth/completeSiweLogin.js +15 -0
  22. package/dist/cjs/auth/completeSiweLogin.js.map +1 -0
  23. package/dist/cjs/auth/index.d.ts +4 -0
  24. package/dist/cjs/auth/index.d.ts.map +1 -0
  25. package/dist/cjs/auth/index.js +11 -0
  26. package/dist/cjs/auth/index.js.map +1 -0
  27. package/dist/cjs/auth/signActions.d.ts +13 -0
  28. package/dist/cjs/auth/signActions.d.ts.map +1 -0
  29. package/dist/cjs/auth/signActions.js +86 -0
  30. package/dist/cjs/auth/signActions.js.map +1 -0
  31. package/dist/cjs/constants.d.ts +9 -0
  32. package/dist/cjs/constants.d.ts.map +1 -0
  33. package/dist/cjs/constants.js +12 -0
  34. package/dist/cjs/constants.js.map +1 -0
  35. package/dist/cjs/index.d.ts +9 -0
  36. package/dist/cjs/index.d.ts.map +1 -0
  37. package/dist/cjs/index.js +37 -0
  38. package/dist/cjs/index.js.map +1 -0
  39. package/dist/cjs/package.json +1 -0
  40. package/dist/cjs/types/auth.d.ts +16 -0
  41. package/dist/cjs/types/auth.d.ts.map +1 -0
  42. package/dist/cjs/types/auth.js +3 -0
  43. package/dist/cjs/types/auth.js.map +1 -0
  44. package/dist/cjs/types/index.d.ts +4 -0
  45. package/dist/cjs/types/index.d.ts.map +1 -0
  46. package/dist/cjs/types/index.js +3 -0
  47. package/dist/cjs/types/index.js.map +1 -0
  48. package/dist/cjs/types/wire.d.ts +154 -0
  49. package/dist/cjs/types/wire.d.ts.map +1 -0
  50. package/dist/cjs/types/wire.js +3 -0
  51. package/dist/cjs/types/wire.js.map +1 -0
  52. package/dist/cjs/types/ws.d.ts +92 -0
  53. package/dist/cjs/types/ws.d.ts.map +1 -0
  54. package/dist/cjs/types/ws.js +3 -0
  55. package/dist/cjs/types/ws.js.map +1 -0
  56. package/dist/cjs/utils/activityCursor.d.ts +9 -0
  57. package/dist/cjs/utils/activityCursor.d.ts.map +1 -0
  58. package/dist/cjs/utils/activityCursor.js +79 -0
  59. package/dist/cjs/utils/activityCursor.js.map +1 -0
  60. package/dist/cjs/utils/apiClient.d.ts +43 -0
  61. package/dist/cjs/utils/apiClient.d.ts.map +1 -0
  62. package/dist/cjs/utils/apiClient.js +134 -0
  63. package/dist/cjs/utils/apiClient.js.map +1 -0
  64. package/dist/cjs/utils/index.d.ts +11 -0
  65. package/dist/cjs/utils/index.d.ts.map +1 -0
  66. package/dist/cjs/utils/index.js +39 -0
  67. package/dist/cjs/utils/index.js.map +1 -0
  68. package/dist/cjs/utils/liquidation.d.ts +4 -0
  69. package/dist/cjs/utils/liquidation.d.ts.map +1 -0
  70. package/dist/cjs/utils/liquidation.js +16 -0
  71. package/dist/cjs/utils/liquidation.js.map +1 -0
  72. package/dist/cjs/utils/mapActivity.d.ts +5 -0
  73. package/dist/cjs/utils/mapActivity.d.ts.map +1 -0
  74. package/dist/cjs/utils/mapActivity.js +34 -0
  75. package/dist/cjs/utils/mapActivity.js.map +1 -0
  76. package/dist/cjs/utils/mapFill.d.ts +4 -0
  77. package/dist/cjs/utils/mapFill.d.ts.map +1 -0
  78. package/dist/cjs/utils/mapFill.js +36 -0
  79. package/dist/cjs/utils/mapFill.js.map +1 -0
  80. package/dist/cjs/utils/mapOrder.d.ts +16 -0
  81. package/dist/cjs/utils/mapOrder.d.ts.map +1 -0
  82. package/dist/cjs/utils/mapOrder.js +135 -0
  83. package/dist/cjs/utils/mapOrder.js.map +1 -0
  84. package/dist/cjs/utils/mapPosition.d.ts +5 -0
  85. package/dist/cjs/utils/mapPosition.d.ts.map +1 -0
  86. package/dist/cjs/utils/mapPosition.js +26 -0
  87. package/dist/cjs/utils/mapPosition.js.map +1 -0
  88. package/dist/cjs/utils/ohlcvInterval.d.ts +4 -0
  89. package/dist/cjs/utils/ohlcvInterval.d.ts.map +1 -0
  90. package/dist/cjs/utils/ohlcvInterval.js +49 -0
  91. package/dist/cjs/utils/ohlcvInterval.js.map +1 -0
  92. package/dist/cjs/utils/ondoAsset.d.ts +3 -0
  93. package/dist/cjs/utils/ondoAsset.d.ts.map +1 -0
  94. package/dist/cjs/utils/ondoAsset.js +12 -0
  95. package/dist/cjs/utils/ondoAsset.js.map +1 -0
  96. package/dist/cjs/utils/orderFormatting.d.ts +4 -0
  97. package/dist/cjs/utils/orderFormatting.d.ts.map +1 -0
  98. package/dist/cjs/utils/orderFormatting.js +40 -0
  99. package/dist/cjs/utils/orderFormatting.js.map +1 -0
  100. package/dist/cjs/websocket/OndoWsProvider.d.ts +56 -0
  101. package/dist/cjs/websocket/OndoWsProvider.d.ts.map +1 -0
  102. package/dist/cjs/websocket/OndoWsProvider.js +515 -0
  103. package/dist/cjs/websocket/OndoWsProvider.js.map +1 -0
  104. package/dist/esm/OndoProvider.d.ts +39 -0
  105. package/dist/esm/OndoProvider.d.ts.map +1 -0
  106. package/dist/esm/OndoProvider.js +366 -0
  107. package/dist/esm/OndoProvider.js.map +1 -0
  108. package/dist/esm/accountConfig.d.ts +13 -0
  109. package/dist/esm/accountConfig.d.ts.map +1 -0
  110. package/dist/esm/accountConfig.js +77 -0
  111. package/dist/esm/accountConfig.js.map +1 -0
  112. package/dist/esm/accountSummary.d.ts +12 -0
  113. package/dist/esm/accountSummary.d.ts.map +1 -0
  114. package/dist/esm/accountSummary.js +14 -0
  115. package/dist/esm/accountSummary.js.map +1 -0
  116. package/dist/esm/auth/OndoTokenStore.d.ts +20 -0
  117. package/dist/esm/auth/OndoTokenStore.d.ts.map +1 -0
  118. package/dist/esm/auth/OndoTokenStore.js +61 -0
  119. package/dist/esm/auth/OndoTokenStore.js.map +1 -0
  120. package/dist/esm/auth/completeSiweLogin.d.ts +28 -0
  121. package/dist/esm/auth/completeSiweLogin.d.ts.map +1 -0
  122. package/dist/esm/auth/completeSiweLogin.js +21 -0
  123. package/dist/esm/auth/completeSiweLogin.js.map +1 -0
  124. package/dist/esm/auth/index.d.ts +4 -0
  125. package/dist/esm/auth/index.d.ts.map +1 -0
  126. package/dist/esm/auth/index.js +5 -0
  127. package/dist/esm/auth/index.js.map +1 -0
  128. package/dist/esm/auth/signActions.d.ts +35 -0
  129. package/dist/esm/auth/signActions.d.ts.map +1 -0
  130. package/dist/esm/auth/signActions.js +103 -0
  131. package/dist/esm/auth/signActions.js.map +1 -0
  132. package/dist/esm/constants.d.ts +35 -0
  133. package/dist/esm/constants.d.ts.map +1 -0
  134. package/dist/esm/constants.js +35 -0
  135. package/dist/esm/constants.js.map +1 -0
  136. package/dist/esm/index.d.ts +19 -0
  137. package/dist/esm/index.d.ts.map +1 -0
  138. package/dist/esm/index.js +21 -0
  139. package/dist/esm/index.js.map +1 -0
  140. package/dist/esm/package.json +1 -0
  141. package/dist/esm/types/auth.d.ts +32 -0
  142. package/dist/esm/types/auth.d.ts.map +1 -0
  143. package/dist/esm/types/auth.js +2 -0
  144. package/dist/esm/types/auth.js.map +1 -0
  145. package/dist/esm/types/index.d.ts +4 -0
  146. package/dist/esm/types/index.d.ts.map +1 -0
  147. package/dist/esm/types/index.js +3 -0
  148. package/dist/esm/types/index.js.map +1 -0
  149. package/dist/esm/types/wire.d.ts +195 -0
  150. package/dist/esm/types/wire.d.ts.map +1 -0
  151. package/dist/esm/types/wire.js +7 -0
  152. package/dist/esm/types/wire.js.map +1 -0
  153. package/dist/esm/types/ws.d.ts +108 -0
  154. package/dist/esm/types/ws.d.ts.map +1 -0
  155. package/dist/esm/types/ws.js +7 -0
  156. package/dist/esm/types/ws.js.map +1 -0
  157. package/dist/esm/utils/activityCursor.d.ts +47 -0
  158. package/dist/esm/utils/activityCursor.d.ts.map +1 -0
  159. package/dist/esm/utils/activityCursor.js +93 -0
  160. package/dist/esm/utils/activityCursor.js.map +1 -0
  161. package/dist/esm/utils/apiClient.d.ts +90 -0
  162. package/dist/esm/utils/apiClient.d.ts.map +1 -0
  163. package/dist/esm/utils/apiClient.js +169 -0
  164. package/dist/esm/utils/apiClient.js.map +1 -0
  165. package/dist/esm/utils/index.d.ts +11 -0
  166. package/dist/esm/utils/index.d.ts.map +1 -0
  167. package/dist/esm/utils/index.js +12 -0
  168. package/dist/esm/utils/index.js.map +1 -0
  169. package/dist/esm/utils/liquidation.d.ts +20 -0
  170. package/dist/esm/utils/liquidation.d.ts.map +1 -0
  171. package/dist/esm/utils/liquidation.js +29 -0
  172. package/dist/esm/utils/liquidation.js.map +1 -0
  173. package/dist/esm/utils/mapActivity.d.ts +21 -0
  174. package/dist/esm/utils/mapActivity.d.ts.map +1 -0
  175. package/dist/esm/utils/mapActivity.js +45 -0
  176. package/dist/esm/utils/mapActivity.js.map +1 -0
  177. package/dist/esm/utils/mapFill.d.ts +12 -0
  178. package/dist/esm/utils/mapFill.d.ts.map +1 -0
  179. package/dist/esm/utils/mapFill.js +37 -0
  180. package/dist/esm/utils/mapFill.js.map +1 -0
  181. package/dist/esm/utils/mapOrder.d.ts +50 -0
  182. package/dist/esm/utils/mapOrder.d.ts.map +1 -0
  183. package/dist/esm/utils/mapOrder.js +155 -0
  184. package/dist/esm/utils/mapOrder.js.map +1 -0
  185. package/dist/esm/utils/mapPosition.d.ts +19 -0
  186. package/dist/esm/utils/mapPosition.d.ts.map +1 -0
  187. package/dist/esm/utils/mapPosition.js +32 -0
  188. package/dist/esm/utils/mapPosition.js.map +1 -0
  189. package/dist/esm/utils/ohlcvInterval.d.ts +11 -0
  190. package/dist/esm/utils/ohlcvInterval.d.ts.map +1 -0
  191. package/dist/esm/utils/ohlcvInterval.js +59 -0
  192. package/dist/esm/utils/ohlcvInterval.js.map +1 -0
  193. package/dist/esm/utils/ondoAsset.d.ts +4 -0
  194. package/dist/esm/utils/ondoAsset.d.ts.map +1 -0
  195. package/dist/esm/utils/ondoAsset.js +9 -0
  196. package/dist/esm/utils/ondoAsset.js.map +1 -0
  197. package/dist/esm/utils/orderFormatting.d.ts +33 -0
  198. package/dist/esm/utils/orderFormatting.d.ts.map +1 -0
  199. package/dist/esm/utils/orderFormatting.js +62 -0
  200. package/dist/esm/utils/orderFormatting.js.map +1 -0
  201. package/dist/esm/websocket/OndoWsProvider.d.ts +122 -0
  202. package/dist/esm/websocket/OndoWsProvider.d.ts.map +1 -0
  203. package/dist/esm/websocket/OndoWsProvider.js +591 -0
  204. package/dist/esm/websocket/OndoWsProvider.js.map +1 -0
  205. package/dist/types/OndoProvider.d.ts +39 -0
  206. package/dist/types/OndoProvider.d.ts.map +1 -0
  207. package/dist/types/accountConfig.d.ts +13 -0
  208. package/dist/types/accountConfig.d.ts.map +1 -0
  209. package/dist/types/accountSummary.d.ts +12 -0
  210. package/dist/types/accountSummary.d.ts.map +1 -0
  211. package/dist/types/auth/OndoTokenStore.d.ts +20 -0
  212. package/dist/types/auth/OndoTokenStore.d.ts.map +1 -0
  213. package/dist/types/auth/completeSiweLogin.d.ts +28 -0
  214. package/dist/types/auth/completeSiweLogin.d.ts.map +1 -0
  215. package/dist/types/auth/index.d.ts +4 -0
  216. package/dist/types/auth/index.d.ts.map +1 -0
  217. package/dist/types/auth/signActions.d.ts +35 -0
  218. package/dist/types/auth/signActions.d.ts.map +1 -0
  219. package/dist/types/constants.d.ts +35 -0
  220. package/dist/types/constants.d.ts.map +1 -0
  221. package/dist/types/index.d.ts +19 -0
  222. package/dist/types/index.d.ts.map +1 -0
  223. package/dist/types/types/auth.d.ts +32 -0
  224. package/dist/types/types/auth.d.ts.map +1 -0
  225. package/dist/types/types/index.d.ts +4 -0
  226. package/dist/types/types/index.d.ts.map +1 -0
  227. package/dist/types/types/wire.d.ts +195 -0
  228. package/dist/types/types/wire.d.ts.map +1 -0
  229. package/dist/types/types/ws.d.ts +108 -0
  230. package/dist/types/types/ws.d.ts.map +1 -0
  231. package/dist/types/utils/activityCursor.d.ts +47 -0
  232. package/dist/types/utils/activityCursor.d.ts.map +1 -0
  233. package/dist/types/utils/apiClient.d.ts +90 -0
  234. package/dist/types/utils/apiClient.d.ts.map +1 -0
  235. package/dist/types/utils/index.d.ts +11 -0
  236. package/dist/types/utils/index.d.ts.map +1 -0
  237. package/dist/types/utils/liquidation.d.ts +20 -0
  238. package/dist/types/utils/liquidation.d.ts.map +1 -0
  239. package/dist/types/utils/mapActivity.d.ts +21 -0
  240. package/dist/types/utils/mapActivity.d.ts.map +1 -0
  241. package/dist/types/utils/mapFill.d.ts +12 -0
  242. package/dist/types/utils/mapFill.d.ts.map +1 -0
  243. package/dist/types/utils/mapOrder.d.ts +50 -0
  244. package/dist/types/utils/mapOrder.d.ts.map +1 -0
  245. package/dist/types/utils/mapPosition.d.ts +19 -0
  246. package/dist/types/utils/mapPosition.d.ts.map +1 -0
  247. package/dist/types/utils/ohlcvInterval.d.ts +11 -0
  248. package/dist/types/utils/ohlcvInterval.d.ts.map +1 -0
  249. package/dist/types/utils/ondoAsset.d.ts +4 -0
  250. package/dist/types/utils/ondoAsset.d.ts.map +1 -0
  251. package/dist/types/utils/orderFormatting.d.ts +33 -0
  252. package/dist/types/utils/orderFormatting.d.ts.map +1 -0
  253. package/dist/types/websocket/OndoWsProvider.d.ts +122 -0
  254. package/dist/types/websocket/OndoWsProvider.d.ts.map +1 -0
  255. package/package.json +64 -0
  256. package/src/OndoProvider.ts +635 -0
  257. package/src/accountConfig.ts +105 -0
  258. package/src/accountSummary.ts +22 -0
  259. package/src/auth/OndoTokenStore.ts +83 -0
  260. package/src/auth/completeSiweLogin.ts +43 -0
  261. package/src/auth/index.ts +12 -0
  262. package/src/auth/signActions.ts +160 -0
  263. package/src/constants.ts +38 -0
  264. package/src/index.ts +36 -0
  265. package/src/types/auth.ts +32 -0
  266. package/src/types/index.ts +5 -0
  267. package/src/types/wire.ts +228 -0
  268. package/src/types/ws.ts +79 -0
  269. package/src/utils/activityCursor.ts +140 -0
  270. package/src/utils/apiClient.ts +257 -0
  271. package/src/utils/index.ts +35 -0
  272. package/src/utils/liquidation.ts +37 -0
  273. package/src/utils/mapActivity.ts +61 -0
  274. package/src/utils/mapFill.ts +47 -0
  275. package/src/utils/mapOrder.ts +201 -0
  276. package/src/utils/mapPosition.ts +44 -0
  277. package/src/utils/ohlcvInterval.ts +69 -0
  278. package/src/utils/ondoAsset.ts +10 -0
  279. package/src/utils/orderFormatting.ts +70 -0
  280. 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,4 @@
1
+ import type { Asset } from '@lifi/perps-types';
2
+ /** @public */
3
+ export declare const ondoAsset: (id: string, displaySymbol: string) => Asset;
4
+ //# sourceMappingURL=ondoAsset.d.ts.map
@@ -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,9 @@
1
+ import { ONDO_PROVIDER_KEY } from '../constants.js';
2
+ /** @public */
3
+ export const ondoAsset = (id, displaySymbol) => ({
4
+ providerId: ONDO_PROVIDER_KEY,
5
+ id,
6
+ displaySymbol,
7
+ logoURI: '',
8
+ });
9
+ //# sourceMappingURL=ondoAsset.js.map
@@ -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"}