@metamask-previews/perps-controller 12.1.0-preview-3c77cf4 → 12.1.0-preview-5cf810ca6
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/CHANGELOG.md +5 -0
- package/dist/perpsErrorCodes.cjs +1 -1
- package/dist/perpsErrorCodes.cjs.map +1 -1
- package/dist/perpsErrorCodes.mjs +1 -1
- package/dist/perpsErrorCodes.mjs.map +1 -1
- package/dist/providers/HyperLiquidProvider.cjs +4 -1
- package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
- package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
- package/dist/providers/HyperLiquidProvider.mjs +4 -1
- package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.cts +9 -0
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.mts +9 -0
- package/dist/types/index.d.mts.map +1 -1
- package/dist/types/index.mjs.map +1 -1
- package/dist/types/perps-types.cjs.map +1 -1
- package/dist/types/perps-types.d.cts +3 -2
- package/dist/types/perps-types.d.cts.map +1 -1
- package/dist/types/perps-types.d.mts +3 -2
- package/dist/types/perps-types.d.mts.map +1 -1
- package/dist/types/perps-types.mjs.map +1 -1
- package/dist/utils/hyperLiquidValidation.cjs +13 -0
- package/dist/utils/hyperLiquidValidation.cjs.map +1 -1
- package/dist/utils/hyperLiquidValidation.d.cts +2 -0
- package/dist/utils/hyperLiquidValidation.d.cts.map +1 -1
- package/dist/utils/hyperLiquidValidation.d.mts +2 -0
- package/dist/utils/hyperLiquidValidation.d.mts.map +1 -1
- package/dist/utils/hyperLiquidValidation.mjs +13 -0
- package/dist/utils/hyperLiquidValidation.mjs.map +1 -1
- package/dist/utils/orderCalculations.cjs +86 -9
- package/dist/utils/orderCalculations.cjs.map +1 -1
- package/dist/utils/orderCalculations.d.cts +24 -3
- package/dist/utils/orderCalculations.d.cts.map +1 -1
- package/dist/utils/orderCalculations.d.mts +24 -3
- package/dist/utils/orderCalculations.d.mts.map +1 -1
- package/dist/utils/orderCalculations.mjs +85 -8
- package/dist/utils/orderCalculations.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
11
|
|
|
12
|
+
- Add `OrderParams.scaleSkew`, which weights a `scale` ladder's size across its rungs instead of spreading it evenly ([#9919](https://github.com/MetaMask/core/pull/9919))
|
|
13
|
+
- Rung weights ramp linearly from 1 at `scaleMinPrice` to `scaleSkew` at `scaleMaxPrice`, in that direction for a buy and a sell alike. Above 1 puts more size at `scaleMaxPrice`, below 1 at `scaleMinPrice`; omitted or exactly 1 is the existing even split, unchanged.
|
|
14
|
+
- `splitScaleSizes` takes a matching optional `skew` and stays the single source of truth for the sizes, so a client previewing a ladder computes what placement submits. Sizes are allocated in whole size-grid units: each rung floors to its share and the leftover units go to the largest discarded fractions, ties by ascending index. The even split keeps putting its leftover on the first rung.
|
|
15
|
+
- A `scaleSkew` that is not a finite number above 0 is rejected by `validateOrderParams` with the existing `ORDER_SCALE_RANGE_INVALID` error code, and carrying it on any non-`scale` order type is rejected with the existing `ORDER_STRATEGY_PARAMS_NOT_SUPPORTED`.
|
|
16
|
+
- A skew that pushes a rung below the venue's per-order minimum or onto a zero size-grid slice is rejected before anything is signed, with the existing `ORDER_SCALE_NOTIONAL_TOO_SMALL` / `ORDER_SCALE_SIZE_TOO_SMALL`.
|
|
12
17
|
- Add `resolvePositionTriggerSummaryPrice` to `@metamask/perps-controller/utils`, which resolves the scalar TP/SL summary price a position reports for one direction from its trigger orders ([#9912](https://github.com/MetaMask/core/pull/9912))
|
|
13
18
|
|
|
14
19
|
### Fixed
|
package/dist/perpsErrorCodes.cjs
CHANGED
|
@@ -68,7 +68,7 @@ exports.PERPS_ERROR_CODES = {
|
|
|
68
68
|
ORDER_TWAP_DURATION_REQUIRED: 'ORDER_TWAP_DURATION_REQUIRED', // TWAP placed without twapDuration
|
|
69
69
|
ORDER_TWAP_DURATION_INVALID: 'ORDER_TWAP_DURATION_INVALID', // twapDuration not a whole number of minutes within the venue's bounds
|
|
70
70
|
ORDER_SCALE_RANGE_REQUIRED: 'ORDER_SCALE_RANGE_REQUIRED', // Scale placed without both ladder bounds
|
|
71
|
-
ORDER_SCALE_RANGE_INVALID: 'ORDER_SCALE_RANGE_INVALID', // Scale ladder bounds
|
|
71
|
+
ORDER_SCALE_RANGE_INVALID: 'ORDER_SCALE_RANGE_INVALID', // Scale ladder bounds or skew are invalid
|
|
72
72
|
ORDER_SCALE_COUNT_INVALID: 'ORDER_SCALE_COUNT_INVALID', // scaleNumOrders missing, non-integer, or outside the supported ladder size
|
|
73
73
|
ORDER_SCALE_SIZE_TOO_SMALL: 'ORDER_SCALE_SIZE_TOO_SMALL', // Total size cannot give every ladder rung a non-zero slice
|
|
74
74
|
ORDER_SCALE_NOTIONAL_TOO_SMALL: 'ORDER_SCALE_NOTIONAL_TOO_SMALL', // Ladder notional split across the rungs leaves each below the venue's per-order minimum
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perpsErrorCodes.cjs","sourceRoot":"","sources":["../src/perpsErrorCodes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Error codes for PerpsController\n * These codes are returned to the UI layer for translation\n * Extracted to separate file to avoid circular dependencies with translatePerpsError\n */\nexport const PERPS_ERROR_CODES = {\n CLIENT_NOT_INITIALIZED: 'CLIENT_NOT_INITIALIZED',\n CLIENT_REINITIALIZING: 'CLIENT_REINITIALIZING',\n PROVIDER_NOT_AVAILABLE: 'PROVIDER_NOT_AVAILABLE',\n TOKEN_NOT_SUPPORTED: 'TOKEN_NOT_SUPPORTED',\n BRIDGE_CONTRACT_NOT_FOUND: 'BRIDGE_CONTRACT_NOT_FOUND',\n WITHDRAW_FAILED: 'WITHDRAW_FAILED',\n POSITIONS_FAILED: 'POSITIONS_FAILED',\n ACCOUNT_STATE_FAILED: 'ACCOUNT_STATE_FAILED',\n MARKETS_FAILED: 'MARKETS_FAILED',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n // Provider-agnostic order errors\n ORDER_LEVERAGE_REDUCTION_FAILED: 'ORDER_LEVERAGE_REDUCTION_FAILED',\n // HyperLiquid-specific order errors\n IOC_CANCEL: 'IOC_CANCEL', // Order could not immediately match (insufficient liquidity)\n // Connection errors\n CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',\n // Validation errors - withdraw\n WITHDRAW_ASSET_ID_REQUIRED: 'WITHDRAW_ASSET_ID_REQUIRED',\n WITHDRAW_AMOUNT_REQUIRED: 'WITHDRAW_AMOUNT_REQUIRED',\n WITHDRAW_AMOUNT_POSITIVE: 'WITHDRAW_AMOUNT_POSITIVE',\n WITHDRAW_INVALID_DESTINATION: 'WITHDRAW_INVALID_DESTINATION',\n WITHDRAW_ASSET_NOT_SUPPORTED: 'WITHDRAW_ASSET_NOT_SUPPORTED',\n WITHDRAW_INSUFFICIENT_BALANCE: 'WITHDRAW_INSUFFICIENT_BALANCE',\n // Validation errors - deposit\n DEPOSIT_ASSET_ID_REQUIRED: 'DEPOSIT_ASSET_ID_REQUIRED',\n DEPOSIT_AMOUNT_REQUIRED: 'DEPOSIT_AMOUNT_REQUIRED',\n DEPOSIT_AMOUNT_POSITIVE: 'DEPOSIT_AMOUNT_POSITIVE',\n DEPOSIT_MINIMUM_AMOUNT: 'DEPOSIT_MINIMUM_AMOUNT',\n // Validation errors - order\n ORDER_COIN_REQUIRED: 'ORDER_COIN_REQUIRED',\n ORDER_LIMIT_PRICE_REQUIRED: 'ORDER_LIMIT_PRICE_REQUIRED',\n ORDER_PRICE_POSITIVE: 'ORDER_PRICE_POSITIVE',\n ORDER_UNKNOWN_COIN: 'ORDER_UNKNOWN_COIN',\n ORDER_SIZE_POSITIVE: 'ORDER_SIZE_POSITIVE',\n ORDER_PRICE_REQUIRED: 'ORDER_PRICE_REQUIRED',\n ORDER_SIZE_MIN: 'ORDER_SIZE_MIN',\n ORDER_LEVERAGE_INVALID: 'ORDER_LEVERAGE_INVALID',\n ORDER_LEVERAGE_BELOW_POSITION: 'ORDER_LEVERAGE_BELOW_POSITION',\n ORDER_MAX_VALUE_EXCEEDED: 'ORDER_MAX_VALUE_EXCEEDED',\n // Validation errors - trigger placement (stop / take profit) and partial TP/SL\n ORDER_TRIGGER_PRICE_REQUIRED: 'ORDER_TRIGGER_PRICE_REQUIRED', // stop_*/take_profit_* placed without a trigger price\n ORDER_TRIGGER_PRICE_POSITIVE: 'ORDER_TRIGGER_PRICE_POSITIVE',\n ORDER_TRIGGER_PRICE_NOT_SUPPORTED: 'ORDER_TRIGGER_PRICE_NOT_SUPPORTED', // Trigger price supplied for a market/limit order\n ORDER_TRIGGER_TPSL_UNSUPPORTED: 'ORDER_TRIGGER_TPSL_UNSUPPORTED', // Attached TP/SL on a trigger placement\n ORDER_TPSL_SIZE_INVALID: 'ORDER_TPSL_SIZE_INVALID', // Partial TP/SL size non-positive, larger than the order, or missing its price\n ORDER_EDIT_TRIGGER_UNSUPPORTED: 'ORDER_EDIT_TRIGGER_UNSUPPORTED', // editOrder cannot turn a resting order into a trigger placement\n ORDER_TPSL_LINKAGE_CONFLICT: 'ORDER_TPSL_LINKAGE_CONFLICT', // tpslLinkage and the deprecated grouping disagree\n ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED:\n 'ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED', // Position-linked TP/SL requested on an order placement; use updatePositionTPSL\n ORDER_TPSL_LINKAGE_REQUIRED: 'ORDER_TPSL_LINKAGE_REQUIRED', // Attached TP/SL requested with no linkage to parent or position\n ORDER_EDIT_ORDER_UNVERIFIABLE: 'ORDER_EDIT_ORDER_UNVERIFIABLE', // editOrder cannot confirm the resting order's placement type\n ORDER_TIME_IN_FORCE_NOT_SUPPORTED: 'ORDER_TIME_IN_FORCE_NOT_SUPPORTED', // Time in force supplied for an order shape that cannot carry one\n // Validation errors - strategy placement (twap / scale / chase)\n ORDER_STRATEGY_PARAMS_NOT_SUPPORTED: 'ORDER_STRATEGY_PARAMS_NOT_SUPPORTED', // Strategy field supplied on an order type that does not own it\n ORDER_STRATEGY_FIELD_UNSUPPORTED: 'ORDER_STRATEGY_FIELD_UNSUPPORTED', // price / triggerPrice / timeInForce / attached TP/SL supplied on a strategy placement\n ORDER_STRATEGY_MARKET_UNSUPPORTED: 'ORDER_STRATEGY_MARKET_UNSUPPORTED', // The provider cannot run a strategy placement on this market\n ORDER_STRATEGY_HANDLE_UNKNOWN: 'ORDER_STRATEGY_HANDLE_UNKNOWN', // Cancel referenced a scale group or chase session this provider does not hold\n ORDER_EDIT_STRATEGY_UNSUPPORTED: 'ORDER_EDIT_STRATEGY_UNSUPPORTED', // editOrder cannot modify a strategy placement; cancel by its handle and place again\n ORDER_STRATEGY_CANCEL_INCOMPLETE: 'ORDER_STRATEGY_CANCEL_INCOMPLETE', // Part of a strategy placement is still resting after a cancel; the handle stays valid for a retry\n ORDER_TWAP_DURATION_REQUIRED: 'ORDER_TWAP_DURATION_REQUIRED', // TWAP placed without twapDuration\n ORDER_TWAP_DURATION_INVALID: 'ORDER_TWAP_DURATION_INVALID', // twapDuration not a whole number of minutes within the venue's bounds\n ORDER_SCALE_RANGE_REQUIRED: 'ORDER_SCALE_RANGE_REQUIRED', // Scale placed without both ladder bounds\n ORDER_SCALE_RANGE_INVALID: 'ORDER_SCALE_RANGE_INVALID', // Scale ladder bounds non-positive or inverted\n ORDER_SCALE_COUNT_INVALID: 'ORDER_SCALE_COUNT_INVALID', // scaleNumOrders missing, non-integer, or outside the supported ladder size\n ORDER_SCALE_SIZE_TOO_SMALL: 'ORDER_SCALE_SIZE_TOO_SMALL', // Total size cannot give every ladder rung a non-zero slice\n ORDER_SCALE_NOTIONAL_TOO_SMALL: 'ORDER_SCALE_NOTIONAL_TOO_SMALL', // Ladder notional split across the rungs leaves each below the venue's per-order minimum\n ORDER_TWAP_NOTIONAL_TOO_SMALL: 'ORDER_TWAP_NOTIONAL_TOO_SMALL', // TWAP total below the venue's documented minimum TWAP order size\n ORDER_CHASE_INTERVAL_INVALID: 'ORDER_CHASE_INTERVAL_INVALID', // chaseIntervalMs below the minimum poll interval\n ORDER_CHASE_DURATION_INVALID: 'ORDER_CHASE_DURATION_INVALID', // chaseMaxDurationMs shorter than one poll interval, or chaseMaxRepricings non-positive\n ORDER_CHASE_ABANDONED: 'ORDER_CHASE_ABANDONED', // The provider was torn down while the chase was being placed; its order rests but no strategy runs\n ORDER_CHASE_LIMIT_REACHED: 'ORDER_CHASE_LIMIT_REACHED', // The venue's cap on simultaneously active chase orders is already in use\n ORDER_CHASE_TOUCH_UNAVAILABLE: 'ORDER_CHASE_TOUCH_UNAVAILABLE', // The order book returned no price on the side the chase must rest at\n // HyperLiquid client/service errors\n EXCHANGE_CLIENT_NOT_AVAILABLE: 'EXCHANGE_CLIENT_NOT_AVAILABLE',\n INFO_CLIENT_NOT_AVAILABLE: 'INFO_CLIENT_NOT_AVAILABLE',\n SUBSCRIPTION_CLIENT_NOT_AVAILABLE: 'SUBSCRIPTION_CLIENT_NOT_AVAILABLE',\n // Wallet/account errors\n NO_ACCOUNT_SELECTED: 'NO_ACCOUNT_SELECTED',\n KEYRING_LOCKED: 'KEYRING_LOCKED',\n INVALID_ADDRESS_FORMAT: 'INVALID_ADDRESS_FORMAT',\n // Wallet has no account on the exchange yet (HyperLiquid creates accounts\n // server-side on the first USDC credit). Actionable: the user must fund the\n // account before any order can be placed.\n EXCHANGE_ACCOUNT_NOT_FOUND: 'EXCHANGE_ACCOUNT_NOT_FOUND',\n // HyperLiquid exchange rejects agent-signed writes for multi-sig accounts\n // without a multi-sig wrapper, or when the action nonce is stale/reused.\n EXCHANGE_MULTI_SIG_REQUIRED: 'EXCHANGE_MULTI_SIG_REQUIRED',\n EXCHANGE_INVALID_NONCE: 'EXCHANGE_INVALID_NONCE',\n // Transfer/swap errors\n TRANSFER_FAILED: 'TRANSFER_FAILED',\n SWAP_FAILED: 'SWAP_FAILED',\n SPOT_PAIR_NOT_FOUND: 'SPOT_PAIR_NOT_FOUND',\n PRICE_UNAVAILABLE: 'PRICE_UNAVAILABLE',\n // Market/collateral errors\n UNSUPPORTED_COLLATERAL: 'UNSUPPORTED_COLLATERAL', // DEX collateral token is not USDC (TAT-3304)\n // Batch operation errors\n BATCH_CANCEL_FAILED: 'BATCH_CANCEL_FAILED',\n BATCH_CLOSE_FAILED: 'BATCH_CLOSE_FAILED',\n // Position/margin errors\n INSUFFICIENT_MARGIN: 'INSUFFICIENT_MARGIN',\n INSUFFICIENT_BALANCE: 'INSUFFICIENT_BALANCE',\n REDUCE_ONLY_VIOLATION: 'REDUCE_ONLY_VIOLATION',\n POSITION_WOULD_FLIP: 'POSITION_WOULD_FLIP',\n MARGIN_ADJUSTMENT_FAILED: 'MARGIN_ADJUSTMENT_FAILED',\n TPSL_UPDATE_FAILED: 'TPSL_UPDATE_FAILED',\n // Order execution errors\n ORDER_REJECTED: 'ORDER_REJECTED',\n SLIPPAGE_EXCEEDED: 'SLIPPAGE_EXCEEDED',\n RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',\n // Network/service errors\n SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',\n NETWORK_ERROR: 'NETWORK_ERROR',\n} as const;\n\nexport type PerpsErrorCode =\n (typeof PERPS_ERROR_CODES)[keyof typeof PERPS_ERROR_CODES];\n"]}
|
|
1
|
+
{"version":3,"file":"perpsErrorCodes.cjs","sourceRoot":"","sources":["../src/perpsErrorCodes.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACU,QAAA,iBAAiB,GAAG;IAC/B,sBAAsB,EAAE,wBAAwB;IAChD,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,mBAAmB,EAAE,qBAAqB;IAC1C,yBAAyB,EAAE,2BAA2B;IACtD,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,oBAAoB,EAAE,sBAAsB;IAC5C,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;IAC9B,iCAAiC;IACjC,+BAA+B,EAAE,iCAAiC;IAClE,oCAAoC;IACpC,UAAU,EAAE,YAAY,EAAE,6DAA6D;IACvF,oBAAoB;IACpB,kBAAkB,EAAE,oBAAoB;IACxC,+BAA+B;IAC/B,0BAA0B,EAAE,4BAA4B;IACxD,wBAAwB,EAAE,0BAA0B;IACpD,wBAAwB,EAAE,0BAA0B;IACpD,4BAA4B,EAAE,8BAA8B;IAC5D,4BAA4B,EAAE,8BAA8B;IAC5D,6BAA6B,EAAE,+BAA+B;IAC9D,8BAA8B;IAC9B,yBAAyB,EAAE,2BAA2B;IACtD,uBAAuB,EAAE,yBAAyB;IAClD,uBAAuB,EAAE,yBAAyB;IAClD,sBAAsB,EAAE,wBAAwB;IAChD,4BAA4B;IAC5B,mBAAmB,EAAE,qBAAqB;IAC1C,0BAA0B,EAAE,4BAA4B;IACxD,oBAAoB,EAAE,sBAAsB;IAC5C,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,cAAc,EAAE,gBAAgB;IAChC,sBAAsB,EAAE,wBAAwB;IAChD,6BAA6B,EAAE,+BAA+B;IAC9D,wBAAwB,EAAE,0BAA0B;IACpD,+EAA+E;IAC/E,4BAA4B,EAAE,8BAA8B,EAAE,sDAAsD;IACpH,4BAA4B,EAAE,8BAA8B;IAC5D,iCAAiC,EAAE,mCAAmC,EAAE,kDAAkD;IAC1H,8BAA8B,EAAE,gCAAgC,EAAE,wCAAwC;IAC1G,uBAAuB,EAAE,yBAAyB,EAAE,+EAA+E;IACnI,8BAA8B,EAAE,gCAAgC,EAAE,iEAAiE;IACnI,2BAA2B,EAAE,6BAA6B,EAAE,mDAAmD;IAC/G,uCAAuC,EACrC,yCAAyC,EAAE,gFAAgF;IAC7H,2BAA2B,EAAE,6BAA6B,EAAE,iEAAiE;IAC7H,6BAA6B,EAAE,+BAA+B,EAAE,8DAA8D;IAC9H,iCAAiC,EAAE,mCAAmC,EAAE,kEAAkE;IAC1I,gEAAgE;IAChE,mCAAmC,EAAE,qCAAqC,EAAE,gEAAgE;IAC5I,gCAAgC,EAAE,kCAAkC,EAAE,uFAAuF;IAC7J,iCAAiC,EAAE,mCAAmC,EAAE,8DAA8D;IACtI,6BAA6B,EAAE,+BAA+B,EAAE,+EAA+E;IAC/I,+BAA+B,EAAE,iCAAiC,EAAE,qFAAqF;IACzJ,gCAAgC,EAAE,kCAAkC,EAAE,mGAAmG;IACzK,4BAA4B,EAAE,8BAA8B,EAAE,mCAAmC;IACjG,2BAA2B,EAAE,6BAA6B,EAAE,uEAAuE;IACnI,0BAA0B,EAAE,4BAA4B,EAAE,0CAA0C;IACpG,yBAAyB,EAAE,2BAA2B,EAAE,0CAA0C;IAClG,yBAAyB,EAAE,2BAA2B,EAAE,4EAA4E;IACpI,0BAA0B,EAAE,4BAA4B,EAAE,4DAA4D;IACtH,8BAA8B,EAAE,gCAAgC,EAAE,yFAAyF;IAC3J,6BAA6B,EAAE,+BAA+B,EAAE,kEAAkE;IAClI,4BAA4B,EAAE,8BAA8B,EAAE,kDAAkD;IAChH,4BAA4B,EAAE,8BAA8B,EAAE,wFAAwF;IACtJ,qBAAqB,EAAE,uBAAuB,EAAE,oGAAoG;IACpJ,yBAAyB,EAAE,2BAA2B,EAAE,0EAA0E;IAClI,6BAA6B,EAAE,+BAA+B,EAAE,sEAAsE;IACtI,oCAAoC;IACpC,6BAA6B,EAAE,+BAA+B;IAC9D,yBAAyB,EAAE,2BAA2B;IACtD,iCAAiC,EAAE,mCAAmC;IACtE,wBAAwB;IACxB,mBAAmB,EAAE,qBAAqB;IAC1C,cAAc,EAAE,gBAAgB;IAChC,sBAAsB,EAAE,wBAAwB;IAChD,0EAA0E;IAC1E,4EAA4E;IAC5E,0CAA0C;IAC1C,0BAA0B,EAAE,4BAA4B;IACxD,0EAA0E;IAC1E,yEAAyE;IACzE,2BAA2B,EAAE,6BAA6B;IAC1D,sBAAsB,EAAE,wBAAwB;IAChD,uBAAuB;IACvB,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,mBAAmB,EAAE,qBAAqB;IAC1C,iBAAiB,EAAE,mBAAmB;IACtC,2BAA2B;IAC3B,sBAAsB,EAAE,wBAAwB,EAAE,8CAA8C;IAChG,yBAAyB;IACzB,mBAAmB,EAAE,qBAAqB;IAC1C,kBAAkB,EAAE,oBAAoB;IACxC,yBAAyB;IACzB,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB,EAAE,uBAAuB;IAC9C,mBAAmB,EAAE,qBAAqB;IAC1C,wBAAwB,EAAE,0BAA0B;IACpD,kBAAkB,EAAE,oBAAoB;IACxC,yBAAyB;IACzB,cAAc,EAAE,gBAAgB;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAC1C,yBAAyB;IACzB,mBAAmB,EAAE,qBAAqB;IAC1C,aAAa,EAAE,eAAe;CACtB,CAAC","sourcesContent":["/**\n * Error codes for PerpsController\n * These codes are returned to the UI layer for translation\n * Extracted to separate file to avoid circular dependencies with translatePerpsError\n */\nexport const PERPS_ERROR_CODES = {\n CLIENT_NOT_INITIALIZED: 'CLIENT_NOT_INITIALIZED',\n CLIENT_REINITIALIZING: 'CLIENT_REINITIALIZING',\n PROVIDER_NOT_AVAILABLE: 'PROVIDER_NOT_AVAILABLE',\n TOKEN_NOT_SUPPORTED: 'TOKEN_NOT_SUPPORTED',\n BRIDGE_CONTRACT_NOT_FOUND: 'BRIDGE_CONTRACT_NOT_FOUND',\n WITHDRAW_FAILED: 'WITHDRAW_FAILED',\n POSITIONS_FAILED: 'POSITIONS_FAILED',\n ACCOUNT_STATE_FAILED: 'ACCOUNT_STATE_FAILED',\n MARKETS_FAILED: 'MARKETS_FAILED',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n // Provider-agnostic order errors\n ORDER_LEVERAGE_REDUCTION_FAILED: 'ORDER_LEVERAGE_REDUCTION_FAILED',\n // HyperLiquid-specific order errors\n IOC_CANCEL: 'IOC_CANCEL', // Order could not immediately match (insufficient liquidity)\n // Connection errors\n CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',\n // Validation errors - withdraw\n WITHDRAW_ASSET_ID_REQUIRED: 'WITHDRAW_ASSET_ID_REQUIRED',\n WITHDRAW_AMOUNT_REQUIRED: 'WITHDRAW_AMOUNT_REQUIRED',\n WITHDRAW_AMOUNT_POSITIVE: 'WITHDRAW_AMOUNT_POSITIVE',\n WITHDRAW_INVALID_DESTINATION: 'WITHDRAW_INVALID_DESTINATION',\n WITHDRAW_ASSET_NOT_SUPPORTED: 'WITHDRAW_ASSET_NOT_SUPPORTED',\n WITHDRAW_INSUFFICIENT_BALANCE: 'WITHDRAW_INSUFFICIENT_BALANCE',\n // Validation errors - deposit\n DEPOSIT_ASSET_ID_REQUIRED: 'DEPOSIT_ASSET_ID_REQUIRED',\n DEPOSIT_AMOUNT_REQUIRED: 'DEPOSIT_AMOUNT_REQUIRED',\n DEPOSIT_AMOUNT_POSITIVE: 'DEPOSIT_AMOUNT_POSITIVE',\n DEPOSIT_MINIMUM_AMOUNT: 'DEPOSIT_MINIMUM_AMOUNT',\n // Validation errors - order\n ORDER_COIN_REQUIRED: 'ORDER_COIN_REQUIRED',\n ORDER_LIMIT_PRICE_REQUIRED: 'ORDER_LIMIT_PRICE_REQUIRED',\n ORDER_PRICE_POSITIVE: 'ORDER_PRICE_POSITIVE',\n ORDER_UNKNOWN_COIN: 'ORDER_UNKNOWN_COIN',\n ORDER_SIZE_POSITIVE: 'ORDER_SIZE_POSITIVE',\n ORDER_PRICE_REQUIRED: 'ORDER_PRICE_REQUIRED',\n ORDER_SIZE_MIN: 'ORDER_SIZE_MIN',\n ORDER_LEVERAGE_INVALID: 'ORDER_LEVERAGE_INVALID',\n ORDER_LEVERAGE_BELOW_POSITION: 'ORDER_LEVERAGE_BELOW_POSITION',\n ORDER_MAX_VALUE_EXCEEDED: 'ORDER_MAX_VALUE_EXCEEDED',\n // Validation errors - trigger placement (stop / take profit) and partial TP/SL\n ORDER_TRIGGER_PRICE_REQUIRED: 'ORDER_TRIGGER_PRICE_REQUIRED', // stop_*/take_profit_* placed without a trigger price\n ORDER_TRIGGER_PRICE_POSITIVE: 'ORDER_TRIGGER_PRICE_POSITIVE',\n ORDER_TRIGGER_PRICE_NOT_SUPPORTED: 'ORDER_TRIGGER_PRICE_NOT_SUPPORTED', // Trigger price supplied for a market/limit order\n ORDER_TRIGGER_TPSL_UNSUPPORTED: 'ORDER_TRIGGER_TPSL_UNSUPPORTED', // Attached TP/SL on a trigger placement\n ORDER_TPSL_SIZE_INVALID: 'ORDER_TPSL_SIZE_INVALID', // Partial TP/SL size non-positive, larger than the order, or missing its price\n ORDER_EDIT_TRIGGER_UNSUPPORTED: 'ORDER_EDIT_TRIGGER_UNSUPPORTED', // editOrder cannot turn a resting order into a trigger placement\n ORDER_TPSL_LINKAGE_CONFLICT: 'ORDER_TPSL_LINKAGE_CONFLICT', // tpslLinkage and the deprecated grouping disagree\n ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED:\n 'ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED', // Position-linked TP/SL requested on an order placement; use updatePositionTPSL\n ORDER_TPSL_LINKAGE_REQUIRED: 'ORDER_TPSL_LINKAGE_REQUIRED', // Attached TP/SL requested with no linkage to parent or position\n ORDER_EDIT_ORDER_UNVERIFIABLE: 'ORDER_EDIT_ORDER_UNVERIFIABLE', // editOrder cannot confirm the resting order's placement type\n ORDER_TIME_IN_FORCE_NOT_SUPPORTED: 'ORDER_TIME_IN_FORCE_NOT_SUPPORTED', // Time in force supplied for an order shape that cannot carry one\n // Validation errors - strategy placement (twap / scale / chase)\n ORDER_STRATEGY_PARAMS_NOT_SUPPORTED: 'ORDER_STRATEGY_PARAMS_NOT_SUPPORTED', // Strategy field supplied on an order type that does not own it\n ORDER_STRATEGY_FIELD_UNSUPPORTED: 'ORDER_STRATEGY_FIELD_UNSUPPORTED', // price / triggerPrice / timeInForce / attached TP/SL supplied on a strategy placement\n ORDER_STRATEGY_MARKET_UNSUPPORTED: 'ORDER_STRATEGY_MARKET_UNSUPPORTED', // The provider cannot run a strategy placement on this market\n ORDER_STRATEGY_HANDLE_UNKNOWN: 'ORDER_STRATEGY_HANDLE_UNKNOWN', // Cancel referenced a scale group or chase session this provider does not hold\n ORDER_EDIT_STRATEGY_UNSUPPORTED: 'ORDER_EDIT_STRATEGY_UNSUPPORTED', // editOrder cannot modify a strategy placement; cancel by its handle and place again\n ORDER_STRATEGY_CANCEL_INCOMPLETE: 'ORDER_STRATEGY_CANCEL_INCOMPLETE', // Part of a strategy placement is still resting after a cancel; the handle stays valid for a retry\n ORDER_TWAP_DURATION_REQUIRED: 'ORDER_TWAP_DURATION_REQUIRED', // TWAP placed without twapDuration\n ORDER_TWAP_DURATION_INVALID: 'ORDER_TWAP_DURATION_INVALID', // twapDuration not a whole number of minutes within the venue's bounds\n ORDER_SCALE_RANGE_REQUIRED: 'ORDER_SCALE_RANGE_REQUIRED', // Scale placed without both ladder bounds\n ORDER_SCALE_RANGE_INVALID: 'ORDER_SCALE_RANGE_INVALID', // Scale ladder bounds or skew are invalid\n ORDER_SCALE_COUNT_INVALID: 'ORDER_SCALE_COUNT_INVALID', // scaleNumOrders missing, non-integer, or outside the supported ladder size\n ORDER_SCALE_SIZE_TOO_SMALL: 'ORDER_SCALE_SIZE_TOO_SMALL', // Total size cannot give every ladder rung a non-zero slice\n ORDER_SCALE_NOTIONAL_TOO_SMALL: 'ORDER_SCALE_NOTIONAL_TOO_SMALL', // Ladder notional split across the rungs leaves each below the venue's per-order minimum\n ORDER_TWAP_NOTIONAL_TOO_SMALL: 'ORDER_TWAP_NOTIONAL_TOO_SMALL', // TWAP total below the venue's documented minimum TWAP order size\n ORDER_CHASE_INTERVAL_INVALID: 'ORDER_CHASE_INTERVAL_INVALID', // chaseIntervalMs below the minimum poll interval\n ORDER_CHASE_DURATION_INVALID: 'ORDER_CHASE_DURATION_INVALID', // chaseMaxDurationMs shorter than one poll interval, or chaseMaxRepricings non-positive\n ORDER_CHASE_ABANDONED: 'ORDER_CHASE_ABANDONED', // The provider was torn down while the chase was being placed; its order rests but no strategy runs\n ORDER_CHASE_LIMIT_REACHED: 'ORDER_CHASE_LIMIT_REACHED', // The venue's cap on simultaneously active chase orders is already in use\n ORDER_CHASE_TOUCH_UNAVAILABLE: 'ORDER_CHASE_TOUCH_UNAVAILABLE', // The order book returned no price on the side the chase must rest at\n // HyperLiquid client/service errors\n EXCHANGE_CLIENT_NOT_AVAILABLE: 'EXCHANGE_CLIENT_NOT_AVAILABLE',\n INFO_CLIENT_NOT_AVAILABLE: 'INFO_CLIENT_NOT_AVAILABLE',\n SUBSCRIPTION_CLIENT_NOT_AVAILABLE: 'SUBSCRIPTION_CLIENT_NOT_AVAILABLE',\n // Wallet/account errors\n NO_ACCOUNT_SELECTED: 'NO_ACCOUNT_SELECTED',\n KEYRING_LOCKED: 'KEYRING_LOCKED',\n INVALID_ADDRESS_FORMAT: 'INVALID_ADDRESS_FORMAT',\n // Wallet has no account on the exchange yet (HyperLiquid creates accounts\n // server-side on the first USDC credit). Actionable: the user must fund the\n // account before any order can be placed.\n EXCHANGE_ACCOUNT_NOT_FOUND: 'EXCHANGE_ACCOUNT_NOT_FOUND',\n // HyperLiquid exchange rejects agent-signed writes for multi-sig accounts\n // without a multi-sig wrapper, or when the action nonce is stale/reused.\n EXCHANGE_MULTI_SIG_REQUIRED: 'EXCHANGE_MULTI_SIG_REQUIRED',\n EXCHANGE_INVALID_NONCE: 'EXCHANGE_INVALID_NONCE',\n // Transfer/swap errors\n TRANSFER_FAILED: 'TRANSFER_FAILED',\n SWAP_FAILED: 'SWAP_FAILED',\n SPOT_PAIR_NOT_FOUND: 'SPOT_PAIR_NOT_FOUND',\n PRICE_UNAVAILABLE: 'PRICE_UNAVAILABLE',\n // Market/collateral errors\n UNSUPPORTED_COLLATERAL: 'UNSUPPORTED_COLLATERAL', // DEX collateral token is not USDC (TAT-3304)\n // Batch operation errors\n BATCH_CANCEL_FAILED: 'BATCH_CANCEL_FAILED',\n BATCH_CLOSE_FAILED: 'BATCH_CLOSE_FAILED',\n // Position/margin errors\n INSUFFICIENT_MARGIN: 'INSUFFICIENT_MARGIN',\n INSUFFICIENT_BALANCE: 'INSUFFICIENT_BALANCE',\n REDUCE_ONLY_VIOLATION: 'REDUCE_ONLY_VIOLATION',\n POSITION_WOULD_FLIP: 'POSITION_WOULD_FLIP',\n MARGIN_ADJUSTMENT_FAILED: 'MARGIN_ADJUSTMENT_FAILED',\n TPSL_UPDATE_FAILED: 'TPSL_UPDATE_FAILED',\n // Order execution errors\n ORDER_REJECTED: 'ORDER_REJECTED',\n SLIPPAGE_EXCEEDED: 'SLIPPAGE_EXCEEDED',\n RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',\n // Network/service errors\n SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',\n NETWORK_ERROR: 'NETWORK_ERROR',\n} as const;\n\nexport type PerpsErrorCode =\n (typeof PERPS_ERROR_CODES)[keyof typeof PERPS_ERROR_CODES];\n"]}
|
package/dist/perpsErrorCodes.mjs
CHANGED
|
@@ -65,7 +65,7 @@ export const PERPS_ERROR_CODES = {
|
|
|
65
65
|
ORDER_TWAP_DURATION_REQUIRED: 'ORDER_TWAP_DURATION_REQUIRED', // TWAP placed without twapDuration
|
|
66
66
|
ORDER_TWAP_DURATION_INVALID: 'ORDER_TWAP_DURATION_INVALID', // twapDuration not a whole number of minutes within the venue's bounds
|
|
67
67
|
ORDER_SCALE_RANGE_REQUIRED: 'ORDER_SCALE_RANGE_REQUIRED', // Scale placed without both ladder bounds
|
|
68
|
-
ORDER_SCALE_RANGE_INVALID: 'ORDER_SCALE_RANGE_INVALID', // Scale ladder bounds
|
|
68
|
+
ORDER_SCALE_RANGE_INVALID: 'ORDER_SCALE_RANGE_INVALID', // Scale ladder bounds or skew are invalid
|
|
69
69
|
ORDER_SCALE_COUNT_INVALID: 'ORDER_SCALE_COUNT_INVALID', // scaleNumOrders missing, non-integer, or outside the supported ladder size
|
|
70
70
|
ORDER_SCALE_SIZE_TOO_SMALL: 'ORDER_SCALE_SIZE_TOO_SMALL', // Total size cannot give every ladder rung a non-zero slice
|
|
71
71
|
ORDER_SCALE_NOTIONAL_TOO_SMALL: 'ORDER_SCALE_NOTIONAL_TOO_SMALL', // Ladder notional split across the rungs leaves each below the venue's per-order minimum
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perpsErrorCodes.mjs","sourceRoot":"","sources":["../src/perpsErrorCodes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Error codes for PerpsController\n * These codes are returned to the UI layer for translation\n * Extracted to separate file to avoid circular dependencies with translatePerpsError\n */\nexport const PERPS_ERROR_CODES = {\n CLIENT_NOT_INITIALIZED: 'CLIENT_NOT_INITIALIZED',\n CLIENT_REINITIALIZING: 'CLIENT_REINITIALIZING',\n PROVIDER_NOT_AVAILABLE: 'PROVIDER_NOT_AVAILABLE',\n TOKEN_NOT_SUPPORTED: 'TOKEN_NOT_SUPPORTED',\n BRIDGE_CONTRACT_NOT_FOUND: 'BRIDGE_CONTRACT_NOT_FOUND',\n WITHDRAW_FAILED: 'WITHDRAW_FAILED',\n POSITIONS_FAILED: 'POSITIONS_FAILED',\n ACCOUNT_STATE_FAILED: 'ACCOUNT_STATE_FAILED',\n MARKETS_FAILED: 'MARKETS_FAILED',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n // Provider-agnostic order errors\n ORDER_LEVERAGE_REDUCTION_FAILED: 'ORDER_LEVERAGE_REDUCTION_FAILED',\n // HyperLiquid-specific order errors\n IOC_CANCEL: 'IOC_CANCEL', // Order could not immediately match (insufficient liquidity)\n // Connection errors\n CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',\n // Validation errors - withdraw\n WITHDRAW_ASSET_ID_REQUIRED: 'WITHDRAW_ASSET_ID_REQUIRED',\n WITHDRAW_AMOUNT_REQUIRED: 'WITHDRAW_AMOUNT_REQUIRED',\n WITHDRAW_AMOUNT_POSITIVE: 'WITHDRAW_AMOUNT_POSITIVE',\n WITHDRAW_INVALID_DESTINATION: 'WITHDRAW_INVALID_DESTINATION',\n WITHDRAW_ASSET_NOT_SUPPORTED: 'WITHDRAW_ASSET_NOT_SUPPORTED',\n WITHDRAW_INSUFFICIENT_BALANCE: 'WITHDRAW_INSUFFICIENT_BALANCE',\n // Validation errors - deposit\n DEPOSIT_ASSET_ID_REQUIRED: 'DEPOSIT_ASSET_ID_REQUIRED',\n DEPOSIT_AMOUNT_REQUIRED: 'DEPOSIT_AMOUNT_REQUIRED',\n DEPOSIT_AMOUNT_POSITIVE: 'DEPOSIT_AMOUNT_POSITIVE',\n DEPOSIT_MINIMUM_AMOUNT: 'DEPOSIT_MINIMUM_AMOUNT',\n // Validation errors - order\n ORDER_COIN_REQUIRED: 'ORDER_COIN_REQUIRED',\n ORDER_LIMIT_PRICE_REQUIRED: 'ORDER_LIMIT_PRICE_REQUIRED',\n ORDER_PRICE_POSITIVE: 'ORDER_PRICE_POSITIVE',\n ORDER_UNKNOWN_COIN: 'ORDER_UNKNOWN_COIN',\n ORDER_SIZE_POSITIVE: 'ORDER_SIZE_POSITIVE',\n ORDER_PRICE_REQUIRED: 'ORDER_PRICE_REQUIRED',\n ORDER_SIZE_MIN: 'ORDER_SIZE_MIN',\n ORDER_LEVERAGE_INVALID: 'ORDER_LEVERAGE_INVALID',\n ORDER_LEVERAGE_BELOW_POSITION: 'ORDER_LEVERAGE_BELOW_POSITION',\n ORDER_MAX_VALUE_EXCEEDED: 'ORDER_MAX_VALUE_EXCEEDED',\n // Validation errors - trigger placement (stop / take profit) and partial TP/SL\n ORDER_TRIGGER_PRICE_REQUIRED: 'ORDER_TRIGGER_PRICE_REQUIRED', // stop_*/take_profit_* placed without a trigger price\n ORDER_TRIGGER_PRICE_POSITIVE: 'ORDER_TRIGGER_PRICE_POSITIVE',\n ORDER_TRIGGER_PRICE_NOT_SUPPORTED: 'ORDER_TRIGGER_PRICE_NOT_SUPPORTED', // Trigger price supplied for a market/limit order\n ORDER_TRIGGER_TPSL_UNSUPPORTED: 'ORDER_TRIGGER_TPSL_UNSUPPORTED', // Attached TP/SL on a trigger placement\n ORDER_TPSL_SIZE_INVALID: 'ORDER_TPSL_SIZE_INVALID', // Partial TP/SL size non-positive, larger than the order, or missing its price\n ORDER_EDIT_TRIGGER_UNSUPPORTED: 'ORDER_EDIT_TRIGGER_UNSUPPORTED', // editOrder cannot turn a resting order into a trigger placement\n ORDER_TPSL_LINKAGE_CONFLICT: 'ORDER_TPSL_LINKAGE_CONFLICT', // tpslLinkage and the deprecated grouping disagree\n ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED:\n 'ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED', // Position-linked TP/SL requested on an order placement; use updatePositionTPSL\n ORDER_TPSL_LINKAGE_REQUIRED: 'ORDER_TPSL_LINKAGE_REQUIRED', // Attached TP/SL requested with no linkage to parent or position\n ORDER_EDIT_ORDER_UNVERIFIABLE: 'ORDER_EDIT_ORDER_UNVERIFIABLE', // editOrder cannot confirm the resting order's placement type\n ORDER_TIME_IN_FORCE_NOT_SUPPORTED: 'ORDER_TIME_IN_FORCE_NOT_SUPPORTED', // Time in force supplied for an order shape that cannot carry one\n // Validation errors - strategy placement (twap / scale / chase)\n ORDER_STRATEGY_PARAMS_NOT_SUPPORTED: 'ORDER_STRATEGY_PARAMS_NOT_SUPPORTED', // Strategy field supplied on an order type that does not own it\n ORDER_STRATEGY_FIELD_UNSUPPORTED: 'ORDER_STRATEGY_FIELD_UNSUPPORTED', // price / triggerPrice / timeInForce / attached TP/SL supplied on a strategy placement\n ORDER_STRATEGY_MARKET_UNSUPPORTED: 'ORDER_STRATEGY_MARKET_UNSUPPORTED', // The provider cannot run a strategy placement on this market\n ORDER_STRATEGY_HANDLE_UNKNOWN: 'ORDER_STRATEGY_HANDLE_UNKNOWN', // Cancel referenced a scale group or chase session this provider does not hold\n ORDER_EDIT_STRATEGY_UNSUPPORTED: 'ORDER_EDIT_STRATEGY_UNSUPPORTED', // editOrder cannot modify a strategy placement; cancel by its handle and place again\n ORDER_STRATEGY_CANCEL_INCOMPLETE: 'ORDER_STRATEGY_CANCEL_INCOMPLETE', // Part of a strategy placement is still resting after a cancel; the handle stays valid for a retry\n ORDER_TWAP_DURATION_REQUIRED: 'ORDER_TWAP_DURATION_REQUIRED', // TWAP placed without twapDuration\n ORDER_TWAP_DURATION_INVALID: 'ORDER_TWAP_DURATION_INVALID', // twapDuration not a whole number of minutes within the venue's bounds\n ORDER_SCALE_RANGE_REQUIRED: 'ORDER_SCALE_RANGE_REQUIRED', // Scale placed without both ladder bounds\n ORDER_SCALE_RANGE_INVALID: 'ORDER_SCALE_RANGE_INVALID', // Scale ladder bounds non-positive or inverted\n ORDER_SCALE_COUNT_INVALID: 'ORDER_SCALE_COUNT_INVALID', // scaleNumOrders missing, non-integer, or outside the supported ladder size\n ORDER_SCALE_SIZE_TOO_SMALL: 'ORDER_SCALE_SIZE_TOO_SMALL', // Total size cannot give every ladder rung a non-zero slice\n ORDER_SCALE_NOTIONAL_TOO_SMALL: 'ORDER_SCALE_NOTIONAL_TOO_SMALL', // Ladder notional split across the rungs leaves each below the venue's per-order minimum\n ORDER_TWAP_NOTIONAL_TOO_SMALL: 'ORDER_TWAP_NOTIONAL_TOO_SMALL', // TWAP total below the venue's documented minimum TWAP order size\n ORDER_CHASE_INTERVAL_INVALID: 'ORDER_CHASE_INTERVAL_INVALID', // chaseIntervalMs below the minimum poll interval\n ORDER_CHASE_DURATION_INVALID: 'ORDER_CHASE_DURATION_INVALID', // chaseMaxDurationMs shorter than one poll interval, or chaseMaxRepricings non-positive\n ORDER_CHASE_ABANDONED: 'ORDER_CHASE_ABANDONED', // The provider was torn down while the chase was being placed; its order rests but no strategy runs\n ORDER_CHASE_LIMIT_REACHED: 'ORDER_CHASE_LIMIT_REACHED', // The venue's cap on simultaneously active chase orders is already in use\n ORDER_CHASE_TOUCH_UNAVAILABLE: 'ORDER_CHASE_TOUCH_UNAVAILABLE', // The order book returned no price on the side the chase must rest at\n // HyperLiquid client/service errors\n EXCHANGE_CLIENT_NOT_AVAILABLE: 'EXCHANGE_CLIENT_NOT_AVAILABLE',\n INFO_CLIENT_NOT_AVAILABLE: 'INFO_CLIENT_NOT_AVAILABLE',\n SUBSCRIPTION_CLIENT_NOT_AVAILABLE: 'SUBSCRIPTION_CLIENT_NOT_AVAILABLE',\n // Wallet/account errors\n NO_ACCOUNT_SELECTED: 'NO_ACCOUNT_SELECTED',\n KEYRING_LOCKED: 'KEYRING_LOCKED',\n INVALID_ADDRESS_FORMAT: 'INVALID_ADDRESS_FORMAT',\n // Wallet has no account on the exchange yet (HyperLiquid creates accounts\n // server-side on the first USDC credit). Actionable: the user must fund the\n // account before any order can be placed.\n EXCHANGE_ACCOUNT_NOT_FOUND: 'EXCHANGE_ACCOUNT_NOT_FOUND',\n // HyperLiquid exchange rejects agent-signed writes for multi-sig accounts\n // without a multi-sig wrapper, or when the action nonce is stale/reused.\n EXCHANGE_MULTI_SIG_REQUIRED: 'EXCHANGE_MULTI_SIG_REQUIRED',\n EXCHANGE_INVALID_NONCE: 'EXCHANGE_INVALID_NONCE',\n // Transfer/swap errors\n TRANSFER_FAILED: 'TRANSFER_FAILED',\n SWAP_FAILED: 'SWAP_FAILED',\n SPOT_PAIR_NOT_FOUND: 'SPOT_PAIR_NOT_FOUND',\n PRICE_UNAVAILABLE: 'PRICE_UNAVAILABLE',\n // Market/collateral errors\n UNSUPPORTED_COLLATERAL: 'UNSUPPORTED_COLLATERAL', // DEX collateral token is not USDC (TAT-3304)\n // Batch operation errors\n BATCH_CANCEL_FAILED: 'BATCH_CANCEL_FAILED',\n BATCH_CLOSE_FAILED: 'BATCH_CLOSE_FAILED',\n // Position/margin errors\n INSUFFICIENT_MARGIN: 'INSUFFICIENT_MARGIN',\n INSUFFICIENT_BALANCE: 'INSUFFICIENT_BALANCE',\n REDUCE_ONLY_VIOLATION: 'REDUCE_ONLY_VIOLATION',\n POSITION_WOULD_FLIP: 'POSITION_WOULD_FLIP',\n MARGIN_ADJUSTMENT_FAILED: 'MARGIN_ADJUSTMENT_FAILED',\n TPSL_UPDATE_FAILED: 'TPSL_UPDATE_FAILED',\n // Order execution errors\n ORDER_REJECTED: 'ORDER_REJECTED',\n SLIPPAGE_EXCEEDED: 'SLIPPAGE_EXCEEDED',\n RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',\n // Network/service errors\n SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',\n NETWORK_ERROR: 'NETWORK_ERROR',\n} as const;\n\nexport type PerpsErrorCode =\n (typeof PERPS_ERROR_CODES)[keyof typeof PERPS_ERROR_CODES];\n"]}
|
|
1
|
+
{"version":3,"file":"perpsErrorCodes.mjs","sourceRoot":"","sources":["../src/perpsErrorCodes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Error codes for PerpsController\n * These codes are returned to the UI layer for translation\n * Extracted to separate file to avoid circular dependencies with translatePerpsError\n */\nexport const PERPS_ERROR_CODES = {\n CLIENT_NOT_INITIALIZED: 'CLIENT_NOT_INITIALIZED',\n CLIENT_REINITIALIZING: 'CLIENT_REINITIALIZING',\n PROVIDER_NOT_AVAILABLE: 'PROVIDER_NOT_AVAILABLE',\n TOKEN_NOT_SUPPORTED: 'TOKEN_NOT_SUPPORTED',\n BRIDGE_CONTRACT_NOT_FOUND: 'BRIDGE_CONTRACT_NOT_FOUND',\n WITHDRAW_FAILED: 'WITHDRAW_FAILED',\n POSITIONS_FAILED: 'POSITIONS_FAILED',\n ACCOUNT_STATE_FAILED: 'ACCOUNT_STATE_FAILED',\n MARKETS_FAILED: 'MARKETS_FAILED',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n // Provider-agnostic order errors\n ORDER_LEVERAGE_REDUCTION_FAILED: 'ORDER_LEVERAGE_REDUCTION_FAILED',\n // HyperLiquid-specific order errors\n IOC_CANCEL: 'IOC_CANCEL', // Order could not immediately match (insufficient liquidity)\n // Connection errors\n CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',\n // Validation errors - withdraw\n WITHDRAW_ASSET_ID_REQUIRED: 'WITHDRAW_ASSET_ID_REQUIRED',\n WITHDRAW_AMOUNT_REQUIRED: 'WITHDRAW_AMOUNT_REQUIRED',\n WITHDRAW_AMOUNT_POSITIVE: 'WITHDRAW_AMOUNT_POSITIVE',\n WITHDRAW_INVALID_DESTINATION: 'WITHDRAW_INVALID_DESTINATION',\n WITHDRAW_ASSET_NOT_SUPPORTED: 'WITHDRAW_ASSET_NOT_SUPPORTED',\n WITHDRAW_INSUFFICIENT_BALANCE: 'WITHDRAW_INSUFFICIENT_BALANCE',\n // Validation errors - deposit\n DEPOSIT_ASSET_ID_REQUIRED: 'DEPOSIT_ASSET_ID_REQUIRED',\n DEPOSIT_AMOUNT_REQUIRED: 'DEPOSIT_AMOUNT_REQUIRED',\n DEPOSIT_AMOUNT_POSITIVE: 'DEPOSIT_AMOUNT_POSITIVE',\n DEPOSIT_MINIMUM_AMOUNT: 'DEPOSIT_MINIMUM_AMOUNT',\n // Validation errors - order\n ORDER_COIN_REQUIRED: 'ORDER_COIN_REQUIRED',\n ORDER_LIMIT_PRICE_REQUIRED: 'ORDER_LIMIT_PRICE_REQUIRED',\n ORDER_PRICE_POSITIVE: 'ORDER_PRICE_POSITIVE',\n ORDER_UNKNOWN_COIN: 'ORDER_UNKNOWN_COIN',\n ORDER_SIZE_POSITIVE: 'ORDER_SIZE_POSITIVE',\n ORDER_PRICE_REQUIRED: 'ORDER_PRICE_REQUIRED',\n ORDER_SIZE_MIN: 'ORDER_SIZE_MIN',\n ORDER_LEVERAGE_INVALID: 'ORDER_LEVERAGE_INVALID',\n ORDER_LEVERAGE_BELOW_POSITION: 'ORDER_LEVERAGE_BELOW_POSITION',\n ORDER_MAX_VALUE_EXCEEDED: 'ORDER_MAX_VALUE_EXCEEDED',\n // Validation errors - trigger placement (stop / take profit) and partial TP/SL\n ORDER_TRIGGER_PRICE_REQUIRED: 'ORDER_TRIGGER_PRICE_REQUIRED', // stop_*/take_profit_* placed without a trigger price\n ORDER_TRIGGER_PRICE_POSITIVE: 'ORDER_TRIGGER_PRICE_POSITIVE',\n ORDER_TRIGGER_PRICE_NOT_SUPPORTED: 'ORDER_TRIGGER_PRICE_NOT_SUPPORTED', // Trigger price supplied for a market/limit order\n ORDER_TRIGGER_TPSL_UNSUPPORTED: 'ORDER_TRIGGER_TPSL_UNSUPPORTED', // Attached TP/SL on a trigger placement\n ORDER_TPSL_SIZE_INVALID: 'ORDER_TPSL_SIZE_INVALID', // Partial TP/SL size non-positive, larger than the order, or missing its price\n ORDER_EDIT_TRIGGER_UNSUPPORTED: 'ORDER_EDIT_TRIGGER_UNSUPPORTED', // editOrder cannot turn a resting order into a trigger placement\n ORDER_TPSL_LINKAGE_CONFLICT: 'ORDER_TPSL_LINKAGE_CONFLICT', // tpslLinkage and the deprecated grouping disagree\n ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED:\n 'ORDER_TPSL_POSITION_LINKAGE_UNSUPPORTED', // Position-linked TP/SL requested on an order placement; use updatePositionTPSL\n ORDER_TPSL_LINKAGE_REQUIRED: 'ORDER_TPSL_LINKAGE_REQUIRED', // Attached TP/SL requested with no linkage to parent or position\n ORDER_EDIT_ORDER_UNVERIFIABLE: 'ORDER_EDIT_ORDER_UNVERIFIABLE', // editOrder cannot confirm the resting order's placement type\n ORDER_TIME_IN_FORCE_NOT_SUPPORTED: 'ORDER_TIME_IN_FORCE_NOT_SUPPORTED', // Time in force supplied for an order shape that cannot carry one\n // Validation errors - strategy placement (twap / scale / chase)\n ORDER_STRATEGY_PARAMS_NOT_SUPPORTED: 'ORDER_STRATEGY_PARAMS_NOT_SUPPORTED', // Strategy field supplied on an order type that does not own it\n ORDER_STRATEGY_FIELD_UNSUPPORTED: 'ORDER_STRATEGY_FIELD_UNSUPPORTED', // price / triggerPrice / timeInForce / attached TP/SL supplied on a strategy placement\n ORDER_STRATEGY_MARKET_UNSUPPORTED: 'ORDER_STRATEGY_MARKET_UNSUPPORTED', // The provider cannot run a strategy placement on this market\n ORDER_STRATEGY_HANDLE_UNKNOWN: 'ORDER_STRATEGY_HANDLE_UNKNOWN', // Cancel referenced a scale group or chase session this provider does not hold\n ORDER_EDIT_STRATEGY_UNSUPPORTED: 'ORDER_EDIT_STRATEGY_UNSUPPORTED', // editOrder cannot modify a strategy placement; cancel by its handle and place again\n ORDER_STRATEGY_CANCEL_INCOMPLETE: 'ORDER_STRATEGY_CANCEL_INCOMPLETE', // Part of a strategy placement is still resting after a cancel; the handle stays valid for a retry\n ORDER_TWAP_DURATION_REQUIRED: 'ORDER_TWAP_DURATION_REQUIRED', // TWAP placed without twapDuration\n ORDER_TWAP_DURATION_INVALID: 'ORDER_TWAP_DURATION_INVALID', // twapDuration not a whole number of minutes within the venue's bounds\n ORDER_SCALE_RANGE_REQUIRED: 'ORDER_SCALE_RANGE_REQUIRED', // Scale placed without both ladder bounds\n ORDER_SCALE_RANGE_INVALID: 'ORDER_SCALE_RANGE_INVALID', // Scale ladder bounds or skew are invalid\n ORDER_SCALE_COUNT_INVALID: 'ORDER_SCALE_COUNT_INVALID', // scaleNumOrders missing, non-integer, or outside the supported ladder size\n ORDER_SCALE_SIZE_TOO_SMALL: 'ORDER_SCALE_SIZE_TOO_SMALL', // Total size cannot give every ladder rung a non-zero slice\n ORDER_SCALE_NOTIONAL_TOO_SMALL: 'ORDER_SCALE_NOTIONAL_TOO_SMALL', // Ladder notional split across the rungs leaves each below the venue's per-order minimum\n ORDER_TWAP_NOTIONAL_TOO_SMALL: 'ORDER_TWAP_NOTIONAL_TOO_SMALL', // TWAP total below the venue's documented minimum TWAP order size\n ORDER_CHASE_INTERVAL_INVALID: 'ORDER_CHASE_INTERVAL_INVALID', // chaseIntervalMs below the minimum poll interval\n ORDER_CHASE_DURATION_INVALID: 'ORDER_CHASE_DURATION_INVALID', // chaseMaxDurationMs shorter than one poll interval, or chaseMaxRepricings non-positive\n ORDER_CHASE_ABANDONED: 'ORDER_CHASE_ABANDONED', // The provider was torn down while the chase was being placed; its order rests but no strategy runs\n ORDER_CHASE_LIMIT_REACHED: 'ORDER_CHASE_LIMIT_REACHED', // The venue's cap on simultaneously active chase orders is already in use\n ORDER_CHASE_TOUCH_UNAVAILABLE: 'ORDER_CHASE_TOUCH_UNAVAILABLE', // The order book returned no price on the side the chase must rest at\n // HyperLiquid client/service errors\n EXCHANGE_CLIENT_NOT_AVAILABLE: 'EXCHANGE_CLIENT_NOT_AVAILABLE',\n INFO_CLIENT_NOT_AVAILABLE: 'INFO_CLIENT_NOT_AVAILABLE',\n SUBSCRIPTION_CLIENT_NOT_AVAILABLE: 'SUBSCRIPTION_CLIENT_NOT_AVAILABLE',\n // Wallet/account errors\n NO_ACCOUNT_SELECTED: 'NO_ACCOUNT_SELECTED',\n KEYRING_LOCKED: 'KEYRING_LOCKED',\n INVALID_ADDRESS_FORMAT: 'INVALID_ADDRESS_FORMAT',\n // Wallet has no account on the exchange yet (HyperLiquid creates accounts\n // server-side on the first USDC credit). Actionable: the user must fund the\n // account before any order can be placed.\n EXCHANGE_ACCOUNT_NOT_FOUND: 'EXCHANGE_ACCOUNT_NOT_FOUND',\n // HyperLiquid exchange rejects agent-signed writes for multi-sig accounts\n // without a multi-sig wrapper, or when the action nonce is stale/reused.\n EXCHANGE_MULTI_SIG_REQUIRED: 'EXCHANGE_MULTI_SIG_REQUIRED',\n EXCHANGE_INVALID_NONCE: 'EXCHANGE_INVALID_NONCE',\n // Transfer/swap errors\n TRANSFER_FAILED: 'TRANSFER_FAILED',\n SWAP_FAILED: 'SWAP_FAILED',\n SPOT_PAIR_NOT_FOUND: 'SPOT_PAIR_NOT_FOUND',\n PRICE_UNAVAILABLE: 'PRICE_UNAVAILABLE',\n // Market/collateral errors\n UNSUPPORTED_COLLATERAL: 'UNSUPPORTED_COLLATERAL', // DEX collateral token is not USDC (TAT-3304)\n // Batch operation errors\n BATCH_CANCEL_FAILED: 'BATCH_CANCEL_FAILED',\n BATCH_CLOSE_FAILED: 'BATCH_CLOSE_FAILED',\n // Position/margin errors\n INSUFFICIENT_MARGIN: 'INSUFFICIENT_MARGIN',\n INSUFFICIENT_BALANCE: 'INSUFFICIENT_BALANCE',\n REDUCE_ONLY_VIOLATION: 'REDUCE_ONLY_VIOLATION',\n POSITION_WOULD_FLIP: 'POSITION_WOULD_FLIP',\n MARGIN_ADJUSTMENT_FAILED: 'MARGIN_ADJUSTMENT_FAILED',\n TPSL_UPDATE_FAILED: 'TPSL_UPDATE_FAILED',\n // Order execution errors\n ORDER_REJECTED: 'ORDER_REJECTED',\n SLIPPAGE_EXCEEDED: 'SLIPPAGE_EXCEEDED',\n RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',\n // Network/service errors\n SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',\n NETWORK_ERROR: 'NETWORK_ERROR',\n} as const;\n\nexport type PerpsErrorCode =\n (typeof PERPS_ERROR_CODES)[keyof typeof PERPS_ERROR_CODES];\n"]}
|
|
@@ -133,6 +133,7 @@ const pickStrategyParams = (params) => ({
|
|
|
133
133
|
scaleMinPrice: params.scaleMinPrice,
|
|
134
134
|
scaleMaxPrice: params.scaleMaxPrice,
|
|
135
135
|
scaleNumOrders: params.scaleNumOrders,
|
|
136
|
+
scaleSkew: params.scaleSkew,
|
|
136
137
|
chaseIntervalMs: params.chaseIntervalMs,
|
|
137
138
|
chaseMaxDurationMs: params.chaseMaxDurationMs,
|
|
138
139
|
chaseMaxRepricings: params.chaseMaxRepricings,
|
|
@@ -6983,11 +6984,13 @@ async function _HyperLiquidProvider_prepareStrategyPlacement(params) {
|
|
|
6983
6984
|
if (new Set(prices).size !== prices.length) {
|
|
6984
6985
|
throw new Error(perpsErrorCodes_js_1.PERPS_ERROR_CODES.ORDER_SCALE_RANGE_INVALID);
|
|
6985
6986
|
}
|
|
6986
|
-
// Throws ORDER_SCALE_SIZE_TOO_SMALL when a rung would round to nothing
|
|
6987
|
+
// Throws ORDER_SCALE_SIZE_TOO_SMALL when a rung would round to nothing,
|
|
6988
|
+
// which a skew weighted far enough from even can do on its own.
|
|
6987
6989
|
const sizes = (0, orderCalculations_js_1.splitScaleSizes)({
|
|
6988
6990
|
totalSize: finalPositionSize,
|
|
6989
6991
|
count,
|
|
6990
6992
|
szDecimals,
|
|
6993
|
+
skew: params.scaleSkew,
|
|
6991
6994
|
});
|
|
6992
6995
|
const minimumOrderSize = __classPrivateFieldGet(this, _HyperLiquidProvider_instances, "m", _HyperLiquidProvider_getMinimumOrderSize).call(this);
|
|
6993
6996
|
const cheapestRungNotional = Math.min(...sizes.map((size, index) => parseFloat(size) * parseFloat(prices[index])));
|