@nktkas/hyperliquid 0.22.2 → 0.23.0

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.
Files changed (236) hide show
  1. package/README.md +47 -49
  2. package/esm/src/base.d.ts +4 -1
  3. package/esm/src/base.d.ts.map +1 -1
  4. package/esm/src/base.js +2 -2
  5. package/esm/src/clients/exchange.d.ts +289 -207
  6. package/esm/src/clients/exchange.d.ts.map +1 -1
  7. package/esm/src/clients/exchange.js +605 -410
  8. package/esm/src/clients/info.d.ts +137 -41
  9. package/esm/src/clients/info.d.ts.map +1 -1
  10. package/esm/src/clients/info.js +124 -28
  11. package/esm/src/clients/multiSign.d.ts +285 -204
  12. package/esm/src/clients/multiSign.d.ts.map +1 -1
  13. package/esm/src/clients/multiSign.js +521 -493
  14. package/esm/src/clients/subscription.d.ts +38 -3
  15. package/esm/src/clients/subscription.d.ts.map +1 -1
  16. package/esm/src/clients/subscription.js +36 -3
  17. package/esm/src/signing/{_ethers.d.ts → _signTypedData/ethers.d.ts} +1 -1
  18. package/esm/src/signing/_signTypedData/ethers.d.ts.map +1 -0
  19. package/esm/src/signing/_signTypedData/mod.d.ts +35 -0
  20. package/esm/src/signing/_signTypedData/mod.d.ts.map +1 -0
  21. package/esm/src/signing/_signTypedData/mod.js +59 -0
  22. package/esm/src/signing/_signTypedData/private_key.d.ts +26 -0
  23. package/esm/src/signing/_signTypedData/private_key.d.ts.map +1 -0
  24. package/esm/src/signing/_signTypedData/private_key.js +144 -0
  25. package/esm/src/signing/{_viem.d.ts → _signTypedData/viem.d.ts} +2 -2
  26. package/esm/src/signing/_signTypedData/viem.d.ts.map +1 -0
  27. package/{script/src/signing/_window.d.ts → esm/src/signing/_signTypedData/window.d.ts} +18 -12
  28. package/esm/src/signing/_signTypedData/window.d.ts.map +1 -0
  29. package/esm/src/signing/{_window.js → _signTypedData/window.js} +3 -2
  30. package/esm/src/signing/_sorter.d.ts +56 -82
  31. package/esm/src/signing/_sorter.d.ts.map +1 -1
  32. package/esm/src/signing/_sorter.js +36 -49
  33. package/esm/src/signing/mod.d.ts +151 -130
  34. package/esm/src/signing/mod.d.ts.map +1 -1
  35. package/esm/src/signing/mod.js +182 -228
  36. package/esm/src/transports/base.d.ts +1 -1
  37. package/esm/src/transports/base.d.ts.map +1 -1
  38. package/esm/src/transports/base.js +2 -2
  39. package/esm/src/transports/http/http_transport.d.ts +9 -15
  40. package/esm/src/transports/http/http_transport.d.ts.map +1 -1
  41. package/esm/src/transports/http/http_transport.js +64 -59
  42. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
  43. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  44. package/esm/src/transports/websocket/_hyperliquid_event_target.js +1 -1
  45. package/esm/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
  46. package/esm/src/transports/websocket/_reconnecting_websocket.js +17 -4
  47. package/esm/src/transports/websocket/_websocket_async_request.d.ts +0 -9
  48. package/esm/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
  49. package/esm/src/transports/websocket/_websocket_async_request.js +14 -20
  50. package/esm/src/transports/websocket/websocket_transport.d.ts +8 -4
  51. package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  52. package/esm/src/transports/websocket/websocket_transport.js +83 -54
  53. package/esm/src/types/exchange/requests.d.ts +27 -51
  54. package/esm/src/types/exchange/requests.d.ts.map +1 -1
  55. package/esm/src/types/explorer/requests.d.ts +5 -8
  56. package/esm/src/types/explorer/requests.d.ts.map +1 -1
  57. package/esm/src/types/info/accounts.d.ts +5 -5
  58. package/esm/src/types/info/accounts.d.ts.map +1 -1
  59. package/esm/src/types/info/delegations.d.ts +1 -1
  60. package/esm/src/types/info/delegations.d.ts.map +1 -1
  61. package/esm/src/types/info/orders.d.ts +1 -1
  62. package/esm/src/types/info/orders.d.ts.map +1 -1
  63. package/esm/src/types/info/requests.d.ts +49 -96
  64. package/esm/src/types/info/requests.d.ts.map +1 -1
  65. package/esm/src/types/subscriptions/requests.d.ts +72 -18
  66. package/esm/src/types/subscriptions/requests.d.ts.map +1 -1
  67. package/esm/src/types/subscriptions/responses.d.ts +2 -0
  68. package/esm/src/types/subscriptions/responses.d.ts.map +1 -1
  69. package/package.json +8 -5
  70. package/script/mod.js +13 -23
  71. package/script/src/base.d.ts +4 -1
  72. package/script/src/base.d.ts.map +1 -1
  73. package/script/src/base.js +10 -20
  74. package/script/src/clients/exchange.d.ts +289 -207
  75. package/script/src/clients/exchange.d.ts.map +1 -1
  76. package/script/src/clients/exchange.js +2000 -1815
  77. package/script/src/clients/info.d.ts +137 -41
  78. package/script/src/clients/info.d.ts.map +1 -1
  79. package/script/src/clients/info.js +1296 -1210
  80. package/script/src/clients/multiSign.d.ts +285 -204
  81. package/script/src/clients/multiSign.d.ts.map +1 -1
  82. package/script/src/clients/multiSign.js +2043 -2025
  83. package/script/src/clients/subscription.d.ts +38 -3
  84. package/script/src/clients/subscription.d.ts.map +1 -1
  85. package/script/src/clients/subscription.js +568 -545
  86. package/script/src/signing/{_ethers.d.ts → _signTypedData/ethers.d.ts} +1 -1
  87. package/script/src/signing/_signTypedData/ethers.d.ts.map +1 -0
  88. package/script/src/signing/_signTypedData/ethers.js +16 -0
  89. package/script/src/signing/_signTypedData/mod.d.ts +35 -0
  90. package/script/src/signing/_signTypedData/mod.d.ts.map +1 -0
  91. package/script/src/signing/_signTypedData/mod.js +67 -0
  92. package/script/src/signing/_signTypedData/private_key.d.ts +26 -0
  93. package/script/src/signing/_signTypedData/private_key.d.ts.map +1 -0
  94. package/script/src/signing/_signTypedData/private_key.js +148 -0
  95. package/script/src/signing/{_viem.d.ts → _signTypedData/viem.d.ts} +2 -2
  96. package/script/src/signing/_signTypedData/viem.d.ts.map +1 -0
  97. package/script/src/signing/_signTypedData/viem.js +9 -0
  98. package/{esm/src/signing/_window.d.ts → script/src/signing/_signTypedData/window.d.ts} +18 -12
  99. package/script/src/signing/_signTypedData/window.d.ts.map +1 -0
  100. package/script/src/signing/_signTypedData/window.js +34 -0
  101. package/script/src/signing/_sorter.d.ts +56 -82
  102. package/script/src/signing/_sorter.d.ts.map +1 -1
  103. package/script/src/signing/_sorter.js +655 -678
  104. package/script/src/signing/mod.d.ts +151 -130
  105. package/script/src/signing/mod.d.ts.map +1 -1
  106. package/script/src/signing/mod.js +286 -342
  107. package/script/src/transports/base.d.ts +1 -1
  108. package/script/src/transports/base.d.ts.map +1 -1
  109. package/script/src/transports/base.js +11 -21
  110. package/script/src/transports/http/http_transport.d.ts +9 -15
  111. package/script/src/transports/http/http_transport.d.ts.map +1 -1
  112. package/script/src/transports/http/http_transport.js +97 -102
  113. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
  114. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  115. package/script/src/transports/websocket/_hyperliquid_event_target.js +51 -61
  116. package/script/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
  117. package/script/src/transports/websocket/_reconnecting_websocket.js +271 -268
  118. package/script/src/transports/websocket/_websocket_async_request.d.ts +0 -9
  119. package/script/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
  120. package/script/src/transports/websocket/_websocket_async_request.js +157 -174
  121. package/script/src/transports/websocket/websocket_transport.d.ts +8 -4
  122. package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  123. package/script/src/transports/websocket/websocket_transport.js +209 -189
  124. package/script/src/types/exchange/requests.d.ts +27 -51
  125. package/script/src/types/exchange/requests.d.ts.map +1 -1
  126. package/script/src/types/exchange/requests.js +2 -12
  127. package/script/src/types/exchange/responses.js +2 -12
  128. package/script/src/types/explorer/requests.d.ts +5 -8
  129. package/script/src/types/explorer/requests.d.ts.map +1 -1
  130. package/script/src/types/explorer/requests.js +2 -12
  131. package/script/src/types/explorer/responses.js +2 -12
  132. package/script/src/types/info/accounts.d.ts +5 -5
  133. package/script/src/types/info/accounts.d.ts.map +1 -1
  134. package/script/src/types/info/accounts.js +2 -12
  135. package/script/src/types/info/assets.js +2 -12
  136. package/script/src/types/info/delegations.d.ts +1 -1
  137. package/script/src/types/info/delegations.d.ts.map +1 -1
  138. package/script/src/types/info/delegations.js +2 -12
  139. package/script/src/types/info/markets.js +2 -12
  140. package/script/src/types/info/orders.d.ts +1 -1
  141. package/script/src/types/info/orders.d.ts.map +1 -1
  142. package/script/src/types/info/orders.js +2 -12
  143. package/script/src/types/info/requests.d.ts +49 -96
  144. package/script/src/types/info/requests.d.ts.map +1 -1
  145. package/script/src/types/info/requests.js +2 -12
  146. package/script/src/types/info/vaults.js +2 -12
  147. package/script/src/types/mod.js +2 -12
  148. package/script/src/types/subscriptions/requests.d.ts +72 -18
  149. package/script/src/types/subscriptions/requests.d.ts.map +1 -1
  150. package/script/src/types/subscriptions/requests.js +2 -12
  151. package/script/src/types/subscriptions/responses.d.ts +2 -0
  152. package/script/src/types/subscriptions/responses.d.ts.map +1 -1
  153. package/script/src/types/subscriptions/responses.js +2 -12
  154. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts +0 -2
  155. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts.map +0 -1
  156. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.js +0 -1
  157. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts +0 -95
  158. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts.map +0 -1
  159. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.js +0 -10
  160. package/esm/deps/jsr.io/@std/async/1.0.13/delay.d.ts +0 -43
  161. package/esm/deps/jsr.io/@std/async/1.0.13/delay.d.ts.map +0 -1
  162. package/esm/deps/jsr.io/@std/async/1.0.13/delay.js +0 -63
  163. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts +0 -9
  164. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts.map +0 -1
  165. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.js +0 -2
  166. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts +0 -21
  167. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts.map +0 -1
  168. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.js +0 -32
  169. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
  170. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
  171. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -51
  172. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
  173. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
  174. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -13
  175. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
  176. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
  177. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -2
  178. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
  179. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
  180. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -87
  181. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts +0 -9
  182. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts.map +0 -1
  183. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.js +0 -2
  184. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts +0 -39
  185. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts.map +0 -1
  186. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.js +0 -237
  187. package/esm/src/signing/_ethers.d.ts.map +0 -1
  188. package/esm/src/signing/_private_key.d.ts +0 -22
  189. package/esm/src/signing/_private_key.d.ts.map +0 -1
  190. package/esm/src/signing/_private_key.js +0 -124
  191. package/esm/src/signing/_viem.d.ts.map +0 -1
  192. package/esm/src/signing/_window.d.ts.map +0 -1
  193. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts +0 -2
  194. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts.map +0 -1
  195. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.js +0 -27
  196. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts +0 -95
  197. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts.map +0 -1
  198. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.js +0 -24
  199. package/script/deps/jsr.io/@std/async/1.0.13/delay.d.ts +0 -43
  200. package/script/deps/jsr.io/@std/async/1.0.13/delay.d.ts.map +0 -1
  201. package/script/deps/jsr.io/@std/async/1.0.13/delay.js +0 -76
  202. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts +0 -9
  203. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts.map +0 -1
  204. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.js +0 -13
  205. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts +0 -21
  206. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts.map +0 -1
  207. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.js +0 -45
  208. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
  209. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
  210. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -67
  211. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
  212. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
  213. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -26
  214. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
  215. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
  216. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -13
  217. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
  218. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
  219. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -101
  220. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts +0 -9
  221. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts.map +0 -1
  222. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.js +0 -13
  223. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts +0 -39
  224. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts.map +0 -1
  225. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.js +0 -250
  226. package/script/src/signing/_ethers.d.ts.map +0 -1
  227. package/script/src/signing/_ethers.js +0 -26
  228. package/script/src/signing/_private_key.d.ts +0 -22
  229. package/script/src/signing/_private_key.d.ts.map +0 -1
  230. package/script/src/signing/_private_key.js +0 -138
  231. package/script/src/signing/_viem.d.ts.map +0 -1
  232. package/script/src/signing/_viem.js +0 -19
  233. package/script/src/signing/_window.d.ts.map +0 -1
  234. package/script/src/signing/_window.js +0 -43
  235. /package/esm/src/signing/{_ethers.js → _signTypedData/ethers.js} +0 -0
  236. /package/esm/src/signing/{_viem.js → _signTypedData/viem.js} +0 -0
