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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@liberfi.io/types

v0.1.92

Published

Liberfi React SDK types

Downloads

13,242

Readme

@liberfi.io/types

Pure TypeScript type-definition package with zero runtime dependencies. Serves as the single source of truth for domain types and API contract interfaces across the entire Liberfi React SDK monorepo. Consumed by @liberfi.io/client, @liberfi.io/react, and all UI packages.

Design Philosophy

  • Zero runtime dependencies — contains only TypeScript types and enums; adds no weight to the consumer's bundle beyond what is used.
  • Domain vs API contract layering — domain models (Token, Activity, Chain, Portfolio, etc.) are cleanly separated from API contract interfaces (IClient, ISubscribeClient), with one-directional imports from domain → API.
  • Open literal types — patterns like TokenProtocol = SolanaTokenProtocol | (string & {}) provide autocompletion for known values while remaining extensible for future additions.
  • Interface-based abstractionIClient and ISubscribeClient define the API surface abstractly, enabling different implementations (production client, mocks, stubs) without coupling consumers to a concrete class.

Installation

pnpm add @liberfi.io/types

No peer dependencies required.

API Reference

Enums

| Enum | Description | | --------------------- | ----------------------------------------------------------------------------------------------------------------------- | | Chain | ~190 blockchain chain IDs (e.g. Chain.ETHEREUM, Chain.SOLANA, Chain.BASE). Values are numeric string identifiers. | | ChainNamespace | Chain family namespace — EVM or SOL. | | SolanaTokenProtocol | Known Solana launch protocols (e.g. PUMP, RAYDIUM, METEORA, ORCA). | | SwapMode | Swap direction — EXACT_IN or EXACT_OUT. |

Domain Interfaces — Token

| Type | Description | | ------------------------ | ------------------------------------------------------------------------------------------------------------------ | | Token | Core token model with metadata, stats, market data, liquidity, security, and social links. | | TokenCreator | Token creator info: address, share percentage, verification status. | | TokenLaunchedFrom | Launch platform details: program address and protocol family. | | TokenMigratedTo | Migration target: program address, protocol family, pool address, timestamp. | | TokenSocialMedias | Social media URLs (twitter, telegram, website, discord, github, etc.). | | TokenStats | Per-resolution (1m24h) trading statistics container. | | TokenStatsByResolution | Single-resolution stats: buys, sells, traders, volumes, OHLC prices, price change. | | TokenMarketData | Market data: supply, market cap, price, TVL, holder breakdowns by tag (bluechip, KOL, sniper, pro, insider, etc.). | | TokenLiquidity | Liquidity pool info: pool/pair address, protocol, TVL. | | TokenSecurity | Security flags: transfer fee, freezable, closable, transferable. | | TokenCandle | OHLCV candlestick data point with resolution and timestamp. | | TokenHolder | Single holder: address, amount, USD value, holding ratio. |

Domain Interfaces — Activity

| Type | Description | | --------------- | ---------------------------------------------------------------------------------------------------------------------- | -------- | | Activity | On-chain activity record (trade, liquidity, red packet). Contains from/to tokens, dex info, status, and timestamp. | | ActivityToken | Token within an activity: address, symbol, amount, USD values. | | ActivityDex | DEX where the activity occurred: name, image, protocol family, program address. | | Trade | Narrowed subset of Activity with type: "buy" | "sell". |

Domain Interfaces — Wallet & Portfolio

| Type | Description | | --------------------- | -------------------------------------------------------------------------------------------------- | | Portfolio | Wallet's token holding: price, amount, decimals (in USD and native). | | PortfolioPnl | Per-token PnL details: buy/sell volumes, avg prices, realized/unrealized profit. | | WalletPnl | Wallet-level PnL summary: win rate, total trades, profit breakdown. | | WalletPortfolioPnls | Paginated portfolio PnL list with wallet-level summary (extends WalletPnl + CursorPagination). | | WalletPortfolios | Paginated wallet portfolios with total balance (extends CursorPagination). |

API Contract — Pagination

| Type | Description | | ------------------- | ---------------------------------------------------------------------------------------- | | CursorPagination | Shared cursor-based pagination fields: startCursor, endCursor, hasPrev, hasNext. | | CursorList<T> | Generic paginated result: data: T[] + CursorPagination. | | CursorListOptions | Query options: cursor, limit, direction. |

