@drift-labs/common 1.0.45 → 1.0.46

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.
@@ -13,6 +13,7 @@ export declare const COMMON_UI_UTILS: {
13
13
  getPerpOrderParamsBitFlags: (marketIndex: number, driftClient: DriftClient, userAccount: User, attemptedLeverage: number, highLeverageOptions?: {
14
14
  numOfOpenHighLeverageSpots?: number;
15
15
  }) => number;
16
+ isOrderTriggered: (order: Pick<import("..").UISerializableOrder, "status" | "orderType" | "triggerCondition">) => boolean;
16
17
  getBaseAssetSymbol: (marketName: string, removePrefix?: boolean) => string;
17
18
  getPausedOperations: (marketAccount: import("@drift-labs/sdk").SpotMarketAccount | import("@drift-labs/sdk").PerpMarketAccount) => string[];
18
19
  PerpOperationsMap: {
@@ -20,5 +20,6 @@ export declare const ORDER_COMMON_UTILS: {
20
20
  getUIOrderTypeFromSdkOrderType: (orderType: OrderType, triggerCondition: OrderTriggerCondition, direction: PositionDirection, oracleOffset: BigNum | undefined) => import("../types").UIOrderTypeValue;
21
21
  getPerpAuctionDuration: typeof getPerpAuctionDuration;
22
22
  getPerpOrderParamsBitFlags: typeof getPerpOrderParamsBitFlags;
23
+ isOrderTriggered: (order: Pick<UISerializableOrder, 'orderType' | 'triggerCondition' | 'status'>) => boolean;
23
24
  };
24
25
  export {};
@@ -171,6 +171,14 @@ function getPerpOrderParamsBitFlags(marketIndex, driftClient, userAccount, attem
171
171
  }
172
172
  return undefined;
173
173
  }
174
+ const isOrderTriggered = (order) => {
175
+ const isTriggerOrderType = utils_1.ENUM_UTILS.match(order.orderType, sdk_1.OrderType.TRIGGER_MARKET) ||
176
+ utils_1.ENUM_UTILS.match(order.orderType, sdk_1.OrderType.TRIGGER_LIMIT);
177
+ const orderWasCancelled = utils_1.ENUM_UTILS.match(order.status, sdk_1.OrderStatus.CANCELED);
178
+ const orderWasTriggered = utils_1.ENUM_UTILS.match(order.triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_ABOVE) ||
179
+ utils_1.ENUM_UTILS.match(order.triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_BELOW);
180
+ return isTriggerOrderType && orderWasTriggered && !orderWasCancelled;
181
+ };
174
182
  exports.ORDER_COMMON_UTILS = {
175
183
  getOrderLabelFromOrderDetails,
176
184
  getLimitPriceFromOracleOffset,
@@ -178,5 +186,6 @@ exports.ORDER_COMMON_UTILS = {
178
186
  getUIOrderTypeFromSdkOrderType,
179
187
  getPerpAuctionDuration,
180
188
  getPerpOrderParamsBitFlags,
189
+ isOrderTriggered,
181
190
  };
182
191
  //# sourceMappingURL=order.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../../src/common-ui-utils/order.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tOrderType,\n\tOrderTriggerCondition,\n\tPositionDirection,\n\tBigNum,\n\tZERO,\n\tContractTier,\n\tBN,\n\tPERCENTAGE_PRECISION,\n\tisOneOfVariant,\n\tMarketType,\n\tDriftClient,\n\tUser,\n\tOrderParamsBitFlag,\n} from '@drift-labs/sdk';\nimport {\n\tLIMIT_ORDER_TYPE_CONFIG,\n\tMARKET_ORDER_TYPE_CONFIG,\n\tORACLE_LIMIT_ORDER_TYPE_CONFIG,\n\tORACLE_MARKET_ORDER_TYPE_CONFIG,\n\tSTOP_LIMIT_ORDER_TYPE_CONFIG,\n\tSTOP_MARKET_ORDER_TYPE_CONFIG,\n\tTAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG,\n\tTAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG,\n\tUI_ORDER_TYPES,\n} from '../constants/orders';\nimport { UISerializableOrder } from '../serializableTypes';\nimport { ENUM_UTILS, matchEnum } from '../utils';\nimport { AuctionParams } from '../types';\nimport { EMPTY_AUCTION_PARAMS } from '../constants/trade';\nimport { MARKET_UTILS } from './market';\n\nconst getOrderLabelFromOrderDetails = (\n\torderDetails: Pick<\n\t\tUISerializableOrder,\n\t\t| 'orderType'\n\t\t| 'oraclePriceOffset'\n\t\t| 'direction'\n\t\t| 'triggerCondition'\n\t\t| 'existingPositionDirection'\n\t>\n) => {\n\tif (matchEnum(orderDetails.orderType, OrderType.MARKET))\n\t\treturn UI_ORDER_TYPES.market.label;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.LIMIT))\n\t\treturn `${\n\t\t\torderDetails.oraclePriceOffset &&\n\t\t\t!orderDetails.oraclePriceOffset?.eqZero()\n\t\t\t\t? 'Oracle '\n\t\t\t\t: ''\n\t\t}${UI_ORDER_TYPES.limit.label}`;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.ORACLE))\n\t\treturn UI_ORDER_TYPES.oracle.label;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.TRIGGER_MARKET)) {\n\t\tconst isTriggered =\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_ABOVE\n\t\t\t) ||\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_BELOW\n\t\t\t);\n\t\tif (isTriggered) {\n\t\t\treturn 'Market (Triggered)';\n\t\t}\n\n\t\tconst isTriggerAbove = matchEnum(\n\t\t\torderDetails.triggerCondition,\n\t\t\tOrderTriggerCondition.ABOVE\n\t\t);\n\t\tconst isOrderDirectionShort = matchEnum(\n\t\t\torderDetails.direction,\n\t\t\tPositionDirection.SHORT\n\t\t);\n\n\t\tif (isTriggerAbove) {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.takeProfitMarket.label\n\t\t\t\t: UI_ORDER_TYPES.stopMarket.label;\n\t\t} else {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.stopMarket.label\n\t\t\t\t: UI_ORDER_TYPES.takeProfitMarket.label;\n\t\t}\n\t}\n\n\tif (matchEnum(orderDetails.orderType, OrderType.TRIGGER_LIMIT)) {\n\t\tconst isTriggered =\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_ABOVE\n\t\t\t) ||\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_BELOW\n\t\t\t);\n\n\t\tconst isTriggerAbove = matchEnum(\n\t\t\torderDetails.triggerCondition,\n\t\t\tOrderTriggerCondition.ABOVE\n\t\t);\n\t\tconst isOrderDirectionShort = matchEnum(\n\t\t\torderDetails.direction,\n\t\t\tPositionDirection.SHORT\n\t\t);\n\n\t\tif (isTriggered) {\n\t\t\treturn 'Limit (Triggered)';\n\t\t}\n\n\t\tif (isTriggerAbove) {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.takeProfitLimit.label\n\t\t\t\t: UI_ORDER_TYPES.stopLimit.label;\n\t\t} else {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.stopLimit.label\n\t\t\t\t: UI_ORDER_TYPES.takeProfitLimit.label;\n\t\t}\n\t}\n\n\treturn '-';\n};\n\nconst getLimitPriceFromOracleOffset = (\n\torder: UISerializableOrder,\n\toraclePrice: BigNum\n): BigNum => {\n\tif (\n\t\t(order.price && !order.price.eqZero()) ||\n\t\t!order.oraclePriceOffset ||\n\t\torder.oraclePriceOffset.eqZero() ||\n\t\t!oraclePrice ||\n\t\toraclePrice?.eqZero()\n\t) {\n\t\treturn order.price;\n\t}\n\treturn oraclePrice.add(order.oraclePriceOffset);\n};\n\nfunction isAuctionEmpty(auctionParams: AuctionParams) {\n\treturn (\n\t\tauctionParams.auctionStartPrice ===\n\t\t\tEMPTY_AUCTION_PARAMS.auctionStartPrice &&\n\t\tauctionParams.auctionEndPrice === EMPTY_AUCTION_PARAMS.auctionEndPrice &&\n\t\tauctionParams.auctionDuration === EMPTY_AUCTION_PARAMS.auctionDuration\n\t);\n}\n\nconst getUIOrderTypeFromSdkOrderType = (\n\torderType: OrderType,\n\ttriggerCondition: OrderTriggerCondition,\n\tdirection: PositionDirection,\n\toracleOffset: BigNum | undefined\n) => {\n\tconst isLong = ENUM_UTILS.match(direction, PositionDirection.LONG);\n\tconst triggerAbove =\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.ABOVE) ||\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.TRIGGERED_ABOVE);\n\n\tconst triggerBelow =\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.BELOW) ||\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.TRIGGERED_BELOW);\n\n\t// Buy side + trigger below: take profit for a short position\n\t// Buy side + trigger above: stop loss for a short position\n\t// Sell side + trigger above: take profit for a long position\n\t// Sell side + trigger below: stop loss for a long position\n\n\tif (matchEnum(orderType, OrderType.MARKET)) {\n\t\treturn MARKET_ORDER_TYPE_CONFIG;\n\t} else if (matchEnum(orderType, OrderType.LIMIT)) {\n\t\tif (oracleOffset && !oracleOffset.eq(ZERO)) {\n\t\t\treturn ORACLE_LIMIT_ORDER_TYPE_CONFIG;\n\t\t} else {\n\t\t\treturn LIMIT_ORDER_TYPE_CONFIG;\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.TRIGGER_MARKET)) {\n\t\tif (isLong) {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn STOP_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn TAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t} else {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn TAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn STOP_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.TRIGGER_LIMIT)) {\n\t\tif (isLong) {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn STOP_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn TAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t} else {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn TAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn STOP_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.ORACLE)) {\n\t\treturn ORACLE_MARKET_ORDER_TYPE_CONFIG;\n\t}\n\tthrow new Error('Invalid order type');\n};\n\nfunction getPerpAuctionDuration(\n\tpriceDiff: BN,\n\tprice: BN,\n\tcontractTier: ContractTier\n): number {\n\tconst percentDiff = priceDiff.mul(PERCENTAGE_PRECISION).div(price);\n\n\tconst slotsPerBp = isOneOfVariant(contractTier, ['a', 'b'])\n\t\t? new BN(100)\n\t\t: new BN(60);\n\n\tconst rawSlots = percentDiff\n\t\t.mul(slotsPerBp)\n\t\t.div(PERCENTAGE_PRECISION.divn(100));\n\n\tconst clamped = BN.min(BN.max(rawSlots, new BN(5)), new BN(180));\n\n\treturn clamped.toNumber();\n}\n\nexport type HighLeverageOptions = {\n\tnumOfOpenHighLeverageSpots?: number; // if not provided, the method will assume that there is spots open\n\tenterHighLeverageModeBufferPct?: number;\n};\n\n/**\n * Mainly checks if the user will be entering high leverage mode through this order.\n */\nfunction getPerpOrderParamsBitFlags(\n\tmarketIndex: number,\n\tdriftClient: DriftClient,\n\tuserAccount: User,\n\tattemptedLeverage: number,\n\thighLeverageOptions?: {\n\t\tnumOfOpenHighLeverageSpots?: number; // if not provided, the method will assume that there is spots open\n\t}\n): number | undefined {\n\tif (attemptedLeverage < 5) {\n\t\t// there is no high leverage mode leverage that is higher than 4\n\t\treturn undefined;\n\t}\n\n\tconst { numOfOpenHighLeverageSpots = Number.MAX_SAFE_INTEGER } =\n\t\thighLeverageOptions || {};\n\n\tif (numOfOpenHighLeverageSpots <= 0) {\n\t\treturn undefined;\n\t}\n\n\tconst {\n\t\thasHighLeverage: isMarketAHighLeverageMarket,\n\t\tmaxLeverage: regularMaxLeverage,\n\t} = MARKET_UTILS.getMaxLeverageForMarket(\n\t\tMarketType.PERP,\n\t\tmarketIndex,\n\t\tdriftClient\n\t);\n\n\tif (!isMarketAHighLeverageMarket) {\n\t\treturn undefined;\n\t}\n\n\t// Check if user is already in high leverage mode\n\tif (userAccount.isHighLeverageMode('Initial')) {\n\t\treturn undefined;\n\t}\n\n\tif (attemptedLeverage > regularMaxLeverage) {\n\t\treturn OrderParamsBitFlag.UpdateHighLeverageMode;\n\t}\n\n\treturn undefined;\n}\n\nexport const ORDER_COMMON_UTILS = {\n\tgetOrderLabelFromOrderDetails,\n\tgetLimitPriceFromOracleOffset,\n\tisAuctionEmpty,\n\tgetUIOrderTypeFromSdkOrderType,\n\tgetPerpAuctionDuration,\n\tgetPerpOrderParamsBitFlags,\n};\n"]}
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../src/common-ui-utils/order.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tOrderType,\n\tOrderTriggerCondition,\n\tOrderStatus,\n\tPositionDirection,\n\tBigNum,\n\tZERO,\n\tContractTier,\n\tBN,\n\tPERCENTAGE_PRECISION,\n\tisOneOfVariant,\n\tMarketType,\n\tDriftClient,\n\tUser,\n\tOrderParamsBitFlag,\n} from '@drift-labs/sdk';\nimport {\n\tLIMIT_ORDER_TYPE_CONFIG,\n\tMARKET_ORDER_TYPE_CONFIG,\n\tORACLE_LIMIT_ORDER_TYPE_CONFIG,\n\tORACLE_MARKET_ORDER_TYPE_CONFIG,\n\tSTOP_LIMIT_ORDER_TYPE_CONFIG,\n\tSTOP_MARKET_ORDER_TYPE_CONFIG,\n\tTAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG,\n\tTAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG,\n\tUI_ORDER_TYPES,\n} from '../constants/orders';\nimport { UISerializableOrder } from '../serializableTypes';\nimport { ENUM_UTILS, matchEnum } from '../utils';\nimport { AuctionParams } from '../types';\nimport { EMPTY_AUCTION_PARAMS } from '../constants/trade';\nimport { MARKET_UTILS } from './market';\n\nconst getOrderLabelFromOrderDetails = (\n\torderDetails: Pick<\n\t\tUISerializableOrder,\n\t\t| 'orderType'\n\t\t| 'oraclePriceOffset'\n\t\t| 'direction'\n\t\t| 'triggerCondition'\n\t\t| 'existingPositionDirection'\n\t>\n) => {\n\tif (matchEnum(orderDetails.orderType, OrderType.MARKET))\n\t\treturn UI_ORDER_TYPES.market.label;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.LIMIT))\n\t\treturn `${\n\t\t\torderDetails.oraclePriceOffset &&\n\t\t\t!orderDetails.oraclePriceOffset?.eqZero()\n\t\t\t\t? 'Oracle '\n\t\t\t\t: ''\n\t\t}${UI_ORDER_TYPES.limit.label}`;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.ORACLE))\n\t\treturn UI_ORDER_TYPES.oracle.label;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.TRIGGER_MARKET)) {\n\t\tconst isTriggered =\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_ABOVE\n\t\t\t) ||\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_BELOW\n\t\t\t);\n\t\tif (isTriggered) {\n\t\t\treturn 'Market (Triggered)';\n\t\t}\n\n\t\tconst isTriggerAbove = matchEnum(\n\t\t\torderDetails.triggerCondition,\n\t\t\tOrderTriggerCondition.ABOVE\n\t\t);\n\t\tconst isOrderDirectionShort = matchEnum(\n\t\t\torderDetails.direction,\n\t\t\tPositionDirection.SHORT\n\t\t);\n\n\t\tif (isTriggerAbove) {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.takeProfitMarket.label\n\t\t\t\t: UI_ORDER_TYPES.stopMarket.label;\n\t\t} else {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.stopMarket.label\n\t\t\t\t: UI_ORDER_TYPES.takeProfitMarket.label;\n\t\t}\n\t}\n\n\tif (matchEnum(orderDetails.orderType, OrderType.TRIGGER_LIMIT)) {\n\t\tconst isTriggered =\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_ABOVE\n\t\t\t) ||\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_BELOW\n\t\t\t);\n\n\t\tconst isTriggerAbove = matchEnum(\n\t\t\torderDetails.triggerCondition,\n\t\t\tOrderTriggerCondition.ABOVE\n\t\t);\n\t\tconst isOrderDirectionShort = matchEnum(\n\t\t\torderDetails.direction,\n\t\t\tPositionDirection.SHORT\n\t\t);\n\n\t\tif (isTriggered) {\n\t\t\treturn 'Limit (Triggered)';\n\t\t}\n\n\t\tif (isTriggerAbove) {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.takeProfitLimit.label\n\t\t\t\t: UI_ORDER_TYPES.stopLimit.label;\n\t\t} else {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.stopLimit.label\n\t\t\t\t: UI_ORDER_TYPES.takeProfitLimit.label;\n\t\t}\n\t}\n\n\treturn '-';\n};\n\nconst getLimitPriceFromOracleOffset = (\n\torder: UISerializableOrder,\n\toraclePrice: BigNum\n): BigNum => {\n\tif (\n\t\t(order.price && !order.price.eqZero()) ||\n\t\t!order.oraclePriceOffset ||\n\t\torder.oraclePriceOffset.eqZero() ||\n\t\t!oraclePrice ||\n\t\toraclePrice?.eqZero()\n\t) {\n\t\treturn order.price;\n\t}\n\treturn oraclePrice.add(order.oraclePriceOffset);\n};\n\nfunction isAuctionEmpty(auctionParams: AuctionParams) {\n\treturn (\n\t\tauctionParams.auctionStartPrice ===\n\t\t\tEMPTY_AUCTION_PARAMS.auctionStartPrice &&\n\t\tauctionParams.auctionEndPrice === EMPTY_AUCTION_PARAMS.auctionEndPrice &&\n\t\tauctionParams.auctionDuration === EMPTY_AUCTION_PARAMS.auctionDuration\n\t);\n}\n\nconst getUIOrderTypeFromSdkOrderType = (\n\torderType: OrderType,\n\ttriggerCondition: OrderTriggerCondition,\n\tdirection: PositionDirection,\n\toracleOffset: BigNum | undefined\n) => {\n\tconst isLong = ENUM_UTILS.match(direction, PositionDirection.LONG);\n\tconst triggerAbove =\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.ABOVE) ||\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.TRIGGERED_ABOVE);\n\n\tconst triggerBelow =\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.BELOW) ||\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.TRIGGERED_BELOW);\n\n\t// Buy side + trigger below: take profit for a short position\n\t// Buy side + trigger above: stop loss for a short position\n\t// Sell side + trigger above: take profit for a long position\n\t// Sell side + trigger below: stop loss for a long position\n\n\tif (matchEnum(orderType, OrderType.MARKET)) {\n\t\treturn MARKET_ORDER_TYPE_CONFIG;\n\t} else if (matchEnum(orderType, OrderType.LIMIT)) {\n\t\tif (oracleOffset && !oracleOffset.eq(ZERO)) {\n\t\t\treturn ORACLE_LIMIT_ORDER_TYPE_CONFIG;\n\t\t} else {\n\t\t\treturn LIMIT_ORDER_TYPE_CONFIG;\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.TRIGGER_MARKET)) {\n\t\tif (isLong) {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn STOP_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn TAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t} else {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn TAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn STOP_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.TRIGGER_LIMIT)) {\n\t\tif (isLong) {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn STOP_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn TAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t} else {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn TAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn STOP_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.ORACLE)) {\n\t\treturn ORACLE_MARKET_ORDER_TYPE_CONFIG;\n\t}\n\tthrow new Error('Invalid order type');\n};\n\nfunction getPerpAuctionDuration(\n\tpriceDiff: BN,\n\tprice: BN,\n\tcontractTier: ContractTier\n): number {\n\tconst percentDiff = priceDiff.mul(PERCENTAGE_PRECISION).div(price);\n\n\tconst slotsPerBp = isOneOfVariant(contractTier, ['a', 'b'])\n\t\t? new BN(100)\n\t\t: new BN(60);\n\n\tconst rawSlots = percentDiff\n\t\t.mul(slotsPerBp)\n\t\t.div(PERCENTAGE_PRECISION.divn(100));\n\n\tconst clamped = BN.min(BN.max(rawSlots, new BN(5)), new BN(180));\n\n\treturn clamped.toNumber();\n}\n\nexport type HighLeverageOptions = {\n\tnumOfOpenHighLeverageSpots?: number; // if not provided, the method will assume that there is spots open\n\tenterHighLeverageModeBufferPct?: number;\n};\n\n/**\n * Mainly checks if the user will be entering high leverage mode through this order.\n */\nfunction getPerpOrderParamsBitFlags(\n\tmarketIndex: number,\n\tdriftClient: DriftClient,\n\tuserAccount: User,\n\tattemptedLeverage: number,\n\thighLeverageOptions?: {\n\t\tnumOfOpenHighLeverageSpots?: number; // if not provided, the method will assume that there is spots open\n\t}\n): number | undefined {\n\tif (attemptedLeverage < 5) {\n\t\t// there is no high leverage mode leverage that is higher than 4\n\t\treturn undefined;\n\t}\n\n\tconst { numOfOpenHighLeverageSpots = Number.MAX_SAFE_INTEGER } =\n\t\thighLeverageOptions || {};\n\n\tif (numOfOpenHighLeverageSpots <= 0) {\n\t\treturn undefined;\n\t}\n\n\tconst {\n\t\thasHighLeverage: isMarketAHighLeverageMarket,\n\t\tmaxLeverage: regularMaxLeverage,\n\t} = MARKET_UTILS.getMaxLeverageForMarket(\n\t\tMarketType.PERP,\n\t\tmarketIndex,\n\t\tdriftClient\n\t);\n\n\tif (!isMarketAHighLeverageMarket) {\n\t\treturn undefined;\n\t}\n\n\t// Check if user is already in high leverage mode\n\tif (userAccount.isHighLeverageMode('Initial')) {\n\t\treturn undefined;\n\t}\n\n\tif (attemptedLeverage > regularMaxLeverage) {\n\t\treturn OrderParamsBitFlag.UpdateHighLeverageMode;\n\t}\n\n\treturn undefined;\n}\n\nconst isOrderTriggered = (\n\torder: Pick<UISerializableOrder, 'orderType' | 'triggerCondition' | 'status'>\n): boolean => {\n\tconst isTriggerOrderType =\n\t\tENUM_UTILS.match(order.orderType, OrderType.TRIGGER_MARKET) ||\n\t\tENUM_UTILS.match(order.orderType, OrderType.TRIGGER_LIMIT);\n\n\tconst orderWasCancelled = ENUM_UTILS.match(\n\t\torder.status,\n\t\tOrderStatus.CANCELED\n\t);\n\n\tconst orderWasTriggered =\n\t\tENUM_UTILS.match(\n\t\t\torder.triggerCondition,\n\t\t\tOrderTriggerCondition.TRIGGERED_ABOVE\n\t\t) ||\n\t\tENUM_UTILS.match(\n\t\t\torder.triggerCondition,\n\t\t\tOrderTriggerCondition.TRIGGERED_BELOW\n\t\t);\n\n\treturn isTriggerOrderType && orderWasTriggered && !orderWasCancelled;\n};\n\nexport const ORDER_COMMON_UTILS = {\n\tgetOrderLabelFromOrderDetails,\n\tgetLimitPriceFromOracleOffset,\n\tisAuctionEmpty,\n\tgetUIOrderTypeFromSdkOrderType,\n\tgetPerpAuctionDuration,\n\tgetPerpOrderParamsBitFlags,\n\tisOrderTriggered,\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/common",
3
- "version": "1.0.45",
3
+ "version": "1.0.46",
4
4
  "description": "Common functions for Drift",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",