@lifi/perps-sdk-provider-ondo 21.0.0 → 22.0.1

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 (55) hide show
  1. package/README.md +16 -1
  2. package/dist/cjs/OndoProvider.d.ts.map +1 -1
  3. package/dist/cjs/OndoProvider.js +31 -7
  4. package/dist/cjs/OndoProvider.js.map +1 -1
  5. package/dist/cjs/utils/mapFill.d.ts.map +1 -1
  6. package/dist/cjs/utils/mapFill.js +4 -5
  7. package/dist/cjs/utils/mapFill.js.map +1 -1
  8. package/dist/cjs/utils/mapOrder.d.ts.map +1 -1
  9. package/dist/cjs/utils/mapOrder.js +8 -10
  10. package/dist/cjs/utils/mapOrder.js.map +1 -1
  11. package/dist/cjs/utils/mapPosition.d.ts.map +1 -1
  12. package/dist/cjs/utils/mapPosition.js +2 -5
  13. package/dist/cjs/utils/mapPosition.js.map +1 -1
  14. package/dist/cjs/utils/withdrawableBalances.d.ts.map +1 -1
  15. package/dist/cjs/utils/withdrawableBalances.js +1 -0
  16. package/dist/cjs/utils/withdrawableBalances.js.map +1 -1
  17. package/dist/cjs/websocket/OndoWsProvider.d.ts +6 -0
  18. package/dist/cjs/websocket/OndoWsProvider.d.ts.map +1 -1
  19. package/dist/cjs/websocket/OndoWsProvider.js +125 -33
  20. package/dist/cjs/websocket/OndoWsProvider.js.map +1 -1
  21. package/dist/esm/OndoProvider.d.ts.map +1 -1
  22. package/dist/esm/OndoProvider.js +31 -9
  23. package/dist/esm/OndoProvider.js.map +1 -1
  24. package/dist/esm/utils/mapFill.d.ts.map +1 -1
  25. package/dist/esm/utils/mapFill.js +4 -2
  26. package/dist/esm/utils/mapFill.js.map +1 -1
  27. package/dist/esm/utils/mapOrder.d.ts.map +1 -1
  28. package/dist/esm/utils/mapOrder.js +8 -7
  29. package/dist/esm/utils/mapOrder.js.map +1 -1
  30. package/dist/esm/utils/mapPosition.d.ts.map +1 -1
  31. package/dist/esm/utils/mapPosition.js +2 -2
  32. package/dist/esm/utils/mapPosition.js.map +1 -1
  33. package/dist/esm/utils/withdrawableBalances.d.ts +3 -2
  34. package/dist/esm/utils/withdrawableBalances.d.ts.map +1 -1
  35. package/dist/esm/utils/withdrawableBalances.js +4 -2
  36. package/dist/esm/utils/withdrawableBalances.js.map +1 -1
  37. package/dist/esm/websocket/OndoWsProvider.d.ts +8 -7
  38. package/dist/esm/websocket/OndoWsProvider.d.ts.map +1 -1
  39. package/dist/esm/websocket/OndoWsProvider.js +128 -45
  40. package/dist/esm/websocket/OndoWsProvider.js.map +1 -1
  41. package/dist/types/OndoProvider.d.ts.map +1 -1
  42. package/dist/types/utils/mapFill.d.ts.map +1 -1
  43. package/dist/types/utils/mapOrder.d.ts.map +1 -1
  44. package/dist/types/utils/mapPosition.d.ts.map +1 -1
  45. package/dist/types/utils/withdrawableBalances.d.ts +3 -2
  46. package/dist/types/utils/withdrawableBalances.d.ts.map +1 -1
  47. package/dist/types/websocket/OndoWsProvider.d.ts +8 -7
  48. package/dist/types/websocket/OndoWsProvider.d.ts.map +1 -1
  49. package/package.json +3 -3
  50. package/src/OndoProvider.ts +68 -14
  51. package/src/utils/mapFill.ts +4 -2
  52. package/src/utils/mapOrder.ts +8 -7
  53. package/src/utils/mapPosition.ts +2 -2
  54. package/src/utils/withdrawableBalances.ts +4 -2
  55. package/src/websocket/OndoWsProvider.ts +157 -47