API Contract — Query Options

| Type | Description | | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | | GetTokenCandlesOptions | Candle query options: after, before (Date), limit. | | GetTokenListOptions | Token list options: sortBy, sortDirection, filters, keywords, excludeKeywords. | | SearchTokensOptions | Search options (extends CursorListOptions): chains, keyword, filters, sortBy, sortDirection. | | SearchTokenCursorList | Search result (extends CursorList<Token>): adds total count and extra metadata. | | TokenFilterOption | Filter descriptor: field (TokenFieldOption), operator (eq/gt/between/in/…), value. | | GetTradesOptions | Trade query options (extends CursorListOptions): before, after, beforeBlockHeight, afterBlockHeight, type, poolAddress. | | GetActivitiesOptions | Activity query options (extends CursorListOptions): same time/block filters plus type (ActivityType). |

API Contract — Swap & Transaction

| Type | Description | | --------------- | ----------------------------------------------------------------------------- | | SwapParams | Swap request: chain, addresses, mode, amount, slippage, fees, anti-MEV flag. | | SwapRoute | Swap response: serialized unsigned transaction + route plans. | | SwapRoutePlan | Single route plan step: protocol name, input/output tokens and amounts, fees. | | SendTxParams | Send transaction request: chain, signed serialized transaction, extras. | | SendTxResult | Send transaction response: txHash + extras. |

API Contract — Client Interfaces

IClient

REST API client interface. Key methods:

interface IClient {
  getToken(chain: Chain, address: string): Promise<Token>;
  getTokens(chain: Chain, addresses: string[]): Promise<Token[]>;
  getTokenCandles(chain, address, resolution, options?): Promise<TokenCandle[]>;
  getTokenSecurity(chain, address): Promise<TokenSecurity>;
  getTokenStats(chain, address): Promise<TokenStats>;
  getTokenHolders(chain, address, options?): Promise<CursorList<TokenHolder>>;
  getTokenMarketData(chain, address): Promise<TokenMarketData>;
  getNewTokens(chain, options?): Promise<Token[]>;
  getFinalStretchTokens(chain, options?): Promise<Token[]>;
  getMigratedTokens(chain, options?): Promise<Token[]>;
  getTrendingTokens(chain, resolution, options?): Promise<Token[]>;
  getStockTokens(chain, options?): Promise<Token[]>;
  searchTokens(options?): Promise<SearchTokenCursorList>;
  swapRoute(params: SwapParams): Promise<SwapRoute>;
  sendTx(params: SendTxParams): Promise<SendTxResult>;
  checkTxSuccess(chain, txHash, timeout?): Promise<boolean>;
  getWalletPortfolios(chain, address, options?): Promise<WalletPortfolios>;
  getWalletPnl(chain, address, resolution?): Promise<WalletPnl>;
  getWalletPortfolioPnls(
    chain,
    address,
    options?,
  ): Promise<WalletPortfolioPnls>;
  getWalletPortfoliosByTokens(
    chain,
    address,
    tokenAddresses,
  ): Promise<Portfolio[]>;
  getWalletPortfolioPnlsByTokens(
    chain,
    address,
    tokenAddresses,
  ): Promise<PortfolioPnl[]>;
  getWalletTrades(chain, address, options?): Promise<CursorList<Trade>>;
  getTokenTrades(chain, address, options?): Promise<CursorList<Trade>>;
  getWalletActivities(chain, address, options?): Promise<CursorList<Activity>>;
  getTokenActivities(chain, address, options?): Promise<CursorList<Activity>>;
  getPresignedUploadUrl(): Promise<string>;
}

ISubscribeClient

WebSocket subscription interface for real-time updates:

interface ISubscribeClient {
  subscribeToken(chain, address, callback): ISubscription;
  subscribeTokenCandles(chain, address, resolution, callback): ISubscription;
  subscribeWalletPnl(chain, address, callback): ISubscription;
  subscribeWalletPortfolios(chain, address, callback): ISubscription;
  subscribeWalletPortfolioPnls(chain, address, callback): ISubscription;
  subscribeWalletTrades(chain, address, callback): ISubscription;
  subscribeTokenTrades(chain, address, callback): ISubscription;
  subscribeWalletActivities(chain, address, callback): ISubscription;
  subscribeTokenActivities(chain, address, callback): ISubscription;
  subscribeNewTokens(chain, callback): ISubscription;
  subscribeTrendingTokens(chain, callback): ISubscription;
  subscribeMigratedTokens(chain, callback): ISubscription;
  subscribeFinalStretchTokens(chain, callback): ISubscription;
  subscribeStockTokens(chain, callback): ISubscription;
}

