// Canonical vocabularies of Market Atlas. Every boundary (bus, DB, API, UI) uses these strings verbatim. export const ASSET_CLASSES = [ "EQUITY", "ETF", "ETN", "INDEX", "CRYPTO", "FOREX", "COMMODITY", "FUTURE", "OPTION", "BOND", "TREASURY", "INTEREST_RATE", "MUTUAL_FUND", "ADR", "GDR", "REIT", "WARRANT", "CFD", "OTHER", ] as const; export type AssetClass = (typeof ASSET_CLASSES)[number]; export const RIGHTS_STATUSES = [ "PUBLIC_OPEN", "PUBLIC_ATTRIBUTED", "PUBLIC_RESTRICTED_REDISTRIBUTION", "OFFICIAL_OPEN_DATA", "LICENSED", "DELAYED", "INDICATIVE", "RESEARCH_ONLY", "INTERNAL_ONLY", "UNKNOWN", "DISABLED", ] as const; export type RightsStatus = (typeof RIGHTS_STATUSES)[number]; /** Rights statuses whose raw values may be redistributed publicly by Market Atlas. */ export const PUBLICLY_REDISTRIBUTABLE: ReadonlySet = new Set([ "PUBLIC_OPEN", "PUBLIC_ATTRIBUTED", "OFFICIAL_OPEN_DATA", "LICENSED", "DELAYED", "INDICATIVE", ]); export const REALTIME_STATUSES = ["REALTIME", "DELAYED", "END_OF_DAY", "INDICATIVE", "STALE", "UNKNOWN"] as const; export type RealtimeStatus = (typeof REALTIME_STATUSES)[number]; export const SOURCE_TYPES = [ "WEBSOCKET", "SSE", "XHR", "FETCH", "GRAPHQL", "HTML", "RSS", "CSV", "XML", "PDF", "OFFICIAL_API", "BULK_FILE", ] as const; export type SourceType = (typeof SOURCE_TYPES)[number]; export const FIELDS = [ "LAST_PRICE", "OPEN", "HIGH", "LOW", "PREVIOUS_CLOSE", "CLOSE", "BID", "ASK", "BID_SIZE", "ASK_SIZE", "VOLUME", "VWAP", "MARKET_CAP", "CHANGE", "CHANGE_PERCENT", "OPEN_INTEREST", "YIELD", "RATE", "NAV", "52_WEEK_HIGH", "52_WEEK_LOW", "IMPLIED_VOLATILITY", ] as const; export type Field = (typeof FIELDS)[number]; /** * What an observation *is*. Values of different comparability classes are never compared to each * other (an ECB fixing is not a live mid, an exchange settlement is not a trade). */ export const OBSERVATION_TYPES = [ "TRADE", // last trade on a venue "MID", // mid of a quoted market "QUOTE", // bid/ask style value "INDEX_VALUE", // computed index level "INDICATIVE", // indicative live value (non-tradable) "STABLECOIN_PROXY", // fiat rate implied from a stablecoin market (USDT/USDC ≈ USD) "DERIVED", // computed by Market Atlas (cross rates…) "OFFICIAL_FIX", // central-bank / official fixing "REFERENCE_RATE", // official reference or policy rate "SETTLEMENT", // exchange settlement price "EOD_CLOSE", // end-of-day close from a historical dataset "NAV", ] as const; export type ObservationType = (typeof OBSERVATION_TYPES)[number]; export type ComparabilityClass = "LIVE" | "FIX" | "EOD"; export const COMPARABILITY: Record = { TRADE: "LIVE", MID: "LIVE", QUOTE: "LIVE", INDEX_VALUE: "LIVE", INDICATIVE: "LIVE", STABLECOIN_PROXY: "LIVE", DERIVED: "LIVE", OFFICIAL_FIX: "FIX", REFERENCE_RATE: "FIX", SETTLEMENT: "EOD", EOD_CLOSE: "EOD", NAV: "EOD", }; /** Observation types that are proxies/derivations: they confirm but never count as independent families. */ export const PROXY_TYPES: ReadonlySet = new Set(["STABLECOIN_PROXY", "DERIVED", "INDICATIVE"]); export const TIMESTAMP_TRUSTS = ["EXCHANGE", "SOURCE", "CONNECTOR", "UNKNOWN"] as const; export type TimestampTrust = (typeof TIMESTAMP_TRUSTS)[number]; export const CONNECTOR_STATES = [ "HEALTHY", "DEGRADED", "STALE", "RECONNECTING", "FAILED", "PAUSED", "DISABLED", "STARTING", ] as const; export type ConnectorState = (typeof CONNECTOR_STATES)[number]; export const MARKET_STATES = ["PRE", "OPEN", "HALTED", "CLOSED", "POST", "AUCTION", "UNKNOWN"] as const; export type MarketState = (typeof MARKET_STATES)[number]; export const EVENT_TYPES = [ "PRICE_CHANGE", "SESSION_HIGH", "SESSION_LOW", "PRICE_BREAKOUT", "PRICE_GAP", "VOLUME_SPIKE", "VOLATILITY_SPIKE", "SPREAD_WIDENING", "SPREAD_COMPRESSION", "LIQUIDITY_CHANGE", "MARKET_OPEN", "MARKET_CLOSE", "TRADING_HALT", "TRADING_RESUME", "CORPORATE_ACTION", "DIVIDEND_DECLARED", "DIVIDEND_CHANGED", "STOCK_SPLIT", "EARNINGS_RELEASE", "GUIDANCE_CHANGE", "FILING_PUBLISHED", "INSIDER_TRANSACTION", "IPO_STATUS_CHANGE", "INDEX_CONSTITUENT_CHANGE", "RATING_CHANGE", "RATE_DECISION", "REFERENCE_RATE_PUBLISHED", "DOCUMENT_CHANGED", "SOURCE_FAILURE", "SOURCE_RECOVERY", "SOURCE_DIVERGENCE", "SCHEMA_DRIFT", "INSTRUMENT_LISTED", "INSTRUMENT_DELISTED", ] as const; export type EventType = (typeof EVENT_TYPES)[number]; export const SEVERITIES = ["DEBUG", "INFO", "NOTICE", "WARNING", "CRITICAL"] as const; export type Severity = (typeof SEVERITIES)[number]; export const BAR_RESOLUTIONS = ["1m", "5m", "15m", "1h", "1d"] as const; export type BarResolution = (typeof BAR_RESOLUTIONS)[number]; export const RESOLUTION_MS: Record = { "1m": 60_000, "5m": 300_000, "15m": 900_000, "1h": 3_600_000, "1d": 86_400_000, }; export const CANONICAL_VERSIONS = { normalizer: "1.0", consensus: "1.0", events: "1.0", } as const;