@drift-labs/common 1.0.59 → 1.0.60
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/lib/_deprecated/common-math.d.ts +10 -0
- package/lib/_deprecated/common-math.js +9 -0
- package/lib/_deprecated/common-math.js.map +1 -0
- package/lib/_deprecated/common-ui-utils.d.ts +248 -0
- package/lib/_deprecated/common-ui-utils.js +59 -0
- package/lib/_deprecated/common-ui-utils.js.map +1 -0
- package/lib/_deprecated/equality-checks.d.ts +2 -0
- package/lib/_deprecated/equality-checks.js +7 -0
- package/lib/_deprecated/equality-checks.js.map +1 -0
- package/lib/{common-ui-utils/market.d.ts → _deprecated/market-utils.d.ts} +5 -7
- package/lib/_deprecated/market-utils.js +18 -0
- package/lib/_deprecated/market-utils.js.map +1 -0
- package/lib/_deprecated/order-utils.d.ts +12 -0
- package/lib/_deprecated/order-utils.js +18 -0
- package/lib/_deprecated/order-utils.js.map +1 -0
- package/lib/_deprecated/trading-utils.d.ts +52 -0
- package/lib/_deprecated/trading-utils.js +27 -0
- package/lib/_deprecated/trading-utils.js.map +1 -0
- package/lib/_deprecated/user-utils.d.ts +17 -0
- package/lib/_deprecated/user-utils.js +12 -0
- package/lib/_deprecated/user-utils.js.map +1 -0
- package/lib/_deprecated/utils.d.ts +40 -0
- package/lib/_deprecated/utils.js +47 -0
- package/lib/_deprecated/utils.js.map +1 -0
- package/lib/clients/tvFeed.js +2 -2
- package/lib/clients/tvFeed.js.map +1 -1
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js +8 -8
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js.map +1 -1
- package/lib/drift/Drift/clients/AuthorityDrift/index.js +9 -9
- package/lib/drift/Drift/clients/AuthorityDrift/index.js.map +1 -1
- package/lib/drift/Drift/clients/CentralServerDrift/index.js +2 -2
- package/lib/drift/Drift/clients/CentralServerDrift/index.js.map +1 -1
- package/lib/drift/base/actions/trade/editOrder.d.ts +1 -1
- package/lib/drift/base/actions/trade/editOrder.js.map +1 -1
- package/lib/drift/base/actions/trade/margin.js +4 -4
- package/lib/drift/base/actions/trade/margin.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/auction.d.ts +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/auction.js +4 -3
- package/lib/drift/base/actions/trade/openPerpOrder/auction.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/dlobServer/index.js +2 -2
- package/lib/drift/base/actions/trade/openPerpOrder/dlobServer/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/isolatedPositionDeposit.js +2 -2
- package/lib/drift/base/actions/trade/openPerpOrder/isolatedPositionDeposit.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.d.ts +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js +4 -4
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.d.ts +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js +2 -2
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js +4 -3
- package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/positionMaxLeverage.js +2 -2
- package/lib/drift/base/actions/trade/openPerpOrder/positionMaxLeverage.js.map +1 -1
- package/lib/drift/base/actions/user/create.js +2 -2
- package/lib/drift/base/actions/user/create.js.map +1 -1
- package/lib/drift/base/details/user/balances.js +2 -2
- package/lib/drift/base/details/user/balances.js.map +1 -1
- package/lib/drift/base/details/user/positions.js +2 -2
- package/lib/drift/base/details/user/positions.js.map +1 -1
- package/lib/index.d.ts +28 -28
- package/lib/index.js +44 -29
- package/lib/index.js.map +1 -1
- package/lib/utils/accounts/index.d.ts +6 -0
- package/lib/utils/accounts/index.js +23 -0
- package/lib/utils/accounts/index.js.map +1 -0
- package/lib/utils/accounts/init.d.ts +22 -0
- package/lib/utils/accounts/init.js +90 -0
- package/lib/utils/accounts/init.js.map +1 -0
- package/lib/utils/accounts/keys.d.ts +22 -0
- package/lib/utils/accounts/keys.js +36 -0
- package/lib/utils/accounts/keys.js.map +1 -0
- package/lib/utils/accounts/multiple.d.ts +14 -0
- package/lib/utils/accounts/multiple.js +45 -0
- package/lib/utils/accounts/multiple.js.map +1 -0
- package/lib/utils/accounts/signature.d.ts +6 -0
- package/lib/utils/accounts/signature.js +53 -0
- package/lib/utils/accounts/signature.js.map +1 -0
- package/lib/utils/accounts/subaccounts.d.ts +8 -0
- package/lib/utils/accounts/subaccounts.js +31 -0
- package/lib/utils/accounts/subaccounts.js.map +1 -0
- package/lib/utils/{WalletConnectionState.d.ts → accounts/wallet.d.ts} +7 -1
- package/lib/utils/{WalletConnectionState.js → accounts/wallet.js} +32 -2
- package/lib/utils/accounts/wallet.js.map +1 -0
- package/lib/utils/core/arrays.d.ts +2 -0
- package/lib/utils/core/arrays.js +25 -0
- package/lib/utils/core/arrays.js.map +1 -0
- package/lib/utils/core/async.d.ts +5 -0
- package/lib/utils/core/async.js +17 -0
- package/lib/utils/core/async.js.map +1 -0
- package/lib/utils/core/cache.d.ts +1 -0
- package/lib/utils/core/cache.js +40 -0
- package/lib/utils/core/cache.js.map +1 -0
- package/lib/utils/core/data-structures.d.ts +30 -0
- package/lib/utils/core/data-structures.js +84 -0
- package/lib/utils/core/data-structures.js.map +1 -0
- package/lib/utils/{equalityChecks.d.ts → core/equality.d.ts} +1 -1
- package/lib/utils/{equalityChecks.js → core/equality.js} +3 -3
- package/lib/utils/core/equality.js.map +1 -0
- package/lib/utils/core/fetch.js.map +1 -0
- package/lib/utils/core/index.d.ts +7 -0
- package/lib/utils/core/index.js +24 -0
- package/lib/utils/core/index.js.map +1 -0
- package/lib/utils/core/serialization.d.ts +30 -0
- package/lib/utils/core/serialization.js +92 -0
- package/lib/utils/core/serialization.js.map +1 -0
- package/lib/utils/{enum.js → enum/index.js} +1 -1
- package/lib/utils/enum/index.js.map +1 -0
- package/lib/utils/index.d.ts +11 -176
- package/lib/utils/index.js +25 -594
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/markets/balances.d.ts +6 -0
- package/lib/utils/markets/balances.js +29 -0
- package/lib/utils/markets/balances.js.map +1 -0
- package/lib/utils/markets/config.d.ts +5 -0
- package/lib/utils/markets/config.js +24 -0
- package/lib/utils/markets/config.js.map +1 -0
- package/lib/utils/markets/index.d.ts +6 -0
- package/lib/utils/markets/index.js +23 -0
- package/lib/utils/markets/index.js.map +1 -0
- package/lib/utils/markets/interest.d.ts +25 -0
- package/lib/utils/markets/interest.js +65 -0
- package/lib/utils/markets/interest.js.map +1 -0
- package/lib/utils/markets/leverage.d.ts +12 -0
- package/lib/utils/markets/leverage.js +60 -0
- package/lib/utils/markets/leverage.js.map +1 -0
- package/lib/utils/markets/operations.d.ts +21 -0
- package/lib/utils/markets/operations.js +59 -0
- package/lib/utils/markets/operations.js.map +1 -0
- package/lib/utils/math/bignum.d.ts +3 -0
- package/lib/utils/math/bignum.js +16 -0
- package/lib/utils/math/bignum.js.map +1 -0
- package/lib/utils/math/bn.d.ts +7 -0
- package/lib/utils/math/bn.js +58 -0
- package/lib/utils/math/bn.js.map +1 -0
- package/lib/utils/math/index.d.ts +7 -0
- package/lib/utils/math/index.js +24 -0
- package/lib/utils/math/index.js.map +1 -0
- package/lib/utils/math/numbers.d.ts +13 -0
- package/lib/utils/math/numbers.js +56 -0
- package/lib/utils/math/numbers.js.map +1 -0
- package/lib/utils/math/precision.d.ts +19 -0
- package/lib/utils/math/precision.js +73 -0
- package/lib/utils/math/precision.js.map +1 -0
- package/lib/utils/math/price.d.ts +12 -0
- package/lib/utils/math/price.js +45 -0
- package/lib/utils/math/price.js.map +1 -0
- package/lib/utils/math/sort.d.ts +13 -0
- package/lib/utils/math/sort.js +33 -0
- package/lib/utils/math/sort.js.map +1 -0
- package/lib/utils/math/spread.d.ts +8 -0
- package/lib/utils/math/spread.js +87 -0
- package/lib/utils/math/spread.js.map +1 -0
- package/lib/utils/orderbook/index.js +4 -4
- package/lib/utils/orderbook/index.js.map +1 -1
- package/lib/utils/orders/filters.d.ts +7 -0
- package/lib/utils/orders/filters.js +31 -0
- package/lib/utils/orders/filters.js.map +1 -0
- package/lib/utils/orders/flags.d.ts +12 -0
- package/lib/utils/orders/flags.js +44 -0
- package/lib/utils/orders/flags.js.map +1 -0
- package/lib/utils/orders/index.d.ts +6 -0
- package/lib/utils/orders/index.js +23 -0
- package/lib/utils/orders/index.js.map +1 -0
- package/lib/utils/orders/labels.d.ts +4 -0
- package/lib/utils/orders/labels.js +122 -0
- package/lib/utils/orders/labels.js.map +1 -0
- package/lib/utils/orders/misc.d.ts +11 -0
- package/lib/utils/orders/misc.js +27 -0
- package/lib/utils/orders/misc.js.map +1 -0
- package/lib/utils/orders/oracle.d.ts +5 -0
- package/lib/utils/orders/oracle.js +23 -0
- package/lib/utils/orders/oracle.js.map +1 -0
- package/lib/utils/orders/sort.d.ts +38 -0
- package/lib/utils/orders/sort.js +83 -0
- package/lib/utils/orders/sort.js.map +1 -0
- package/lib/utils/positions/index.d.ts +2 -0
- package/lib/{common-ui-utils → utils/positions}/index.js +1 -5
- package/lib/utils/positions/index.js.map +1 -0
- package/lib/utils/positions/open.d.ts +4 -0
- package/lib/{common-ui-utils/user.js → utils/positions/open.js} +10 -81
- package/lib/utils/positions/open.js.map +1 -0
- package/lib/utils/positions/user.d.ts +37 -0
- package/lib/utils/positions/user.js +74 -0
- package/lib/utils/positions/user.js.map +1 -0
- package/lib/utils/settings/settings.js.map +1 -0
- package/lib/utils/strings/convert.d.ts +11 -0
- package/lib/utils/{strings.js → strings/convert.js} +2 -51
- package/lib/utils/strings/convert.js.map +1 -0
- package/lib/utils/strings/format.d.ts +14 -0
- package/lib/utils/strings/format.js +61 -0
- package/lib/utils/strings/format.js.map +1 -0
- package/lib/utils/strings/index.d.ts +4 -0
- package/lib/utils/strings/index.js +21 -0
- package/lib/utils/strings/index.js.map +1 -0
- package/lib/utils/strings/parse.d.ts +4 -0
- package/lib/utils/strings/parse.js +25 -0
- package/lib/utils/strings/parse.js.map +1 -0
- package/lib/utils/strings/status.d.ts +15 -0
- package/lib/utils/strings/status.js +21 -0
- package/lib/utils/strings/status.js.map +1 -0
- package/lib/utils/token/account.d.ts +16 -0
- package/lib/utils/token/account.js +36 -0
- package/lib/utils/token/account.js.map +1 -0
- package/lib/utils/{token.d.ts → token/address.d.ts} +2 -7
- package/lib/utils/token/address.js +30 -0
- package/lib/utils/token/address.js.map +1 -0
- package/lib/utils/token/index.d.ts +3 -0
- package/lib/utils/token/index.js +20 -0
- package/lib/utils/token/index.js.map +1 -0
- package/lib/utils/token/instructions.d.ts +3 -0
- package/lib/utils/token/instructions.js +17 -0
- package/lib/utils/token/instructions.js.map +1 -0
- package/lib/utils/trading/auction.d.ts +82 -0
- package/lib/utils/trading/auction.js +208 -0
- package/lib/utils/trading/auction.js.map +1 -0
- package/lib/utils/trading/index.d.ts +7 -0
- package/lib/utils/trading/index.js +24 -0
- package/lib/utils/trading/index.js.map +1 -0
- package/lib/utils/trading/leverage.d.ts +18 -0
- package/lib/utils/trading/leverage.js +79 -0
- package/lib/utils/trading/leverage.js.map +1 -0
- package/lib/utils/trading/liquidation.d.ts +22 -0
- package/lib/utils/trading/liquidation.js +67 -0
- package/lib/utils/trading/liquidation.js.map +1 -0
- package/lib/utils/trading/lp.d.ts +4 -0
- package/lib/utils/trading/lp.js +20 -0
- package/lib/utils/trading/lp.js.map +1 -0
- package/lib/utils/trading/pnl.d.ts +34 -0
- package/lib/utils/trading/pnl.js +88 -0
- package/lib/utils/trading/pnl.js.map +1 -0
- package/lib/utils/trading/price.d.ts +12 -0
- package/lib/utils/trading/price.js +36 -0
- package/lib/utils/trading/price.js.map +1 -0
- package/lib/utils/trading/size.d.ts +27 -0
- package/lib/utils/trading/size.js +83 -0
- package/lib/utils/trading/size.js.map +1 -0
- package/lib/utils/{validation.d.ts → validation/address.d.ts} +1 -2
- package/lib/utils/{validation.js → validation/address.js} +4 -6
- package/lib/utils/validation/address.js.map +1 -0
- package/lib/utils/validation/index.d.ts +3 -0
- package/lib/utils/validation/index.js +20 -0
- package/lib/utils/validation/index.js.map +1 -0
- package/lib/utils/validation/input.d.ts +3 -0
- package/lib/utils/validation/input.js +33 -0
- package/lib/utils/validation/input.js.map +1 -0
- package/lib/utils/validation/notional.d.ts +2 -0
- package/lib/utils/validation/notional.js +8 -0
- package/lib/utils/validation/notional.js.map +1 -0
- package/package.json +90 -3
- package/lib/common-ui-utils/commonUiUtils.d.ts +0 -251
- package/lib/common-ui-utils/commonUiUtils.js +0 -647
- package/lib/common-ui-utils/commonUiUtils.js.map +0 -1
- package/lib/common-ui-utils/index.d.ts +0 -6
- package/lib/common-ui-utils/index.js.map +0 -1
- package/lib/common-ui-utils/market.js +0 -134
- package/lib/common-ui-utils/market.js.map +0 -1
- package/lib/common-ui-utils/order.d.ts +0 -25
- package/lib/common-ui-utils/order.js +0 -191
- package/lib/common-ui-utils/order.js.map +0 -1
- package/lib/common-ui-utils/settings/settings.js.map +0 -1
- package/lib/common-ui-utils/trading.d.ts +0 -79
- package/lib/common-ui-utils/trading.js +0 -313
- package/lib/common-ui-utils/trading.js.map +0 -1
- package/lib/common-ui-utils/user.d.ts +0 -18
- package/lib/common-ui-utils/user.js.map +0 -1
- package/lib/utils/WalletConnectionState.js.map +0 -1
- package/lib/utils/enum.js.map +0 -1
- package/lib/utils/equalityChecks.js.map +0 -1
- package/lib/utils/fetch.js.map +0 -1
- package/lib/utils/math.d.ts +0 -31
- package/lib/utils/math.js +0 -181
- package/lib/utils/math.js.map +0 -1
- package/lib/utils/strings.d.ts +0 -34
- package/lib/utils/strings.js.map +0 -1
- package/lib/utils/token.js +0 -45
- package/lib/utils/token.js.map +0 -1
- package/lib/utils/validation.js.map +0 -1
- /package/lib/utils/{fetch.d.ts → core/fetch.d.ts} +0 -0
- /package/lib/utils/{fetch.js → core/fetch.js} +0 -0
- /package/lib/utils/{enum.d.ts → enum/index.d.ts} +0 -0
- /package/lib/{common-ui-utils → utils}/settings/settings.d.ts +0 -0
- /package/lib/{common-ui-utils → utils}/settings/settings.js +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.COMMON_UTILS = void 0;
|
|
4
|
+
const insuranceFund_1 = require("../utils/insuranceFund");
|
|
5
|
+
const interest_1 = require("../utils/markets/interest");
|
|
6
|
+
const balances_1 = require("../utils/markets/balances");
|
|
7
|
+
const precision_1 = require("../utils/math/precision");
|
|
8
|
+
const format_1 = require("../utils/strings/format");
|
|
9
|
+
const sort_1 = require("../utils/math/sort");
|
|
10
|
+
const numbers_1 = require("../utils/math/numbers");
|
|
11
|
+
const arrays_1 = require("../utils/core/arrays");
|
|
12
|
+
const async_1 = require("../utils/core/async");
|
|
13
|
+
const multiple_1 = require("../utils/accounts/multiple");
|
|
14
|
+
const bn_1 = require("../utils/math/bn");
|
|
15
|
+
/** @deprecated Use direct imports from '@drift-labs/common/utils/math', '@drift-labs/common/utils/core', etc. */
|
|
16
|
+
exports.COMMON_UTILS = {
|
|
17
|
+
getIfVaultBalance: insuranceFund_1.getIfVaultBalance,
|
|
18
|
+
getIfStakingVaultApr: insuranceFund_1.getIfStakingVaultApr,
|
|
19
|
+
getCurrentOpenInterestForMarket: interest_1.getCurrentOpenInterestForMarket,
|
|
20
|
+
getDepositAprForMarket: interest_1.getDepositAprForMarket,
|
|
21
|
+
getBorrowAprForMarket: interest_1.getBorrowAprForMarket,
|
|
22
|
+
getTotalBorrowsForMarket: balances_1.getTotalBorrowsForMarket,
|
|
23
|
+
getTotalDepositsForMarket: balances_1.getTotalDepositsForMarket,
|
|
24
|
+
dividesExactly: precision_1.dividesExactly,
|
|
25
|
+
toSnakeCase: format_1.toSnakeCase,
|
|
26
|
+
toCamelCase: format_1.toCamelCase,
|
|
27
|
+
getTieredSortScore: sort_1.getTieredSortScore,
|
|
28
|
+
normalizeBaseAssetSymbol: format_1.normalizeBaseAssetSymbol,
|
|
29
|
+
calculateZScore: numbers_1.calculateZScore,
|
|
30
|
+
glueArray: arrays_1.glueArray,
|
|
31
|
+
timedPromise: async_1.timedPromise,
|
|
32
|
+
chunks: arrays_1.chunks,
|
|
33
|
+
getMultipleAccountsInfoChunked: multiple_1.getMultipleAccountsInfoChunked,
|
|
34
|
+
MATH: {
|
|
35
|
+
NUM: {
|
|
36
|
+
mean: numbers_1.calculateMean,
|
|
37
|
+
median: numbers_1.calculateMedian,
|
|
38
|
+
},
|
|
39
|
+
BN: {
|
|
40
|
+
bnMax: bn_1.bnMax,
|
|
41
|
+
bnMin: bn_1.bnMin,
|
|
42
|
+
bnMean: bn_1.bnMean,
|
|
43
|
+
bnMedian: bn_1.bnMedian,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/_deprecated/utils.ts"],"names":[],"mappings":";;;AAAA,0DAGgC;AAChC,wDAImC;AACnC,wDAGmC;AACnC,uDAAyD;AACzD,oDAIiC;AACjC,6CAAwD;AACxD,mDAI+B;AAC/B,iDAAyD;AACzD,+CAAmD;AACnD,yDAA4E;AAC5E,yCAAkE;AAElE,iHAAiH;AACpG,QAAA,YAAY,GAAG;IAC3B,iBAAiB,EAAjB,iCAAiB;IACjB,oBAAoB,EAApB,oCAAoB;IACpB,+BAA+B,EAA/B,0CAA+B;IAC/B,sBAAsB,EAAtB,iCAAsB;IACtB,qBAAqB,EAArB,gCAAqB;IACrB,wBAAwB,EAAxB,mCAAwB;IACxB,yBAAyB,EAAzB,oCAAyB;IACzB,cAAc,EAAd,0BAAc;IACd,WAAW,EAAX,oBAAW;IACX,WAAW,EAAX,oBAAW;IACX,kBAAkB,EAAlB,yBAAkB;IAClB,wBAAwB,EAAxB,iCAAwB;IACxB,eAAe,EAAf,yBAAe;IACf,SAAS,EAAT,kBAAS;IACT,YAAY,EAAZ,oBAAY;IACZ,MAAM,EAAN,eAAM;IACN,8BAA8B,EAA9B,yCAA8B;IAC9B,IAAI,EAAE;QACL,GAAG,EAAE;YACJ,IAAI,EAAE,uBAAa;YACnB,MAAM,EAAE,yBAAe;SACvB;QACD,EAAE,EAAE;YACH,KAAK,EAAL,UAAK;YACL,KAAK,EAAL,UAAK;YACL,MAAM,EAAN,WAAM;YACN,QAAQ,EAAR,aAAQ;SACR;KACD;CACD,CAAC","sourcesContent":["import {\n\tgetIfVaultBalance,\n\tgetIfStakingVaultApr,\n} from '../utils/insuranceFund';\nimport {\n\tgetCurrentOpenInterestForMarket,\n\tgetDepositAprForMarket,\n\tgetBorrowAprForMarket,\n} from '../utils/markets/interest';\nimport {\n\tgetTotalBorrowsForMarket,\n\tgetTotalDepositsForMarket,\n} from '../utils/markets/balances';\nimport { dividesExactly } from '../utils/math/precision';\nimport {\n\ttoSnakeCase,\n\ttoCamelCase,\n\tnormalizeBaseAssetSymbol,\n} from '../utils/strings/format';\nimport { getTieredSortScore } from '../utils/math/sort';\nimport {\n\tcalculateZScore,\n\tcalculateMean,\n\tcalculateMedian,\n} from '../utils/math/numbers';\nimport { chunks, glueArray } from '../utils/core/arrays';\nimport { timedPromise } from '../utils/core/async';\nimport { getMultipleAccountsInfoChunked } from '../utils/accounts/multiple';\nimport { bnMax, bnMin, bnMean, bnMedian } from '../utils/math/bn';\n\n/** @deprecated Use direct imports from '@drift-labs/common/utils/math', '@drift-labs/common/utils/core', etc. */\nexport const COMMON_UTILS = {\n\tgetIfVaultBalance,\n\tgetIfStakingVaultApr,\n\tgetCurrentOpenInterestForMarket,\n\tgetDepositAprForMarket,\n\tgetBorrowAprForMarket,\n\tgetTotalBorrowsForMarket,\n\tgetTotalDepositsForMarket,\n\tdividesExactly,\n\ttoSnakeCase,\n\ttoCamelCase,\n\tgetTieredSortScore,\n\tnormalizeBaseAssetSymbol,\n\tcalculateZScore,\n\tglueArray,\n\ttimedPromise,\n\tchunks,\n\tgetMultipleAccountsInfoChunked,\n\tMATH: {\n\t\tNUM: {\n\t\t\tmean: calculateMean,\n\t\t\tmedian: calculateMedian,\n\t\t},\n\t\tBN: {\n\t\t\tbnMax,\n\t\t\tbnMin,\n\t\t\tbnMean,\n\t\t\tbnMedian,\n\t\t},\n\t},\n};\n"]}
|
package/lib/clients/tvFeed.js
CHANGED
|
@@ -6,7 +6,7 @@ const types_1 = require("../types");
|
|
|
6
6
|
const Candle_1 = require("../utils/candles/Candle");
|
|
7
7
|
const pollingSequenceGuard_1 = require("../utils/pollingSequenceGuard");
|
|
8
8
|
const candleClient_1 = require("./candleClient");
|
|
9
|
-
const
|
|
9
|
+
const market_utils_1 = require("../_deprecated/market-utils");
|
|
10
10
|
const DRIFT_V2_START_TS = 1668470400; // 15th November 2022 ... 2022-11-15T00:00:00.000Z
|
|
11
11
|
const resolutions = [
|
|
12
12
|
'1',
|
|
@@ -203,7 +203,7 @@ class DriftTvFeed {
|
|
|
203
203
|
if (targetMarket) {
|
|
204
204
|
const tvMarketName = targetMarket.config.symbol;
|
|
205
205
|
// Use market-specific decimal precision from configuration
|
|
206
|
-
const baseAssetSymbol =
|
|
206
|
+
const baseAssetSymbol = market_utils_1.MARKET_UTILS.getBaseAssetSymbol(symbolName);
|
|
207
207
|
const marketDecimals = (_a = this.marketDecimalConfig) === null || _a === void 0 ? void 0 : _a[baseAssetSymbol];
|
|
208
208
|
let priceScale;
|
|
209
209
|
if (marketDecimals !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tvFeed.js","sourceRoot":"","sources":["../../src/clients/tvFeed.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCandleResolution,\n\tDriftClient,\n\tPerpMarketConfig,\n\tPRICE_PRECISION_EXP,\n\tSpotMarketConfig,\n} from '@drift-labs/sdk';\nimport { CandleType, JsonCandle, JsonTrade, MarketId } from '../types';\nimport { UIEnv } from '../types/UIEnv';\nimport { Candle } from '../utils/candles/Candle';\nimport { PollingSequenceGuard } from '../utils/pollingSequenceGuard';\nimport { CandleClient } from './candleClient';\nimport { MARKET_UTILS } from '../common-ui-utils/market';\n\nconst DRIFT_V2_START_TS = 1668470400; // 15th November 2022 ... 2022-11-15T00:00:00.000Z\n\ntype MarketDecimalConfig = Record<string, number>;\n\nconst resolutions = [\n\t'1',\n\t'3',\n\t'5',\n\t'15',\n\t'30',\n\t'60',\n\t'240',\n\t'6H',\n\t'8H',\n\t'1D',\n\t'3D',\n\t'1W',\n\t'1M',\n];\n\nconst tvResolutionStringToStandardResolutionString = (\n\ttvResolutionString\n): CandleResolution => {\n\tswitch (tvResolutionString) {\n\t\tcase '1':\n\t\t\treturn '1';\n\t\tcase '5':\n\t\t\treturn '5';\n\t\tcase '15':\n\t\t\treturn '15';\n\t\tcase '60':\n\t\t\treturn '60';\n\t\tcase '240':\n\t\t\treturn '240';\n\t\tcase 'D':\n\t\tcase '1D':\n\t\t\treturn 'D';\n\t\tcase 'W':\n\t\tcase '1W':\n\t\t\treturn 'W';\n\t\tcase 'M':\n\t\tcase '1M':\n\t\t\treturn 'M';\n\t}\n};\n\ntype TVMarketInfo = {\n\tsymbol: string;\n\tfull_name: string;\n\tdescription: string;\n\texchange: string;\n\tticker: string;\n\ttype: string;\n};\n\nconst DATAFEED_CONFIG = {\n\texchanges: [],\n\tsupported_resolutions: [...resolutions],\n\tcurrency_codes: [],\n\tsupports_marks: true,\n\tsupports_time: false,\n\tsupports_timescale_marks: false,\n\tsymbols_types: [],\n};\n\ntype TVBar = {\n\t/** Bar time.\n\t * Amount of **milliseconds** since Unix epoch start in **UTC** timezone.\n\t * `time` for daily, weekly, and monthly bars is expected to be a trading day (not session start day) at 00:00 UTC.\n\t * The library adjusts time according to `session` from {@link LibrarySymbolInfo}.\n\t */\n\ttime: number;\n\t/** Opening price */\n\topen: number;\n\t/** High price */\n\thigh: number;\n\t/** Low price */\n\tlow: number;\n\t/** Closing price */\n\tclose: number;\n\t/** Trading Volume */\n\tvolume?: number;\n};\n\nconst findMarketBySymbol = (\n\tsymbol: string,\n\tperpMarketConfigs: PerpMarketConfig[],\n\tspotMarketConfigs: SpotMarketConfig[]\n):\n\t| {\n\t\t\ttype: 'perp';\n\t\t\tconfig: PerpMarketConfig;\n\t }\n\t| {\n\t\t\ttype: 'spot';\n\t\t\tconfig: SpotMarketConfig;\n\t } => {\n\tif (!symbol) {\n\t\tthrow new Error(`TVFeed::No symbol provided`);\n\t}\n\n\tconst sanitisedSymbol = symbol.toLowerCase().replace('/usdc', ''); // Lowercase and replace /usdc (for spot markets) to santise symbol for lookup\n\n\tconst isPerp = sanitisedSymbol.toLowerCase().includes('perp');\n\n\tconst matchingMarketConfig = isPerp\n\t\t? perpMarketConfigs.find((mkt) =>\n\t\t\t\tmkt.symbol.toLowerCase().includes(sanitisedSymbol.toLowerCase())\n\t\t )\n\t\t: spotMarketConfigs.find((mkt) =>\n\t\t\t\tmkt.symbol.toLowerCase().includes(sanitisedSymbol.toLowerCase())\n\t\t );\n\n\tif (!matchingMarketConfig) {\n\t\tthrow new Error(`TVFeed::No market found for symbol ${symbol}`);\n\t}\n\n\tif (isPerp) {\n\t\treturn {\n\t\t\ttype: 'perp',\n\t\t\tconfig: matchingMarketConfig as PerpMarketConfig,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: 'spot',\n\t\tconfig: matchingMarketConfig as SpotMarketConfig,\n\t};\n};\n\nconst candleFetchingPollKey = Symbol('candleFetchingPollKey');\n\nconst candleToTvBar = (candle: JsonCandle, candleType: CandleType): TVBar => {\n\tconst useOraclePrice = candleType === CandleType.ORACLE_PRICE;\n\n\treturn {\n\t\ttime: candle.ts * 1000,\n\t\topen: useOraclePrice ? candle.oracleOpen : candle.fillOpen,\n\t\thigh: useOraclePrice ? candle.oracleHigh : candle.fillHigh,\n\t\tlow: useOraclePrice ? candle.oracleLow : candle.fillLow,\n\t\tclose: useOraclePrice ? candle.oracleClose : candle.fillClose,\n\t\tvolume: candle.quoteVolume,\n\t};\n};\n\nconst PerpMarketConfigToTVMarketInfo = (\n\tmarketConfig: PerpMarketConfig\n): TVMarketInfo => {\n\treturn {\n\t\tsymbol: marketConfig.symbol,\n\t\tfull_name: marketConfig.fullName,\n\t\tdescription: marketConfig.fullName,\n\t\texchange: 'Drift',\n\t\tticker: marketConfig.symbol,\n\t\ttype: 'crypto',\n\t};\n};\n\nconst SpotMarketConfigToTVMarketInfo = (\n\tmarketConfig: SpotMarketConfig\n): TVMarketInfo => {\n\treturn {\n\t\tsymbol: marketConfig.symbol,\n\t\tfull_name: marketConfig.symbol,\n\t\tdescription: marketConfig.symbol,\n\t\texchange: 'Drift',\n\t\tticker: marketConfig.symbol,\n\t\ttype: 'crypto',\n\t};\n};\n\ninterface TvAppTradeDataManager {\n\tgetFilledOrdersData(startDate: number, endDate: number): Promise<JsonTrade[]>;\n\tgetCurrentSubAccountAddress(): string | null;\n}\n\nexport class DriftTvFeed {\n\tprivate env: UIEnv;\n\tprivate candleType: CandleType;\n\tprivate candleClient: CandleClient;\n\tprivate driftClient: DriftClient;\n\tprivate onResetCache: () => void;\n\tprivate perpMarketConfigs: PerpMarketConfig[];\n\tprivate spotMarketConfigs: SpotMarketConfig[];\n\tprivate positiveColor: string;\n\tprivate negativeColor: string;\n\tprivate buySellMarkStrokeColor: string;\n\tprivate tvAppTradeDataManager: TvAppTradeDataManager | undefined;\n\tprivate marketDecimalConfig: MarketDecimalConfig | undefined;\n\n\tconstructor(\n\t\tenv: UIEnv,\n\t\tcandleType: CandleType,\n\t\tdriftClient: DriftClient,\n\t\tperpMarketConfigs: PerpMarketConfig[],\n\t\tspotMarketConfigs: SpotMarketConfig[],\n\t\tpositiveColor: string,\n\t\tnegativeColor: string,\n\t\tbuySellMarkStrokeColor: string,\n\t\ttvAppTradeDataManager?: TvAppTradeDataManager,\n\t\tmarketDecimalConfig?: MarketDecimalConfig\n\t) {\n\t\tthis.env = env;\n\t\tthis.candleType = candleType;\n\t\tthis.candleClient = new CandleClient();\n\t\tthis.driftClient = driftClient;\n\t\tthis.perpMarketConfigs = perpMarketConfigs;\n\t\tthis.spotMarketConfigs = spotMarketConfigs;\n\t\tthis.positiveColor = positiveColor;\n\t\tthis.negativeColor = negativeColor;\n\t\tthis.buySellMarkStrokeColor = buySellMarkStrokeColor;\n\t\tthis.tvAppTradeDataManager = tvAppTradeDataManager;\n\t\tthis.marketDecimalConfig = marketDecimalConfig;\n\t}\n\n\tpublic resetCache() {\n\t\tthis.onResetCache?.();\n\t}\n\n\tprivate searchMarkets = (symbol: string): TVMarketInfo[] => {\n\t\tconst res: Pick<\n\t\t\tTVMarketInfo,\n\t\t\t'symbol' | 'ticker' | 'full_name' | 'description'\n\t\t>[] = [];\n\n\t\tconst currentPerpMarkets = this.perpMarketConfigs;\n\t\tconst currentSpotMarkets = this.spotMarketConfigs;\n\n\t\tif (!symbol) {\n\t\t\tres.push(PerpMarketConfigToTVMarketInfo(currentPerpMarkets[0]));\n\t\t} else {\n\t\t\tfor (const market of currentPerpMarkets) {\n\t\t\t\tconst lowerCaseMarket = market.symbol.toLowerCase();\n\t\t\t\tif (lowerCaseMarket.includes(symbol.toLowerCase())) {\n\t\t\t\t\tres.push(PerpMarketConfigToTVMarketInfo(market));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const market of currentSpotMarkets) {\n\t\t\t\tconst lowerCaseMarket = market.symbol.toLowerCase();\n\t\t\t\tif (lowerCaseMarket.includes(symbol.toLowerCase())) {\n\t\t\t\t\tres.push(SpotMarketConfigToTVMarketInfo(market));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn res.map((mkt) => {\n\t\t\treturn {\n\t\t\t\t...mkt,\n\t\t\t\texchange: 'Drift',\n\t\t\t\ttype: 'crypto',\n\t\t\t};\n\t\t});\n\t};\n\n\t// IExternalDatafeed implementation\n\tonReady(callback) {\n\t\t// using setTimeout because tradingview wants this to resolve asynchronously\n\t\tsetTimeout(() => callback(DATAFEED_CONFIG), 0);\n\t}\n\n\t// IDatafeedChartApi implementation\n\tsearchSymbols(\n\t\tuserInput: string,\n\t\t_exchange: string,\n\t\t_symbolType: string,\n\t\tonResult\n\t): void {\n\t\tif (!userInput) return onResult([]);\n\n\t\tconst res = this.searchMarkets(userInput);\n\n\t\tonResult(res);\n\t}\n\n\tresolveSymbol(symbolName: string, onResolve, onError): void {\n\t\tconst targetMarket = findMarketBySymbol(\n\t\t\tsymbolName,\n\t\t\tthis.perpMarketConfigs,\n\t\t\tthis.spotMarketConfigs\n\t\t);\n\n\t\tif (targetMarket) {\n\t\t\tconst tvMarketName = targetMarket.config.symbol;\n\n\t\t\t// Use market-specific decimal precision from configuration\n\t\t\tconst baseAssetSymbol = MARKET_UTILS.getBaseAssetSymbol(symbolName);\n\t\t\tconst marketDecimals = this.marketDecimalConfig?.[baseAssetSymbol];\n\n\t\t\tlet priceScale: number;\n\n\t\t\tif (marketDecimals !== undefined) {\n\t\t\t\t// Use configured market decimals\n\t\t\t\tpriceScale = 10 ** marketDecimals;\n\t\t\t} else {\n\t\t\t\t// Fall back to original tick size calculation\n\t\t\t\tlet tickSize: number;\n\n\t\t\t\tif (targetMarket.type === 'perp') {\n\t\t\t\t\ttickSize = this.driftClient\n\t\t\t\t\t\t.getPerpMarketAccount(targetMarket.config.marketIndex)\n\t\t\t\t\t\t.amm.orderTickSize.toNumber();\n\t\t\t\t} else {\n\t\t\t\t\ttickSize = this.driftClient\n\t\t\t\t\t\t.getSpotMarketAccount(targetMarket.config.marketIndex)\n\t\t\t\t\t\t.orderTickSize.toNumber();\n\t\t\t\t}\n\n\t\t\t\tconst pricePrecisionExp = PRICE_PRECISION_EXP.toNumber();\n\t\t\t\tconst tickSizeExp = Math.ceil(Math.log10(tickSize));\n\t\t\t\tconst priceScaleExponent = Math.max(0, pricePrecisionExp - tickSizeExp);\n\t\t\t\tpriceScale = 10 ** priceScaleExponent;\n\t\t\t}\n\n\t\t\tonResolve({\n\t\t\t\tname: tvMarketName,\n\t\t\t\tfull_name: tvMarketName,\n\t\t\t\tdescription: tvMarketName,\n\t\t\t\texchange: 'Drift',\n\t\t\t\tticker: targetMarket.config.symbol,\n\t\t\t\ttype: 'crypto',\n\t\t\t\tsession: '24x7',\n\t\t\t\ttimezone: 'Etc/UTC',\n\t\t\t\tlisted_exchange: 'Drift',\n\t\t\t\tformat: 'price',\n\t\t\t\tpricescale: priceScale,\n\t\t\t\tminmov: 1,\n\t\t\t\tsupported_resolutions: [...resolutions],\n\t\t\t\thas_intraday: true,\n\t\t\t\tintraday_multipliers: ['1', '5', '15', '60', '240'],\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tonError(`Couldn't find market for symbol ${symbolName}`);\n\t}\n\n\t/**\n\t * TradingView sometimes asks for a FROM timestamp halfway between two candles, this isn't compatible with the new candles API so we round these down the nearest candle - which should be the exact same candle!!\n\t * @param timestamp\n\t * @param resolution\n\t * @returns\n\t */\n\tprivate roundFromTimestampToExactCandleTs = (\n\t\ttimestamp: number,\n\t\tresolution: CandleResolution\n\t) => {\n\t\tconst ROUND_UP = true;\n\n\t\tconst timestampMs = timestamp * 1000;\n\t\tconst candleLengthMs = Candle.resolutionStringToCandleLengthMs(resolution);\n\n\t\tconst remainderMs = timestampMs % candleLengthMs;\n\n\t\tif (remainderMs === 0) {\n\t\t\treturn timestamp;\n\t\t}\n\n\t\tconst roundedDownTimestampMs = timestampMs - remainderMs;\n\n\t\tconst roundedTimestampMs = ROUND_UP\n\t\t\t? roundedDownTimestampMs + candleLengthMs\n\t\t\t: roundedDownTimestampMs;\n\n\t\treturn roundedTimestampMs / 1000;\n\t};\n\n\tprivate formatTVRequestedRange = (\n\t\tfromTs: number,\n\t\ttoTs: number,\n\t\tresolution: CandleResolution\n\t) => {\n\t\tconst formattedFromTs = this.roundFromTimestampToExactCandleTs(\n\t\t\tfromTs,\n\t\t\tresolution\n\t\t); // TradingView sometimes asks for a FROM timestamp halfway between two candles, so we round down to the nearest candle\n\n\t\tconst formattedToTs = Math.floor(Math.min(toTs, Date.now() / 1000)); // TradingView sometimes asks for a TO timestamp in the future, so we cap it at the current timestamp\n\n\t\treturn {\n\t\t\tfrom: formattedFromTs,\n\t\t\tto: formattedToTs,\n\t\t};\n\t};\n\t// Helper function to convert resolution string to seconds\n\tprivate getResolutionInSeconds(resolution: string): number {\n\t\t// Resolution can be: '1', '3', '5', '15', '30', '60', '120', '240', '1D', '1W', etc.\n\t\tif (resolution.includes('D')) {\n\t\t\tconst days = parseInt(resolution);\n\t\t\treturn days * 24 * 60 * 60;\n\t\t}\n\t\tif (resolution.includes('W')) {\n\t\t\tconst weeks = parseInt(resolution);\n\t\t\treturn weeks * 7 * 24 * 60 * 60;\n\t\t}\n\t\tif (resolution.includes('M')) {\n\t\t\tconst months = parseInt(resolution);\n\t\t\treturn months * 30 * 24 * 60 * 60; // Approximate\n\t\t}\n\t\t// Default: minutes\n\t\tconst minutes = parseInt(resolution);\n\t\treturn minutes * 60;\n\t}\n\n\t// https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.Mark/ reference for marks type\n\tasync getMarks(_symbolInfo, startDate, endDate, onDataCallback, _resolution) {\n\t\tif (!this.tvAppTradeDataManager) {\n\t\t\treturn;\n\t\t}\n\t\tconst orderHistory = await this.tvAppTradeDataManager.getFilledOrdersData(\n\t\t\tstartDate,\n\t\t\tendDate\n\t\t);\n\n\t\tconst currentUserAccount =\n\t\t\tthis.tvAppTradeDataManager.getCurrentSubAccountAddress();\n\n\t\t// Calculate resolution in seconds for aligning marks to candle start times\n\t\tconst resolutionInSeconds = this.getResolutionInSeconds(_resolution);\n\n\t\tconst tradeMarks = orderHistory.map((trade) => {\n\t\t\tconst currentUserIsMaker = trade.maker === currentUserAccount;\n\t\t\tconst currentUserIsTaker = trade.taker === currentUserAccount;\n\n\t\t\tlet isLong: boolean;\n\t\t\tif (currentUserIsMaker) {\n\t\t\t\tisLong = trade.makerOrderDirection === 'long';\n\t\t\t} else if (currentUserIsTaker) {\n\t\t\t\tisLong = trade.takerOrderDirection === 'long';\n\t\t\t}\n\n\t\t\tconst color = isLong ? this.positiveColor : this.negativeColor;\n\t\t\tconst baseAmount = Number(trade.baseAssetAmountFilled);\n\t\t\tconst quoteAmount = Number(trade.quoteAssetAmountFilled);\n\t\t\tconst avgPrice = quoteAmount / baseAmount;\n\n\t\t\tconst formatPrice = (price: number): string => {\n\t\t\t\tif (price >= 1) {\n\t\t\t\t\treturn price.toLocaleString('en-US', {\n\t\t\t\t\t\tminimumFractionDigits: 2,\n\t\t\t\t\t\tmaximumFractionDigits: 2,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (price === 0) return '0.0000';\n\t\t\t\t\tif (price < 0.00001) return '<0.00001';\n\t\t\t\t\treturn price.toFixed(4);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Align trade time to candle start time\n\t\t\t// TradingView requires mark time to exactly match a bar time\n\t\t\tconst candleStartTime =\n\t\t\t\tMath.floor(trade.ts / resolutionInSeconds) * resolutionInSeconds;\n\n\t\t\treturn {\n\t\t\t\tid: trade.txSig,\n\t\t\t\ttime: candleStartTime,\n\t\t\t\tcolor: {\n\t\t\t\t\tbackground: color,\n\t\t\t\t\tborder: this.buySellMarkStrokeColor,\n\t\t\t\t},\n\t\t\t\tborderWidth: 1,\n\t\t\t\thoveredBorderWidth: 1,\n\t\t\t\ttext: `${isLong ? 'Long' : 'Short'} at $${formatPrice(avgPrice)}`,\n\t\t\t\tlabel: isLong ? 'B' : 'S',\n\t\t\t\tlabelFontColor: this.buySellMarkStrokeColor,\n\t\t\t\tminSize: 16,\n\t\t\t};\n\t\t});\n\n\t\tonDataCallback(tradeMarks);\n\t}\n\n\tasync getBars(\n\t\tsymbolInfo: {\n\t\t\tname: string;\n\t\t\tticker?: string;\n\t\t},\n\t\tresolution: string,\n\t\tperiodParams: {\n\t\t\tcountBack: number;\n\t\t\tfrom: number;\n\t\t\tto: number;\n\t\t},\n\t\tonResult: (\n\t\t\tbars: TVBar[],\n\t\t\tmeta?: {\n\t\t\t\tnoData: boolean;\n\t\t\t}\n\t\t) => void,\n\t\t_onError\n\t) {\n\t\t// Can automatically return no data if the requested range is before the Drift V2 launch\n\t\tif (periodParams.to < DRIFT_V2_START_TS) {\n\t\t\tonResult([], {\n\t\t\t\tnoData: true,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst symbolToUse = symbolInfo.ticker ?? symbolInfo.name;\n\n\t\tconst targetResolution =\n\t\t\ttvResolutionStringToStandardResolutionString(resolution);\n\t\tconst targetMarket = findMarketBySymbol(\n\t\t\tsymbolToUse,\n\t\t\tthis.perpMarketConfigs,\n\t\t\tthis.spotMarketConfigs\n\t\t);\n\t\tconst targetMarketId =\n\t\t\ttargetMarket.type === 'perp'\n\t\t\t\t? MarketId.createPerpMarket(targetMarket.config.marketIndex)\n\t\t\t\t: MarketId.createSpotMarket(targetMarket.config.marketIndex);\n\n\t\tconst fetchCandles = async () => {\n\t\t\tconst formattedTsRange = this.formatTVRequestedRange(\n\t\t\t\tperiodParams.from,\n\t\t\t\tperiodParams.to,\n\t\t\t\ttargetResolution\n\t\t\t);\n\n\t\t\tconst candles = await this.candleClient.fetch({\n\t\t\t\tenv: this.env,\n\t\t\t\tmarketId: targetMarketId,\n\t\t\t\tresolution: targetResolution,\n\t\t\t\tfromTs: formattedTsRange.from,\n\t\t\t\ttoTs: formattedTsRange.to,\n\t\t\t});\n\t\t\treturn candles;\n\t\t};\n\n\t\tconst candlesResult = await PollingSequenceGuard.fetch(\n\t\t\tcandleFetchingPollKey,\n\t\t\tfetchCandles\n\t\t);\n\n\t\tif (candlesResult.length === 0) {\n\t\t\tonResult([], {\n\t\t\t\tnoData: true,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst bars = candlesResult.map((candle) =>\n\t\t\tcandleToTvBar(candle, this.candleType)\n\t\t);\n\n\t\tonResult(bars, {\n\t\t\tnoData: candlesResult.length === 0,\n\t\t});\n\n\t\treturn;\n\t}\n\n\tasync subscribeBars(\n\t\tsymbolInfo,\n\t\tresolution,\n\t\tonTick,\n\t\tsubscriberGuid: string,\n\t\tonResetCache\n\t) {\n\t\tthis.onResetCache = onResetCache;\n\n\t\tconst targetResolution =\n\t\t\ttvResolutionStringToStandardResolutionString(resolution);\n\t\tconst targetMarket = findMarketBySymbol(\n\t\t\tsymbolInfo.ticker,\n\t\t\tthis.perpMarketConfigs,\n\t\t\tthis.spotMarketConfigs\n\t\t);\n\t\tconst targetMarketId =\n\t\t\ttargetMarket.type === 'perp'\n\t\t\t\t? MarketId.createPerpMarket(targetMarket.config.marketIndex)\n\t\t\t\t: MarketId.createSpotMarket(targetMarket.config.marketIndex);\n\n\t\t// First create the subscription and wait for it to be ready\n\t\tawait this.candleClient.subscribe(\n\t\t\t{\n\t\t\t\tresolution: targetResolution,\n\t\t\t\tmarketId: targetMarketId,\n\t\t\t\tenv: this.env,\n\t\t\t},\n\t\t\tsubscriberGuid\n\t\t);\n\n\t\t// Then set up the event listener once the eventBus exists\n\t\tthis.candleClient.on(subscriberGuid, 'candle-update', (newCandle) => {\n\t\t\tconst newBar = candleToTvBar(newCandle, this.candleType);\n\n\t\t\tonTick(newBar);\n\t\t});\n\t}\n\n\tunsubscribeBars(listenerGuid: string): void {\n\t\tthis.candleClient.unsubscribe(listenerGuid);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tvFeed.js","sourceRoot":"","sources":["../../src/clients/tvFeed.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCandleResolution,\n\tDriftClient,\n\tPerpMarketConfig,\n\tPRICE_PRECISION_EXP,\n\tSpotMarketConfig,\n} from '@drift-labs/sdk';\nimport { CandleType, JsonCandle, JsonTrade, MarketId } from '../types';\nimport { UIEnv } from '../types/UIEnv';\nimport { Candle } from '../utils/candles/Candle';\nimport { PollingSequenceGuard } from '../utils/pollingSequenceGuard';\nimport { CandleClient } from './candleClient';\nimport { MARKET_UTILS } from '../_deprecated/market-utils';\n\nconst DRIFT_V2_START_TS = 1668470400; // 15th November 2022 ... 2022-11-15T00:00:00.000Z\n\ntype MarketDecimalConfig = Record<string, number>;\n\nconst resolutions = [\n\t'1',\n\t'3',\n\t'5',\n\t'15',\n\t'30',\n\t'60',\n\t'240',\n\t'6H',\n\t'8H',\n\t'1D',\n\t'3D',\n\t'1W',\n\t'1M',\n];\n\nconst tvResolutionStringToStandardResolutionString = (\n\ttvResolutionString\n): CandleResolution => {\n\tswitch (tvResolutionString) {\n\t\tcase '1':\n\t\t\treturn '1';\n\t\tcase '5':\n\t\t\treturn '5';\n\t\tcase '15':\n\t\t\treturn '15';\n\t\tcase '60':\n\t\t\treturn '60';\n\t\tcase '240':\n\t\t\treturn '240';\n\t\tcase 'D':\n\t\tcase '1D':\n\t\t\treturn 'D';\n\t\tcase 'W':\n\t\tcase '1W':\n\t\t\treturn 'W';\n\t\tcase 'M':\n\t\tcase '1M':\n\t\t\treturn 'M';\n\t}\n};\n\ntype TVMarketInfo = {\n\tsymbol: string;\n\tfull_name: string;\n\tdescription: string;\n\texchange: string;\n\tticker: string;\n\ttype: string;\n};\n\nconst DATAFEED_CONFIG = {\n\texchanges: [],\n\tsupported_resolutions: [...resolutions],\n\tcurrency_codes: [],\n\tsupports_marks: true,\n\tsupports_time: false,\n\tsupports_timescale_marks: false,\n\tsymbols_types: [],\n};\n\ntype TVBar = {\n\t/** Bar time.\n\t * Amount of **milliseconds** since Unix epoch start in **UTC** timezone.\n\t * `time` for daily, weekly, and monthly bars is expected to be a trading day (not session start day) at 00:00 UTC.\n\t * The library adjusts time according to `session` from {@link LibrarySymbolInfo}.\n\t */\n\ttime: number;\n\t/** Opening price */\n\topen: number;\n\t/** High price */\n\thigh: number;\n\t/** Low price */\n\tlow: number;\n\t/** Closing price */\n\tclose: number;\n\t/** Trading Volume */\n\tvolume?: number;\n};\n\nconst findMarketBySymbol = (\n\tsymbol: string,\n\tperpMarketConfigs: PerpMarketConfig[],\n\tspotMarketConfigs: SpotMarketConfig[]\n):\n\t| {\n\t\t\ttype: 'perp';\n\t\t\tconfig: PerpMarketConfig;\n\t }\n\t| {\n\t\t\ttype: 'spot';\n\t\t\tconfig: SpotMarketConfig;\n\t } => {\n\tif (!symbol) {\n\t\tthrow new Error(`TVFeed::No symbol provided`);\n\t}\n\n\tconst sanitisedSymbol = symbol.toLowerCase().replace('/usdc', ''); // Lowercase and replace /usdc (for spot markets) to santise symbol for lookup\n\n\tconst isPerp = sanitisedSymbol.toLowerCase().includes('perp');\n\n\tconst matchingMarketConfig = isPerp\n\t\t? perpMarketConfigs.find((mkt) =>\n\t\t\t\tmkt.symbol.toLowerCase().includes(sanitisedSymbol.toLowerCase())\n\t\t )\n\t\t: spotMarketConfigs.find((mkt) =>\n\t\t\t\tmkt.symbol.toLowerCase().includes(sanitisedSymbol.toLowerCase())\n\t\t );\n\n\tif (!matchingMarketConfig) {\n\t\tthrow new Error(`TVFeed::No market found for symbol ${symbol}`);\n\t}\n\n\tif (isPerp) {\n\t\treturn {\n\t\t\ttype: 'perp',\n\t\t\tconfig: matchingMarketConfig as PerpMarketConfig,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: 'spot',\n\t\tconfig: matchingMarketConfig as SpotMarketConfig,\n\t};\n};\n\nconst candleFetchingPollKey = Symbol('candleFetchingPollKey');\n\nconst candleToTvBar = (candle: JsonCandle, candleType: CandleType): TVBar => {\n\tconst useOraclePrice = candleType === CandleType.ORACLE_PRICE;\n\n\treturn {\n\t\ttime: candle.ts * 1000,\n\t\topen: useOraclePrice ? candle.oracleOpen : candle.fillOpen,\n\t\thigh: useOraclePrice ? candle.oracleHigh : candle.fillHigh,\n\t\tlow: useOraclePrice ? candle.oracleLow : candle.fillLow,\n\t\tclose: useOraclePrice ? candle.oracleClose : candle.fillClose,\n\t\tvolume: candle.quoteVolume,\n\t};\n};\n\nconst PerpMarketConfigToTVMarketInfo = (\n\tmarketConfig: PerpMarketConfig\n): TVMarketInfo => {\n\treturn {\n\t\tsymbol: marketConfig.symbol,\n\t\tfull_name: marketConfig.fullName,\n\t\tdescription: marketConfig.fullName,\n\t\texchange: 'Drift',\n\t\tticker: marketConfig.symbol,\n\t\ttype: 'crypto',\n\t};\n};\n\nconst SpotMarketConfigToTVMarketInfo = (\n\tmarketConfig: SpotMarketConfig\n): TVMarketInfo => {\n\treturn {\n\t\tsymbol: marketConfig.symbol,\n\t\tfull_name: marketConfig.symbol,\n\t\tdescription: marketConfig.symbol,\n\t\texchange: 'Drift',\n\t\tticker: marketConfig.symbol,\n\t\ttype: 'crypto',\n\t};\n};\n\ninterface TvAppTradeDataManager {\n\tgetFilledOrdersData(startDate: number, endDate: number): Promise<JsonTrade[]>;\n\tgetCurrentSubAccountAddress(): string | null;\n}\n\nexport class DriftTvFeed {\n\tprivate env: UIEnv;\n\tprivate candleType: CandleType;\n\tprivate candleClient: CandleClient;\n\tprivate driftClient: DriftClient;\n\tprivate onResetCache: () => void;\n\tprivate perpMarketConfigs: PerpMarketConfig[];\n\tprivate spotMarketConfigs: SpotMarketConfig[];\n\tprivate positiveColor: string;\n\tprivate negativeColor: string;\n\tprivate buySellMarkStrokeColor: string;\n\tprivate tvAppTradeDataManager: TvAppTradeDataManager | undefined;\n\tprivate marketDecimalConfig: MarketDecimalConfig | undefined;\n\n\tconstructor(\n\t\tenv: UIEnv,\n\t\tcandleType: CandleType,\n\t\tdriftClient: DriftClient,\n\t\tperpMarketConfigs: PerpMarketConfig[],\n\t\tspotMarketConfigs: SpotMarketConfig[],\n\t\tpositiveColor: string,\n\t\tnegativeColor: string,\n\t\tbuySellMarkStrokeColor: string,\n\t\ttvAppTradeDataManager?: TvAppTradeDataManager,\n\t\tmarketDecimalConfig?: MarketDecimalConfig\n\t) {\n\t\tthis.env = env;\n\t\tthis.candleType = candleType;\n\t\tthis.candleClient = new CandleClient();\n\t\tthis.driftClient = driftClient;\n\t\tthis.perpMarketConfigs = perpMarketConfigs;\n\t\tthis.spotMarketConfigs = spotMarketConfigs;\n\t\tthis.positiveColor = positiveColor;\n\t\tthis.negativeColor = negativeColor;\n\t\tthis.buySellMarkStrokeColor = buySellMarkStrokeColor;\n\t\tthis.tvAppTradeDataManager = tvAppTradeDataManager;\n\t\tthis.marketDecimalConfig = marketDecimalConfig;\n\t}\n\n\tpublic resetCache() {\n\t\tthis.onResetCache?.();\n\t}\n\n\tprivate searchMarkets = (symbol: string): TVMarketInfo[] => {\n\t\tconst res: Pick<\n\t\t\tTVMarketInfo,\n\t\t\t'symbol' | 'ticker' | 'full_name' | 'description'\n\t\t>[] = [];\n\n\t\tconst currentPerpMarkets = this.perpMarketConfigs;\n\t\tconst currentSpotMarkets = this.spotMarketConfigs;\n\n\t\tif (!symbol) {\n\t\t\tres.push(PerpMarketConfigToTVMarketInfo(currentPerpMarkets[0]));\n\t\t} else {\n\t\t\tfor (const market of currentPerpMarkets) {\n\t\t\t\tconst lowerCaseMarket = market.symbol.toLowerCase();\n\t\t\t\tif (lowerCaseMarket.includes(symbol.toLowerCase())) {\n\t\t\t\t\tres.push(PerpMarketConfigToTVMarketInfo(market));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const market of currentSpotMarkets) {\n\t\t\t\tconst lowerCaseMarket = market.symbol.toLowerCase();\n\t\t\t\tif (lowerCaseMarket.includes(symbol.toLowerCase())) {\n\t\t\t\t\tres.push(SpotMarketConfigToTVMarketInfo(market));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn res.map((mkt) => {\n\t\t\treturn {\n\t\t\t\t...mkt,\n\t\t\t\texchange: 'Drift',\n\t\t\t\ttype: 'crypto',\n\t\t\t};\n\t\t});\n\t};\n\n\t// IExternalDatafeed implementation\n\tonReady(callback) {\n\t\t// using setTimeout because tradingview wants this to resolve asynchronously\n\t\tsetTimeout(() => callback(DATAFEED_CONFIG), 0);\n\t}\n\n\t// IDatafeedChartApi implementation\n\tsearchSymbols(\n\t\tuserInput: string,\n\t\t_exchange: string,\n\t\t_symbolType: string,\n\t\tonResult\n\t): void {\n\t\tif (!userInput) return onResult([]);\n\n\t\tconst res = this.searchMarkets(userInput);\n\n\t\tonResult(res);\n\t}\n\n\tresolveSymbol(symbolName: string, onResolve, onError): void {\n\t\tconst targetMarket = findMarketBySymbol(\n\t\t\tsymbolName,\n\t\t\tthis.perpMarketConfigs,\n\t\t\tthis.spotMarketConfigs\n\t\t);\n\n\t\tif (targetMarket) {\n\t\t\tconst tvMarketName = targetMarket.config.symbol;\n\n\t\t\t// Use market-specific decimal precision from configuration\n\t\t\tconst baseAssetSymbol = MARKET_UTILS.getBaseAssetSymbol(symbolName);\n\t\t\tconst marketDecimals = this.marketDecimalConfig?.[baseAssetSymbol];\n\n\t\t\tlet priceScale: number;\n\n\t\t\tif (marketDecimals !== undefined) {\n\t\t\t\t// Use configured market decimals\n\t\t\t\tpriceScale = 10 ** marketDecimals;\n\t\t\t} else {\n\t\t\t\t// Fall back to original tick size calculation\n\t\t\t\tlet tickSize: number;\n\n\t\t\t\tif (targetMarket.type === 'perp') {\n\t\t\t\t\ttickSize = this.driftClient\n\t\t\t\t\t\t.getPerpMarketAccount(targetMarket.config.marketIndex)\n\t\t\t\t\t\t.amm.orderTickSize.toNumber();\n\t\t\t\t} else {\n\t\t\t\t\ttickSize = this.driftClient\n\t\t\t\t\t\t.getSpotMarketAccount(targetMarket.config.marketIndex)\n\t\t\t\t\t\t.orderTickSize.toNumber();\n\t\t\t\t}\n\n\t\t\t\tconst pricePrecisionExp = PRICE_PRECISION_EXP.toNumber();\n\t\t\t\tconst tickSizeExp = Math.ceil(Math.log10(tickSize));\n\t\t\t\tconst priceScaleExponent = Math.max(0, pricePrecisionExp - tickSizeExp);\n\t\t\t\tpriceScale = 10 ** priceScaleExponent;\n\t\t\t}\n\n\t\t\tonResolve({\n\t\t\t\tname: tvMarketName,\n\t\t\t\tfull_name: tvMarketName,\n\t\t\t\tdescription: tvMarketName,\n\t\t\t\texchange: 'Drift',\n\t\t\t\tticker: targetMarket.config.symbol,\n\t\t\t\ttype: 'crypto',\n\t\t\t\tsession: '24x7',\n\t\t\t\ttimezone: 'Etc/UTC',\n\t\t\t\tlisted_exchange: 'Drift',\n\t\t\t\tformat: 'price',\n\t\t\t\tpricescale: priceScale,\n\t\t\t\tminmov: 1,\n\t\t\t\tsupported_resolutions: [...resolutions],\n\t\t\t\thas_intraday: true,\n\t\t\t\tintraday_multipliers: ['1', '5', '15', '60', '240'],\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tonError(`Couldn't find market for symbol ${symbolName}`);\n\t}\n\n\t/**\n\t * TradingView sometimes asks for a FROM timestamp halfway between two candles, this isn't compatible with the new candles API so we round these down the nearest candle - which should be the exact same candle!!\n\t * @param timestamp\n\t * @param resolution\n\t * @returns\n\t */\n\tprivate roundFromTimestampToExactCandleTs = (\n\t\ttimestamp: number,\n\t\tresolution: CandleResolution\n\t) => {\n\t\tconst ROUND_UP = true;\n\n\t\tconst timestampMs = timestamp * 1000;\n\t\tconst candleLengthMs = Candle.resolutionStringToCandleLengthMs(resolution);\n\n\t\tconst remainderMs = timestampMs % candleLengthMs;\n\n\t\tif (remainderMs === 0) {\n\t\t\treturn timestamp;\n\t\t}\n\n\t\tconst roundedDownTimestampMs = timestampMs - remainderMs;\n\n\t\tconst roundedTimestampMs = ROUND_UP\n\t\t\t? roundedDownTimestampMs + candleLengthMs\n\t\t\t: roundedDownTimestampMs;\n\n\t\treturn roundedTimestampMs / 1000;\n\t};\n\n\tprivate formatTVRequestedRange = (\n\t\tfromTs: number,\n\t\ttoTs: number,\n\t\tresolution: CandleResolution\n\t) => {\n\t\tconst formattedFromTs = this.roundFromTimestampToExactCandleTs(\n\t\t\tfromTs,\n\t\t\tresolution\n\t\t); // TradingView sometimes asks for a FROM timestamp halfway between two candles, so we round down to the nearest candle\n\n\t\tconst formattedToTs = Math.floor(Math.min(toTs, Date.now() / 1000)); // TradingView sometimes asks for a TO timestamp in the future, so we cap it at the current timestamp\n\n\t\treturn {\n\t\t\tfrom: formattedFromTs,\n\t\t\tto: formattedToTs,\n\t\t};\n\t};\n\t// Helper function to convert resolution string to seconds\n\tprivate getResolutionInSeconds(resolution: string): number {\n\t\t// Resolution can be: '1', '3', '5', '15', '30', '60', '120', '240', '1D', '1W', etc.\n\t\tif (resolution.includes('D')) {\n\t\t\tconst days = parseInt(resolution);\n\t\t\treturn days * 24 * 60 * 60;\n\t\t}\n\t\tif (resolution.includes('W')) {\n\t\t\tconst weeks = parseInt(resolution);\n\t\t\treturn weeks * 7 * 24 * 60 * 60;\n\t\t}\n\t\tif (resolution.includes('M')) {\n\t\t\tconst months = parseInt(resolution);\n\t\t\treturn months * 30 * 24 * 60 * 60; // Approximate\n\t\t}\n\t\t// Default: minutes\n\t\tconst minutes = parseInt(resolution);\n\t\treturn minutes * 60;\n\t}\n\n\t// https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.Mark/ reference for marks type\n\tasync getMarks(_symbolInfo, startDate, endDate, onDataCallback, _resolution) {\n\t\tif (!this.tvAppTradeDataManager) {\n\t\t\treturn;\n\t\t}\n\t\tconst orderHistory = await this.tvAppTradeDataManager.getFilledOrdersData(\n\t\t\tstartDate,\n\t\t\tendDate\n\t\t);\n\n\t\tconst currentUserAccount =\n\t\t\tthis.tvAppTradeDataManager.getCurrentSubAccountAddress();\n\n\t\t// Calculate resolution in seconds for aligning marks to candle start times\n\t\tconst resolutionInSeconds = this.getResolutionInSeconds(_resolution);\n\n\t\tconst tradeMarks = orderHistory.map((trade) => {\n\t\t\tconst currentUserIsMaker = trade.maker === currentUserAccount;\n\t\t\tconst currentUserIsTaker = trade.taker === currentUserAccount;\n\n\t\t\tlet isLong: boolean;\n\t\t\tif (currentUserIsMaker) {\n\t\t\t\tisLong = trade.makerOrderDirection === 'long';\n\t\t\t} else if (currentUserIsTaker) {\n\t\t\t\tisLong = trade.takerOrderDirection === 'long';\n\t\t\t}\n\n\t\t\tconst color = isLong ? this.positiveColor : this.negativeColor;\n\t\t\tconst baseAmount = Number(trade.baseAssetAmountFilled);\n\t\t\tconst quoteAmount = Number(trade.quoteAssetAmountFilled);\n\t\t\tconst avgPrice = quoteAmount / baseAmount;\n\n\t\t\tconst formatPrice = (price: number): string => {\n\t\t\t\tif (price >= 1) {\n\t\t\t\t\treturn price.toLocaleString('en-US', {\n\t\t\t\t\t\tminimumFractionDigits: 2,\n\t\t\t\t\t\tmaximumFractionDigits: 2,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (price === 0) return '0.0000';\n\t\t\t\t\tif (price < 0.00001) return '<0.00001';\n\t\t\t\t\treturn price.toFixed(4);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Align trade time to candle start time\n\t\t\t// TradingView requires mark time to exactly match a bar time\n\t\t\tconst candleStartTime =\n\t\t\t\tMath.floor(trade.ts / resolutionInSeconds) * resolutionInSeconds;\n\n\t\t\treturn {\n\t\t\t\tid: trade.txSig,\n\t\t\t\ttime: candleStartTime,\n\t\t\t\tcolor: {\n\t\t\t\t\tbackground: color,\n\t\t\t\t\tborder: this.buySellMarkStrokeColor,\n\t\t\t\t},\n\t\t\t\tborderWidth: 1,\n\t\t\t\thoveredBorderWidth: 1,\n\t\t\t\ttext: `${isLong ? 'Long' : 'Short'} at $${formatPrice(avgPrice)}`,\n\t\t\t\tlabel: isLong ? 'B' : 'S',\n\t\t\t\tlabelFontColor: this.buySellMarkStrokeColor,\n\t\t\t\tminSize: 16,\n\t\t\t};\n\t\t});\n\n\t\tonDataCallback(tradeMarks);\n\t}\n\n\tasync getBars(\n\t\tsymbolInfo: {\n\t\t\tname: string;\n\t\t\tticker?: string;\n\t\t},\n\t\tresolution: string,\n\t\tperiodParams: {\n\t\t\tcountBack: number;\n\t\t\tfrom: number;\n\t\t\tto: number;\n\t\t},\n\t\tonResult: (\n\t\t\tbars: TVBar[],\n\t\t\tmeta?: {\n\t\t\t\tnoData: boolean;\n\t\t\t}\n\t\t) => void,\n\t\t_onError\n\t) {\n\t\t// Can automatically return no data if the requested range is before the Drift V2 launch\n\t\tif (periodParams.to < DRIFT_V2_START_TS) {\n\t\t\tonResult([], {\n\t\t\t\tnoData: true,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst symbolToUse = symbolInfo.ticker ?? symbolInfo.name;\n\n\t\tconst targetResolution =\n\t\t\ttvResolutionStringToStandardResolutionString(resolution);\n\t\tconst targetMarket = findMarketBySymbol(\n\t\t\tsymbolToUse,\n\t\t\tthis.perpMarketConfigs,\n\t\t\tthis.spotMarketConfigs\n\t\t);\n\t\tconst targetMarketId =\n\t\t\ttargetMarket.type === 'perp'\n\t\t\t\t? MarketId.createPerpMarket(targetMarket.config.marketIndex)\n\t\t\t\t: MarketId.createSpotMarket(targetMarket.config.marketIndex);\n\n\t\tconst fetchCandles = async () => {\n\t\t\tconst formattedTsRange = this.formatTVRequestedRange(\n\t\t\t\tperiodParams.from,\n\t\t\t\tperiodParams.to,\n\t\t\t\ttargetResolution\n\t\t\t);\n\n\t\t\tconst candles = await this.candleClient.fetch({\n\t\t\t\tenv: this.env,\n\t\t\t\tmarketId: targetMarketId,\n\t\t\t\tresolution: targetResolution,\n\t\t\t\tfromTs: formattedTsRange.from,\n\t\t\t\ttoTs: formattedTsRange.to,\n\t\t\t});\n\t\t\treturn candles;\n\t\t};\n\n\t\tconst candlesResult = await PollingSequenceGuard.fetch(\n\t\t\tcandleFetchingPollKey,\n\t\t\tfetchCandles\n\t\t);\n\n\t\tif (candlesResult.length === 0) {\n\t\t\tonResult([], {\n\t\t\t\tnoData: true,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst bars = candlesResult.map((candle) =>\n\t\t\tcandleToTvBar(candle, this.candleType)\n\t\t);\n\n\t\tonResult(bars, {\n\t\t\tnoData: candlesResult.length === 0,\n\t\t});\n\n\t\treturn;\n\t}\n\n\tasync subscribeBars(\n\t\tsymbolInfo,\n\t\tresolution,\n\t\tonTick,\n\t\tsubscriberGuid: string,\n\t\tonResetCache\n\t) {\n\t\tthis.onResetCache = onResetCache;\n\n\t\tconst targetResolution =\n\t\t\ttvResolutionStringToStandardResolutionString(resolution);\n\t\tconst targetMarket = findMarketBySymbol(\n\t\t\tsymbolInfo.ticker,\n\t\t\tthis.perpMarketConfigs,\n\t\t\tthis.spotMarketConfigs\n\t\t);\n\t\tconst targetMarketId =\n\t\t\ttargetMarket.type === 'perp'\n\t\t\t\t? MarketId.createPerpMarket(targetMarket.config.marketIndex)\n\t\t\t\t: MarketId.createSpotMarket(targetMarket.config.marketIndex);\n\n\t\t// First create the subscription and wait for it to be ready\n\t\tawait this.candleClient.subscribe(\n\t\t\t{\n\t\t\t\tresolution: targetResolution,\n\t\t\t\tmarketId: targetMarketId,\n\t\t\t\tenv: this.env,\n\t\t\t},\n\t\t\tsubscriberGuid\n\t\t);\n\n\t\t// Then set up the event listener once the eventBus exists\n\t\tthis.candleClient.on(subscriberGuid, 'candle-update', (newCandle) => {\n\t\t\tconst newBar = candleToTvBar(newCandle, this.candleType);\n\n\t\t\tonTick(newBar);\n\t\t});\n\t}\n\n\tunsubscribeBars(listenerGuid: string): void {\n\t\tthis.candleClient.unsubscribe(listenerGuid);\n\t}\n}\n"]}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DriftOperations = void 0;
|
|
4
4
|
const sdk_1 = require("@drift-labs/sdk");
|
|
5
|
-
const
|
|
5
|
+
const market_utils_1 = require("../../../../../_deprecated/market-utils");
|
|
6
6
|
const constants_1 = require("../../../../../constants");
|
|
7
|
-
const
|
|
7
|
+
const trading_utils_1 = require("../../../../../_deprecated/trading-utils");
|
|
8
8
|
const deposit_1 = require("../../../../base/actions/spot/deposit");
|
|
9
9
|
const create_1 = require("../../../../base/actions/user/create");
|
|
10
10
|
const withdraw_1 = require("../../../../base/actions/spot/withdraw");
|
|
@@ -81,8 +81,8 @@ class DriftOperations {
|
|
|
81
81
|
async createUserAndDeposit(params) {
|
|
82
82
|
var _a;
|
|
83
83
|
const { depositAmount, depositSpotMarketIndex, newAccountName, maxLeverage, poolId = constants_1.MAIN_POOL_ID, referrerName, } = params;
|
|
84
|
-
const spotMarketConfig =
|
|
85
|
-
const customMaxMarginRatio =
|
|
84
|
+
const spotMarketConfig = market_utils_1.MARKET_UTILS.getMarketConfig(this.driftClient.env, sdk_1.MarketType.SPOT, depositSpotMarketIndex);
|
|
85
|
+
const customMaxMarginRatio = trading_utils_1.TRADING_UTILS.convertLeverageToMarginRatio(maxLeverage !== null && maxLeverage !== void 0 ? maxLeverage : 0);
|
|
86
86
|
let userStatsAccount = undefined;
|
|
87
87
|
try {
|
|
88
88
|
userStatsAccount = (_a = this.driftClient.userStats) === null || _a === void 0 ? void 0 : _a.getAccount();
|
|
@@ -200,7 +200,7 @@ class DriftOperations {
|
|
|
200
200
|
*/
|
|
201
201
|
async deposit(params) {
|
|
202
202
|
const { subAccountId, amount, spotMarketIndex, isMaxBorrowRepayment } = params;
|
|
203
|
-
const spotMarketConfig =
|
|
203
|
+
const spotMarketConfig = market_utils_1.MARKET_UTILS.getMarketConfig(this.driftClient.env, sdk_1.MarketType.SPOT, spotMarketIndex);
|
|
204
204
|
const user = this.getUserAccountCache().getUser(subAccountId, this.driftClient.wallet.publicKey);
|
|
205
205
|
if (!user) {
|
|
206
206
|
throw new Error('User not found');
|
|
@@ -240,7 +240,7 @@ class DriftOperations {
|
|
|
240
240
|
*/
|
|
241
241
|
async withdraw(params) {
|
|
242
242
|
const { subAccountId, amount, spotMarketIndex, isBorrow = false, isMax = false, } = params;
|
|
243
|
-
const spotMarketConfig =
|
|
243
|
+
const spotMarketConfig = market_utils_1.MARKET_UTILS.getMarketConfig(this.driftClient.env, sdk_1.MarketType.SPOT, spotMarketIndex);
|
|
244
244
|
const accountData = this.getUserAccountCache().getUser(subAccountId, this.driftClient.wallet.publicKey);
|
|
245
245
|
if (!accountData) {
|
|
246
246
|
throw new Error('User not found');
|
|
@@ -471,8 +471,8 @@ class DriftOperations {
|
|
|
471
471
|
const jupiterClient = new sdk_1.JupiterClient({
|
|
472
472
|
connection: this.driftClient.connection,
|
|
473
473
|
});
|
|
474
|
-
const inputMint =
|
|
475
|
-
const outputMint =
|
|
474
|
+
const inputMint = market_utils_1.MARKET_UTILS.getMarketConfig(this.driftClient.env, sdk_1.MarketType.SPOT, params.fromMarketIndex).mint;
|
|
475
|
+
const outputMint = market_utils_1.MARKET_UTILS.getMarketConfig(this.driftClient.env, sdk_1.MarketType.SPOT, params.toMarketIndex).mint;
|
|
476
476
|
const jupiterQuote = await jupiterClient.getQuote({
|
|
477
477
|
inputMint,
|
|
478
478
|
outputMint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/drift/Drift/clients/AuthorityDrift/DriftOperations/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBigNum,\n\tDriftClient,\n\tJupiterClient,\n\tMarketType,\n\tMAX_LEVERAGE_ORDER_SIZE,\n\tQuoteResponse,\n\tSwapMode,\n\tTxParams,\n\tUnifiedSwapClient,\n\tUser,\n\tUserStatsAccount,\n\tZERO,\n} from '@drift-labs/sdk';\nimport { TransactionSignature } from '@solana/web3.js';\nimport { MARKET_UTILS } from '../../../../../common-ui-utils/market';\nimport { MAIN_POOL_ID } from '../../../../../constants';\nimport { TRADING_UTILS } from '../../../../../common-ui-utils/trading';\nimport { UserAccountCache } from '../../../stores/UserAccountCache';\nimport { createDepositTxn } from '../../../../base/actions/spot/deposit';\nimport { createUserAndDepositCollateralBaseTxn } from '../../../../base/actions/user/create';\nimport { createWithdrawTxn } from '../../../../base/actions/spot/withdraw';\nimport { deleteUserTxn } from '../../../../base/actions/user/delete';\nimport { createSettlePnlTxn } from '../../../../base/actions/perp/settlePnl';\nimport {\n\tCreateUserAndDepositParams,\n\tDepositParams,\n\tWithdrawParams,\n\tPerpOrderParams,\n\tSwapParams,\n\tSettleAccountPnlParams,\n\tCancelOrdersParams,\n\tCreateRevenueShareEscrowParams,\n} from './types';\nimport { createCancelOrdersTxn } from '../../../../base/actions/trade/cancelOrder';\nimport {\n\tcreateOpenPerpMarketOrder,\n\tOpenPerpMarketOrderParams,\n} from '../../../../base/actions/trade/openPerpOrder/openPerpMarketOrder';\nimport { createSwapTxn } from '../../../../base/actions/trade/swap';\nimport { createOpenPerpNonMarketOrder } from '../../../../base/actions/trade/openPerpOrder/openPerpNonMarketOrder';\nimport { createRevenueShareEscrowTxn } from '../../../../base/actions/builder/createRevenueShareEscrow';\n\n/**\n * Handles majority of the relevant operations on the Drift program including deposits,\n * withdrawals, position management, and trading operations.\n *\n * This class encapsulates the trading logic and provides a clean API for\n * executing various trading operations while handling common patterns like\n * token address resolution and transaction preparation.\n */\nexport class DriftOperations {\n\tstatic readonly DEFAULT_TX_PARAMS: TxParams = {\n\t\tcomputeUnitsPrice: 50_000,\n\t\tuseSimulatedComputeUnits: true,\n\t\tcomputeUnitsBufferMultiplier: 1.3,\n\t};\n\n\tstatic readonly MAX_COMPUTE_UNITS_PRICE = 1e15 / 10 / 1_400_000; // 1e15 = 1 SOL worth of micro lamports; 1e15 / 10 = 0.1 SOL worth of micro lamports; 1.4M = max compute units;\n\n\t/**\n\t * Creates a new DriftOperations instance.\n\t *\n\t * @param driftClient - The DriftClient instance for executing transactions\n\t * @param getUserAccountCache - Function to get the user account cache. We lazily load the user account cache, so that we always get the latest user account data.\n\t * @param getPriorityFee - Function to get current priority fee in micro lamports\n\t */\n\tconstructor(\n\t\tprivate driftClient: DriftClient,\n\t\tprivate getUserAccountCache: () => UserAccountCache,\n\t\tprivate dlobServerHttpUrl: string,\n\t\tprivate swiftServerUrl: string,\n\t\tprivate getPriorityFee: () => number\n\t) {}\n\n\t/**\n\t * Gets transaction parameters with dynamic priority fees.\n\t * Falls back to default if priority fee function is not available.\n\t */\n\tgetTxParams(overrides?: Partial<TxParams>): TxParams {\n\t\tconst unsafePriorityFee = Math.floor(\n\t\t\tthis.getPriorityFee() ??\n\t\t\t\tDriftOperations.DEFAULT_TX_PARAMS.computeUnitsPrice\n\t\t);\n\n\t\tconst safePriorityFee = Math.min(\n\t\t\tunsafePriorityFee,\n\t\t\tDriftOperations.MAX_COMPUTE_UNITS_PRICE\n\t\t);\n\n\t\treturn {\n\t\t\t...DriftOperations.DEFAULT_TX_PARAMS,\n\t\t\tcomputeUnitsPrice: safePriorityFee,\n\t\t\t...overrides,\n\t\t};\n\t}\n\n\t/**\n\t * Creates a new user account and deposits initial collateral.\n\t *\n\t * This method handles the complete onboarding flow for new users including:\n\t * - Validating that the subaccount doesn't already exist\n\t * - Resolving referrer information if provided\n\t * - Getting the correct token address for deposits\n\t * - Creating the user account with custom leverage settings\n\t * - Subscribing to the new user's account updates\n\t *\n\t * @param params - The parameters for user creation and initial deposit\n\t * @returns Promise resolving to transaction signature and user account public key\n\t *\n\t * @throws Error if subaccount already exists\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await tradingOps.createUserAndDeposit({\n\t * depositAmount: new BigNum(100),\n\t * depositSpotMarketIndex: 0, // USDC\n\t * name: \"Trading Account\",\n\t * maxLeverage: 5,\n\t * subAccountId: 0\n\t * });\n\t * ```\n\t */\n\tasync createUserAndDeposit(params: CreateUserAndDepositParams): Promise<{\n\t\ttxSig: TransactionSignature;\n\t\tuser: User;\n\t}> {\n\t\tconst {\n\t\t\tdepositAmount,\n\t\t\tdepositSpotMarketIndex,\n\t\t\tnewAccountName,\n\t\t\tmaxLeverage,\n\t\t\tpoolId = MAIN_POOL_ID,\n\t\t\treferrerName,\n\t\t} = params;\n\n\t\tconst spotMarketConfig = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tdepositSpotMarketIndex\n\t\t);\n\n\t\tconst customMaxMarginRatio = TRADING_UTILS.convertLeverageToMarginRatio(\n\t\t\tmaxLeverage ?? 0\n\t\t);\n\n\t\tlet userStatsAccount: UserStatsAccount | undefined = undefined;\n\n\t\ttry {\n\t\t\tuserStatsAccount = this.driftClient.userStats?.getAccount();\n\t\t} catch (error) {\n\t\t\t// ignore\n\t\t}\n\n\t\tconst { transaction, subAccountId } =\n\t\t\tawait createUserAndDepositCollateralBaseTxn({\n\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\tamount: depositAmount.val,\n\t\t\t\tspotMarketConfig: spotMarketConfig,\n\t\t\t\tauthority: this.driftClient.wallet.publicKey,\n\t\t\t\tuserStatsAccount: userStatsAccount,\n\t\t\t\taccountName: newAccountName,\n\t\t\t\treferrerName,\n\t\t\t\tcustomMaxMarginRatio,\n\t\t\t\tpoolId,\n\t\t\t\ttxParams: this.getTxParams(),\n\t\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(transaction);\n\n\t\tawait this.driftClient.addUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t); // adds user to driftclient's user map, subscribes to user account data\n\t\tconst user = this.driftClient.getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tuser.eventEmitter.on('update', () => {\n\t\t\tthis.getUserAccountCache().updateUserAccount(user);\n\t\t});\n\n\t\treturn {\n\t\t\ttxSig,\n\t\t\tuser,\n\t\t};\n\t}\n\n\t/**\n\t * Creates a RevenueShareEscrow account for the user.\n\t *\n\t * @param params - The parameters for creating a RevenueShareEscrow account\n\t * @returns Promise resolving to the transaction signature of the creation\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.createRevenueShareEscrow({\n\t * numOrders: 16,\n\t * builder: {\n\t * builderAuthority: new PublicKey(\"builderAuthority\"),\n\t * maxFeeTenthBps: 100,\n\t * },\n\t * });\n\t * ```\n\t */\n\tasync createRevenueShareEscrow(\n\t\tparams: CreateRevenueShareEscrowParams\n\t): Promise<TransactionSignature> {\n\t\tconst txn = await createRevenueShareEscrowTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tauthority: this.driftClient.wallet.publicKey,\n\t\t\tnumOrders: params.numOrders ?? 16,\n\t\t\tbuilder: params.builder,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(txn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Deletes a user account.\n\t *\n\t * This method removes a user's sub-account from the Drift.\n\t *\n\t * @param subAccountId - The ID of the sub-account to delete\n\t * @returns A promise that resolves to the transaction signature of the deletion\n\t *\n\t * @throws {Error} When the user account is not found in the cache\n\t *\n\t * @example\n\t * ```typescript\n\t * // Delete user sub-account with ID 0\n\t * const txSignature = await tradingOps.deleteUser(0);\n\t * console.log('User deleted with transaction:', txSignature);\n\t * ```\n\t */\n\tasync deleteUser(subAccountId: number): Promise<TransactionSignature> {\n\t\tconst user = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\t\tconst userStatsAccount = this.driftClient.userStats?.getAccount();\n\n\t\tif (!user) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tif (!userStatsAccount) {\n\t\t\tthrow new Error('User stats account not found');\n\t\t}\n\n\t\tconst deleteTxn = await deleteUserTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tuser: user.userClient,\n\t\t\tuserStatsAccount,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(deleteTxn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Deposits collateral into a user's spot market position.\n\t *\n\t * This method handles depositing tokens into a user's account, with optional\n\t * support for max borrow repayment scenarios where the deposit amount may be\n\t * over-estimated to ensure complete repayment of borrowed funds.\n\t *\n\t * @param params - The deposit parameters\n\t * @returns Promise resolving to the transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.deposit({\n\t * subAccountId: 0,\n\t * amount: new BigNum(50),\n\t * spotMarketIndex: 0, // USDC\n\t * isMaxBorrowRepayment: false\n\t * });\n\t * ```\n\t */\n\tasync deposit(params: DepositParams): Promise<TransactionSignature> {\n\t\tconst { subAccountId, amount, spotMarketIndex, isMaxBorrowRepayment } =\n\t\t\tparams;\n\n\t\tconst spotMarketConfig = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tspotMarketIndex\n\t\t);\n\n\t\tconst user = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!user) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst depositTxn = await createDepositTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tuser: user.userClient,\n\t\t\tamount: amount,\n\t\t\tspotMarketConfig: spotMarketConfig,\n\t\t\tisMaxBorrowRepayment,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(depositTxn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Withdraws collateral from a user's spot market position.\n\t *\n\t * This method handles withdrawing tokens from a user's account with options\n\t * for borrowing (if allowBorrow is true) or reduce-only withdrawals. For max\n\t * withdrawals with reduce-only, the amount is over-estimated to ensure\n\t * complete withdrawal.\n\t *\n\t * @param params - The withdrawal parameters\n\t * @returns Promise resolving to the transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.withdraw({\n\t * subAccountId: 0,\n\t * amount: new BigNum(25),\n\t * spotMarketIndex: 0, // USDC\n\t * allowBorrow: false,\n\t * isMax: false\n\t * });\n\t * ```\n\t */\n\tasync withdraw(params: WithdrawParams): Promise<TransactionSignature> {\n\t\tconst {\n\t\t\tsubAccountId,\n\t\t\tamount,\n\t\t\tspotMarketIndex,\n\t\t\tisBorrow = false,\n\t\t\tisMax = false,\n\t\t} = params;\n\n\t\tconst spotMarketConfig = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tspotMarketIndex\n\t\t);\n\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst withdrawTxn = await createWithdrawTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tamount,\n\t\t\tspotMarketConfig,\n\t\t\tuser: accountData.userClient,\n\t\t\tisBorrow,\n\t\t\tisMax,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(withdrawTxn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Opens a perpetual market order (placeholder for future implementation).\n\t *\n\t * This method will handle opening long or short positions in perpetual markets\n\t * with support for market and limit orders, reduce-only orders, and post-only orders.\n\t *\n\t * @param params - The perp order parameters\n\t * @returns Promise resolving to the transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.openPerpMarketOrder({\n\t * marketIndex: 0, // SOL-PERP\n\t * direction: 'long',\n\t * baseAssetAmount: new BigNum(1), // 1 SOL\n\t * orderType: 'market',\n\t * subAccountId: 0\n\t * });\n\t * ```\n\t */\n\tasync openPerpOrder(\n\t\tparams: PerpOrderParams\n\t): Promise<TransactionSignature | void> {\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tparams.subAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst user = accountData.userClient;\n\n\t\tconst processBracketOrders = (bracketOrdersInput?: {\n\t\t\ttakeProfitPrice?: BigNum;\n\t\t\tstopLossPrice?: BigNum;\n\t\t}) => {\n\t\t\tconst bracketOrders: OpenPerpMarketOrderParams['bracketOrders'] = {};\n\n\t\t\tif (bracketOrdersInput?.takeProfitPrice) {\n\t\t\t\tbracketOrders.takeProfit = {\n\t\t\t\t\ttriggerPrice: bracketOrdersInput.takeProfitPrice.val,\n\t\t\t\t\tbaseAssetAmount: params.size.val,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (bracketOrdersInput?.stopLossPrice) {\n\t\t\t\tbracketOrders.stopLoss = {\n\t\t\t\t\ttriggerPrice: bracketOrdersInput.stopLossPrice.val,\n\t\t\t\t\tbaseAssetAmount: params.size.val,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn bracketOrders;\n\t\t};\n\n\t\tconst amountBN = params.isMaxLeverage\n\t\t\t? MAX_LEVERAGE_ORDER_SIZE\n\t\t\t: params.size.val;\n\n\t\tswitch (params.orderConfig.orderType) {\n\t\t\tcase 'market': {\n\t\t\t\tconst useSwift = !params.orderConfig.disableSwift;\n\n\t\t\t\tconst bracketOrders = processBracketOrders(\n\t\t\t\t\tparams.orderConfig.bracketOrders\n\t\t\t\t);\n\n\t\t\t\t// we split the logic for SWIFT and non-SWIFT orders to achieve better type inference\n\t\t\t\tif (useSwift) {\n\t\t\t\t\tconst swiftOrderResult = await createOpenPerpMarketOrder({\n\t\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\t\tuseSwift: true,\n\t\t\t\t\t\tswiftOptions: {\n\t\t\t\t\t\t\twallet: {\n\t\t\t\t\t\t\t\t// @ts-ignore TODO: we might want to add signMessage to the IWallet interface\n\t\t\t\t\t\t\t\tsignMessage: this.driftClient.wallet.signMessage,\n\t\t\t\t\t\t\t\ttakerAuthority: this.driftClient.wallet.publicKey,\n\t\t\t\t\t\t\t\tsigningAuthority: this.driftClient.wallet.publicKey,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tswiftServerUrl: this.swiftServerUrl,\n\t\t\t\t\t\t\t...params.orderConfig.swiftOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\t\tamount: amountBN,\n\t\t\t\t\t\tbracketOrders,\n\t\t\t\t\t\tdlobServerHttpUrl: this.dlobServerHttpUrl,\n\t\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\t\toptionalAuctionParamsInputs:\n\t\t\t\t\t\t\tparams.orderConfig.optionalAuctionParamsInputs,\n\t\t\t\t\t\tbuilderParams: params.builderParams,\n\t\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t\t\tmarginMode: params.marginMode,\n\t\t\t\t\t\tisolatedPositionDepositsOverride:\n\t\t\t\t\t\t\tparams.isolatedPositionDepositsOverride,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn swiftOrderResult;\n\t\t\t\t} else {\n\t\t\t\t\tconst result = await createOpenPerpMarketOrder({\n\t\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\t\tamount: amountBN,\n\t\t\t\t\t\tbracketOrders,\n\t\t\t\t\t\toptionalAuctionParamsInputs:\n\t\t\t\t\t\t\tparams.orderConfig.optionalAuctionParamsInputs,\n\t\t\t\t\t\tdlobServerHttpUrl: this.dlobServerHttpUrl,\n\t\t\t\t\t\tuseSwift: false,\n\t\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t\t\tmarginMode: params.marginMode,\n\t\t\t\t\t\tisolatedPositionDepositsOverride:\n\t\t\t\t\t\t\tparams.isolatedPositionDepositsOverride,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst { txSig } = await this.driftClient.sendTransaction(result);\n\n\t\t\t\t\treturn txSig;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase 'limit': {\n\t\t\t\tconst useSwift = !params.orderConfig.disableSwift;\n\n\t\t\t\tconst bracketOrders = processBracketOrders(\n\t\t\t\t\tparams.orderConfig.bracketOrders\n\t\t\t\t);\n\n\t\t\t\t// we split the logic for SWIFT and non-SWIFT orders to achieve better type inference\n\t\t\t\tif (useSwift) {\n\t\t\t\t\tconst swiftOrderResult = await createOpenPerpNonMarketOrder({\n\t\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\t\tamount: amountBN,\n\t\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\t\torderConfig: {\n\t\t\t\t\t\t\torderType: 'limit',\n\t\t\t\t\t\t\tlimitPrice: params.orderConfig.limitPrice.val,\n\t\t\t\t\t\t\tbracketOrders,\n\t\t\t\t\t\t},\n\t\t\t\t\t\treduceOnly: params.reduceOnly,\n\t\t\t\t\t\tpostOnly: params.postOnly,\n\t\t\t\t\t\tuseSwift: true,\n\t\t\t\t\t\tswiftOptions: {\n\t\t\t\t\t\t\twallet: {\n\t\t\t\t\t\t\t\t// @ts-ignore TODO: we might want to add signMessage to the IWallet interface\n\t\t\t\t\t\t\t\tsignMessage: this.driftClient.wallet.signMessage,\n\t\t\t\t\t\t\t\ttakerAuthority: this.driftClient.wallet.publicKey,\n\t\t\t\t\t\t\t\tsigningAuthority: this.driftClient.wallet.publicKey,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tswiftServerUrl: this.swiftServerUrl,\n\t\t\t\t\t\t\t...params.orderConfig.swiftOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuilderParams: params.builderParams,\n\t\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t\t\tmarginMode: params.marginMode,\n\t\t\t\t\t\tisolatedPositionDepositsOverride:\n\t\t\t\t\t\t\tparams.isolatedPositionDepositsOverride,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn swiftOrderResult;\n\t\t\t\t} else {\n\t\t\t\t\tconst txn = await createOpenPerpNonMarketOrder({\n\t\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\t\tamount: amountBN,\n\t\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\t\torderConfig: {\n\t\t\t\t\t\t\torderType: 'limit',\n\t\t\t\t\t\t\tlimitPrice: params.orderConfig.limitPrice.val,\n\t\t\t\t\t\t\tbracketOrders,\n\t\t\t\t\t\t},\n\t\t\t\t\t\treduceOnly: params.reduceOnly,\n\t\t\t\t\t\tpostOnly: params.postOnly,\n\t\t\t\t\t\tuseSwift: false,\n\t\t\t\t\t\ttxParams: this.getTxParams(),\n\t\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t\t\tmarginMode: params.marginMode,\n\t\t\t\t\t\tisolatedPositionDepositsOverride:\n\t\t\t\t\t\t\tparams.isolatedPositionDepositsOverride,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst { txSig } = await this.driftClient.sendTransaction(txn);\n\n\t\t\t\t\treturn txSig;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase 'takeProfit':\n\t\t\tcase 'stopLoss': {\n\t\t\t\tconst txn = await createOpenPerpNonMarketOrder({\n\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\tuser,\n\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\tamount: amountBN,\n\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\torderConfig: {\n\t\t\t\t\t\torderType: params.orderConfig.orderType,\n\t\t\t\t\t\ttriggerPrice: params.orderConfig.triggerPrice.val,\n\t\t\t\t\t\tlimitPrice: params.orderConfig.limitPrice?.val ?? ZERO,\n\t\t\t\t\t},\n\t\t\t\t\treduceOnly: params.reduceOnly,\n\t\t\t\t\tuseSwift: false,\n\t\t\t\t\ttxParams: this.getTxParams(),\n\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t});\n\n\t\t\t\tconst { txSig } = await this.driftClient.sendTransaction(txn);\n\n\t\t\t\treturn txSig;\n\t\t\t}\n\t\t\tcase 'oracleLimit': {\n\t\t\t\tconst txn = await createOpenPerpNonMarketOrder({\n\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\tuser,\n\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\tamount: amountBN,\n\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\torderConfig: {\n\t\t\t\t\t\torderType: 'oracleLimit',\n\t\t\t\t\t\toraclePriceOffset: params.orderConfig.oraclePriceOffset.val,\n\t\t\t\t\t},\n\t\t\t\t\treduceOnly: params.reduceOnly,\n\t\t\t\t\tuseSwift: false,\n\t\t\t\t\ttxParams: this.getTxParams(),\n\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t});\n\n\t\t\t\tconst { txSig } = await this.driftClient.sendTransaction(txn);\n\n\t\t\t\treturn txSig;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustiveCheck: never = params.orderConfig;\n\t\t\t\tthrow new Error('Invalid order type');\n\t\t\t}\n\t\t}\n\t}\n\n\tasync getSwapQuote(\n\t\tparams: Omit<SwapParams, 'quote'> & {\n\t\t\tslippageBps?: number;\n\t\t\tswapMode?: SwapMode;\n\t\t\tonlyDirectRoutes?: boolean;\n\t\t}\n\t): Promise<QuoteResponse> {\n\t\tconst jupiterClient = new JupiterClient({\n\t\t\tconnection: this.driftClient.connection,\n\t\t});\n\n\t\tconst inputMint = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tparams.fromMarketIndex\n\t\t).mint;\n\t\tconst outputMint = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tparams.toMarketIndex\n\t\t).mint;\n\n\t\tconst jupiterQuote = await jupiterClient.getQuote({\n\t\t\tinputMint,\n\t\t\toutputMint,\n\t\t\tamount: params.amount.val,\n\t\t\tslippageBps: params.slippageBps,\n\t\t\tswapMode: params.swapMode,\n\t\t\tonlyDirectRoutes: params.onlyDirectRoutes,\n\t\t});\n\n\t\treturn jupiterQuote;\n\t}\n\n\t/**\n\t * Executes a swap between two spot markets (placeholder for future implementation).\n\t *\n\t * This method will handle swapping between different spot markets through\n\t * the Drift protocol's swap functionality.\n\t *\n\t * @param params - The swap parameters\n\t * @returns Promise resolving to the transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.executeSwap({\n\t * fromMarketIndex: 0, // USDC\n\t * toMarketIndex: 1, // SOL\n\t * amount: new BigNum(100),\n\t * subAccountId: 0,\n\t * minReceiveAmount: new BigNum(0.5)\n\t * });\n\t * ```\n\t */\n\tasync swap(params: SwapParams): Promise<TransactionSignature> {\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tparams.subAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst auth =\n\t\t\tparams.swapClientType?.type === 'titan'\n\t\t\t\t? {\n\t\t\t\t\t\tauthToken: params.swapClientType.authToken,\n\t\t\t\t\t\turl: params.swapClientType.url,\n\t\t\t\t }\n\t\t\t\t: undefined;\n\n\t\tconst swapClient = new UnifiedSwapClient({\n\t\t\tclientType: params.swapClientType?.type ?? 'jupiter',\n\t\t\tconnection: this.driftClient.connection,\n\t\t\t...auth,\n\t\t});\n\n\t\tconst swapQuote = params.quote\n\t\t\t? params.quote\n\t\t\t: await this.getSwapQuote(params);\n\n\t\tconst swapTxn = await createSwapTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tswapClient,\n\t\t\tuser: accountData.userClient,\n\t\t\tswapFromMarketIndex: params.fromMarketIndex,\n\t\t\tswapToMarketIndex: params.toMarketIndex,\n\t\t\tamount: params.amount.val,\n\t\t\tquote: swapQuote,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(swapTxn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Settles P&L and funding for all perp position.\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.settlePnl({\n\t * subAccountId: 0,\n\t * marketIndex: 0, // SOL-PERP\n\t * counterpartySubAccountId: 1\n\t * });\n\t * ```\n\t */\n\tasync settleAccountPnl(\n\t\tparams: SettleAccountPnlParams\n\t): Promise<TransactionSignature> {\n\t\tconst { subAccountId } = params;\n\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst marketIndexes = accountData.openPerpPositions.map(\n\t\t\t(position) => position.marketIndex\n\t\t);\n\n\t\tconst settlePnlTxn = await createSettlePnlTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tuser: accountData.userClient,\n\t\t\tmarketIndexes,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(settlePnlTxn);\n\n\t\treturn txSig;\n\t}\n\n\tasync cancelOrders(\n\t\tparams: CancelOrdersParams\n\t): Promise<TransactionSignature> {\n\t\tconst { subAccountId, orderIds } = params;\n\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst cancelOrdersTxn = await createCancelOrdersTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tuser: accountData.userClient,\n\t\t\torderIds,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(cancelOrdersTxn);\n\n\t\treturn txSig;\n\t}\n}\n\n/**\n * TODO:\n * - transfer between subaccounts\n * - close position?\n * - close multiple positions\n * - edit open order\n * - create user only\n *\n * - open spot order\n * - rename subaccount\n * - withdraw dust positions\n */\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/drift/Drift/clients/AuthorityDrift/DriftOperations/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBigNum,\n\tDriftClient,\n\tJupiterClient,\n\tMarketType,\n\tMAX_LEVERAGE_ORDER_SIZE,\n\tQuoteResponse,\n\tSwapMode,\n\tTxParams,\n\tUnifiedSwapClient,\n\tUser,\n\tUserStatsAccount,\n\tZERO,\n} from '@drift-labs/sdk';\nimport { TransactionSignature } from '@solana/web3.js';\nimport { MARKET_UTILS } from '../../../../../_deprecated/market-utils';\nimport { MAIN_POOL_ID } from '../../../../../constants';\nimport { TRADING_UTILS } from '../../../../../_deprecated/trading-utils';\nimport { UserAccountCache } from '../../../stores/UserAccountCache';\nimport { createDepositTxn } from '../../../../base/actions/spot/deposit';\nimport { createUserAndDepositCollateralBaseTxn } from '../../../../base/actions/user/create';\nimport { createWithdrawTxn } from '../../../../base/actions/spot/withdraw';\nimport { deleteUserTxn } from '../../../../base/actions/user/delete';\nimport { createSettlePnlTxn } from '../../../../base/actions/perp/settlePnl';\nimport {\n\tCreateUserAndDepositParams,\n\tDepositParams,\n\tWithdrawParams,\n\tPerpOrderParams,\n\tSwapParams,\n\tSettleAccountPnlParams,\n\tCancelOrdersParams,\n\tCreateRevenueShareEscrowParams,\n} from './types';\nimport { createCancelOrdersTxn } from '../../../../base/actions/trade/cancelOrder';\nimport {\n\tcreateOpenPerpMarketOrder,\n\tOpenPerpMarketOrderParams,\n} from '../../../../base/actions/trade/openPerpOrder/openPerpMarketOrder';\nimport { createSwapTxn } from '../../../../base/actions/trade/swap';\nimport { createOpenPerpNonMarketOrder } from '../../../../base/actions/trade/openPerpOrder/openPerpNonMarketOrder';\nimport { createRevenueShareEscrowTxn } from '../../../../base/actions/builder/createRevenueShareEscrow';\n\n/**\n * Handles majority of the relevant operations on the Drift program including deposits,\n * withdrawals, position management, and trading operations.\n *\n * This class encapsulates the trading logic and provides a clean API for\n * executing various trading operations while handling common patterns like\n * token address resolution and transaction preparation.\n */\nexport class DriftOperations {\n\tstatic readonly DEFAULT_TX_PARAMS: TxParams = {\n\t\tcomputeUnitsPrice: 50_000,\n\t\tuseSimulatedComputeUnits: true,\n\t\tcomputeUnitsBufferMultiplier: 1.3,\n\t};\n\n\tstatic readonly MAX_COMPUTE_UNITS_PRICE = 1e15 / 10 / 1_400_000; // 1e15 = 1 SOL worth of micro lamports; 1e15 / 10 = 0.1 SOL worth of micro lamports; 1.4M = max compute units;\n\n\t/**\n\t * Creates a new DriftOperations instance.\n\t *\n\t * @param driftClient - The DriftClient instance for executing transactions\n\t * @param getUserAccountCache - Function to get the user account cache. We lazily load the user account cache, so that we always get the latest user account data.\n\t * @param getPriorityFee - Function to get current priority fee in micro lamports\n\t */\n\tconstructor(\n\t\tprivate driftClient: DriftClient,\n\t\tprivate getUserAccountCache: () => UserAccountCache,\n\t\tprivate dlobServerHttpUrl: string,\n\t\tprivate swiftServerUrl: string,\n\t\tprivate getPriorityFee: () => number\n\t) {}\n\n\t/**\n\t * Gets transaction parameters with dynamic priority fees.\n\t * Falls back to default if priority fee function is not available.\n\t */\n\tgetTxParams(overrides?: Partial<TxParams>): TxParams {\n\t\tconst unsafePriorityFee = Math.floor(\n\t\t\tthis.getPriorityFee() ??\n\t\t\t\tDriftOperations.DEFAULT_TX_PARAMS.computeUnitsPrice\n\t\t);\n\n\t\tconst safePriorityFee = Math.min(\n\t\t\tunsafePriorityFee,\n\t\t\tDriftOperations.MAX_COMPUTE_UNITS_PRICE\n\t\t);\n\n\t\treturn {\n\t\t\t...DriftOperations.DEFAULT_TX_PARAMS,\n\t\t\tcomputeUnitsPrice: safePriorityFee,\n\t\t\t...overrides,\n\t\t};\n\t}\n\n\t/**\n\t * Creates a new user account and deposits initial collateral.\n\t *\n\t * This method handles the complete onboarding flow for new users including:\n\t * - Validating that the subaccount doesn't already exist\n\t * - Resolving referrer information if provided\n\t * - Getting the correct token address for deposits\n\t * - Creating the user account with custom leverage settings\n\t * - Subscribing to the new user's account updates\n\t *\n\t * @param params - The parameters for user creation and initial deposit\n\t * @returns Promise resolving to transaction signature and user account public key\n\t *\n\t * @throws Error if subaccount already exists\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await tradingOps.createUserAndDeposit({\n\t * depositAmount: new BigNum(100),\n\t * depositSpotMarketIndex: 0, // USDC\n\t * name: \"Trading Account\",\n\t * maxLeverage: 5,\n\t * subAccountId: 0\n\t * });\n\t * ```\n\t */\n\tasync createUserAndDeposit(params: CreateUserAndDepositParams): Promise<{\n\t\ttxSig: TransactionSignature;\n\t\tuser: User;\n\t}> {\n\t\tconst {\n\t\t\tdepositAmount,\n\t\t\tdepositSpotMarketIndex,\n\t\t\tnewAccountName,\n\t\t\tmaxLeverage,\n\t\t\tpoolId = MAIN_POOL_ID,\n\t\t\treferrerName,\n\t\t} = params;\n\n\t\tconst spotMarketConfig = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tdepositSpotMarketIndex\n\t\t);\n\n\t\tconst customMaxMarginRatio = TRADING_UTILS.convertLeverageToMarginRatio(\n\t\t\tmaxLeverage ?? 0\n\t\t);\n\n\t\tlet userStatsAccount: UserStatsAccount | undefined = undefined;\n\n\t\ttry {\n\t\t\tuserStatsAccount = this.driftClient.userStats?.getAccount();\n\t\t} catch (error) {\n\t\t\t// ignore\n\t\t}\n\n\t\tconst { transaction, subAccountId } =\n\t\t\tawait createUserAndDepositCollateralBaseTxn({\n\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\tamount: depositAmount.val,\n\t\t\t\tspotMarketConfig: spotMarketConfig,\n\t\t\t\tauthority: this.driftClient.wallet.publicKey,\n\t\t\t\tuserStatsAccount: userStatsAccount,\n\t\t\t\taccountName: newAccountName,\n\t\t\t\treferrerName,\n\t\t\t\tcustomMaxMarginRatio,\n\t\t\t\tpoolId,\n\t\t\t\ttxParams: this.getTxParams(),\n\t\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(transaction);\n\n\t\tawait this.driftClient.addUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t); // adds user to driftclient's user map, subscribes to user account data\n\t\tconst user = this.driftClient.getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tuser.eventEmitter.on('update', () => {\n\t\t\tthis.getUserAccountCache().updateUserAccount(user);\n\t\t});\n\n\t\treturn {\n\t\t\ttxSig,\n\t\t\tuser,\n\t\t};\n\t}\n\n\t/**\n\t * Creates a RevenueShareEscrow account for the user.\n\t *\n\t * @param params - The parameters for creating a RevenueShareEscrow account\n\t * @returns Promise resolving to the transaction signature of the creation\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.createRevenueShareEscrow({\n\t * numOrders: 16,\n\t * builder: {\n\t * builderAuthority: new PublicKey(\"builderAuthority\"),\n\t * maxFeeTenthBps: 100,\n\t * },\n\t * });\n\t * ```\n\t */\n\tasync createRevenueShareEscrow(\n\t\tparams: CreateRevenueShareEscrowParams\n\t): Promise<TransactionSignature> {\n\t\tconst txn = await createRevenueShareEscrowTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tauthority: this.driftClient.wallet.publicKey,\n\t\t\tnumOrders: params.numOrders ?? 16,\n\t\t\tbuilder: params.builder,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(txn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Deletes a user account.\n\t *\n\t * This method removes a user's sub-account from the Drift.\n\t *\n\t * @param subAccountId - The ID of the sub-account to delete\n\t * @returns A promise that resolves to the transaction signature of the deletion\n\t *\n\t * @throws {Error} When the user account is not found in the cache\n\t *\n\t * @example\n\t * ```typescript\n\t * // Delete user sub-account with ID 0\n\t * const txSignature = await tradingOps.deleteUser(0);\n\t * console.log('User deleted with transaction:', txSignature);\n\t * ```\n\t */\n\tasync deleteUser(subAccountId: number): Promise<TransactionSignature> {\n\t\tconst user = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\t\tconst userStatsAccount = this.driftClient.userStats?.getAccount();\n\n\t\tif (!user) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tif (!userStatsAccount) {\n\t\t\tthrow new Error('User stats account not found');\n\t\t}\n\n\t\tconst deleteTxn = await deleteUserTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tuser: user.userClient,\n\t\t\tuserStatsAccount,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(deleteTxn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Deposits collateral into a user's spot market position.\n\t *\n\t * This method handles depositing tokens into a user's account, with optional\n\t * support for max borrow repayment scenarios where the deposit amount may be\n\t * over-estimated to ensure complete repayment of borrowed funds.\n\t *\n\t * @param params - The deposit parameters\n\t * @returns Promise resolving to the transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.deposit({\n\t * subAccountId: 0,\n\t * amount: new BigNum(50),\n\t * spotMarketIndex: 0, // USDC\n\t * isMaxBorrowRepayment: false\n\t * });\n\t * ```\n\t */\n\tasync deposit(params: DepositParams): Promise<TransactionSignature> {\n\t\tconst { subAccountId, amount, spotMarketIndex, isMaxBorrowRepayment } =\n\t\t\tparams;\n\n\t\tconst spotMarketConfig = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tspotMarketIndex\n\t\t);\n\n\t\tconst user = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!user) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst depositTxn = await createDepositTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tuser: user.userClient,\n\t\t\tamount: amount,\n\t\t\tspotMarketConfig: spotMarketConfig,\n\t\t\tisMaxBorrowRepayment,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(depositTxn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Withdraws collateral from a user's spot market position.\n\t *\n\t * This method handles withdrawing tokens from a user's account with options\n\t * for borrowing (if allowBorrow is true) or reduce-only withdrawals. For max\n\t * withdrawals with reduce-only, the amount is over-estimated to ensure\n\t * complete withdrawal.\n\t *\n\t * @param params - The withdrawal parameters\n\t * @returns Promise resolving to the transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.withdraw({\n\t * subAccountId: 0,\n\t * amount: new BigNum(25),\n\t * spotMarketIndex: 0, // USDC\n\t * allowBorrow: false,\n\t * isMax: false\n\t * });\n\t * ```\n\t */\n\tasync withdraw(params: WithdrawParams): Promise<TransactionSignature> {\n\t\tconst {\n\t\t\tsubAccountId,\n\t\t\tamount,\n\t\t\tspotMarketIndex,\n\t\t\tisBorrow = false,\n\t\t\tisMax = false,\n\t\t} = params;\n\n\t\tconst spotMarketConfig = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tspotMarketIndex\n\t\t);\n\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst withdrawTxn = await createWithdrawTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tamount,\n\t\t\tspotMarketConfig,\n\t\t\tuser: accountData.userClient,\n\t\t\tisBorrow,\n\t\t\tisMax,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(withdrawTxn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Opens a perpetual market order (placeholder for future implementation).\n\t *\n\t * This method will handle opening long or short positions in perpetual markets\n\t * with support for market and limit orders, reduce-only orders, and post-only orders.\n\t *\n\t * @param params - The perp order parameters\n\t * @returns Promise resolving to the transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.openPerpMarketOrder({\n\t * marketIndex: 0, // SOL-PERP\n\t * direction: 'long',\n\t * baseAssetAmount: new BigNum(1), // 1 SOL\n\t * orderType: 'market',\n\t * subAccountId: 0\n\t * });\n\t * ```\n\t */\n\tasync openPerpOrder(\n\t\tparams: PerpOrderParams\n\t): Promise<TransactionSignature | void> {\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tparams.subAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst user = accountData.userClient;\n\n\t\tconst processBracketOrders = (bracketOrdersInput?: {\n\t\t\ttakeProfitPrice?: BigNum;\n\t\t\tstopLossPrice?: BigNum;\n\t\t}) => {\n\t\t\tconst bracketOrders: OpenPerpMarketOrderParams['bracketOrders'] = {};\n\n\t\t\tif (bracketOrdersInput?.takeProfitPrice) {\n\t\t\t\tbracketOrders.takeProfit = {\n\t\t\t\t\ttriggerPrice: bracketOrdersInput.takeProfitPrice.val,\n\t\t\t\t\tbaseAssetAmount: params.size.val,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (bracketOrdersInput?.stopLossPrice) {\n\t\t\t\tbracketOrders.stopLoss = {\n\t\t\t\t\ttriggerPrice: bracketOrdersInput.stopLossPrice.val,\n\t\t\t\t\tbaseAssetAmount: params.size.val,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn bracketOrders;\n\t\t};\n\n\t\tconst amountBN = params.isMaxLeverage\n\t\t\t? MAX_LEVERAGE_ORDER_SIZE\n\t\t\t: params.size.val;\n\n\t\tswitch (params.orderConfig.orderType) {\n\t\t\tcase 'market': {\n\t\t\t\tconst useSwift = !params.orderConfig.disableSwift;\n\n\t\t\t\tconst bracketOrders = processBracketOrders(\n\t\t\t\t\tparams.orderConfig.bracketOrders\n\t\t\t\t);\n\n\t\t\t\t// we split the logic for SWIFT and non-SWIFT orders to achieve better type inference\n\t\t\t\tif (useSwift) {\n\t\t\t\t\tconst swiftOrderResult = await createOpenPerpMarketOrder({\n\t\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\t\tuseSwift: true,\n\t\t\t\t\t\tswiftOptions: {\n\t\t\t\t\t\t\twallet: {\n\t\t\t\t\t\t\t\t// @ts-ignore TODO: we might want to add signMessage to the IWallet interface\n\t\t\t\t\t\t\t\tsignMessage: this.driftClient.wallet.signMessage,\n\t\t\t\t\t\t\t\ttakerAuthority: this.driftClient.wallet.publicKey,\n\t\t\t\t\t\t\t\tsigningAuthority: this.driftClient.wallet.publicKey,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tswiftServerUrl: this.swiftServerUrl,\n\t\t\t\t\t\t\t...params.orderConfig.swiftOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\t\tamount: amountBN,\n\t\t\t\t\t\tbracketOrders,\n\t\t\t\t\t\tdlobServerHttpUrl: this.dlobServerHttpUrl,\n\t\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\t\toptionalAuctionParamsInputs:\n\t\t\t\t\t\t\tparams.orderConfig.optionalAuctionParamsInputs,\n\t\t\t\t\t\tbuilderParams: params.builderParams,\n\t\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t\t\tmarginMode: params.marginMode,\n\t\t\t\t\t\tisolatedPositionDepositsOverride:\n\t\t\t\t\t\t\tparams.isolatedPositionDepositsOverride,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn swiftOrderResult;\n\t\t\t\t} else {\n\t\t\t\t\tconst result = await createOpenPerpMarketOrder({\n\t\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\t\tamount: amountBN,\n\t\t\t\t\t\tbracketOrders,\n\t\t\t\t\t\toptionalAuctionParamsInputs:\n\t\t\t\t\t\t\tparams.orderConfig.optionalAuctionParamsInputs,\n\t\t\t\t\t\tdlobServerHttpUrl: this.dlobServerHttpUrl,\n\t\t\t\t\t\tuseSwift: false,\n\t\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t\t\tmarginMode: params.marginMode,\n\t\t\t\t\t\tisolatedPositionDepositsOverride:\n\t\t\t\t\t\t\tparams.isolatedPositionDepositsOverride,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst { txSig } = await this.driftClient.sendTransaction(result);\n\n\t\t\t\t\treturn txSig;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase 'limit': {\n\t\t\t\tconst useSwift = !params.orderConfig.disableSwift;\n\n\t\t\t\tconst bracketOrders = processBracketOrders(\n\t\t\t\t\tparams.orderConfig.bracketOrders\n\t\t\t\t);\n\n\t\t\t\t// we split the logic for SWIFT and non-SWIFT orders to achieve better type inference\n\t\t\t\tif (useSwift) {\n\t\t\t\t\tconst swiftOrderResult = await createOpenPerpNonMarketOrder({\n\t\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\t\tamount: amountBN,\n\t\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\t\torderConfig: {\n\t\t\t\t\t\t\torderType: 'limit',\n\t\t\t\t\t\t\tlimitPrice: params.orderConfig.limitPrice.val,\n\t\t\t\t\t\t\tbracketOrders,\n\t\t\t\t\t\t},\n\t\t\t\t\t\treduceOnly: params.reduceOnly,\n\t\t\t\t\t\tpostOnly: params.postOnly,\n\t\t\t\t\t\tuseSwift: true,\n\t\t\t\t\t\tswiftOptions: {\n\t\t\t\t\t\t\twallet: {\n\t\t\t\t\t\t\t\t// @ts-ignore TODO: we might want to add signMessage to the IWallet interface\n\t\t\t\t\t\t\t\tsignMessage: this.driftClient.wallet.signMessage,\n\t\t\t\t\t\t\t\ttakerAuthority: this.driftClient.wallet.publicKey,\n\t\t\t\t\t\t\t\tsigningAuthority: this.driftClient.wallet.publicKey,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tswiftServerUrl: this.swiftServerUrl,\n\t\t\t\t\t\t\t...params.orderConfig.swiftOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuilderParams: params.builderParams,\n\t\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t\t\tmarginMode: params.marginMode,\n\t\t\t\t\t\tisolatedPositionDepositsOverride:\n\t\t\t\t\t\t\tparams.isolatedPositionDepositsOverride,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn swiftOrderResult;\n\t\t\t\t} else {\n\t\t\t\t\tconst txn = await createOpenPerpNonMarketOrder({\n\t\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\t\tamount: amountBN,\n\t\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\t\torderConfig: {\n\t\t\t\t\t\t\torderType: 'limit',\n\t\t\t\t\t\t\tlimitPrice: params.orderConfig.limitPrice.val,\n\t\t\t\t\t\t\tbracketOrders,\n\t\t\t\t\t\t},\n\t\t\t\t\t\treduceOnly: params.reduceOnly,\n\t\t\t\t\t\tpostOnly: params.postOnly,\n\t\t\t\t\t\tuseSwift: false,\n\t\t\t\t\t\ttxParams: this.getTxParams(),\n\t\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t\t\tmarginMode: params.marginMode,\n\t\t\t\t\t\tisolatedPositionDepositsOverride:\n\t\t\t\t\t\t\tparams.isolatedPositionDepositsOverride,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst { txSig } = await this.driftClient.sendTransaction(txn);\n\n\t\t\t\t\treturn txSig;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase 'takeProfit':\n\t\t\tcase 'stopLoss': {\n\t\t\t\tconst txn = await createOpenPerpNonMarketOrder({\n\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\tuser,\n\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\tamount: amountBN,\n\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\torderConfig: {\n\t\t\t\t\t\torderType: params.orderConfig.orderType,\n\t\t\t\t\t\ttriggerPrice: params.orderConfig.triggerPrice.val,\n\t\t\t\t\t\tlimitPrice: params.orderConfig.limitPrice?.val ?? ZERO,\n\t\t\t\t\t},\n\t\t\t\t\treduceOnly: params.reduceOnly,\n\t\t\t\t\tuseSwift: false,\n\t\t\t\t\ttxParams: this.getTxParams(),\n\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t});\n\n\t\t\t\tconst { txSig } = await this.driftClient.sendTransaction(txn);\n\n\t\t\t\treturn txSig;\n\t\t\t}\n\t\t\tcase 'oracleLimit': {\n\t\t\t\tconst txn = await createOpenPerpNonMarketOrder({\n\t\t\t\t\tdriftClient: this.driftClient,\n\t\t\t\t\tuser,\n\t\t\t\t\tdirection: params.direction,\n\t\t\t\t\tmarketIndex: params.marketIndex,\n\t\t\t\t\tamount: amountBN,\n\t\t\t\t\tassetType: params.assetType,\n\t\t\t\t\torderConfig: {\n\t\t\t\t\t\torderType: 'oracleLimit',\n\t\t\t\t\t\toraclePriceOffset: params.orderConfig.oraclePriceOffset.val,\n\t\t\t\t\t},\n\t\t\t\t\treduceOnly: params.reduceOnly,\n\t\t\t\t\tuseSwift: false,\n\t\t\t\t\ttxParams: this.getTxParams(),\n\t\t\t\t\tpositionMaxLeverage: params.positionMaxLeverage,\n\t\t\t\t});\n\n\t\t\t\tconst { txSig } = await this.driftClient.sendTransaction(txn);\n\n\t\t\t\treturn txSig;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustiveCheck: never = params.orderConfig;\n\t\t\t\tthrow new Error('Invalid order type');\n\t\t\t}\n\t\t}\n\t}\n\n\tasync getSwapQuote(\n\t\tparams: Omit<SwapParams, 'quote'> & {\n\t\t\tslippageBps?: number;\n\t\t\tswapMode?: SwapMode;\n\t\t\tonlyDirectRoutes?: boolean;\n\t\t}\n\t): Promise<QuoteResponse> {\n\t\tconst jupiterClient = new JupiterClient({\n\t\t\tconnection: this.driftClient.connection,\n\t\t});\n\n\t\tconst inputMint = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tparams.fromMarketIndex\n\t\t).mint;\n\t\tconst outputMint = MARKET_UTILS.getMarketConfig(\n\t\t\tthis.driftClient.env,\n\t\t\tMarketType.SPOT,\n\t\t\tparams.toMarketIndex\n\t\t).mint;\n\n\t\tconst jupiterQuote = await jupiterClient.getQuote({\n\t\t\tinputMint,\n\t\t\toutputMint,\n\t\t\tamount: params.amount.val,\n\t\t\tslippageBps: params.slippageBps,\n\t\t\tswapMode: params.swapMode,\n\t\t\tonlyDirectRoutes: params.onlyDirectRoutes,\n\t\t});\n\n\t\treturn jupiterQuote;\n\t}\n\n\t/**\n\t * Executes a swap between two spot markets (placeholder for future implementation).\n\t *\n\t * This method will handle swapping between different spot markets through\n\t * the Drift protocol's swap functionality.\n\t *\n\t * @param params - The swap parameters\n\t * @returns Promise resolving to the transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.executeSwap({\n\t * fromMarketIndex: 0, // USDC\n\t * toMarketIndex: 1, // SOL\n\t * amount: new BigNum(100),\n\t * subAccountId: 0,\n\t * minReceiveAmount: new BigNum(0.5)\n\t * });\n\t * ```\n\t */\n\tasync swap(params: SwapParams): Promise<TransactionSignature> {\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tparams.subAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst auth =\n\t\t\tparams.swapClientType?.type === 'titan'\n\t\t\t\t? {\n\t\t\t\t\t\tauthToken: params.swapClientType.authToken,\n\t\t\t\t\t\turl: params.swapClientType.url,\n\t\t\t\t }\n\t\t\t\t: undefined;\n\n\t\tconst swapClient = new UnifiedSwapClient({\n\t\t\tclientType: params.swapClientType?.type ?? 'jupiter',\n\t\t\tconnection: this.driftClient.connection,\n\t\t\t...auth,\n\t\t});\n\n\t\tconst swapQuote = params.quote\n\t\t\t? params.quote\n\t\t\t: await this.getSwapQuote(params);\n\n\t\tconst swapTxn = await createSwapTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tswapClient,\n\t\t\tuser: accountData.userClient,\n\t\t\tswapFromMarketIndex: params.fromMarketIndex,\n\t\t\tswapToMarketIndex: params.toMarketIndex,\n\t\t\tamount: params.amount.val,\n\t\t\tquote: swapQuote,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(swapTxn);\n\n\t\treturn txSig;\n\t}\n\n\t/**\n\t * Settles P&L and funding for all perp position.\n\t *\n\t * @example\n\t * ```typescript\n\t * const txSig = await tradingOps.settlePnl({\n\t * subAccountId: 0,\n\t * marketIndex: 0, // SOL-PERP\n\t * counterpartySubAccountId: 1\n\t * });\n\t * ```\n\t */\n\tasync settleAccountPnl(\n\t\tparams: SettleAccountPnlParams\n\t): Promise<TransactionSignature> {\n\t\tconst { subAccountId } = params;\n\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst marketIndexes = accountData.openPerpPositions.map(\n\t\t\t(position) => position.marketIndex\n\t\t);\n\n\t\tconst settlePnlTxn = await createSettlePnlTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tuser: accountData.userClient,\n\t\t\tmarketIndexes,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(settlePnlTxn);\n\n\t\treturn txSig;\n\t}\n\n\tasync cancelOrders(\n\t\tparams: CancelOrdersParams\n\t): Promise<TransactionSignature> {\n\t\tconst { subAccountId, orderIds } = params;\n\n\t\tconst accountData = this.getUserAccountCache().getUser(\n\t\t\tsubAccountId,\n\t\t\tthis.driftClient.wallet.publicKey\n\t\t);\n\n\t\tif (!accountData) {\n\t\t\tthrow new Error('User not found');\n\t\t}\n\n\t\tconst cancelOrdersTxn = await createCancelOrdersTxn({\n\t\t\tdriftClient: this.driftClient,\n\t\t\tuser: accountData.userClient,\n\t\t\torderIds,\n\t\t\ttxParams: this.getTxParams(),\n\t\t});\n\n\t\tconst { txSig } = await this.driftClient.sendTransaction(cancelOrdersTxn);\n\n\t\treturn txSig;\n\t}\n}\n\n/**\n * TODO:\n * - transfer between subaccounts\n * - close position?\n * - close multiple positions\n * - edit open order\n * - create user only\n *\n * - open spot order\n * - rename subaccount\n * - withdraw dust positions\n */\n"]}
|
|
@@ -12,10 +12,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.AuthorityDrift = void 0;
|
|
13
13
|
const sdk_1 = require("@drift-labs/sdk");
|
|
14
14
|
const web3_js_1 = require("@solana/web3.js");
|
|
15
|
-
const
|
|
15
|
+
const common_ui_utils_1 = require("../../../../_deprecated/common-ui-utils");
|
|
16
16
|
const constants_1 = require("../../constants");
|
|
17
17
|
const types_1 = require("../../../../types");
|
|
18
|
-
const
|
|
18
|
+
const market_utils_1 = require("../../../../_deprecated/market-utils");
|
|
19
19
|
const PollingDlob_1 = require("../../data/PollingDlob");
|
|
20
20
|
const EnvironmentConstants_1 = require("../../../../EnvironmentConstants");
|
|
21
21
|
const MarkPriceCache_1 = require("../../stores/MarkPriceCache");
|
|
@@ -101,8 +101,8 @@ class AuthorityDrift {
|
|
|
101
101
|
...perpTradableMarkets,
|
|
102
102
|
...spotTradableMarkets,
|
|
103
103
|
];
|
|
104
|
-
this._spotMarketConfigs = spotTradableMarkets.map((market) =>
|
|
105
|
-
this._perpMarketConfigs = perpTradableMarkets.map((market) =>
|
|
104
|
+
this._spotMarketConfigs = spotTradableMarkets.map((market) => market_utils_1.MARKET_UTILS.getMarketConfig(config.driftEnv, sdk_1.MarketType.SPOT, market.marketIndex));
|
|
105
|
+
this._perpMarketConfigs = perpTradableMarkets.map((market) => market_utils_1.MARKET_UTILS.getMarketConfig(config.driftEnv, sdk_1.MarketType.PERP, market.marketIndex));
|
|
106
106
|
// set up Drift endpoints
|
|
107
107
|
const driftDlobServerHttpUrlToUse = (_c = config.driftDlobServerHttpUrl) !== null && _c !== void 0 ? _c : EnvironmentConstants_1.EnvironmentConstants.dlobServerHttpUrl[config.driftEnv === 'devnet' ? 'dev' : 'mainnet'];
|
|
108
108
|
const swiftServerUrlToUse = EnvironmentConstants_1.EnvironmentConstants.swiftServerUrl[config.driftEnv === 'devnet' ? 'staging' : 'mainnet'];
|
|
@@ -167,10 +167,10 @@ class AuthorityDrift {
|
|
|
167
167
|
this._tradableMarkets = tradableMarkets;
|
|
168
168
|
this._spotMarketConfigs = tradableMarkets
|
|
169
169
|
.filter((market) => !market.isPerp)
|
|
170
|
-
.map((market) =>
|
|
170
|
+
.map((market) => market_utils_1.MARKET_UTILS.getMarketConfig(this._driftClient.env, sdk_1.MarketType.SPOT, market.marketIndex));
|
|
171
171
|
this._perpMarketConfigs = tradableMarkets
|
|
172
172
|
.filter((market) => market.isPerp)
|
|
173
|
-
.map((market) =>
|
|
173
|
+
.map((market) => market_utils_1.MARKET_UTILS.getMarketConfig(this._driftClient.env, sdk_1.MarketType.PERP, market.marketIndex));
|
|
174
174
|
}
|
|
175
175
|
get spotMarketConfigs() {
|
|
176
176
|
return this._spotMarketConfigs;
|
|
@@ -222,10 +222,10 @@ class AuthorityDrift {
|
|
|
222
222
|
const driftProgramID = new web3_js_1.PublicKey(sdk_1.DRIFT_PROGRAM_ID);
|
|
223
223
|
const accountLoader = new sdk_1.CustomizedCadenceBulkAccountLoader(connection, constants_1.DEFAULT_ACCOUNT_LOADER_COMMITMENT, constants_1.DEFAULT_ACCOUNT_LOADER_POLLING_FREQUENCY_MS);
|
|
224
224
|
this.accountLoader = accountLoader;
|
|
225
|
-
const wallet = (_a = config.wallet) !== null && _a !== void 0 ? _a :
|
|
225
|
+
const wallet = (_a = config.wallet) !== null && _a !== void 0 ? _a : common_ui_utils_1.COMMON_UI_UTILS.createPlaceholderIWallet();
|
|
226
226
|
const skipInitialUsersLoad = !config.wallet;
|
|
227
|
-
const perpMarkets = (_c = (_b = config.tradableMarkets) === null || _b === void 0 ? void 0 : _b.filter((market) => market.isPerp).map((market) =>
|
|
228
|
-
const spotMarkets = (_e = (_d = config.tradableMarkets) === null || _d === void 0 ? void 0 : _d.filter((market) => !market.isPerp).map((market) =>
|
|
227
|
+
const perpMarkets = (_c = (_b = config.tradableMarkets) === null || _b === void 0 ? void 0 : _b.filter((market) => market.isPerp).map((market) => market_utils_1.MARKET_UTILS.getMarketConfig(driftEnv, sdk_1.MarketType.PERP, market.marketIndex))) !== null && _c !== void 0 ? _c : sdk_1.PerpMarkets[driftEnv];
|
|
228
|
+
const spotMarkets = (_e = (_d = config.tradableMarkets) === null || _d === void 0 ? void 0 : _d.filter((market) => !market.isPerp).map((market) => market_utils_1.MARKET_UTILS.getMarketConfig(driftEnv, sdk_1.MarketType.SPOT, market.marketIndex))) !== null && _e !== void 0 ? _e : sdk_1.SpotMarkets[driftEnv];
|
|
229
229
|
const { perpMarketIndexes, spotMarketIndexes, oracleInfos } = (0, sdk_1.getMarketsAndOraclesForSubscription)(driftEnv, perpMarkets, spotMarkets);
|
|
230
230
|
const driftClientConfig = {
|
|
231
231
|
env: driftEnv,
|