@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
package/src/src/utils/_format.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import { HyperliquidError } from "../_base.js";
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* Format price according to Hyperliquid {@link https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size | rules}:
|
|
5
3
|
* - Maximum 5 significant figures
|
|
6
|
-
* - Maximum
|
|
4
|
+
* - Maximum 6 (for perp) or 8 (for spot) - `szDecimals` decimal places
|
|
7
5
|
* - Integer prices are always allowed regardless of significant figures
|
|
8
|
-
* - Remove trailing zeros
|
|
9
6
|
* @example
|
|
10
7
|
* ```ts
|
|
11
8
|
* import { formatPrice } from "@nktkas/hyperliquid/utils";
|
|
@@ -15,158 +12,162 @@ import { HyperliquidError } from "../_base.js";
|
|
|
15
12
|
* const price = formatPrice("0.0000123456789", 0, false); // → "0.00001234"
|
|
16
13
|
* ```
|
|
17
14
|
*/
|
|
18
|
-
export function formatPrice(
|
|
19
|
-
price
|
|
20
|
-
|
|
21
|
-
isPerp: boolean = true,
|
|
22
|
-
): string {
|
|
23
|
-
// Prepare: trim, validate, normalize leading/trailing zeros
|
|
24
|
-
let priceStr = prepareNumber(typeof price === "string" ? price : price.toString());
|
|
25
|
-
|
|
26
|
-
// Integer prices bypass sig figs limit per spec
|
|
27
|
-
if (!priceStr.includes(".")) {
|
|
28
|
-
return priceStr;
|
|
29
|
-
}
|
|
15
|
+
export function formatPrice(price: string | number, szDecimals: number, isPerp: boolean = true): string {
|
|
16
|
+
price = price.toString().trim();
|
|
17
|
+
assertNumberString(price);
|
|
30
18
|
|
|
31
|
-
//
|
|
19
|
+
// Integer prices are always allowed
|
|
20
|
+
if (/^-?\d+$/.test(price)) return trimZeros(price);
|
|
21
|
+
|
|
22
|
+
// Apply decimal limit: max 6 (perp) or 8 (spot) - szDecimals
|
|
32
23
|
const maxDecimals = Math.max((isPerp ? 6 : 8) - szDecimals, 0);
|
|
33
|
-
|
|
24
|
+
price = StringMath.toFixedTruncate(price, maxDecimals);
|
|
34
25
|
|
|
35
26
|
// Apply sig figs limit: max 5 significant figures
|
|
36
|
-
|
|
27
|
+
price = StringMath.toPrecisionTruncate(price, 5);
|
|
37
28
|
|
|
38
|
-
return
|
|
29
|
+
return price;
|
|
39
30
|
}
|
|
40
31
|
|
|
41
32
|
/**
|
|
42
33
|
* Format size according to Hyperliquid {@link https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size | rules}:
|
|
43
|
-
* - Truncate to `szDecimals`
|
|
44
|
-
* - Remove trailing zeros
|
|
34
|
+
* - Truncate decimal places to `szDecimals`
|
|
45
35
|
* @example
|
|
46
36
|
* ```ts
|
|
47
37
|
* import { formatSize } from "@nktkas/hyperliquid/utils";
|
|
48
38
|
*
|
|
49
39
|
* const size = formatSize("1.23456789", 5); // → "1.23456"
|
|
50
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.
|
|
51
42
|
*/
|
|
52
43
|
export function formatSize(size: string | number, szDecimals: number): string {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
// Truncate to `szDecimals` decimal places
|
|
57
|
-
sizeStr = truncateDecimals(sizeStr, szDecimals);
|
|
58
|
-
|
|
59
|
-
return sizeStr;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Prepare number string for processing:
|
|
64
|
-
* 1. Trim whitespace
|
|
65
|
-
* 2. Validate format (decimal number, not hex/scientific)
|
|
66
|
-
* 3. Normalize: remove leading zeros from integer part, trailing zeros from decimal part
|
|
67
|
-
*/
|
|
68
|
-
function prepareNumber(numStr: string): string {
|
|
69
|
-
const trimmed = numStr.trim();
|
|
44
|
+
size = size.toString().trim();
|
|
45
|
+
assertNumberString(size);
|
|
70
46
|
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
throw new HyperliquidError(`Invalid number format: ${numStr}`);
|
|
74
|
-
}
|
|
47
|
+
// Apply decimal limit: szDecimals
|
|
48
|
+
size = StringMath.toFixedTruncate(size, szDecimals);
|
|
75
49
|
|
|
76
|
-
|
|
77
|
-
const [int, dec] = trimmed.split(".");
|
|
78
|
-
const trimmedInt = int.replace(/^0+/, "") || "0";
|
|
79
|
-
const trimmedDec = dec?.replace(/0+$/, "");
|
|
80
|
-
return trimmedInt + (trimmedDec ? "." + trimmedDec : "");
|
|
50
|
+
return size;
|
|
81
51
|
}
|
|
82
52
|
|
|
83
53
|
/** String-based Math operations for arbitrary precision */
|
|
84
54
|
const StringMath = {
|
|
85
|
-
/** Absolute value: remove negative sign if present */
|
|
86
|
-
abs(numStr: string): string {
|
|
87
|
-
return numStr[0] === "-" ? numStr.slice(1) : numStr;
|
|
88
|
-
},
|
|
89
|
-
|
|
90
55
|
/** Floor log10 (magnitude): position of most significant digit */
|
|
91
|
-
log10Floor(
|
|
92
|
-
const abs =
|
|
56
|
+
log10Floor(value: string): number {
|
|
57
|
+
const abs = value[0] === "-" ? value.slice(1) : value;
|
|
58
|
+
|
|
59
|
+
// Check if zero or invalid
|
|
60
|
+
const num = Number(abs);
|
|
61
|
+
if (num === 0 || isNaN(num)) return -Infinity;
|
|
62
|
+
|
|
93
63
|
const [int, dec] = abs.split(".");
|
|
94
64
|
|
|
95
65
|
// Number >= 1: magnitude = length of integer part - 1
|
|
96
|
-
if (int !==
|
|
66
|
+
if (Number(int) !== 0) {
|
|
97
67
|
const trimmed = int.replace(/^0+/, "");
|
|
98
68
|
return trimmed.length - 1;
|
|
99
69
|
}
|
|
100
70
|
|
|
101
71
|
// Number < 1: count leading zeros in decimal part
|
|
102
|
-
if (!dec) return -Infinity;
|
|
103
72
|
const leadingZeros = dec.match(/^0*/)?.[0].length ?? 0;
|
|
104
73
|
return -(leadingZeros + 1);
|
|
105
74
|
},
|
|
106
75
|
|
|
107
76
|
/** Multiply by 10^exp: shift decimal point left (negative) or right (positive) */
|
|
108
|
-
multiplyByPow10(
|
|
109
|
-
if (exp
|
|
77
|
+
multiplyByPow10(value: string, exp: number): string {
|
|
78
|
+
if (!Number.isInteger(exp)) throw new RangeError("Exponent must be an integer");
|
|
79
|
+
if (exp === 0) return trimZeros(value);
|
|
110
80
|
|
|
111
|
-
const neg =
|
|
112
|
-
const abs = neg ?
|
|
113
|
-
const [
|
|
81
|
+
const neg = value[0] === "-";
|
|
82
|
+
const abs = neg ? value.slice(1) : value;
|
|
83
|
+
const [intRaw, dec = ""] = abs.split(".");
|
|
84
|
+
// Normalize empty integer part to "0" (handles ".5" → "0.5")
|
|
85
|
+
const int = intRaw || "0";
|
|
86
|
+
|
|
87
|
+
let result: string;
|
|
114
88
|
|
|
115
89
|
if (exp > 0) {
|
|
116
90
|
// Shift right: move digits from decimal to integer
|
|
117
91
|
if (exp >= dec.length) {
|
|
118
|
-
|
|
92
|
+
result = int + dec + "0".repeat(exp - dec.length);
|
|
93
|
+
} else {
|
|
94
|
+
result = int + dec.slice(0, exp) + "." + dec.slice(exp);
|
|
119
95
|
}
|
|
120
|
-
return (neg ? "-" : "") + int + dec.slice(0, exp) + "." + dec.slice(exp);
|
|
121
96
|
} else {
|
|
122
97
|
// Shift left: move digits from integer to decimal
|
|
123
98
|
const absExp = -exp;
|
|
124
99
|
if (absExp >= int.length) {
|
|
125
|
-
|
|
100
|
+
result = "0." + "0".repeat(absExp - int.length) + int + dec;
|
|
101
|
+
} else {
|
|
102
|
+
result = int.slice(0, -absExp) + "." + int.slice(-absExp) + dec;
|
|
126
103
|
}
|
|
127
|
-
return (neg ? "-" : "") + int.slice(0, -absExp) + "." + int.slice(-absExp) + dec;
|
|
128
104
|
}
|
|
105
|
+
|
|
106
|
+
return trimZeros((neg ? "-" : "") + result);
|
|
129
107
|
},
|
|
130
108
|
|
|
131
|
-
/**
|
|
132
|
-
trunc(
|
|
133
|
-
const dotIndex =
|
|
134
|
-
return dotIndex === -1 ?
|
|
109
|
+
/** Returns the integer part of a number by removing any fractional digits */
|
|
110
|
+
trunc(value: string): string {
|
|
111
|
+
const dotIndex = value.indexOf(".");
|
|
112
|
+
return dotIndex === -1 ? value : value.slice(0, dotIndex) || "0";
|
|
135
113
|
},
|
|
136
|
-
};
|
|
137
114
|
|
|
138
|
-
/** Truncate to
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
115
|
+
/** Truncate to a certain number of significant figures */
|
|
116
|
+
toPrecisionTruncate(value: string, precision: number): string {
|
|
117
|
+
if (!Number.isInteger(precision)) throw new RangeError("Precision must be an integer");
|
|
118
|
+
if (precision < 1) throw new RangeError("Precision must be positive");
|
|
119
|
+
if (/^-?0+(\.0*)?$/.test(value)) return "0"; // zero is special case (don't work with log10)
|
|
142
120
|
|
|
143
|
-
|
|
121
|
+
const neg = value[0] === "-";
|
|
122
|
+
const abs = neg ? value.slice(1) : value;
|
|
144
123
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return trimmedDec ? int + "." + trimmedDec : int;
|
|
149
|
-
}
|
|
124
|
+
// Calculate how much to shift: align most significant digit to ones place + (maxSigFigs-1)
|
|
125
|
+
const magnitude = StringMath.log10Floor(abs);
|
|
126
|
+
const shiftAmount = precision - magnitude - 1;
|
|
150
127
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
128
|
+
// Shift right, truncate integer part, shift back
|
|
129
|
+
const shifted = StringMath.multiplyByPow10(abs, shiftAmount);
|
|
130
|
+
const truncated = StringMath.trunc(shifted);
|
|
131
|
+
const result = StringMath.multiplyByPow10(truncated, -shiftAmount);
|
|
154
132
|
|
|
155
|
-
|
|
156
|
-
|
|
133
|
+
// build final result and trim zeros
|
|
134
|
+
return trimZeros(neg ? "-" + result : result);
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
/** Truncate to a certain number of decimal places */
|
|
138
|
+
toFixedTruncate(value: string, decimals: number): string {
|
|
139
|
+
if (!Number.isInteger(decimals)) throw new RangeError("Decimals must be an integer");
|
|
140
|
+
if (decimals < 0) throw new RangeError("Decimals must be non-negative");
|
|
157
141
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
142
|
+
// Match number with up to `decimals` decimal places
|
|
143
|
+
const regex = new RegExp(`^-?(?:\\d+)?(?:\\.\\d{0,${decimals}})?`);
|
|
144
|
+
const result = value.match(regex)?.[0];
|
|
161
145
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const result = StringMath.multiplyByPow10(truncated, -shiftAmount);
|
|
146
|
+
if (!result) {
|
|
147
|
+
throw new TypeError("Invalid number format");
|
|
148
|
+
}
|
|
166
149
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
150
|
+
// Trim zeros after truncation
|
|
151
|
+
return trimZeros(result);
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
function trimZeros(value: string): string {
|
|
156
|
+
return value
|
|
157
|
+
// remove leading zeros
|
|
158
|
+
.replace(/^(-?)0+(?=\d)/, "$1") // "00123" → "123", "-00.5" → "-0.5"
|
|
159
|
+
// remove trailing zeros
|
|
160
|
+
.replace(/\.0*$|(\.\d+?)0+$/, "$1") // "1.2000" → "1.2", "5.0" → "5"
|
|
161
|
+
// add leading zero if starts with decimal point
|
|
162
|
+
.replace(/^(-?)\./, "$10.") // ".5" → "0.5", "-.5" → "-0.5"
|
|
163
|
+
// add "0" if string is empty after trimming
|
|
164
|
+
.replace(/^-?$/, "0") // "" → "0", "-" → "0"
|
|
165
|
+
// normalize negative zero
|
|
166
|
+
.replace(/^-0$/, "0"); // "-0" → "0"
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function assertNumberString(value: string): void {
|
|
170
|
+
if (!/^-?(\d+\.?\d*|\.\d*)$/.test(value)) {
|
|
171
|
+
throw new TypeError("Invalid number format");
|
|
172
|
+
}
|
|
172
173
|
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { keccak_256 } from "@noble/hashes/sha3.js";
|
|
2
|
+
import * as secp from "@noble/secp256k1";
|
|
3
|
+
import { createL1ActionHash, type Signature } from "../signing/mod.js";
|
|
4
|
+
import { hashTypedData } from "./_eip712.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Recover the Ethereum address that signed an L1 action.
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { recoverUserFromL1Action } from "@nktkas/hyperliquid/utils";
|
|
11
|
+
*
|
|
12
|
+
* const action = {
|
|
13
|
+
* type: "cancel",
|
|
14
|
+
* cancels: [{ a: 0, o: 12345 }],
|
|
15
|
+
* };
|
|
16
|
+
* const nonce = 1700000000000;
|
|
17
|
+
* const signature = {
|
|
18
|
+
* r: "0x...",
|
|
19
|
+
* s: "0x...",
|
|
20
|
+
* v: 27,
|
|
21
|
+
* } as const;
|
|
22
|
+
*
|
|
23
|
+
* const address = await recoverUserFromL1Action({ action, nonce, signature });
|
|
24
|
+
* console.log(`Signer address: ${address}`);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export async function recoverUserFromL1Action(params: {
|
|
28
|
+
/** The action that was signed (hash depends on key order). */
|
|
29
|
+
action: Record<string, unknown>;
|
|
30
|
+
/** The timestamp in ms used when signing. */
|
|
31
|
+
nonce: number;
|
|
32
|
+
/** The signature to recover the address from. */
|
|
33
|
+
signature: Signature;
|
|
34
|
+
/** Indicates if the action is for the testnet. (default: false) */
|
|
35
|
+
isTestnet?: boolean;
|
|
36
|
+
/** Optional vault address used in the action. */
|
|
37
|
+
vaultAddress?: `0x${string}`;
|
|
38
|
+
/** Optional expiration time in ms used in the action. */
|
|
39
|
+
expiresAfter?: number;
|
|
40
|
+
}): Promise<`0x${string}`> {
|
|
41
|
+
const {
|
|
42
|
+
action,
|
|
43
|
+
signature,
|
|
44
|
+
nonce,
|
|
45
|
+
isTestnet = false,
|
|
46
|
+
vaultAddress,
|
|
47
|
+
expiresAfter,
|
|
48
|
+
} = params;
|
|
49
|
+
|
|
50
|
+
// 1. Create the action hash
|
|
51
|
+
const actionHash = createL1ActionHash({ action, nonce, vaultAddress, expiresAfter });
|
|
52
|
+
|
|
53
|
+
// 2. Hash the typed data according to EIP-712
|
|
54
|
+
const hash = hashTypedData({
|
|
55
|
+
domain: {
|
|
56
|
+
name: "Exchange",
|
|
57
|
+
version: "1",
|
|
58
|
+
chainId: 1337,
|
|
59
|
+
verifyingContract: "0x0000000000000000000000000000000000000000",
|
|
60
|
+
},
|
|
61
|
+
types: {
|
|
62
|
+
Agent: [
|
|
63
|
+
{ name: "source", type: "string" },
|
|
64
|
+
{ name: "connectionId", type: "bytes32" },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
primaryType: "Agent",
|
|
68
|
+
message: {
|
|
69
|
+
source: isTestnet ? "b" : "a",
|
|
70
|
+
connectionId: actionHash,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// 3. Convert signature to recovery format (v, r, s)
|
|
75
|
+
const sigr = secp.etc.concatBytes(
|
|
76
|
+
new Uint8Array([signature.v - 27]),
|
|
77
|
+
secp.etc.hexToBytes(signature.r.slice(2)),
|
|
78
|
+
secp.etc.hexToBytes(signature.s.slice(2)),
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
// 4. Recover the public key from the signature and hash
|
|
82
|
+
const compressedPubKey = await secp.recoverPublicKeyAsync(sigr, hash, { prehash: false });
|
|
83
|
+
const uncompressedPubKey = secp.Point.fromBytes(compressedPubKey).toBytes(false);
|
|
84
|
+
|
|
85
|
+
// 5. Convert the public key to an Ethereum address
|
|
86
|
+
return publicKeyToAddress(uncompressedPubKey);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Recover the Ethereum address that signed a user-signed action.
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* import { recoverUserFromUserSigned } from "@nktkas/hyperliquid/utils";
|
|
94
|
+
*
|
|
95
|
+
* const action = {
|
|
96
|
+
* type: "approveAgent",
|
|
97
|
+
* signatureChainId: "0x66eee" as const,
|
|
98
|
+
* hyperliquidChain: "Mainnet",
|
|
99
|
+
* agentAddress: "0x...",
|
|
100
|
+
* agentName: "Agent",
|
|
101
|
+
* nonce: 1700000000000,
|
|
102
|
+
* };
|
|
103
|
+
* const types = {
|
|
104
|
+
* HyperliquidTransaction: [
|
|
105
|
+
* { name: "hyperliquidChain", type: "string" },
|
|
106
|
+
* // ... other fields
|
|
107
|
+
* ],
|
|
108
|
+
* };
|
|
109
|
+
* const signature = {
|
|
110
|
+
* r: "0x...",
|
|
111
|
+
* s: "0x...",
|
|
112
|
+
* v: 27,
|
|
113
|
+
* } as const;
|
|
114
|
+
*
|
|
115
|
+
* const address = await recoverUserFromUserSigned({ action, types, signature });
|
|
116
|
+
* console.log(`Signer address: ${address}`);
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export async function recoverUserFromUserSigned(params: {
|
|
120
|
+
/** The action that was signed (hex strings must be in lower case). */
|
|
121
|
+
action:
|
|
122
|
+
& {
|
|
123
|
+
signatureChainId: `0x${string}`;
|
|
124
|
+
[key: string]: unknown;
|
|
125
|
+
}
|
|
126
|
+
& (
|
|
127
|
+
| { nonce: number; time?: undefined }
|
|
128
|
+
| { time: number; nonce?: undefined }
|
|
129
|
+
);
|
|
130
|
+
/** The types of the action (hash depends on key order). */
|
|
131
|
+
types: {
|
|
132
|
+
[key: string]: {
|
|
133
|
+
name: string;
|
|
134
|
+
type: string;
|
|
135
|
+
}[];
|
|
136
|
+
};
|
|
137
|
+
/** The signature to recover the address from. */
|
|
138
|
+
signature: Signature;
|
|
139
|
+
}): Promise<`0x${string}`> {
|
|
140
|
+
const { action, types, signature } = params;
|
|
141
|
+
|
|
142
|
+
// 1. Hash the typed data according to EIP-712
|
|
143
|
+
const hash = hashTypedData({
|
|
144
|
+
domain: {
|
|
145
|
+
name: "HyperliquidSignTransaction",
|
|
146
|
+
version: "1",
|
|
147
|
+
chainId: parseInt(action.signatureChainId),
|
|
148
|
+
verifyingContract: "0x0000000000000000000000000000000000000000",
|
|
149
|
+
},
|
|
150
|
+
types,
|
|
151
|
+
primaryType: Object.keys(types)[0],
|
|
152
|
+
message: action,
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// 2. Convert signature to recovery format (v, r, s)
|
|
156
|
+
const sigr = secp.etc.concatBytes(
|
|
157
|
+
new Uint8Array([signature.v - 27]),
|
|
158
|
+
secp.etc.hexToBytes(signature.r.slice(2)),
|
|
159
|
+
secp.etc.hexToBytes(signature.s.slice(2)),
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
// 3. Recover the public key from the signature and hash
|
|
163
|
+
const compressedPubKey = await secp.recoverPublicKeyAsync(sigr, hash, { prehash: false });
|
|
164
|
+
const uncompressedPubKey = secp.Point.fromBytes(compressedPubKey).toBytes(false);
|
|
165
|
+
|
|
166
|
+
// 4. Convert the public key to an Ethereum address
|
|
167
|
+
return publicKeyToAddress(uncompressedPubKey);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Convert a public key to an Ethereum address. */
|
|
171
|
+
function publicKeyToAddress(publicKey: Uint8Array): `0x${string}` {
|
|
172
|
+
// Remove the 0x04 prefix from uncompressed public key
|
|
173
|
+
const publicKeyWithoutPrefix = publicKey.slice(1);
|
|
174
|
+
// Hash the public key and take the last 20 bytes as the address
|
|
175
|
+
const hash = keccak_256(publicKeyWithoutPrefix);
|
|
176
|
+
const addressBytes = hash.slice(-20);
|
|
177
|
+
return `0x${secp.etc.bytesToHex(addressBytes)}`;
|
|
178
|
+
}
|
package/src/src/utils/mod.ts
CHANGED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sequential request execution to prevent nonce race conditions.
|
|
3
|
-
*
|
|
4
|
-
* Problem: When multiple requests are sent rapidly, they may execute in different order
|
|
5
|
-
* on the transport layer, causing nonce errors (e.g., server receives nonce 101 before 100).
|
|
6
|
-
*
|
|
7
|
-
* Solution: Queue ensures requests execute sequentially in order.
|
|
8
|
-
*/
|
|
9
|
-
import type { ExchangeRequestConfig, MultiSignRequestConfig } from "./_types.js";
|
|
10
|
-
/**
|
|
11
|
-
* Request queue for sequential execution of requests.
|
|
12
|
-
* Ensures that requests are executed in order, preventing them from arriving at the server out of sequence.
|
|
13
|
-
*/
|
|
14
|
-
declare class RequestQueue {
|
|
15
|
-
private queue;
|
|
16
|
-
/**
|
|
17
|
-
* Enqueue a request to be executed sequentially.
|
|
18
|
-
* @param fn - The function to execute.
|
|
19
|
-
* @returns A promise that resolves with the result of the function.
|
|
20
|
-
*/
|
|
21
|
-
enqueue<T>(fn: () => Promise<T>): Promise<T>;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get or create a request queue for the given config.
|
|
25
|
-
* Uses a global Map keyed by wallet address to ensure the same wallet uses the same queue
|
|
26
|
-
* regardless of whether called via client or direct function.
|
|
27
|
-
*/
|
|
28
|
-
export declare function getRequestQueue(config: ExchangeRequestConfig | MultiSignRequestConfig): Promise<RequestQueue | undefined>;
|
|
29
|
-
export {};
|
|
30
|
-
//# sourceMappingURL=_sequential.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_sequential.d.ts","sourceRoot":"","sources":["../../../../../src/src/api/exchange/_base/_sequential.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGjF;;;GAGG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAuC;IAEpD;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAK7C;AAmBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAAG,sBAAsB,GACrD,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA0BnC"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sequential request execution to prevent nonce race conditions.
|
|
3
|
-
*
|
|
4
|
-
* Problem: When multiple requests are sent rapidly, they may execute in different order
|
|
5
|
-
* on the transport layer, causing nonce errors (e.g., server receives nonce 101 before 100).
|
|
6
|
-
*
|
|
7
|
-
* Solution: Queue ensures requests execute sequentially in order.
|
|
8
|
-
*/
|
|
9
|
-
import { getWalletAddress } from "../../../signing/mod.js";
|
|
10
|
-
/**
|
|
11
|
-
* Request queue for sequential execution of requests.
|
|
12
|
-
* Ensures that requests are executed in order, preventing them from arriving at the server out of sequence.
|
|
13
|
-
*/
|
|
14
|
-
class RequestQueue {
|
|
15
|
-
queue = Promise.resolve();
|
|
16
|
-
/**
|
|
17
|
-
* Enqueue a request to be executed sequentially.
|
|
18
|
-
* @param fn - The function to execute.
|
|
19
|
-
* @returns A promise that resolves with the result of the function.
|
|
20
|
-
*/
|
|
21
|
-
enqueue(fn) {
|
|
22
|
-
const current = this.queue.then(() => fn());
|
|
23
|
-
this.queue = current.catch(() => { }); // Prevent unhandled rejection
|
|
24
|
-
return current;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Map of wallet addresses to weak references of request queues.
|
|
29
|
-
* Uses WeakRef to allow garbage collection of unused queues:
|
|
30
|
-
* - When a queue is no longer referenced (all requests completed), GC can remove it
|
|
31
|
-
* - FinalizationRegistry automatically cleans up the Map entry when queue is GC'd
|
|
32
|
-
* - This prevents memory leaks in long-running applications without manual cleanup
|
|
33
|
-
*/
|
|
34
|
-
const requestQueueMap = /* @__PURE__ */ new Map();
|
|
35
|
-
/**
|
|
36
|
-
* Registry to clean up Map entries when queues are garbage collected.
|
|
37
|
-
* When a RequestQueue is GC'd, this callback removes the corresponding Map entry.
|
|
38
|
-
*/
|
|
39
|
-
const requestQueueRegistry = /* @__PURE__ */ new FinalizationRegistry((address) => {
|
|
40
|
-
requestQueueMap.delete(address);
|
|
41
|
-
});
|
|
42
|
-
/**
|
|
43
|
-
* Get or create a request queue for the given config.
|
|
44
|
-
* Uses a global Map keyed by wallet address to ensure the same wallet uses the same queue
|
|
45
|
-
* regardless of whether called via client or direct function.
|
|
46
|
-
*/
|
|
47
|
-
export async function getRequestQueue(config) {
|
|
48
|
-
const sequentialRequests = config.sequentialRequests ?? true; // default to true
|
|
49
|
-
if (!sequentialRequests) {
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
// Get wallet address to use as key
|
|
53
|
-
const walletAddress = "signers" in config
|
|
54
|
-
? await getWalletAddress(config.signers[0])
|
|
55
|
-
: await getWalletAddress(config.wallet);
|
|
56
|
-
const address = walletAddress.toLowerCase();
|
|
57
|
-
// Try to get existing queue from weak reference
|
|
58
|
-
const queueRef = requestQueueMap.get(address);
|
|
59
|
-
let queue = queueRef?.deref();
|
|
60
|
-
if (!queue) {
|
|
61
|
-
// Create new queue if it doesn't exist or was garbage collected
|
|
62
|
-
queue = new RequestQueue();
|
|
63
|
-
requestQueueMap.set(address, new WeakRef(queue));
|
|
64
|
-
// Register for automatic cleanup when queue is GC'd
|
|
65
|
-
requestQueueRegistry.register(queue, address);
|
|
66
|
-
}
|
|
67
|
-
return queue;
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=_sequential.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_sequential.js","sourceRoot":"","sources":["../../../../../src/src/api/exchange/_base/_sequential.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,MAAM,YAAY;IACR,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD;;;;OAIG;IACH,OAAO,CAAI,EAAoB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,8BAA8B;QACpE,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,GAAG,EAAiC,CAAC;AAEjF;;;GAGG;AACH,MAAM,oBAAoB,GAAG,eAAe,CAAC,IAAI,oBAAoB,CAAS,CAAC,OAAO,EAAE,EAAE;IACxF,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAsD;IAEtD,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,kBAAkB;IAChF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mCAAmC;IACnC,MAAM,aAAa,GAAG,SAAS,IAAI,MAAM;QACvC,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAE5C,gDAAgD;IAChD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,gEAAgE;QAChE,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QAC3B,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,oDAAoD;QACpD,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_minimalEIP712Signer.d.ts","sourceRoot":"","sources":["../../../src/src/utils/_minimalEIP712Signer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,KAAK;IACpB,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;CACL;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,MAAM,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;CACtB;AAqMD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,2DAA2D;AAC3D,qBAAa,sBAAuB,YAAW,wBAAwB;;IAErE,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;gBACX,UAAU,EAAE,MAAM,GAAG,UAAU;IAI3C,aAAa,CACX,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,KAAK,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GACA,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;CAG1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_minimalEIP712Signer.js","sourceRoot":"","sources":["../../../src/src/utils/_minimalEIP712Signer.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AAiBzC,2CAA2C;AAC3C,KAAK,UAAU,aAAa,CAAC,IAM5B;IACC,MAAM,EACJ,UAAU,EACV,MAAM,GAAG,EAAE,EACX,KAAK,EACL,WAAW,EACX,OAAO,GACR,GAAG,IAAI,CAAC;IAET,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IAEpE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CACpC,IAAI,EACJ,UAAU,YAAY,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EACzF,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CACxC,CAAC;IAEF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE5D,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,IAKtB;IACC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE7D,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC3C,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,YAAY,EAAE,YAAY;QAC1B,GAAG,MAAM;KACV,CAAC;IAEF,MAAM,KAAK,GAAiB,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,MAAiC,EAAE,KAAK,CAAC,CAAC,CAAC;IACjF,IAAI,WAAW,KAAK,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAExF,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,WAAmB,EAAE,IAA6B,EAAE,KAAY;IAClF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1G,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,UAAU,CAAC,WAAmB,EAAE,KAAY;IACnD,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;SAClH,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB,EAAE,KAAY,EAAE,SAAS,IAAI,GAAG,EAAU;IACzF,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9D,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAExB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpB,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAc,EAAE,KAAY;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjD,IAAI,UAAU,EAAE,CAAC;QACf,mDAAmD;QACnD,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,eAAe,OAAO,KAAK,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,cAAc,GAAG,eAAe,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,0DAA0D;QAC1D,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1E,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,UAAU,CAAC,IAAI,EAAE,KAAgC,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;QACxC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,OAAO,+BAA+B,CAAC,CAAC;QACtG,CAAC;QAED,gDAAgD;QAChD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAiD,CAAC,CAAC;QAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEnG,gCAAgC;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC;QACrG,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9C,IAAI,UAAU,EAAE,CAAC;QACf,gCAAgC;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,IAAI,qBAAqB,KAAK,CAAC,MAAM,UAAU,KAAK,GAAG,CAAC,CAAC;QACvG,CAAC;QAED,kBAAkB;QAClB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACnD,CAAC;AAMD,2DAA2D;AAC3D,MAAM,OAAO,sBAAsB;IACjC,WAAW,CAAsB;IACjC,OAAO,CAAgB;IACvB,YAAY,UAA+B;QACzC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB;IACzE,CAAC;IACD,aAAa,CACX,MAKC;QAED,OAAO,aAAa,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,UAA+B;IAC1D,MAAM,EAAE,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEnG,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,sBAAsB,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAElD,OAAO,KAAK,OAAO,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sequential request execution to prevent nonce race conditions.
|
|
3
|
-
*
|
|
4
|
-
* Problem: When multiple requests are sent rapidly, they may execute in different order
|
|
5
|
-
* on the transport layer, causing nonce errors (e.g., server receives nonce 101 before 100).
|
|
6
|
-
*
|
|
7
|
-
* Solution: Queue ensures requests execute sequentially in order.
|
|
8
|
-
*/
|
|
9
|
-
import type { ExchangeRequestConfig, MultiSignRequestConfig } from "./_types.js";
|
|
10
|
-
/**
|
|
11
|
-
* Request queue for sequential execution of requests.
|
|
12
|
-
* Ensures that requests are executed in order, preventing them from arriving at the server out of sequence.
|
|
13
|
-
*/
|
|
14
|
-
declare class RequestQueue {
|
|
15
|
-
private queue;
|
|
16
|
-
/**
|
|
17
|
-
* Enqueue a request to be executed sequentially.
|
|
18
|
-
* @param fn - The function to execute.
|
|
19
|
-
* @returns A promise that resolves with the result of the function.
|
|
20
|
-
*/
|
|
21
|
-
enqueue<T>(fn: () => Promise<T>): Promise<T>;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get or create a request queue for the given config.
|
|
25
|
-
* Uses a global Map keyed by wallet address to ensure the same wallet uses the same queue
|
|
26
|
-
* regardless of whether called via client or direct function.
|
|
27
|
-
*/
|
|
28
|
-
export declare function getRequestQueue(config: ExchangeRequestConfig | MultiSignRequestConfig): Promise<RequestQueue | undefined>;
|
|
29
|
-
export {};
|
|
30
|
-
//# sourceMappingURL=_sequential.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_sequential.d.ts","sourceRoot":"","sources":["../../../../../src/src/api/exchange/_base/_sequential.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGjF;;;GAGG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAuC;IAEpD;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAK7C;AAmBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAAG,sBAAsB,GACrD,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA0BnC"}
|