@posit/types
Shared TypeScript types and interfaces
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
- Add the type in the appropriate file under
packages/types/src/ - Export from
packages/types/src/index.ts - Run
pnpm typecheckto verify
Convention: Use
interface for object shapes, type for unions/aliases, enum for fixed value sets.