@@ -1 +1 @@
1
- {"version":3,"file":"OndoProvider.d.ts","sourceRoot":"","sources":["../../src/OndoProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,mBAAmB,EAqBxB,KAAK,cAAc,EAKpB,MAAM,iBAAiB,CAAA;AA6GxB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,GACvB,UAAS,mBAAwB,KAChC,mBAu8BF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,aA/8BN,mBAAmB,KAC3B,mBA88B6B,CAAA"}
1
+ {"version":3,"file":"OndoProvider.d.ts","sourceRoot":"","sources":["../../src/OndoProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAaL,KAAK,mBAAmB,EAsBxB,KAAK,cAAc,EAKpB,MAAM,iBAAiB,CAAA;AA4GxB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,GACvB,UAAS,mBAAwB,KAChC,mBA2/BF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,aAngCN,mBAAmB,KAC3B,mBAkgC6B,CAAA"}
@@ -1 +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;AAG5D,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,kBAAkB,CAAA;AAYnE;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,QAAQ,EAAE,QAAQ,aAAa,KAAG,IAsB9D,CAAA"}
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;AAE5D,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,kBAAkB,CAAA;AAanE;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,QAAQ,EAAE,QAAQ,aAAa,KAAG,IAwB9D,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,KAAK,EAGV,WAAW,EAIZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhE,+EAA+E;AAC/E,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,WAiB/C,CAAA;AAgCD,yEAAyE;AACzE,eAAO,MAAM,QAAQ,GACnB,OAAO,SAAS,GAAG,aAAa,EAChC,QAAQ,aAAa,EACrB,gBAAgB,MAAM,KACrB,KA0GF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,EAAE,EACjB,eAAe,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KAC3D;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CA0BzC,CAAA"}
1
+ {"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,KAAK,EAGV,WAAW,EAIZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGhE,+EAA+E;AAC/E,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,WAiB/C,CAAA;AAgCD,yEAAyE;AACzE,eAAO,MAAM,QAAQ,GACnB,OAAO,SAAS,GAAG,aAAa,EAChC,QAAQ,aAAa,EACrB,gBAAgB,MAAM,KACrB,KA2GF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,EAAE,EACjB,eAAe,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KAC3D;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CA0BzC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,KAAK,YAAY,EACjB,QAAQ,kBAAkB,KACzB,QAaD,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,YAAY,EAAE,EACzB,eAAe,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,KACpD,QAAQ,EAK6C,CAAA"}
1
+ {"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAErE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGpD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,KAAK,YAAY,EACjB,QAAQ,kBAAkB,KACzB,QAaD,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,YAAY,EAAE,EACzB,eAAe,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,KACpD,QAAQ,EAK6C,CAAA"}
@@ -8,8 +8,9 @@ import type { OndoBalanceSummary } from '../types/wire.js';
8
8
  *
9
9
  * @param assetId - `Asset.id` the row is keyed by.
10
10
  * @param withdrawalFeeUsd - The account's `withdrawalFeeUSD`. Ondo collateral
11
- * is USDC, so the USD fee is the row fee 1:1 in collateral units. Absent
12
- * leaves the row without a fee.
11
+ * is USDC, so the USD fee is the row fee 1:1 in collateral units. Ondo
12
+ * charges it on top of the requested amount. Absent leaves the row without a
13
+ * fee.
13
14
  * @public
14
15
  */
15
16
  export declare const ondoWithdrawableBalances: (assetId: string, balance: OndoBalanceSummary, withdrawalFeeUsd?: string) => ProviderWithdrawableBalance[];
@@ -1 +1 @@
1
- {"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAG1D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,MAAM,EACf,SAAS,kBAAkB,EAC3B,mBAAmB,MAAM,KACxB,2BAA2B,EAuB7B,CAAA"}
1
+ {"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAG1D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,MAAM,EACf,SAAS,kBAAkB,EAC3B,mBAAmB,MAAM,KACxB,2BAA2B,EAwB7B,CAAA"}
@@ -10,6 +10,7 @@ interface SubState {
10
10
  };
11
11
  needsAuth: boolean;
12
12
  address?: Address;
13
+ authGeneration?: number;
13
14
  }
14
15
  /**
15
16
  * Options for {@link ondoWsProvider} / {@link OndoWsProvider}.
@@ -52,6 +53,7 @@ export declare class OndoWsProvider extends WsProviderBase<SubState> {
52
53
  * positions frame, which is what moves them.
53
54
  */
54
55
  private accountSummary;
56
+ private accountSummaryGeneration;
55
57
  /**
56
58
  * Serializes the balance re-read: a single trade event emits a fills frame
57
59
  * and a positions frame together, and two concurrent REST reads can resolve
@@ -65,6 +67,9 @@ export declare class OndoWsProvider extends WsProviderBase<SubState> {
65
67
  /** The single address this connection's login is bound to. */
66
68
  private accountAddress;
67
69
  private loginPromise;
70
+ private authGeneration;
71
+ private authBindingRefs;
72
+ private closeGeneration;
68
73
  constructor(wsUrl?: string, providerKey?: string, options?: OndoWsProviderOptions, client?: PerpsSDKClient);
69
74
  subscribeQuote(params: ProviderGetQuoteParams, onQuote: QuoteListener): Promise<() => void>;
70
75
  protected toKey(sub: Subscription): string;
@@ -82,11 +87,7 @@ export declare class OndoWsProvider extends WsProviderBase<SubState> {
82
87
  * false — leaving the binding intact — while any is still live.
83
88
  */
84
89
  private releaseBindingIfIdle;
85
- /**
86
- * Forget the authenticated binding and cycle the connection. The venue
87
- * permits one login per socket, so a later subscribe for a different address
88
- * must authenticate on a fresh connection rather than re-login on this one.
89
- */
90
+ /** Release a channel's binding reservation, including one still opening. */
90
91
  private releaseBinding;
91
92
  /** Register a wire sub, ref-counting the shared authenticated channels. */
92
93
  private acquireWire;
@@ -118,6 +119,7 @@ export declare class OndoWsProvider extends WsProviderBase<SubState> {
118
119
  private seedAccountSummary;
119
120
  /** Re-read the venue balance moved by the frame and re-emit the summary. */
120
121
  private refreshAccountSummary;
122
+ private clearAccountSummary;
121
123
  private readBalance;
122
124
  /** Emit the current account summary from the venue balance figures. */
123
125
  private emitAccountSummary;
@@ -141,8 +143,7 @@ export declare class OndoWsProvider extends WsProviderBase<SubState> {
141
143
  *
142
144
  * Closes over the per-instance options (storage, apiUrl override) so
143
145
  * `PerpsWsClient` can call the returned factory with just
144
- * `({ provider, wsUrl, client })` at subscribe time. `markets` is unused —
145
- * Ondo advertises a single venue, no sub-DEX filtering.
146
+ * `({ provider, wsUrl, client })` at subscribe time.
146
147
  *
147
148
  * @public
148
149
  */
@@ -1 +1 @@
1
- {"version":3,"file":"OndoWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/OndoWsProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OndoWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/OndoWsProvider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk-provider-ondo",
3
- "version": "21.0.0",
3
+ "version": "22.0.1",
4
4
  "description": "Ondo Perps provider plugin for @lifi/perps-sdk",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
@@ -44,10 +44,10 @@
44
44
  "dependencies": {
45
45
  "big.js": "^7.0.1",
46
46
  "viem": "^2.55.18",
47
- "@lifi/perps-types": "^17.0.0"
47
+ "@lifi/perps-types": "^18.0.0"
48
48
  },
49
49
  "peerDependencies": {
50
- "@lifi/perps-sdk": "^19.0.0"
50
+ "@lifi/perps-sdk": "^20.1.0"
51
51
  },
52
52
  "publishConfig": {
53
53
  "access": "public"
@@ -8,6 +8,8 @@ import {
8
8
  getMarketRegistry,
9
9
  getProviders,
10
10
  localStorageAdapter,
11
+ maxOf,
12
+ minOf,
11
13
  PerpsError,
12
14
  type PerpsProviderPlugin,
13
15
  type PerpsSDKClient,
@@ -17,6 +19,7 @@ import {
17
19
  type ProviderGetAvailableToTradeParams,
18
20
  type ProviderGetDepositFlowParams,
19
21
  type ProviderGetFillsParams,
22
+ type ProviderGetMarketSettingsParams,
20
23
  type ProviderGetOrderParams,
21
24
  type ProviderGetOrdersParams,
22
25
  type ProviderGetPortfolioHistoryParams,
@@ -51,6 +54,7 @@ import type {
51
54
  FundingActivity,
52
55
  LiquidationActivity,
53
56
  MarketDisplay,
57
+ MarketSettings,
54
58
  OndoAccountConfig,
55
59
  Order,
56
60
  OrdersResponse,
@@ -64,8 +68,13 @@ import type {
64
68
  SigningMethod,
65
69
  WithdrawalActivity,
66
70
  } from '@lifi/perps-types'
67
- import { ActionType, ActivityType, PerpsErrorCode } from '@lifi/perps-types'
68
- import type Big from 'big.js'
71
+ import {
72
+ ActionType,
73
+ ActivityType,
74
+ MarginMode,
75
+ PerpsErrorCode,
76
+ } from '@lifi/perps-types'
77
+ import Big from 'big.js'
69
78
  import { type Address, getAddress } from 'viem'
70
79
  import { projectOndoConfigSettings } from './accountConfig.js'
71
80
  import { getAccountSummary } from './accountSummary.js'
@@ -137,13 +146,6 @@ import {
137
146
  type OrderSource,
138
147
  } from './utils/orderCursor.js'
139
148
 
140
- const transferableWithin = (venueFigure: Big, units: Big): string => {
141
- if (venueFigure.lt(0)) {
142
- return '0'
143
- }
144
- return (venueFigure.gt(units) ? units : venueFigure).toFixed()
145
- }
146
-
147
149
  /**
148
150
  * Construction options for the Ondo {@link PerpsProviderPlugin}.
149
151
  *
@@ -371,13 +373,16 @@ export const ondoProvider = (
371
373
  units: balance.walletBalance,
372
374
  valueUsd: balance.walletBalance,
373
375
  price: '1',
374
- transferable: transferableWithin(
375
- toWireBig(
376
- balance.withdrawableMargin,
377
- 'balance.withdrawableMargin'
376
+ transferable: minOf(
377
+ maxOf(
378
+ toWireBig(
379
+ balance.withdrawableMargin,
380
+ 'balance.withdrawableMargin'
381
+ ),
382
+ new Big(0)
378
383
  ),
379
384
  walletBalance
380
- ),
385
+ ).toFixed(),
381
386
  },
382
387
  ]
383
388
  : [],
@@ -436,6 +441,55 @@ export const ondoProvider = (
436
441
  )
437
442
  },
438
443
 
444
+ /** Ondo is cross-only, so the venue reports leverage alone. */
445
+ async getMarketSettings(
446
+ params: ProviderGetMarketSettingsParams,
447
+ opts?: SDKRequestOptions
448
+ ): Promise<MarketSettings> {
449
+ const { marketId, categoryId } = params.market
450
+ if (categoryId !== ONDO_PROVIDER_KEY) {
451
+ const error = new PerpsError(
452
+ PerpsErrorCode.ValidationError,
453
+ `Ondo market '${marketId}' in category '${categoryId}' is not a perps market`
454
+ )
455
+ error.tool = ONDO_PROVIDER_KEY
456
+ throw error
457
+ }
458
+ return withSession(
459
+ params.address,
460
+ () => {
461
+ throw new OndoSessionExpiredError(
462
+ `No valid Ondo session token stored for ${params.address}. Run the SIWE login first.`
463
+ )
464
+ },
465
+ async (token) => {
466
+ const leverages = await apiClient(opts).get<OndoLeverage[]>(
467
+ '/v1/perps/leverage',
468
+ { params: { market: marketId }, authToken: token.token }
469
+ )
470
+ const row = leverages.find((r) => r.market === marketId)
471
+ if (row === undefined) {
472
+ const error = new PerpsError(
473
+ PerpsErrorCode.SDKError,
474
+ `Ondo returned no leverage for market '${marketId}'`
475
+ )
476
+ error.tool = ONDO_PROVIDER_KEY
477
+ throw error
478
+ }
479
+ const leverage = toWireBig(row.leverage, 'leverage')
480
+ if (leverage.lte(0)) {
481
+ const error = new PerpsError(
482
+ PerpsErrorCode.SDKError,
483
+ `Ondo field \`leverage\` must be positive: '${row.leverage}'`
484
+ )
485
+ error.tool = ONDO_PROVIDER_KEY
486
+ throw error
487
+ }
488
+ return { marginMode: MarginMode.CROSS, leverage: leverage.toNumber() }
489
+ }
490
+ )
491
+ },
492
+
439
493
  async getAvailableToTrade(
440
494
  params: ProviderGetAvailableToTradeParams,
441
495
  opts?: SDKRequestOptions
@@ -1,7 +1,7 @@
1
1
  import type { Fill, MarketDisplay } from '@lifi/perps-types'
2
2
  import { FillClassification, LiquidityRole, OrderSide } from '@lifi/perps-types'
3
- import Big from 'big.js'
4
3
  import type { OndoFill, OndoFillDirection } from '../types/wire.js'
4
+ import { toWireBig } from './decimal.js'
5
5
 
6
6
  const DIRECTION_CLASSIFICATIONS: Record<OndoFillDirection, FillClassification> =
7
7
  {
@@ -32,7 +32,9 @@ export const mapFill = (fill: OndoFill, market: MarketDisplay): Fill => ({
32
32
  liquidity: fill.isMaker ? LiquidityRole.MAKER : LiquidityRole.TAKER,
33
33
  // Ondo charges the fill fee in the market's quote asset.
34
34
  fee: {
35
- amount: new Big(fill.fee).minus(fill.feeRebate ?? '0').toFixed(),
35
+ amount: toWireBig(fill.fee, 'fee')
36
+ .minus(toWireBig(fill.feeRebate ?? '0', 'feeRebate'))
37
+ .toFixed(),
36
38
  asset: market.quoteAsset.displaySymbol,
37
39
  },
38
40
  realizedPnl: fill.pnl,
@@ -13,8 +13,8 @@ import {
13
13
  PerpsErrorCode,
14
14
  TimeInForce,
15
15
  } from '@lifi/perps-types'
16
- import Big from 'big.js'
17
16
  import type { OndoOrder, OndoTwapOrder } from '../types/wire.js'
17
+ import { toWireBig } from './decimal.js'
18
18
 
19
19
  /** Map supported Ondo lifecycle states; unsupported states fail explicitly. */
20
20
  export const mapOrderStatus = (status: string): OrderStatus => {
@@ -73,7 +73,10 @@ export const mapOrder = (
73
73
  parentOrderId?: string
74
74
  ): Order => {
75
75
  const twap = 'twapId' in order
76
- const filled = new Big(order.filledSize)
76
+ const filled = toWireBig(order.filledSize, 'filledSize')
77
+ const totalSize = twap
78
+ ? toWireBig(order.totalSize, 'totalSize')
79
+ : toWireBig(order.size, 'size')
77
80
  const status = twap
78
81
  ? twapStatus(order.orderStatus)
79
82
  : mapOrderStatus(order.status)
@@ -88,10 +91,8 @@ export const mapOrder = (
88
91
  status === OrderStatus.OPEN && filled.gt(0)
89
92
  ? OrderStatus.PARTIALLY_FILLED
90
93
  : status,
91
- originalSize: new Big(twap ? order.totalSize : order.size).toFixed(),
92
- remainingSize: new Big(twap ? order.totalSize : order.size)
93
- .minus(filled)
94
- .toFixed(),
94
+ originalSize: totalSize.toFixed(),
95
+ remainingSize: totalSize.minus(filled).toFixed(),
95
96
  filledSize: order.filledSize,
96
97
  reduceOnly: order.reduceOnly ?? false,
97
98
  createdAt,
@@ -104,7 +105,7 @@ export const mapOrder = (
104
105
  ? {
105
106
  averagePrice: twap
106
107
  ? order.avgFilledPrice
107
- : new Big(order.filledCost).div(filled).toFixed(),
108
+ : toWireBig(order.filledCost, 'filledCost').div(filled).toFixed(),
108
109
  }
109
110
  : {}),
110
111
  }
@@ -1,7 +1,7 @@
1
1
  import type { PerpsMarketDisplay, Position } from '@lifi/perps-types'
2
2
  import { MarginMode, PositionSide } from '@lifi/perps-types'
3
- import Big from 'big.js'
4
3
  import type { OndoPosition } from '../types/wire.js'
4
+ import { toWireBig } from './decimal.js'
5
5
 
6
6
  /**
7
7
  * Map a raw Ondo position to the generic Position type. Ondo margin accounts
@@ -16,7 +16,7 @@ export const mapPosition = (
16
16
  ): Position => ({
17
17
  market,
18
18
  side: pos.direction === 'short' ? PositionSide.SHORT : PositionSide.LONG,
19
- size: new Big(pos.netQuantity).abs().toFixed(),
19
+ size: toWireBig(pos.netQuantity, 'netQuantity').abs().toFixed(),
20
20
  entryPrice: pos.averageEntryPrice,
21
21
  markPrice: pos.markPrice,
22
22
  liquidationPrice: pos.liquidationPrice,
@@ -10,8 +10,9 @@ import { toWireBig } from './decimal.js'
10
10
  *
11
11
  * @param assetId - `Asset.id` the row is keyed by.
12
12
  * @param withdrawalFeeUsd - The account's `withdrawalFeeUSD`. Ondo collateral
13
- * is USDC, so the USD fee is the row fee 1:1 in collateral units. Absent
14
- * leaves the row without a fee.
13
+ * is USDC, so the USD fee is the row fee 1:1 in collateral units. Ondo
14
+ * charges it on top of the requested amount. Absent leaves the row without a
15
+ * fee.
15
16
  * @public
16
17
  */
17
18
  export const ondoWithdrawableBalances = (
@@ -38,6 +39,7 @@ export const ondoWithdrawableBalances = (
38
39
  withdrawalFeeUsd,
39
40
  'account.withdrawalFeeUSD'
40
41
  ).toFixed(),
42
+ isFeeDeducted: false,
41
43
  }),
42
44
  },
43
45
  ]