ISubscription

interface ISubscription {
  unsubscribe(): void;
}

Subscription Data Types

| Type | Description | | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | | TokenSubscribed | Incremental token update — chain + address required, all other Token fields optional (undefined = not included in this push). | | WalletPnlSubscribed | WalletPnl extended with optional resolution field. | | PortfolioSubscribed | Lightweight portfolio update: chain, wallet address, token address, price, amount. | | PortfolioPnlSubscribed | Partial PortfolioPnl keyed by walletAddress + tokenAddress. |

Type Aliases

| Type | Definition | Description | | -------------------- | --------------------------------------------------------------------- | -------------------------------------------------- | | TokenProtocol | SolanaTokenProtocol \| (string & {}) | Open union for token launch protocols. | | ActivityType | "buy" \| "sell" \| "liquidity_initialize" \| "liquidity_add" \| ... | All known on-chain activity types. | | TokenResolution | "1s" \| "15s" \| "30s" \| "1m" \| ... \| "24h" | Candlestick / stats time resolution. | | TrendingResolution | Extract<TokenResolution, "1m" \| "5m" \| "1h" \| "4h" \| "24h"> | Subset of resolutions supported by trending lists. | | TokenFieldOption | 50+ string literals + (string & {}) | Sortable / filterable token field identifiers. |

Constants

| Name | Type | Description | | ------------------------ | ----------------------- | ----------------------------------------------- | | SOLANA_TOKEN_PROTOCOLS | SolanaTokenProtocol[] | Array of all SolanaTokenProtocol enum values. | | version | string | Current package version. |

Namespace

| Name | Description | | ----- | ------------------------------------------------------------------------------------------------------------ | | API | Re-exports all types from ./api as a single namespace for backward-compatible access (e.g. API.IClient). |

Usage Examples

Import domain types

import { Chain, Token, Activity } from "@liberfi.io/types";

function formatToken(token: Token): string {
  return `${token.symbol} on chain ${token.chain}`;
}

Type-safe API client implementation

import {
  IClient,
  Chain,
  Token,
  CursorList,
  TokenHolder,
} from "@liberfi.io/types";

class MyClient implements IClient {
  async getToken(chain: Chain, address: string): Promise<Token> {
    const res = await fetch(`/api/tokens/${chain}/${address}`);
    return res.json();
  }
  // ... implement remaining methods
}

Filter tokens with TokenFilterOption

import type { TokenFilterOption, GetTokenListOptions } from "@liberfi.io/types";

const options: GetTokenListOptions = {
  sortBy: "volumes24h",
  sortDirection: "desc",
  filters: [
    { field: "marketCap", operator: "gte", value: "100000" },
    { field: "holders", operator: "gte", value: "50" },
  ],
};

Subscribe to real-time updates

import type {
  ISubscribeClient,
  Chain,
  TokenSubscribed,
} from "@liberfi.io/types";

function watchToken(client: ISubscribeClient, chain: Chain, address: string) {
  const sub = client.subscribeToken(
    chain,
    address,
    (updates: TokenSubscribed[]) => {
      for (const update of updates) {
        if (update.marketData?.priceInUsd) {
          console.log(`Price: $${update.marketData.priceInUsd}`);
        }
      }
    },
  );
  return () => sub.unsubscribe();
}

Future Improvements

  • Deduplicate version.ts global side effect across packages into a shared utility.
  • Extract HolderTagBreakdown sub-type from TokenMarketData to reduce repeated field triples.
  • Generate TokenFieldOption via template literal types instead of maintaining 50+ manual entries.
  • Complete TokenSecurity interface (currently has a TODO for additional security checks).
  • Consider auto-generating the Chain enum from a canonical chain registry.
  • Document or mitigate the version.ts multi-instance overwrite concern in SSR environments.