@pear-protocol/hyperliquid-sdk 0.0.17 → 0.0.19

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.
@@ -1,2 +1,3 @@
1
- export { useUserSelection } from "../store/userSelection";
2
- export type { UserSelectionState } from "../store/userSelection";
1
+ import type { UserSelectionState } from "../store/userSelection";
2
+ export declare const useUserSelection: () => UserSelectionState;
3
+ export type { UserSelectionState };
package/dist/index.d.ts CHANGED
@@ -853,7 +853,8 @@ interface UserSelectionState {
853
853
  handleTokenSelect: (selectedToken: string) => void;
854
854
  resetToDefaults: () => void;
855
855
  }
856
- declare const useUserSelection: any;
856
+
857
+ declare const useUserSelection: () => UserSelectionState;
857
858
 
858
859
  /**
859
860
  * Hook to access webData and native WebSocket state
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import require$$0, { useState, useEffect, useRef, createContext, useMemo, useContext, useCallback } from 'react';
2
- import useWebSocket, { ReadyState } from 'react-use-websocket';
2
+ import require$$1 from 'react-dom';
3
3
  import { create } from 'zustand';
4
4
 
5
5
  function bind(fn, thisArg) {
@@ -4096,6 +4096,12 @@ class PearMigrationSDK {
4096
4096
  }
4097
4097
  }
4098
4098
 
4099
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
4100
+
4101
+ function getDefaultExportFromCjs (x) {
4102
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
4103
+ }
4104
+
4099
4105
  var jsxRuntime = {exports: {}};
4100
4106
 
4101
4107
  var reactJsxRuntime_production_min = {};
@@ -5469,6 +5475,1053 @@ if (process.env.NODE_ENV === 'production') {
5469
5475
 
5470
5476
  var jsxRuntimeExports = jsxRuntime.exports;
5471
5477
 
5478
+ var dist = {};
5479
+
5480
+ var useWebsocket = {};
5481
+
5482
+ var constants = {};
5483
+
5484
+ (function (exports) {
5485
+ Object.defineProperty(exports, "__esModule", { value: true });
5486
+ exports.isEventSourceSupported = exports.isReactNative = exports.ReadyState = exports.DEFAULT_HEARTBEAT = exports.UNPARSABLE_JSON_OBJECT = exports.DEFAULT_RECONNECT_INTERVAL_MS = exports.DEFAULT_RECONNECT_LIMIT = exports.SOCKET_IO_PING_CODE = exports.SOCKET_IO_PATH = exports.SOCKET_IO_PING_INTERVAL = exports.DEFAULT_EVENT_SOURCE_OPTIONS = exports.EMPTY_EVENT_HANDLERS = exports.DEFAULT_OPTIONS = void 0;
5487
+ var MILLISECONDS = 1;
5488
+ var SECONDS = 1000 * MILLISECONDS;
5489
+ exports.DEFAULT_OPTIONS = {};
5490
+ exports.EMPTY_EVENT_HANDLERS = {};
5491
+ exports.DEFAULT_EVENT_SOURCE_OPTIONS = {
5492
+ withCredentials: false,
5493
+ events: exports.EMPTY_EVENT_HANDLERS,
5494
+ };
5495
+ exports.SOCKET_IO_PING_INTERVAL = 25 * SECONDS;
5496
+ exports.SOCKET_IO_PATH = '/socket.io/?EIO=3&transport=websocket';
5497
+ exports.SOCKET_IO_PING_CODE = '2';
5498
+ exports.DEFAULT_RECONNECT_LIMIT = 20;
5499
+ exports.DEFAULT_RECONNECT_INTERVAL_MS = 5000;
5500
+ exports.UNPARSABLE_JSON_OBJECT = {};
5501
+ exports.DEFAULT_HEARTBEAT = {
5502
+ message: 'ping',
5503
+ timeout: 60000,
5504
+ interval: 25000,
5505
+ };
5506
+ var ReadyState;
5507
+ (function (ReadyState) {
5508
+ ReadyState[ReadyState["UNINSTANTIATED"] = -1] = "UNINSTANTIATED";
5509
+ ReadyState[ReadyState["CONNECTING"] = 0] = "CONNECTING";
5510
+ ReadyState[ReadyState["OPEN"] = 1] = "OPEN";
5511
+ ReadyState[ReadyState["CLOSING"] = 2] = "CLOSING";
5512
+ ReadyState[ReadyState["CLOSED"] = 3] = "CLOSED";
5513
+ })(ReadyState || (exports.ReadyState = ReadyState = {}));
5514
+ var eventSourceSupported = function () {
5515
+ try {
5516
+ return 'EventSource' in globalThis;
5517
+ }
5518
+ catch (e) {
5519
+ return false;
5520
+ }
5521
+ };
5522
+ exports.isReactNative = typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
5523
+ exports.isEventSourceSupported = !exports.isReactNative && eventSourceSupported();
5524
+
5525
+ } (constants));
5526
+
5527
+ var createOrJoin = {};
5528
+
5529
+ var globals = {};
5530
+
5531
+ (function (exports) {
5532
+ Object.defineProperty(exports, "__esModule", { value: true });
5533
+ exports.resetWebSockets = exports.sharedWebSockets = void 0;
5534
+ exports.sharedWebSockets = {};
5535
+ var resetWebSockets = function (url) {
5536
+ if (url && exports.sharedWebSockets.hasOwnProperty(url)) {
5537
+ delete exports.sharedWebSockets[url];
5538
+ }
5539
+ else {
5540
+ for (var url_1 in exports.sharedWebSockets) {
5541
+ if (exports.sharedWebSockets.hasOwnProperty(url_1)) {
5542
+ delete exports.sharedWebSockets[url_1];
5543
+ }
5544
+ }
5545
+ }
5546
+ };
5547
+ exports.resetWebSockets = resetWebSockets;
5548
+
5549
+ } (globals));
5550
+
5551
+ var attachListener = {};
5552
+
5553
+ var socketIo = {};
5554
+
5555
+ Object.defineProperty(socketIo, "__esModule", { value: true });
5556
+ socketIo.setUpSocketIOPing = socketIo.appendQueryParams = socketIo.parseSocketIOUrl = void 0;
5557
+ var constants_1$7 = constants;
5558
+ var parseSocketIOUrl = function (url) {
5559
+ if (url) {
5560
+ var isSecure = /^https|wss/.test(url);
5561
+ var strippedProtocol = url.replace(/^(https?|wss?)(:\/\/)?/, '');
5562
+ var removedFinalBackSlack = strippedProtocol.replace(/\/$/, '');
5563
+ var protocol = isSecure ? 'wss' : 'ws';
5564
+ return "".concat(protocol, "://").concat(removedFinalBackSlack).concat(constants_1$7.SOCKET_IO_PATH);
5565
+ }
5566
+ else if (url === '') {
5567
+ var isSecure = /^https/.test(window.location.protocol);
5568
+ var protocol = isSecure ? 'wss' : 'ws';
5569
+ var port = window.location.port ? ":".concat(window.location.port) : '';
5570
+ return "".concat(protocol, "://").concat(window.location.hostname).concat(port).concat(constants_1$7.SOCKET_IO_PATH);
5571
+ }
5572
+ return url;
5573
+ };
5574
+ socketIo.parseSocketIOUrl = parseSocketIOUrl;
5575
+ var appendQueryParams = function (url, params) {
5576
+ if (params === void 0) { params = {}; }
5577
+ var hasParamsRegex = /\?([\w]+=[\w]+)/;
5578
+ var alreadyHasParams = hasParamsRegex.test(url);
5579
+ var stringified = "".concat(Object.entries(params).reduce(function (next, _a) {
5580
+ var key = _a[0], value = _a[1];
5581
+ return next + "".concat(key, "=").concat(value, "&");
5582
+ }, '').slice(0, -1));
5583
+ return "".concat(url).concat(alreadyHasParams ? '&' : '?').concat(stringified);
5584
+ };
5585
+ socketIo.appendQueryParams = appendQueryParams;
5586
+ var setUpSocketIOPing = function (sendMessage, interval) {
5587
+ if (interval === void 0) { interval = constants_1$7.SOCKET_IO_PING_INTERVAL; }
5588
+ var ping = function () { return sendMessage(constants_1$7.SOCKET_IO_PING_CODE); };
5589
+ return window.setInterval(ping, interval);
5590
+ };
5591
+ socketIo.setUpSocketIOPing = setUpSocketIOPing;
5592
+
5593
+ var heartbeat$1 = {};
5594
+
5595
+ Object.defineProperty(heartbeat$1, "__esModule", { value: true });
5596
+ heartbeat$1.heartbeat = heartbeat;
5597
+ var constants_1$6 = constants;
5598
+ function getLastMessageTime(lastMessageTime) {
5599
+ if (Array.isArray(lastMessageTime)) {
5600
+ return lastMessageTime.reduce(function (p, c) { return (p.current > c.current) ? p : c; }).current;
5601
+ }
5602
+ return lastMessageTime.current;
5603
+ }
5604
+ function heartbeat(ws, lastMessageTime, options) {
5605
+ var _a = options || {}, _b = _a.interval, interval = _b === void 0 ? constants_1$6.DEFAULT_HEARTBEAT.interval : _b, _c = _a.timeout, timeout = _c === void 0 ? constants_1$6.DEFAULT_HEARTBEAT.timeout : _c, _d = _a.message, message = _d === void 0 ? constants_1$6.DEFAULT_HEARTBEAT.message : _d;
5606
+ // how often check interval between ping messages
5607
+ // minimum is 100ms
5608
+ // maximum is ${interval / 10}ms
5609
+ var intervalCheck = Math.max(100, interval / 10);
5610
+ var lastPingSentAt = Date.now();
5611
+ var heartbeatInterval = setInterval(function () {
5612
+ var timeNow = Date.now();
5613
+ var lastMessageReceivedAt = getLastMessageTime(lastMessageTime);
5614
+ if (lastMessageReceivedAt + timeout <= timeNow) {
5615
+ console.warn("Heartbeat timed out, closing connection, last message received ".concat(timeNow - lastMessageReceivedAt, "ms ago, last ping sent ").concat(timeNow - lastPingSentAt, "ms ago"));
5616
+ ws.close();
5617
+ }
5618
+ else {
5619
+ if (lastMessageReceivedAt + interval <= timeNow && lastPingSentAt + interval <= timeNow) {
5620
+ try {
5621
+ if (typeof message === 'function') {
5622
+ ws.send(message());
5623
+ }
5624
+ else {
5625
+ ws.send(message);
5626
+ }
5627
+ lastPingSentAt = timeNow;
5628
+ }
5629
+ catch (err) {
5630
+ console.error("Heartbeat failed, closing connection", err instanceof Error ? err.message : err);
5631
+ ws.close();
5632
+ }
5633
+ }
5634
+ }
5635
+ }, intervalCheck);
5636
+ ws.addEventListener("close", function () {
5637
+ clearInterval(heartbeatInterval);
5638
+ });
5639
+ return function () { };
5640
+ }
5641
+
5642
+ var util = {};
5643
+
5644
+ var manageSubscribers = {};
5645
+
5646
+ (function (exports) {
5647
+ Object.defineProperty(exports, "__esModule", { value: true });
5648
+ exports.resetSubscribers = exports.removeSubscriber = exports.addSubscriber = exports.hasSubscribers = exports.getSubscribers = void 0;
5649
+ var subscribers = {};
5650
+ var EMPTY_LIST = [];
5651
+ var getSubscribers = function (url) {
5652
+ if ((0, exports.hasSubscribers)(url)) {
5653
+ return Array.from(subscribers[url]);
5654
+ }
5655
+ return EMPTY_LIST;
5656
+ };
5657
+ exports.getSubscribers = getSubscribers;
5658
+ var hasSubscribers = function (url) {
5659
+ var _a;
5660
+ return ((_a = subscribers[url]) === null || _a === void 0 ? void 0 : _a.size) > 0;
5661
+ };
5662
+ exports.hasSubscribers = hasSubscribers;
5663
+ var addSubscriber = function (url, subscriber) {
5664
+ subscribers[url] = subscribers[url] || new Set();
5665
+ subscribers[url].add(subscriber);
5666
+ };
5667
+ exports.addSubscriber = addSubscriber;
5668
+ var removeSubscriber = function (url, subscriber) {
5669
+ subscribers[url].delete(subscriber);
5670
+ };
5671
+ exports.removeSubscriber = removeSubscriber;
5672
+ var resetSubscribers = function (url) {
5673
+ if (url && subscribers.hasOwnProperty(url)) {
5674
+ delete subscribers[url];
5675
+ }
5676
+ else {
5677
+ for (var url_1 in subscribers) {
5678
+ if (subscribers.hasOwnProperty(url_1)) {
5679
+ delete subscribers[url_1];
5680
+ }
5681
+ }
5682
+ }
5683
+ };
5684
+ exports.resetSubscribers = resetSubscribers;
5685
+
5686
+ } (manageSubscribers));
5687
+
5688
+ Object.defineProperty(util, "__esModule", { value: true });
5689
+ util.assertIsWebSocket = assertIsWebSocket;
5690
+ util.resetGlobalState = resetGlobalState;
5691
+ var globals_1$2 = globals;
5692
+ var manage_subscribers_1$2 = manageSubscribers;
5693
+ function assertIsWebSocket(webSocketInstance, skip) {
5694
+ if (!skip && webSocketInstance instanceof WebSocket === false)
5695
+ throw new Error('');
5696
+ }
5697
+ function resetGlobalState(url) {
5698
+ (0, manage_subscribers_1$2.resetSubscribers)(url);
5699
+ (0, globals_1$2.resetWebSockets)(url);
5700
+ }
5701
+
5702
+ var __assign$4 = (commonjsGlobal && commonjsGlobal.__assign) || function () {
5703
+ __assign$4 = Object.assign || function(t) {
5704
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5705
+ s = arguments[i];
5706
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
5707
+ t[p] = s[p];
5708
+ }
5709
+ return t;
5710
+ };
5711
+ return __assign$4.apply(this, arguments);
5712
+ };
5713
+ Object.defineProperty(attachListener, "__esModule", { value: true });
5714
+ attachListener.attachListeners = void 0;
5715
+ var socket_io_1$1 = socketIo;
5716
+ var heartbeat_1$1 = heartbeat$1;
5717
+ var constants_1$5 = constants;
5718
+ var util_1$1 = util;
5719
+ var bindMessageHandler$1 = function (webSocketInstance, optionsRef, setLastMessage, lastMessageTime) {
5720
+ webSocketInstance.onmessage = function (message) {
5721
+ var _a;
5722
+ optionsRef.current.onMessage && optionsRef.current.onMessage(message);
5723
+ if (typeof (lastMessageTime === null || lastMessageTime === void 0 ? void 0 : lastMessageTime.current) === 'number') {
5724
+ lastMessageTime.current = Date.now();
5725
+ }
5726
+ if (typeof optionsRef.current.filter === 'function' && optionsRef.current.filter(message) !== true) {
5727
+ return;
5728
+ }
5729
+ if (optionsRef.current.heartbeat &&
5730
+ typeof optionsRef.current.heartbeat !== "boolean" &&
5731
+ ((_a = optionsRef.current.heartbeat) === null || _a === void 0 ? void 0 : _a.returnMessage) === message.data) {
5732
+ return;
5733
+ }
5734
+ setLastMessage(message);
5735
+ };
5736
+ };
5737
+ var bindOpenHandler$1 = function (webSocketInstance, optionsRef, setReadyState, reconnectCount, lastMessageTime) {
5738
+ webSocketInstance.onopen = function (event) {
5739
+ optionsRef.current.onOpen && optionsRef.current.onOpen(event);
5740
+ reconnectCount.current = 0;
5741
+ setReadyState(constants_1$5.ReadyState.OPEN);
5742
+ //start heart beat here
5743
+ if (optionsRef.current.heartbeat && webSocketInstance instanceof WebSocket) {
5744
+ var heartbeatOptions = typeof optionsRef.current.heartbeat === "boolean"
5745
+ ? undefined
5746
+ : optionsRef.current.heartbeat;
5747
+ lastMessageTime.current = Date.now();
5748
+ (0, heartbeat_1$1.heartbeat)(webSocketInstance, lastMessageTime, heartbeatOptions);
5749
+ }
5750
+ };
5751
+ };
5752
+ var bindCloseHandler$1 = function (webSocketInstance, optionsRef, setReadyState, reconnect, reconnectCount) {
5753
+ if (constants_1$5.isEventSourceSupported && webSocketInstance instanceof EventSource) {
5754
+ return function () { };
5755
+ }
5756
+ (0, util_1$1.assertIsWebSocket)(webSocketInstance, optionsRef.current.skipAssert);
5757
+ var reconnectTimeout;
5758
+ webSocketInstance.onclose = function (event) {
5759
+ var _a;
5760
+ optionsRef.current.onClose && optionsRef.current.onClose(event);
5761
+ setReadyState(constants_1$5.ReadyState.CLOSED);
5762
+ if (optionsRef.current.shouldReconnect && optionsRef.current.shouldReconnect(event)) {
5763
+ var reconnectAttempts = (_a = optionsRef.current.reconnectAttempts) !== null && _a !== void 0 ? _a : constants_1$5.DEFAULT_RECONNECT_LIMIT;
5764
+ if (reconnectCount.current < reconnectAttempts) {
5765
+ var nextReconnectInterval = typeof optionsRef.current.reconnectInterval === 'function' ?
5766
+ optionsRef.current.reconnectInterval(reconnectCount.current) :
5767
+ optionsRef.current.reconnectInterval;
5768
+ reconnectTimeout = window.setTimeout(function () {
5769
+ reconnectCount.current++;
5770
+ reconnect();
5771
+ }, nextReconnectInterval !== null && nextReconnectInterval !== void 0 ? nextReconnectInterval : constants_1$5.DEFAULT_RECONNECT_INTERVAL_MS);
5772
+ }
5773
+ else {
5774
+ optionsRef.current.onReconnectStop && optionsRef.current.onReconnectStop(reconnectAttempts);
5775
+ console.warn("Max reconnect attempts of ".concat(reconnectAttempts, " exceeded"));
5776
+ }
5777
+ }
5778
+ };
5779
+ return function () { return reconnectTimeout && window.clearTimeout(reconnectTimeout); };
5780
+ };
5781
+ var bindErrorHandler$1 = function (webSocketInstance, optionsRef, setReadyState, reconnect, reconnectCount) {
5782
+ var reconnectTimeout;
5783
+ webSocketInstance.onerror = function (error) {
5784
+ var _a;
5785
+ optionsRef.current.onError && optionsRef.current.onError(error);
5786
+ if (constants_1$5.isEventSourceSupported && webSocketInstance instanceof EventSource) {
5787
+ optionsRef.current.onClose && optionsRef.current.onClose(__assign$4(__assign$4({}, error), { code: 1006, reason: "An error occurred with the EventSource: ".concat(error), wasClean: false }));
5788
+ setReadyState(constants_1$5.ReadyState.CLOSED);
5789
+ webSocketInstance.close();
5790
+ }
5791
+ if (optionsRef.current.retryOnError) {
5792
+ if (reconnectCount.current < ((_a = optionsRef.current.reconnectAttempts) !== null && _a !== void 0 ? _a : constants_1$5.DEFAULT_RECONNECT_LIMIT)) {
5793
+ var nextReconnectInterval = typeof optionsRef.current.reconnectInterval === 'function' ?
5794
+ optionsRef.current.reconnectInterval(reconnectCount.current) :
5795
+ optionsRef.current.reconnectInterval;
5796
+ reconnectTimeout = window.setTimeout(function () {
5797
+ reconnectCount.current++;
5798
+ reconnect();
5799
+ }, nextReconnectInterval !== null && nextReconnectInterval !== void 0 ? nextReconnectInterval : constants_1$5.DEFAULT_RECONNECT_INTERVAL_MS);
5800
+ }
5801
+ else {
5802
+ optionsRef.current.onReconnectStop && optionsRef.current.onReconnectStop(optionsRef.current.reconnectAttempts);
5803
+ console.warn("Max reconnect attempts of ".concat(optionsRef.current.reconnectAttempts, " exceeded"));
5804
+ }
5805
+ }
5806
+ };
5807
+ return function () { return reconnectTimeout && window.clearTimeout(reconnectTimeout); };
5808
+ };
5809
+ var attachListeners = function (webSocketInstance, setters, optionsRef, reconnect, reconnectCount, lastMessageTime, sendMessage) {
5810
+ var setLastMessage = setters.setLastMessage, setReadyState = setters.setReadyState;
5811
+ var interval;
5812
+ var cancelReconnectOnClose;
5813
+ var cancelReconnectOnError;
5814
+ if (optionsRef.current.fromSocketIO) {
5815
+ interval = (0, socket_io_1$1.setUpSocketIOPing)(sendMessage);
5816
+ }
5817
+ bindMessageHandler$1(webSocketInstance, optionsRef, setLastMessage, lastMessageTime);
5818
+ bindOpenHandler$1(webSocketInstance, optionsRef, setReadyState, reconnectCount, lastMessageTime);
5819
+ cancelReconnectOnClose = bindCloseHandler$1(webSocketInstance, optionsRef, setReadyState, reconnect, reconnectCount);
5820
+ cancelReconnectOnError = bindErrorHandler$1(webSocketInstance, optionsRef, setReadyState, reconnect, reconnectCount);
5821
+ return function () {
5822
+ setReadyState(constants_1$5.ReadyState.CLOSING);
5823
+ cancelReconnectOnClose();
5824
+ cancelReconnectOnError();
5825
+ webSocketInstance.close();
5826
+ if (interval)
5827
+ clearInterval(interval);
5828
+ };
5829
+ };
5830
+ attachListener.attachListeners = attachListeners;
5831
+
5832
+ var attachSharedListeners$1 = {};
5833
+
5834
+ var __assign$3 = (commonjsGlobal && commonjsGlobal.__assign) || function () {
5835
+ __assign$3 = Object.assign || function(t) {
5836
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5837
+ s = arguments[i];
5838
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
5839
+ t[p] = s[p];
5840
+ }
5841
+ return t;
5842
+ };
5843
+ return __assign$3.apply(this, arguments);
5844
+ };
5845
+ Object.defineProperty(attachSharedListeners$1, "__esModule", { value: true });
5846
+ attachSharedListeners$1.attachSharedListeners = void 0;
5847
+ var globals_1$1 = globals;
5848
+ var constants_1$4 = constants;
5849
+ var manage_subscribers_1$1 = manageSubscribers;
5850
+ var socket_io_1 = socketIo;
5851
+ var heartbeat_1 = heartbeat$1;
5852
+ var bindMessageHandler = function (webSocketInstance, url, heartbeatOptions) {
5853
+ webSocketInstance.onmessage = function (message) {
5854
+ (0, manage_subscribers_1$1.getSubscribers)(url).forEach(function (subscriber) {
5855
+ var _a;
5856
+ if (subscriber.optionsRef.current.onMessage) {
5857
+ subscriber.optionsRef.current.onMessage(message);
5858
+ }
5859
+ if (typeof ((_a = subscriber === null || subscriber === void 0 ? void 0 : subscriber.lastMessageTime) === null || _a === void 0 ? void 0 : _a.current) === 'number') {
5860
+ subscriber.lastMessageTime.current = Date.now();
5861
+ }
5862
+ if (typeof subscriber.optionsRef.current.filter === 'function' &&
5863
+ subscriber.optionsRef.current.filter(message) !== true) {
5864
+ return;
5865
+ }
5866
+ if (heartbeatOptions &&
5867
+ typeof heartbeatOptions !== "boolean" &&
5868
+ (heartbeatOptions === null || heartbeatOptions === void 0 ? void 0 : heartbeatOptions.returnMessage) === message.data)
5869
+ return;
5870
+ subscriber.setLastMessage(message);
5871
+ });
5872
+ };
5873
+ };
5874
+ var bindOpenHandler = function (webSocketInstance, url, heartbeatOptions) {
5875
+ webSocketInstance.onopen = function (event) {
5876
+ var subscribers = (0, manage_subscribers_1$1.getSubscribers)(url);
5877
+ subscribers.forEach(function (subscriber) {
5878
+ subscriber.reconnectCount.current = 0;
5879
+ if (subscriber.optionsRef.current.onOpen) {
5880
+ subscriber.optionsRef.current.onOpen(event);
5881
+ }
5882
+ subscriber.setReadyState(constants_1$4.ReadyState.OPEN);
5883
+ if (heartbeatOptions && webSocketInstance instanceof WebSocket) {
5884
+ subscriber.lastMessageTime.current = Date.now();
5885
+ }
5886
+ });
5887
+ if (heartbeatOptions && webSocketInstance instanceof WebSocket) {
5888
+ (0, heartbeat_1.heartbeat)(webSocketInstance, subscribers.map(function (subscriber) { return subscriber.lastMessageTime; }), typeof heartbeatOptions === 'boolean' ? undefined : heartbeatOptions);
5889
+ }
5890
+ };
5891
+ };
5892
+ var bindCloseHandler = function (webSocketInstance, url) {
5893
+ if (webSocketInstance instanceof WebSocket) {
5894
+ webSocketInstance.onclose = function (event) {
5895
+ (0, manage_subscribers_1$1.getSubscribers)(url).forEach(function (subscriber) {
5896
+ if (subscriber.optionsRef.current.onClose) {
5897
+ subscriber.optionsRef.current.onClose(event);
5898
+ }
5899
+ subscriber.setReadyState(constants_1$4.ReadyState.CLOSED);
5900
+ });
5901
+ delete globals_1$1.sharedWebSockets[url];
5902
+ (0, manage_subscribers_1$1.getSubscribers)(url).forEach(function (subscriber) {
5903
+ var _a;
5904
+ if (subscriber.optionsRef.current.shouldReconnect &&
5905
+ subscriber.optionsRef.current.shouldReconnect(event)) {
5906
+ var reconnectAttempts = (_a = subscriber.optionsRef.current.reconnectAttempts) !== null && _a !== void 0 ? _a : constants_1$4.DEFAULT_RECONNECT_LIMIT;
5907
+ if (subscriber.reconnectCount.current < reconnectAttempts) {
5908
+ var nextReconnectInterval = typeof subscriber.optionsRef.current.reconnectInterval === 'function' ?
5909
+ subscriber.optionsRef.current.reconnectInterval(subscriber.reconnectCount.current) :
5910
+ subscriber.optionsRef.current.reconnectInterval;
5911
+ setTimeout(function () {
5912
+ subscriber.reconnectCount.current++;
5913
+ subscriber.reconnect.current();
5914
+ }, nextReconnectInterval !== null && nextReconnectInterval !== void 0 ? nextReconnectInterval : constants_1$4.DEFAULT_RECONNECT_INTERVAL_MS);
5915
+ }
5916
+ else {
5917
+ subscriber.optionsRef.current.onReconnectStop && subscriber.optionsRef.current.onReconnectStop(subscriber.optionsRef.current.reconnectAttempts);
5918
+ console.warn("Max reconnect attempts of ".concat(reconnectAttempts, " exceeded"));
5919
+ }
5920
+ }
5921
+ });
5922
+ };
5923
+ }
5924
+ };
5925
+ var bindErrorHandler = function (webSocketInstance, url) {
5926
+ webSocketInstance.onerror = function (error) {
5927
+ (0, manage_subscribers_1$1.getSubscribers)(url).forEach(function (subscriber) {
5928
+ if (subscriber.optionsRef.current.onError) {
5929
+ subscriber.optionsRef.current.onError(error);
5930
+ }
5931
+ if (constants_1$4.isEventSourceSupported && webSocketInstance instanceof EventSource) {
5932
+ subscriber.optionsRef.current.onClose && subscriber.optionsRef.current.onClose(__assign$3(__assign$3({}, error), { code: 1006, reason: "An error occurred with the EventSource: ".concat(error), wasClean: false }));
5933
+ subscriber.setReadyState(constants_1$4.ReadyState.CLOSED);
5934
+ }
5935
+ });
5936
+ if (constants_1$4.isEventSourceSupported && webSocketInstance instanceof EventSource) {
5937
+ webSocketInstance.close();
5938
+ }
5939
+ };
5940
+ };
5941
+ var attachSharedListeners = function (webSocketInstance, url, optionsRef, sendMessage) {
5942
+ var interval;
5943
+ if (optionsRef.current.fromSocketIO) {
5944
+ interval = (0, socket_io_1.setUpSocketIOPing)(sendMessage);
5945
+ }
5946
+ bindMessageHandler(webSocketInstance, url, optionsRef.current.heartbeat);
5947
+ bindCloseHandler(webSocketInstance, url);
5948
+ bindOpenHandler(webSocketInstance, url, optionsRef.current.heartbeat);
5949
+ bindErrorHandler(webSocketInstance, url);
5950
+ return function () {
5951
+ if (interval)
5952
+ clearInterval(interval);
5953
+ };
5954
+ };
5955
+ attachSharedListeners$1.attachSharedListeners = attachSharedListeners;
5956
+
5957
+ Object.defineProperty(createOrJoin, "__esModule", { value: true });
5958
+ createOrJoin.createOrJoinSocket = void 0;
5959
+ var globals_1 = globals;
5960
+ var constants_1$3 = constants;
5961
+ var attach_listener_1 = attachListener;
5962
+ var attach_shared_listeners_1 = attachSharedListeners$1;
5963
+ var manage_subscribers_1 = manageSubscribers;
5964
+ //TODO ensure that all onClose callbacks are called
5965
+ var cleanSubscribers = function (url, subscriber, optionsRef, setReadyState, clearSocketIoPingInterval) {
5966
+ return function () {
5967
+ (0, manage_subscribers_1.removeSubscriber)(url, subscriber);
5968
+ if (!(0, manage_subscribers_1.hasSubscribers)(url)) {
5969
+ try {
5970
+ var socketLike = globals_1.sharedWebSockets[url];
5971
+ if (socketLike instanceof WebSocket) {
5972
+ socketLike.onclose = function (event) {
5973
+ if (optionsRef.current.onClose) {
5974
+ optionsRef.current.onClose(event);
5975
+ }
5976
+ setReadyState(constants_1$3.ReadyState.CLOSED);
5977
+ };
5978
+ }
5979
+ socketLike.close();
5980
+ }
5981
+ catch (e) {
5982
+ }
5983
+ if (clearSocketIoPingInterval)
5984
+ clearSocketIoPingInterval();
5985
+ delete globals_1.sharedWebSockets[url];
5986
+ }
5987
+ };
5988
+ };
5989
+ var createOrJoinSocket = function (webSocketRef, url, setReadyState, optionsRef, setLastMessage, startRef, reconnectCount, lastMessageTime, sendMessage) {
5990
+ if (!constants_1$3.isEventSourceSupported && optionsRef.current.eventSourceOptions) {
5991
+ if (constants_1$3.isReactNative) {
5992
+ throw new Error('EventSource is not supported in ReactNative');
5993
+ }
5994
+ else {
5995
+ throw new Error('EventSource is not supported');
5996
+ }
5997
+ }
5998
+ if (optionsRef.current.share) {
5999
+ var clearSocketIoPingInterval = null;
6000
+ if (globals_1.sharedWebSockets[url] === undefined) {
6001
+ globals_1.sharedWebSockets[url] = optionsRef.current.eventSourceOptions ?
6002
+ new EventSource(url, optionsRef.current.eventSourceOptions) :
6003
+ new WebSocket(url, optionsRef.current.protocols);
6004
+ webSocketRef.current = globals_1.sharedWebSockets[url];
6005
+ setReadyState(constants_1$3.ReadyState.CONNECTING);
6006
+ clearSocketIoPingInterval = (0, attach_shared_listeners_1.attachSharedListeners)(globals_1.sharedWebSockets[url], url, optionsRef, sendMessage);
6007
+ }
6008
+ else {
6009
+ webSocketRef.current = globals_1.sharedWebSockets[url];
6010
+ setReadyState(globals_1.sharedWebSockets[url].readyState);
6011
+ }
6012
+ var subscriber = {
6013
+ setLastMessage: setLastMessage,
6014
+ setReadyState: setReadyState,
6015
+ optionsRef: optionsRef,
6016
+ reconnectCount: reconnectCount,
6017
+ lastMessageTime: lastMessageTime,
6018
+ reconnect: startRef,
6019
+ };
6020
+ (0, manage_subscribers_1.addSubscriber)(url, subscriber);
6021
+ return cleanSubscribers(url, subscriber, optionsRef, setReadyState, clearSocketIoPingInterval);
6022
+ }
6023
+ else {
6024
+ webSocketRef.current = optionsRef.current.eventSourceOptions ?
6025
+ new EventSource(url, optionsRef.current.eventSourceOptions) :
6026
+ new WebSocket(url, optionsRef.current.protocols);
6027
+ setReadyState(constants_1$3.ReadyState.CONNECTING);
6028
+ if (!webSocketRef.current) {
6029
+ throw new Error('WebSocket failed to be created');
6030
+ }
6031
+ return (0, attach_listener_1.attachListeners)(webSocketRef.current, {
6032
+ setLastMessage: setLastMessage,
6033
+ setReadyState: setReadyState
6034
+ }, optionsRef, startRef.current, reconnectCount, lastMessageTime, sendMessage);
6035
+ }
6036
+ };
6037
+ createOrJoin.createOrJoinSocket = createOrJoinSocket;
6038
+
6039
+ var getUrl = {};
6040
+
6041
+ (function (exports) {
6042
+ var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
6043
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6044
+ return new (P || (P = Promise))(function (resolve, reject) {
6045
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6046
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6047
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
6048
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
6049
+ });
6050
+ };
6051
+ var __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {
6052
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
6053
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
6054
+ function verb(n) { return function (v) { return step([n, v]); }; }
6055
+ function step(op) {
6056
+ if (f) throw new TypeError("Generator is already executing.");
6057
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
6058
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
6059
+ if (y = 0, t) op = [op[0] & 2, t.value];
6060
+ switch (op[0]) {
6061
+ case 0: case 1: t = op; break;
6062
+ case 4: _.label++; return { value: op[1], done: false };
6063
+ case 5: _.label++; y = op[1]; op = [0]; continue;
6064
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
6065
+ default:
6066
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
6067
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
6068
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
6069
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
6070
+ if (t[2]) _.ops.pop();
6071
+ _.trys.pop(); continue;
6072
+ }
6073
+ op = body.call(thisArg, _);
6074
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
6075
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
6076
+ }
6077
+ };
6078
+ var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from, pack) {
6079
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
6080
+ if (ar || !(i in from)) {
6081
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6082
+ ar[i] = from[i];
6083
+ }
6084
+ }
6085
+ return to.concat(ar || Array.prototype.slice.call(from));
6086
+ };
6087
+ Object.defineProperty(exports, "__esModule", { value: true });
6088
+ exports.getUrl = void 0;
6089
+ var socket_io_1 = socketIo;
6090
+ var constants_1 = constants;
6091
+ var waitFor = function (duration) { return new Promise(function (resolve) { return window.setTimeout(resolve, duration); }); };
6092
+ var getUrl = function (url_1, optionsRef_1) {
6093
+ var args_1 = [];
6094
+ for (var _i = 2; _i < arguments.length; _i++) {
6095
+ args_1[_i - 2] = arguments[_i];
6096
+ }
6097
+ return __awaiter(void 0, __spreadArray([url_1, optionsRef_1], args_1, true), void 0, function (url, optionsRef, retriedAttempts) {
6098
+ var convertedUrl, reconnectLimit, nextReconnectInterval, parsedUrl, parsedWithQueryParams;
6099
+ var _a, _b, _c;
6100
+ if (retriedAttempts === void 0) { retriedAttempts = 0; }
6101
+ return __generator(this, function (_d) {
6102
+ switch (_d.label) {
6103
+ case 0:
6104
+ if (!(typeof url === 'function')) return [3 /*break*/, 10];
6105
+ _d.label = 1;
6106
+ case 1:
6107
+ _d.trys.push([1, 3, , 9]);
6108
+ return [4 /*yield*/, url()];
6109
+ case 2:
6110
+ convertedUrl = _d.sent();
6111
+ return [3 /*break*/, 9];
6112
+ case 3:
6113
+ _d.sent();
6114
+ if (!optionsRef.current.retryOnError) return [3 /*break*/, 7];
6115
+ reconnectLimit = (_a = optionsRef.current.reconnectAttempts) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_RECONNECT_LIMIT;
6116
+ if (!(retriedAttempts < reconnectLimit)) return [3 /*break*/, 5];
6117
+ nextReconnectInterval = typeof optionsRef.current.reconnectInterval === 'function' ?
6118
+ optionsRef.current.reconnectInterval(retriedAttempts) :
6119
+ optionsRef.current.reconnectInterval;
6120
+ return [4 /*yield*/, waitFor(nextReconnectInterval !== null && nextReconnectInterval !== void 0 ? nextReconnectInterval : constants_1.DEFAULT_RECONNECT_INTERVAL_MS)];
6121
+ case 4:
6122
+ _d.sent();
6123
+ return [2 /*return*/, (0, exports.getUrl)(url, optionsRef, retriedAttempts + 1)];
6124
+ case 5:
6125
+ (_c = (_b = optionsRef.current).onReconnectStop) === null || _c === void 0 ? void 0 : _c.call(_b, retriedAttempts);
6126
+ return [2 /*return*/, null];
6127
+ case 6: return [3 /*break*/, 8];
6128
+ case 7: return [2 /*return*/, null];
6129
+ case 8: return [3 /*break*/, 9];
6130
+ case 9: return [3 /*break*/, 11];
6131
+ case 10:
6132
+ convertedUrl = url;
6133
+ _d.label = 11;
6134
+ case 11:
6135
+ parsedUrl = optionsRef.current.fromSocketIO ?
6136
+ (0, socket_io_1.parseSocketIOUrl)(convertedUrl) :
6137
+ convertedUrl;
6138
+ parsedWithQueryParams = optionsRef.current.queryParams ?
6139
+ (0, socket_io_1.appendQueryParams)(parsedUrl, optionsRef.current.queryParams) :
6140
+ parsedUrl;
6141
+ return [2 /*return*/, parsedWithQueryParams];
6142
+ }
6143
+ });
6144
+ });
6145
+ };
6146
+ exports.getUrl = getUrl;
6147
+
6148
+ } (getUrl));
6149
+
6150
+ var proxy = {};
6151
+
6152
+ (function (exports) {
6153
+ Object.defineProperty(exports, "__esModule", { value: true });
6154
+ exports.websocketWrapper = void 0;
6155
+ var websocketWrapper = function (webSocket, start) {
6156
+ return new Proxy(webSocket, {
6157
+ get: function (obj, key) {
6158
+ var val = obj[key];
6159
+ if (key === 'reconnect')
6160
+ return start;
6161
+ if (typeof val === 'function') {
6162
+ console.error('Calling methods directly on the websocket is not supported at this moment. You must use the methods returned by useWebSocket.');
6163
+ //Prevent error thrown by invoking a non-function
6164
+ return function () { };
6165
+ }
6166
+ else {
6167
+ return val;
6168
+ }
6169
+ },
6170
+ set: function (obj, key, val) {
6171
+ if (/^on/.test(key)) {
6172
+ console.warn('The websocket\'s event handlers should be defined through the options object passed into useWebSocket.');
6173
+ return false;
6174
+ }
6175
+ else {
6176
+ obj[key] = val;
6177
+ return true;
6178
+ }
6179
+ },
6180
+ });
6181
+ };
6182
+ exports.websocketWrapper = websocketWrapper;
6183
+ exports.default = exports.websocketWrapper;
6184
+
6185
+ } (proxy));
6186
+
6187
+ var __assign$2 = (commonjsGlobal && commonjsGlobal.__assign) || function () {
6188
+ __assign$2 = Object.assign || function(t) {
6189
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6190
+ s = arguments[i];
6191
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6192
+ t[p] = s[p];
6193
+ }
6194
+ return t;
6195
+ };
6196
+ return __assign$2.apply(this, arguments);
6197
+ };
6198
+ var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
6199
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6200
+ return new (P || (P = Promise))(function (resolve, reject) {
6201
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6202
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6203
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
6204
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
6205
+ });
6206
+ };
6207
+ var __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {
6208
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
6209
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
6210
+ function verb(n) { return function (v) { return step([n, v]); }; }
6211
+ function step(op) {
6212
+ if (f) throw new TypeError("Generator is already executing.");
6213
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
6214
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
6215
+ if (y = 0, t) op = [op[0] & 2, t.value];
6216
+ switch (op[0]) {
6217
+ case 0: case 1: t = op; break;
6218
+ case 4: _.label++; return { value: op[1], done: false };
6219
+ case 5: _.label++; y = op[1]; op = [0]; continue;
6220
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
6221
+ default:
6222
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
6223
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
6224
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
6225
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
6226
+ if (t[2]) _.ops.pop();
6227
+ _.trys.pop(); continue;
6228
+ }
6229
+ op = body.call(thisArg, _);
6230
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
6231
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
6232
+ }
6233
+ };
6234
+ var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
6235
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6236
+ };
6237
+ Object.defineProperty(useWebsocket, "__esModule", { value: true });
6238
+ useWebsocket.useWebSocket = void 0;
6239
+ var react_1$2 = require$$0;
6240
+ var react_dom_1 = require$$1;
6241
+ var constants_1$2 = constants;
6242
+ var create_or_join_1 = createOrJoin;
6243
+ var get_url_1 = getUrl;
6244
+ var proxy_1 = __importDefault(proxy);
6245
+ var util_1 = util;
6246
+ var useWebSocket$1 = function (url, options, connect) {
6247
+ if (options === void 0) { options = constants_1$2.DEFAULT_OPTIONS; }
6248
+ if (connect === void 0) { connect = true; }
6249
+ var _a = (0, react_1$2.useState)(null), lastMessage = _a[0], setLastMessage = _a[1];
6250
+ var _b = (0, react_1$2.useState)({}), readyState = _b[0], setReadyState = _b[1];
6251
+ var lastJsonMessage = (0, react_1$2.useMemo)(function () {
6252
+ if (!options.disableJson && lastMessage) {
6253
+ try {
6254
+ return JSON.parse(lastMessage.data);
6255
+ }
6256
+ catch (e) {
6257
+ return constants_1$2.UNPARSABLE_JSON_OBJECT;
6258
+ }
6259
+ }
6260
+ return null;
6261
+ }, [lastMessage, options.disableJson]);
6262
+ var convertedUrl = (0, react_1$2.useRef)(null);
6263
+ var webSocketRef = (0, react_1$2.useRef)(null);
6264
+ var startRef = (0, react_1$2.useRef)(function () { return void 0; });
6265
+ var reconnectCount = (0, react_1$2.useRef)(0);
6266
+ var lastMessageTime = (0, react_1$2.useRef)(Date.now());
6267
+ var messageQueue = (0, react_1$2.useRef)([]);
6268
+ var webSocketProxy = (0, react_1$2.useRef)(null);
6269
+ var optionsCache = (0, react_1$2.useRef)(options);
6270
+ optionsCache.current = options;
6271
+ var readyStateFromUrl = convertedUrl.current && readyState[convertedUrl.current] !== undefined ?
6272
+ readyState[convertedUrl.current] :
6273
+ url !== null && connect === true ?
6274
+ constants_1$2.ReadyState.CONNECTING :
6275
+ constants_1$2.ReadyState.UNINSTANTIATED;
6276
+ var stringifiedQueryParams = options.queryParams ? JSON.stringify(options.queryParams) : null;
6277
+ var sendMessage = (0, react_1$2.useCallback)(function (message, keep) {
6278
+ var _a;
6279
+ if (keep === void 0) { keep = true; }
6280
+ if (constants_1$2.isEventSourceSupported && webSocketRef.current instanceof EventSource) {
6281
+ console.warn('Unable to send a message from an eventSource');
6282
+ return;
6283
+ }
6284
+ if (((_a = webSocketRef.current) === null || _a === void 0 ? void 0 : _a.readyState) === constants_1$2.ReadyState.OPEN) {
6285
+ (0, util_1.assertIsWebSocket)(webSocketRef.current, optionsCache.current.skipAssert);
6286
+ webSocketRef.current.send(message);
6287
+ }
6288
+ else if (keep) {
6289
+ messageQueue.current.push(message);
6290
+ }
6291
+ }, []);
6292
+ var sendJsonMessage = (0, react_1$2.useCallback)(function (message, keep) {
6293
+ if (keep === void 0) { keep = true; }
6294
+ sendMessage(JSON.stringify(message), keep);
6295
+ }, [sendMessage]);
6296
+ var getWebSocket = (0, react_1$2.useCallback)(function () {
6297
+ if (optionsCache.current.share !== true || (constants_1$2.isEventSourceSupported && webSocketRef.current instanceof EventSource)) {
6298
+ return webSocketRef.current;
6299
+ }
6300
+ if (webSocketProxy.current === null && webSocketRef.current) {
6301
+ (0, util_1.assertIsWebSocket)(webSocketRef.current, optionsCache.current.skipAssert);
6302
+ webSocketProxy.current = (0, proxy_1.default)(webSocketRef.current, startRef);
6303
+ }
6304
+ return webSocketProxy.current;
6305
+ }, []);
6306
+ (0, react_1$2.useEffect)(function () {
6307
+ if (url !== null && connect === true) {
6308
+ var removeListeners_1;
6309
+ var expectClose_1 = false;
6310
+ var createOrJoin_1 = true;
6311
+ var start_1 = function () { return __awaiter(void 0, void 0, void 0, function () {
6312
+ var _a, protectedSetLastMessage, protectedSetReadyState;
6313
+ return __generator(this, function (_b) {
6314
+ switch (_b.label) {
6315
+ case 0:
6316
+ _a = convertedUrl;
6317
+ return [4 /*yield*/, (0, get_url_1.getUrl)(url, optionsCache)];
6318
+ case 1:
6319
+ _a.current = _b.sent();
6320
+ if (convertedUrl.current === null) {
6321
+ console.error('Failed to get a valid URL. WebSocket connection aborted.');
6322
+ convertedUrl.current = 'ABORTED';
6323
+ (0, react_dom_1.flushSync)(function () { return setReadyState(function (prev) { return (__assign$2(__assign$2({}, prev), { ABORTED: constants_1$2.ReadyState.CLOSED })); }); });
6324
+ return [2 /*return*/];
6325
+ }
6326
+ protectedSetLastMessage = function (message) {
6327
+ if (!expectClose_1) {
6328
+ (0, react_dom_1.flushSync)(function () { return setLastMessage(message); });
6329
+ }
6330
+ };
6331
+ protectedSetReadyState = function (state) {
6332
+ if (!expectClose_1) {
6333
+ (0, react_dom_1.flushSync)(function () { return setReadyState(function (prev) {
6334
+ var _a;
6335
+ return (__assign$2(__assign$2({}, prev), (convertedUrl.current && (_a = {}, _a[convertedUrl.current] = state, _a))));
6336
+ }); });
6337
+ }
6338
+ };
6339
+ if (createOrJoin_1) {
6340
+ removeListeners_1 = (0, create_or_join_1.createOrJoinSocket)(webSocketRef, convertedUrl.current, protectedSetReadyState, optionsCache, protectedSetLastMessage, startRef, reconnectCount, lastMessageTime, sendMessage);
6341
+ }
6342
+ return [2 /*return*/];
6343
+ }
6344
+ });
6345
+ }); };
6346
+ startRef.current = function () {
6347
+ if (!expectClose_1) {
6348
+ if (webSocketProxy.current)
6349
+ webSocketProxy.current = null;
6350
+ removeListeners_1 === null || removeListeners_1 === void 0 ? void 0 : removeListeners_1();
6351
+ start_1();
6352
+ }
6353
+ };
6354
+ start_1();
6355
+ return function () {
6356
+ expectClose_1 = true;
6357
+ createOrJoin_1 = false;
6358
+ if (webSocketProxy.current)
6359
+ webSocketProxy.current = null;
6360
+ removeListeners_1 === null || removeListeners_1 === void 0 ? void 0 : removeListeners_1();
6361
+ setLastMessage(null);
6362
+ };
6363
+ }
6364
+ else if (url === null || connect === false) {
6365
+ reconnectCount.current = 0; // reset reconnection attempts
6366
+ setReadyState(function (prev) {
6367
+ var _a;
6368
+ return (__assign$2(__assign$2({}, prev), (convertedUrl.current && (_a = {}, _a[convertedUrl.current] = constants_1$2.ReadyState.CLOSED, _a))));
6369
+ });
6370
+ }
6371
+ }, [url, connect, stringifiedQueryParams, sendMessage]);
6372
+ (0, react_1$2.useEffect)(function () {
6373
+ if (readyStateFromUrl === constants_1$2.ReadyState.OPEN) {
6374
+ messageQueue.current.splice(0).forEach(function (message) {
6375
+ sendMessage(message);
6376
+ });
6377
+ }
6378
+ }, [readyStateFromUrl]);
6379
+ return {
6380
+ sendMessage: sendMessage,
6381
+ sendJsonMessage: sendJsonMessage,
6382
+ lastMessage: lastMessage,
6383
+ lastJsonMessage: lastJsonMessage,
6384
+ readyState: readyStateFromUrl,
6385
+ getWebSocket: getWebSocket,
6386
+ };
6387
+ };
6388
+ useWebsocket.useWebSocket = useWebSocket$1;
6389
+
6390
+ var useSocketIo = {};
6391
+
6392
+ var __assign$1 = (commonjsGlobal && commonjsGlobal.__assign) || function () {
6393
+ __assign$1 = Object.assign || function(t) {
6394
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6395
+ s = arguments[i];
6396
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6397
+ t[p] = s[p];
6398
+ }
6399
+ return t;
6400
+ };
6401
+ return __assign$1.apply(this, arguments);
6402
+ };
6403
+ Object.defineProperty(useSocketIo, "__esModule", { value: true });
6404
+ useSocketIo.useSocketIO = void 0;
6405
+ var react_1$1 = require$$0;
6406
+ var use_websocket_1$1 = useWebsocket;
6407
+ var constants_1$1 = constants;
6408
+ var emptyEvent = {
6409
+ type: 'empty',
6410
+ payload: null,
6411
+ };
6412
+ var getSocketData = function (event) {
6413
+ if (!event || !event.data) {
6414
+ return emptyEvent;
6415
+ }
6416
+ var match = event.data.match(/\[.*]/);
6417
+ if (!match) {
6418
+ return emptyEvent;
6419
+ }
6420
+ var data = JSON.parse(match);
6421
+ if (!Array.isArray(data) || !data[1]) {
6422
+ return emptyEvent;
6423
+ }
6424
+ return {
6425
+ type: data[0],
6426
+ payload: data[1],
6427
+ };
6428
+ };
6429
+ var useSocketIO = function (url, options, connect) {
6430
+ if (options === void 0) { options = constants_1$1.DEFAULT_OPTIONS; }
6431
+ if (connect === void 0) { connect = true; }
6432
+ var optionsWithSocketIO = (0, react_1$1.useMemo)(function () { return (__assign$1(__assign$1({}, options), { fromSocketIO: true })); }, []);
6433
+ var _a = (0, use_websocket_1$1.useWebSocket)(url, optionsWithSocketIO, connect), sendMessage = _a.sendMessage, sendJsonMessage = _a.sendJsonMessage, lastMessage = _a.lastMessage, readyState = _a.readyState, getWebSocket = _a.getWebSocket;
6434
+ var socketIOLastMessage = (0, react_1$1.useMemo)(function () {
6435
+ return getSocketData(lastMessage);
6436
+ }, [lastMessage]);
6437
+ return {
6438
+ sendMessage: sendMessage,
6439
+ sendJsonMessage: sendJsonMessage,
6440
+ lastMessage: socketIOLastMessage,
6441
+ lastJsonMessage: socketIOLastMessage,
6442
+ readyState: readyState,
6443
+ getWebSocket: getWebSocket,
6444
+ };
6445
+ };
6446
+ useSocketIo.useSocketIO = useSocketIO;
6447
+
6448
+ var useEventSource$1 = {};
6449
+
6450
+ var __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () {
6451
+ __assign = Object.assign || function(t) {
6452
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6453
+ s = arguments[i];
6454
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6455
+ t[p] = s[p];
6456
+ }
6457
+ return t;
6458
+ };
6459
+ return __assign.apply(this, arguments);
6460
+ };
6461
+ var __rest = (commonjsGlobal && commonjsGlobal.__rest) || function (s, e) {
6462
+ var t = {};
6463
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
6464
+ t[p] = s[p];
6465
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6466
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6467
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
6468
+ t[p[i]] = s[p[i]];
6469
+ }
6470
+ return t;
6471
+ };
6472
+ Object.defineProperty(useEventSource$1, "__esModule", { value: true });
6473
+ useEventSource$1.useEventSource = void 0;
6474
+ var react_1 = require$$0;
6475
+ var use_websocket_1 = useWebsocket;
6476
+ var constants_1 = constants;
6477
+ var useEventSource = function (url, _a, connect) {
6478
+ if (_a === void 0) { _a = constants_1.DEFAULT_EVENT_SOURCE_OPTIONS; }
6479
+ var withCredentials = _a.withCredentials, events = _a.events, options = __rest(_a, ["withCredentials", "events"]);
6480
+ if (connect === void 0) { connect = true; }
6481
+ var optionsWithEventSource = __assign(__assign({}, options), { eventSourceOptions: {
6482
+ withCredentials: withCredentials,
6483
+ } });
6484
+ var eventsRef = (0, react_1.useRef)(constants_1.EMPTY_EVENT_HANDLERS);
6485
+ if (events) {
6486
+ eventsRef.current = events;
6487
+ }
6488
+ var _b = (0, use_websocket_1.useWebSocket)(url, optionsWithEventSource, connect), lastMessage = _b.lastMessage, readyState = _b.readyState, getWebSocket = _b.getWebSocket;
6489
+ (0, react_1.useEffect)(function () {
6490
+ if (lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.type) {
6491
+ Object.entries(eventsRef.current).forEach(function (_a) {
6492
+ var type = _a[0], handler = _a[1];
6493
+ if (type === lastMessage.type) {
6494
+ handler(lastMessage);
6495
+ }
6496
+ });
6497
+ }
6498
+ }, [lastMessage]);
6499
+ return {
6500
+ lastEvent: lastMessage,
6501
+ readyState: readyState,
6502
+ getEventSource: getWebSocket,
6503
+ };
6504
+ };
6505
+ useEventSource$1.useEventSource = useEventSource;
6506
+
6507
+ (function (exports) {
6508
+ Object.defineProperty(exports, "__esModule", { value: true });
6509
+ exports.resetGlobalState = exports.useEventSource = exports.ReadyState = exports.useSocketIO = exports.default = void 0;
6510
+ var use_websocket_1 = useWebsocket;
6511
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return use_websocket_1.useWebSocket; } });
6512
+ var use_socket_io_1 = useSocketIo;
6513
+ Object.defineProperty(exports, "useSocketIO", { enumerable: true, get: function () { return use_socket_io_1.useSocketIO; } });
6514
+ var constants_1 = constants;
6515
+ Object.defineProperty(exports, "ReadyState", { enumerable: true, get: function () { return constants_1.ReadyState; } });
6516
+ var use_event_source_1 = useEventSource$1;
6517
+ Object.defineProperty(exports, "useEventSource", { enumerable: true, get: function () { return use_event_source_1.useEventSource; } });
6518
+ var util_1 = util;
6519
+ Object.defineProperty(exports, "resetGlobalState", { enumerable: true, get: function () { return util_1.resetGlobalState; } });
6520
+
6521
+ } (dist));
6522
+
6523
+ var useWebSocket = /*@__PURE__*/getDefaultExportFromCjs(dist);
6524
+
5472
6525
  const useUserData = create((set) => ({
5473
6526
  tradeHistories: null,
5474
6527
  rawOpenPositions: null,
@@ -5536,7 +6589,7 @@ const useHyperliquidWebSocket = ({ wsUrl, address }) => {
5536
6589
  }
5537
6590
  }
5538
6591
  });