@@ -2,108 +2,148 @@
2
2
  * This module contains functions for generating Hyperliquid transaction signatures
3
3
  * and interfaces to various wallet implementations.
4
4
  *
5
- * @example
5
+ * @example Signing an L1 action
6
6
  * ```ts
7
- * import { signL1Action } from "@nktkas/hyperliquid/signing";
7
+ * import { actionSorter, signL1Action } from "@nktkas/hyperliquid/signing";
8
+ *
9
+ * const privateKey = "0x..."; // or `viem`, `ethers`
8
10
  *
9
- * const action = {
10
- * type: "cancel",
11
- * cancels: [{ a: 0, o: 12345 }],
12
- * };
13
11
  * const nonce = Date.now();
12
+ * const action = {
13
+ * type: "cancel",
14
+ * cancels: [
15
+ * { a: 0, o: 12345 },
16
+ * ],
17
+ * } as const;
14
18
  *
15
19
  * const signature = await signL1Action({
16
- * wallet,
17
- * action,
18
- * nonce,
19
- * isTestnet: true, // Change to false for mainnet
20
+ * wallet: privateKey,
21
+ * action: actionSorter[action.type](action),
22
+ * nonce,
20
23
  * });
21
24
  * ```
22
- * @example
25
+ *
26
+ * @example Signing a user-signed action
23
27
  * ```ts
24
- * import { signUserSignedAction } from "@nktkas/hyperliquid/signing";
28
+ * import { signUserSignedAction, userSignedActionEip712Types } from "@nktkas/hyperliquid/signing";
29
+ *
30
+ * const privateKey = "0x..."; // or `viem`, `ethers`
25
31
  *
26
32
  * const action = {
27
- * type: "approveAgent",
28
- * hyperliquidChain: "Testnet", // "Mainnet" or "Testnet"
29
- * signatureChainId: "0x66eee",
30
- * nonce: Date.now(),
31
- * agentAddress: "0x...",
32
- * agentName: "Agent",
33
- * };
33
+ * type: "approveAgent",
34
+ * signatureChainId: "0x66eee",
35
+ * hyperliquidChain: "Mainnet",
36
+ * agentAddress: "0x...",
37
+ * agentName: "Agent",
38
+ * nonce: Date.now(),
39
+ * } as const;
34
40
  *
35
41
  * const signature = await signUserSignedAction({
36
- * wallet,
37
- * action,
38
- * types: {
39
- * "HyperliquidTransaction:ApproveAgent": [
40
- * { name: "hyperliquidChain", type: "string" },
41
- * { name: "agentAddress", type: "address" },
42
- * { name: "agentName", type: "string" },
43
- * { name: "nonce", type: "uint64" },
44
- * ],
45
- * },
46
- * chainId: parseInt(action.signatureChainId, 16),
42
+ * wallet: privateKey,
43
+ * action,
44
+ * types: userSignedActionEip712Types[action.type],
45
+ * });
46
+ * ```
47
+ *
48
+ * @example Signing a multi-signature action
49
+ * ```ts
50
+ * import { actionSorter, signL1Action, signMultiSigAction } from "@nktkas/hyperliquid/signing";
51
+ * import { privateKeyToAccount } from "viem/accounts";
52
+ *
53
+ * const wallet = privateKeyToAccount("0x..."); // or `ethers`, private key with address
54
+ * const multiSigUser = "0x...";
55
+ *
56
+ * const nonce = Date.now();
57
+ * const action = {
58
+ * type: "scheduleCancel",
59
+ * time: Date.now() + 10000,
60
+ * } as const;
61
+ *
62
+ * // First, create the required number of signatures
63
+ * const signature = await signL1Action({
64
+ * wallet,
65
+ * action: [multiSigUser.toLowerCase(), wallet.address.toLowerCase(), actionSorter[action.type](action)],
66
+ * nonce,
67
+ * });
68
+ *
69
+ * // Then use signatures in the multi-sig action
70
+ * const multiSigSignature = await signMultiSigAction({
71
+ * wallet,
72
+ * action: {
73
+ * signatureChainId: "0x66eee",
74
+ * signatures: [signature],
75
+ * payload: {
76
+ * multiSigUser,
77
+ * outerSigner: wallet.address,
78
+ * action,
79
+ * },
80
+ * },
81
+ * nonce,
47
82
  * });
48
83
  * ```
