npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@polymarket/real-time-data-client

v1.4.0

Published

A TypeScript client to receive real time data messages

Readme

Real time data client

This client provides a wrapper to connect to the real-time-data-streaming WebSocket service.

How to use it

Here is a quick example about how to connect to the service and start receiving messages (you can find more in the folder examples/):

import { RealTimeDataClient } from "../src/client";
import { Message } from "../src/model";

const onMessage = (message: Message): void => {
    console.log(message.topic, message.type, message.payload);
};

const onConnect = (client: RealTimeDataClient): void => {
    // Subscribe to a topic
    client.subscribe({
        subscriptions: [
            {
                topic: "comments",
                type: "*", // "*"" can be used to connect to all the types of the topic
                filters: `{"parentEntityID":100,"parentEntityType":"Event"}`, // empty means no filter
            },
        ],
    });
};

new RealTimeDataClient({ onMessage, onConnect }).connect();

How to subscribe and unsubscribe from messages

Once the connection is stablished and you have a client: RealTimeDataClient object, you can subscribe and unsubscribe to many messages streamings using the same connection.

Subscribe

Subscribe to 'trades' messages from the topic 'activity' and to the all comments messages.

client.subscribe({
    subscriptions: [
        {
            topic: "activity",
            type: "trades",
        },
    ],
});

client.subscribe({
    subscriptions: [
        {
            topic: "comments",
            type: "*", // "*"" can be used to connect to all the types of the topic
        },
    ],
});

Unsubscribe

Unsubscribe from the new trades messages of the topic 'activity'. If 'activity' has more messages types and I used '*' to connect to all of them, this will only unsubscribe from the type 'trades'.

client.subscribe({
    subscriptions: [
        {
            topic: "activity",
            type: "trades",
        },
    ],
});

Disconnect

The client object provides a method to disconnect from the WebSocket server:

client.disconnect();

Messages hierarchy