5539
- const isConnected = readyState === ReadyState.OPEN;
6592
+ const isConnected = readyState === dist.ReadyState.OPEN;
5540
6593
  // Handle subscription management
5541
6594
  useEffect(() => {
5542
6595
  if (isConnected && address && address !== lastSubscribedAddress) {
@@ -5687,7 +6740,7 @@ const useHyperliquidNativeWebSocket = ({ address, tokens = [], candleInterval =
5687
6740
  }
5688
6741
  }
5689
6742
  });
5690
- const isConnected = readyState === ReadyState.OPEN;
6743
+ const isConnected = readyState === dist.ReadyState.OPEN;
5691
6744
  // Setup ping mechanism
5692
6745
  useEffect(() => {
5693
6746
  if (isConnected) {
@@ -6365,7 +7418,7 @@ const DEFAULT_STATE = {
6365
7418
  conflicts: [],
6366
7419
  candleInterval: "1h",
6367
7420
  };
6368
- const useUserSelection = create((set, get) => ({
7421
+ const useUserSelection$1 = create((set, get) => ({
6369
7422
  ...DEFAULT_STATE,
6370
7423
  setLongTokens: (tokens) => set((state) => ({ ...state, longTokens: tokens })),
6371
7424
  setShortTokens: (tokens) => set((state) => ({ ...state, shortTokens: tokens })),
@@ -6479,6 +7532,11 @@ const useUserSelection = create((set, get) => ({
6479
7532
  resetToDefaults: () => set((prev) => ({ ...prev, ...DEFAULT_STATE })),
6480
7533
  }));
6481
7534
 
7535
+ // Re-expose as a React hook without Zustand's selector signature
7536
+ const useUserSelection = () => {
7537
+ return useUserSelection$1();
7538
+ };
7539
+
6482
7540
  /**
6483
7541
  * Hook to access webData and native WebSocket state
6484
7542
  */
@@ -6751,7 +7809,7 @@ const useTokenSelectionMetadata = () => {
6751
7809
  const webData2 = useHyperliquidData((state) => state.webData2);
6752
7810
  const allMids = useHyperliquidData((state) => state.allMids);
6753
7811
  const activeAssetData = useHyperliquidData((state) => state.activeAssetData);
6754
- const { longTokens, shortTokens } = useUserSelection();
7812
+ const { longTokens, shortTokens } = useUserSelection$1();
6755
7813
  const { isLoading, isPriceDataReady, longTokensMetadata, shortTokensMetadata, weightedRatio, weightedRatio24h, sumNetFunding, maxLeverage, minMargin, leverageMatched, recompute, } = useTokenSelectionMetadataStore();
6756
7814
  // Recompute derived metadata when inputs change
6757
7815
  useEffect(() => {
@@ -6887,9 +7945,9 @@ const useHistoricalPriceData = () => {
6887
7945
  throw new Error('useHistoricalPriceData must be used within a PearHyperliquidProvider');
6888
7946
  }
6889
7947
  const { client } = context;
6890
- const longTokens = useUserSelection((state) => state.longTokens);
6891
- const shortTokens = useUserSelection((state) => state.shortTokens);
6892
- const candleInterval = useUserSelection((state) => state.candleInterval);
7948
+ const longTokens = useUserSelection$1((state) => state.longTokens);
7949
+ const shortTokens = useUserSelection$1((state) => state.shortTokens);
7950
+ const candleInterval = useUserSelection$1((state) => state.candleInterval);
6893
7951
  // Get real-time candle data from WebSocket
6894
7952
  const candleData = useHyperliquidData((state) => state.candleData);
6895
7953
  // Historical price data store
@@ -7214,8 +8272,8 @@ const computeBasketCandles = (longTokens, shortTokens, tokenCandles) => {
7214
8272
  * - Computes and returns weighted basket candles via `computeBasketCandles`.
7215
8273
  */
7216
8274
  const useBasketCandles = () => {
7217
- const longTokens = useUserSelection((state) => state.longTokens);
7218
- const shortTokens = useUserSelection((state) => state.shortTokens);
8275
+ const longTokens = useUserSelection$1((state) => state.longTokens);
8276
+ const shortTokens = useUserSelection$1((state) => state.shortTokens);
7219
8277
  const { fetchHistoricalPriceData, isLoading: tokenLoading } = useHistoricalPriceData();
7220
8278
  const fetchBasketCandles = useCallback(async (startTime, endTime) => {
7221
8279
  const tokenCandles = await fetchHistoricalPriceData(startTime, endTime);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pear-protocol/hyperliquid-sdk",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "description": "React SDK for Pear Protocol Hyperliquid API integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",