Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
7d05430
docs(common-ts): add utils restructure design spec
ChesterSim Mar 25, 2026
74110d4
docs(common-ts): address spec review feedback
ChesterSim Mar 25, 2026
4a9698b
docs(common-ts): remove logger.browser.ts references from spec
ChesterSim Mar 26, 2026
f4c908c
docs(common-ts): add utils restructure implementation plan
ChesterSim Mar 26, 2026
e25e5ff
refactor(common-ts): create utils/core module with universal utilities
ChesterSim Mar 26, 2026
46b2f5a
refactor(common-ts): create utils/enum module
ChesterSim Mar 26, 2026
b5e741b
refactor(common-ts): create utils/strings module
ChesterSim Mar 26, 2026
8653605
refactor(common-ts): create utils/math module
ChesterSim Mar 26, 2026
2142c3f
refactor(common-ts): create utils/token module with deduplicated func…
ChesterSim Mar 26, 2026
ce1b6b4
refactor(common-ts): create utils/markets module
ChesterSim Mar 26, 2026
4c9033f
refactor(common-ts): create utils/trading module
ChesterSim Mar 26, 2026
b55d6b3
refactor(common-ts): create utils/positions module
ChesterSim Mar 26, 2026
ba24f7b
refactor(common-ts): create utils/accounts module, move settings to u…
ChesterSim Mar 26, 2026
b62f13d
refactor(common-ts): create deprecation facades for backwards compati…
ChesterSim Mar 26, 2026
cd5923b
refactor(common-ts): rewrite barrels, fix internal imports, delete ol…
ChesterSim Mar 26, 2026
c3d73ea
refactor(common-ts): add subpath exports and typesVersions to package…
ChesterSim Mar 26, 2026
74eba0b
fix(common-ts): resolve circular dependencies in types → utils barrel
ChesterSim Mar 26, 2026
140eb97
refactor(common-ts): cleanup from simplify review
ChesterSim Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
756 changes: 756 additions & 0 deletions common-ts/docs/superpowers/plans/2026-03-26-utils-restructure.md

Large diffs are not rendered by default.

Large diffs are not rendered by default.

