spb/market-atlas
Public
TypeScript 96.7%
SQL 1.6%
CSS 0.8%
JavaScript 0.5%
1// Canonical vocabularies of Market Atlas. Every boundary (bus, DB, API, UI) uses these strings verbatim.23export const ASSET_CLASSES = [4 "EQUITY",5 "ETF",6 "ETN",7 "INDEX",8 "CRYPTO",9 "FOREX",10 "COMMODITY",11 "FUTURE",12 "OPTION",13 "BOND",14 "TREASURY",15 "INTEREST_RATE",16 "MUTUAL_FUND",17 "ADR",18 "GDR",19 "REIT",20 "WARRANT",21 "CFD",22 "OTHER",23] as const;24export type AssetClass = (typeof ASSET_CLASSES)[number];2526export const RIGHTS_STATUSES = [27 "PUBLIC_OPEN",28 "PUBLIC_ATTRIBUTED",29 "PUBLIC_RESTRICTED_REDISTRIBUTION",30 "OFFICIAL_OPEN_DATA",31 "LICENSED",32 "DELAYED",33 "INDICATIVE",34 "RESEARCH_ONLY",35 "INTERNAL_ONLY",36 "UNKNOWN",37 "DISABLED",38] as const;39export type RightsStatus = (typeof RIGHTS_STATUSES)[number];4041/** Rights statuses whose raw values may be redistributed publicly by Market Atlas. */42export const PUBLICLY_REDISTRIBUTABLE: ReadonlySet<RightsStatus> = new Set<RightsStatus>([43 "PUBLIC_OPEN",44 "PUBLIC_ATTRIBUTED",45 "OFFICIAL_OPEN_DATA",46 "LICENSED",47 "DELAYED",48 "INDICATIVE",49]);5051export const REALTIME_STATUSES = ["REALTIME", "DELAYED", "END_OF_DAY", "INDICATIVE", "STALE", "UNKNOWN"] as const;52export type RealtimeStatus = (typeof REALTIME_STATUSES)[number];5354export const SOURCE_TYPES = [55 "WEBSOCKET",56 "SSE",57 "XHR",58 "FETCH",59 "GRAPHQL",60 "HTML",61 "RSS",62 "CSV",63 "XML",64 "PDF",65 "OFFICIAL_API",66 "BULK_FILE",67] as const;68export type SourceType = (typeof SOURCE_TYPES)[number];6970export const FIELDS = [71 "LAST_PRICE",72 "OPEN",73 "HIGH",74 "LOW",75 "PREVIOUS_CLOSE",76 "CLOSE",77 "BID",78 "ASK",79 "BID_SIZE",80 "ASK_SIZE",81 "VOLUME",82 "VWAP",83 "MARKET_CAP",84 "CHANGE",85 "CHANGE_PERCENT",86 "OPEN_INTEREST",87 "YIELD",88 "RATE",89 "NAV",90 "52_WEEK_HIGH",91 "52_WEEK_LOW",92 "IMPLIED_VOLATILITY",93] as const;94export type Field = (typeof FIELDS)[number];9596/**97 * What an observation *is*. Values of different comparability classes are never compared to each98 * other (an ECB fixing is not a live mid, an exchange settlement is not a trade).99 */100export const OBSERVATION_TYPES = [101 "TRADE", // last trade on a venue102 "MID", // mid of a quoted market103 "QUOTE", // bid/ask style value104 "INDEX_VALUE", // computed index level105 "INDICATIVE", // indicative live value (non-tradable)106 "STABLECOIN_PROXY", // fiat rate implied from a stablecoin market (USDT/USDC ≈ USD)107 "DERIVED", // computed by Market Atlas (cross rates…)108 "OFFICIAL_FIX", // central-bank / official fixing109 "REFERENCE_RATE", // official reference or policy rate110 "SETTLEMENT", // exchange settlement price111 "EOD_CLOSE", // end-of-day close from a historical dataset112 "NAV",113] as const;114export type ObservationType = (typeof OBSERVATION_TYPES)[number];115116export type ComparabilityClass = "LIVE" | "FIX" | "EOD";117export const COMPARABILITY: Record<ObservationType, ComparabilityClass> = {118 TRADE: "LIVE",119 MID: "LIVE",120 QUOTE: "LIVE",121 INDEX_VALUE: "LIVE",122 INDICATIVE: "LIVE",123 STABLECOIN_PROXY: "LIVE",124 DERIVED: "LIVE",125 OFFICIAL_FIX: "FIX",126 REFERENCE_RATE: "FIX",127 SETTLEMENT: "EOD",128 EOD_CLOSE: "EOD",129 NAV: "EOD",130};131/** Observation types that are proxies/derivations: they confirm but never count as independent families. */132export const PROXY_TYPES: ReadonlySet<ObservationType> = new Set<ObservationType>(["STABLECOIN_PROXY", "DERIVED", "INDICATIVE"]);133134export const TIMESTAMP_TRUSTS = ["EXCHANGE", "SOURCE", "CONNECTOR", "UNKNOWN"] as const;135export type TimestampTrust = (typeof TIMESTAMP_TRUSTS)[number];136137export const CONNECTOR_STATES = [138 "HEALTHY",139 "DEGRADED",140 "STALE",141 "RECONNECTING",142 "FAILED",143 "PAUSED",144 "DISABLED",145 "STARTING",146] as const;147export type ConnectorState = (typeof CONNECTOR_STATES)[number];148149export const MARKET_STATES = ["PRE", "OPEN", "HALTED", "CLOSED", "POST", "AUCTION", "UNKNOWN"] as const;150export type MarketState = (typeof MARKET_STATES)[number];151152export const EVENT_TYPES = [153 "PRICE_CHANGE",154 "SESSION_HIGH",155 "SESSION_LOW",156 "PRICE_BREAKOUT",157 "PRICE_GAP",158 "VOLUME_SPIKE",159 "VOLATILITY_SPIKE",160 "SPREAD_WIDENING",161 "SPREAD_COMPRESSION",162 "LIQUIDITY_CHANGE",163 "MARKET_OPEN",164 "MARKET_CLOSE",165 "TRADING_HALT",166 "TRADING_RESUME",167 "CORPORATE_ACTION",168 "DIVIDEND_DECLARED",169 "DIVIDEND_CHANGED",170 "STOCK_SPLIT",171 "EARNINGS_RELEASE",172 "GUIDANCE_CHANGE",173 "FILING_PUBLISHED",174 "INSIDER_TRANSACTION",175 "IPO_STATUS_CHANGE",176 "INDEX_CONSTITUENT_CHANGE",177 "RATING_CHANGE",178 "RATE_DECISION",179 "REFERENCE_RATE_PUBLISHED",180 "DOCUMENT_CHANGED",181 "SOURCE_FAILURE",182 "SOURCE_RECOVERY",183 "SOURCE_DIVERGENCE",184 "SCHEMA_DRIFT",185 "INSTRUMENT_LISTED",186 "INSTRUMENT_DELISTED",187] as const;188export type EventType = (typeof EVENT_TYPES)[number];189190export const SEVERITIES = ["DEBUG", "INFO", "NOTICE", "WARNING", "CRITICAL"] as const;191export type Severity = (typeof SEVERITIES)[number];192193export const BAR_RESOLUTIONS = ["1m", "5m", "15m", "1h", "1d"] as const;194export type BarResolution = (typeof BAR_RESOLUTIONS)[number];195196export const RESOLUTION_MS: Record<BarResolution, number> = {197 "1m": 60_000,198 "5m": 300_000,199 "15m": 900_000,200 "1h": 3_600_000,201 "1d": 86_400_000,202};203204export const CANONICAL_VERSIONS = {205 normalizer: "1.0",206 consensus: "1.0",207 events: "1.0",208} as const;209