49
84
  *
50
85
  * @module
51
86
  */
52
- import { type ValueMap, type ValueType } from "../../deps/jsr.io/@std/msgpack/1.0.3/encode.js";
53
- import { type AbstractEthersSigner, type AbstractEthersV5Signer, isAbstractEthersSigner, isAbstractEthersV5Signer } from "./_ethers.js";
54
- import { isValidPrivateKey } from "./_private_key.js";
55
- import { type AbstractViemWalletClient, isAbstractViemWalletClient } from "./_viem.js";
56
- import { type AbstractWindowEthereum, isAbstractWindowEthereum } from "./_window.js";
57
87
  import type { Hex } from "../base.js";
58
- export { type AbstractEthersSigner, type AbstractEthersV5Signer, type AbstractViemWalletClient, type AbstractWindowEthereum, type Hex, isAbstractEthersSigner, isAbstractEthersV5Signer, isAbstractViemWalletClient, isAbstractWindowEthereum, isValidPrivateKey, type ValueMap, type ValueType, };
88
+ import { type AbstractEthersSigner, type AbstractEthersV5Signer, type AbstractViemWalletClient, type AbstractWallet, type AbstractWindowEthereum, isAbstractEthersSigner, isAbstractEthersV5Signer, isAbstractViemWalletClient, isAbstractWindowEthereum, isValidPrivateKey, type Signature } from "./_signTypedData/mod.js";
89
+ export { type AbstractEthersSigner, type AbstractEthersV5Signer, type AbstractViemWalletClient, type AbstractWallet, type AbstractWindowEthereum, type Hex, isAbstractEthersSigner, isAbstractEthersV5Signer, isAbstractViemWalletClient, isAbstractWindowEthereum, isValidPrivateKey, type Signature, };
59
90
  export * from "./_sorter.js";
