@bze/bze-ui-kit 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1419,6 +1419,114 @@ var isPoolSupportedByValidator = (baseDenom, quoteDenom) => {
1419
1419
  return supportedDenoms.includes(baseDenom) || supportedDenoms.includes(quoteDenom);
1420
1420
  };
1421
1421
 
1422
+ // src/utils/ws_rpc_client.ts
1423
+ var socket = null;
1424
+ var activeUrl = "";
1425
+ var socketConnected = false;
1426
+ var connectingPromise = null;
1427
+ var msgId = 0;
1428
+ var reconnectAttempts = 0;
1429
+ var reconnectTimeout = null;
1430
+ var MAX_RECONNECT_ATTEMPTS = 10;
1431
+ var activeSubscriptions = /* @__PURE__ */ new Map();
1432
+ var handleMessage = (event) => {
1433
+ var _a2;
1434
+ try {
1435
+ const msg = JSON.parse(event.data);
1436
+ const id = String((_a2 = msg == null ? void 0 : msg.id) != null ? _a2 : "");
1437
+ if (id && activeSubscriptions.has(id) && msg.result && Object.keys(msg.result).length > 0) {
1438
+ activeSubscriptions.get(id).handler(msg.result);
1439
+ }
1440
+ } catch (e) {
1441
+ }
1442
+ };
1443
+ var resubscribeAll = () => {
1444
+ for (const [id, sub] of activeSubscriptions) {
1445
+ socket.send(JSON.stringify({
1446
+ jsonrpc: "2.0",
1447
+ method: "subscribe",
1448
+ id,
1449
+ params: { query: sub.query }
1450
+ }));
1451
+ }
1452
+ };
1453
+ var scheduleReconnect = () => {
1454
+ if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {
1455
+ console.error("[WS] Max reconnect attempts reached");
1456
+ return;
1457
+ }
1458
+ reconnectAttempts++;
1459
+ const delay = Math.min(1e3 * Math.pow(2, reconnectAttempts - 1), 3e4);
1460
+ reconnectTimeout = setTimeout(async () => {
1461
+ try {
1462
+ await openSocket(activeUrl);
1463
+ resubscribeAll();
1464
+ reconnectAttempts = 0;
1465
+ } catch (e) {
1466
+ scheduleReconnect();
1467
+ }
1468
+ }, delay);
1469
+ };
1470
+ var openSocket = (url) => {
1471
+ return new Promise((resolve, reject) => {
1472
+ const ws = new WebSocket(url);
1473
+ ws.onopen = () => {
1474
+ socket = ws;
1475
+ socketConnected = true;
1476
+ resolve();
1477
+ };
1478
+ ws.onmessage = handleMessage;
1479
+ ws.onclose = () => {
1480
+ socketConnected = false;
1481
+ scheduleReconnect();
1482
+ };
1483
+ ws.onerror = (err) => {
1484
+ socketConnected = false;
1485
+ reject(err);
1486
+ };
1487
+ });
1488
+ };
1489
+ var getOrCreateSocket = async (rpcEndpoint) => {
1490
+ const url = rpcEndpoint.replace(/\/?$/, "") + "/websocket";
1491
+ if (socket && socketConnected && activeUrl === url) return;
1492
+ if (connectingPromise && activeUrl === url) {
1493
+ return connectingPromise;
1494
+ }
1495
+ if (socket) {
1496
+ socket.onclose = null;
1497
+ socket.close(1e3, "Endpoint changed");
1498
+ socket = null;
1499
+ socketConnected = false;
1500
+ if (reconnectTimeout) {
1501
+ clearTimeout(reconnectTimeout);
1502
+ reconnectTimeout = null;
1503
+ }
1504
+ reconnectAttempts = 0;
1505
+ }
1506
+ activeUrl = url;
1507
+ connectingPromise = openSocket(url).finally(() => {
1508
+ connectingPromise = null;
1509
+ });
1510
+ return connectingPromise;
1511
+ };
1512
+ var subscribeToBlockchainEvents = async (rpcEndpoint, query, handler) => {
1513
+ await getOrCreateSocket(rpcEndpoint);
1514
+ const id = String(++msgId);
1515
+ activeSubscriptions.set(id, { query, handler });
1516
+ socket.send(JSON.stringify({ jsonrpc: "2.0", method: "subscribe", id, params: { query } }));
1517
+ return () => {
1518
+ activeSubscriptions.delete(id);
1519
+ if ((socket == null ? void 0 : socket.readyState) === WebSocket.OPEN) {
1520
+ socket.send(JSON.stringify({
1521
+ jsonrpc: "2.0",
1522
+ method: "unsubscribe",
1523
+ id: String(++msgId),
1524
+ params: { query }
1525
+ }));
1526
+ }
1527
+ };
1528
+ };
1529
+
1422
1530
  // src/constants/market.ts
1423
1531
  var EXCLUDED_MARKETS = {
1424
1532
  "factory/bze1f0qgels0eu96ev6a67znu70q7rquy9eragn8nw/ucorey/factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl": true,
@@ -5452,6 +5560,7 @@ export {
5452
5560
  shortNumberFormat,
5453
5561
  sleep,
5454
5562
  stringTruncateFromCenter,
5563
+ subscribeToBlockchainEvents,
5455
5564
  toBigNumber,
5456
5565
  toPercentage,
5457
5566
  truncateAddress,