69 changes: 67 additions & 2 deletions common-ts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,73 @@
"lib": "lib"
},
"exports": {
".": "./lib/index.js",
"./clients": "./lib/clients/index.js"
".": {
"types": "./lib/index.d.ts",
"default": "./lib/index.js"
},
"./clients": {
"types": "./lib/clients/index.d.ts",
"default": "./lib/clients/index.js"
},
"./utils/math": {
"types": "./lib/utils/math/index.d.ts",
"default": "./lib/utils/math/index.js"
},
"./utils/strings": {
"types": "./lib/utils/strings/index.d.ts",
"default": "./lib/utils/strings/index.js"
},
"./utils/enum": {
"types": "./lib/utils/enum/index.d.ts",
"default": "./lib/utils/enum/index.js"
},
"./utils/validation": {
"types": "./lib/utils/validation/index.d.ts",
"default": "./lib/utils/validation/index.js"
},
"./utils/token": {
"types": "./lib/utils/token/index.d.ts",
"default": "./lib/utils/token/index.js"
},
"./utils/trading": {
"types": "./lib/utils/trading/index.d.ts",
"default": "./lib/utils/trading/index.js"
},
"./utils/markets": {
"types": "./lib/utils/markets/index.d.ts",
"default": "./lib/utils/markets/index.js"
},
"./utils/orders": {
"types": "./lib/utils/orders/index.d.ts",
"default": "./lib/utils/orders/index.js"
},
"./utils/positions": {
"types": "./lib/utils/positions/index.d.ts",
"default": "./lib/utils/positions/index.js"
},
"./utils/accounts": {
"types": "./lib/utils/accounts/index.d.ts",
"default": "./lib/utils/accounts/index.js"
},
"./utils/core": {
"types": "./lib/utils/core/index.d.ts",
"default": "./lib/utils/core/index.js"
}
},
"typesVersions": {
"*": {
"utils/math": ["lib/utils/math/index.d.ts"],
"utils/strings": ["lib/utils/strings/index.d.ts"],
"utils/enum": ["lib/utils/enum/index.d.ts"],
"utils/validation": ["lib/utils/validation/index.d.ts"],
"utils/token": ["lib/utils/token/index.d.ts"],
"utils/trading": ["lib/utils/trading/index.d.ts"],
"utils/markets": ["lib/utils/markets/index.d.ts"],
"utils/orders": ["lib/utils/orders/index.d.ts"],
"utils/positions": ["lib/utils/positions/index.d.ts"],
"utils/accounts": ["lib/utils/accounts/index.d.ts"],
"utils/core": ["lib/utils/core/index.d.ts"]
}
},
"files": [
"lib"
Expand Down
6 changes: 6 additions & 0 deletions common-ts/src/_deprecated/common-math.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { calculateSpreadBidAskMark } from '../utils/math/spread';

/** @deprecated Use direct import from '@drift-labs/common/utils/math' */
export const COMMON_MATH = {
calculateSpreadBidAskMark,
};
83 changes: 83 additions & 0 deletions common-ts/src/_deprecated/common-ui-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { abbreviateAddress, trimTrailingZeros } from '../utils/strings/format';
import { calculateAverageEntryPrice } from '../utils/math/price';
import { chunks } from '../utils/core/arrays';
import {
compareSignatures,
getSignatureVerificationMessageForSettings,
verifySignature,
hashSignature,
} from '../utils/accounts/signature';
import { createPlaceholderIWallet } from '../utils/accounts/wallet';
import {
deriveMarketOrderParams,
getLimitAuctionParams,
getMarketAuctionParams,
getPriceObject,
} from '../utils/trading/auction';
import {
fetchCurrentSubaccounts,
fetchUserClientsAndAccounts,
userExists,
} from '../utils/accounts/subaccounts';
import { formatTokenInputCurried } from '../utils/validation/input';
import {
getBalanceFromTokenAccountResult,
getTokenAccount,
} from '../utils/token/account';
import {
getIdAndAuthorityFromKey,
getUserKey,
getMarketKey,
} from '../utils/accounts/keys';
import {
getLpSharesAmountForQuote,
getQuoteValueForLpShares,
} from '../utils/trading/lp';
import { getMarketOrderLimitPrice } from '../utils/trading/price';
import {
getMultipleAccounts,
getMultipleAccountsCore,
} from '../utils/accounts/multiple';
import { getTokenAddress } from '../utils/token/address';
import { initializeAndSubscribeToNewUserAccount } from '../utils/accounts/init';
import { USER_UTILS } from './user-utils';
import { TRADING_UTILS } from './trading-utils';
import { MARKET_UTILS } from './market-utils';
import { ORDER_COMMON_UTILS } from './order-utils';

/** @deprecated Use direct imports from '@drift-labs/common/utils/trading', '@drift-labs/common/utils/accounts', etc. */
export const COMMON_UI_UTILS = {
abbreviateAddress,
calculateAverageEntryPrice,
chunks,
compareSignatures,
createPlaceholderIWallet,
deriveMarketOrderParams,
fetchCurrentSubaccounts,
fetchUserClientsAndAccounts,
formatTokenInputCurried,
getBalanceFromTokenAccountResult,
getIdAndAuthorityFromKey,
getLimitAuctionParams,
getLpSharesAmountForQuote,
getMarketAuctionParams,
getMarketKey,
getMarketOrderLimitPrice,
getMultipleAccounts,
getMultipleAccountsCore,
getPriceObject,
getQuoteValueForLpShares,
getSignatureVerificationMessageForSettings,
getTokenAccount,
getTokenAddress,
getUserKey,
hashSignature,
initializeAndSubscribeToNewUserAccount,
userExists,
verifySignature,
trimTrailingZeros,
...USER_UTILS,
...TRADING_UTILS,
...MARKET_UTILS,
...ORDER_COMMON_UTILS,
};
2 changes: 2 additions & 0 deletions common-ts/src/_deprecated/equality-checks.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/** @deprecated Use direct import from '@drift-labs/common/utils/core/equality' */
export { EQUALITY_CHECKS } from '../utils/core/equality';
23 changes: 23 additions & 0 deletions common-ts/src/_deprecated/market-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { getBaseAssetSymbol, getMarketConfig } from '../utils/markets/config';
import {
getPausedOperations,
PerpOperationsMap,
SpotOperationsMap,
InsuranceFundOperationsMap,
} from '../utils/markets/operations';
import {
getMaxLeverageForMarket,
getMaxLeverageForMarketAccount,
} from '../utils/markets/leverage';

/** @deprecated Use direct imports from '@drift-labs/common/utils/markets' */
export const MARKET_UTILS = {
getBaseAssetSymbol,
getPausedOperations,
PerpOperationsMap,
SpotOperationsMap,
InsuranceFundOperationsMap,
getMarketConfig,
getMaxLeverageForMarket,
getMaxLeverageForMarketAccount,
};
24 changes: 24 additions & 0 deletions common-ts/src/_deprecated/order-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import {
getOrderLabelFromOrderDetails,
getUIOrderTypeFromSdkOrderType,
} from '../utils/orders/labels';
import {
getLimitPriceFromOracleOffset,
isAuctionEmpty,
} from '../utils/orders/oracle';
import {
getPerpAuctionDuration,
getPerpOrderParamsBitFlags,
} from '../utils/orders/flags';
import { isOrderTriggered } from '../utils/orders/filters';

/** @deprecated Use direct imports from '@drift-labs/common/utils/orders' */
export const ORDER_COMMON_UTILS = {
getOrderLabelFromOrderDetails,
getLimitPriceFromOracleOffset,
isAuctionEmpty,
getUIOrderTypeFromSdkOrderType,
getPerpAuctionDuration,
getPerpOrderParamsBitFlags,
isOrderTriggered,
};
40 changes: 40 additions & 0 deletions common-ts/src/_deprecated/trading-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import {
calculatePnlPctFromPosition,
calculatePotentialProfit,
} from '../utils/trading/pnl';
import { calculateLiquidationPriceAfterPerpTrade } from '../utils/trading/liquidation';
import { checkIsMarketOrderType } from '../utils/trading/price';
import {
convertLeverageToMarginRatio,
convertMarginRatioToLeverage,
getMarginUsedForPosition,
validateLeverageChange,
} from '../utils/trading/leverage';
import {
getMarketTickSize,
getMarketTickSizeDecimals,
getMarketStepSize,
getMarketStepSizeDecimals,
isEntirePositionOrder,
getMaxLeverageOrderSize,
formatOrderSize,
} from '../utils/trading/size';

/** @deprecated Use direct imports from '@drift-labs/common/utils/trading' */
export const TRADING_UTILS = {
calculatePnlPctFromPosition,
calculatePotentialProfit,
calculateLiquidationPriceAfterPerpTrade,
checkIsMarketOrderType,
convertLeverageToMarginRatio,
convertMarginRatioToLeverage,
getMarketTickSize,
getMarketTickSizeDecimals,
getMarketStepSize,
getMarketStepSizeDecimals,
isEntirePositionOrder,
getMaxLeverageOrderSize,
formatOrderSize,
getMarginUsedForPosition,
validateLeverageChange,
};
12 changes: 12 additions & 0 deletions common-ts/src/_deprecated/user-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { getOpenPositionData } from '../utils/positions/open';
import {
checkIfUserAccountExists,
getUserMaxLeverageForMarket,
} from '../utils/positions/user';

/** @deprecated Use direct imports from '@drift-labs/common/utils/positions' */
export const USER_UTILS = {
getOpenPositionData,
checkIfUserAccountExists,
getUserMaxLeverageForMarket,
};
62 changes: 62 additions & 0 deletions common-ts/src/_deprecated/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import {
getIfVaultBalance,
getIfStakingVaultApr,
} from '../utils/insuranceFund';
import {
getCurrentOpenInterestForMarket,
getDepositAprForMarket,
getBorrowAprForMarket,
} from '../utils/markets/interest';
import {
getTotalBorrowsForMarket,
getTotalDepositsForMarket,
} from '../utils/markets/balances';
import { dividesExactly } from '../utils/math/precision';
import {
toSnakeCase,
toCamelCase,
normalizeBaseAssetSymbol,
} from '../utils/strings/format';
import { getTieredSortScore } from '../utils/math/sort';
import {
calculateZScore,
calculateMean,
calculateMedian,
} from '../utils/math/numbers';
import { chunks, glueArray } from '../utils/core/arrays';
import { timedPromise } from '../utils/core/async';
import { getMultipleAccountsInfoChunked } from '../utils/accounts/multiple';
import { bnMax, bnMin, bnMean, bnMedian } from '../utils/math/bn';

/** @deprecated Use direct imports from '@drift-labs/common/utils/math', '@drift-labs/common/utils/core', etc. */
export const COMMON_UTILS = {
getIfVaultBalance,
getIfStakingVaultApr,
getCurrentOpenInterestForMarket,
getDepositAprForMarket,
getBorrowAprForMarket,
getTotalBorrowsForMarket,
getTotalDepositsForMarket,
dividesExactly,
toSnakeCase,
toCamelCase,
getTieredSortScore,
normalizeBaseAssetSymbol,
calculateZScore,
glueArray,
timedPromise,
chunks,
getMultipleAccountsInfoChunked,
MATH: {
NUM: {
mean: calculateMean,
median: calculateMedian,
},
BN: {
bnMax,
bnMin,
bnMean,
bnMedian,
},
},
};
2 changes: 1 addition & 1 deletion common-ts/src/clients/tvFeed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { UIEnv } from '../types/UIEnv';
import { Candle } from '../utils/candles/Candle';
import { PollingSequenceGuard } from '../utils/pollingSequenceGuard';
import { CandleClient } from './candleClient';
import { MARKET_UTILS } from '../common-ui-utils/market';
import { MARKET_UTILS } from '../_deprecated/market-utils';

const DRIFT_V2_START_TS = 1668470400; // 15th November 2022 ... 2022-11-15T00:00:00.000Z

Expand Down
Loading
Loading