60
- /** Abstract interface for a wallet that can sign typed data. */
61
- export type AbstractWallet = Hex | AbstractViemWalletClient | AbstractEthersSigner | AbstractEthersV5Signer | AbstractWindowEthereum;
62
- export interface Signature {
63
- r: Hex;
64
- s: Hex;
65
- v: number;
66
- }
67
91
  /**
68
92
  * Create a hash of the L1 action.
93
+ * @example
94
+ * ```ts
95
+ * import { actionSorter, createL1ActionHash } from "@nktkas/hyperliquid/signing";
69
96
  *
70
- * Note: Hash generation depends on the order of the action keys.
97
+ * const action = {
98
+ * type: "cancel",
99
+ * cancels: [
100
+ * { a: 0, o: 12345 },
101
+ * ],
102
+ * } as const;
103
+ * const nonce = Date.now();
71
104
  *
72
- * @param action - The action to be hashed.
73
- * @param nonce - Unique request identifier (recommended current timestamp in ms).
74
- * @param vaultAddress - Optional vault address used in the action.
75
- * @param expiresAfter - Optional expiration time of the action in milliseconds since the epoch.
76
- * @returns The hash of the action.
105
+ * const actionHash = createL1ActionHash({
106
+ * action: actionSorter[action.type](action),
107
+ * nonce,
108
+ * vaultAddress: "0x...", // optional
109
+ * expiresAfter: Date.now() + 10_000, // optional
110
+ * });
111
+ * ```
77
112
  */
