Overview

The types package contains shared TypeScript definitions used across all apps and packages. It ensures type consistency and provides a single source of truth for data structures.

Installation

// Already available in monorepo packages
import type { Swap, Position, TokenMetadata } from '@posit/types';

Core Types

Swap

interface Swap {
  signature: string;
  timestamp: number;
  slot: number;
  protocol: Protocol;
  inputMint: string;
  inputAmount: bigint;
  inputSymbol?: string;
  outputMint: string;
  outputAmount: bigint;
  outputSymbol?: string;
  priceUsd?: number;
  fee?: bigint;
  feeMint?: string;
  success: boolean;
}

Position

interface Position {
  mint: string;
  symbol?: string;
  balance: bigint;
  decimals: number;
  averageCost: number;
  unrealizedPnl: number;
  realizedPnl: number;
  lots: Lot[];
}

Lot (for cost basis)

interface Lot {
  id: string;
  amount: bigint;
  costBasis: number;
  acquiredAt: number;
  acquiredSignature: string;
}

TokenMetadata

interface TokenMetadata {
  mint: string;
  symbol: string;
  name: string;
  decimals: number;
  logoUri?: string;
  coingeckoId?: string;
}

Enums

Protocol

enum Protocol {
  Jupiter = 'jupiter',
  Raydium = 'raydium',
  RaydiumCLMM = 'raydium_clmm',
  Orca = 'orca',
  OrcaWhirlpool = 'orca_whirlpool',
  Meteora = 'meteora',
  PumpFun = 'pumpfun',
  Unknown = 'unknown',
}

CostBasisMethod

enum CostBasisMethod {
  FIFO = 'fifo',     // First In, First Out
  LIFO = 'lifo',     // Last In, First Out
  HIFO = 'hifo',     // Highest In, First Out
  SpecificId = 'specific_id',
}

Adding New Types

  1. Add the type in the appropriate file under packages/types/src/
  2. Export from packages/types/src/index.ts
  3. Run pnpm typecheck to verify
Convention: Use interface for object shapes, type for unions/aliases, enum for fixed value sets.