@nktkas/hyperliquid 0.25.7 → 0.25.8
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/CONTRIBUTING.md +26 -19
- package/README.md +57 -5
- package/esm/bin/cli.js +1 -0
- package/esm/bin/cli.js.map +1 -1
- package/esm/src/api/_common_schemas.d.ts +19 -0
- package/esm/src/api/_common_schemas.d.ts.map +1 -1
- package/esm/src/api/_common_schemas.js +15 -0
- package/esm/src/api/_common_schemas.js.map +1 -1
- package/esm/src/api/exchange/_base/_execute.d.ts +6 -7
- package/esm/src/api/exchange/_base/_execute.d.ts.map +1 -1
- package/esm/src/api/exchange/_base/_execute.js +67 -43
- package/esm/src/api/exchange/_base/_execute.js.map +1 -1
- package/esm/src/api/exchange/_base/_types.d.ts +0 -7
- package/esm/src/api/exchange/_base/_types.d.ts.map +1 -1
- package/esm/src/api/exchange/_base/mod.d.ts +0 -2
- package/esm/src/api/exchange/_base/mod.d.ts.map +1 -1
- package/esm/src/api/exchange/_base/mod.js +0 -2
- package/esm/src/api/exchange/_base/mod.js.map +1 -1
- package/esm/src/api/exchange/agentEnableDexAbstraction.d.ts.map +1 -1
- package/esm/src/api/exchange/agentEnableDexAbstraction.js +14 -7
- package/esm/src/api/exchange/agentEnableDexAbstraction.js.map +1 -1
- package/esm/src/api/exchange/approveAgent.d.ts.map +1 -1
- package/esm/src/api/exchange/approveAgent.js +16 -8
- package/esm/src/api/exchange/approveAgent.js.map +1 -1
- package/esm/src/api/exchange/approveBuilderFee.d.ts.map +1 -1
- package/esm/src/api/exchange/approveBuilderFee.js +16 -8
- package/esm/src/api/exchange/approveBuilderFee.js.map +1 -1
- package/esm/src/api/exchange/batchModify.d.ts.map +1 -1
- package/esm/src/api/exchange/batchModify.js +16 -10
- package/esm/src/api/exchange/batchModify.js.map +1 -1
- package/esm/src/api/exchange/cDeposit.d.ts.map +1 -1
- package/esm/src/api/exchange/cDeposit.js +16 -8
- package/esm/src/api/exchange/cDeposit.js.map +1 -1
- package/esm/src/api/exchange/cSignerAction.d.ts.map +1 -1
- package/esm/src/api/exchange/cSignerAction.js +15 -8
- package/esm/src/api/exchange/cSignerAction.js.map +1 -1
- package/esm/src/api/exchange/cValidatorAction.d.ts.map +1 -1
- package/esm/src/api/exchange/cValidatorAction.js +15 -8
- package/esm/src/api/exchange/cValidatorAction.js.map +1 -1
- package/esm/src/api/exchange/cWithdraw.d.ts.map +1 -1
- package/esm/src/api/exchange/cWithdraw.js +16 -8
- package/esm/src/api/exchange/cWithdraw.js.map +1 -1
- package/esm/src/api/exchange/cancel.d.ts.map +1 -1
- package/esm/src/api/exchange/cancel.js +16 -10
- package/esm/src/api/exchange/cancel.js.map +1 -1
- package/esm/src/api/exchange/cancelByCloid.d.ts.map +1 -1
- package/esm/src/api/exchange/cancelByCloid.js +16 -10
- package/esm/src/api/exchange/cancelByCloid.js.map +1 -1
- package/esm/src/api/exchange/claimRewards.d.ts.map +1 -1
- package/esm/src/api/exchange/claimRewards.js +14 -7
- package/esm/src/api/exchange/claimRewards.js.map +1 -1
- package/esm/src/api/exchange/convertToMultiSigUser.d.ts.map +1 -1
- package/esm/src/api/exchange/convertToMultiSigUser.js +16 -8
- package/esm/src/api/exchange/convertToMultiSigUser.js.map +1 -1
- package/esm/src/api/exchange/createSubAccount.d.ts.map +1 -1
- package/esm/src/api/exchange/createSubAccount.js +15 -8
- package/esm/src/api/exchange/createSubAccount.js.map +1 -1
- package/esm/src/api/exchange/createVault.d.ts.map +1 -1
- package/esm/src/api/exchange/createVault.js +15 -8
- package/esm/src/api/exchange/createVault.js.map +1 -1
- package/esm/src/api/exchange/evmUserModify.d.ts +1 -1
- package/esm/src/api/exchange/evmUserModify.d.ts.map +1 -1
- package/esm/src/api/exchange/evmUserModify.js +16 -9
- package/esm/src/api/exchange/evmUserModify.js.map +1 -1
- package/esm/src/api/exchange/linkStakingUser.d.ts +112 -0
- package/esm/src/api/exchange/linkStakingUser.d.ts.map +1 -0
- package/esm/src/api/exchange/linkStakingUser.js +99 -0
- package/esm/src/api/exchange/linkStakingUser.js.map +1 -0
- package/esm/src/api/exchange/modify.d.ts.map +1 -1
- package/esm/src/api/exchange/modify.js +16 -10
- package/esm/src/api/exchange/modify.js.map +1 -1
- package/esm/src/api/exchange/multiSig.d.ts.map +1 -1
- package/esm/src/api/exchange/multiSig.js +17 -16
- package/esm/src/api/exchange/multiSig.js.map +1 -1
- package/esm/src/api/exchange/noop.d.ts.map +1 -1
- package/esm/src/api/exchange/noop.js +14 -7
- package/esm/src/api/exchange/noop.js.map +1 -1
- package/esm/src/api/exchange/order.d.ts.map +1 -1
- package/esm/src/api/exchange/order.js +16 -10
- package/esm/src/api/exchange/order.js.map +1 -1
- package/esm/src/api/exchange/perpDeploy.d.ts.map +1 -1
- package/esm/src/api/exchange/perpDeploy.js +15 -8
- package/esm/src/api/exchange/perpDeploy.js.map +1 -1
- package/esm/src/api/exchange/registerReferrer.d.ts.map +1 -1
- package/esm/src/api/exchange/registerReferrer.js +15 -8
- package/esm/src/api/exchange/registerReferrer.js.map +1 -1
- package/esm/src/api/exchange/reserveRequestWeight.d.ts.map +1 -1
- package/esm/src/api/exchange/reserveRequestWeight.js +15 -8
- package/esm/src/api/exchange/reserveRequestWeight.js.map +1 -1
- package/esm/src/api/exchange/scheduleCancel.js +16 -10
- package/esm/src/api/exchange/scheduleCancel.js.map +1 -1
- package/esm/src/api/exchange/sendAsset.d.ts.map +1 -1
- package/esm/src/api/exchange/sendAsset.js +16 -8
- package/esm/src/api/exchange/sendAsset.js.map +1 -1
- package/esm/src/api/exchange/setDisplayName.d.ts.map +1 -1
- package/esm/src/api/exchange/setDisplayName.js +15 -8
- package/esm/src/api/exchange/setDisplayName.js.map +1 -1
- package/esm/src/api/exchange/setReferrer.d.ts.map +1 -1
- package/esm/src/api/exchange/setReferrer.js +15 -8
- package/esm/src/api/exchange/setReferrer.js.map +1 -1
- package/esm/src/api/exchange/spotDeploy.d.ts.map +1 -1
- package/esm/src/api/exchange/spotDeploy.js +15 -8
- package/esm/src/api/exchange/spotDeploy.js.map +1 -1
- package/esm/src/api/exchange/spotSend.d.ts.map +1 -1
- package/esm/src/api/exchange/spotSend.js +16 -8
- package/esm/src/api/exchange/spotSend.js.map +1 -1
- package/esm/src/api/exchange/spotUser.d.ts.map +1 -1
- package/esm/src/api/exchange/spotUser.js +15 -8
- package/esm/src/api/exchange/spotUser.js.map +1 -1
- package/esm/src/api/exchange/subAccountModify.d.ts.map +1 -1
- package/esm/src/api/exchange/subAccountModify.js +15 -8
- package/esm/src/api/exchange/subAccountModify.js.map +1 -1
- package/esm/src/api/exchange/subAccountSpotTransfer.d.ts.map +1 -1
- package/esm/src/api/exchange/subAccountSpotTransfer.js +15 -8
- package/esm/src/api/exchange/subAccountSpotTransfer.js.map +1 -1
- package/esm/src/api/exchange/subAccountTransfer.d.ts.map +1 -1
- package/esm/src/api/exchange/subAccountTransfer.js +15 -8
- package/esm/src/api/exchange/subAccountTransfer.js.map +1 -1
- package/esm/src/api/exchange/tokenDelegate.d.ts.map +1 -1
- package/esm/src/api/exchange/tokenDelegate.js +16 -8
- package/esm/src/api/exchange/tokenDelegate.js.map +1 -1
- package/esm/src/api/exchange/twapCancel.d.ts.map +1 -1
- package/esm/src/api/exchange/twapCancel.js +16 -10
- package/esm/src/api/exchange/twapCancel.js.map +1 -1
- package/esm/src/api/exchange/twapOrder.d.ts.map +1 -1
- package/esm/src/api/exchange/twapOrder.js +16 -10
- package/esm/src/api/exchange/twapOrder.js.map +1 -1
- package/esm/src/api/exchange/updateIsolatedMargin.d.ts.map +1 -1
- package/esm/src/api/exchange/updateIsolatedMargin.js +16 -10
- package/esm/src/api/exchange/updateIsolatedMargin.js.map +1 -1
- package/esm/src/api/exchange/updateLeverage.d.ts.map +1 -1
- package/esm/src/api/exchange/updateLeverage.js +16 -10
- package/esm/src/api/exchange/updateLeverage.js.map +1 -1
- package/esm/src/api/exchange/usdClassTransfer.d.ts.map +1 -1
- package/esm/src/api/exchange/usdClassTransfer.js +16 -8
- package/esm/src/api/exchange/usdClassTransfer.js.map +1 -1
- package/esm/src/api/exchange/usdSend.d.ts.map +1 -1
- package/esm/src/api/exchange/usdSend.js +16 -8
- package/esm/src/api/exchange/usdSend.js.map +1 -1
- package/esm/src/api/exchange/userDexAbstraction.d.ts.map +1 -1
- package/esm/src/api/exchange/userDexAbstraction.js +16 -8
- package/esm/src/api/exchange/userDexAbstraction.js.map +1 -1
- package/esm/src/api/exchange/vaultDistribute.d.ts.map +1 -1
- package/esm/src/api/exchange/vaultDistribute.js +15 -8
- package/esm/src/api/exchange/vaultDistribute.js.map +1 -1
- package/esm/src/api/exchange/vaultModify.d.ts.map +1 -1
- package/esm/src/api/exchange/vaultModify.js +15 -8
- package/esm/src/api/exchange/vaultModify.js.map +1 -1
- package/esm/src/api/exchange/vaultTransfer.d.ts.map +1 -1
- package/esm/src/api/exchange/vaultTransfer.js +15 -8
- package/esm/src/api/exchange/vaultTransfer.js.map +1 -1
- package/esm/src/api/exchange/withdraw3.d.ts.map +1 -1
- package/esm/src/api/exchange/withdraw3.js +16 -8
- package/esm/src/api/exchange/withdraw3.js.map +1 -1
- package/esm/src/api/exchange/~client.d.ts +31 -3
- package/esm/src/api/exchange/~client.d.ts.map +1 -1
- package/esm/src/api/exchange/~client.js +27 -4
- package/esm/src/api/exchange/~client.js.map +1 -1
- package/esm/src/api/exchange/~mod.d.ts +1 -0
- package/esm/src/api/exchange/~mod.d.ts.map +1 -1
- package/esm/src/api/exchange/~mod.js +1 -0
- package/esm/src/api/exchange/~mod.js.map +1 -1
- package/esm/src/api/info/allPerpMetas.d.ts +5 -0
- package/esm/src/api/info/allPerpMetas.d.ts.map +1 -1
- package/esm/src/api/info/meta.d.ts +5 -0
- package/esm/src/api/info/meta.d.ts.map +1 -1
- package/esm/src/api/info/meta.js +2 -0
- package/esm/src/api/info/meta.js.map +1 -1
- package/esm/src/api/info/metaAndAssetCtxs.d.ts +5 -0
- package/esm/src/api/info/metaAndAssetCtxs.d.ts.map +1 -1
- package/esm/src/api/info/perpDexs.d.ts +4 -0
- package/esm/src/api/info/perpDexs.d.ts.map +1 -1
- package/esm/src/api/info/perpDexs.js +5 -0
- package/esm/src/api/info/perpDexs.js.map +1 -1
- package/esm/src/api/info/spotClearinghouseState.d.ts +0 -5
- package/esm/src/api/info/spotClearinghouseState.d.ts.map +1 -1
- package/esm/src/api/info/spotClearinghouseState.js +2 -14
- package/esm/src/api/info/spotClearinghouseState.js.map +1 -1
- package/esm/src/api/info/userFees.d.ts +27 -2
- package/esm/src/api/info/userFees.d.ts.map +1 -1
- package/esm/src/api/info/userFees.js +29 -1
- package/esm/src/api/info/userFees.js.map +1 -1
- package/esm/src/api/info/webData2.d.ts +6 -0
- package/esm/src/api/info/webData2.d.ts.map +1 -1
- package/esm/src/api/info/~client.d.ts +9 -1
- package/esm/src/api/info/~client.d.ts.map +1 -1
- package/esm/src/api/subscription/spotState.d.ts +91 -0
- package/esm/src/api/subscription/spotState.d.ts.map +1 -0
- package/esm/src/api/subscription/spotState.js +58 -0
- package/esm/src/api/subscription/spotState.js.map +1 -0
- package/esm/src/api/subscription/webData2.d.ts +5 -0
- package/esm/src/api/subscription/webData2.d.ts.map +1 -1
- package/esm/src/api/subscription/~client.d.ts +22 -0
- package/esm/src/api/subscription/~client.d.ts.map +1 -1
- package/esm/src/api/subscription/~client.js +23 -0
- package/esm/src/api/subscription/~client.js.map +1 -1
- package/esm/src/api/subscription/~mod.d.ts +1 -0
- package/esm/src/api/subscription/~mod.d.ts.map +1 -1
- package/esm/src/api/subscription/~mod.js +1 -0
- package/esm/src/api/subscription/~mod.js.map +1 -1
- package/esm/src/signing/_signTypedData.d.ts +1 -1
- package/esm/src/signing/_signTypedData.d.ts.map +1 -1
- package/esm/src/signing/_signTypedData.js +1 -1
- package/esm/src/signing/_signTypedData.js.map +1 -1
- package/esm/src/utils/{_minimalEIP712Signer.d.ts → _eip712.d.ts} +16 -1
- package/esm/src/utils/_eip712.d.ts.map +1 -0
- package/esm/src/utils/{_minimalEIP712Signer.js → _eip712.js} +14 -11
- package/esm/src/utils/_eip712.js.map +1 -0
- package/esm/src/utils/_format.d.ts +3 -4
- package/esm/src/utils/_format.d.ts.map +1 -1
- package/esm/src/utils/_format.js +98 -88
- package/esm/src/utils/_format.js.map +1 -1
- package/esm/src/utils/_recover.d.ts +89 -0
- package/esm/src/utils/_recover.d.ts.map +1 -0
- package/esm/src/utils/_recover.js +119 -0
- package/esm/src/utils/_recover.js.map +1 -0
- package/esm/src/utils/mod.d.ts +1 -0
- package/esm/src/utils/mod.d.ts.map +1 -1
- package/esm/src/utils/mod.js +1 -0
- package/esm/src/utils/mod.js.map +1 -1
- package/package.json +3 -2
- package/script/bin/cli.js +1 -0
- package/script/bin/cli.js.map +1 -1
- package/script/src/api/_common_schemas.d.ts +19 -0
- package/script/src/api/_common_schemas.d.ts.map +1 -1
- package/script/src/api/_common_schemas.js +16 -1
- package/script/src/api/_common_schemas.js.map +1 -1
- package/script/src/api/exchange/_base/_execute.d.ts +6 -7
- package/script/src/api/exchange/_base/_execute.d.ts.map +1 -1
- package/script/src/api/exchange/_base/_execute.js +67 -43
- package/script/src/api/exchange/_base/_execute.js.map +1 -1
- package/script/src/api/exchange/_base/_types.d.ts +0 -7
- package/script/src/api/exchange/_base/_types.d.ts.map +1 -1
- package/script/src/api/exchange/_base/mod.d.ts +0 -2
- package/script/src/api/exchange/_base/mod.d.ts.map +1 -1
- package/script/src/api/exchange/_base/mod.js +0 -2
- package/script/src/api/exchange/_base/mod.js.map +1 -1
- package/script/src/api/exchange/agentEnableDexAbstraction.d.ts.map +1 -1
- package/script/src/api/exchange/agentEnableDexAbstraction.js +14 -7
- package/script/src/api/exchange/agentEnableDexAbstraction.js.map +1 -1
- package/script/src/api/exchange/approveAgent.d.ts.map +1 -1
- package/script/src/api/exchange/approveAgent.js +15 -7
- package/script/src/api/exchange/approveAgent.js.map +1 -1
- package/script/src/api/exchange/approveBuilderFee.d.ts.map +1 -1
- package/script/src/api/exchange/approveBuilderFee.js +15 -7
- package/script/src/api/exchange/approveBuilderFee.js.map +1 -1
- package/script/src/api/exchange/batchModify.d.ts.map +1 -1
- package/script/src/api/exchange/batchModify.js +16 -10
- package/script/src/api/exchange/batchModify.js.map +1 -1
- package/script/src/api/exchange/cDeposit.d.ts.map +1 -1
- package/script/src/api/exchange/cDeposit.js +15 -7
- package/script/src/api/exchange/cDeposit.js.map +1 -1
- package/script/src/api/exchange/cSignerAction.d.ts.map +1 -1
- package/script/src/api/exchange/cSignerAction.js +15 -8
- package/script/src/api/exchange/cSignerAction.js.map +1 -1
- package/script/src/api/exchange/cValidatorAction.d.ts.map +1 -1
- package/script/src/api/exchange/cValidatorAction.js +15 -8
- package/script/src/api/exchange/cValidatorAction.js.map +1 -1
- package/script/src/api/exchange/cWithdraw.d.ts.map +1 -1
- package/script/src/api/exchange/cWithdraw.js +15 -7
- package/script/src/api/exchange/cWithdraw.js.map +1 -1
- package/script/src/api/exchange/cancel.d.ts.map +1 -1
- package/script/src/api/exchange/cancel.js +16 -10
- package/script/src/api/exchange/cancel.js.map +1 -1
- package/script/src/api/exchange/cancelByCloid.d.ts.map +1 -1
- package/script/src/api/exchange/cancelByCloid.js +16 -10
- package/script/src/api/exchange/cancelByCloid.js.map +1 -1
- package/script/src/api/exchange/claimRewards.d.ts.map +1 -1
- package/script/src/api/exchange/claimRewards.js +14 -7
- package/script/src/api/exchange/claimRewards.js.map +1 -1
- package/script/src/api/exchange/convertToMultiSigUser.d.ts.map +1 -1
- package/script/src/api/exchange/convertToMultiSigUser.js +15 -7
- package/script/src/api/exchange/convertToMultiSigUser.js.map +1 -1
- package/script/src/api/exchange/createSubAccount.d.ts.map +1 -1
- package/script/src/api/exchange/createSubAccount.js +15 -8
- package/script/src/api/exchange/createSubAccount.js.map +1 -1
- package/script/src/api/exchange/createVault.d.ts.map +1 -1
- package/script/src/api/exchange/createVault.js +15 -8
- package/script/src/api/exchange/createVault.js.map +1 -1
- package/script/src/api/exchange/evmUserModify.d.ts +1 -1
- package/script/src/api/exchange/evmUserModify.d.ts.map +1 -1
- package/script/src/api/exchange/evmUserModify.js +16 -9
- package/script/src/api/exchange/evmUserModify.js.map +1 -1
- package/script/src/api/exchange/linkStakingUser.d.ts +112 -0
- package/script/src/api/exchange/linkStakingUser.d.ts.map +1 -0
- package/script/src/api/exchange/linkStakingUser.js +136 -0
- package/script/src/api/exchange/linkStakingUser.js.map +1 -0
- package/script/src/api/exchange/modify.d.ts.map +1 -1
- package/script/src/api/exchange/modify.js +16 -10
- package/script/src/api/exchange/modify.js.map +1 -1
- package/script/src/api/exchange/multiSig.d.ts.map +1 -1
- package/script/src/api/exchange/multiSig.js +17 -16
- package/script/src/api/exchange/multiSig.js.map +1 -1
- package/script/src/api/exchange/noop.d.ts.map +1 -1
- package/script/src/api/exchange/noop.js +14 -7
- package/script/src/api/exchange/noop.js.map +1 -1
- package/script/src/api/exchange/order.d.ts.map +1 -1
- package/script/src/api/exchange/order.js +16 -10
- package/script/src/api/exchange/order.js.map +1 -1
- package/script/src/api/exchange/perpDeploy.d.ts.map +1 -1
- package/script/src/api/exchange/perpDeploy.js +15 -8
- package/script/src/api/exchange/perpDeploy.js.map +1 -1
- package/script/src/api/exchange/registerReferrer.d.ts.map +1 -1
- package/script/src/api/exchange/registerReferrer.js +15 -8
- package/script/src/api/exchange/registerReferrer.js.map +1 -1
- package/script/src/api/exchange/reserveRequestWeight.d.ts.map +1 -1
- package/script/src/api/exchange/reserveRequestWeight.js +15 -8
- package/script/src/api/exchange/reserveRequestWeight.js.map +1 -1
- package/script/src/api/exchange/scheduleCancel.js +16 -10
- package/script/src/api/exchange/scheduleCancel.js.map +1 -1
- package/script/src/api/exchange/sendAsset.d.ts.map +1 -1
- package/script/src/api/exchange/sendAsset.js +15 -7
- package/script/src/api/exchange/sendAsset.js.map +1 -1
- package/script/src/api/exchange/setDisplayName.d.ts.map +1 -1
- package/script/src/api/exchange/setDisplayName.js +15 -8
- package/script/src/api/exchange/setDisplayName.js.map +1 -1
- package/script/src/api/exchange/setReferrer.d.ts.map +1 -1
- package/script/src/api/exchange/setReferrer.js +15 -8
- package/script/src/api/exchange/setReferrer.js.map +1 -1
- package/script/src/api/exchange/spotDeploy.d.ts.map +1 -1
- package/script/src/api/exchange/spotDeploy.js +15 -8
- package/script/src/api/exchange/spotDeploy.js.map +1 -1
- package/script/src/api/exchange/spotSend.d.ts.map +1 -1
- package/script/src/api/exchange/spotSend.js +15 -7
- package/script/src/api/exchange/spotSend.js.map +1 -1
- package/script/src/api/exchange/spotUser.d.ts.map +1 -1
- package/script/src/api/exchange/spotUser.js +15 -8
- package/script/src/api/exchange/spotUser.js.map +1 -1
- package/script/src/api/exchange/subAccountModify.d.ts.map +1 -1
- package/script/src/api/exchange/subAccountModify.js +15 -8
- package/script/src/api/exchange/subAccountModify.js.map +1 -1
- package/script/src/api/exchange/subAccountSpotTransfer.d.ts.map +1 -1
- package/script/src/api/exchange/subAccountSpotTransfer.js +15 -8
- package/script/src/api/exchange/subAccountSpotTransfer.js.map +1 -1
- package/script/src/api/exchange/subAccountTransfer.d.ts.map +1 -1
- package/script/src/api/exchange/subAccountTransfer.js +15 -8
- package/script/src/api/exchange/subAccountTransfer.js.map +1 -1
- package/script/src/api/exchange/tokenDelegate.d.ts.map +1 -1
- package/script/src/api/exchange/tokenDelegate.js +15 -7
- package/script/src/api/exchange/tokenDelegate.js.map +1 -1
- package/script/src/api/exchange/twapCancel.d.ts.map +1 -1
- package/script/src/api/exchange/twapCancel.js +16 -10
- package/script/src/api/exchange/twapCancel.js.map +1 -1
- package/script/src/api/exchange/twapOrder.d.ts.map +1 -1
- package/script/src/api/exchange/twapOrder.js +16 -10
- package/script/src/api/exchange/twapOrder.js.map +1 -1
- package/script/src/api/exchange/updateIsolatedMargin.d.ts.map +1 -1
- package/script/src/api/exchange/updateIsolatedMargin.js +16 -10
- package/script/src/api/exchange/updateIsolatedMargin.js.map +1 -1
- package/script/src/api/exchange/updateLeverage.d.ts.map +1 -1
- package/script/src/api/exchange/updateLeverage.js +16 -10
- package/script/src/api/exchange/updateLeverage.js.map +1 -1
- package/script/src/api/exchange/usdClassTransfer.d.ts.map +1 -1
- package/script/src/api/exchange/usdClassTransfer.js +15 -7
- package/script/src/api/exchange/usdClassTransfer.js.map +1 -1
- package/script/src/api/exchange/usdSend.d.ts.map +1 -1
- package/script/src/api/exchange/usdSend.js +15 -7
- package/script/src/api/exchange/usdSend.js.map +1 -1
- package/script/src/api/exchange/userDexAbstraction.d.ts.map +1 -1
- package/script/src/api/exchange/userDexAbstraction.js +15 -7
- package/script/src/api/exchange/userDexAbstraction.js.map +1 -1
- package/script/src/api/exchange/vaultDistribute.d.ts.map +1 -1
- package/script/src/api/exchange/vaultDistribute.js +15 -8
- package/script/src/api/exchange/vaultDistribute.js.map +1 -1
- package/script/src/api/exchange/vaultModify.d.ts.map +1 -1
- package/script/src/api/exchange/vaultModify.js +15 -8
- package/script/src/api/exchange/vaultModify.js.map +1 -1
- package/script/src/api/exchange/vaultTransfer.d.ts.map +1 -1
- package/script/src/api/exchange/vaultTransfer.js +15 -8
- package/script/src/api/exchange/vaultTransfer.js.map +1 -1
- package/script/src/api/exchange/withdraw3.d.ts.map +1 -1
- package/script/src/api/exchange/withdraw3.js +15 -7
- package/script/src/api/exchange/withdraw3.js.map +1 -1
- package/script/src/api/exchange/~client.d.ts +31 -3
- package/script/src/api/exchange/~client.d.ts.map +1 -1
- package/script/src/api/exchange/~client.js +29 -6
- package/script/src/api/exchange/~client.js.map +1 -1
- package/script/src/api/exchange/~mod.d.ts +1 -0
- package/script/src/api/exchange/~mod.d.ts.map +1 -1
- package/script/src/api/exchange/~mod.js +1 -0
- package/script/src/api/exchange/~mod.js.map +1 -1
- package/script/src/api/info/allPerpMetas.d.ts +5 -0
- package/script/src/api/info/allPerpMetas.d.ts.map +1 -1
- package/script/src/api/info/meta.d.ts +5 -0
- package/script/src/api/info/meta.d.ts.map +1 -1
- package/script/src/api/info/meta.js +2 -0
- package/script/src/api/info/meta.js.map +1 -1
- package/script/src/api/info/metaAndAssetCtxs.d.ts +5 -0
- package/script/src/api/info/metaAndAssetCtxs.d.ts.map +1 -1
- package/script/src/api/info/perpDexs.d.ts +4 -0
- package/script/src/api/info/perpDexs.d.ts.map +1 -1
- package/script/src/api/info/perpDexs.js +5 -0
- package/script/src/api/info/perpDexs.js.map +1 -1
- package/script/src/api/info/spotClearinghouseState.d.ts +0 -5
- package/script/src/api/info/spotClearinghouseState.d.ts.map +1 -1
- package/script/src/api/info/spotClearinghouseState.js +2 -14
- package/script/src/api/info/spotClearinghouseState.js.map +1 -1
- package/script/src/api/info/userFees.d.ts +27 -2
- package/script/src/api/info/userFees.d.ts.map +1 -1
- package/script/src/api/info/userFees.js +29 -1
- package/script/src/api/info/userFees.js.map +1 -1
- package/script/src/api/info/webData2.d.ts +6 -0
- package/script/src/api/info/webData2.d.ts.map +1 -1
- package/script/src/api/info/~client.d.ts +9 -1
- package/script/src/api/info/~client.d.ts.map +1 -1
- package/script/src/api/subscription/spotState.d.ts +91 -0
- package/script/src/api/subscription/spotState.d.ts.map +1 -0
- package/script/src/api/subscription/spotState.js +95 -0
- package/script/src/api/subscription/spotState.js.map +1 -0
- package/script/src/api/subscription/webData2.d.ts +5 -0
- package/script/src/api/subscription/webData2.d.ts.map +1 -1
- package/script/src/api/subscription/~client.d.ts +22 -0
- package/script/src/api/subscription/~client.d.ts.map +1 -1
- package/script/src/api/subscription/~client.js +23 -0
- package/script/src/api/subscription/~client.js.map +1 -1
- package/script/src/api/subscription/~mod.d.ts +1 -0
- package/script/src/api/subscription/~mod.d.ts.map +1 -1
- package/script/src/api/subscription/~mod.js +1 -0
- package/script/src/api/subscription/~mod.js.map +1 -1
- package/script/src/signing/_signTypedData.d.ts +1 -1
- package/script/src/signing/_signTypedData.d.ts.map +1 -1
- package/script/src/signing/_signTypedData.js +1 -1
- package/script/src/signing/_signTypedData.js.map +1 -1
- package/script/src/utils/{_minimalEIP712Signer.d.ts → _eip712.d.ts} +16 -1
- package/script/src/utils/_eip712.d.ts.map +1 -0
- package/script/src/utils/{_minimalEIP712Signer.js → _eip712.js} +14 -9
- package/script/src/utils/_eip712.js.map +1 -0
- package/script/src/utils/_format.d.ts +3 -4
- package/script/src/utils/_format.d.ts.map +1 -1
- package/script/src/utils/_format.js +98 -88
- package/script/src/utils/_format.js.map +1 -1
- package/script/src/utils/_recover.d.ts +89 -0
- package/script/src/utils/_recover.d.ts.map +1 -0
- package/script/src/utils/_recover.js +156 -0
- package/script/src/utils/_recover.js.map +1 -0
- package/script/src/utils/mod.d.ts +1 -0
- package/script/src/utils/mod.d.ts.map +1 -1
- package/script/src/utils/mod.js +1 -0
- package/script/src/utils/mod.js.map +1 -1
- package/src/bin/cli.ts +1 -0
- package/src/src/api/_common_schemas.ts +34 -0
- package/src/src/api/exchange/_base/_execute.ts +73 -49
- package/src/src/api/exchange/_base/_types.ts +0 -7
- package/src/src/api/exchange/_base/mod.ts +0 -2
- package/src/src/api/exchange/agentEnableDexAbstraction.ts +14 -9
- package/src/src/api/exchange/approveAgent.ts +15 -12
- package/src/src/api/exchange/approveBuilderFee.ts +15 -12
- package/src/src/api/exchange/batchModify.ts +16 -13
- package/src/src/api/exchange/cDeposit.ts +15 -12
- package/src/src/api/exchange/cSignerAction.ts +15 -10
- package/src/src/api/exchange/cValidatorAction.ts +15 -10
- package/src/src/api/exchange/cWithdraw.ts +15 -12
- package/src/src/api/exchange/cancel.ts +16 -13
- package/src/src/api/exchange/cancelByCloid.ts +16 -13
- package/src/src/api/exchange/claimRewards.ts +14 -9
- package/src/src/api/exchange/convertToMultiSigUser.ts +15 -12
- package/src/src/api/exchange/createSubAccount.ts +15 -10
- package/src/src/api/exchange/createVault.ts +15 -10
- package/src/src/api/exchange/evmUserModify.ts +16 -11
- package/src/src/api/exchange/linkStakingUser.ts +157 -0
- package/src/src/api/exchange/modify.ts +16 -13
- package/src/src/api/exchange/multiSig.ts +17 -23
- package/src/src/api/exchange/noop.ts +14 -9
- package/src/src/api/exchange/order.ts +16 -13
- package/src/src/api/exchange/perpDeploy.ts +15 -10
- package/src/src/api/exchange/registerReferrer.ts +15 -10
- package/src/src/api/exchange/reserveRequestWeight.ts +15 -10
- package/src/src/api/exchange/scheduleCancel.ts +16 -13
- package/src/src/api/exchange/sendAsset.ts +15 -12
- package/src/src/api/exchange/setDisplayName.ts +15 -10
- package/src/src/api/exchange/setReferrer.ts +15 -10
- package/src/src/api/exchange/spotDeploy.ts +15 -10
- package/src/src/api/exchange/spotSend.ts +15 -12
- package/src/src/api/exchange/spotUser.ts +15 -10
- package/src/src/api/exchange/subAccountModify.ts +15 -10
- package/src/src/api/exchange/subAccountSpotTransfer.ts +15 -10
- package/src/src/api/exchange/subAccountTransfer.ts +15 -10
- package/src/src/api/exchange/tokenDelegate.ts +15 -12
- package/src/src/api/exchange/twapCancel.ts +16 -13
- package/src/src/api/exchange/twapOrder.ts +16 -13
- package/src/src/api/exchange/updateIsolatedMargin.ts +16 -13
- package/src/src/api/exchange/updateLeverage.ts +16 -13
- package/src/src/api/exchange/usdClassTransfer.ts +15 -12
- package/src/src/api/exchange/usdSend.ts +15 -12
- package/src/src/api/exchange/userDexAbstraction.ts +15 -12
- package/src/src/api/exchange/vaultDistribute.ts +15 -10
- package/src/src/api/exchange/vaultModify.ts +15 -10
- package/src/src/api/exchange/vaultTransfer.ts +15 -10
- package/src/src/api/exchange/withdraw3.ts +15 -12
- package/src/src/api/exchange/~client.ts +30 -5
- package/src/src/api/exchange/~mod.ts +1 -0
- package/src/src/api/info/meta.ts +7 -0
- package/src/src/api/info/perpDexs.ts +10 -0
- package/src/src/api/info/spotClearinghouseState.ts +3 -33
- package/src/src/api/info/userFees.ts +46 -1
- package/src/src/api/subscription/spotState.ts +96 -0
- package/src/src/api/subscription/~client.ts +25 -0
- package/src/src/api/subscription/~mod.ts +1 -0
- package/src/src/signing/_signTypedData.ts +1 -1
- package/src/src/utils/{_minimalEIP712Signer.ts → _eip712.ts} +22 -29
- package/src/src/utils/_format.ts +99 -98
- package/src/src/utils/_recover.ts +178 -0
- package/src/src/utils/mod.ts +1 -0
- package/esm/src/api/exchange/_base/_sequential.d.ts +0 -30
- package/esm/src/api/exchange/_base/_sequential.d.ts.map +0 -1
- package/esm/src/api/exchange/_base/_sequential.js +0 -69
- package/esm/src/api/exchange/_base/_sequential.js.map +0 -1
- package/esm/src/utils/_minimalEIP712Signer.d.ts.map +0 -1
- package/esm/src/utils/_minimalEIP712Signer.js.map +0 -1
- package/script/src/api/exchange/_base/_sequential.d.ts +0 -30
- package/script/src/api/exchange/_base/_sequential.d.ts.map +0 -1
- package/script/src/api/exchange/_base/_sequential.js +0 -72
- package/script/src/api/exchange/_base/_sequential.js.map +0 -1
- package/script/src/utils/_minimalEIP712Signer.d.ts.map +0 -1
- package/script/src/utils/_minimalEIP712Signer.js.map +0 -1
- package/src/src/api/exchange/_base/_sequential.ts +0 -82
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.formatPrice = formatPrice;
|
|
4
4
|
exports.formatSize = formatSize;
|
|
5
|
-
const _base_js_1 = require("../_base.js");
|
|
6
5
|
/**
|
|
7
6
|
* Format price according to Hyperliquid {@link https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size | rules}:
|
|
8
7
|
* - Maximum 5 significant figures
|
|
9
|
-
* - Maximum
|
|
8
|
+
* - Maximum 6 (for perp) or 8 (for spot) - `szDecimals` decimal places
|
|
10
9
|
* - Integer prices are always allowed regardless of significant figures
|
|
11
|
-
* - Remove trailing zeros
|
|
12
10
|
* @example
|
|
13
11
|
* ```ts
|
|
14
12
|
* import { formatPrice } from "@nktkas/hyperliquid/utils";
|
|
@@ -19,133 +17,145 @@ const _base_js_1 = require("../_base.js");
|
|
|
19
17
|
* ```
|
|
20
18
|
*/
|
|
21
19
|
function formatPrice(price, szDecimals, isPerp = true) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// Integer prices
|
|
25
|
-
if (
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
// Apply decimal limit: max (6 for perp, 8 for spot) - `szDecimals` decimals
|
|
20
|
+
price = price.toString().trim();
|
|
21
|
+
assertNumberString(price);
|
|
22
|
+
// Integer prices are always allowed
|
|
23
|
+
if (/^-?\d+$/.test(price))
|
|
24
|
+
return trimZeros(price);
|
|
25
|
+
// Apply decimal limit: max 6 (perp) or 8 (spot) - szDecimals
|
|
29
26
|
const maxDecimals = Math.max((isPerp ? 6 : 8) - szDecimals, 0);
|
|
30
|
-
|
|
27
|
+
price = StringMath.toFixedTruncate(price, maxDecimals);
|
|
31
28
|
// Apply sig figs limit: max 5 significant figures
|
|
32
|
-
|
|
33
|
-
return
|
|
29
|
+
price = StringMath.toPrecisionTruncate(price, 5);
|
|
30
|
+
return price;
|
|
34
31
|
}
|
|
35
32
|
/**
|
|
36
33
|
* Format size according to Hyperliquid {@link https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size | rules}:
|
|
37
|
-
* - Truncate to `szDecimals`
|
|
38
|
-
* - Remove trailing zeros
|
|
34
|
+
* - Truncate decimal places to `szDecimals`
|
|
39
35
|
* @example
|
|
40
36
|
* ```ts
|
|
41
37
|
* import { formatSize } from "@nktkas/hyperliquid/utils";
|
|
42
38
|
*
|
|
43
39
|
* const size = formatSize("1.23456789", 5); // → "1.23456"
|
|
44
40
|
* ```
|
|
41
|
+
* @note May return 0 if the value is not suitable, but when closing a position, a size of 0 means the full size.
|
|
45
42
|
*/
|
|
46
43
|
function formatSize(size, szDecimals) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
return
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Prepare number string for processing:
|
|
55
|
-
* 1. Trim whitespace
|
|
56
|
-
* 2. Validate format (decimal number, not hex/scientific)
|
|
57
|
-
* 3. Normalize: remove leading zeros from integer part, trailing zeros from decimal part
|
|
58
|
-
*/
|
|
59
|
-
function prepareNumber(numStr) {
|
|
60
|
-
const trimmed = numStr.trim();
|
|
61
|
-
// Validate: only decimal numbers allowed (no hex, scientific notation, etc)
|
|
62
|
-
if (!/^-?(\d+\.?\d*|\.\d+)$/.test(trimmed)) {
|
|
63
|
-
throw new _base_js_1.HyperliquidError(`Invalid number format: ${numStr}`);
|
|
64
|
-
}
|
|
65
|
-
// Normalize: remove leading zeros from integer, trailing zeros from decimal
|
|
66
|
-
const [int, dec] = trimmed.split(".");
|
|
67
|
-
const trimmedInt = int.replace(/^0+/, "") || "0";
|
|
68
|
-
const trimmedDec = dec?.replace(/0+$/, "");
|
|
69
|
-
return trimmedInt + (trimmedDec ? "." + trimmedDec : "");
|
|
44
|
+
size = size.toString().trim();
|
|
45
|
+
assertNumberString(size);
|
|
46
|
+
// Apply decimal limit: szDecimals
|
|
47
|
+
size = StringMath.toFixedTruncate(size, szDecimals);
|
|
48
|
+
return size;
|
|
70
49
|
}
|
|
71
50
|
/** String-based Math operations for arbitrary precision */
|
|
72
51
|
const StringMath = {
|
|
73
|
-
/** Absolute value: remove negative sign if present */
|
|
74
|
-
abs(numStr) {
|
|
75
|
-
return numStr[0] === "-" ? numStr.slice(1) : numStr;
|
|
76
|
-
},
|
|
77
52
|
/** Floor log10 (magnitude): position of most significant digit */
|
|
78
|
-
log10Floor(
|
|
79
|
-
const abs =
|
|
53
|
+
log10Floor(value) {
|
|
54
|
+
const abs = value[0] === "-" ? value.slice(1) : value;
|
|
55
|
+
// Check if zero or invalid
|
|
56
|
+
const num = Number(abs);
|
|
57
|
+
if (num === 0 || isNaN(num))
|
|
58
|
+
return -Infinity;
|
|
80
59
|
const [int, dec] = abs.split(".");
|
|
81
60
|
// Number >= 1: magnitude = length of integer part - 1
|
|
82
|
-
if (int !==
|
|
61
|
+
if (Number(int) !== 0) {
|
|
83
62
|
const trimmed = int.replace(/^0+/, "");
|
|
84
63
|
return trimmed.length - 1;
|
|
85
64
|
}
|
|
86
65
|
// Number < 1: count leading zeros in decimal part
|
|
87
|
-
if (!dec)
|
|
88
|
-
return -Infinity;
|
|
89
66
|
const leadingZeros = dec.match(/^0*/)?.[0].length ?? 0;
|
|
90
67
|
return -(leadingZeros + 1);
|
|
91
68
|
},
|
|
92
69
|
/** Multiply by 10^exp: shift decimal point left (negative) or right (positive) */
|
|
93
|
-
multiplyByPow10(
|
|
70
|
+
multiplyByPow10(value, exp) {
|
|
71
|
+
if (!Number.isInteger(exp))
|
|
72
|
+
throw new RangeError("Exponent must be an integer");
|
|
94
73
|
if (exp === 0)
|
|
95
|
-
return
|
|
96
|
-
const neg =
|
|
97
|
-
const abs = neg ?
|
|
98
|
-
const [
|
|
74
|
+
return trimZeros(value);
|
|
75
|
+
const neg = value[0] === "-";
|
|
76
|
+
const abs = neg ? value.slice(1) : value;
|
|
77
|
+
const [intRaw, dec = ""] = abs.split(".");
|
|
78
|
+
// Normalize empty integer part to "0" (handles ".5" → "0.5")
|
|
79
|
+
const int = intRaw || "0";
|
|
80
|
+
let result;
|
|
99
81
|
if (exp > 0) {
|
|
100
82
|
// Shift right: move digits from decimal to integer
|
|
101
83
|
if (exp >= dec.length) {
|
|
102
|
-
|
|
84
|
+
result = int + dec + "0".repeat(exp - dec.length);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
result = int + dec.slice(0, exp) + "." + dec.slice(exp);
|
|
103
88
|
}
|
|
104
|
-
return (neg ? "-" : "") + int + dec.slice(0, exp) + "." + dec.slice(exp);
|
|
105
89
|
}
|
|
106
90
|
else {
|
|
107
91
|
// Shift left: move digits from integer to decimal
|
|
108
92
|
const absExp = -exp;
|
|
109
93
|
if (absExp >= int.length) {
|
|
110
|
-
|
|
94
|
+
result = "0." + "0".repeat(absExp - int.length) + int + dec;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
result = int.slice(0, -absExp) + "." + int.slice(-absExp) + dec;
|
|
111
98
|
}
|
|
112
|
-
return (neg ? "-" : "") + int.slice(0, -absExp) + "." + int.slice(-absExp) + dec;
|
|
113
99
|
}
|
|
100
|
+
return trimZeros((neg ? "-" : "") + result);
|
|
101
|
+
},
|
|
102
|
+
/** Returns the integer part of a number by removing any fractional digits */
|
|
103
|
+
trunc(value) {
|
|
104
|
+
const dotIndex = value.indexOf(".");
|
|
105
|
+
return dotIndex === -1 ? value : value.slice(0, dotIndex) || "0";
|
|
114
106
|
},
|
|
115
|
-
/** Truncate
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
107
|
+
/** Truncate to a certain number of significant figures */
|
|
108
|
+
toPrecisionTruncate(value, precision) {
|
|
109
|
+
if (!Number.isInteger(precision))
|
|
110
|
+
throw new RangeError("Precision must be an integer");
|
|
111
|
+
if (precision < 1)
|
|
112
|
+
throw new RangeError("Precision must be positive");
|
|
113
|
+
if (/^-?0+(\.0*)?$/.test(value))
|
|
114
|
+
return "0"; // zero is special case (don't work with log10)
|
|
115
|
+
const neg = value[0] === "-";
|
|
116
|
+
const abs = neg ? value.slice(1) : value;
|
|
117
|
+
// Calculate how much to shift: align most significant digit to ones place + (maxSigFigs-1)
|
|
118
|
+
const magnitude = StringMath.log10Floor(abs);
|
|
119
|
+
const shiftAmount = precision - magnitude - 1;
|
|
120
|
+
// Shift right, truncate integer part, shift back
|
|
121
|
+
const shifted = StringMath.multiplyByPow10(abs, shiftAmount);
|
|
122
|
+
const truncated = StringMath.trunc(shifted);
|
|
123
|
+
const result = StringMath.multiplyByPow10(truncated, -shiftAmount);
|
|
124
|
+
// build final result and trim zeros
|
|
125
|
+
return trimZeros(neg ? "-" + result : result);
|
|
126
|
+
},
|
|
127
|
+
/** Truncate to a certain number of decimal places */
|
|
128
|
+
toFixedTruncate(value, decimals) {
|
|
129
|
+
if (!Number.isInteger(decimals))
|
|
130
|
+
throw new RangeError("Decimals must be an integer");
|
|
131
|
+
if (decimals < 0)
|
|
132
|
+
throw new RangeError("Decimals must be non-negative");
|
|
133
|
+
// Match number with up to `decimals` decimal places
|
|
134
|
+
const regex = new RegExp(`^-?(?:\\d+)?(?:\\.\\d{0,${decimals}})?`);
|
|
135
|
+
const result = value.match(regex)?.[0];
|
|
136
|
+
if (!result) {
|
|
137
|
+
throw new TypeError("Invalid number format");
|
|
138
|
+
}
|
|
139
|
+
// Trim zeros after truncation
|
|
140
|
+
return trimZeros(result);
|
|
119
141
|
},
|
|
120
142
|
};
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
143
|
+
function trimZeros(value) {
|
|
144
|
+
return value
|
|
145
|
+
// remove leading zeros
|
|
146
|
+
.replace(/^(-?)0+(?=\d)/, "$1") // "00123" → "123", "-00.5" → "-0.5"
|
|
147
|
+
// remove trailing zeros
|
|
148
|
+
.replace(/\.0*$|(\.\d+?)0+$/, "$1") // "1.2000" → "1.2", "5.0" → "5"
|
|
149
|
+
// add leading zero if starts with decimal point
|
|
150
|
+
.replace(/^(-?)\./, "$10.") // ".5" → "0.5", "-.5" → "-0.5"
|
|
151
|
+
// add "0" if string is empty after trimming
|
|
152
|
+
.replace(/^-?$/, "0") // "" → "0", "-" → "0"
|
|
153
|
+
// normalize negative zero
|
|
154
|
+
.replace(/^-0$/, "0"); // "-0" → "0"
|
|
131
155
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const neg = numStr[0] === "-";
|
|
137
|
-
const abs = neg ? numStr.slice(1) : numStr;
|
|
138
|
-
// Calculate how much to shift: align most significant digit to ones place + (maxSigFigs-1)
|
|
139
|
-
const magnitude = StringMath.log10Floor(abs);
|
|
140
|
-
const shiftAmount = maxSigFigs - magnitude - 1;
|
|
141
|
-
// Shift right, truncate integer part, shift back
|
|
142
|
-
const shifted = StringMath.multiplyByPow10(abs, shiftAmount);
|
|
143
|
-
const truncated = StringMath.trunc(shifted);
|
|
144
|
-
const result = StringMath.multiplyByPow10(truncated, -shiftAmount);
|
|
145
|
-
// Remove trailing zeros introduced by shifting
|
|
146
|
-
const final = neg ? "-" + result : result;
|
|
147
|
-
const [int, dec] = final.split(".");
|
|
148
|
-
const trimmedDec = dec?.replace(/0+$/, "");
|
|
149
|
-
return trimmedDec ? int + "." + trimmedDec : int;
|
|
156
|
+
function assertNumberString(value) {
|
|
157
|
+
if (!/^-?(\d+\.?\d*|\.\d*)$/.test(value)) {
|
|
158
|
+
throw new TypeError("Invalid number format");
|
|
159
|
+
}
|
|
150
160
|
}
|
|
151
161
|
//# sourceMappingURL=_format.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_format.js","sourceRoot":"","sources":["../../../src/src/utils/_format.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"_format.js","sourceRoot":"","sources":["../../../src/src/utils/_format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type Signature } from "../signing/mod.js";
|
|
2
|
+
/**
|
|
3
|
+
* Recover the Ethereum address that signed an L1 action.
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { recoverUserFromL1Action } from "@nktkas/hyperliquid/utils";
|
|
7
|
+
*
|
|
8
|
+
* const action = {
|
|
9
|
+
* type: "cancel",
|
|
10
|
+
* cancels: [{ a: 0, o: 12345 }],
|
|
11
|
+
* };
|
|
12
|
+
* const nonce = 1700000000000;
|
|
13
|
+
* const signature = {
|
|
14
|
+
* r: "0x...",
|
|
15
|
+
* s: "0x...",
|
|
16
|
+
* v: 27,
|
|
17
|
+
* } as const;
|
|
18
|
+
*
|
|
19
|
+
* const address = await recoverUserFromL1Action({ action, nonce, signature });
|
|
20
|
+
* console.log(`Signer address: ${address}`);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function recoverUserFromL1Action(params: {
|
|
24
|
+
/** The action that was signed (hash depends on key order). */
|
|
25
|
+
action: Record<string, unknown>;
|
|
26
|
+
/** The timestamp in ms used when signing. */
|
|
27
|
+
nonce: number;
|
|
28
|
+
/** The signature to recover the address from. */
|
|
29
|
+
signature: Signature;
|
|
30
|
+
/** Indicates if the action is for the testnet. (default: false) */
|
|
31
|
+
isTestnet?: boolean;
|
|
32
|
+
/** Optional vault address used in the action. */
|
|
33
|
+
vaultAddress?: `0x${string}`;
|
|
34
|
+
/** Optional expiration time in ms used in the action. */
|
|
35
|
+
expiresAfter?: number;
|
|
36
|
+
}): Promise<`0x${string}`>;
|
|
37
|
+
/**
|
|
38
|
+
* Recover the Ethereum address that signed a user-signed action.
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* import { recoverUserFromUserSigned } from "@nktkas/hyperliquid/utils";
|
|
42
|
+
*
|
|
43
|
+
* const action = {
|
|
44
|
+
* type: "approveAgent",
|
|
45
|
+
* signatureChainId: "0x66eee" as const,
|
|
46
|
+
* hyperliquidChain: "Mainnet",
|
|
47
|
+
* agentAddress: "0x...",
|
|
48
|
+
* agentName: "Agent",
|
|
49
|
+
* nonce: 1700000000000,
|
|
50
|
+
* };
|
|
51
|
+
* const types = {
|
|
52
|
+
* HyperliquidTransaction: [
|
|
53
|
+
* { name: "hyperliquidChain", type: "string" },
|
|
54
|
+
* // ... other fields
|
|
55
|
+
* ],
|
|
56
|
+
* };
|
|
57
|
+
* const signature = {
|
|
58
|
+
* r: "0x...",
|
|
59
|
+
* s: "0x...",
|
|
60
|
+
* v: 27,
|
|
61
|
+
* } as const;
|
|
62
|
+
*
|
|
63
|
+
* const address = await recoverUserFromUserSigned({ action, types, signature });
|
|
64
|
+
* console.log(`Signer address: ${address}`);
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function recoverUserFromUserSigned(params: {
|
|
68
|
+
/** The action that was signed (hex strings must be in lower case). */
|
|
69
|
+
action: {
|
|
70
|
+
signatureChainId: `0x${string}`;
|
|
71
|
+
[key: string]: unknown;
|
|
72
|
+
} & ({
|
|
73
|
+
nonce: number;
|
|
74
|
+
time?: undefined;
|
|
75
|
+
} | {
|
|
76
|
+
time: number;
|
|
77
|
+
nonce?: undefined;
|
|
78
|
+
});
|
|
79
|
+
/** The types of the action (hash depends on key order). */
|
|
80
|
+
types: {
|
|
81
|
+
[key: string]: {
|
|
82
|
+
name: string;
|
|
83
|
+
type: string;
|
|
84
|
+
}[];
|
|
85
|
+
};
|
|
86
|
+
/** The signature to recover the address from. */
|
|
87
|
+
signature: Signature;
|
|
88
|
+
}): Promise<`0x${string}`>;
|
|
89
|
+
//# sourceMappingURL=_recover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_recover.d.ts","sourceRoot":"","sources":["../../../src/src/utils/_recover.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGvE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,EAAE,SAAS,CAAC;IACrB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,YAAY,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CA+CzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,sEAAsE;IACtE,MAAM,EACF;QACA,gBAAgB,EAAE,KAAK,MAAM,EAAE,CAAC;QAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACC,CACE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE,GACnC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CACtC,CAAC;IACJ,2DAA2D;IAC3D,KAAK,EAAE;QACL,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;SACd,EAAE,CAAC;KACL,CAAC;IACF,iDAAiD;IACjD,SAAS,EAAE,SAAS,CAAC;CACtB,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CA6BzB"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.recoverUserFromL1Action = recoverUserFromL1Action;
|
|
37
|
+
exports.recoverUserFromUserSigned = recoverUserFromUserSigned;
|
|
38
|
+
const sha3_js_1 = require("@noble/hashes/sha3.js");
|
|
39
|
+
const secp = __importStar(require("@noble/secp256k1"));
|
|
40
|
+
const mod_js_1 = require("../signing/mod.js");
|
|
41
|
+
const _eip712_js_1 = require("./_eip712.js");
|
|
42
|
+
/**
|
|
43
|
+
* Recover the Ethereum address that signed an L1 action.
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { recoverUserFromL1Action } from "@nktkas/hyperliquid/utils";
|
|
47
|
+
*
|
|
48
|
+
* const action = {
|
|
49
|
+
* type: "cancel",
|
|
50
|
+
* cancels: [{ a: 0, o: 12345 }],
|
|
51
|
+
* };
|
|
52
|
+
* const nonce = 1700000000000;
|
|
53
|
+
* const signature = {
|
|
54
|
+
* r: "0x...",
|
|
55
|
+
* s: "0x...",
|
|
56
|
+
* v: 27,
|
|
57
|
+
* } as const;
|
|
58
|
+
*
|
|
59
|
+
* const address = await recoverUserFromL1Action({ action, nonce, signature });
|
|
60
|
+
* console.log(`Signer address: ${address}`);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
async function recoverUserFromL1Action(params) {
|
|
64
|
+
const { action, signature, nonce, isTestnet = false, vaultAddress, expiresAfter, } = params;
|
|
65
|
+
// 1. Create the action hash
|
|
66
|
+
const actionHash = (0, mod_js_1.createL1ActionHash)({ action, nonce, vaultAddress, expiresAfter });
|
|
67
|
+
// 2. Hash the typed data according to EIP-712
|
|
68
|
+
const hash = (0, _eip712_js_1.hashTypedData)({
|
|
69
|
+
domain: {
|
|
70
|
+
name: "Exchange",
|
|
71
|
+
version: "1",
|
|
72
|
+
chainId: 1337,
|
|
73
|
+
verifyingContract: "0x0000000000000000000000000000000000000000",
|
|
74
|
+
},
|
|
75
|
+
types: {
|
|
76
|
+
Agent: [
|
|
77
|
+
{ name: "source", type: "string" },
|
|
78
|
+
{ name: "connectionId", type: "bytes32" },
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
primaryType: "Agent",
|
|
82
|
+
message: {
|
|
83
|
+
source: isTestnet ? "b" : "a",
|
|
84
|
+
connectionId: actionHash,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
// 3. Convert signature to recovery format (v, r, s)
|
|
88
|
+
const sigr = secp.etc.concatBytes(new Uint8Array([signature.v - 27]), secp.etc.hexToBytes(signature.r.slice(2)), secp.etc.hexToBytes(signature.s.slice(2)));
|
|
89
|
+
// 4. Recover the public key from the signature and hash
|
|
90
|
+
const compressedPubKey = await secp.recoverPublicKeyAsync(sigr, hash, { prehash: false });
|
|
91
|
+
const uncompressedPubKey = secp.Point.fromBytes(compressedPubKey).toBytes(false);
|
|
92
|
+
// 5. Convert the public key to an Ethereum address
|
|
93
|
+
return publicKeyToAddress(uncompressedPubKey);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Recover the Ethereum address that signed a user-signed action.
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* import { recoverUserFromUserSigned } from "@nktkas/hyperliquid/utils";
|
|
100
|
+
*
|
|
101
|
+
* const action = {
|
|
102
|
+
* type: "approveAgent",
|
|
103
|
+
* signatureChainId: "0x66eee" as const,
|
|
104
|
+
* hyperliquidChain: "Mainnet",
|
|
105
|
+
* agentAddress: "0x...",
|
|
106
|
+
* agentName: "Agent",
|
|
107
|
+
* nonce: 1700000000000,
|
|
108
|
+
* };
|
|
109
|
+
* const types = {
|
|
110
|
+
* HyperliquidTransaction: [
|
|
111
|
+
* { name: "hyperliquidChain", type: "string" },
|
|
112
|
+
* // ... other fields
|
|
113
|
+
* ],
|
|
114
|
+
* };
|
|
115
|
+
* const signature = {
|
|
116
|
+
* r: "0x...",
|
|
117
|
+
* s: "0x...",
|
|
118
|
+
* v: 27,
|
|
119
|
+
* } as const;
|
|
120
|
+
*
|
|
121
|
+
* const address = await recoverUserFromUserSigned({ action, types, signature });
|
|
122
|
+
* console.log(`Signer address: ${address}`);
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
async function recoverUserFromUserSigned(params) {
|
|
126
|
+
const { action, types, signature } = params;
|
|
127
|
+
// 1. Hash the typed data according to EIP-712
|
|
128
|
+
const hash = (0, _eip712_js_1.hashTypedData)({
|
|
129
|
+
domain: {
|
|
130
|
+
name: "HyperliquidSignTransaction",
|
|
131
|
+
version: "1",
|
|
132
|
+
chainId: parseInt(action.signatureChainId),
|
|
133
|
+
verifyingContract: "0x0000000000000000000000000000000000000000",
|
|
134
|
+
},
|
|
135
|
+
types,
|
|
136
|
+
primaryType: Object.keys(types)[0],
|
|
137
|
+
message: action,
|
|
138
|
+
});
|
|
139
|
+
// 2. Convert signature to recovery format (v, r, s)
|
|
140
|
+
const sigr = secp.etc.concatBytes(new Uint8Array([signature.v - 27]), secp.etc.hexToBytes(signature.r.slice(2)), secp.etc.hexToBytes(signature.s.slice(2)));
|
|
141
|
+
// 3. Recover the public key from the signature and hash
|
|
142
|
+
const compressedPubKey = await secp.recoverPublicKeyAsync(sigr, hash, { prehash: false });
|
|
143
|
+
const uncompressedPubKey = secp.Point.fromBytes(compressedPubKey).toBytes(false);
|
|
144
|
+
// 4. Convert the public key to an Ethereum address
|
|
145
|
+
return publicKeyToAddress(uncompressedPubKey);
|
|
146
|
+
}
|
|
147
|
+
/** Convert a public key to an Ethereum address. */
|
|
148
|
+
function publicKeyToAddress(publicKey) {
|
|
149
|
+
// Remove the 0x04 prefix from uncompressed public key
|
|
150
|
+
const publicKeyWithoutPrefix = publicKey.slice(1);
|
|
151
|
+
// Hash the public key and take the last 20 bytes as the address
|
|
152
|
+
const hash = (0, sha3_js_1.keccak_256)(publicKeyWithoutPrefix);
|
|
153
|
+
const addressBytes = hash.slice(-20);
|
|
154
|
+
return `0x${secp.etc.bytesToHex(addressBytes)}`;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=_recover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_recover.js","sourceRoot":"","sources":["../../../src/src/utils/_recover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/src/utils/mod.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/src/utils/mod.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
|
package/script/src/utils/mod.js
CHANGED
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./_symbolConverter.js"), exports);
|
|
18
18
|
__exportStar(require("./_format.js"), exports);
|
|
19
|
+
__exportStar(require("./_recover.js"), exports);
|
|
19
20
|
//# sourceMappingURL=mod.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/src/utils/mod.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,+CAA6B"}
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/src/utils/mod.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,+CAA6B;AAC7B,gDAA8B"}
|
package/src/bin/cli.ts
CHANGED
|
@@ -731,3 +731,37 @@ export const TwapFillSchema = /* @__PURE__ */ (() => {
|
|
|
731
731
|
v.description("TWAP fill record."),
|
|
732
732
|
);
|
|
733
733
|
})();
|
|
734
|
+
|
|
735
|
+
/** Balance for a specific spot token. */
|
|
736
|
+
export const BalanceSchema = /* @__PURE__ */ (() => {
|
|
737
|
+
return v.pipe(
|
|
738
|
+
v.object({
|
|
739
|
+
/** Asset symbol. */
|
|
740
|
+
coin: v.pipe(
|
|
741
|
+
v.string(),
|
|
742
|
+
v.description("Asset symbol."),
|
|
743
|
+
),
|
|
744
|
+
/** Unique identifier for the token. */
|
|
745
|
+
token: v.pipe(
|
|
746
|
+
UnsignedInteger,
|
|
747
|
+
v.description("Unique identifier for the token."),
|
|
748
|
+
),
|
|
749
|
+
/** Total balance. */
|
|
750
|
+
total: v.pipe(
|
|
751
|
+
UnsignedDecimal,
|
|
752
|
+
v.description("Total balance."),
|
|
753
|
+
),
|
|
754
|
+
/** Amount on hold. */
|
|
755
|
+
hold: v.pipe(
|
|
756
|
+
UnsignedDecimal,
|
|
757
|
+
v.description("Amount on hold."),
|
|
758
|
+
),
|
|
759
|
+
/** Entry notional value. */
|
|
760
|
+
entryNtl: v.pipe(
|
|
761
|
+
UnsignedDecimal,
|
|
762
|
+
v.description("Entry notional value."),
|
|
763
|
+
),
|
|
764
|
+
}),
|
|
765
|
+
v.description("Balance for a specific spot token."),
|
|
766
|
+
);
|
|
767
|
+
})();
|