78
- export declare function createL1ActionHash(action: ValueType, nonce: number, vaultAddress?: Hex, expiresAfter?: number): Hex;
113
+ export declare function createL1ActionHash(args: {
114
+ /** The action to be hashed (hash depends on key order). */
115
+ action: Record<string, unknown> | unknown[];
116
+ /** The current timestamp in ms. */
117
+ nonce: number;
118
+ /** Optional vault address used in the action. */
119
+ vaultAddress?: Hex;
120
+ /** Optional expiration time of the action in ms since the epoch. */
121
+ expiresAfter?: number;
122
+ }): Hex;
79
123
  /**
80
124
  * Sign an L1 action.
81
- *
82
- * Note: Signature generation depends on the order of the action keys.
83
- * @param args - Arguments for signing the action.
84
- * @returns The signature components r, s, and v.
85
125
  * @example
86
126
  * ```ts
87
- * import { signL1Action } from "@nktkas/hyperliquid/signing";
127
+ * import { actionSorter, signL1Action } from "@nktkas/hyperliquid/signing";
88
128
  *
89
129
  * const privateKey = "0x..."; // or `viem`, `ethers`
90
130
  *
131
+ * const nonce = Date.now();
91
132
  * const action = {
92
133
  * type: "cancel",
93
134
  * cancels: [
94
- * { a: 0, o: 12345 }, // Asset index and order ID
135
+ * { a: 0, o: 12345 },
95
136
  * ],
96
- * };
97
- * const nonce = Date.now();
137
+ * } as const;
98
138
  *
99
139
  * const signature = await signL1Action({
100
140
  * wallet: privateKey,
101
- * action,
141
+ * action: actionSorter[action.type](action),
102
142
  * nonce,
103
- * isTestnet: true, // Change to false for mainnet
104
143
  * });
105
144
  *
106
- * const response = await fetch("https://api.hyperliquid-testnet.xyz/exchange", {
145
+ * // Send the signed action to the Hyperliquid API
146
+ * const response = await fetch("https://api.hyperliquid.xyz/exchange", {
107
147
  * method: "POST",
108
148
  * headers: { "Content-Type": "application/json" },
109
149
  * body: JSON.stringify({ action, signature, nonce }),
@@ -114,54 +154,42 @@ export declare function createL1ActionHash(action: ValueType, nonce: number, vau
114
154
  export declare function signL1Action(args: {
115
155
  /** Wallet to sign the action. */
