cyb/src/services/lcd/websocket.ts

import { Observable } from 'rxjs';
import { WEBSOCKET_URL } from 'src/constants/config';
import { NeuronAddress } from 'src/types/base';
import { LogFunc } from 'src/utils/logging/cyblog';

export const getIncomingTransfersQuery = (address: NeuronAddress) =>
  `tm.event='Tx' AND transfer.recipient='${address}'`;

// eslint-disable-next-line import/no-unused-modules
export function createNodeWebsocketObservable(address: NeuronAddress, query: string, log: LogFunc) {
  return new Observable((subscriber) => {
    const ws = new WebSocket(WEBSOCKET_URL);

    ws.onopen = () => {
      log(`node ws connected to ${WEBSOCKET_URL} with ${query}`);
      ws.send(
        JSON.stringify({
          jsonrpc: '2.0',
          method: 'subscribe',
          id: '0',
          params: { query },
        })
      );
    };

    ws.onmessage = (event) => {
      const message = JSON.parse(event.data);
      log(`node ws ${address} onmessage`, message);
      subscriber.next(message.result);
    };

    ws.onerror = () => {
      const msg = `node ws ${address} error`;
      log(msg);
      subscriber.error(msg);
    };

    ws.onclose = () => {
      log(`node ws ${address} closed`);
      subscriber.complete();
    };

    return () => {
      ws.close();
    };
  });
}

Synonyms

pussy-ts/src/services/blockchain/websocket.ts

Neighbours