@nktkas/hyperliquid 0.29.0 → 0.29.1

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.
@@ -50,8 +50,8 @@ export declare class WebSocketSubscriptionManager {
50
50
  protected _handleClose(): void;
51
51
  /** Checks if a payload contains a user parameter. */
52
52
  protected _hasUserParam(payload: unknown): boolean;
53
- /** Counts the number of active subscriptions with user parameter. */
54
- protected _countUserSubscriptions(): number;
53
+ /** Counts the number of unique users across all active subscriptions. */
54
+ protected _countUniqueUserSubscriptions(): number;
55
55
  }
56
56
  export {};
57
57
  //# sourceMappingURL=_subscriptionManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_subscriptionManager.d.ts","sourceRoot":"","sources":["../../../../src/src/transport/websocket/_subscriptionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAyB,MAAM,mBAAmB,CAAC;AAQjF,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,2JAA2J;IAC3J,aAAa,EAAE,WAAW,CAAC;CAC5B;AAED,kDAAkD;AAClD,UAAU,iBAAiB;IACzB,6DAA6D;IAC7D,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,sDAAsD;IACtD,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,iBAAiB,EAAE,eAAe,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,4BAA4B;IACvC,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IAErB,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC9C,SAAS,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC5C,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAa;gBAGnE,MAAM,EAAE,qBAAqB,EAC7B,WAAW,EAAE,qBAAqB,EAClC,QAAQ,EAAE,sBAAsB,EAChC,WAAW,EAAE,OAAO;IAiBtB;;;;;;;;;;;OAWG;IACG,SAAS,CAAC,CAAC,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,GACvC,OAAO,CAAC,qBAAqB,CAAC;IAuEjC,gFAAgF;IAChF,SAAS,CAAC,WAAW,IAAI,IAAI;IAc7B,gFAAgF;IAChF,SAAS,CAAC,YAAY,IAAI,IAAI;IAc9B,qDAAqD;IACrD,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIlD,qEAAqE;IACrE,SAAS,CAAC,uBAAuB,IAAI,MAAM;CAY5C"}