116
156
  wallet: AbstractWallet;
117
- /** The action to be signed. */
118
- action: ValueType;
119
- /** Unique request identifier (recommended current timestamp in ms). */
157
+ /** The action to be signed (hash depends on key order). */
158
+ action: Record<string, unknown> | unknown[];
159
+ /** The current timestamp in ms. */
120
160
  nonce: number;
121
- /** Indicates if the action is for the testnet. Default is `false`. */
161
+ /** Indicates if the action is for the testnet. (default: false) */
122
162
  isTestnet?: boolean;
123
163
  /** Optional vault address used in the action. */
124
164
  vaultAddress?: Hex;
125
- /** Optional expiration time of the action in milliseconds since the epoch. */
165
+ /** Optional expiration time of the action in ms since the epoch. */
126
166
  expiresAfter?: number;
127
167
  }): Promise<Signature>;
128
168
  /**
129
169
  * Sign a user-signed action.
130
- *
131
- * Note: Signature generation depends on the order of types.
132
- *
133
- * @param args - Arguments for signing the action.
134
- * @returns The signature components r, s, and v.
135
170
  * @example
136
171
  * ```ts
137
- * import { signUserSignedAction } from "@nktkas/hyperliquid/signing";
172
+ * import { signUserSignedAction, userSignedActionEip712Types } from "@nktkas/hyperliquid/signing";
138
173
  *
139
174
  * const privateKey = "0x..."; // or `viem`, `ethers`
140
175
  *
141
176
  * const action = {
142
177
  * type: "approveAgent",
143
- * hyperliquidChain: "Testnet", // "Mainnet" or "Testnet"
144
178
  * signatureChainId: "0x66eee",
145
- * nonce: Date.now(),
146
- * agentAddress: "0x...", // Change to your agent address
179
+ * hyperliquidChain: "Mainnet",
180
+ * agentAddress: "0x...",
147
181
  * agentName: "Agent",
148
- * };
182
+ * nonce: Date.now(),
183
+ * } as const;
149
184
  *
150
185
  * const signature = await signUserSignedAction({
151
186
  * wallet: privateKey,
152
187
  * action,
153
- * types: {
154
- * "HyperliquidTransaction:ApproveAgent": [
155
- * { name: "hyperliquidChain", type: "string" },
156
- * { name: "agentAddress", type: "address" },
157
- * { name: "agentName", type: "string" },
158
- * { name: "nonce", type: "uint64" },
159
- * ],
160
- * },
161
- * chainId: parseInt(action.signatureChainId, 16),
188
+ * types: userSignedActionEip712Types[action.type],
162
189
  * });
163
190
  *
164
- * const response = await fetch("https://api.hyperliquid-testnet.xyz/exchange", {
191
+ * // Send the signed action to the Hyperliquid API
192
+ * const response = await fetch("https://api.hyperliquid.xyz/exchange", {
165
193
  * method: "POST",
166
194
  * headers: { "Content-Type": "application/json" },
167
195
  * body: JSON.stringify({ action, signature, nonce: action.nonce }),
@@ -173,79 +201,72 @@ export declare function signUserSignedAction(args: {
173
201
  /** Wallet to sign the action. */