| Topic | Type | Auth | Filters (if it is empty the messages won't be filtered) | Schema | Subscription Handler | | --------------- | ------------------ | -------- | --------------------------------------------------------------- | ----------------------------------- | ----------------------------------------------------------- | | activity | trades | - | {"event_slug":"string"}' OR '{"market_slug":"string"} | Trade | | | activity | orders_matched | - | {"event_slug":"string"}' OR '{"market_slug":"string"} | Trade | | | comments | comment_created | - | {"parentEntityID":number,"parentEntityType":"Event / Series"} | Comment | | | comments | comment_removed | - | {"parentEntityID":number,"parentEntityType":"Event / Series"} | Comment | | | comments | reaction_created | - | {"parentEntityID":number,"parentEntityType":"Event / Series"} | Reaction | | | comments | reaction_removed | - | {"parentEntityID":number,"parentEntityType":"Event / Series"} | Reaction | | | rfq | request_created | - | - | Request | | | rfq | request_edited | - | - | Request | | | rfq | request_canceled | - | - | Request | | | rfq | request_expired | - | - | Request | | | rfq | quote_created | - | - | Quote | | | rfq | quote_edited | - | - | Quote | | | rfq | quote_canceled | - | - | Quote | | | rfq | quote_expired | - | - | Quote | | | crypto_prices | update | - | {"symbol":string} | CryptoPrice | CryptoPriceHistorical | | clob_user | order | ClobAuth | - | Order | | | clob_user | trade | ClobAuth | - | Trade | | | clob_market | price_change | - | ["100","200",...] | PriceChanges | | | clob_market | agg_orderbook | - | ["100","200",...] | AggOrderbook | AggOrderbook | | clob_market | last_trade_price | - | ["100","200",...] | LastTradePrice | | | clob_market | tick_size_change | - | ["100","200",...] | TickSizeChange | | | clob_market | market_created | - | - | ClobMarket | | | clob_market | market_resolved | - | - | ClobMarket | |

Auth

ClobAuth

/**
 * API key credentials for CLOB authentication.
 */
export interface ClobApiKeyCreds {
    /** API key used for authentication */
    key: string;

    /** API secret associated with the key */
    secret: string;

    /** Passphrase required for authentication */
    passphrase: string;
}
client.subscribe({
    subscriptions: [
        {
            topic: "clob_user",
            type: "*",
            clob_auth: {
                key: "xxxxxx-xxxx-xxxxx-xxxx-xxxxxx",
                secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                passphrase: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            },
        },
    ],
});

Message types

Activity

Trade

| Name | Type | Description | | ----------------- | ------- | -------------------------------------------------- | | asset | string | ERC1155 token ID of conditional token being traded | | bio | string | Bio of the user of the trade | | conditionId | string | Id of market which is also the CTF condition ID | | eventSlug | string | Slug of the event | | icon | string | URL to the market icon image | | name | string | Name of the user of the trade | | outcome | string | Human readable outcome of the market | | outcomeIndex | integer | Index of the outcome | | price | float | Price of the trade | | profileImage | string | URL to the user profile image | | proxyWallet | string | Address of the user proxy wallet | | pseudonym | string | Pseudonym of the user | | side | string | Side of the trade (BUY/SELL) | | size | integer | Size of the trade | | slug | string | Slug of the market | | timestamp | integer | Timestamp of the trade | | title | string | Title of the event | | transactionHash | string | Hash of the transaction |

Comments

Comment

| Name | Type | Description | | ------------------ | ------ | ------------------------------------------- | | id | string | Unique identifier of comment | | body | string | Content of the comment | | parentEntityType | string | Type of the parent entity (Event or Series) | | parentEntityID | number | ID of the parent entity | | parentCommentID | string | ID of the parent comment | | userAddress | string | Address of the user | | replyAddress | string | Address of the reply user | | createdAt | string | Creation timestamp | | updatedAt | string | Last update timestamp |

Reaction

| Name | Type | Description | | -------------- | ------ | ------------------------------ | | id | string | Unique identifier of reaction | | commentID | number | ID of the comment | | reactionType | string | Type of the reaction | | icon | string | Icon representing the reaction | | userAddress | string | Address of the user | | createdAt | string | Creation timestamp |

RFQ

Request

| Name | Type | Description | | -------------- | ------ | --------------------------------------------------------------- | | requestId | string | Unique identifier for the request | | proxyAddress | string | User proxy address | | market | string | Id of market which is also the CTF condition ID | | token | string | ERC1155 token ID of conditional token being traded | | complement | string | Complement ERC1155 token ID of conditional token being traded | | state | string | Current state of the request | | side | string | Indicates buy or sell side | | sizeIn | number | Input size of the request | | sizeOut | number | Output size of the request | | price | number | Price from in/out sizes | | expiry | number | Expiry timestamp (UNIX format) |

Quote

| Name | Type | Description | | -------------- | ------ | --------------------------------------------------------------- | | quoteId | string | Unique identifier for the quote | | requestId | string | Associated request identifier | | proxyAddress | string | User proxy address | | token | string | ERC1155 token ID of conditional token being traded | | state | string | Current state of the quote | | side | string | Indicates buy or sell side | | sizeIn | number | Input size of the quote | | sizeOut | number | Output size of the quote | | sizeOut | number | Output size of the request | | condition | string | Id of market which is also the CTF condition ID | | complement | string | Complement ERC1155 token ID of conditional token being traded | | expiry | number | Expiry timestamp (UNIX format) |

CryptoPrice

| Name | Type | Description | | ----------- | ------ | ---------------------------------------- | | symbol | string | Symbol of the asset | | timestamp | number | Timestamp in milliseconds for the update | | value | number | Value at the time of update |

Filters

  • {"symbol":"btcusdt"}
  • {"symbol":"ethusdt"}
  • {"symbol":"xrpusdt"}
  • {"symbol":"solusdt"}

Initial data dump on connection

When the connection is stablished, if a filter is used, the server will dump an initial snapshoot of recent data

| Name | Type | Description | | ------ | ------ | ---------------------------------------------------------------- | | symbol | string | Symbol of the asset | | data | array | Array of price data objects, each containing timestamp and value |

CLOB User

Order

| Name | Type | Description | | --------------- | ------------------ | --------------------------------------------------------- | | asset_id | string | Order's ERC1155 token ID of conditional token | | created_at | string (timestamp) | Order's creation UNIX timestamp | | expiration | string (timestamp) | Order's expiration UNIX timestamp | | id | string | Unique order hash identifier | | maker_address | string | Maker’s address (funder) | | market | string | Condition ID or market identifier | | order_type | string | Type of order: GTC, GTD, FOK, FAK | | original_size | string | Original size of the order at placement | | outcome | string | Order outcome: YES / NO | | owner | string | UUID of the order owner | | price | string | Order price (e.g., in decimals like 0.5) | | side | string | Side of the trade: BUY or SELL | | size_matched | string | Amount of order that has been matched | | status | string | Status of the order (e.g., MATCHED) | | type | string | Type of update: PLACEMENT, CANCELLATION, FILL, etc. |

Trade

| Name | Type | Description | | ------------------ | ------------------ | ----------------------------------------------------------------- | | asset_id | string | ERC1155 token ID of the conditional token involved in the trade | | fee_rate_bps | string | Fee rate in basis points (bps) | | id | string | Unique identifier for the match record | | last_update | string (timestamp) | Last update timestamp (UNIX) | | maker_address | string | Maker’s address | | maker_orders | array | List of maker orders (see nested schema below) | | market | string | Condition ID or market identifier | | match_time | string (timestamp) | Match execution timestamp (UNIX) | | outcome | string | Outcome of the market: YES / NO | | owner | string | UUID of the taker (owner of the matched order) | | price | string | Matched price (in decimal format, e.g., 0.5) | | side | string | Taker side of the trade: BUY or SELL | | size | string | Total matched size | | status | string | Status of the match: e.g., MINED | | taker_order_id | string | ID of the taker's order | | transaction_hash | string | Transaction hash where the match was settled |

maker_orders

| Name | Type | Description | | ---------------- | ------ | ---------------------------------------------------------------- | | asset_id | string | ERC1155 token ID of the conditional token of the maker's order | | fee_rate_bps | string | Maker's fee rate in basis points | | maker_address | string | Maker’s address | | matched_amount | string | Amount matched from the maker's order | | order_id | string | ID of the maker's order | | outcome | string | Outcome targeted by the maker's order (YES / NO) | | owner | string | UUID of the maker | | price | string | Order price | | side | string | Side of the maker: BUY or SELL |

CLOB market

PriceChanges

| Name | Type | Description | | --------------- | ------------------ | --------------------------------------------------------- | | market | string | Condition ID | | price_changes | array | Price changes by book | | timestamp | string (timestamp) | Timestamp in milliseconds since epoch (UNIX time * 1000) |

PriceChange

| Name | Type | Description | | ---------- | ------ | --------------------------------------------------------------- | | asset_id | string | Asset identifier | | hash | string | Unique hash ID of the book snapshot | | price | string | Price quoted (e.g., 0.5) | | side | string | Side of the quote: BUY or SELL | | size | string | Size or volume available at the quoted price (e.g., 0, 100) | | best_ask | string | Best ask price | | best_bid | string | Best bid price |

AggOrderbook

| Name | Type | Description | | ---------------- | ------------------ | ----------------------------------------------------------------------- | | asks | array | List of ask aggregated orders (sell side), each with price and size | | asset_id | string | Asset Id identifier | | bids | array | List of aggregated bid orders (buy side), each with price and size | | hash | string | Unique hash ID for this orderbook snapshot | | market | string | Market or condition ID | | min_order_size | string | Minimum allowed order size | | neg_risk | boolean | NegRisk or not | | tick_size | string | Minimum tick size | | timestamp | string (timestamp) | Timestamp in milliseconds since epoch (UNIX time * 1000) |

asks/bids scheema

| Name | Type | Description | | ------- | ------ | ------------------ | | price | string | Price level | | size | string | Size at that price |

Initial data dump on connection

When the connection is stablished, if a filter is used, the server will dump an initial snapshoot of recent data

LastTradePrice

| Name | Type | Description | | -------------- | ------ | ---------------------------------- | | asset_id | string | Asset Id identifier | | fee_rate_bps | string | Fee rate in basis points (bps) | | market | string | Market or condition ID | | price | string | Trade price (e.g., 0.5) | | side | string | Side of the order: BUY or SELL | | size | string | Size of the trade |

TickSizeChange

| Name | Type | Description | | --------------- | ------ | ------------------------------------ | | market | string | Market or condition ID | | asset_id | string | Array of two ERC1155 asset ID | | old_tick_size | string | Previous tick size before the change | | new_tick_size | string | Updated tick size after the change |

ClobMarket

| Name | Type | Description | | ---------------- | --------- | ------------------------------------------------------------------ | | market | string | Market or condition ID | | asset_ids | [2]string | Array of two ERC1155 asset ID identifiers associated with market | | min_order_size | string | Minimum size allowed for an order | | tick_size | string | Minimum allowable price increment | | neg_risk | boolean | Indicates if the market is negative risk |