1
+ {"version":3,"file":"_subscriptionManager.d.ts","sourceRoot":"","sources":["../../../../src/src/transport/websocket/_subscriptionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAyB,MAAM,mBAAmB,CAAC;AAQjF,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,2JAA2J;IAC3J,aAAa,EAAE,WAAW,CAAC;CAC5B;AAED,kDAAkD;AAClD,UAAU,iBAAiB;IACzB,6DAA6D;IAC7D,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,sDAAsD;IACtD,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,iBAAiB,EAAE,eAAe,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,4BAA4B;IACvC,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IAErB,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC9C,SAAS,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC5C,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAa;gBAGnE,MAAM,EAAE,qBAAqB,EAC7B,WAAW,EAAE,qBAAqB,EAClC,QAAQ,EAAE,sBAAsB,EAChC,WAAW,EAAE,OAAO;IAiBtB;;;;;;;;;;;OAWG;IACG,SAAS,CAAC,CAAC,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,GACvC,OAAO,CAAC,qBAAqB,CAAC;IAuEjC,gFAAgF;IAChF,SAAS,CAAC,WAAW,IAAI,IAAI;IAc7B,gFAAgF;IAChF,SAAS,CAAC,YAAY,IAAI,IAAI;IAc9B,qDAAqD;IACrD,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIlD,yEAAyE;IACzE,SAAS,CAAC,6BAA6B,IAAI,MAAM;CAclD"}
@@ -1,8 +1,8 @@
1
1
  import { WebSocketAsyncRequest, WebSocketRequestError } from "./_postRequest.js";
2
2
  /** Maximum number of subscriptions allowed by Hyperliquid. */
3
3
  const MAX_SUBSCRIPTIONS = 1000;
4
- /** Maximum number of subscriptions with user parameter allowed by Hyperliquid. */
5
- const MAX_USER_SUBSCRIPTIONS = 10;
4
+ /** Maximum number of unique user subscriptions allowed by Hyperliquid. */
5
+ const MAX_UNIQUE_USER_SUBSCRIPTIONS = 10;
6
6
  /**
7
7
  * Manages WebSocket subscriptions to Hyperliquid event channels.
8
8
  * Handles subscription lifecycle, resubscription on reconnect, and cleanup.
@@ -45,13 +45,13 @@ export class WebSocketSubscriptionManager {
45
45
  // Initialize new subscription, if it doesn't exist
46
46
  let subscription = this._subscriptions.get(id);
47
47
  if (!subscription) {
48
- // Check total subscription limits
48
+ // Check unique subscription limits
49
49
  if (this._subscriptions.size >= MAX_SUBSCRIPTIONS) {
50
50
  throw new WebSocketRequestError("Cannot subscribe to more than 1000 channels.");
51
51
  }
52
- // Check user subscription limits
53
- if (this._hasUserParam(payload) && this._countUserSubscriptions() >= MAX_USER_SUBSCRIPTIONS) {
54
- throw new WebSocketRequestError("Cannot track more than 10 total users.");
52
+ // Check unique user subscription limits
53
+ if (this._hasUserParam(payload) && this._countUniqueUserSubscriptions() >= MAX_UNIQUE_USER_SUBSCRIPTIONS) {
54
+ throw new WebSocketRequestError("Cannot track more than 10 unique users.");
55
55
  }
56
56
  // Send subscription request
57
57
  const promise = this._wsRequester.request("subscribe", payload)
@@ -130,20 +130,21 @@ export class WebSocketSubscriptionManager {
130
130
  _hasUserParam(payload) {
131
131
  return typeof payload === "object" && payload !== null && "user" in payload;
132
132
  }
133
- /** Counts the number of active subscriptions with user parameter. */
134
- _countUserSubscriptions() {
135
- let count = 0;
133
+ /** Counts the number of unique users across all active subscriptions. */
134
+ _countUniqueUserSubscriptions() {
135
+ const users = new Set();
136
136
  for (const id of this._subscriptions.keys()) {
137
137
  try {
138
138
  const payload = JSON.parse(id);
139
- if (this._hasUserParam(payload))
140
- count++;
139
+ if (this._hasUserParam(payload)) {
140
+ users.add(payload.user);
141
+ }
141
142
  }
142
143
  catch {
143
144
  // Ignore parsing errors
144
145
  }
145
146
  }
146
- return count;
147
+ return users.size;
147
148
  }
148
149
  }
149
150
  //# sourceMappingURL=_subscriptionManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_subscriptionManager.js","sourceRoot":"","sources":["../../../../src/src/transport/websocket/_subscriptionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_subscriptionManager.js","sourceRoot":"","sources":["../../../../src/src/transport/websocket/_subscriptionManager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nktkas/hyperliquid",
3
- "version": "0.29.0",
3
+ "version": "0.29.1",
4
4
  "description": "Hyperliquid API SDK for all major JS runtimes, written in TypeScript.",
5
5
  "keywords": [
6
6
  "api",
@@ -50,8 +50,8 @@ export declare class WebSocketSubscriptionManager {
50
50
  protected _handleClose(): void;
51
51
  /** Checks if a payload contains a user parameter. */
52
52
  protected _hasUserParam(payload: unknown): boolean;
53
- /** Counts the number of active subscriptions with user parameter. */
54
- protected _countUserSubscriptions(): number;
53
+ /** Counts the number of unique users across all active subscriptions. */
54
+ protected _countUniqueUserSubscriptions(): number;
55
55
  }
56
56
  export {};
57
57
  //# sourceMappingURL=_subscriptionManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_subscriptionManager.d.ts","sourceRoot":"","sources":["../../../../src/src/transport/websocket/_subscriptionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAyB,MAAM,mBAAmB,CAAC;AAQjF,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,2JAA2J;IAC3J,aAAa,EAAE,WAAW,CAAC;CAC5B;AAED,kDAAkD;AAClD,UAAU,iBAAiB;IACzB,6DAA6D;IAC7D,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,sDAAsD;IACtD,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,iBAAiB,EAAE,eAAe,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,4BAA4B;IACvC,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IAErB,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC9C,SAAS,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC5C,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAa;gBAGnE,MAAM,EAAE,qBAAqB,EAC7B,WAAW,EAAE,qBAAqB,EAClC,QAAQ,EAAE,sBAAsB,EAChC,WAAW,EAAE,OAAO;IAiBtB;;;;;;;;;;;OAWG;IACG,SAAS,CAAC,CAAC,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,GACvC,OAAO,CAAC,qBAAqB,CAAC;IAuEjC,gFAAgF;IAChF,SAAS,CAAC,WAAW,IAAI,IAAI;IAc7B,gFAAgF;IAChF,SAAS,CAAC,YAAY,IAAI,IAAI;IAc9B,qDAAqD;IACrD,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIlD,qEAAqE;IACrE,SAAS,CAAC,uBAAuB,IAAI,MAAM;CAY5C"}
1
+ {"version":3,"file":"_subscriptionManager.d.ts","sourceRoot":"","sources":["../../../../src/src/transport/websocket/_subscriptionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAyB,MAAM,mBAAmB,CAAC;AAQjF,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,2JAA2J;IAC3J,aAAa,EAAE,WAAW,CAAC;CAC5B;AAED,kDAAkD;AAClD,UAAU,iBAAiB;IACzB,6DAA6D;IAC7D,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,sDAAsD;IACtD,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,iBAAiB,EAAE,eAAe,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,4BAA4B;IACvC,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IAErB,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC9C,SAAS,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC5C,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAa;gBAGnE,MAAM,EAAE,qBAAqB,EAC7B,WAAW,EAAE,qBAAqB,EAClC,QAAQ,EAAE,sBAAsB,EAChC,WAAW,EAAE,OAAO;IAiBtB;;;;;;;;;;;OAWG;IACG,SAAS,CAAC,CAAC,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,GACvC,OAAO,CAAC,qBAAqB,CAAC;IAuEjC,gFAAgF;IAChF,SAAS,CAAC,WAAW,IAAI,IAAI;IAc7B,gFAAgF;IAChF,SAAS,CAAC,YAAY,IAAI,IAAI;IAc9B,qDAAqD;IACrD,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIlD,yEAAyE;IACzE,SAAS,CAAC,6BAA6B,IAAI,MAAM;CAclD"}
@@ -4,8 +4,8 @@ exports.WebSocketSubscriptionManager = void 0;
4
4
  const _postRequest_js_1 = require("./_postRequest.js");
5
5
  /** Maximum number of subscriptions allowed by Hyperliquid. */
6
6
  const MAX_SUBSCRIPTIONS = 1000;
7
- /** Maximum number of subscriptions with user parameter allowed by Hyperliquid. */
8
- const MAX_USER_SUBSCRIPTIONS = 10;
7
+ /** Maximum number of unique user subscriptions allowed by Hyperliquid. */
8
+ const MAX_UNIQUE_USER_SUBSCRIPTIONS = 10;
9
9
  /**
10
10
  * Manages WebSocket subscriptions to Hyperliquid event channels.
11
11
  * Handles subscription lifecycle, resubscription on reconnect, and cleanup.
@@ -48,13 +48,13 @@ class WebSocketSubscriptionManager {
48
48
  // Initialize new subscription, if it doesn't exist
49
49
  let subscription = this._subscriptions.get(id);
50
50
  if (!subscription) {
51
- // Check total subscription limits
51
+ // Check unique subscription limits
52
52
  if (this._subscriptions.size >= MAX_SUBSCRIPTIONS) {
53
53
  throw new _postRequest_js_1.WebSocketRequestError("Cannot subscribe to more than 1000 channels.");
54
54
  }
55
- // Check user subscription limits
56
- if (this._hasUserParam(payload) && this._countUserSubscriptions() >= MAX_USER_SUBSCRIPTIONS) {
57
- throw new _postRequest_js_1.WebSocketRequestError("Cannot track more than 10 total users.");
55
+ // Check unique user subscription limits
56
+ if (this._hasUserParam(payload) && this._countUniqueUserSubscriptions() >= MAX_UNIQUE_USER_SUBSCRIPTIONS) {
57
+ throw new _postRequest_js_1.WebSocketRequestError("Cannot track more than 10 unique users.");
58
58
  }
59
59
  // Send subscription request
60
60
  const promise = this._wsRequester.request("subscribe", payload)
@@ -133,20 +133,21 @@ class WebSocketSubscriptionManager {
133
133
  _hasUserParam(payload) {
134
134
  return typeof payload === "object" && payload !== null && "user" in payload;
135
135
  }
136
- /** Counts the number of active subscriptions with user parameter. */
137
- _countUserSubscriptions() {
138
- let count = 0;
136
+ /** Counts the number of unique users across all active subscriptions. */
137
+ _countUniqueUserSubscriptions() {
138
+ const users = new Set();
139
139
  for (const id of this._subscriptions.keys()) {
140
140
  try {
141
141
  const payload = JSON.parse(id);
142
- if (this._hasUserParam(payload))
143
- count++;
142
+ if (this._hasUserParam(payload)) {
143
+ users.add(payload.user);
144
+ }
144
145
  }
145
146
  catch {
146
147
  // Ignore parsing errors
147
148
  }
148
149
  }
149
- return count;
150
+ return users.size;
150
151
  }
151
152
  }
152
153
  exports.WebSocketSubscriptionManager = WebSocketSubscriptionManager;
@@ -1 +1 @@
1
- {"version":3,"file":"_subscriptionManager.js","sourceRoot":"","sources":["../../../../src/src/transport/websocket/_subscriptionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_subscriptionManager.js","sourceRoot":"","sources":["../../../../src/src/transport/websocket/_subscriptionManager.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@ import { WebSocketAsyncRequest, WebSocketRequestError } from "./_postRequest.js"
5
5
  /** Maximum number of subscriptions allowed by Hyperliquid. */
6
6
  const MAX_SUBSCRIPTIONS = 1000;
7
7
 
8
- /** Maximum number of subscriptions with user parameter allowed by Hyperliquid. */
9
- const MAX_USER_SUBSCRIPTIONS = 10;
8
+ /** Maximum number of unique user subscriptions allowed by Hyperliquid. */
9
+ const MAX_UNIQUE_USER_SUBSCRIPTIONS = 10;
10
10
 
11
11
  /** WebSocket subscription with failure signal. */
12
12
  export interface WebSocketSubscription {
@@ -86,13 +86,13 @@ export class WebSocketSubscriptionManager {
86
86
  // Initialize new subscription, if it doesn't exist
87
87
  let subscription = this._subscriptions.get(id);
88
88
  if (!subscription) {
89
- // Check total subscription limits
89
+ // Check unique subscription limits
90
90
  if (this._subscriptions.size >= MAX_SUBSCRIPTIONS) {
91
91
  throw new WebSocketRequestError("Cannot subscribe to more than 1000 channels.");
92
92
  }
93
- // Check user subscription limits
94
- if (this._hasUserParam(payload) && this._countUserSubscriptions() >= MAX_USER_SUBSCRIPTIONS) {
95
- throw new WebSocketRequestError("Cannot track more than 10 total users.");
93
+ // Check unique user subscription limits
94
+ if (this._hasUserParam(payload) && this._countUniqueUserSubscriptions() >= MAX_UNIQUE_USER_SUBSCRIPTIONS) {
95
+ throw new WebSocketRequestError("Cannot track more than 10 unique users.");
96
96
  }
97
97
 
98
98
  // Send subscription request
@@ -185,17 +185,19 @@ export class WebSocketSubscriptionManager {
185
185
  return typeof payload === "object" && payload !== null && "user" in payload;
186
186
  }
187
187
 
188
- /** Counts the number of active subscriptions with user parameter. */
189
- protected _countUserSubscriptions(): number {
190
- let count = 0;
188
+ /** Counts the number of unique users across all active subscriptions. */
189
+ protected _countUniqueUserSubscriptions(): number {
190
+ const users = new Set<string>();
191
191
  for (const id of this._subscriptions.keys()) {
192
192
  try {
193
193
  const payload = JSON.parse(id);
194
- if (this._hasUserParam(payload)) count++;
194
+ if (this._hasUserParam(payload)) {
195
+ users.add(payload.user);
196
+ }
195
197
  } catch {
196
198
  // Ignore parsing errors
197
199
  }
198
200
  }
199
- return count;
201
+ return users.size;
200
202
  }
201
203
  }