174
202
  wallet: AbstractWallet;
175
203
  /** The action to be signed. */
176
- action: Record<string, unknown>;
177
- /** The types of the action. */
204
+ action: {
205
+ signatureChainId: Hex;
206
+ [key: string]: unknown;
207
+ };
208
+ /** The types of the action (hash depends on key order). */
178
209
  types: {
179
210
  [key: string]: {
180
211
  name: string;
181
212
  type: string;
182
213
  }[];
183
214
  };
184
- /** The chain ID. */
185
- chainId: number;
186
215
  }): Promise<Signature>;
187
216
  /**
188
217
  * Sign a multi-signature action.
189
- *
190
- * Note: Signature generation depends on the order of the action keys.
191
- *
192
- * @param args - Arguments for signing the action.
193
- * @returns The signature components r, s, and v.
194
218
  * @example
195
219
  * ```ts
196
- * import { signL1Action, signMultiSigAction } from "@nktkas/hyperliquid/signing";
220
+ * import { actionSorter, signL1Action, signMultiSigAction } from "@nktkas/hyperliquid/signing";
197
221
  * import { privateKeyToAccount } from "viem/accounts";
198
222
  *
199
- * const wallet = privateKeyToAccount("0x...");
200
- * const multiSigUser = "0x..."; // Multi-sig user address
223
+ * const wallet = privateKeyToAccount("0x..."); // or `ethers`, private key with address
224
+ * const multiSigUser = "0x...";
201
225
  *
202
226
  * const nonce = Date.now();
203
- * const action = { // Example action
204
- * type: "scheduleCancel",
205
- * time: Date.now() + 10000
206
- * };
227
+ * const action = {
228
+ * type: "scheduleCancel",
229
+ * time: Date.now() + 10000,
230
+ * } as const;
207
231
  *
208
- * // First, create signature from one of the authorized signers
232
+ * // First, create the required number of signatures
209
233
  * const signature = await signL1Action({
210
- * wallet,
211
- * action: [multiSigUser.toLowerCase(), wallet.address.toLowerCase(), action],
212
- * nonce,
213
- * isTestnet: true,
234
+ * wallet,
235
+ * action: [multiSigUser.toLowerCase(), wallet.address.toLowerCase(), actionSorter[action.type](action)],
236
+ * nonce,
214
237
  * });
215
238
  *
216
- * // Then use it in the multi-sig action
239
+ * // Then use signatures in the multi-sig action
217
240
  * const multiSigSignature = await signMultiSigAction({
218
- * wallet,
219
- * action: {
220
- * type: "multiSig",
221
- * signatureChainId: "0x66eee",
222
- * signatures: [signature],
223
- * payload: {
224
- * multiSigUser,
225
- * outerSigner: wallet.address,
226
- * action,
227
- * }
228
- * },
229
- * nonce,
230
- * hyperliquidChain: "Testnet",
231
- * signatureChainId: "0x66eee",
241
+ * wallet,
242
+ * action: {
243
+ * signatureChainId: "0x66eee",
244
+ * signatures: [signature],
245
+ * payload: {
246
+ * multiSigUser,
247
+ * outerSigner: wallet.address,
248
+ * action,
249
+ * },
250
+ * },
251
+ * nonce,
232
252
  * });
233
253
  * ```
234
254
  */
235
255
  export declare function signMultiSigAction(args: {
236
256
  /** Wallet to sign the action. */
237
257
  wallet: AbstractWallet;
238
- /** The action to be signed. */
239
- action: ValueMap;
240
- /** Unique request identifier (recommended current timestamp in ms). */
258
+ /** The action to be signed (hash depends on key order). */
259
+ action: {
260
+ signatureChainId: Hex;
261
+ [key: string]: unknown;
262
+ };
263
+ /** The current timestamp in ms. */
241
264
  nonce: number;
265
+ /** Indicates if the action is for the testnet. (default: false) */
266
+ isTestnet?: boolean;
242
267
  /** Optional vault address used in the action. */
243
268
  vaultAddress?: Hex;
244
- /** Optional expiration time of the action in milliseconds since the epoch. */
269
+ /** Optional expiration time of the action in ms since the epoch. */
245
270
  expiresAfter?: number;
246
- /** HyperLiquid network ("Mainnet" or "Testnet"). */
247
- hyperliquidChain: "Mainnet" | "Testnet";
248
- /** Chain ID used for signing. */
249
- signatureChainId: Hex;
250
271
  }): Promise<Signature>;
251
272
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/src/signing/mod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/src/signing/mod.ts"],"names":[],"mappings":"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"}