SYMBOL INDEX (10433 symbols across 683 files) FILE: api/_api-key.js constant DESKTOP_ORIGIN_PATTERNS (line 1) | const DESKTOP_ORIGIN_PATTERNS = [ constant BROWSER_ORIGIN_PATTERNS (line 8) | const BROWSER_ORIGIN_PATTERNS = [ function isDesktopOrigin (line 17) | function isDesktopOrigin(origin) { function isTrustedBrowserOrigin (line 21) | function isTrustedBrowserOrigin(origin) { function extractOriginFromReferer (line 25) | function extractOriginFromReferer(referer) { function validateApiKey (line 34) | function validateApiKey(req, options = {}) { FILE: api/_cors.js constant ALLOWED_ORIGIN_PATTERNS (line 1) | const ALLOWED_ORIGIN_PATTERNS = [ function isAllowedOrigin (line 12) | function isAllowedOrigin(origin) { function getCorsHeaders (line 16) | function getCorsHeaders(req, methods = 'GET, OPTIONS') { function getPublicCorsHeaders (line 36) | function getPublicCorsHeaders(methods = 'GET, OPTIONS') { function isDisallowedOrigin (line 45) | function isDisallowedOrigin(req) { FILE: api/_cors.test.mjs function makeRequest (line 5) | function makeRequest(origin) { FILE: api/_github-release.js constant RELEASES_URL (line 1) | const RELEASES_URL = 'https://api.github.com/repos/koala73/worldmonitor/... function fetchLatestRelease (line 3) | async function fetchLatestRelease(userAgent) { FILE: api/_ip-rate-limit.js function createIpRateLimiter (line 1) | function createIpRateLimiter({ limit, windowMs }) { FILE: api/_json-response.js function jsonResponse (line 1) | function jsonResponse(body, status, headers = {}) { FILE: api/_rate-limit.js function getRatelimit (line 7) | function getRatelimit() { function getClientIp (line 24) | function getClientIp(request) { function checkRateLimit (line 33) | async function checkRateLimit(request, corsHeaders) { FILE: api/_relay.js function getRelayBaseUrl (line 6) | function getRelayBaseUrl() { function getRelayHeaders (line 12) | function getRelayHeaders(baseHeaders = {}) { function fetchWithTimeout (line 23) | async function fetchWithTimeout(url, options, timeoutMs = 15000) { function buildRelayResponse (line 36) | function buildRelayResponse(response, body, headers) { function createRelayHandler (line 56) | function createRelayHandler(cfg) { FILE: api/_turnstile.js constant TURNSTILE_VERIFY_URL (line 1) | const TURNSTILE_VERIFY_URL = 'https://challenges.cloudflare.com/turnstil... function getClientIp (line 3) | function getClientIp(request) { function verifyTurnstile (line 13) | async function verifyTurnstile({ FILE: api/_turnstile.test.mjs function restoreEnv (line 9) | function restoreEnv() { FILE: api/_upstash-json.js function readJsonFromUpstash (line 1) | async function readJsonFromUpstash(key, timeoutMs = 3_000) { FILE: api/bootstrap.js constant BOOTSTRAP_CACHE_KEYS (line 7) | const BOOTSTRAP_CACHE_KEYS = { constant SLOW_KEYS (line 57) | const SLOW_KEYS = new Set([ constant FAST_KEYS (line 69) | const FAST_KEYS = new Set([ constant TIER_CACHE (line 79) | const TIER_CACHE = { constant TIER_CDN_CACHE (line 83) | const TIER_CDN_CACHE = { constant NEG_SENTINEL (line 88) | const NEG_SENTINEL = '__WM_NEG__'; function getCachedJsonBatch (line 90) | async function getCachedJsonBatch(keys) { function handler (line 123) | async function handler(req) { FILE: api/cache-purge.js constant MAX_EXPLICIT_KEYS (line 6) | const MAX_EXPLICIT_KEYS = 20; constant MAX_PATTERNS (line 7) | const MAX_PATTERNS = 3; constant MAX_DELETIONS (line 8) | const MAX_DELETIONS = 200; constant MAX_SCAN_ITERATIONS (line 9) | const MAX_SCAN_ITERATIONS = 5; constant BLOCKLIST_PREFIXES (line 11) | const BLOCKLIST_PREFIXES = ['rl:', '__']; constant DURABLE_DATA_PREFIXES (line 12) | const DURABLE_DATA_PREFIXES = ['military:bases:', 'conflict:iran-events:... function getKeyPrefix (line 14) | function getKeyPrefix() { function isBlocklisted (line 21) | function isBlocklisted(key) { function isDurableData (line 25) | function isDurableData(key) { function getRedisCredentials (line 29) | function getRedisCredentials() { function redisPipeline (line 36) | async function redisPipeline(commands) { function redisScan (line 51) | async function redisScan(pattern, maxIterations) { function timingSafeEqual (line 77) | async function timingSafeEqual(a, b) { function handler (line 93) | async function handler(req) { FILE: api/contact.js constant EMAIL_RE (line 9) | const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; constant PHONE_RE (line 10) | const PHONE_RE = /^[+(]?\d[\d\s()./-]{4,23}\d$/; constant MAX_FIELD (line 11) | const MAX_FIELD = 500; constant MAX_MESSAGE (line 12) | const MAX_MESSAGE = 2000; constant FREE_EMAIL_DOMAINS (line 14) | const FREE_EMAIL_DOMAINS = new Set([ constant RATE_LIMIT (line 27) | const RATE_LIMIT = 3; constant RATE_WINDOW_MS (line 28) | const RATE_WINDOW_MS = 60 * 60 * 1000; function sendNotificationEmail (line 32) | async function sendNotificationEmail(name, email, organization, phone, m... function escapeHtml (line 78) | function escapeHtml(str) { function sanitizeForSubject (line 86) | function sanitizeForSubject(str, maxLen = 50) { function handler (line 90) | async function handler(req) { FILE: api/data/city-coords.ts type CityCoord (line 6) | interface CityCoord { constant CITY_COORDS (line 13) | const CITY_COORDS: Record = { FILE: api/download.js constant RELEASES_PAGE (line 6) | const RELEASES_PAGE = 'https://github.com/koala73/worldmonitor/releases/... constant PLATFORM_PATTERNS (line 8) | const PLATFORM_PATTERNS = { constant VARIANT_IDENTIFIERS (line 17) | const VARIANT_IDENTIFIERS = { function canonicalAssetName (line 24) | function canonicalAssetName(name) { function findAssetForVariant (line 28) | function findAssetForVariant(assets, variant, platformMatcher) { function handler (line 42) | async function handler(req) { FILE: api/eia/[[...path]].js function handler (line 6) | async function handler(req) { FILE: api/enrichment/_domain.js constant DOMAIN_SUFFIX_RE (line 1) | const DOMAIN_SUFFIX_RE = /\.(com|io|co|org|net|ai|dev|app)$/; function toOrgSlugFromDomain (line 3) | function toOrgSlugFromDomain(domain) { function inferCompanyNameFromDomain (line 12) | function inferCompanyNameFromDomain(domain) { FILE: api/enrichment/company.js constant CACHE_TTL_SECONDS (line 20) | const CACHE_TTL_SECONDS = 3600; constant GITHUB_API_HEADERS (line 21) | const GITHUB_API_HEADERS = Object.freeze({ Accept: 'application/vnd.gith... function fetchGitHubOrg (line 23) | async function fetchGitHubOrg(name) { function fetchGitHubTechStack (line 46) | async function fetchGitHubTechStack(orgName) { function fetchSECData (line 72) | async function fetchSECData(companyName) { function fetchHackerNewsMentions (line 97) | async function fetchHackerNewsMentions(companyName) { function getTodayISO (line 120) | function getTodayISO() { function getDateMonthsAgo (line 124) | function getDateMonthsAgo(months) { function toISODate (line 130) | function toISODate(date) { function handler (line 134) | async function handler(req) { FILE: api/enrichment/signals.js constant UPSTREAM_TIMEOUT_MS (line 18) | const UPSTREAM_TIMEOUT_MS = 5000; constant DEFAULT_HEADERS (line 19) | const DEFAULT_HEADERS = Object.freeze({ 'User-Agent': UA }); constant GITHUB_HEADERS (line 20) | const GITHUB_HEADERS = Object.freeze({ Accept: 'application/vnd.github.v... constant SIGNAL_KEYWORDS (line 22) | const SIGNAL_KEYWORDS = { function classifySignal (line 31) | function classifySignal(text) { function scoreSignalStrength (line 41) | function scoreSignalStrength(points, comments, recencyDays) { function fetchHNSignals (line 60) | async function fetchHNSignals(companyName) { function fetchGitHubSignals (line 91) | async function fetchGitHubSignals(orgName) { function fetchJobSignals (line 122) | async function fetchJobSignals(companyName) { function handler (line 156) | async function handler(req) { FILE: api/fwdstart.js function handler (line 7) | async function handler(req) { FILE: api/geo.js function handler (line 5) | function handler(req) { FILE: api/gpsjam.js constant REDIS_KEY (line 7) | const REDIS_KEY = 'intelligence:gpsjam:v2'; constant REDIS_KEY_V1 (line 8) | const REDIS_KEY_V1 = 'intelligence:gpsjam:v1'; constant CACHE_TTL (line 12) | const CACHE_TTL = 300_000; constant NEG_TTL (line 15) | const NEG_TTL = 60_000; function fetchGpsJamData (line 17) | async function fetchGpsJamData() { function handler (line 60) | async function handler(req) { FILE: api/health.js constant BOOTSTRAP_KEYS (line 5) | const BOOTSTRAP_KEYS = { constant STANDALONE_KEYS (line 42) | const STANDALONE_KEYS = { constant SEED_META (line 79) | const SEED_META = { constant ON_DEMAND_KEYS (line 144) | const ON_DEMAND_KEYS = new Set([ constant EMPTY_DATA_OK_KEYS (line 156) | const EMPTY_DATA_OK_KEYS = new Set(['notamClosures', 'faaDelays', 'gpsja... constant CASCADE_GROUPS (line 160) | const CASCADE_GROUPS = { constant NEG_SENTINEL (line 168) | const NEG_SENTINEL = '__WM_NEG__'; function redisPipeline (line 170) | async function redisPipeline(commands) { function parseRedisValue (line 185) | function parseRedisValue(raw) { function dataSize (line 190) | function dataSize(parsed) { function handler (line 208) | async function handler(req) { FILE: api/loaders-xml-wms-regression.test.mjs constant WMS_CAPABILITIES_XML (line 6) | const WMS_CAPABILITIES_XML = ` FILE: api/mcp-proxy.js constant TIMEOUT_MS (line 6) | const TIMEOUT_MS = 15_000; constant SSE_CONNECT_TIMEOUT_MS (line 7) | const SSE_CONNECT_TIMEOUT_MS = 10_000; constant SSE_RPC_TIMEOUT_MS (line 8) | const SSE_RPC_TIMEOUT_MS = 12_000; constant MCP_PROTOCOL_VERSION (line 9) | const MCP_PROTOCOL_VERSION = '2025-03-26'; constant BLOCKED_HOST_PATTERNS (line 11) | const BLOCKED_HOST_PATTERNS = [ function buildInitPayload (line 23) | function buildInitPayload() { function validateServerUrl (line 36) | function validateServerUrl(raw) { function buildHeaders (line 45) | function buildHeaders(customHeaders) { function postJson (line 66) | async function postJson(url, body, headers, sessionId) { function parseJsonRpcResponse (line 78) | async function parseJsonRpcResponse(resp) { function sendInitialized (line 96) | async function sendInitialized(serverUrl, headers, sessionId) { function mcpListTools (line 106) | async function mcpListTools(serverUrl, customHeaders) { function mcpCallTool (line 123) | async function mcpCallTool(serverUrl, toolName, toolArgs, customHeaders) { function isSseTransport (line 148) | function isSseTransport(url) { function makeDeferred (line 153) | function makeDeferred() { class SseSession (line 159) | class SseSession { method constructor (line 160) | constructor(sseUrl, headers) { method connect (line 169) | async connect() { method _startReadLoop (line 180) | _startReadLoop() { method send (line 247) | async send(id, method, params) { method notify (line 273) | async notify(method, params) { method close (line 282) | close() { function mcpListToolsSse (line 287) | async function mcpListToolsSse(serverUrl, customHeaders) { function mcpCallToolSse (line 307) | async function mcpCallToolSse(serverUrl, toolName, toolArgs, customHeade... function handler (line 329) | async function handler(req) { FILE: api/military-flights.js constant REDIS_KEY (line 7) | const REDIS_KEY = 'military:flights:v1'; constant STALE_KEY (line 8) | const STALE_KEY = 'military:flights:stale:v1'; constant CACHE_TTL (line 12) | const CACHE_TTL = 120_000; constant NEG_TTL (line 15) | const NEG_TTL = 30_000; function fetchMilitaryFlightsData (line 17) | async function fetchMilitaryFlightsData() { function handler (line 39) | async function handler(req) { FILE: api/og-story.js constant COUNTRY_NAMES (line 7) | const COUNTRY_NAMES = { constant LEVEL_COLORS (line 15) | const LEVEL_COLORS = { constant LEVEL_LABELS (line 20) | const LEVEL_LABELS = { function normalizeLevel (line 28) | function normalizeLevel(rawLevel) { function handler (line 33) | function handler(req, res) { function escapeXml (line 228) | function escapeXml(str) { FILE: api/og-story.test.mjs function renderOgStory (line 5) | function renderOgStory(query = '') { FILE: api/register-interest.js constant EMAIL_RE (line 9) | const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; constant MAX_EMAIL_LENGTH (line 10) | const MAX_EMAIL_LENGTH = 320; constant MAX_META_LENGTH (line 11) | const MAX_META_LENGTH = 100; constant RATE_LIMIT (line 13) | const RATE_LIMIT = 5; constant RATE_WINDOW_MS (line 14) | const RATE_WINDOW_MS = 60 * 60 * 1000; function sendConfirmationEmail (line 18) | async function sendConfirmationEmail(email, referralCode) { function handler (line 171) | async function handler(req) { FILE: api/reverse-geocode.js constant NOMINATIM_BASE (line 6) | const NOMINATIM_BASE = 'https://nominatim.openstreetmap.org/reverse'; constant CHROME_UA (line 7) | const CHROME_UA = 'WorldMonitor/2.0 (https://worldmonitor.app)'; function handler (line 9) | async function handler(req) { FILE: api/rss-proxy.js constant RELAY_ONLY_DOMAINS (line 12) | const RELAY_ONLY_DOMAINS = new Set([ constant DIRECT_FETCH_HEADERS (line 33) | const DIRECT_FETCH_HEADERS = Object.freeze({ function fetchViaRailway (line 39) | async function fetchViaRailway(feedUrl, timeoutMs) { constant ALLOWED_DOMAINS (line 52) | const ALLOWED_DOMAINS = RSS_ALLOWED_DOMAINS; function isAllowedDomain (line 54) | function isAllowedDomain(hostname) { function handler (line 60) | async function handler(req) { FILE: api/satellites.js constant REDIS_KEY (line 7) | const REDIS_KEY = 'intelligence:satellites:tle:v1'; constant CACHE_TTL (line 11) | const CACHE_TTL = 600_000; constant NEG_TTL (line 14) | const NEG_TTL = 60_000; function fetchSatelliteData (line 16) | async function fetchSatelliteData() { function handler (line 31) | async function handler(req) { FILE: api/seed-health.js constant SEED_DOMAINS (line 7) | const SEED_DOMAINS = { function getMetaBatch (line 59) | async function getMetaBatch(keys) { function handler (line 84) | async function handler(req) { FILE: api/story.js constant COUNTRY_NAMES (line 8) | const COUNTRY_NAMES = { constant BOT_UA (line 16) | const BOT_UA = /twitterbot|facebookexternalhit|linkedinbot|slackbot|tele... function handler (line 18) | function handler(req, res) { function esc (line 83) | function esc(str) { FILE: api/telegram-feed.js function handler (line 7) | async function handler(req) { FILE: api/version.js function handler (line 6) | async function handler() { FILE: api/youtube/embed.js function parseFlag (line 3) | function parseFlag(value, fallback = '1') { function sanitizeVideoId (line 8) | function sanitizeVideoId(value) { constant ALLOWED_ORIGINS (line 13) | const ALLOWED_ORIGINS = [ constant ALLOWED_PARENT_ORIGINS (line 22) | const ALLOWED_PARENT_ORIGINS = [ function sanitizeAllowedOrigin (line 29) | function sanitizeAllowedOrigin(raw, fallback, allowList = ALLOWED_ORIGIN... function sanitizeOrigin (line 42) | function sanitizeOrigin(raw) { function sanitizeParentOrigin (line 46) | function sanitizeParentOrigin(raw, fallback) { function handler (line 50) | async function handler(request) { FILE: api/youtube/embed.test.mjs function makeRequest (line 5) | function makeRequest(query = '') { FILE: api/youtube/live.js function handler (line 9) | async function handler(request) { FILE: blog-site/astro.config.mjs constant POST_DATES (line 5) | const POST_DATES = { method serialize (line 32) | serialize(item) { FILE: blog-site/scripts/generate-og-images.mjs constant BLOG_DIR (line 7) | const BLOG_DIR = join(import.meta.dirname, '..', 'src', 'content', 'blog'); constant OUT_DIR (line 8) | const OUT_DIR = join(import.meta.dirname, '..', 'public', 'og'); constant WIDTH (line 9) | const WIDTH = 1200; constant HEIGHT (line 10) | const HEIGHT = 630; function h (line 20) | function h(type, style, children) { FILE: blog-site/src/pages/rss.xml.ts function GET (line 4) | async function GET(context: { site: URL }) { FILE: convex/_generated/dataModel.d.ts type TableNames (line 23) | type TableNames = TableNamesInDataModel; type Doc (line 30) | type Doc = DocumentByName< type Id (line 48) | type Id = type DataModel (line 60) | type DataModel = DataModelFromSchemaDefinition; FILE: convex/_generated/registerInterest.js function hashCode (line 3) | function hashCode(str) { function generateUniqueReferralCode (line 10) | async function generateUniqueReferralCode(db, email) { function getCounter (line 24) | async function getCounter(db, name) { function incrementCounter (line 31) | async function incrementCounter(db, name) { FILE: convex/_generated/server.d.ts type QueryCtx (line 107) | type QueryCtx = GenericQueryCtx; type MutationCtx (line 115) | type MutationCtx = GenericMutationCtx; type ActionCtx (line 123) | type ActionCtx = GenericActionCtx; type DatabaseReader (line 132) | type DatabaseReader = GenericDatabaseReader; type DatabaseWriter (line 143) | type DatabaseWriter = GenericDatabaseWriter; FILE: convex/registerInterest.ts function hashCode (line 5) | function hashCode(str: string): number { function generateUniqueReferralCode (line 13) | async function generateUniqueReferralCode( function getCounter (line 30) | async function getCounter(db: DatabaseReader, name: string): Promise = { constant VARIANT_OG (line 21) | const VARIANT_OG: Record; constant SUPPORTED_LANGUAGES (line 7) | const SUPPORTED_LANGUAGES = ['en', 'ar', 'bg', 'cs', 'de', 'el', 'es', '... type SupportedLanguage (line 8) | type SupportedLanguage = typeof SUPPORTED_LANGUAGES[number]; constant SUPPORTED_SET (line 9) | const SUPPORTED_SET = new Set(SUPPORTED_LANGUAGES); constant RTL_LANGUAGES (line 12) | const RTL_LANGUAGES = new Set(['ar']); function normalize (line 19) | function normalize(lng: string): SupportedLanguage { function ensureLoaded (line 24) | async function ensureLoaded(lng: string): Promise { function initI18n (line 34) | async function initI18n(): Promise { function t (line 51) | function t(key: string, options?: Record): string { FILE: pro-test/src/main.tsx constant TURNSTILE_SCRIPT_SELECTOR (line 7) | const TURNSTILE_SCRIPT_SELECTOR = 'script[src^="https://challenges.cloud... FILE: public/pro/assets/index-k66dEz6-.js function l (line 1) | function l(u){const f={};return u.integrity&&(f.integrity=u.integrity),u... function r (line 1) | function r(u){if(u.ep)return;u.ep=!0;const f=l(u);fetch(u.href,f)} function P1 (line 9) | function P1(){if(Ap)return ys;Ap=1;var i=Symbol.for("react.transitional.... function F1 (line 9) | function F1(){return Ep||(Ep=1,Fu.exports=P1()),Fu.exports} function Q1 (line 17) | function Q1(){if(jp)return re;jp=1;var i=Symbol.for("react.transitional.... function Kc (line 17) | function Kc(){return Np||(Np=1,Qu.exports=Q1()),Qu.exports} function Z1 (line 25) | function Z1(){return Dp||(Dp=1,(function(i){function a(L,G){var F=L.leng... function J1 (line 25) | function J1(){return Mp||(Mp=1,Ju.exports=Z1()),Ju.exports} function $1 (line 33) | function $1(){if(Cp)return ut;Cp=1;var i=Kc();function a(y){var p="https... function W1 (line 33) | function W1(){if(Op)return Wu.exports;Op=1;function i(){if(!(typeof __RE... function I1 (line 41) | function I1(){if(Rp)return vs;Rp=1;var i=J1(),a=Kc(),l=W1();function r(e... function eb (line 49) | function eb(){if(Lp)return Zu.exports;Lp=1;function i(){if(!(typeof __RE... function nb (line 49) | function nb(i){const a=te.useRef(null);return a.current===null&&(a.curre... function Pc (line 49) | function Pc(i,a){i.indexOf(a)===-1&&i.push(a)} function dr (line 49) | function dr(i,a){const l=i.indexOf(a);l>-1&&i.splice(l,1)} function vy (line 49) | function vy(i){return typeof i=="object"&&i!==null} function by (line 49) | function by(i){let a;return()=>(a===void 0&&(a=i()),a)} class Qc (line 49) | class Qc{constructor(){this.subscriptions=[]}add(a){return Pc(this.subsc... method constructor (line 49) | constructor(){this.subscriptions=[]} method add (line 49) | add(a){return Pc(this.subscriptions,a),()=>dr(this.subscriptions,a)} method notify (line 49) | notify(a,l,r){const u=this.subscriptions.length;if(u)if(u===1)this.sub... method getSize (line 49) | getSize(){return this.subscriptions.length} method clear (line 49) | clear(){this.subscriptions.length=0} function Sy (line 49) | function Sy(i,a){return a?i*(1e3/a):0} function ob (line 49) | function ob(i,a,l,r,u){let f,d,h=0;do d=a+(l-a)/2,f=wy(d,r,u)-i,f>0?l=d:... function zs (line 49) | function zs(i,a,l,r){if(i===a&&l===r)return Yt;const u=f=>ob(f,0,1,i,l);... function mb (line 49) | function mb(i,a){let l=new Set,r=new Set,u=!1,f=!1;const d=new WeakSet;l... function Ry (line 49) | function Ry(i,a){let l=!1,r=!0;const u={delta:0,timestamp:0,isProcessing... function gb (line 49) | function gb(){lr=void 0} function zp (line 49) | function zp(i){return typeof i!="string"?!1:i.split("/*")[0].includes("v... function xb (line 49) | function xb(i){return i==null} function wb (line 49) | function wb(i){let a="",l="",r="",u="";return i.length>5?(a=i.substring(... function jb (line 49) | function jb(i){var a,l;return isNaN(i)&&typeof i=="string"&&(((a=i.match... function Cs (line 49) | function Cs(i){const a=i.toString(),l=[],r={color:[],number:[],var:[]},u... function Uy (line 49) | function Uy(i){return Cs(i).values} function By (line 49) | function By(i){const{split:a,types:l}=Cs(i),r=a.length;return u=>{let f=... function Ob (line 49) | function Ob(i){const a=Uy(i);return By(i)(a.map(Cb))} function tc (line 49) | function tc(i,a,l){return l<0&&(l+=1),l>1&&(l-=1),l<1/6?i+(a-i)*6*l:l<1/... function Rb (line 49) | function Rb({hue:i,saturation:a,lightness:l,alpha:r}){i/=360,a/=100,l/=1... function hr (line 49) | function hr(i,a){return l=>l>0?a:i} function Up (line 49) | function Up(i){const a=_b(i);if(!a)return!1;let l=a.parse(i);return a===... function zb (line 49) | function zb(i,a){return bc.has(i)?l=>l<=0?i:a:l=>l>=1?a:i} function Vb (line 49) | function Vb(i,a){return l=>ze(i,a,l)} function ef (line 49) | function ef(i){return typeof i=="number"?Vb:typeof i=="string"?$c(i)?hr:... function Hy (line 49) | function Hy(i,a){const l=[...i],r=l.length,u=i.map((f,d)=>ef(f)(f,a[d]))... function kb (line 49) | function kb(i,a){const l={...i,...a},r={};for(const u in l)i[u]!==void 0... function Ub (line 49) | function Ub(i,a){const l=[],r={color:0,var:0,number:0};for(let u=0;ui[l]!==void 0)} function Qb (line 49) | function Qb(i){let a={velocity:Be.velocity,stiffness:Be.stiffness,dampin... function pr (line 49) | function pr(i=Be.visualDuration,a=Be.bounce){const l=typeof i!="object"?... function wc (line 49) | function wc({keyframes:i,velocity:a=0,power:l=.8,timeConstant:r=325,boun... function Zb (line 49) | function Zb(i,a,l){const r=[],u=l||An.mix||qy,f=i.length-1;for(let d=0;d... function Jb (line 49) | function Jb(i,a,{clamp:l=!0,ease:r,mixer:u}={}){const f=i.length;if(Fc(f... function $b (line 49) | function $b(i,a){const l=i[i.length-1];for(let r=1;r<=a;r++){const u=Ds(... function Wb (line 49) | function Wb(i){const a=[0];return $b(a,i.length-1),a} function Ib (line 49) | function Ib(i,a){return i.map(l=>l*a)} function e2 (line 49) | function e2(i,a){return i.map(()=>a||Cy).splice(0,i.length-1)} function Ts (line 49) | function Ts({duration:i=300,keyframes:a,times:l,ease:r="easeInOut"}){con... function nf (line 49) | function nf(i,{repeat:a,repeatType:l="loop"},r,u=1){const f=i.filter(t2)... function Ky (line 49) | function Ky(i){typeof i.type=="string"&&(i.type=n2[i.type])} class af (line 49) | class af{constructor(){this.updateFinished()}get finished(){return this.... method constructor (line 49) | constructor(){this.updateFinished()} method finished (line 49) | get finished(){return this._finished} method updateFinished (line 49) | updateFinished(){this._finished=new Promise(a=>{this.resolve=a})} method notifyFinished (line 49) | notifyFinished(){this.resolve()} method then (line 49) | then(a,l){return this.finished.then(a,l)} class sf (line 49) | class sf extends af{constructor(a){super(),this.state="idle",this.startT... method constructor (line 49) | constructor(a){super(),this.state="idle",this.startTime=null,this.isSt... method initAnimation (line 49) | initAnimation(){const{options:a}=this;Ky(a);const{type:l=Ts,repeat:r=0... method updateTime (line 49) | updateTime(a){const l=Math.round(a-this.startTime)*this.playbackSpeed;... method tick (line 49) | tick(a,l=!1){const{generator:r,totalDuration:u,mixKeyframes:f,mirrored... method then (line 49) | then(a,l){return this.finished.then(a,l)} method duration (line 49) | get duration(){return Gt(this.calculatedDuration)} method iterationDuration (line 49) | get iterationDuration(){const{delay:a=0}=this.options||{};return this.... method time (line 49) | get time(){return Gt(this.currentTime)} method time (line 49) | set time(a){var l;a=Zt(a),this.currentTime=a,this.startTime===null||th... method speed (line 49) | get speed(){return this.playbackSpeed} method speed (line 49) | set speed(a){this.updateTime(ht.now());const l=this.playbackSpeed!==a;... method play (line 49) | play(){var u,f;if(this.isStopped)return;const{driver:a=Hb,startTime:l}... method pause (line 49) | pause(){this.state="paused",this.updateTime(ht.now()),this.holdTime=th... method complete (line 49) | complete(){this.state!=="running"&&this.play(),this.state="finished",t... method finish (line 49) | finish(){var a,l;this.notifyFinished(),this.teardown(),this.state="fin... method cancel (line 49) | cancel(){var a,l;this.holdTime=null,this.startTime=0,this.tick(0),this... method teardown (line 49) | teardown(){this.state="idle",this.stopDriver(),this.startTime=this.hol... method stopDriver (line 49) | stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)} method sample (line 49) | sample(a){return this.startTime=0,this.tick(a,!0)} method attachTimeline (line 49) | attachTimeline(a){var l;return this.options.allowFlatten&&(this.option... function i2 (line 49) | function i2(i){for(let a=1;a{const r=i.getValue(l);r!... function Xy (line 49) | function Xy(){if(Dc){const i=Array.from(Ea).filter(r=>r.needsMeasurement... function Py (line 49) | function Py(){Ea.forEach(i=>{i.readKeyframes(),i.needsMeasurement&&(Dc=!... function d2 (line 49) | function d2(){Mc=!0,Py(),Xy(),Mc=!1} class lf (line 49) | class lf{constructor(a,l,r,u,f,d=!1){this.state="pending",this.isAsync=!... method constructor (line 49) | constructor(a,l,r,u,f,d=!1){this.state="pending",this.isAsync=!1,this.... method scheduleResolve (line 49) | scheduleResolve(){this.state="scheduled",this.isAsync?(Ea.add(this),Nc... method readKeyframes (line 49) | readKeyframes(){const{unresolvedKeyframes:a,name:l,element:r,motionVal... method setFinalKeyframe (line 49) | setFinalKeyframe(){} method measureInitialState (line 49) | measureInitialState(){} method renderEndStyles (line 49) | renderEndStyles(){} method measureEndState (line 49) | measureEndState(){} method complete (line 49) | complete(a=!1){this.state="complete",this.onComplete(this.unresolvedKe... method cancel (line 49) | cancel(){this.state==="scheduled"&&(Ea.delete(this),this.state="pendin... method resume (line 49) | resume(){this.state==="pending"&&this.scheduleResolve()} function m2 (line 49) | function m2(i,a,l){h2(a)?i.style.setProperty(a,l):i.style[a]=l} function Fy (line 49) | function Fy(i,a){const l=by(i);return()=>p2[a]??l()} function Zy (line 49) | function Zy(i,a){if(i)return typeof i=="function"?Qy()?Gy(i,a):"ease-out... function y2 (line 49) | function y2(i,a,l,{delay:r=0,duration:u=300,repeat:f=0,repeatType:d="loo... function Jy (line 49) | function Jy(i){return typeof i=="function"&&"applyToOptions"in i} function v2 (line 49) | function v2({type:i,...a}){return Jy(i)&&Qy()?i.applyToOptions(a):(a.dur... class $y (line 49) | class $y extends af{constructor(a){if(super(),this.finishedTime=null,thi... method constructor (line 49) | constructor(a){if(super(),this.finishedTime=null,this.isStopped=!1,thi... method play (line 49) | play(){this.isStopped||(this.manualStartTime=null,this.animation.play(... method pause (line 49) | pause(){this.animation.pause()} method complete (line 49) | complete(){var a,l;(l=(a=this.animation).finish)==null||l.call(a)} method cancel (line 49) | cancel(){try{this.animation.cancel()}catch{}} method stop (line 49) | stop(){if(this.isStopped)return;this.isStopped=!0;const{state:a}=this;... method commitStyles (line 49) | commitStyles(){var l,r,u;const a=(l=this.options)==null?void 0:l.eleme... method duration (line 49) | get duration(){var l,r;const a=((r=(l=this.animation.effect)==null?voi... method iterationDuration (line 49) | get iterationDuration(){const{delay:a=0}=this.options||{};return this.... method time (line 49) | get time(){return Gt(Number(this.animation.currentTime)||0)} method time (line 49) | set time(a){this.manualStartTime=null,this.finishedTime=null,this.anim... method speed (line 49) | get speed(){return this.animation.playbackRate} method speed (line 49) | set speed(a){a<0&&(this.finishedTime=null),this.animation.playbackRate=a} method state (line 49) | get state(){return this.finishedTime!==null?"finished":this.animation.... method startTime (line 49) | get startTime(){return this.manualStartTime??Number(this.animation.sta... method startTime (line 49) | set startTime(a){this.manualStartTime=this.animation.startTime=a} method attachTimeline (line 49) | attachTimeline({timeline:a,rangeStart:l,rangeEnd:r,observe:u}){var f;r... function x2 (line 49) | function x2(i){return i in Wy} function b2 (line 49) | function b2(i){typeof i.ease=="string"&&x2(i.ease)&&(i.ease=Wy[i.ease])} class S2 (line 49) | class S2 extends $y{constructor(a){b2(a),Ky(a),super(a),a.startTime!==vo... method constructor (line 49) | constructor(a){b2(a),Ky(a),super(a),a.startTime!==void 0&&(this.startT... method updateMotionValue (line 49) | updateMotionValue(a){const{motionValue:l,onUpdate:r,onComplete:u,eleme... function w2 (line 49) | function w2(i){const a=i[0];if(i.length===1)return!0;for(let l=0;l{})} method animation (line 49) | get animation(){var a;return this._animation||((a=this.keyframeResolve... method duration (line 49) | get duration(){return this.animation.duration} method iterationDuration (line 49) | get iterationDuration(){return this.animation.iterationDuration} method time (line 49) | get time(){return this.animation.time} method time (line 49) | set time(a){this.animation.time=a} method speed (line 49) | get speed(){return this.animation.speed} method state (line 49) | get state(){return this.animation.state} method speed (line 49) | set speed(a){this.animation.speed=a} method startTime (line 49) | get startTime(){return this.animation.startTime} method attachTimeline (line 49) | attachTimeline(a){return this._animation?this.stopTimeline=this.animat... method play (line 49) | play(){this.animation.play()} method pause (line 49) | pause(){this.animation.pause()} method complete (line 49) | complete(){this.animation.complete()} method cancel (line 49) | cancel(){var a;this._animation&&this.animation.cancel(),(a=this.keyfra... function Iy (line 49) | function Iy(i,a,l,r=0,u=1){const f=Array.from(i).sort((p,v)=>p.sortNodeP... function C2 (line 49) | function C2(i){const a=M2.exec(i);if(!a)return[,];const[,l,r,u]=a;return... function e0 (line 49) | function e0(i,a,l=1){const[r,u]=C2(i);if(!r)return;const f=window.getCom... function k2 (line 49) | function k2(i,{repeat:a,repeatType:l="loop"},r){const u=i.filter(V2),f=a... function t0 (line 49) | function t0(i,a){if(i!=null&&i.inherit&&a){const{inherit:l,...r}=i;retur... function rf (line 49) | function rf(i,a){const l=(i==null?void 0:i[a])??(i==null?void 0:i.defaul... function U2 (line 49) | function U2({when:i,delay:a,delayChildren:l,staggerChildren:r,staggerDir... function Fp (line 49) | function Fp(i){const a=[{},{}];return i==null||i.values.forEach((l,r)=>{... function uf (line 49) | function uf(i,a,l,r){if(typeof a=="function"){const[u,f]=Fp(r);a=a(l!==v... function vi (line 49) | function vi(i,a,l){const r=i.getProps();return uf(r,a,l!==void 0?l:r.cus... class H2 (line 49) | class H2{constructor(a,l={}){this.canTrackVelocity=null,this.events={},t... method constructor (line 49) | constructor(a,l={}){this.canTrackVelocity=null,this.events={},this.upd... method setCurrent (line 49) | setCurrent(a){this.current=a,this.updatedAt=ht.now(),this.canTrackVelo... method setPrevFrameValue (line 49) | setPrevFrameValue(a=this.current){this.prevFrameValue=a,this.prevUpdat... method onChange (line 49) | onChange(a){return this.on("change",a)} method on (line 49) | on(a,l){this.events[a]||(this.events[a]=new Qc);const r=this.events[a]... method clearListeners (line 49) | clearListeners(){for(const a in this.events)this.events[a].clear()} method attach (line 49) | attach(a,l){this.passiveEffect=a,this.stopPassiveEffect=l} method set (line 49) | set(a){this.passiveEffect?this.passiveEffect(a,this.updateAndNotify):t... method setWithVelocity (line 49) | setWithVelocity(a,l,r){this.set(l),this.prev=void 0,this.prevFrameValu... method jump (line 49) | jump(a,l=!0){this.updateAndNotify(a),this.prev=a,this.prevUpdatedAt=th... method dirty (line 49) | dirty(){var a;(a=this.events.change)==null||a.notify(this.current)} method addDependent (line 49) | addDependent(a){this.dependents||(this.dependents=new Set),this.depend... method removeDependent (line 49) | removeDependent(a){this.dependents&&this.dependents.delete(a)} method get (line 49) | get(){return this.current} method getPrevious (line 49) | getPrevious(){return this.prev} method getVelocity (line 49) | getVelocity(){const a=ht.now();if(!this.canTrackVelocity||this.prevFra... method start (line 49) | start(a){return this.stop(),new Promise(l=>{this.hasAnimated=!0,this.a... method stop (line 49) | stop(){this.animation&&(this.animation.stop(),this.events.animationCan... method isAnimating (line 49) | isAnimating(){return!!this.animation} method clearAnimation (line 49) | clearAnimation(){delete this.animation} method destroy (line 49) | destroy(){var a,l;(a=this.dependents)==null||a.clear(),(l=this.events.... function xi (line 49) | function xi(i,a){return new H2(i,a)} function q2 (line 49) | function q2(i,a,l){i.hasValue(a)?i.getValue(a).set(l):i.addValue(a,xi(l))} function G2 (line 49) | function G2(i){return Oc(i)?i[i.length-1]||0:i} function Y2 (line 49) | function Y2(i,a){const l=vi(i,a);let{transitionEnd:r={},transition:u={},... function K2 (line 49) | function K2(i){return!!(ct(i)&&i.add)} function Rc (line 49) | function Rc(i,a){const l=i.getValue("willChange");if(K2(l))return l.add(... function cf (line 49) | function cf(i){return i.replace(/([A-Z])/g,a=>`-${a.toLowerCase()}`)} function i0 (line 49) | function i0(i){return i.props[a0]} function P2 (line 49) | function P2({protectedKeys:i,needsAnimating:a},l){const r=i.hasOwnProper... function s0 (line 49) | function s0(i,a,{delay:l=0,transitionOverride:r,type:u}={}){let{transiti... function Lc (line 49) | function Lc(i,a,l={}){var y;const r=vi(i,a,l.type==="exit"?(y=i.presence... function F2 (line 49) | function F2(i,a,l=0,r=0,u=0,f=1,d){const h=[];for(const y of i.variantCh... function Q2 (line 49) | function Q2(i,a,l={}){i.notify("AnimationStart",a);let r;if(Array.isArra... function J2 (line 49) | function J2(i){return typeof i=="number"?i===0:i!==null?i==="none"||i===... function W2 (line 49) | function W2(i){const[a,l]=i.slice(0,-1).split("(");if(a==="drop-shadow")... function u0 (line 49) | function u0(i,a){let l=o0(i);return nS.has(l)||(l=Jt),l.getAnimatableNon... function iS (line 49) | function iS(i,a,l){let r=0,u;for(;r{Qt[i]=!... function h0 (line 49) | function h0(i,a){const l=c0(i),r=new AbortController,u={passive:!0,...a,... function uS (line 49) | function uS(i){return!(i.pointerType==="touch"||d0())} function cS (line 49) | function cS(i,a,l={}){const[r,u,f]=h0(i,l);return r.forEach(d=>{let h=!1... function dS (line 49) | function dS(i){return fS.has(i.tagName)||i.isContentEditable===!0} function mS (line 49) | function mS(i){return hS.has(i.tagName)||i.isContentEditable===!0} function $p (line 49) | function $p(i){return a=>{a.key==="Enter"&&i(a)}} function sc (line 49) | function sc(i,a){i.dispatchEvent(new PointerEvent("pointer"+a,{isPrimary... function Wp (line 49) | function Wp(i){return hf(i)&&!d0()} function gS (line 49) | function gS(i,a,l={}){const[r,u,f]=h0(i,l),d=h=>{const y=h.currentTarget... function mf (line 49) | function mf(i){return vy(i)&&"ownerSVGElement"in i} function xS (line 49) | function xS({target:i,borderBoxSize:a}){var l;(l=or.get(i))==null||l.for... function bS (line 49) | function bS(i){i.forEach(xS)} function SS (line 49) | function SS(){typeof ResizeObserver>"u"||($n=new ResizeObserver(bS))} function wS (line 49) | function wS(i,a){$n||SS();const l=c0(i);return l.forEach(r=>{let u=or.ge... function TS (line 49) | function TS(){mi=()=>{const i={get width(){return window.innerWidth},get... function AS (line 49) | function AS(i){return ur.add(i),mi||TS(),()=>{ur.delete(i),!ur.size&&typ... function eg (line 49) | function eg(i,a){return typeof i=="function"?AS(i):wS(i,a)} function ES (line 49) | function ES(i){return mf(i)&&i.tagName==="svg"} function Ar (line 49) | function Ar(i){return i!==null&&typeof i=="object"&&typeof i.start=="fun... function Os (line 49) | function Os(i){return typeof i=="string"||Array.isArray(i)} function Er (line 49) | function Er(i){return Ar(i.animate)||gf.some(a=>Os(i[a]))} function g0 (line 49) | function g0(i){return!!(Er(i)||i.variants)} function MS (line 49) | function MS(i,a,l){for(const r in a){const u=a[r],f=l[r];if(ct(u))i.addV... function OS (line 49) | function OS(){if(y0.current=!0,!!CS)if(window.matchMedia){const i=window... function v0 (line 49) | function v0(i){gr=i} function RS (line 49) | function RS(){return gr} class LS (line 49) | class LS{scrapeMotionValuesFromProps(a,l,r){return{}}constructor({parent... method scrapeMotionValuesFromProps (line 49) | scrapeMotionValuesFromProps(a,l,r){return{}} method constructor (line 49) | constructor({parent:a,props:l,presenceContext:r,reducedMotionConfig:u,... method mount (line 49) | mount(a){var l,r;if(this.hasBeenMounted)for(const u in this.initialVal... method unmount (line 49) | unmount(){var a;this.projection&&this.projection.unmount(),In(this.not... method addChild (line 49) | addChild(a){this.children.add(a),this.enteringChildren??(this.entering... method removeChild (line 49) | removeChild(a){this.children.delete(a),this.enteringChildren&&this.ent... method bindToMotionValue (line 49) | bindToMotionValue(a,l){if(this.valueSubscriptions.has(a)&&this.valueSu... method sortNodePosition (line 49) | sortNodePosition(a){return!this.current||!this.sortInstanceNodePositio... method updateFeatures (line 49) | updateFeatures(){let a="animation";for(a in gr){const l=gr[a];if(!l)co... method triggerBuild (line 49) | triggerBuild(){this.build(this.renderState,this.latestValues,this.props)} method measureViewportBox (line 49) | measureViewportBox(){return this.current?this.measureInstanceViewportB... method getStaticValue (line 49) | getStaticValue(a){return this.latestValues[a]} method setStaticValue (line 49) | setStaticValue(a,l){this.latestValues[a]=l} method update (line 49) | update(a,l){(a.transformTemplate||this.props.transformTemplate)&&this.... method getProps (line 49) | getProps(){return this.props} method getVariant (line 49) | getVariant(a){return this.props.variants?this.props.variants[a]:void 0} method getDefaultTransition (line 49) | getDefaultTransition(){return this.props.transition} method getTransformPagePoint (line 49) | getTransformPagePoint(){return this.props.transformPagePoint} method getClosestVariantNode (line 49) | getClosestVariantNode(){return this.isVariantNode?this:this.parent?thi... method addVariantChild (line 49) | addVariantChild(a){const l=this.getClosestVariantNode();if(l)return l.... method addValue (line 49) | addValue(a,l){const r=this.values.get(a);l!==r&&(r&&this.removeValue(a... method removeValue (line 49) | removeValue(a){this.values.delete(a);const l=this.valueSubscriptions.g... method hasValue (line 49) | hasValue(a){return this.values.has(a)} method getValue (line 49) | getValue(a,l){if(this.props.values&&this.props.values[a])return this.p... method readValue (line 49) | readValue(a,l){let r=this.latestValues[a]!==void 0||!this.current?this... method setBaseTarget (line 49) | setBaseTarget(a,l){this.baseTarget[a]=l} method getBaseTarget (line 49) | getBaseTarget(a){var f;const{initial:l}=this.props;let r;if(typeof l==... method on (line 49) | on(a,l){return this.events[a]||(this.events[a]=new Qc),this.events[a].... method notify (line 49) | notify(a,...l){this.events[a]&&this.events[a].notify(...l)} method scheduleRenderMicrotask (line 49) | scheduleRenderMicrotask(){df.render(this.render)} class x0 (line 49) | class x0 extends LS{constructor(){super(...arguments),this.KeyframeResol... method constructor (line 49) | constructor(){super(...arguments),this.KeyframeResolver=sS} method sortInstanceNodePosition (line 49) | sortInstanceNodePosition(a,l){return a.compareDocumentPosition(l)&2?1:-1} method getBaseTargetFromProps (line 49) | getBaseTargetFromProps(a,l){const r=a.style;return r?r[l]:void 0} method removeValueFromRenderState (line 49) | removeValueFromRenderState(a,{vars:l,style:r}){delete l[a],delete r[a]} method handleChildMotionValue (line 49) | handleChildMotionValue(){this.childSubscription&&(this.childSubscripti... class ea (line 49) | class ea{constructor(a){this.isMounted=!1,this.node=a}update(){}} method constructor (line 49) | constructor(a){this.isMounted=!1,this.node=a} method update (line 49) | update(){} function b0 (line 49) | function b0({top:i,left:a,right:l,bottom:r}){return{x:{min:a,max:l},y:{m... function _S (line 49) | function _S({x:i,y:a}){return{top:a.min,right:i.max,bottom:a.max,left:i.... function zS (line 49) | function zS(i,a){if(!a)return i;const l=a({x:i.left,y:i.top}),r=a({x:i.r... function lc (line 49) | function lc(i){return i===void 0||i===1} function kc (line 49) | function kc({scale:i,scaleX:a,scaleY:l}){return!lc(i)||!lc(a)||!lc(l)} function wa (line 49) | function wa(i){return kc(i)||S0(i)||i.z||i.rotate||i.rotateX||i.rotateY|... function S0 (line 49) | function S0(i){return ig(i.x)||ig(i.y)} function ig (line 49) | function ig(i){return i&&i!=="0%"} function yr (line 49) | function yr(i,a,l){const r=i-l,u=a*r;return l+u} function sg (line 49) | function sg(i,a,l,r,u){return u!==void 0&&(i=yr(i,u,r)),yr(i,l,r)+a} function Uc (line 49) | function Uc(i,a=0,l=1,r,u){i.min=sg(i.min,a,l,r,u),i.max=sg(i.max,a,l,r,u)} function w0 (line 49) | function w0(i,{x:a,y:l}){Uc(i.x,a.translate,a.scale,a.originPoint),Uc(i.... function VS (line 49) | function VS(i,a,l,r=!1){const u=l.length;if(!u)return;a.x=a.y=1;let f,d;... function gi (line 49) | function gi(i,a){i.min=i.min+a,i.max=i.max+a} function og (line 49) | function og(i,a,l,r,u=.5){const f=ze(i.min,i.max,u);Uc(i,a,l,f,r)} function ug (line 49) | function ug(i,a){return typeof i=="string"?parseFloat(i)/100*(a.max-a.mi... function yi (line 49) | function yi(i,a){og(i.x,ug(a.x,i.x),a.scaleX,a.scale,a.originX),og(i.y,u... function T0 (line 49) | function T0(i,a){return b0(zS(i.getBoundingClientRect(),a))} function kS (line 49) | function kS(i,a,l){const r=T0(i,l),{scroll:u}=a;return u&&(gi(r.x,u.offs... function HS (line 49) | function HS(i,a,l){let r="",u=!0;for(let f=0;fPromise.all(a.map(({animation:l,options:r})=>Q2... function ew (line 49) | function ew(i){let a=IS(i),l=fg(),r=!0,u=!1;const f=p=>(v,b)=>{var j;con... function tw (line 49) | function tw(i,a){return typeof a=="string"?a!==i:Array.isArray(a)?!O0(a,... function ba (line 49) | function ba(i=!1){return{isActive:i,protectedKeys:{},needsAnimating:{},p... function fg (line 49) | function fg(){return{animate:ba(!0),whileInView:ba(),whileHover:ba(),whi... function dg (line 49) | function dg(i,a){i.min=a.min,i.max=a.max} function Ft (line 49) | function Ft(i,a){dg(i.x,a.x),dg(i.y,a.y)} function hg (line 49) | function hg(i,a){i.translate=a.translate,i.scale=a.scale,i.originPoint=a... function mt (line 49) | function mt(i){return i.max-i.min} function lw (line 49) | function lw(i,a,l){return Math.abs(i-a)<=l} function mg (line 49) | function mg(i,a,l,r=.5){i.origin=r,i.originPoint=ze(a.min,a.max,i.origin... function As (line 49) | function As(i,a,l,r){mg(i.x,a.x,l.x,r?r.originX:void 0),mg(i.y,a.y,l.y,r... function pg (line 49) | function pg(i,a,l){i.min=l.min+a.min,i.max=i.min+mt(a)} function rw (line 49) | function rw(i,a,l){pg(i.x,a.x,l.x),pg(i.y,a.y,l.y)} function gg (line 49) | function gg(i,a,l){i.min=a.min-l.min,i.max=i.min+mt(a)} function vr (line 49) | function vr(i,a,l){gg(i.x,a.x,l.x),gg(i.y,a.y,l.y)} function yg (line 49) | function yg(i,a,l,r,u){return i-=a,i=yr(i,1/l,r),u!==void 0&&(i=yr(i,1/u... function ow (line 49) | function ow(i,a=0,l=1,r=.5,u,f=i,d=i){if(an.test(a)&&(a=parseFloat(a),a=... function vg (line 49) | function vg(i,a,[l,r,u],f,d){ow(i,a[l],a[r],a[u],a.scale,f,d)} function xg (line 49) | function xg(i,a,l,r){vg(i.x,a,uw,l?l.x:void 0,r?r.x:void 0),vg(i.y,a,cw,... function bg (line 49) | function bg(i){return i.translate===0&&i.scale===1} function _0 (line 49) | function _0(i){return bg(i.x)&&bg(i.y)} function Sg (line 49) | function Sg(i,a){return i.min===a.min&&i.max===a.max} function fw (line 49) | function fw(i,a){return Sg(i.x,a.x)&&Sg(i.y,a.y)} function wg (line 49) | function wg(i,a){return Math.round(i.min)===Math.round(a.min)&&Math.roun... function z0 (line 49) | function z0(i,a){return wg(i.x,a.x)&&wg(i.y,a.y)} function Tg (line 49) | function Tg(i){return mt(i.x)/mt(i.y)} function Ag (line 49) | function Ag(i,a){return i.translate===a.translate&&i.scale===a.scale&&i.... function tn (line 49) | function tn(i){return[i("x"),i("y")]} function dw (line 49) | function dw(i,a,l){let r="";const u=i.x.translate/a.x,f=i.y.translate/a.... function mw (line 49) | function mw(i,a,l,r,u,f){u?(i.opacity=ze(0,l.opacity??1,pw(r)),i.opacity... function Ng (line 49) | function Ng(i,a){return i[a]!==void 0?i[a]:i.borderRadius} function k0 (line 49) | function k0(i,a,l){return r=>ra?1:l(Ds(i,a,r))} function yw (line 49) | function yw(i,a,l){const r=ct(i)?i:xi(i);return r.start(of("",r,a,l)),r.... function Rs (line 49) | function Rs(i,a,l,r={passive:!0}){return i.addEventListener(a,l,r),()=>i... class xw (line 49) | class xw{constructor(){this.children=[],this.isDirty=!1}add(a){Pc(this.c... method constructor (line 49) | constructor(){this.children=[],this.isDirty=!1} method add (line 49) | add(a){Pc(this.children,a),this.isDirty=!0} method remove (line 49) | remove(a){dr(this.children,a),this.isDirty=!0} method forEach (line 49) | forEach(a){this.isDirty&&this.children.sort(vw),this.isDirty=!1,this.c... function bw (line 49) | function bw(i,a){const l=ht.now(),r=({timestamp:u})=>{const f=u-l;f>=a&&... function cr (line 49) | function cr(i){return ct(i)?i.get():i} class Sw (line 49) | class Sw{constructor(){this.members=[]}add(a){Pc(this.members,a);for(let... method constructor (line 49) | constructor(){this.members=[]} method add (line 49) | add(a){Pc(this.members,a);for(let l=this.members.length-1;l>=0;l--){co... method remove (line 49) | remove(a){if(dr(this.members,a),a===this.prevLead&&(this.prevLead=void... method relegate (line 49) | relegate(a){var l;for(let r=this.members.indexOf(a)-1;r>=0;r--){const ... method promote (line 49) | promote(a,l){var u;const r=this.lead;if(a!==r&&(this.prevLead=r,this.l... method exitAnimationComplete (line 49) | exitAnimationComplete(){this.members.forEach(a=>{var l,r,u,f,d;(r=(l=a... method scheduleRender (line 49) | scheduleRender(){this.members.forEach(a=>a.instance&&a.scheduleRender(... method removeLeadSnapshot (line 49) | removeLeadSnapshot(){var a;(a=this.lead)!=null&&a.snapshot&&(this.lead... function oc (line 49) | function oc(i,a,l,r){const{latestValues:u}=a;u[i]&&(l[i]=u[i],a.setStati... function U0 (line 49) | function U0(i){if(i.hasCheckedOptimisedAppear=!0,i.root===i)return;const... function B0 (line 49) | function B0({attachResizeListener:i,defaultParent:a,measureScroll:l,chec... function Aw (line 49) | function Aw(i){i.updateLayout()} function Ew (line 49) | function Ew(i){var l;const a=((l=i.resumeFrom)==null?void 0:l.snapshot)|... function jw (line 49) | function jw(i){i.parent&&(i.isProjecting()||(i.isProjectionDirty=i.paren... function Nw (line 49) | function Nw(i){i.isProjectionDirty=i.isSharedProjectionDirty=i.isTransfo... function Dw (line 49) | function Dw(i){i.clearSnapshot()} function Dg (line 49) | function Dg(i){i.clearMeasurements()} function Mg (line 49) | function Mg(i){i.isLayoutDirty=!1} function Mw (line 49) | function Mw(i){const{visualElement:a}=i.options;a&&a.getProps().onBefore... function Cg (line 49) | function Cg(i){i.finishAnimation(),i.targetDelta=i.relativeTarget=i.targ... function Cw (line 49) | function Cw(i){i.resolveTargetDelta()} function Ow (line 49) | function Ow(i){i.calcProjection()} function Rw (line 49) | function Rw(i){i.resetSkewAndRotation()} function Lw (line 49) | function Lw(i){i.removeLeadSnapshot()} function Og (line 49) | function Og(i,a,l){i.translate=ze(a.translate,0,l),i.scale=ze(a.scale,1,... function Rg (line 49) | function Rg(i,a,l,r){i.min=ze(a.min,l.min,r),i.max=ze(a.max,l.max,r)} function _w (line 49) | function _w(i,a,l,r){Rg(i.x,a.x,l.x,r),Rg(i.y,a.y,l.y,r)} function zw (line 49) | function zw(i){return i.animationValues&&i.animationValues.opacityExit!=... function zg (line 49) | function zg(i){i.min=_g(i.min),i.max=_g(i.max)} function kw (line 49) | function kw(i){zg(i.x),zg(i.y)} function H0 (line 49) | function H0(i,a,l){return i==="position"||i==="preserve-aspect"&&!lw(Tg(... function Uw (line 49) | function Uw(i){var a;return i!==i.root&&((a=i.scroll)==null?void 0:a.was... function Hw (line 49) | function Hw(i=!0){const a=te.useContext(Xc);if(a===null)return[!0,null];... function qw (line 49) | function qw(){if(kg)return;const i={};for(const a in Vg)i[a]={isEnabled:... function K0 (line 49) | function K0(){return qw(),RS()} function Gw (line 49) | function Gw(i){const a=K0();for(const l in i)a[l]={...a[l],...i[l]};v0(a)} function xr (line 49) | function xr(i){return i.startsWith("while")||i.startsWith("drag")&&i!=="... function Kw (line 49) | function Kw(i){typeof i=="function"&&(X0=a=>a.startsWith("on")?!xr(a):i(... function Xw (line 49) | function Xw(i,a,l){const r={};for(const u in i)u==="values"&&typeof i.va... function Pw (line 49) | function Pw(i,a){if(Er(i)){const{initial:l,animate:r}=i;return{initial:l... function Fw (line 49) | function Fw(i){const{initial:a,animate:l}=Pw(i,te.useContext(jr));return... function Ug (line 49) | function Ug(i){return Array.isArray(i)?i.join(" "):i} function P0 (line 49) | function P0(i,a,l){for(const r in a)!ct(a[r])&&!E0(r,l)&&(i[r]=a[r])} function Qw (line 49) | function Qw({transformTemplate:i},a){return te.useMemo(()=>{const l=xf()... function Zw (line 49) | function Zw(i,a){const l=i.style||{},r={};return P0(r,l,i),Object.assign... function Jw (line 49) | function Jw(i,a){const l={},r=Zw(i,a);return i.drag&&i.dragListener!==!1... function $w (line 49) | function $w(i,a,l,r){const u=te.useMemo(()=>{const f=F0();return j0(f,a,... function bf (line 49) | function bf(i){return typeof i!="string"||i.includes("-")?!1:!!(Ww.index... function Iw (line 49) | function Iw(i,a,l,{latestValues:r},u,f=!1,d){const y=(d??bf(i)?$w:Jw)(a,... function eT (line 49) | function eT({scrapeMotionValuesFromProps:i,createRenderState:a},l,r,u){r... function tT (line 49) | function tT(i,a,l,r){const u={},f=r(i,{});for(const w in f)u[w]=cr(f[w])... function sT (line 49) | function sT(i,a,l){const r=te.useRef(l);te.useInsertionEffect(()=>{r.cur... function di (line 49) | function di(i){return i&&typeof i=="object"&&Object.prototype.hasOwnProp... function lT (line 49) | function lT(i,a,l,r,u,f){var H,X;const{visualElement:d}=te.useContext(jr... function rT (line 49) | function rT(i,a,l,r){const{layoutId:u,layout:f,drag:d,dragConstraints:h,... function J0 (line 49) | function J0(i){if(i)return i.options.allowProjection!==!1?i.projection:J... function cc (line 49) | function cc(i,{forwardMotionProps:a=!1,type:l}={},r,u){r&&Gw(r);const f=... function oT (line 49) | function oT({layoutId:i}){const a=te.useContext(gy).id;return a&&i!==voi... function uT (line 49) | function uT(i,a){te.useContext(Y0).strict} function cT (line 49) | function cT(i){const a=K0(),{drag:l,layout:r}=a;if(!l&&!r)return{};const... function fT (line 49) | function fT(i,a){if(typeof Proxy>"u")return cc;const l=new Map,r=(f,d)=>... class hT (line 49) | class hT extends ea{constructor(a){super(a),a.animationState||(a.animati... method constructor (line 49) | constructor(a){super(a),a.animationState||(a.animationState=ew(a))} method updateAnimationControlsSubscription (line 49) | updateAnimationControlsSubscription(){const{animate:a}=this.node.getPr... method mount (line 49) | mount(){this.updateAnimationControlsSubscription()} method update (line 49) | update(){const{animate:a}=this.node.getProps(),{animate:l}=this.node.p... method unmount (line 49) | unmount(){var a;this.node.animationState.reset(),(a=this.unmountContro... class pT (line 49) | class pT extends ea{constructor(){super(...arguments),this.id=mT++}updat... method constructor (line 49) | constructor(){super(...arguments),this.id=mT++} method update (line 49) | update(){if(!this.node.presenceContext)return;const{isPresent:a,onExit... method mount (line 49) | mount(){const{register:a,onExitComplete:l}=this.node.presenceContext||... method unmount (line 49) | unmount(){} function ks (line 49) | function ks(i){return{point:{x:i.pageX,y:i.pageY}}} function Es (line 49) | function Es(i,a,l,r){return Rs(i,a,yT(l),r)} function vT (line 49) | function vT(i,a){const l=Bg(i.x,a.x),r=Bg(i.y,a.y);return Math.sqrt(l**2... class W0 (line 49) | class W0{constructor(a,l,{transformPagePoint:r,contextWindow:u=window,dr... method constructor (line 49) | constructor(a,l,{transformPagePoint:r,contextWindow:u=window,dragSnapT... method startScrollTracking (line 49) | startScrollTracking(a){let l=a.parentElement;for(;l;){const r=getCompu... method handleScroll (line 49) | handleScroll(a){const l=this.scrollPositions.get(a);if(!l)return;const... method updateHandlers (line 49) | updateHandlers(a){this.handlers=a} method end (line 49) | end(){this.removeListeners&&this.removeListeners(),this.removeScrollLi... function fc (line 49) | function fc(i,a){return a?{point:a(i.point)}:i} function qg (line 49) | function qg(i,a){return{x:i.x-a.x,y:i.y-a.y}} function dc (line 49) | function dc({point:i},a){return{point:i,delta:qg(i,I0(a)),offset:qg(i,xT... function xT (line 49) | function xT(i){return i[0]} function I0 (line 49) | function I0(i){return i[i.length-1]} function bT (line 49) | function bT(i,a){if(i.length<2)return{x:0,y:0};let l=i.length-1,r=null;c... function ST (line 49) | function ST(i,{min:a,max:l},r){return a!==void 0&&ir?l=Ds(a.min,a.... function ET (line 49) | function ET(i,a){const l={};return a.min!==void 0&&(l.min=a.min-i.min),a... function jT (line 49) | function jT(i=Hc){return i===!1?i=0:i===!0&&(i=Hc),{x:Kg(i,"left","right... function Kg (line 49) | function Kg(i,a,l){return{min:Xg(i,a),max:Xg(i,l)}} function Xg (line 49) | function Xg(i,a){return typeof i=="number"?i:i[a]||0} class DT (line 49) | class DT{constructor(a){this.openDragLock=null,this.isDragging=!1,this.c... method constructor (line 49) | constructor(a){this.openDragLock=null,this.isDragging=!1,this.currentD... method start (line 49) | start(a,{snapToCursor:l=!1,distanceThreshold:r}={}){const{presenceCont... method stop (line 49) | stop(a,l){const r=a||this.latestPointerEvent,u=l||this.latestPanInfo,f... method cancel (line 49) | cancel(){this.isDragging=!1;const{projection:a,animationState:l}=this.... method endPanSession (line 49) | endPanSession(){this.panSession&&this.panSession.end(),this.panSession... method updateAxis (line 49) | updateAxis(a,l,r){const{drag:u}=this.getProps();if(!r||!ir(a,u,this.cu... method resolveConstraints (line 49) | resolveConstraints(){var f;const{dragConstraints:a,dragElastic:l}=this... method resolveRefConstraints (line 49) | resolveRefConstraints(){const{dragConstraints:a,onMeasureDragConstrain... method startAnimation (line 49) | startAnimation(a){const{drag:l,dragMomentum:r,dragElastic:u,dragTransi... method startAxisValueAnimation (line 49) | startAxisValueAnimation(a,l){const r=this.getAxisMotionValue(a);return... method stopAnimation (line 49) | stopAnimation(){tn(a=>this.getAxisMotionValue(a).stop())} method getAxisMotionValue (line 49) | getAxisMotionValue(a){const l=`_drag${a.toUpperCase()}`,r=this.visualE... method snapToCursor (line 49) | snapToCursor(a){tn(l=>{const{drag:r}=this.getProps();if(!ir(l,r,this.c... method scalePositionWithinConstraints (line 49) | scalePositionWithinConstraints(){if(!this.visualElement.current)return... method addListeners (line 49) | addListeners(){if(!this.visualElement.current)return;NT.set(this.visua... method getProps (line 49) | getProps(){const a=this.visualElement.getProps(),{drag:l=!1,dragDirect... function Pg (line 49) | function Pg(i){let a=!0;return()=>{if(a){a=!1;return}i()}} function MT (line 49) | function MT(i,a,l){const r=eg(i,Pg(l)),u=eg(a,Pg(l));return()=>{r(),u()}} function ir (line 49) | function ir(i,a,l){return(a===!0||a===i)&&(l===null||l===i)} function CT (line 49) | function CT(i,a=10){let l=null;return Math.abs(i.y)>a?l="y":Math.abs(i.x... class OT (line 49) | class OT extends ea{constructor(a){super(a),this.removeGroupControls=Yt,... method constructor (line 49) | constructor(a){super(a),this.removeGroupControls=Yt,this.removeListene... method mount (line 49) | mount(){const{dragControls:a}=this.node.getProps();a&&(this.removeGrou... method update (line 49) | update(){const{dragControls:a}=this.node.getProps(),{dragControls:l}=t... method unmount (line 49) | unmount(){this.removeGroupControls(),this.removeListeners(),this.contr... class RT (line 49) | class RT extends ea{constructor(){super(...arguments),this.removePointer... method constructor (line 49) | constructor(){super(...arguments),this.removePointerDownListener=Yt} method onPointerDown (line 49) | onPointerDown(a){this.session=new W0(a,this.createPanHandlers(),{trans... method createPanHandlers (line 49) | createPanHandlers(){const{onPanSessionStart:a,onPanStart:l,onPan:r,onP... method mount (line 49) | mount(){this.removePointerDownListener=Es(this.node.current,"pointerdo... method update (line 49) | update(){this.session&&this.session.updateHandlers(this.createPanHandl... method unmount (line 49) | unmount(){this.removePointerDownListener(),this.session&&this.session.... class LT (line 49) | class LT extends te.Component{componentDidMount(){const{visualElement:a,... method componentDidMount (line 49) | componentDidMount(){const{visualElement:a,layoutGroup:l,switchLayoutGr... method getSnapshotBeforeUpdate (line 49) | getSnapshotBeforeUpdate(a){const{layoutDependency:l,visualElement:r,dr... method componentDidUpdate (line 49) | componentDidUpdate(){const{projection:a}=this.props.visualElement;a&&(... method componentWillUnmount (line 49) | componentWillUnmount(){const{visualElement:a,layoutGroup:l,switchLayou... method safeToRemove (line 49) | safeToRemove(){const{safeToRemove:a}=this.props;a&&a()} method render (line 49) | render(){return null} function ev (line 49) | function ev(i){const[a,l]=Hw(),r=te.useContext(gy);return m.jsx(LT,{...i... function Fg (line 49) | function Fg(i,a,l){const{props:r}=i;i.animationState&&r.whileHover&&i.an... class zT (line 49) | class zT extends ea{mount(){const{current:a}=this.node;a&&(this.unmount=... method mount (line 49) | mount(){const{current:a}=this.node;a&&(this.unmount=cS(a,(l,r)=>(Fg(th... method unmount (line 49) | unmount(){} class VT (line 49) | class VT extends ea{constructor(){super(...arguments),this.isActive=!1}o... method constructor (line 49) | constructor(){super(...arguments),this.isActive=!1} method onFocus (line 49) | onFocus(){let a=!1;try{a=this.node.current.matches(":focus-visible")}c... method onBlur (line 49) | onBlur(){!this.isActive||!this.node.animationState||(this.node.animati... method mount (line 49) | mount(){this.unmount=_s(Rs(this.node.current,"focus",()=>this.onFocus(... method unmount (line 49) | unmount(){} function Qg (line 49) | function Qg(i,a,l){const{props:r}=i;if(i.current instanceof HTMLButtonEl... class kT (line 49) | class kT extends ea{mount(){const{current:a}=this.node;if(!a)return;cons... method mount (line 49) | mount(){const{current:a}=this.node;if(!a)return;const{globalTapTarget:... method unmount (line 49) | unmount(){} function HT (line 49) | function HT({root:i,...a}){const l=i||document;pc.has(l)||pc.set(l,{});c... function qT (line 49) | function qT(i,a,l){const r=HT(a);return qc.set(i,l),r.observe(i),()=>{qc... class YT (line 49) | class YT extends ea{constructor(){super(...arguments),this.hasEnteredVie... method constructor (line 49) | constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView... method startObserver (line 49) | startObserver(){this.unmount();const{viewport:a={}}=this.node.getProps... method mount (line 49) | mount(){this.startObserver()} method update (line 49) | update(){if(typeof IntersectionObserver>"u")return;const{props:a,prevP... method unmount (line 49) | unmount(){} function KT (line 49) | function KT({viewport:i={}},{viewport:a={}}={}){return l=>i[l]!==a[l]} function f (line 229) | function f(d){const h=new Event("vite:preloadError",{cancelable:!0});if(... class s5 (line 229) | class s5{constructor(a){this.capacity=a,this.regExpMap=new Map,this.regE... method constructor (line 229) | constructor(a){this.capacity=a,this.regExpMap=new Map,this.regExpQueue... method getRegExp (line 229) | getRegExp(a){const l=this.regExpMap.get(a);if(l!==void 0)return l;cons... method log (line 229) | log(i){this.output("log",i)} method warn (line 229) | warn(i){this.output("warn",i)} method error (line 229) | error(i){this.output("error",i)} method output (line 229) | output(i,a){var l,r;(r=(l=console==null?void 0:console[i])==null?void 0:... class wr (line 229) | class wr{constructor(a,l={}){this.init(a,l)}init(a,l={}){this.prefix=l.p... method constructor (line 229) | constructor(a,l={}){this.init(a,l)} method init (line 229) | init(a,l={}){this.prefix=l.prefix||"i18next:",this.logger=a||u5,this.o... method log (line 229) | log(...a){return this.forward(a,"log","",!0)} method warn (line 229) | warn(...a){return this.forward(a,"warn","",!0)} method error (line 229) | error(...a){return this.forward(a,"error","")} method deprecate (line 229) | deprecate(...a){return this.forward(a,"warn","WARNING DEPRECATED: ",!0)} method forward (line 229) | forward(a,l,r,u){return u&&!this.debug?null:(se(a[0])&&(a[0]=`${r}${th... method create (line 229) | create(a){return new wr(this.logger,{prefix:`${this.prefix}:${a}:`,...... method clone (line 229) | clone(a){return a=a||this.options,a.prefix=a.prefix||this.prefix,new w... class Nr (line 229) | class Nr{constructor(){this.observers={}}on(a,l){return a.split(" ").for... method constructor (line 229) | constructor(){this.observers={}} method on (line 229) | on(a,l){return a.split(" ").forEach(r=>{this.observers[r]||(this.obser... method off (line 229) | off(a,l){if(this.observers[a]){if(!l){delete this.observers[a];return}... method emit (line 229) | emit(a,...l){this.observers[a]&&Array.from(this.observers[a].entries()... class ny (line 229) | class ny extends Nr{constructor(a,l={ns:["translation"],defaultNS:"trans... method constructor (line 229) | constructor(a,l={ns:["translation"],defaultNS:"translation"}){super(),... method addNamespaces (line 229) | addNamespaces(a){this.options.ns.indexOf(a)<0&&this.options.ns.push(a)} method removeNamespaces (line 229) | removeNamespaces(a){const l=this.options.ns.indexOf(a);l>-1&&this.opti... method getResource (line 229) | getResource(a,l,r,u={}){var p,v;const f=u.keySeparator!==void 0?u.keyS... method addResource (line 229) | addResource(a,l,r,u,f={silent:!1}){const d=f.keySeparator!==void 0?f.k... method addResources (line 229) | addResources(a,l,r,u={silent:!1}){for(const f in r)(se(r[f])||Array.is... method addResourceBundle (line 229) | addResourceBundle(a,l,r,u,f,d={silent:!1,skipCopy:!1}){let h=[a,l];a.i... method removeResourceBundle (line 229) | removeResourceBundle(a,l){this.hasResourceBundle(a,l)&&delete this.dat... method hasResourceBundle (line 229) | hasResourceBundle(a,l){return this.getResource(a,l)!==void 0} method getResourceBundle (line 229) | getResourceBundle(a,l){return l||(l=this.options.defaultNS),this.getRe... method getDataByLanguage (line 229) | getDataByLanguage(a){return this.data[a]} method hasLanguageSomeTranslations (line 229) | hasLanguageSomeTranslations(a){const l=this.getDataByLanguage(a);retur... method toJSON (line 229) | toJSON(){return this.data} method addPostProcessor (line 229) | addPostProcessor(i){this.processors[i.name]=i} method handle (line 229) | handle(i,a,l,r,u){return i.forEach(f=>{var d;a=((d=this.processors[f])==... function c5 (line 229) | function c5(){const i=[],a=Object.create(null);let l;return a.get=(r,u)=... function Yc (line 229) | function Yc(i,a){const{[dv]:l}=i(c5());return l.join((a==null?void 0:a.k... class Tr (line 229) | class Tr extends Nr{constructor(a,l={}){super(),IA(["resourceStore","lan... method constructor (line 229) | constructor(a,l={}){super(),IA(["resourceStore","languageUtils","plura... method changeLanguage (line 229) | changeLanguage(a){a&&(this.language=a)} method exists (line 229) | exists(a,l={interpolation:{}}){const r={...l};if(a==null)return!1;cons... method extractFromKey (line 229) | extractFromKey(a,l){let r=l.nsSeparator!==void 0?l.nsSeparator:this.op... method translate (line 229) | translate(a,l,r){let u=typeof l=="object"?{...l}:l;if(typeof u!="objec... method extendTranslation (line 229) | extendTranslation(a,l,r,u,f){var y,p;if((y=this.i18nFormat)!=null&&y.p... method resolve (line 229) | resolve(a,l={}){let r,u,f,d,h;return se(a)&&(a=[a]),a.forEach(y=>{if(t... method isValidLookup (line 229) | isValidLookup(a){return a!==void 0&&!(!this.options.returnNull&&a===nu... method getResource (line 229) | getResource(a,l,r,u={}){var f;return(f=this.i18nFormat)!=null&&f.getRe... method getUsedParamsDetails (line 229) | getUsedParamsDetails(a={}){const l=["defaultValue","ordinal","context"... method hasDefaultValue (line 229) | static hasDefaultValue(a){const l="defaultValue";for(const r in a)if(O... class iy (line 229) | class iy{constructor(a){this.options=a,this.supportedLngs=this.options.s... method constructor (line 229) | constructor(a){this.options=a,this.supportedLngs=this.options.supporte... method getScriptPartFromCode (line 229) | getScriptPartFromCode(a){if(a=Ls(a),!a||a.indexOf("-")<0)return null;c... method getLanguagePartFromCode (line 229) | getLanguagePartFromCode(a){if(a=Ls(a),!a||a.indexOf("-")<0)return a;co... method formatLanguageCode (line 229) | formatLanguageCode(a){if(se(a)&&a.indexOf("-")>-1){let l;try{l=Intl.ge... method isSupportedCode (line 229) | isSupportedCode(a){return(this.options.load==="languageOnly"||this.opt... method getBestMatchFromCodes (line 229) | getBestMatchFromCodes(a){if(!a)return null;let l;return a.forEach(r=>{... method getFallbackCodes (line 229) | getFallbackCodes(a,l){if(!a)return[];if(typeof a=="function"&&(a=a(l))... method toResolveHierarchy (line 229) | toResolveHierarchy(a,l){const r=this.getFallbackCodes((l===!1?[]:l)||t... class f5 (line 229) | class f5{constructor(a,l={}){this.languageUtils=a,this.options=l,this.lo... method constructor (line 229) | constructor(a,l={}){this.languageUtils=a,this.options=l,this.logger=nn... method clearCache (line 229) | clearCache(){this.pluralRulesCache={}} method getRule (line 229) | getRule(a,l={}){const r=Ls(a==="dev"?"en":a),u=l.ordinal?"ordinal":"ca... method needsPlural (line 229) | needsPlural(a,l={}){let r=this.getRule(a,l);return r||(r=this.getRule(... method getPluralFormsOfKey (line 229) | getPluralFormsOfKey(a,l,r={}){return this.getSuffixes(a,r).map(u=>`${l... method getSuffixes (line 229) | getSuffixes(a,l={}){let r=this.getRule(a,l);return r||(r=this.getRule(... method getSuffix (line 229) | getSuffix(a,l,r={}){const u=this.getRule(a,r);return u?`${this.options... class oy (line 229) | class oy{constructor(a={}){var l;this.logger=nn.create("interpolator"),t... method constructor (line 229) | constructor(a={}){var l;this.logger=nn.create("interpolator"),this.opt... method init (line 229) | init(a={}){a.interpolation||(a.interpolation={escapeValue:!0});const{e... method reset (line 229) | reset(){this.options&&this.init(this.options)} method resetRegExp (line 229) | resetRegExp(){const a=(l,r)=>(l==null?void 0:l.source)===r?(l.lastInde... method interpolate (line 229) | interpolate(a,l,r,u){var j;let f,d,h;const y=this.options&&this.option... method nest (line 229) | nest(a,l,r={}){let u,f,d;const h=(y,p)=>{const v=this.nestingOptionsSe... class m5 (line 229) | class m5{constructor(a={}){this.logger=nn.create("formatter"),this.optio... method constructor (line 229) | constructor(a={}){this.logger=nn.create("formatter"),this.options=a,th... method init (line 229) | init(a,l={interpolation:{}}){this.formatSeparator=l.interpolation.form... method add (line 229) | add(a,l){this.formats[a.toLowerCase().trim()]=l} method addCached (line 229) | addCached(a,l){this.formats[a.toLowerCase().trim()]=uy(l)} method format (line 229) | format(a,l,r,u={}){const f=l.split(this.formatSeparator);if(f.length>1... class g5 (line 229) | class g5 extends Nr{constructor(a,l,r,u={}){var f,d;super(),this.backend... method constructor (line 229) | constructor(a,l,r,u={}){var f,d;super(),this.backend=a,this.store=l,th... method queueLoad (line 229) | queueLoad(a,l,r,u){const f={},d={},h={},y={};return a.forEach(p=>{let ... method loaded (line 229) | loaded(a,l,r){const u=a.split("|"),f=u[0],d=u[1];l&&this.emit("failedL... method read (line 229) | read(a,l,r,u=0,f=this.retryTimeout,d){if(!a.length)return d(null,{});i... method prepareLoading (line 229) | prepareLoading(a,l,r={},u){if(!this.backend)return this.logger.warn("N... method load (line 229) | load(a,l,r){this.prepareLoading(a,l,{},r)} method reload (line 229) | reload(a,l,r){this.prepareLoading(a,l,{reload:!0},r)} method loadOne (line 229) | loadOne(a,l=""){const r=a.split("|"),u=r[0],f=r[1];this.read(u,f,"read... method saveMissing (line 229) | saveMissing(a,l,r,u,f,d={},h=()=>{}){var y,p,v,b,w;if((p=(y=this.servi... class Ns (line 229) | class Ns extends Nr{constructor(a={},l){if(super(),this.options=cy(a),th... method constructor (line 229) | constructor(a={},l){if(super(),this.options=cy(a),this.services={},thi... method init (line 229) | init(a={},l){this.isInitializing=!0,typeof a=="function"&&(l=a,a={}),a... method loadResources (line 229) | loadResources(a,l=sr){var f,d;let r=l;const u=se(a)?a:this.language;if... method reloadResources (line 229) | reloadResources(a,l,r){const u=bs();return typeof a=="function"&&(r=a,... method use (line 229) | use(a){if(!a)throw new Error("You are passing an undefined module! Ple... method setResolvedLanguage (line 229) | setResolvedLanguage(a){if(!(!a||!this.languages)&&!(["cimode","dev"].i... method changeLanguage (line 229) | changeLanguage(a,l){this.isLanguageChangingTo=a;const r=bs();this.emit... method getFixedT (line 229) | getFixedT(a,l,r){const u=(f,d,...h)=>{let y;typeof d!="object"?y=this.... method t (line 229) | t(...a){var l;return(l=this.translator)==null?void 0:l.translate(...a)} method exists (line 229) | exists(...a){var l;return(l=this.translator)==null?void 0:l.exists(...a)} method setDefaultNamespace (line 229) | setDefaultNamespace(a){this.options.defaultNS=a} method hasLoadedNamespace (line 229) | hasLoadedNamespace(a,l={}){if(!this.isInitialized)return this.logger.w... method loadNamespaces (line 229) | loadNamespaces(a,l){const r=bs();return this.options.ns?(se(a)&&(a=[a]... method loadLanguages (line 229) | loadLanguages(a,l){const r=bs();se(a)&&(a=[a]);const u=this.options.pr... method dir (line 229) | dir(a){var u,f;if(a||(a=this.resolvedLanguage||(((u=this.languages)==n... method createInstance (line 229) | static createInstance(a={},l){const r=new Ns(a,l);return r.createInsta... method cloneInstance (line 229) | cloneInstance(a={},l=sr){const r=a.forkResourceStore;r&&delete a.forkR... method toJSON (line 229) | toJSON(){return{options:this.options,store:this.store,language:this.la... function T5 (line 229) | function T5(i){return w5.call(S5.call(arguments,1),a=>{if(a)for(const l ... function A5 (line 229) | function A5(i){return typeof i!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s... method create (line 229) | create(i,a,l,r){let u=arguments.length>4&&arguments[4]!==void 0?argument... method read (line 229) | read(i){const a=`${i}=`,l=document.cookie.split(";");for(let r=0;r"u")return... method lookup (line 229) | lookup(i){var u,f;let{lookupFromSubdomainIndex:a}=i;const l=typeof a=="n... class gv (line 229) | class gv{constructor(a){let l=arguments.length>1&&arguments[1]!==void 0?... method constructor (line 229) | constructor(a){let l=arguments.length>1&&arguments[1]!==void 0?argumen... method init (line 229) | init(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{l... method addDetector (line 229) | addDetector(a){return this.detectors[a.name]=a,this} method detect (line 229) | detect(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:... method cacheUserLanguage (line 229) | cacheUserLanguage(a){let l=arguments.length>1&&arguments[1]!==void 0?a... function s3 (line 229) | function s3(i){var l;const a=((l=(i||"en").split("-")[0])==null?void 0:l... function l3 (line 229) | async function l3(i){const a=s3(i);if(py.has(a))return a;const l=i3[`./l... function r3 (line 229) | async function r3(){if(Ke.isInitialized)return;await Ke.use(gv).init({re... function S (line 229) | function S(i,a){return Ke.t(i,a)} function d3 (line 229) | function d3(){if(!window.turnstile)return 0;let i=0;return document.quer... function bv (line 229) | function bv(){return new URLSearchParams(window.location.search).get("re... function h3 (line 229) | function h3(i){return String(i??"").replace(/[&<>"']/g,a=>({"&":"&",... function m3 (line 229) | function m3(i,a){if(a.referralCode==null&&a.status==null){const v=i.quer... function Sv (line 229) | async function Sv(i,a){var y;const l=a.querySelector('button[type="submi... function L3 (line 229) | function L3(){const[i,a]=te.useState(()=>window.location.hash.startsWith... FILE: scripts/_clustering.mjs constant SIMILARITY_THRESHOLD (line 3) | const SIMILARITY_THRESHOLD = 0.5; constant STOP_WORDS (line 5) | const STOP_WORDS = new Set([ constant MILITARY_KEYWORDS (line 17) | const MILITARY_KEYWORDS = [ constant VIOLENCE_KEYWORDS (line 23) | const VIOLENCE_KEYWORDS = [ constant UNREST_KEYWORDS (line 29) | const UNREST_KEYWORDS = [ constant FLASHPOINT_KEYWORDS (line 35) | const FLASHPOINT_KEYWORDS = [ constant CRISIS_KEYWORDS (line 41) | const CRISIS_KEYWORDS = [ constant DEMOTE_KEYWORDS (line 47) | const DEMOTE_KEYWORDS = [ function tokenize (line 52) | function tokenize(text) { function jaccardSimilarity (line 61) | function jaccardSimilarity(a, b) { function clusterItems (line 71) | function clusterItems(items) { function countMatches (line 134) | function countMatches(text, keywords) { function scoreImportance (line 138) | function scoreImportance(cluster) { function selectTopStories (line 173) | function selectTopStories(clusters, maxCount = 8) { FILE: scripts/_military-surges.mjs constant DEFAULT_SURGE_THRESHOLD (line 1) | const DEFAULT_SURGE_THRESHOLD = 2; constant DEFAULT_TOTAL_SURGE_THRESHOLD (line 2) | const DEFAULT_TOTAL_SURGE_THRESHOLD = 1.5; constant MIN_HISTORY_POINTS (line 3) | const MIN_HISTORY_POINTS = 3; constant BASELINE_WINDOW (line 4) | const BASELINE_WINDOW = 12; function average (line 6) | function average(values) { function round (line 11) | function round(value, digits = 2) { function sortCounts (line 15) | function sortCounts(record = {}) { function normalizeSourceFamily (line 21) | function normalizeSourceFamily(sourceVersion = '') { function getComparableTheaterSnapshots (line 26) | function getComparableTheaterSnapshots(history, theaterId, sourceVersion... function countPersistentSnapshots (line 39) | function countPersistentSnapshots(snapshots, field, baseline, minCount, ... function summarizeMilitaryTheaters (line 45) | function summarizeMilitaryTheaters(flights, theaters, assessedAt = Date.... function buildMilitarySurges (line 97) | function buildMilitarySurges(theaterSummaries, history, opts = {}) { function appendMilitaryHistory (line 188) | function appendMilitaryHistory(history, historyEntry, maxRuns = 72) { FILE: scripts/_prediction-scoring.mjs constant EXCLUDE_KEYWORDS (line 3) | const EXCLUDE_KEYWORDS = predictionTags.excludeKeywords; constant MEME_PATTERNS (line 5) | const MEME_PATTERNS = [ constant REGION_PATTERNS (line 10) | const REGION_PATTERNS = { function isExcluded (line 20) | function isExcluded(title) { function isMemeCandidate (line 25) | function isMemeCandidate(title, yesPrice) { function tagRegions (line 30) | function tagRegions(title) { function parseYesPrice (line 36) | function parseYesPrice(market) { function shouldInclude (line 47) | function shouldInclude(m, relaxed = false) { function scoreMarket (line 57) | function scoreMarket(m) { function isExpired (line 63) | function isExpired(endDate) { function filterAndScore (line 69) | function filterAndScore(candidates, tagFilter, limit = 25) { FILE: scripts/_r2-storage.mjs function loadS3SDK (line 4) | async function loadS3SDK() { function getEnvValue (line 14) | function getEnvValue(env, keys) { function parseBoolean (line 21) | function parseBoolean(value, fallback) { function sleep (line 29) | function sleep(ms) { function summarizeError (line 33) | function summarizeError(err) { function isRetryableApiStatus (line 37) | function isRetryableApiStatus(status) { function isRetryableR2Error (line 41) | function isRetryableR2Error(err) { function withR2Retry (line 64) | async function withR2Retry(operation, context = {}) { function resolveR2StorageConfig (line 82) | function resolveR2StorageConfig(env = process.env, options = {}) { constant CLIENT_CACHE (line 127) | const CLIENT_CACHE = new Map(); function getR2StorageClient (line 129) | async function getR2StorageClient(config) { function putR2JsonObject (line 151) | async function putR2JsonObject(config, key, payload, metadata = {}) { function getR2JsonObject (line 197) | async function getR2JsonObject(config, key) { FILE: scripts/_seed-utils.mjs constant CHROME_UA (line 7) | const CHROME_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit... constant MAX_PAYLOAD_BYTES (line 8) | const MAX_PAYLOAD_BYTES = 5 * 1024 * 1024; function loadSharedConfig (line 14) | function loadSharedConfig(filename) { function loadEnvFile (line 22) | function loadEnvFile(metaUrl) { function maskToken (line 50) | function maskToken(token) { function getRedisCredentials (line 55) | function getRedisCredentials() { function redisCommand (line 65) | async function redisCommand(url, token, command) { function redisGet (line 79) | async function redisGet(url, token, key) { function redisSet (line 89) | async function redisSet(url, token, key, value, ttlSeconds) { function redisDel (line 97) | async function redisDel(url, token, key) { function isTransientRedisError (line 104) | function isTransientRedisError(err) { function acquireLock (line 112) | async function acquireLock(domain, runId, ttlMs) { function acquireLockSafely (line 119) | async function acquireLockSafely(domain, runId, ttlMs, opts = {}) { function releaseLock (line 133) | async function releaseLock(domain, runId) { function atomicPublish (line 144) | async function atomicPublish(canonicalKey, data, validateFn, ttlSeconds) { function writeFreshnessMetadata (line 178) | async function writeFreshnessMetadata(domain, resource, count, source) { function withRetry (line 190) | async function withRetry(fn, maxRetries = 3, delayMs = 1000) { function logSeedResult (line 208) | function logSeedResult(domain, count, durationMs, extra = {}) { function verifySeedKey (line 219) | async function verifySeedKey(key) { function writeExtraKey (line 225) | async function writeExtraKey(key, data, ttl) { function writeExtraKeyWithMeta (line 238) | async function writeExtraKeyWithMeta(key, data, ttl, recordCount, metaKe... function extendExistingTtl (line 252) | async function extendExistingTtl(keys, ttlSeconds = 600) { function sleep (line 281) | function sleep(ms) { function parseYahooChart (line 285) | function parseYahooChart(data, symbol) { function runSeed (line 299) | async function runSeed(domain, resource, canonicalKey, fetchFn, opts = {... FILE: scripts/_trade-parse-utils.mjs constant BUDGET_LAB_TARIFFS_URL (line 6) | const BUDGET_LAB_TARIFFS_URL = 'https://budgetlab.yale.edu/research/trac... constant MONTH_MAP (line 8) | const MONTH_MAP = { function htmlToPlainText (line 14) | function htmlToPlainText(html) { function toIsoDate (line 31) | function toIsoDate(value) { function parseBudgetLabEffectiveTariffHtml (line 53) | function parseBudgetLabEffectiveTariffHtml(html) { FILE: scripts/ais-relay-rss.test.cjs function listen (line 15) | function listen(server, port = 0) { function fetch (line 23) | function fetch(url) { function createMockUpstream (line 41) | function createMockUpstream() { function createTestRssProxy (line 85) | function createTestRssProxy(upstreamPort) { FILE: scripts/ais-relay.cjs function requireShared (line 23) | function requireShared(name) { constant RSS_ALLOWED_DOMAINS (line 28) | const RSS_ALLOWED_DOMAINS = new Set(requireShared('rss-allowed-domains.c... constant AISSTREAM_URL (line 34) | const AISSTREAM_URL = 'wss://stream.aisstream.io/v0/stream'; constant API_KEY (line 35) | const API_KEY = process.env.AISSTREAM_API_KEY || process.env.VITE_AISSTR... constant PORT (line 36) | const PORT = process.env.PORT || 3004; constant MAX_WS_CLIENTS (line 44) | const MAX_WS_CLIENTS = 10; constant UPSTREAM_QUEUE_HIGH_WATER (line 45) | const UPSTREAM_QUEUE_HIGH_WATER = Math.max(500, Number(process.env.AIS_U... constant UPSTREAM_QUEUE_LOW_WATER (line 46) | const UPSTREAM_QUEUE_LOW_WATER = Math.max( constant UPSTREAM_QUEUE_HARD_CAP (line 50) | const UPSTREAM_QUEUE_HARD_CAP = Math.max( constant UPSTREAM_DRAIN_BATCH (line 54) | const UPSTREAM_DRAIN_BATCH = Math.max(1, Number(process.env.AIS_UPSTREAM... constant UPSTREAM_DRAIN_BUDGET_MS (line 55) | const UPSTREAM_DRAIN_BUDGET_MS = Math.max(2, Number(process.env.AIS_UPST... function safeInt (line 56) | function safeInt(envVal, fallback, min) { constant MAX_VESSELS (line 61) | const MAX_VESSELS = safeInt(process.env.AIS_MAX_VESSELS, 20000, 1000); constant MAX_VESSEL_HISTORY (line 62) | const MAX_VESSEL_HISTORY = safeInt(process.env.AIS_MAX_VESSEL_HISTORY, 2... constant MAX_DENSITY_CELLS (line 63) | const MAX_DENSITY_CELLS = 5000; constant MEMORY_CLEANUP_THRESHOLD_GB (line 64) | const MEMORY_CLEANUP_THRESHOLD_GB = (() => { constant RELAY_SHARED_SECRET (line 68) | const RELAY_SHARED_SECRET = process.env.RELAY_SHARED_SECRET || ''; constant RELAY_AUTH_HEADER (line 69) | const RELAY_AUTH_HEADER = (process.env.RELAY_AUTH_HEADER || 'x-relay-key... constant ALLOW_UNAUTHENTICATED_RELAY (line 70) | const ALLOW_UNAUTHENTICATED_RELAY = process.env.ALLOW_UNAUTHENTICATED_RE... constant IS_PRODUCTION_RELAY (line 71) | const IS_PRODUCTION_RELAY = process.env.NODE_ENV === 'production' constant RELAY_RATE_LIMIT_WINDOW_MS (line 75) | const RELAY_RATE_LIMIT_WINDOW_MS = Math.max(1000, Number(process.env.REL... constant RELAY_RATE_LIMIT_MAX (line 76) | const RELAY_RATE_LIMIT_MAX = Number.isFinite(Number(process.env.RELAY_RA... constant RELAY_OPENSKY_RATE_LIMIT_MAX (line 78) | const RELAY_OPENSKY_RATE_LIMIT_MAX = Number.isFinite(Number(process.env.... constant RELAY_RSS_RATE_LIMIT_MAX (line 80) | const RELAY_RSS_RATE_LIMIT_MAX = Number.isFinite(Number(process.env.RELA... constant RELAY_LOG_THROTTLE_MS (line 82) | const RELAY_LOG_THROTTLE_MS = Math.max(1000, Number(process.env.RELAY_LO... constant ALLOW_VERCEL_PREVIEW_ORIGINS (line 83) | const ALLOW_VERCEL_PREVIEW_ORIGINS = process.env.ALLOW_VERCEL_PREVIEW_OR... constant OPENSKY_PROXY_AUTH (line 86) | const OPENSKY_PROXY_AUTH = process.env.OPENSKY_PROXY_AUTH || process.env... constant OPENSKY_PROXY_ENABLED (line 87) | const OPENSKY_PROXY_ENABLED = !!OPENSKY_PROXY_AUTH; constant OREF_PROXY_AUTH (line 90) | const OREF_PROXY_AUTH = process.env.OREF_PROXY_AUTH || ''; constant OREF_ALERTS_URL (line 91) | const OREF_ALERTS_URL = 'https://www.oref.org.il/WarningMessages/alert/a... constant OREF_HISTORY_URL (line 92) | const OREF_HISTORY_URL = 'https://www.oref.org.il/WarningMessages/alert/... constant OREF_POLL_INTERVAL_MS (line 93) | const OREF_POLL_INTERVAL_MS = Math.max(30_000, Number(process.env.OREF_P... constant OREF_ENABLED (line 94) | const OREF_ENABLED = !!OREF_PROXY_AUTH; constant OREF_DATA_DIR (line 95) | const OREF_DATA_DIR = process.env.OREF_DATA_DIR || ''; constant OREF_LOCAL_FILE (line 96) | const OREF_LOCAL_FILE = (() => { constant RELAY_OREF_RATE_LIMIT_MAX (line 105) | const RELAY_OREF_RATE_LIMIT_MAX = Number.isFinite(Number(process.env.REL... constant UPSTASH_REDIS_REST_URL (line 118) | const UPSTASH_REDIS_REST_URL = process.env.UPSTASH_REDIS_REST_URL || ''; constant UPSTASH_REDIS_REST_TOKEN (line 119) | const UPSTASH_REDIS_REST_TOKEN = process.env.UPSTASH_REDIS_REST_TOKEN ||... constant UPSTASH_ENABLED (line 120) | const UPSTASH_ENABLED = !!( constant RELAY_ENV_PREFIX (line 125) | const RELAY_ENV_PREFIX = process.env.RELAY_ENV ? `${process.env.RELAY_EN... constant OREF_REDIS_KEY (line 126) | const OREF_REDIS_KEY = `${RELAY_ENV_PREFIX}relay:oref:history:v1`; constant CHROME_UA (line 127) | const CHROME_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit... function upstashGet (line 136) | function upstashGet(key) { function upstashSet (line 165) | function upstashSet(key, value, ttlSeconds) { function upstashExpire (line 193) | function upstashExpire(key, ttlSeconds) { function upstashMGet (line 221) | function upstashMGet(keys) { function safeEnd (line 268) | function safeEnd(res, statusCode, headers, body) { function _acceptsEncoding (line 279) | function _acceptsEncoding(header, encoding) { function _varyHeader (line 292) | function _varyHeader(res) { function sendCompressed (line 300) | function sendCompressed(req, res, statusCode, headers, body) { function sendPreGzipped (line 326) | function sendPreGzipped(req, res, statusCode, headers, rawBody, gzippedB... constant TELEGRAM_ENABLED (line 346) | const TELEGRAM_ENABLED = Boolean(process.env.TELEGRAM_API_ID && process.... constant TELEGRAM_POLL_INTERVAL_MS (line 347) | const TELEGRAM_POLL_INTERVAL_MS = Math.max(15_000, Number(process.env.TE... constant TELEGRAM_MAX_FEED_ITEMS (line 348) | const TELEGRAM_MAX_FEED_ITEMS = Math.max(50, Number(process.env.TELEGRAM... constant TELEGRAM_MAX_TEXT_CHARS (line 349) | const TELEGRAM_MAX_TEXT_CHARS = Math.max(200, Number(process.env.TELEGRA... function loadTelegramChannels (line 377) | function loadTelegramChannels() { function normalizeTelegramMessage (line 412) | function normalizeTelegramMessage(msg, channel) { function initTelegramClientIfNeeded (line 432) | async function initTelegramClientIfNeeded() { constant TELEGRAM_CHANNEL_TIMEOUT_MS (line 476) | const TELEGRAM_CHANNEL_TIMEOUT_MS = 15_000; constant TELEGRAM_POLL_CYCLE_TIMEOUT_MS (line 477) | const TELEGRAM_POLL_CYCLE_TIMEOUT_MS = 180_000; function withTimeout (line 479) | function withTimeout(promise, ms, label) { function pollTelegramOnce (line 489) | async function pollTelegramOnce() { function guardedTelegramPoll (line 576) | function guardedTelegramPoll() { constant TELEGRAM_STARTUP_DELAY_MS (line 593) | const TELEGRAM_STARTUP_DELAY_MS = Math.max(0, Number(process.env.TELEGRA... function startTelegramPollLoop (line 595) | function startTelegramPollLoop() { function stripBom (line 617) | function stripBom(text) { function redactOrefError (line 621) | function redactOrefError(msg) { function orefDateToUTC (line 625) | function orefDateToUTC(dateStr) { function orefCurlFetch (line 648) | function orefCurlFetch(proxyAuth, url, { toFile } = {}) { function orefFetchAlerts (line 672) | async function orefFetchAlerts() { function orefPreSerializeResponses (line 726) | function orefPreSerializeResponses() { function orefBootstrapHistoryFromUpstream (line 748) | async function orefBootstrapHistoryFromUpstream() { constant OREF_PERSIST_MAX_WAVES (line 803) | const OREF_PERSIST_MAX_WAVES = 200; constant OREF_PERSIST_TTL_SECONDS (line 804) | const OREF_PERSIST_TTL_SECONDS = 7 * 24 * 60 * 60; function orefPersistHistory (line 806) | async function orefPersistHistory() { function orefLoadLocalHistory (line 835) | function orefLoadLocalHistory() { function orefSaveLocalHistory (line 861) | function orefSaveLocalHistory() { function orefBootstrapHistoryWithRetry (line 883) | async function orefBootstrapHistoryWithRetry() { function startOrefPollLoop (line 962) | async function startOrefPollLoop() { constant UCDP_ACCESS_TOKEN (line 979) | const UCDP_ACCESS_TOKEN = (process.env.UCDP_ACCESS_TOKEN || process.env.... constant UCDP_REDIS_KEY (line 980) | const UCDP_REDIS_KEY = 'conflict:ucdp-events:v1'; constant UCDP_PAGE_SIZE (line 981) | const UCDP_PAGE_SIZE = 1000; constant UCDP_MAX_PAGES (line 982) | const UCDP_MAX_PAGES = 6; constant UCDP_MAX_EVENTS (line 983) | const UCDP_MAX_EVENTS = 2000; constant UCDP_TRAILING_WINDOW_MS (line 984) | const UCDP_TRAILING_WINDOW_MS = 365 * 24 * 60 * 60 * 1000; constant UCDP_POLL_INTERVAL_MS (line 985) | const UCDP_POLL_INTERVAL_MS = 6 * 60 * 60 * 1000; constant UCDP_TTL_SECONDS (line 986) | const UCDP_TTL_SECONDS = 86400; constant UCDP_VIOLENCE_TYPE_MAP (line 987) | const UCDP_VIOLENCE_TYPE_MAP = { 1: 'UCDP_VIOLENCE_TYPE_STATE_BASED', 2:... function ucdpFetchPage (line 989) | function ucdpFetchPage(version, page) { function ucdpDiscoverVersion (line 1019) | async function ucdpDiscoverVersion() { function seedUcdpEvents (line 1036) | async function seedUcdpEvents() { function startUcdpSeedLoop (line 1113) | async function startUcdpSeedLoop() { constant SAT_SEED_INTERVAL_MS (line 1128) | const SAT_SEED_INTERVAL_MS = 7_200_000; constant SAT_SEED_TTL (line 1129) | const SAT_SEED_TTL = 14_400; constant SAT_GROUPS (line 1130) | const SAT_GROUPS = ['military', 'resource']; constant SAT_NAME_FILTERS (line 1132) | const SAT_NAME_FILTERS = [ function satClassify (line 1145) | function satClassify(name) { function seedSatelliteTLEs (line 1166) | async function seedSatelliteTLEs() { function startSatelliteSeedLoop (line 1239) | async function startSatelliteSeedLoop() { constant FINNHUB_API_KEY (line 1255) | const FINNHUB_API_KEY = process.env.FINNHUB_API_KEY || ''; constant MARKET_SEED_INTERVAL_MS (line 1256) | const MARKET_SEED_INTERVAL_MS = 300_000; constant MARKET_SEED_TTL (line 1257) | const MARKET_SEED_TTL = 1800; constant MARKET_SYMBOLS (line 1260) | const MARKET_SYMBOLS = [ constant COMMODITY_SYMBOLS (line 1267) | const COMMODITY_SYMBOLS = ['^VIX', 'GC=F', 'CL=F', 'NG=F', 'SI=F', 'HG=F']; constant SECTOR_SYMBOLS (line 1269) | const SECTOR_SYMBOLS = ['XLK', 'XLF', 'XLE', 'XLV', 'XLY', 'XLI', 'XLP',... constant YAHOO_ONLY (line 1271) | const YAHOO_ONLY = new Set(['^GSPC', '^DJI', '^IXIC', '^VIX', 'GC=F', 'C... function fetchYahooChartDirect (line 1273) | function fetchYahooChartDirect(symbol) { function fetchFinnhubQuoteDirect (line 1307) | function fetchFinnhubQuoteDirect(symbol, apiKey) { function sleep (line 1333) | function sleep(ms) { return new Promise((r) => setTimeout(r, ms)); } function seedMarketQuotes (line 1335) | async function seedMarketQuotes() { function seedCommodityQuotes (line 1377) | async function seedCommodityQuotes() { function seedSectorSummary (line 1416) | async function seedSectorSummary() { constant GULF_SYMBOLS (line 1457) | const GULF_SYMBOLS = [ constant GULF_SEED_TTL (line 1473) | const GULF_SEED_TTL = 5400; function seedGulfQuotes (line 1475) | async function seedGulfQuotes() { constant ETF_LIST (line 1497) | const ETF_LIST = [ constant ETF_SEED_TTL (line 1504) | const ETF_SEED_TTL = 5400; function parseEtfChart (line 1506) | function parseEtfChart(chart, ticker, issuer) { function seedEtfFlows (line 1522) | async function seedEtfFlows() { constant CRYPTO_IDS (line 1558) | const CRYPTO_IDS = _cryptoCfg.ids; constant CRYPTO_META (line 1559) | const CRYPTO_META = _cryptoCfg.meta; constant CRYPTO_PAPRIKA_MAP (line 1560) | const CRYPTO_PAPRIKA_MAP = _cryptoCfg.coinpaprika; constant CRYPTO_SEED_TTL (line 1561) | const CRYPTO_SEED_TTL = 3600; function fetchCryptoCoinPaprika (line 1563) | async function fetchCryptoCoinPaprika() { function seedCryptoQuotes (line 1575) | async function seedCryptoQuotes() { constant STABLECOIN_IDS (line 1605) | const STABLECOIN_IDS = 'tether,usd-coin,dai,first-digital-usd,ethena-usde'; constant STABLECOIN_PAPRIKA_MAP (line 1606) | const STABLECOIN_PAPRIKA_MAP = { tether: 'usdt-tether', 'usd-coin': 'usd... constant STABLECOIN_SEED_TTL (line 1607) | const STABLECOIN_SEED_TTL = 3600; function fetchStablecoinCoinPaprika (line 1609) | async function fetchStablecoinCoinPaprika() { function seedStablecoinMarkets (line 1624) | async function seedStablecoinMarkets() { function seedAllMarketData (line 1654) | async function seedAllMarketData() { function startMarketDataSeedLoop (line 1666) | async function startMarketDataSeedLoop() { constant AVIATIONSTACK_API_KEY (line 1686) | const AVIATIONSTACK_API_KEY = process.env.AVIATIONSTACK_API || ''; constant AVIATION_SEED_INTERVAL_MS (line 1687) | const AVIATION_SEED_INTERVAL_MS = 30 * 60 * 1000; constant AVIATION_SEED_TTL (line 1688) | const AVIATION_SEED_TTL = 10800; constant AVIATION_REDIS_KEY (line 1689) | const AVIATION_REDIS_KEY = 'aviation:delays:intl:v3'; constant AVIATION_BATCH_CONCURRENCY (line 1690) | const AVIATION_BATCH_CONCURRENCY = 10; constant AVIATION_MIN_FLIGHTS_FOR_CLOSURE (line 1691) | const AVIATION_MIN_FLIGHTS_FOR_CLOSURE = 10; constant RESOLVED_STATUSES (line 1692) | const RESOLVED_STATUSES = new Set(['cancelled', 'landed', 'active', 'arr... constant AVIATIONSTACK_AIRPORTS (line 1695) | const AVIATIONSTACK_AIRPORTS = [ constant AIRPORT_META (line 1706) | const AIRPORT_META = { constant REGION_MAP (line 1762) | const REGION_MAP = { constant DELAY_TYPE_MAP (line 1770) | const DELAY_TYPE_MAP = { constant SEVERITY_MAP (line 1779) | const SEVERITY_MAP = { function aviationDetermineSeverity (line 1787) | function aviationDetermineSeverity(avgDelay, delayedPct) { function fetchAviationStackSingle (line 1795) | function fetchAviationStackSingle(apiKey, iata) { function aviationAggregateFlights (line 1832) | function aviationAggregateFlights(iata, flights) { function seedAviationDelays (line 1895) | async function seedAviationDelays() { function startAviationSeedLoop (line 1936) | async function startAviationSeedLoop() { constant NOTAM_SEED_INTERVAL_MS (line 1956) | const NOTAM_SEED_INTERVAL_MS = 30 * 60 * 1000; constant NOTAM_SEED_TTL (line 1957) | const NOTAM_SEED_TTL = 10800; constant NOTAM_REDIS_KEY (line 1958) | const NOTAM_REDIS_KEY = 'aviation:notam:closures:v2'; constant NOTAM_CLOSURE_QCODES (line 1959) | const NOTAM_CLOSURE_QCODES = new Set(['FA', 'AH', 'AL', 'AW', 'AC', 'AM']); constant NOTAM_MONITORED_ICAO (line 1960) | const NOTAM_MONITORED_ICAO = [ function fetchIcaoNotams (line 1979) | function fetchIcaoNotams() { function seedNotamClosures (line 2016) | async function seedNotamClosures() { function startNotamSeedLoop (line 2061) | function startNotamSeedLoop() { constant URLHAUS_AUTH_KEY (line 2081) | const URLHAUS_AUTH_KEY = process.env.URLHAUS_AUTH_KEY || ''; constant OTX_API_KEY (line 2082) | const OTX_API_KEY = process.env.OTX_API_KEY || ''; constant ABUSEIPDB_API_KEY (line 2083) | const ABUSEIPDB_API_KEY = process.env.ABUSEIPDB_API_KEY || ''; constant CYBER_SEED_INTERVAL_MS (line 2084) | const CYBER_SEED_INTERVAL_MS = 2 * 60 * 60 * 1000; constant CYBER_SEED_TTL (line 2085) | const CYBER_SEED_TTL = 14400; constant CYBER_RPC_KEY (line 2086) | const CYBER_RPC_KEY = 'cyber:threats:v2'; constant CYBER_BOOTSTRAP_KEY (line 2087) | const CYBER_BOOTSTRAP_KEY = 'cyber:threats-bootstrap:v2'; constant CYBER_MAX_CACHED (line 2088) | const CYBER_MAX_CACHED = 2000; constant CYBER_GEO_MAX (line 2089) | const CYBER_GEO_MAX = 200; constant CYBER_GEO_CONCURRENCY (line 2090) | const CYBER_GEO_CONCURRENCY = 12; constant CYBER_GEO_TIMEOUT_MS (line 2091) | const CYBER_GEO_TIMEOUT_MS = 20_000; constant CYBER_SOURCE_TIMEOUT_MS (line 2092) | const CYBER_SOURCE_TIMEOUT_MS = 15_000; constant CYBER_COUNTRY_CENTROIDS (line 2094) | const CYBER_COUNTRY_CENTROIDS = { constant CYBER_THREAT_TYPE_MAP (line 2116) | const CYBER_THREAT_TYPE_MAP = { c2_server:'CYBER_THREAT_TYPE_C2_SERVER',... constant CYBER_SOURCE_MAP (line 2117) | const CYBER_SOURCE_MAP = { feodo:'CYBER_THREAT_SOURCE_FEODO', urlhaus:'C... constant CYBER_INDICATOR_MAP (line 2118) | const CYBER_INDICATOR_MAP = { ip:'CYBER_THREAT_INDICATOR_TYPE_IP', domai... constant CYBER_SEVERITY_MAP (line 2119) | const CYBER_SEVERITY_MAP = { low:'CRITICALITY_LEVEL_LOW', medium:'CRITIC... constant CYBER_SEVERITY_RANK (line 2120) | const CYBER_SEVERITY_RANK = { CRITICALITY_LEVEL_CRITICAL:4, CRITICALITY_... function cyberClean (line 2122) | function cyberClean(v, max) { if (typeof v !== 'string') return ''; retu... function cyberToNum (line 2123) | function cyberToNum(v) { const n = typeof v === 'number' ? v : parseFloa... function cyberValidCoords (line 2124) | function cyberValidCoords(lat, lon) { return lat !== null && lon !== nul... function cyberIsIPv4 (line 2125) | function cyberIsIPv4(v) { if (!/^(\d{1,3}\.){3}\d{1,3}$/.test(v)) return... function cyberIsIPv6 (line 2126) | function cyberIsIPv6(v) { return /^[0-9a-f:]+$/i.test(v) && v.includes('... function cyberIsIp (line 2127) | function cyberIsIp(v) { return cyberIsIPv4(v) || cyberIsIPv6(v); } function cyberNormCountry (line 2128) | function cyberNormCountry(v) { const r = cyberClean(String(v ?? ''), 64)... function cyberToMs (line 2129) | function cyberToMs(v) { function cyberNormTags (line 2136) | function cyberNormTags(input, max) { function cyberDjb2 (line 2142) | function cyberDjb2(s) { let h = 5381; for (let i = 0; i < s.length; i++)... function cyberCentroid (line 2143) | function cyberCentroid(cc, seed) { function cyberSanitize (line 2148) | function cyberSanitize(t) { function cyberDedupe (line 2153) | function cyberDedupe(threats) { function cyberToProto (line 2163) | function cyberToProto(t) { function cyberHttpGetJson (line 2167) | function cyberHttpGetJson(url, reqHeaders, timeoutMs) { function cyberHttpGetText (line 2179) | function cyberHttpGetText(url, reqHeaders, timeoutMs) { constant CYBER_GEO_CACHE_MAX (line 2192) | const CYBER_GEO_CACHE_MAX = 2048; function cyberGeoCacheSet (line 2194) | function cyberGeoCacheSet(ip, geo) { function cyberGeoLookup (line 2200) | async function cyberGeoLookup(ip) { function cyberHydrateGeo (line 2215) | async function cyberHydrateGeo(threats) { function cyberFetchFeodo (line 2249) | async function cyberFetchFeodo(limit, cutoffMs) { function cyberFetchUrlhaus (line 2271) | async function cyberFetchUrlhaus(limit, cutoffMs) { function cyberFetchC2Intel (line 2301) | async function cyberFetchC2Intel(limit) { function cyberFetchOtx (line 2323) | async function cyberFetchOtx(limit, days) { function cyberFetchAbuseIpDb (line 2340) | async function cyberFetchAbuseIpDb(limit) { function seedCyberThreats (line 2357) | async function seedCyberThreats() { function startCyberThreatsSeedLoop (line 2404) | async function startCyberThreatsSeedLoop() { constant POSITIVE_EVENTS_INTERVAL_MS (line 2420) | const POSITIVE_EVENTS_INTERVAL_MS = 900_000; constant POSITIVE_EVENTS_TTL (line 2421) | const POSITIVE_EVENTS_TTL = 2700; constant POSITIVE_EVENTS_RPC_KEY (line 2422) | const POSITIVE_EVENTS_RPC_KEY = 'positive-events:geo:v1'; constant POSITIVE_EVENTS_BOOTSTRAP_KEY (line 2423) | const POSITIVE_EVENTS_BOOTSTRAP_KEY = 'positive_events:geo-bootstrap:v1'; constant POSITIVE_EVENTS_MAX (line 2424) | const POSITIVE_EVENTS_MAX = 500; constant POSITIVE_QUERIES (line 2426) | const POSITIVE_QUERIES = [ constant POSITIVE_CATEGORY_KEYWORDS (line 2433) | const POSITIVE_CATEGORY_KEYWORDS = [ function classifyPositiveName (line 2456) | function classifyPositiveName(name) { function fetchGdeltGeoPositive (line 2464) | function fetchGdeltGeoPositive(query) { function seedPositiveEvents (line 2508) | async function seedPositiveEvents() { function startPositiveEventsSeedLoop (line 2549) | async function startPositiveEventsSeedLoop() { constant CLASSIFY_SEED_INTERVAL_MS (line 2565) | const CLASSIFY_SEED_INTERVAL_MS = 15 * 60 * 1000; constant CLASSIFY_CACHE_TTL (line 2566) | const CLASSIFY_CACHE_TTL = 86400; constant CLASSIFY_SKIP_TTL (line 2567) | const CLASSIFY_SKIP_TTL = 1800; constant CLASSIFY_BATCH_SIZE (line 2568) | const CLASSIFY_BATCH_SIZE = 50; constant CLASSIFY_VARIANTS (line 2569) | const CLASSIFY_VARIANTS = ['full', 'tech', 'finance', 'happy', 'commodit... constant CLASSIFY_VARIANT_STAGGER_MS (line 2570) | const CLASSIFY_VARIANT_STAGGER_MS = 3 * 60 * 1000; constant CLASSIFY_VALID_LEVELS (line 2572) | const CLASSIFY_VALID_LEVELS = ['critical', 'high', 'medium', 'low', 'inf... constant CLASSIFY_VALID_CATEGORIES (line 2573) | const CLASSIFY_VALID_CATEGORIES = [ constant CLASSIFY_SYSTEM_PROMPT (line 2579) | const CLASSIFY_SYSTEM_PROMPT = `You classify news headlines by threat le... function classifyCacheKey (line 2589) | function classifyCacheKey(title) { constant CLASSIFY_LLM_PROVIDERS (line 2596) | const CLASSIFY_LLM_PROVIDERS = [ function classifyFetchLlmSingle (line 2629) | function classifyFetchLlmSingle(titles, _apiKey, apiUrl, model, headers,... function classifyFetchLlm (line 2674) | async function classifyFetchLlm(titles) { function seedClassifyForVariant (line 2694) | async function seedClassifyForVariant(variant) { function seedClassify (line 2777) | async function seedClassify() { function startClassifySeedLoop (line 2811) | async function startClassifySeedLoop() { constant SERVICE_STATUSES_SEED_INTERVAL_MS (line 2828) | const SERVICE_STATUSES_SEED_INTERVAL_MS = 15 * 60 * 1000; constant SERVICE_STATUSES_RPC_URL (line 2829) | const SERVICE_STATUSES_RPC_URL = 'https://api.worldmonitor.app/api/infra... function seedServiceStatuses (line 2831) | async function seedServiceStatuses() { function startServiceStatusesSeedLoop (line 2857) | function startServiceStatusesSeedLoop() { constant THEATER_POSTURE_SEED_INTERVAL_MS (line 2871) | const THEATER_POSTURE_SEED_INTERVAL_MS = 600_000; constant THEATER_POSTURE_LIVE_KEY (line 2872) | const THEATER_POSTURE_LIVE_KEY = 'theater-posture:sebuf:v1'; constant THEATER_POSTURE_STALE_KEY (line 2873) | const THEATER_POSTURE_STALE_KEY = 'theater_posture:sebuf:stale:v1'; constant THEATER_POSTURE_BACKUP_KEY (line 2874) | const THEATER_POSTURE_BACKUP_KEY = 'theater-posture:sebuf:backup:v1'; constant THEATER_POSTURE_LIVE_TTL (line 2875) | const THEATER_POSTURE_LIVE_TTL = 1200; constant THEATER_POSTURE_STALE_TTL (line 2876) | const THEATER_POSTURE_STALE_TTL = 86400; constant THEATER_POSTURE_BACKUP_TTL (line 2877) | const THEATER_POSTURE_BACKUP_TTL = 604800; constant THEATER_MIL_PREFIXES (line 2879) | const THEATER_MIL_PREFIXES = [ constant THEATER_MIL_SHORT_PREFIXES (line 2896) | const THEATER_MIL_SHORT_PREFIXES = ['AE', 'RF', 'TF', 'PAT', 'SAM', 'OPS... constant THEATER_AIRLINE_CODES (line 2897) | const THEATER_AIRLINE_CODES = new Set([ function theaterIsMilCallsign (line 2903) | function theaterIsMilCallsign(callsign) { function theaterDetectAircraftType (line 2919) | function theaterDetectAircraftType(callsign) { constant POSTURE_THEATERS (line 2932) | const POSTURE_THEATERS = [ constant THEATER_QUERY_REGIONS (line 2944) | const THEATER_QUERY_REGIONS = [ function handleWingbitsTrackRequest (line 2949) | async function handleWingbitsTrackRequest(req, res) { function fetchTheaterFlightsFromOpenSky (line 3045) | async function fetchTheaterFlightsFromOpenSky() { function fetchTheaterFlightsFromWingbits (line 3077) | async function fetchTheaterFlightsFromWingbits() { function isStrictMilitaryVessel (line 3135) | function isStrictMilitaryVessel(v) { function countMilitaryVesselsInBounds (line 3145) | function countMilitaryVesselsInBounds(bounds) { function calculateTheaterPostures (line 3158) | function calculateTheaterPostures(flights) { function seedTheaterPosture (line 3188) | async function seedTheaterPosture() { function startTheaterPostureSeedLoop (line 3215) | function startTheaterPostureSeedLoop() { constant CII_WARM_PING_INTERVAL_MS (line 3235) | const CII_WARM_PING_INTERVAL_MS = 8 * 60 * 1000; constant CII_RPC_URL (line 3236) | const CII_RPC_URL = 'https://api.worldmonitor.app/api/intelligence/v1/ge... function seedCiiWarmPing (line 3238) | async function seedCiiWarmPing() { function startCiiWarmPingLoop (line 3262) | function startCiiWarmPingLoop() { constant CHOKEPOINT_WARM_PING_INTERVAL_MS (line 3276) | const CHOKEPOINT_WARM_PING_INTERVAL_MS = 30 * 60 * 1000; constant CHOKEPOINT_RPC_URL (line 3277) | const CHOKEPOINT_RPC_URL = 'https://api.worldmonitor.app/api/supply-chai... function seedChokepointWarmPing (line 3279) | async function seedChokepointWarmPing() { function startChokepointWarmPingLoop (line 3301) | function startChokepointWarmPingLoop() { constant CABLE_HEALTH_WARM_PING_INTERVAL_MS (line 3314) | const CABLE_HEALTH_WARM_PING_INTERVAL_MS = 30 * 60 * 1000; constant CABLE_HEALTH_RPC_URL (line 3315) | const CABLE_HEALTH_RPC_URL = 'https://api.worldmonitor.app/api/infrastru... function seedCableHealthWarmPing (line 3317) | async function seedCableHealthWarmPing() { function startCableHealthWarmPingLoop (line 3339) | function startCableHealthWarmPingLoop() { constant WEATHER_SEED_INTERVAL_MS (line 3350) | const WEATHER_SEED_INTERVAL_MS = 15 * 60 * 1000; constant WEATHER_REDIS_KEY (line 3351) | const WEATHER_REDIS_KEY = 'weather:alerts:v1'; constant WEATHER_CACHE_TTL (line 3352) | const WEATHER_CACHE_TTL = 5400; function seedWeatherAlerts (line 3355) | async function seedWeatherAlerts() { function startWeatherSeedLoop (line 3406) | async function startWeatherSeedLoop() { constant SPENDING_SEED_INTERVAL_MS (line 3421) | const SPENDING_SEED_INTERVAL_MS = 60 * 60 * 1000; constant SPENDING_REDIS_KEY (line 3422) | const SPENDING_REDIS_KEY = 'economic:spending:v1'; constant SPENDING_CACHE_TTL (line 3423) | const SPENDING_CACHE_TTL = 7200; function getDateDaysAgo (line 3426) | function getDateDaysAgo(days) { constant AWARD_TYPE_MAP (line 3432) | const AWARD_TYPE_MAP = { function seedUsaSpending (line 3438) | async function seedUsaSpending() { function startSpendingSeedLoop (line 3489) | async function startSpendingSeedLoop() { constant TECH_EVENTS_SEED_INTERVAL_MS (line 3508) | const TECH_EVENTS_SEED_INTERVAL_MS = 6 * 60 * 60 * 1000; constant TECH_EVENTS_TTL_SECONDS (line 3509) | const TECH_EVENTS_TTL_SECONDS = 86400; constant TECH_EVENTS_REDIS_KEY (line 3510) | const TECH_EVENTS_REDIS_KEY = 'research:tech-events:v1'; constant TECH_EVENTS_BOOTSTRAP_KEY (line 3511) | const TECH_EVENTS_BOOTSTRAP_KEY = 'research:tech-events-bootstrap:v1'; constant TECH_EVENTS_ICS_URL (line 3512) | const TECH_EVENTS_ICS_URL = 'https://www.techmeme.com/newsy_events.ics'; constant TECH_EVENTS_RSS_URL (line 3513) | const TECH_EVENTS_RSS_URL = 'https://dev.events/rss.xml'; constant TECH_EVENTS_CURATED (line 3515) | const TECH_EVENTS_CURATED = [ function techEventsParseICS (line 3522) | function techEventsParseICS(icsText) { function techEventsParseRSS (line 3556) | function techEventsParseRSS(rssText) { function techEventsFetchUrl (line 3598) | function techEventsFetchUrl(url) { function seedTechEvents (line 3627) | async function seedTechEvents() { function startTechEventsSeedLoop (line 3698) | async function startTechEventsSeedLoop() { constant WB_SEED_INTERVAL_MS (line 3714) | const WB_SEED_INTERVAL_MS = 24 * 60 * 60 * 1000; constant WB_TTL_SECONDS (line 3715) | const WB_TTL_SECONDS = 7 * 24 * 3600; constant WB_BOOTSTRAP_KEY (line 3716) | const WB_BOOTSTRAP_KEY = 'economic:worldbank-techreadiness:v1'; constant WB_PROGRESS_KEY (line 3717) | const WB_PROGRESS_KEY = 'economic:worldbank-progress:v1'; constant WB_RENEWABLE_KEY (line 3718) | const WB_RENEWABLE_KEY = 'economic:worldbank-renewable:v1'; constant WB_WEIGHTS (line 3720) | const WB_WEIGHTS = { internet: 30, mobile: 15, broadband: 20, rdSpend: 3... constant WB_NORMALIZE_MAX (line 3721) | const WB_NORMALIZE_MAX = { internet: 100, mobile: 150, broadband: 50, rd... constant WB_INDICATORS (line 3723) | const WB_INDICATORS = [ constant WB_PROGRESS_INDICATORS (line 3730) | const WB_PROGRESS_INDICATORS = [ constant WB_RENEWABLE_REGIONS (line 3737) | const WB_RENEWABLE_REGIONS = ['1W', 'EAS', 'ECS', 'LCN', 'MEA', 'NAC', '... constant WB_RENEWABLE_REGION_NAMES (line 3738) | const WB_RENEWABLE_REGION_NAMES = { function wbFetchJson (line 3744) | function wbFetchJson(url) { function wbFetchIndicator (line 3765) | async function wbFetchIndicator(indicatorId, dateRange) { function wbNormalize (line 3793) | function wbNormalize(val, max) { function wbComputeRankings (line 3798) | function wbComputeRankings(indicatorData) { function wbFetchProgress (line 3824) | async function wbFetchProgress() { function wbFetchRenewable (line 3850) | async function wbFetchRenewable() { function seedWorldBank (line 3888) | async function seedWorldBank() { function startWorldBankSeedLoop (line 3960) | async function startWorldBankSeedLoop() { constant PORTWATCH_ARCGIS_BASE (line 3972) | const PORTWATCH_ARCGIS_BASE = 'https://services9.arcgis.com/weJ1QsnbMYJl... constant PORTWATCH_PAGE_SIZE (line 3973) | const PORTWATCH_PAGE_SIZE = 2000; constant PORTWATCH_FETCH_TIMEOUT_MS (line 3974) | const PORTWATCH_FETCH_TIMEOUT_MS = 30000; constant PORTWATCH_REDIS_KEY (line 3975) | const PORTWATCH_REDIS_KEY = 'supply_chain:portwatch:v1'; constant PORTWATCH_TTL (line 3976) | const PORTWATCH_TTL = 43200; constant PORTWATCH_SEED_INTERVAL_MS (line 3977) | const PORTWATCH_SEED_INTERVAL_MS = 6 * 60 * 60 * 1000; constant PORTWATCH_CHOKEPOINT_NAMES (line 3978) | const PORTWATCH_CHOKEPOINT_NAMES = [ function pwFormatDate (line 3996) | function pwFormatDate(ts) { function pwComputeWowChangePct (line 4001) | function pwComputeWowChangePct(history) { function pwEpochToTimestamp (line 4012) | function pwEpochToTimestamp(epochMs) { function pwFetchAllPages (line 4018) | async function pwFetchAllPages(portname, sinceEpoch) { function pwBuildHistory (line 4049) | function pwBuildHistory(features) { function seedPortWatch (line 4062) | async function seedPortWatch() { function startPortWatchSeedLoop (line 4096) | async function startPortWatchSeedLoop() { constant CORRIDOR_RISK_BASE_URL (line 4108) | const CORRIDOR_RISK_BASE_URL = 'https://corridorrisk.io/api/corridors'; constant CORRIDOR_RISK_REDIS_KEY (line 4109) | const CORRIDOR_RISK_REDIS_KEY = 'supply_chain:corridorrisk:v1'; constant CORRIDOR_RISK_TTL (line 4110) | const CORRIDOR_RISK_TTL = 14400; constant CORRIDOR_RISK_SEED_INTERVAL_MS (line 4111) | const CORRIDOR_RISK_SEED_INTERVAL_MS = 60 * 60 * 1000; constant CORRIDOR_RISK_NAME_MAP (line 4113) | const CORRIDOR_RISK_NAME_MAP = [ function seedCorridorRisk (line 4124) | async function seedCorridorRisk() { function startCorridorRiskSeedLoop (line 4187) | async function startCorridorRiskSeedLoop() { constant USNI_URL (line 4203) | const USNI_URL = 'https://news.usni.org/wp-json/wp/v2/posts?categories=4... constant USNI_REDIS_KEY (line 4204) | const USNI_REDIS_KEY = 'usni-fleet:sebuf:v1'; constant USNI_STALE_KEY (line 4205) | const USNI_STALE_KEY = 'usni-fleet:sebuf:stale:v1'; constant USNI_TTL (line 4206) | const USNI_TTL = 43200; constant USNI_STALE_TTL (line 4207) | const USNI_STALE_TTL = 604800; constant USNI_SEED_INTERVAL_MS (line 4208) | const USNI_SEED_INTERVAL_MS = 6 * 60 * 60 * 1000; constant HULL_TYPE_MAP (line 4210) | const HULL_TYPE_MAP = { constant USNI_REGION_COORDS (line 4223) | const USNI_REGION_COORDS = { function usniStripHtml (line 4246) | function usniStripHtml(html) { function usniHullToType (line 4253) | function usniHullToType(hull) { function usniDetectStatus (line 4259) | function usniDetectStatus(text) { function usniGetRegionCoords (line 4268) | function usniGetRegionCoords(regionText) { function usniParseLeadingInt (line 4278) | function usniParseLeadingInt(text) { function usniExtractBattleForceSummary (line 4283) | function usniExtractBattleForceSummary(tableHtml) { function usniParseArticle (line 4301) | function usniParseArticle(html, articleUrl, articleDate, articleTitle) { function seedUsniFleet (line 4378) | async function seedUsniFleet() { function startUsniFleetSeedLoop (line 4428) | async function startUsniFleetSeedLoop() { function gzipSyncBuffer (line 4441) | function gzipSyncBuffer(body) { function brotliSyncBuffer (line 4449) | function brotliSyncBuffer(body) { function getClientIp (line 4460) | function getClientIp(req, isPublic = false) { function safeTokenEquals (line 4481) | function safeTokenEquals(provided, expected) { function getRelaySecretFromRequest (line 4488) | function getRelaySecretFromRequest(req) { function isAuthorizedRequest (line 4499) | function isAuthorizedRequest(req) { function getRouteGroup (line 4506) | function getRouteGroup(pathname) { function getRateLimitForPath (line 4521) | function getRateLimitForPath(pathname) { function consumeRateLimit (line 4528) | function consumeRateLimit(req, pathname, isPublic = false) { function logThrottled (line 4552) | function logThrottled(level, key, ...args) { constant METRICS_WINDOW_SECONDS (line 4560) | const METRICS_WINDOW_SECONDS = Math.max(10, Number(process.env.RELAY_MET... function createRelayMetricsBucket (line 4578) | function createRelayMetricsBucket() { function getMetricsNowSec (line 4593) | function getMetricsNowSec() { function pruneRelayMetricsBuckets (line 4597) | function pruneRelayMetricsBuckets(nowSec = getMetricsNowSec()) { function getRelayMetricsBucket (line 4608) | function getRelayMetricsBucket(nowSec = getMetricsNowSec()) { function incrementRelayMetric (line 4628) | function incrementRelayMetric(field, amount = 1) { function sampleRelayQueueSize (line 4636) | function sampleRelayQueueSize(queueSize) { function safeRatio (line 4642) | function safeRatio(numerator, denominator) { function getRelayRollingMetrics (line 4647) | function getRelayRollingMetrics() { constant GRID_SIZE (line 4706) | const GRID_SIZE = 2; constant DENSITY_WINDOW (line 4707) | const DENSITY_WINDOW = 30 * 60 * 1000; constant GAP_THRESHOLD (line 4708) | const GAP_THRESHOLD = 60 * 60 * 1000; constant SNAPSHOT_INTERVAL_MS (line 4709) | const SNAPSHOT_INTERVAL_MS = Math.max(2000, Number(process.env.AIS_SNAPS... constant CANDIDATE_RETENTION_MS (line 4710) | const CANDIDATE_RETENTION_MS = 2 * 60 * 60 * 1000; constant MAX_DENSITY_ZONES (line 4711) | const MAX_DENSITY_ZONES = 200; constant MAX_CANDIDATE_REPORTS (line 4712) | const MAX_CANDIDATE_REPORTS = 1500; constant CHOKEPOINTS (line 4735) | const CHOKEPOINTS = [ function classifyVesselType (line 4753) | function classifyVesselType(shipType) { constant TRANSIT_COOLDOWN_MS (line 4762) | const TRANSIT_COOLDOWN_MS = 30 * 60 * 1000; constant TRANSIT_WINDOW_MS (line 4763) | const TRANSIT_WINDOW_MS = 24 * 60 * 60 * 1000; constant MIN_DWELL_MS (line 4764) | const MIN_DWELL_MS = 5 * 60 * 1000; constant CHOKEPOINT_TRANSIT_KEY (line 4765) | const CHOKEPOINT_TRANSIT_KEY = 'supply_chain:chokepoint_transits:v1'; constant CHOKEPOINT_TRANSIT_TTL (line 4766) | const CHOKEPOINT_TRANSIT_TTL = 3600; constant CHOKEPOINT_TRANSIT_INTERVAL_MS (line 4767) | const CHOKEPOINT_TRANSIT_INTERVAL_MS = 10 * 60 * 1000; constant NAVAL_PREFIX_RE (line 4769) | const NAVAL_PREFIX_RE = /^(USS|USNS|HMS|HMAS|HMCS|INS|JS|ROKS|TCG|FS|BNS... function getGridKey (line 4771) | function getGridKey(lat, lon) { function isLikelyMilitaryCandidate (line 4777) | function isLikelyMilitaryCandidate(meta) { function getUpstreamQueueSize (line 4796) | function getUpstreamQueueSize() { function enqueueUpstreamMessage (line 4800) | function enqueueUpstreamMessage(raw) { function dequeueUpstreamMessage (line 4805) | function dequeueUpstreamMessage() { function clearUpstreamQueue (line 4816) | function clearUpstreamQueue() { function evictMapByTimestamp (line 4823) | function evictMapByTimestamp(map, maxSize, getTimestamp) { function removeVesselFromChokepoints (line 4836) | function removeVesselFromChokepoints(mmsi) { function updateVesselChokepoints (line 4850) | function updateVesselChokepoints(mmsi, lat, lon) { function processRawUpstreamMessage (line 4903) | function processRawUpstreamMessage(raw) { function processPositionReportForSnapshot (line 4934) | function processPositionReportForSnapshot(data) { function cleanupAggregates (line 4998) | function cleanupAggregates() { function detectDisruptions (line 5088) | function detectDisruptions() { function calculateDensityZones (line 5150) | function calculateDensityZones() { function getCandidateReportsSnapshot (line 5191) | function getCandidateReportsSnapshot() { function buildSnapshot (line 5197) | function buildSnapshot() { function seedChokepointTransits (line 5245) | async function seedChokepointTransits() { constant TRANSIT_SUMMARY_REDIS_KEY (line 5273) | const TRANSIT_SUMMARY_REDIS_KEY = 'supply_chain:transit-summaries:v1'; constant TRANSIT_SUMMARY_TTL (line 5274) | const TRANSIT_SUMMARY_TTL = 3600; constant TRANSIT_SUMMARY_INTERVAL_MS (line 5275) | const TRANSIT_SUMMARY_INTERVAL_MS = 10 * 60 * 1000; constant CHOKEPOINT_THREAT_LEVELS (line 5281) | const CHOKEPOINT_THREAT_LEVELS = { constant RELAY_NAME_TO_ID (line 5290) | const RELAY_NAME_TO_ID = { function detectTrafficAnomalyRelay (line 5303) | function detectTrafficAnomalyRelay(history, threatLevel) { function seedTransitSummaries (line 5316) | async function seedTransitSummaries() { constant UCDP_CACHE_TTL_MS (line 5392) | const UCDP_CACHE_TTL_MS = 6 * 60 * 60 * 1000; constant UCDP_RELAY_MAX_PAGES (line 5393) | const UCDP_RELAY_MAX_PAGES = 12; constant UCDP_FETCH_TIMEOUT (line 5394) | const UCDP_FETCH_TIMEOUT = 30000; constant UCDP_RELAY_VIOLENCE_TYPE_MAP (line 5399) | const UCDP_RELAY_VIOLENCE_TYPE_MAP = { function ucdpParseDateMs (line 5405) | function ucdpParseDateMs(value) { function ucdpGetMaxDateMs (line 5410) | function ucdpGetMaxDateMs(events) { function ucdpBuildVersionCandidates (line 5420) | function ucdpBuildVersionCandidates() { function ucdpRelayFetchPage (line 5425) | async function ucdpRelayFetchPage(version, page) { function ucdpRelayDiscoverVersion (line 5446) | async function ucdpRelayDiscoverVersion() { function ucdpFetchAllEvents (line 5457) | async function ucdpFetchAllEvents() { function handleUcdpEventsRequest (line 5517) | async function handleUcdpEventsRequest(req, res) { constant OPENSKY_CACHE_TTL_MS (line 5578) | const OPENSKY_CACHE_TTL_MS = Number(process.env.OPENSKY_CACHE_TTL_MS) ||... constant OPENSKY_NEGATIVE_CACHE_TTL_MS (line 5579) | const OPENSKY_NEGATIVE_CACHE_TTL_MS = Number(process.env.OPENSKY_NEGATIV... constant OPENSKY_CACHE_MAX_ENTRIES (line 5580) | const OPENSKY_CACHE_MAX_ENTRIES = Math.max(10, Number(process.env.OPENSK... constant OPENSKY_NEGATIVE_CACHE_MAX_ENTRIES (line 5581) | const OPENSKY_NEGATIVE_CACHE_MAX_ENTRIES = Math.max(10, Number(process.e... constant OPENSKY_BBOX_QUANT_STEP (line 5582) | const OPENSKY_BBOX_QUANT_STEP = Number.isFinite(Number(process.env.OPENS... constant OPENSKY_BBOX_DECIMALS (line 5584) | const OPENSKY_BBOX_DECIMALS = OPENSKY_BBOX_QUANT_STEP > 0 constant OPENSKY_DEDUP_EMPTY_RESPONSE_JSON (line 5587) | const OPENSKY_DEDUP_EMPTY_RESPONSE_JSON = JSON.stringify({ states: [], t... constant OPENSKY_DEDUP_EMPTY_RESPONSE_GZIP (line 5588) | const OPENSKY_DEDUP_EMPTY_RESPONSE_GZIP = gzipSyncBuffer(OPENSKY_DEDUP_E... constant OPENSKY_DEDUP_EMPTY_RESPONSE_BROTLI (line 5589) | const OPENSKY_DEDUP_EMPTY_RESPONSE_BROTLI = brotliSyncBuffer(OPENSKY_DED... constant RSS_CACHE_TTL_MS (line 5594) | const RSS_CACHE_TTL_MS = 5 * 60 * 1000; constant RSS_NEGATIVE_CACHE_TTL_MS (line 5595) | const RSS_NEGATIVE_CACHE_TTL_MS = 60 * 1000; constant RSS_MAX_NEGATIVE_CACHE_TTL_MS (line 5596) | const RSS_MAX_NEGATIVE_CACHE_TTL_MS = 15 * 60 * 1000; constant RSS_CACHE_MAX_ENTRIES (line 5597) | const RSS_CACHE_MAX_ENTRIES = 200; function rssRecordFailure (line 5599) | function rssRecordFailure(feedUrl) { function rssResetFailure (line 5607) | function rssResetFailure(feedUrl) { function setBoundedCacheEntry (line 5612) | function setBoundedCacheEntry(cache, key, value, maxEntries) { function touchCacheEntry (line 5620) | function touchCacheEntry(cache, key, entry) { function cacheOpenSkyPositive (line 5625) | function cacheOpenSkyPositive(cacheKey, data) { function cacheOpenSkyNegative (line 5634) | function cacheOpenSkyNegative(cacheKey, status) { function quantizeCoordinate (line 5646) | function quantizeCoordinate(value) { function formatCoordinate (line 5651) | function formatCoordinate(value) { function normalizeOpenSkyBbox (line 5655) | function normalizeOpenSkyBbox(params) { constant OPENSKY_AUTH_COOLDOWN_MS (line 5694) | const OPENSKY_AUTH_COOLDOWN_MS = 60000; constant OPENSKY_429_COOLDOWN_MS (line 5698) | const OPENSKY_429_COOLDOWN_MS = Number(process.env.OPENSKY_429_COOLDOWN_... constant OPENSKY_REQUEST_SPACING_MS (line 5699) | const OPENSKY_REQUEST_SPACING_MS = Number(process.env.OPENSKY_REQUEST_SP... function getOpenSkyToken (line 5703) | async function getOpenSkyToken() { function _openskyProxyConnect (line 5734) | function _openskyProxyConnect(targetHost, targetPort, timeoutMs = 10000) { function _attemptOpenSkyTokenFetch (line 5773) | function _attemptOpenSkyTokenFetch(clientId, clientSecret) { constant OPENSKY_AUTH_MAX_RETRIES (line 5855) | const OPENSKY_AUTH_MAX_RETRIES = 3; constant OPENSKY_AUTH_RETRY_DELAYS (line 5856) | const OPENSKY_AUTH_RETRY_DELAYS = [0, 2000, 5000]; function _fetchOpenSkyToken (line 5858) | async function _fetchOpenSkyToken(clientId, clientSecret) { function _collectDecompressed (line 5890) | function _collectDecompressed(response) { function _openskyRawFetch (line 5904) | function _openskyRawFetch(url, token) { function openskyQueuedFetch (line 5951) | function openskyQueuedFetch(url, token) { function handleOpenSkyRequest (line 5968) | async function handleOpenSkyRequest(req, res, PORT) { constant WORLDBANK_CACHE_TTL_MS (line 6154) | const WORLDBANK_CACHE_TTL_MS = 30 * 60 * 1000; function handleWorldBankRequest (line 6156) | function handleWorldBankRequest(req, res) { constant POLYMARKET_ENABLED (line 6354) | const POLYMARKET_ENABLED = String(process.env.POLYMARKET_ENABLED || 'tru... constant POLYMARKET_CACHE_TTL_MS (line 6357) | const POLYMARKET_CACHE_TTL_MS = 10 * 60 * 1000; constant POLYMARKET_NEG_TTL_MS (line 6358) | const POLYMARKET_NEG_TTL_MS = 5 * 60 * 1000; constant POLYMARKET_CB_THRESHOLD (line 6362) | const POLYMARKET_CB_THRESHOLD = 5; constant POLYMARKET_CB_COOLDOWN_MS (line 6363) | const POLYMARKET_CB_COOLDOWN_MS = 60 * 1000; constant POLYMARKET_MAX_CONCURRENT (line 6366) | const POLYMARKET_MAX_CONCURRENT = 3; constant POLYMARKET_MAX_QUEUED (line 6367) | const POLYMARKET_MAX_QUEUED = 20; function tripPolymarketCircuitBreaker (line 6371) | function tripPolymarketCircuitBreaker() { function releasePolymarketSlot (line 6379) | function releasePolymarketSlot() { function acquirePolymarketSlot (line 6388) | function acquirePolymarketSlot() { function fetchPolymarketUpstream (line 6399) | function fetchPolymarketUpstream(cacheKey, endpoint, params, tag) { function handlePolymarketRequest (line 6455) | function handlePolymarketRequest(req, res) { constant YAHOO_CHART_CACHE_TTL_MS (line 6587) | const YAHOO_CHART_CACHE_TTL_MS = 300_000; constant YAHOO_SYMBOL_RE (line 6589) | const YAHOO_SYMBOL_RE = /^[A-Za-z0-9^=\-.]{1,15}$/; function handleYahooChartRequest (line 6591) | function handleYahooChartRequest(req, res) { constant AVIATIONSTACK_CACHE_TTL_MS (line 6667) | const AVIATIONSTACK_CACHE_TTL_MS = 120_000; function handleAviationStackRequest (line 6669) | function handleAviationStackRequest(req, res) { constant YOUTUBE_PROXY_URL (line 6745) | const YOUTUBE_PROXY_URL = process.env.YOUTUBE_PROXY_URL || ''; function parseProxyUrl (line 6747) | function parseProxyUrl(proxyUrl) { function ytFetchViaProxy (line 6759) | function ytFetchViaProxy(targetUrl, proxy) { function ytFetchDirect (line 6800) | function ytFetchDirect(targetUrl) { function ytFetch (line 6831) | async function ytFetch(url) { constant YT_CACHE_TTL (line 6840) | const YT_CACHE_TTL = 5 * 60 * 1000; function handleYouTubeLiveRequest (line 6842) | function handleYouTubeLiveRequest(req, res) { constant ICAO_API_KEY (line 6941) | const ICAO_API_KEY = process.env.ICAO_API_KEY; constant NOTAM_CACHE_TTL (line 6943) | const NOTAM_CACHE_TTL = 30 * 60 * 1000; function handleNotamProxyRequest (line 6945) | function handleNotamProxyRequest(req, res) { constant ALLOWED_ORIGINS (line 7027) | const ALLOWED_ORIGINS = [ function getCorsOrigin (line 7038) | function getCorsOrigin(req) { constant WIDGET_ALLOWED_ENDPOINTS (line 7604) | const WIDGET_ALLOWED_ENDPOINTS = new Set([ constant WIDGET_FETCH_TOOL (line 7621) | const WIDGET_FETCH_TOOL = { constant WIDGET_SYSTEM_PROMPT (line 7634) | const WIDGET_SYSTEM_PROMPT = `You are a WorldMonitor widget builder. You... constant WIDGET_SEARCH_TOOL (line 7758) | const WIDGET_SEARCH_TOOL = { constant WIDGET_MAX_HTML (line 7770) | const WIDGET_MAX_HTML = 50_000; constant WIDGET_PRO_MAX_HTML (line 7771) | const WIDGET_PRO_MAX_HTML = 80_000; constant WIDGET_AGENT_KEY (line 7772) | const WIDGET_AGENT_KEY = (process.env.WIDGET_AGENT_KEY || '').trim(); constant PRO_WIDGET_KEY (line 7773) | const PRO_WIDGET_KEY = (process.env.PRO_WIDGET_KEY || '').trim(); constant WIDGET_ANTHROPIC_KEY (line 7774) | const WIDGET_ANTHROPIC_KEY = (process.env.ANTHROPIC_API_KEY || '').trim(); constant WIDGET_EXA_KEY (line 7775) | const WIDGET_EXA_KEY = (process.env.EXA_API_KEYS || '').split(/[\n,]+/).... constant WIDGET_BRAVE_KEY (line 7776) | const WIDGET_BRAVE_KEY = (process.env.BRAVE_API_KEYS || '').split(/[\n,]... function performWidgetWebSearch (line 7778) | async function performWidgetWebSearch(query) { constant WIDGET_RATE_LIMIT (line 7837) | const WIDGET_RATE_LIMIT = 10; constant PRO_WIDGET_RATE_LIMIT (line 7838) | const PRO_WIDGET_RATE_LIMIT = 20; constant WIDGET_RATE_WINDOW_MS (line 7839) | const WIDGET_RATE_WINDOW_MS = 60 * 60 * 1000; function checkWidgetRateLimit (line 7843) | function checkWidgetRateLimit(ip) { function checkProWidgetRateLimit (line 7854) | function checkProWidgetRateLimit(ip) { function getWidgetAgentStatus (line 7865) | function getWidgetAgentStatus() { function getWidgetAgentProvidedProKey (line 7875) | function getWidgetAgentProvidedProKey(req) { function getWidgetAgentProvidedKey (line 7881) | function getWidgetAgentProvidedKey(req) { function requireWidgetAgentAccess (line 7887) | function requireWidgetAgentAccess(req, res) { function sendWidgetSSE (line 7903) | function sendWidgetSSE(res, type, data) { function readRequestBody (line 7909) | async function readRequestBody(req, maxBytes) { function handleWidgetAgentHealthRequest (line 7923) | function handleWidgetAgentHealthRequest(req, res) { function handleWidgetAgentRequest (line 7934) | async function handleWidgetAgentRequest(req, res) { constant WIDGET_PRO_SYSTEM_PROMPT (line 8118) | const WIDGET_PRO_SYSTEM_PROMPT = `You are a WorldMonitor PRO widget buil... function connectUpstream (line 8174) | function connectUpstream() { function gracefulShutdown (line 8356) | async function gracefulShutdown(signal) { FILE: scripts/build-military-bases-final.mjs constant DATA_DIR (line 22) | const DATA_DIR = path.join(projectRoot, 'scripts', 'data'); constant PIZZINT_PATH (line 27) | const PIZZINT_PATH = path.join(DATA_DIR, 'pizzint-processed.json'); constant OSM_PATH (line 28) | const OSM_PATH = path.join(DATA_DIR, 'osm-military-processed.json'); constant MIRTA_PATH (line 29) | const MIRTA_PATH = path.join(DATA_DIR, 'mirta-processed.json'); constant CURATED_PATH (line 30) | const CURATED_PATH = path.join(DATA_DIR, 'curated-bases.json'); constant OUTPUT_PATH (line 31) | const OUTPUT_PATH = path.join(DATA_DIR, 'military-bases-final.json'); constant DEDUP_LOG_PATH (line 32) | const DEDUP_LOG_PATH = path.join(DATA_DIR, 'dedup-dropped-pairs.json'); constant PROXIMITY_THRESHOLD_M (line 37) | const PROXIMITY_THRESHOLD_M = 200; constant EARTH_RADIUS_M (line 38) | const EARTH_RADIUS_M = 6_371_000; constant NATO_MEMBERS (line 40) | const NATO_MEMBERS = new Set([ constant COUNTRY_TYPE_MAP (line 46) | const COUNTRY_TYPE_MAP = { constant TIER1_KINDS (line 59) | const TIER1_KINDS = new Set([ constant TIER2_KINDS (line 63) | const TIER2_KINDS = new Set([ constant TIER3_KINDS (line 67) | const TIER3_KINDS = new Set([ function loadJson (line 75) | function loadJson(filepath, label) { function stripHtml (line 86) | function stripHtml(str) { function toRad (line 91) | function toRad(deg) { function haversineMeters (line 95) | function haversineMeters(lat1, lon1, lat2, lon2) { function assignType (line 104) | function assignType(countryIso2) { function assignTier (line 113) | function assignTier(kind, source) { function osmElementType (line 123) | function osmElementType(osmId) { function nameMatch (line 130) | function nameMatch(a, b) { function deriveCategoriesFromKind (line 135) | function deriveCategoriesFromKind(kind, name) { function normalizePizzintEntry (line 147) | function normalizePizzintEntry(row) { function normalizeOsmEntry (line 169) | function normalizeOsmEntry(row) { function normalizeMirtaEntry (line 192) | function normalizeMirtaEntry(row) { function normalizeCuratedEntry (line 214) | function normalizeCuratedEntry(row) { function main (line 240) | function main() { FILE: scripts/build-sidecar-handlers.mjs constant ROOT (line 15) | const ROOT = path.resolve(__dirname, '..'); constant SKIP_DIRS (line 19) | const SKIP_DIRS = new Set(['[domain]', '[[...path]]']); FILE: scripts/check-unicode-safety.mjs constant ROOT (line 23) | const ROOT = process.cwd(); constant SCAN_ROOTS (line 25) | const SCAN_ROOTS = [ constant INCLUDED_EXTENSIONS (line 36) | const INCLUDED_EXTENSIONS = new Set([ constant EXCLUDED_PREFIXES (line 42) | const EXCLUDED_PREFIXES = [ constant ZERO_WIDTH (line 54) | const ZERO_WIDTH = new Set([0x200B, 0x200C, 0x200D, 0x2060, 0xFEFF]); function isBidiControl (line 56) | function isBidiControl(cp) { function isVariationSelectorSupplement (line 60) | function isVariationSelectorSupplement(cp) { function isVariationSelectorSuspicious (line 64) | function isVariationSelectorSuspicious(cp) { function getExtension (line 75) | function getExtension(path) { function shouldScanFile (line 80) | function shouldScanFile(path) { function walkDir (line 87) | function walkDir(rootDir, out) { function getRepoFiles (line 108) | function getRepoFiles() { function getStagedFiles (line 121) | function getStagedFiles() { function formatCodePoint (line 139) | function formatCodePoint(cp) { function classify (line 143) | function classify(cp) { function scanFile (line 151) | function scanFile(path) { function main (line 193) | function main() { FILE: scripts/evaluate-forecast-benchmark.mjs function materializeForecast (line 23) | function materializeForecast(input) { function evaluateEntry (line 41) | function evaluateEntry(entry) { FILE: scripts/extract-forecast-benchmark-candidates.mjs constant NOISE_SIGNAL_TYPES (line 9) | const NOISE_SIGNAL_TYPES = new Set(['news_corroboration']); function slugify (line 11) | function slugify(value) { function toBenchmarkForecast (line 19) | function toBenchmarkForecast(entry) { function summarizeObservedChange (line 35) | function summarizeObservedChange(current, prior) { function buildBenchmarkCandidate (line 61) | function buildBenchmarkCandidate(current, prior, snapshotAt) { function scoreCandidate (line 74) | function scoreCandidate(candidate) { function selectBenchmarkCandidates (line 87) | function selectBenchmarkCandidates(historySnapshots, options = {}) { function readForecastHistory (line 119) | async function readForecastHistory(key = HISTORY_KEY, limit = 60) { FILE: scripts/fetch-country-boundary-overrides.mjs constant NE_50M_URL (line 20) | const NE_50M_URL = 'https://raw.githubusercontent.com/nvkelso/natural-ea... constant OUT_DIR (line 21) | const OUT_DIR = join(__dirname, '..', 'public', 'data'); constant OUT_FILE (line 22) | const OUT_FILE = join(OUT_DIR, 'country-boundary-overrides.geojson'); constant OVERRIDE_COUNTRIES (line 25) | const OVERRIDE_COUNTRIES = [ function main (line 30) | async function main() { FILE: scripts/fetch-gpsjam.mjs constant DATA_DIR (line 8) | const DATA_DIR = path.resolve(__dirname, 'data'); constant REDIS_KEY_V2 (line 10) | const REDIS_KEY_V2 = 'intelligence:gpsjam:v2'; constant REDIS_KEY_V1 (line 11) | const REDIS_KEY_V1 = 'intelligence:gpsjam:v1'; constant REDIS_TTL (line 12) | const REDIS_TTL = 172800; function getArg (line 15) | function getArg(name, fallback) { function classifyRegion (line 22) | function classifyRegion(lat, lon) { function loadEnvFile (line 41) | function loadEnvFile() { function maskToken (line 59) | function maskToken(token) { function fetchWingbits (line 64) | async function fetchWingbits(apiKey) { function processHexes (line 89) | function processHexes(rawHexes) { function seedRedis (line 159) | async function seedRedis(output) { function main (line 247) | async function main() { FILE: scripts/fetch-mirta-bases.mjs constant DATA_DIR (line 19) | const DATA_DIR = resolve(__dirname, 'data'); constant BASE (line 22) | const BASE = 'https://services7.arcgis.com/n1YM8pTrFmm7L4hs/arcgis/rest/... constant PAGE_SIZE (line 23) | const PAGE_SIZE = 1000; constant BRANCH_MAP (line 28) | const BRANCH_MAP = { constant COMPONENT_MAP (line 43) | const COMPONENT_MAP = { constant STATUS_MAP (line 58) | const STATUS_MAP = { constant STATE_MAP (line 66) | const STATE_MAP = { function fetchAllFeatures (line 85) | async function fetchAllFeatures(layerIndex) { function centroid (line 124) | function centroid(geometry) { function processFeature (line 156) | function processFeature(feature) { function main (line 181) | async function main() { FILE: scripts/fetch-osm-bases.mjs constant DATA_DIR (line 8) | const DATA_DIR = join(__dirname, 'data'); constant RAW_PATH (line 9) | const RAW_PATH = join(DATA_DIR, 'osm-military-raw.json'); constant PROCESSED_PATH (line 10) | const PROCESSED_PATH = join(DATA_DIR, 'osm-military-processed.json'); constant OVERPASS_URL (line 12) | const OVERPASS_URL = 'https://overpass-api.de/api/interpreter'; constant OVERPASS_QUERY (line 13) | const OVERPASS_QUERY = ` constant TIMEOUT_MS (line 23) | const TIMEOUT_MS = 5 * 60 * 1000; function ensureDataDir (line 25) | function ensureDataDir() { function fetchOverpassData (line 32) | async function fetchOverpassData() { function processFeatures (line 66) | function processFeatures(raw) { function printSummary (line 110) | function printSummary(features) { function main (line 136) | async function main() { FILE: scripts/fetch-pizzint-bases.mjs function loadEnvLocal (line 23) | function loadEnvLocal() { constant SUPABASE_URL (line 47) | const SUPABASE_URL = process.env.SUPABASE_URL || 'https://qevdnlpgjxpwus... constant SUPABASE_ANON_KEY (line 48) | const SUPABASE_ANON_KEY = process.env.SUPABASE_ANON_KEY; constant PAGE_SIZE (line 56) | const PAGE_SIZE = 1000; constant TOTAL_PAGES (line 57) | const TOTAL_PAGES = 80; constant RATE_LIMIT_MS (line 58) | const RATE_LIMIT_MS = 200; constant MAX_RETRIES (line 59) | const MAX_RETRIES = 3; constant CHECKPOINT_INTERVAL (line 60) | const CHECKPOINT_INTERVAL = 10; constant MIN_EXPECTED_ROWS (line 61) | const MIN_EXPECTED_ROWS = 79_000; constant SELECT_COLUMNS (line 63) | const SELECT_COLUMNS = [ constant DATA_DIR (line 70) | const DATA_DIR = path.join(projectRoot, 'scripts', 'data'); constant PARTIAL_PATH (line 71) | const PARTIAL_PATH = path.join(DATA_DIR, 'pizzint-partial.json'); constant OUTPUT_PATH (line 72) | const OUTPUT_PATH = path.join(DATA_DIR, 'pizzint-processed.json'); function sleep (line 77) | function sleep(ms) { function ensureDataDir (line 81) | function ensureDataDir() { function loadCheckpoint (line 85) | function loadCheckpoint() { function saveCheckpoint (line 95) | function saveCheckpoint(state) { function fetchPage (line 103) | async function fetchPage(pageIndex) { function main (line 140) | async function main() { FILE: scripts/generate-oref-locations.mjs constant COMMIT_SHA (line 10) | const COMMIT_SHA = 'master'; constant CITIES_URL (line 11) | const CITIES_URL = `https://raw.githubusercontent.com/eladnava/pikud-hao... constant OUTPUT (line 14) | const OUTPUT = join(__dirname, '..', 'src', 'services', 'oref-locations.... function normalize (line 16) | function normalize(s) { function main (line 20) | async function main() { FILE: scripts/lib/thermal-escalation.mjs constant CLUSTER_RADIUS_KM (line 1) | const CLUSTER_RADIUS_KM = 20; constant HISTORY_RETENTION_MS (line 2) | const HISTORY_RETENTION_MS = 30 * 24 * 60 * 60 * 1000; constant RECENT_PERSISTENCE_MS (line 3) | const RECENT_PERSISTENCE_MS = 18 * 60 * 60 * 1000; constant BASELINE_WINDOW_MS (line 4) | const BASELINE_WINDOW_MS = 7 * 24 * 60 * 60 * 1000; constant OBSERVATION_WINDOW_HOURS (line 5) | const OBSERVATION_WINDOW_HOURS = 24; constant CONFLICT_REGIONS (line 7) | const CONFLICT_REGIONS = new Set([ constant REGION_TO_COUNTRY (line 30) | const REGION_TO_COUNTRY = { function round (line 55) | function round(value, digits = 1) { function toRad (line 60) | function toRad(value) { function haversineKm (line 64) | function haversineKm(a, b) { function sortDetections (line 77) | function sortDetections(detections) { function clusterDetections (line 81) | function clusterDetections(detections, radiusKm = CLUSTER_RADIUS_KM) { function cellKey (line 119) | function cellKey(location) { function average (line 125) | function average(values) { function stdDev (line 129) | function stdDev(values, mean) { function severityRank (line 135) | function severityRank(status) { function relevanceRank (line 148) | function relevanceRank(relevance) { function deriveContext (line 159) | function deriveContext(regionLabel) { function deriveCountry (line 164) | function deriveCountry(regionLabel) { function deriveConfidence (line 168) | function deriveConfidence(observationCount, uniqueSourceCount, baselineS... function deriveStatus (line 174) | function deriveStatus({ observationCount, totalFrp, countDelta, frpDelta... function deriveRelevance (line 185) | function deriveRelevance(status, context, totalFrp, persistenceHours) { function buildNarrativeFlags (line 202) | function buildNarrativeFlags({ context, status, uniqueSourceCount, persi... function buildSummary (line 214) | function buildSummary(clusters) { function computeThermalEscalationWatch (line 225) | function computeThermalEscalationWatch(detections, previousHistory = { c... function emptyThermalEscalationWatch (line 372) | function emptyThermalEscalationWatch(nowMs = 0, sourceVersion = 'thermal... FILE: scripts/lint-boundaries.mjs constant SRC (line 22) | const SRC = 'src'; constant ROOT (line 23) | const ROOT = process.cwd(); constant LAYERS (line 26) | const LAYERS = ['types', 'config', 'services', 'components', 'app']; function getLayer (line 28) | function getLayer(filePath) { function getLayerIndex (line 36) | function getLayerIndex(layer) { function walkDir (line 40) | function walkDir(dir, ext = ['.ts', '.tsx', '.js', '.mjs']) { FILE: scripts/promote-forecast-benchmark-candidate.mjs constant DEFAULT_OUTPUT_PATH (line 26) | const DEFAULT_OUTPUT_PATH = join(__dirname, 'data', 'forecast-historical... function roundPct (line 30) | function roundPct(value) { function materializeForecast (line 34) | function materializeForecast(input) { function buildSummaryExpectation (line 52) | function buildSummaryExpectation(pred, priorForecast) { function buildItemExpectations (line 62) | function buildItemExpectations(pred) { function deriveThresholds (line 68) | function deriveThresholds(candidate, options = {}) { function toHistoricalBenchmarkEntry (line 100) | function toHistoricalBenchmarkEntry(candidate, options = {}) { function mergeHistoricalBenchmarks (line 111) | function mergeHistoricalBenchmarks(existingEntries, nextEntry, options =... function createJsonPatch (line 134) | function createJsonPatch(existingEntries, nextEntry, options = {}) { function renderUnifiedDiff (line 145) | function renderUnifiedDiff(currentEntries, nextEntries, outputPath) { function parseArgs (line 173) | function parseArgs(argv) { function pickCandidate (line 199) | function pickCandidate(candidates, options = {}) { function readBenchmarkFile (line 212) | function readBenchmarkFile(pathname) { function buildPreviewPayload (line 216) | function buildPreviewPayload(args, candidate, nextEntry, currentEntries) { FILE: scripts/railway-set-watch-paths.mjs constant DRY_RUN (line 20) | const DRY_RUN = process.argv.includes('--dry-run'); constant PROJECT_ID (line 22) | const PROJECT_ID = '29419572-0b0d-437f-8e71-4fa68daf514f'; constant ENV_ID (line 23) | const ENV_ID = '91a05726-0b83-4d44-a33e-6aec94e58780'; constant API (line 24) | const API = 'https://backboard.railway.app/graphql/v2'; constant USES_SHARED_CONFIG (line 27) | const USES_SHARED_CONFIG = new Set([ function getToken (line 32) | function getToken() { function gql (line 42) | async function gql(token, query, variables = {}) { function main (line 53) | async function main() { FILE: scripts/seed-airport-delays.mjs constant FAA_CACHE_KEY (line 7) | const FAA_CACHE_KEY = 'aviation:delays:faa:v1'; constant NOTAM_CACHE_KEY (line 8) | const NOTAM_CACHE_KEY = 'aviation:notam:closures:v2'; constant CACHE_TTL (line 9) | const CACHE_TTL = 7200; constant FAA_URL (line 11) | const FAA_URL = 'https://nasstatus.faa.gov/api/airport-status-information'; constant ICAO_NOTAM_URL (line 12) | const ICAO_NOTAM_URL = 'https://dataservices.icao.int/api/notams-realtim... constant NOTAM_CLOSURE_QCODES (line 14) | const NOTAM_CLOSURE_QCODES = new Set(['FA', 'AH', 'AL', 'AW', 'AC', 'AM']); constant FAA_AIRPORTS (line 16) | const FAA_AIRPORTS = [ constant MONITORED_AIRPORTS_ICAO (line 22) | const MONITORED_AIRPORTS_ICAO = [ function parseDelayTypeFromReason (line 41) | function parseDelayTypeFromReason(reason) { function parseFaaXml (line 51) | function parseFaaXml(text) { function determineSeverity (line 121) | function determineSeverity(avgDelay) { function redisSet (line 129) | async function redisSet(url, token, key, value, ttl) { function seedFaaDelays (line 141) | async function seedFaaDelays() { function seedNotamClosures (line 185) | async function seedNotamClosures() { function main (line 254) | async function main() { FILE: scripts/seed-aviation.mjs constant DEFAULT_AIRPORTS (line 19) | const DEFAULT_AIRPORTS = ['IST', 'ESB', 'SAW', 'LHR', 'FRA', 'CDG']; constant OPS_CACHE_KEY (line 20) | const OPS_CACHE_KEY = `aviation:ops-summary:v1:${[...DEFAULT_AIRPORTS].s... constant NEWS_CACHE_KEY (line 21) | const NEWS_CACHE_KEY = 'aviation:news::24:v1'; constant OPS_TTL (line 22) | const OPS_TTL = 300; constant NEWS_TTL (line 23) | const NEWS_TTL = 900; constant AVIATIONSTACK_URL (line 25) | const AVIATIONSTACK_URL = 'https://api.aviationstack.com/v1/flights'; function fetchAviationStackFlights (line 29) | async function fetchAviationStackFlights(airports) { function fetchNotamClosures (line 68) | async function fetchNotamClosures() { function getRedisCredentialsFromEnv (line 83) | function getRedisCredentialsFromEnv() { function determineSeverity (line 90) | function determineSeverity(avgDelay, delayPct) { function severityFromCancelRate (line 98) | function severityFromCancelRate(rate) { function fetchAirportOpsSummary (line 106) | async function fetchAirportOpsSummary() { constant AVIATION_RSS_FEEDS (line 170) | const AVIATION_RSS_FEEDS = [ function parseRssItems (line 182) | function parseRssItems(xml, sourceName) { function fetchAviationNews (line 202) | async function fetchAviationNews() { function fetchAll (line 243) | async function fetchAll() { function validate (line 263) | function validate(data) { FILE: scripts/seed-bis-data.mjs constant BIS_BASE (line 7) | const BIS_BASE = 'https://stats.bis.org/api/v1/data'; constant BIS_COUNTRIES (line 9) | const BIS_COUNTRIES = { constant BIS_COUNTRY_KEYS (line 24) | const BIS_COUNTRY_KEYS = Object.keys(BIS_COUNTRIES).join('+'); constant KEYS (line 26) | const KEYS = { constant TTL (line 32) | const TTL = 43200; function fetchBisCSV (line 34) | async function fetchBisCSV(dataset, key) { function parseBisCSV (line 45) | function parseBisCSV(csv) { function parseCSVLine (line 63) | function parseCSVLine(line) { function parseBisNumber (line 83) | function parseBisNumber(val) { function groupByCountry (line 89) | function groupByCountry(rows) { function fetchPolicyRates (line 103) | async function fetchPolicyRates() { function fetchExchangeRates (line 131) | async function fetchExchangeRates() { function fetchCreditToGdp (line 162) | async function fetchCreditToGdp() { function fetchAll (line 193) | async function fetchAll() { function validate (line 205) | function validate(data) { FILE: scripts/seed-climate-anomalies.mjs constant CANONICAL_KEY (line 7) | const CANONICAL_KEY = 'climate:anomalies:v1'; constant CACHE_TTL (line 8) | const CACHE_TTL = 10800; constant ZONES (line 10) | const ZONES = [ function avg (line 28) | function avg(arr) { function classifySeverity (line 32) | function classifySeverity(tempDelta, precipDelta) { function classifyType (line 40) | function classifyType(tempDelta, precipDelta) { function fetchZone (line 54) | async function fetchZone(zone, startDate, endDate) { function fetchClimateAnomalies (line 97) | async function fetchClimateAnomalies() { function validate (line 117) | function validate(data) { FILE: scripts/seed-commodity-quotes.mjs constant CANONICAL_KEY (line 9) | const CANONICAL_KEY = 'market:commodities-bootstrap:v1'; constant CACHE_TTL (line 10) | const CACHE_TTL = 1800; constant YAHOO_DELAY_MS (line 11) | const YAHOO_DELAY_MS = 200; function fetchYahooWithRetry (line 13) | async function fetchYahooWithRetry(url, label, maxAttempts = 4) { constant COMMODITY_SYMBOLS (line 35) | const COMMODITY_SYMBOLS = commodityConfig.commodities.map(c => c.symbol); function fetchCommodityQuotes (line 37) | async function fetchCommodityQuotes() { function validate (line 72) | function validate(data) { function fetchAndStash (line 78) | async function fetchAndStash() { FILE: scripts/seed-conflict-intel.mjs constant ACLED_CACHE_KEY (line 23) | const ACLED_CACHE_KEY = 'conflict:acled:v1:all:0:0'; constant ACLED_TTL (line 24) | const ACLED_TTL = 900; constant HAPI_CACHE_KEY_PREFIX (line 25) | const HAPI_CACHE_KEY_PREFIX = 'conflict:humanitarian:v1'; constant HAPI_TTL (line 26) | const HAPI_TTL = 21600; constant PIZZINT_TTL (line 27) | const PIZZINT_TTL = 600; constant CONFLICT_COUNTRIES (line 30) | const CONFLICT_COUNTRIES = [ constant ISO2_TO_ISO3 (line 35) | const ISO2_TO_ISO3 = { function fetchAcledToken (line 44) | async function fetchAcledToken() { function fetchAcledEvents (line 71) | async function fetchAcledEvents() { function fetchHapiSummary (line 120) | async function fetchHapiSummary(countryCode) { function fetchAllHumanitarianSummaries (line 167) | async function fetchAllHumanitarianSummaries() { function fetchPizzintStatus (line 184) | async function fetchPizzintStatus() { function fetchGdeltTensions (line 226) | async function fetchGdeltTensions() { function fetchAll (line 250) | async function fetchAll() { function validate (line 278) | function validate(data) { FILE: scripts/seed-correlation.mjs constant CANONICAL_KEY (line 7) | const CANONICAL_KEY = 'correlation:cards-bootstrap:v1'; constant CACHE_TTL (line 8) | const CACHE_TTL = 1200; constant INPUT_KEYS (line 10) | const INPUT_KEYS = [ function fetchInputData (line 22) | async function fetchInputData() { function haversineKm (line 44) | function haversineKm(lat1, lon1, lat2, lon2) { constant COUNTRY_NAME_TO_ISO2 (line 57) | const COUNTRY_NAME_TO_ISO2 = { constant ISO3_TO_ISO2 (line 104) | const ISO3_TO_ISO2 = { constant COUNTRY_CENTROIDS (line 137) | const COUNTRY_CENTROIDS = { function nearestCountryByCoords (line 172) | function nearestCountryByCoords(lat, lon) { function normalizeToCode (line 182) | function normalizeToCode(country, lat, lon) { constant COUNTRY_NAME_ENTRIES (line 193) | const COUNTRY_NAME_ENTRIES = Object.entries(COUNTRY_NAME_TO_ISO2) function matchCountryNamesInText (line 198) | function matchCountryNamesInText(text) { constant STRIKE_TYPES (line 211) | const STRIKE_TYPES = new Set(['fighter', 'bomber', 'attack']); constant SUPPORT_TYPES (line 212) | const SUPPORT_TYPES = new Set(['tanker', 'awacs', 'surveillance', 'elect... function collectMilitarySignals (line 214) | function collectMilitarySignals(flights) { function generateMilitaryTitle (line 239) | function generateMilitaryTitle(cluster) { constant ESCALATION_KEYWORDS (line 254) | const ESCALATION_KEYWORDS = /\b((?:military|armed|air)\s*(?:strike|attac... function collectEscalationSignals (line 256) | function collectEscalationSignals(protests, outages, newsClusters) { function generateEscalationTitle (line 329) | function generateEscalationTitle(cluster) { constant SANCTIONS_KEYWORDS (line 343) | const SANCTIONS_KEYWORDS = /\b(sanction|tariff|embargo|trade\s+war|ban|r... constant COMMODITY_SYMBOLS (line 344) | const COMMODITY_SYMBOLS = new Set(['CL=F', 'GC=F', 'NG=F', 'SI=F', 'HG=F... constant SIGNIFICANT_CHANGE_PCT (line 345) | const SIGNIFICANT_CHANGE_PCT = 1.5; function collectEconomicSignals (line 347) | function collectEconomicSignals(markets, newsClusters) { constant KNOWN_ENTITIES (line 387) | const KNOWN_ENTITIES = /\b(Iran|Russia|China|North Korea|Venezuela|Cuba|... constant GENERIC_ENTITY_KEYS (line 388) | const GENERIC_ENTITY_KEYS = new Set([ function generateEconomicTitle (line 393) | function generateEconomicTitle(cluster, entityKey) { function collectDisasterSignals (line 437) | function collectDisasterSignals(earthquakes, outages, protests) { function generateDisasterTitle (line 492) | function generateDisasterTitle(cluster) { function clusterByProximity (line 507) | function clusterByProximity(signals, radiusKm) { function clusterByCountry (line 566) | function clusterByCountry(signals) { function clusterByEntity (line 582) | function clusterByEntity(signals) { function scoreClusters (line 615) | function scoreClusters(clusters, weights, threshold) { function toCard (line 652) | function toCard(scored, domain, titleFn) { constant DOMAINS (line 683) | const DOMAINS = { function computeCorrelation (line 713) | async function computeCorrelation() { FILE: scripts/seed-crypto-quotes.mjs constant CANONICAL_KEY (line 9) | const CANONICAL_KEY = 'market:crypto:v1'; constant CACHE_TTL (line 10) | const CACHE_TTL = 3600; constant CRYPTO_IDS (line 12) | const CRYPTO_IDS = cryptoConfig.ids; constant CRYPTO_META (line 13) | const CRYPTO_META = cryptoConfig.meta; function fetchWithRateLimitRetry (line 15) | async function fetchWithRateLimitRetry(url, maxAttempts = 5, headers = {... constant COINPAPRIKA_ID_MAP (line 33) | const COINPAPRIKA_ID_MAP = cryptoConfig.coinpaprika; function fetchFromCoinGecko (line 35) | async function fetchFromCoinGecko() { function fetchFromCoinPaprika (line 53) | async function fetchFromCoinPaprika() { function fetchCryptoQuotes (line 75) | async function fetchCryptoQuotes() { function validate (line 110) | function validate(data) { FILE: scripts/seed-cyber-threats.mjs constant ABUSEIPDB_RATE_KEY (line 7) | const ABUSEIPDB_RATE_KEY = 'rate:abuseipdb:last-call'; constant ABUSEIPDB_CACHE_KEY (line 8) | const ABUSEIPDB_CACHE_KEY = 'cache:abuseipdb:threats'; constant ABUSEIPDB_MIN_INTERVAL_MS (line 9) | const ABUSEIPDB_MIN_INTERVAL_MS = 2 * 60 * 60 * 1000; constant CANONICAL_KEY (line 11) | const CANONICAL_KEY = 'cyber:threats:v2'; constant BOOTSTRAP_KEY (line 12) | const BOOTSTRAP_KEY = 'cyber:threats-bootstrap:v2'; constant CACHE_TTL (line 13) | const CACHE_TTL = 10800; constant FEODO_URL (line 15) | const FEODO_URL = 'https://feodotracker.abuse.ch/downloads/ipblocklist.j... constant C2INTEL_URL (line 17) | const C2INTEL_URL = 'https://raw.githubusercontent.com/drb-ra/C2IntelFee... constant OTX_INDICATORS_URL (line 18) | const OTX_INDICATORS_URL = 'https://otx.alienvault.com/api/v1/indicators... constant ABUSEIPDB_BLACKLIST_URL (line 19) | const ABUSEIPDB_BLACKLIST_URL = 'https://api.abuseipdb.com/api/v2/blackl... constant UPSTREAM_TIMEOUT_MS (line 21) | const UPSTREAM_TIMEOUT_MS = 10_000; constant MAX_LIMIT (line 22) | const MAX_LIMIT = 1000; constant DEFAULT_DAYS (line 23) | const DEFAULT_DAYS = 14; constant MAX_CACHED_THREATS (line 24) | const MAX_CACHED_THREATS = 2000; constant GEO_MAX_UNRESOLVED (line 25) | const GEO_MAX_UNRESOLVED = 200; constant GEO_CONCURRENCY (line 26) | const GEO_CONCURRENCY = 12; constant GEO_OVERALL_TIMEOUT_MS (line 27) | const GEO_OVERALL_TIMEOUT_MS = 15_000; constant GEO_PER_IP_TIMEOUT_MS (line 28) | const GEO_PER_IP_TIMEOUT_MS = 2000; constant THREAT_TYPE_MAP (line 30) | const THREAT_TYPE_MAP = { constant SOURCE_MAP (line 37) | const SOURCE_MAP = { constant INDICATOR_TYPE_MAP (line 45) | const INDICATOR_TYPE_MAP = { constant SEVERITY_MAP (line 51) | const SEVERITY_MAP = { constant SEVERITY_RANK (line 58) | const SEVERITY_RANK = { constant COUNTRY_CENTROIDS (line 66) | const COUNTRY_CENTROIDS = { function clean (line 92) | function clean(value, maxLen = 120) { function toNum (line 97) | function toNum(value) { function validCoords (line 102) | function validCoords(lat, lon) { function isIPv4 (line 106) | function isIPv4(v) { function isIPv6 (line 111) | function isIPv6(v) { return /^[0-9a-f:]+$/i.test(v) && v.includes(':'); } function isIp (line 113) | function isIp(v) { function normCountry (line 118) | function normCountry(v) { function toEpochMs (line 124) | function toEpochMs(v) { function normTags (line 135) | function normTags(input, max = 8) { function djb2 (line 149) | function djb2(s) { function countryCentroid (line 155) | function countryCentroid(cc, seed) { function sanitize (line 165) | function sanitize(t) { function fetchGeoIp (line 190) | async function fetchGeoIp(ip, signal) { function hydrateCoordinates (line 219) | async function hydrateCoordinates(threats) { function fetchFeodo (line 270) | async function fetchFeodo(cutoffMs) { function fetchUrlhaus (line 308) | async function fetchUrlhaus(cutoffMs) { function fetchC2Intel (line 361) | async function fetchC2Intel() { function fetchOtx (line 401) | async function fetchOtx(days) { function fetchAbuseIpDb (line 437) | async function fetchAbuseIpDb() { function dedupeThreats (line 498) | function dedupeThreats(threats) { function toProto (line 513) | function toProto(raw) { function fetchAllThreats (line 534) | async function fetchAllThreats() { function validate (line 575) | function validate(data) { FILE: scripts/seed-displacement-summary.mjs constant CANONICAL_KEY_PREFIX (line 7) | const CANONICAL_KEY_PREFIX = 'displacement:summary:v1'; constant CACHE_TTL (line 8) | const CACHE_TTL = 86400; constant COUNTRY_CENTROIDS (line 10) | const COUNTRY_CENTROIDS = { function getCoordinates (line 23) | function getCoordinates(code) { function fetchUnhcrYearItems (line 29) | async function fetchUnhcrYearItems(year) { function fetchDisplacementSummary (line 65) | async function fetchDisplacementSummary() { function validate (line 216) | function validate(data) { FILE: scripts/seed-earthquakes.mjs constant USGS_FEED_URL (line 7) | const USGS_FEED_URL = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0... constant CANONICAL_KEY (line 8) | const CANONICAL_KEY = 'seismology:earthquakes:v1'; constant CACHE_TTL (line 9) | const CACHE_TTL = 3600; function fetchEarthquakes (line 11) | async function fetchEarthquakes() { function validate (line 39) | function validate(data) { FILE: scripts/seed-economy.mjs constant KEYS (line 8) | const KEYS = { constant FRED_KEY_PREFIX (line 14) | const FRED_KEY_PREFIX = 'economic:fred:v1'; constant FRED_TTL (line 15) | const FRED_TTL = 3600; constant ENERGY_TTL (line 16) | const ENERGY_TTL = 3600; constant CAPACITY_TTL (line 17) | const CAPACITY_TTL = 86400; constant MACRO_TTL (line 18) | const MACRO_TTL = 1800; constant FRED_SERIES (line 20) | const FRED_SERIES = ['WALCL', 'FEDFUNDS', 'T10Y2Y', 'UNRATE', 'CPIAUCSL'... constant EIA_COMMODITIES (line 24) | const EIA_COMMODITIES = [ function fetchEnergyPrices (line 29) | async function fetchEnergyPrices() { constant CAPACITY_SOURCES (line 70) | const CAPACITY_SOURCES = [ constant COAL_SUBTYPES (line 75) | const COAL_SUBTYPES = ['BIT', 'SUB', 'LIG', 'RC']; function fetchCapacityForSource (line 77) | async function fetchCapacityForSource(sourceCode, apiKey, startYear) { function fetchEnergyCapacity (line 107) | async function fetchEnergyCapacity() { function fetchFredSeries (line 144) | async function fetchFredSeries() { function fetchJsonSafe (line 198) | async function fetchJsonSafe(url, timeout = 8000) { function extractClosePrices (line 207) | function extractClosePrices(chart) { function extractAlignedPriceVolume (line 213) | function extractAlignedPriceVolume(chart) { function rateOfChange (line 224) | function rateOfChange(prices, days) { function smaCalc (line 231) | function smaCalc(prices, period) { function fetchMacroSignals (line 237) | async function fetchMacroSignals() { function fetchAll (line 365) | async function fetchAll() { function validate (line 399) | function validate(data) { FILE: scripts/seed-etf-flows.mjs constant CANONICAL_KEY (line 9) | const CANONICAL_KEY = 'market:etf-flows:v1'; constant CACHE_TTL (line 10) | const CACHE_TTL = 3600; constant YAHOO_DELAY_MS (line 11) | const YAHOO_DELAY_MS = 200; constant ETF_LIST (line 13) | const ETF_LIST = etfConfig.btcSpot; function sleep (line 15) | function sleep(ms) { function fetchYahooWithRetry (line 19) | async function fetchYahooWithRetry(url, label, maxAttempts = 4) { function parseEtfChartData (line 41) | function parseEtfChartData(chart, ticker, issuer) { function fetchEtfFlows (line 81) | async function fetchEtfFlows() { function validate (line 138) | function validate(data) { FILE: scripts/seed-fire-detections.mjs constant CANONICAL_KEY (line 7) | const CANONICAL_KEY = 'wildfire:fires:v1'; constant FIRMS_SOURCES (line 8) | const FIRMS_SOURCES = ['VIIRS_SNPP_NRT', 'VIIRS_NOAA20_NRT', 'VIIRS_NOAA... constant MONITORED_REGIONS (line 10) | const MONITORED_REGIONS = { function mapConfidence (line 22) | function mapConfidence(c) { function parseCSV (line 31) | function parseCSV(csv) { function parseDetectedAt (line 46) | function parseDetectedAt(acqDate, acqTime) { function fetchRegionSource (line 53) | async function fetchRegionSource(apiKey, regionName, bbox, source) { function fetchAllRegions (line 64) | async function fetchAllRegions(apiKey) { function main (line 108) | async function main() { FILE: scripts/seed-forecasts.mjs constant CANONICAL_KEY (line 12) | const CANONICAL_KEY = 'forecast:predictions:v2'; constant PRIOR_KEY (line 13) | const PRIOR_KEY = 'forecast:predictions:prior:v2'; constant HISTORY_KEY (line 14) | const HISTORY_KEY = 'forecast:predictions:history:v1'; constant TTL_SECONDS (line 15) | const TTL_SECONDS = 6300; constant HISTORY_MAX_RUNS (line 16) | const HISTORY_MAX_RUNS = 200; constant HISTORY_MAX_FORECASTS (line 17) | const HISTORY_MAX_FORECASTS = 25; constant HISTORY_TTL_SECONDS (line 18) | const HISTORY_TTL_SECONDS = 45 * 24 * 60 * 60; constant TRACE_LATEST_KEY (line 19) | const TRACE_LATEST_KEY = 'forecast:trace:latest:v1'; constant TRACE_RUNS_KEY (line 20) | const TRACE_RUNS_KEY = 'forecast:trace:runs:v1'; constant TRACE_RUNS_MAX (line 21) | const TRACE_RUNS_MAX = 50; constant TRACE_REDIS_TTL_SECONDS (line 22) | const TRACE_REDIS_TTL_SECONDS = 60 * 24 * 60 * 60; constant WORLD_STATE_HISTORY_LIMIT (line 23) | const WORLD_STATE_HISTORY_LIMIT = 6; constant FORECAST_REFRESH_REQUEST_KEY (line 24) | const FORECAST_REFRESH_REQUEST_KEY = 'forecast:refresh-request:v1'; constant PUBLISH_MIN_PROBABILITY (line 25) | const PUBLISH_MIN_PROBABILITY = 0; constant PANEL_MIN_PROBABILITY (line 26) | const PANEL_MIN_PROBABILITY = 0.1; constant ENRICHMENT_COMBINED_MAX (line 27) | const ENRICHMENT_COMBINED_MAX = 3; constant ENRICHMENT_SCENARIO_MAX (line 28) | const ENRICHMENT_SCENARIO_MAX = 3; constant ENRICHMENT_MAX_PER_DOMAIN (line 29) | const ENRICHMENT_MAX_PER_DOMAIN = 2; constant ENRICHMENT_MIN_READINESS (line 30) | const ENRICHMENT_MIN_READINESS = 0.34; constant ENRICHMENT_PRIORITY_DOMAINS (line 31) | const ENRICHMENT_PRIORITY_DOMAINS = ['market', 'military']; constant DUPLICATE_SCORE_THRESHOLD (line 34) | const DUPLICATE_SCORE_THRESHOLD = 6; constant MAX_PUBLISHED_FORECASTS_PER_SITUATION (line 35) | const MAX_PUBLISHED_FORECASTS_PER_SITUATION = 3; constant MAX_PUBLISHED_FORECASTS_PER_SITUATION_DOMAIN (line 36) | const MAX_PUBLISHED_FORECASTS_PER_SITUATION_DOMAIN = 2; constant MAX_PUBLISHED_FORECASTS_PER_FAMILY (line 37) | const MAX_PUBLISHED_FORECASTS_PER_FAMILY = 4; constant MAX_PUBLISHED_FORECASTS_PER_FAMILY_DOMAIN (line 38) | const MAX_PUBLISHED_FORECASTS_PER_FAMILY_DOMAIN = 2; constant MIN_TARGET_PUBLISHED_FORECASTS (line 39) | const MIN_TARGET_PUBLISHED_FORECASTS = 10; constant MAX_TARGET_PUBLISHED_FORECASTS (line 40) | const MAX_TARGET_PUBLISHED_FORECASTS = 14; constant MAX_PRESELECTED_FORECASTS_PER_FAMILY (line 41) | const MAX_PRESELECTED_FORECASTS_PER_FAMILY = 3; constant MAX_PRESELECTED_FORECASTS_PER_SITUATION (line 42) | const MAX_PRESELECTED_FORECASTS_PER_SITUATION = 2; constant CYBER_MIN_THREATS_PER_COUNTRY (line 43) | const CYBER_MIN_THREATS_PER_COUNTRY = 5; constant CYBER_MAX_FORECASTS (line 44) | const CYBER_MAX_FORECASTS = 12; constant CYBER_SCORE_TYPE_MULTIPLIER (line 45) | const CYBER_SCORE_TYPE_MULTIPLIER = 1.5; constant CYBER_SCORE_CRITICAL_MULTIPLIER (line 46) | const CYBER_SCORE_CRITICAL_MULTIPLIER = 0.75; constant CYBER_PROB_MAX (line 47) | const CYBER_PROB_MAX = 0.72; constant CYBER_PROB_VOLUME_WEIGHT (line 48) | const CYBER_PROB_VOLUME_WEIGHT = 0.5; constant CYBER_PROB_TYPE_WEIGHT (line 49) | const CYBER_PROB_TYPE_WEIGHT = 0.15; constant MAX_MILITARY_SURGE_AGE_MS (line 50) | const MAX_MILITARY_SURGE_AGE_MS = 3 * 60 * 60 * 1000; constant MAX_MILITARY_BUNDLE_DRIFT_MS (line 51) | const MAX_MILITARY_BUNDLE_DRIFT_MS = 5 * 60 * 1000; constant THEATER_IDS (line 53) | const THEATER_IDS = [ constant THEATER_REGIONS (line 59) | const THEATER_REGIONS = { constant THEATER_LABELS (line 71) | const THEATER_LABELS = { constant THEATER_EXPECTED_ACTORS (line 83) | const THEATER_EXPECTED_ACTORS = { constant CHOKEPOINT_COMMODITIES (line 92) | const CHOKEPOINT_COMMODITIES = { constant CHOKEPOINT_MARKET_REGIONS (line 102) | const CHOKEPOINT_MARKET_REGIONS = { constant REGION_KEYWORDS (line 112) | const REGION_KEYWORDS = { constant TEXT_STOPWORDS (line 124) | const TEXT_STOPWORDS = new Set([ constant FORECAST_DOMAINS (line 136) | const FORECAST_DOMAINS = [ function getRedisCredentials (line 146) | function getRedisCredentials() { function getDeployRevision (line 153) | function getDeployRevision() { function redisCommand (line 160) | async function redisCommand(url, token, command) { function redisGet (line 174) | async function redisGet(url, token, key) { function redisDel (line 185) | async function redisDel(url, token, key) { function normalizeChokepoints (line 190) | function normalizeChokepoints(raw) { function normalizeGpsJamming (line 205) | function normalizeGpsJamming(raw) { function warmPingChokepoints (line 211) | async function warmPingChokepoints() { function readInputKeys (line 224) | async function readInputKeys() { function forecastId (line 274) | function forecastId(domain, region, title) { function normalize (line 281) | function normalize(value, min, max) { function getFreshMilitaryForecastInputs (line 286) | function getFreshMilitaryForecastInputs(inputs, now = Date.now()) { function selectPrimaryMilitarySurge (line 308) | function selectPrimaryMilitarySurge(_theaterId, surges) { function computeTheaterActorScore (line 329) | function computeTheaterActorScore(theaterId, surge) { function canPromoteMilitarySurge (line 344) | function canPromoteMilitarySurge(posture, surge) { function buildMilitaryForecastTitle (line 353) | function buildMilitaryForecastTitle(_theaterId, theaterLabel, surge) { function resolveCountryName (line 361) | function resolveCountryName(raw) { function makePrediction (line 367) | function makePrediction(domain, region, title, probability, confidence, ... function normalizeCiiEntry (line 393) | function normalizeCiiEntry(c) { function resolveChokepointMarketRegion (line 418) | function resolveChokepointMarketRegion(cp) { function extractCiiScores (line 425) | function extractCiiScores(inputs) { function detectConflictScenarios (line 433) | function detectConflictScenarios(inputs) { function detectMarketScenarios (line 506) | function detectMarketScenarios(inputs) { function detectSupplyChainScenarios (line 582) | function detectSupplyChainScenarios(inputs) { function detectPoliticalScenarios (line 634) | function detectPoliticalScenarios(inputs) { function detectMilitaryScenarios (line 691) | function detectMilitaryScenarios(inputs) { function detectInfraScenarios (line 821) | function detectInfraScenarios(inputs) { function detectUcdpConflictZones (line 879) | function detectUcdpConflictZones(inputs) { function detectCyberScenarios (line 904) | function detectCyberScenarios(inputs) { constant MARITIME_REGIONS (line 950) | const MARITIME_REGIONS = { function detectGpsJammingScenarios (line 958) | function detectGpsJammingScenarios(inputs) { constant MARKET_TAG_TO_REGION (line 983) | const MARKET_TAG_TO_REGION = { constant DOMAIN_HINTS (line 988) | const DOMAIN_HINTS = { constant DOMAIN_ACTOR_BLUEPRINTS (line 998) | const DOMAIN_ACTOR_BLUEPRINTS = { constant SIGNAL_TRIGGER_TEMPLATES (line 1043) | const SIGNAL_TRIGGER_TEMPLATES = { function tokenizeText (line 1062) | function tokenizeText(text) { function uniqueLowerTerms (line 1069) | function uniqueLowerTerms(terms) { function countTermMatches (line 1075) | function countTermMatches(text, terms) { function extractMeaningfulTokens (line 1088) | function extractMeaningfulTokens(text, exclude = []) { function buildExpectedRegionTags (line 1099) | function buildExpectedRegionTags(regionTerms, region) { function getDomainTerms (line 1106) | function getDomainTerms(domain) { function computeHeadlineRelevance (line 1110) | function computeHeadlineRelevance(headline, terms, domain, options = {}) { function computeMarketMatchScore (line 1137) | function computeMarketMatchScore(pred, marketTitle, regionTerms, options... function detectFromPredictionMarkets (line 1172) | function detectFromPredictionMarkets(inputs) { function loadEntityGraph (line 1200) | function loadEntityGraph() { function discoverGraphCascades (line 1213) | function discoverGraphCascades(predictions, graph) { constant DEFAULT_CASCADE_RULES (line 1243) | const DEFAULT_CASCADE_RULES = [ constant PREDICATE_EVALUATORS (line 1251) | const PREDICATE_EVALUATORS = { function evaluateRuleConditions (line 1258) | function evaluateRuleConditions(rule, pred) { function loadCascadeRules (line 1268) | function loadCascadeRules() { function resolveCascades (line 1290) | function resolveCascades(predictions, rules) { constant PROJECTION_CURVES (line 1306) | const PROJECTION_CURVES = { function computeProjections (line 1316) | function computeProjections(predictions) { function calibrateWithMarkets (line 1330) | function calibrateWithMarkets(predictions, markets) { function readPriorPredictions (line 1373) | async function readPriorPredictions() { function computeTrends (line 1380) | function computeTrends(predictions, prior) { function loadCountryCodes (line 1397) | function loadCountryCodes() { constant NEWS_MATCHABLE_TYPES (line 1406) | const NEWS_MATCHABLE_TYPES = new Set(['country', 'theater']); function getSearchTermsForRegion (line 1408) | function getSearchTermsForRegion(region) { function extractAllHeadlines (line 1451) | function extractAllHeadlines(newsInsights, newsDigest) { function attachNewsContext (line 1471) | function attachNewsContext(predictions, newsInsights, newsDigest) { constant SIGNAL_TO_SOURCE (line 1507) | const SIGNAL_TO_SOURCE = { function computeConfidence (line 1522) | function computeConfidence(predictions) { function roundPct (line 1534) | function roundPct(value) { function slugifyValue (line 1538) | function slugifyValue(value) { function buildCounterEvidence (line 1546) | function buildCounterEvidence(pred) { function buildCaseTriggers (line 1571) | function buildCaseTriggers(pred) { function buildForecastActors (line 1585) | function buildForecastActors(pred) { function buildForecastWorldState (line 1657) | function buildForecastWorldState(pred, actors = [], triggers = [], count... function branchTitle (line 1688) | function branchTitle(kind) { function branchShift (line 1694) | function branchShift(kind, pred, context = {}) { function buildBranchRounds (line 1712) | function buildBranchRounds(kind, pred, context = {}) { function buildForecastBranches (line 1761) | function buildForecastBranches(pred, context = {}) { function buildActorLenses (line 1793) | function buildActorLenses(pred) { function buildForecastCase (line 1806) | function buildForecastCase(pred) { function buildForecastCases (line 1887) | function buildForecastCases(predictions) { function buildPriorForecastSnapshot (line 1891) | function buildPriorForecastSnapshot(pred) { function buildHistoryForecastEntry (line 1906) | function buildHistoryForecastEntry(pred) { function buildHistorySnapshot (line 1939) | function buildHistorySnapshot(data, options = {}) { function appendHistorySnapshot (line 1948) | async function appendHistorySnapshot(data, options = {}) { function getTraceMaxForecasts (line 1961) | function getTraceMaxForecasts(totalForecasts = 0) { function getTraceCapLog (line 1968) | function getTraceCapLog(totalForecasts = 0) { function applyTraceMeta (line 1976) | function applyTraceMeta(pred, patch) { function buildTraceRunPrefix (line 1983) | function buildTraceRunPrefix(runId, generatedAt, basePrefix) { function buildForecastTraceRecord (line 1990) | function buildForecastTraceRecord(pred, rank, simulationByForecastId = n... function buildForecastRunActorRegistry (line 2038) | function buildForecastRunActorRegistry(predictions) { function buildActorContinuitySummary (line 2086) | function buildActorContinuitySummary(currentActors, priorWorldState = nu... function buildForecastBranchStates (line 2164) | function buildForecastBranchStates(predictions) { function buildBranchContinuitySummary (line 2202) | function buildBranchContinuitySummary(currentBranchStates, priorWorldSta... function uniqueSortedStrings (line 2280) | function uniqueSortedStrings(values) { function normalizeSituationText (line 2284) | function normalizeSituationText(value) { function formatSituationDomainLabel (line 2293) | function formatSituationDomainLabel(domains = []) { function formatSituationLabel (line 2301) | function formatSituationLabel(cluster) { function buildSituationReference (line 2308) | function buildSituationReference(situation) { function hashSituationKey (line 2313) | function hashSituationKey(parts) { function incrementSituationCounts (line 2317) | function incrementSituationCounts(target, values = []) { function pickDominantSituationValue (line 2325) | function pickDominantSituationValue(counts = {}, fallback = []) { function pickDominantSituationValues (line 2332) | function pickDominantSituationValues(counts = {}, fallback = [], maxValu... constant FAMILY_GENERIC_TOKENS (line 2343) | const FAMILY_GENERIC_TOKENS = new Set([ constant REGION_LINK_NOISE_TOKENS (line 2380) | const REGION_LINK_NOISE_TOKENS = new Set([ function filterSpecificSituationTokens (line 2402) | function filterSpecificSituationTokens(tokens = []) { function extractRegionLinkTokens (line 2410) | function extractRegionLinkTokens(values = []) { function buildSituationCandidate (line 2416) | function buildSituationCandidate(prediction) { function computeSituationOverlap (line 2434) | function computeSituationOverlap(candidate, cluster) { function shouldMergeSituationCandidate (line 2446) | function shouldMergeSituationCandidate(candidate, cluster, score) { function finalizeSituationCluster (line 2472) | function finalizeSituationCluster(cluster) { function computeSituationSimilarity (line 2506) | function computeSituationSimilarity(currentCluster, priorCluster) { function buildSituationClusters (line 2516) | function buildSituationClusters(predictions) { function formatSituationFamilyLabel (line 2577) | function formatSituationFamilyLabel(family) { function inferSituationFamilyArchetype (line 2600) | function inferSituationFamilyArchetype(input = {}) { function buildSituationFamilyCandidate (line 2619) | function buildSituationFamilyCandidate(cluster) { function computeSituationFamilyOverlap (line 2642) | function computeSituationFamilyOverlap(candidate, family) { function shouldMergeSituationFamilyCandidate (line 2655) | function shouldMergeSituationFamilyCandidate(candidate, family, score) { function finalizeSituationFamily (line 2673) | function finalizeSituationFamily(family) { function buildSituationFamilies (line 2713) | function buildSituationFamilies(situationClusters = []) { function buildSituationContinuitySummary (line 2774) | function buildSituationContinuitySummary(currentSituationClusters, prior... function buildSituationSummary (line 2861) | function buildSituationSummary(situationClusters, situationContinuity) { function clampUnitInterval (line 2880) | function clampUnitInterval(value) { function intersectAny (line 2884) | function intersectAny(left = [], right = []) { function summarizeSituationPressure (line 2888) | function summarizeSituationPressure(cluster, actors, branches) { constant SIMULATION_STATE_VERSION (line 2895) | const SIMULATION_STATE_VERSION = 2; constant SIMULATION_DOMAIN_PROFILES (line 2897) | const SIMULATION_DOMAIN_PROFILES = { function getSimulationDomainProfile (line 2996) | function getSimulationDomainProfile(dominantDomain) { constant PRESSURE_ACTION_MARKERS (line 3000) | const PRESSURE_ACTION_MARKERS = ['reposition', 'reprice', 'rebalance', '... constant STABILIZING_ACTION_MARKERS (line 3001) | const STABILIZING_ACTION_MARKERS = ['prevent', 'preserve', 'contain', 'p... constant GENERIC_ACTOR_CATEGORIES (line 3002) | const GENERIC_ACTOR_CATEGORIES = new Set(['general', 'external', 'market... constant GENERIC_ACTOR_NAME_MARKERS (line 3003) | const GENERIC_ACTOR_NAME_MARKERS = ['regional', 'participants', 'observe... function scoreActorSpecificity (line 3005) | function scoreActorSpecificity(actorLike = {}) { function summarizeBranchDynamics (line 3023) | function summarizeBranchDynamics(branches = []) { function scoreActorAction (line 3037) | function scoreActorAction(summary, stage, dominantDomain, actor) { function inferActionChannels (line 3071) | function inferActionChannels(summary, intent, dominantDomain) { function getTargetSensitivityChannels (line 3095) | function getTargetSensitivityChannels(domain) { function inferSystemEffectRelationFromChannel (line 3108) | function inferSystemEffectRelationFromChannel(channel, targetDomain) { function buildActorRoundActions (line 3131) | function buildActorRoundActions(stage, situation, actors = []) { function buildSimulationRound (line 3157) | function buildSimulationRound(stage, situation, context) { function summarizeSimulationOutcome (line 3249) | function summarizeSimulationOutcome(rounds = [], dominantDomain = '') { function buildSituationSimulationState (line 3279) | function buildSituationSimulationState(worldState, priorWorldState = nul... function buildSimulationActionLedger (line 3403) | function buildSimulationActionLedger(situationSimulations = []) { function buildSimulationInteractionLedger (line 3452) | function buildSimulationInteractionLedger(actionLedger = [], situationSi... function buildSimulationReplayTimeline (line 3578) | function buildSimulationReplayTimeline(situationSimulations = [], action... function buildReportableInteractionLedger (line 3614) | function buildReportableInteractionLedger(interactionLedger = [], situat... function buildInteractionGroups (line 3645) | function buildInteractionGroups(interactions = []) { function computeReportableEffectConfidence (line 3711) | function computeReportableEffectConfidence(group, source, target, strong... function describeSimulationPosture (line 3746) | function describeSimulationPosture(posture) { function buildSituationOutcomeSummaries (line 3752) | function buildSituationOutcomeSummaries(simulationState) { function buildSimulationReportInputs (line 3775) | function buildSimulationReportInputs(worldState) { function inferSystemEffectRelation (line 3814) | function inferSystemEffectRelation(sourceDomain, targetDomain) { function canEmitCrossSituationEffect (line 3832) | function canEmitCrossSituationEffect(source, strongestChannel, strongest... function buildInteractionWatchlist (line 3848) | function buildInteractionWatchlist(interactions = []) { function buildCrossSituationEffects (line 3859) | function buildCrossSituationEffects(simulationState) { function attachSituationContext (line 3985) | function attachSituationContext(predictions, situationClusters = buildSi... function buildSituationFamilyIndex (line 4012) | function buildSituationFamilyIndex(situationFamilies) { function attachSituationFamilyContext (line 4023) | function attachSituationFamilyContext(predictions, situationFamilies = [... function buildSituationForecastIndex (line 4046) | function buildSituationForecastIndex(situationClusters) { function projectSituationClusters (line 4057) | function projectSituationClusters(situationClusters, predictions) { function summarizeWorldStateHistory (line 4116) | function summarizeWorldStateHistory(priorWorldStates = []) { function buildReportContinuity (line 4132) | function buildReportContinuity(current, priorWorldStates = []) { function buildWorldStateReport (line 4238) | function buildWorldStateReport(worldState) { function buildForecastDomainStates (line 4381) | function buildForecastDomainStates(predictions) { function buildForecastRegionalStates (line 4428) | function buildForecastRegionalStates(predictions) { function buildForecastEvidenceLedger (line 4462) | function buildForecastEvidenceLedger(predictions) { function buildForecastRunContinuity (line 4492) | function buildForecastRunContinuity(predictions) { function buildForecastRunWorldState (line 4531) | function buildForecastRunWorldState(data) { function summarizeWorldStateSurface (line 4577) | function summarizeWorldStateSurface(worldState) { function summarizeTypeCounts (line 4592) | function summarizeTypeCounts(items) { function pickTopCountEntries (line 4604) | function pickTopCountEntries(countMap, limit = 5) { function summarizeForecastPopulation (line 4611) | function summarizeForecastPopulation(predictions) { function summarizeForecastTraceQuality (line 4630) | function summarizeForecastTraceQuality(predictions, tracedPredictions, e... function buildForecastTraceArtifacts (line 4691) | function buildForecastTraceArtifacts(data, context = {}, config = {}) { function writeForecastTracePointer (line 4843) | async function writeForecastTracePointer(pointer) { function readPreviousForecastWorldState (line 4851) | async function readPreviousForecastWorldState(storageConfig) { function readForecastWorldStateHistory (line 4865) | async function readForecastWorldStateHistory(storageConfig, limit = WORL... function writeForecastTraceArtifacts (line 4891) | async function writeForecastTraceArtifacts(data, context = {}) { function buildChangeItems (line 4956) | function buildChangeItems(pred, prev) { function buildChangeSummary (line 5003) | function buildChangeSummary(pred, prev, changeItems) { function annotateForecastChanges (line 5025) | function annotateForecastChanges(predictions, prior) { function clamp01 (line 5036) | function clamp01(value) { function scoreForecastReadiness (line 5040) | function scoreForecastReadiness(pred) { function computeAnalysisPriority (line 5078) | function computeAnalysisPriority(pred) { function rankForecastsForAnalysis (line 5112) | function rankForecastsForAnalysis(predictions) { function prepareForecastMetrics (line 5124) | function prepareForecastMetrics(predictions) { function intersectCount (line 5133) | function intersectCount(left = [], right = []) { function getForecastSituationTokens (line 5143) | function getForecastSituationTokens(pred) { function computeSituationDuplicateScore (line 5151) | function computeSituationDuplicateScore(current, kept) { function shouldSuppressAsSituationDuplicate (line 5171) | function shouldSuppressAsSituationDuplicate(current, kept, duplicateScor... function summarizePublishFiltering (line 5187) | function summarizePublishFiltering(predictions) { function getPublishSelectionTarget (line 5235) | function getPublishSelectionTarget(predictions = []) { function computePublishSelectionScore (line 5245) | function computePublishSelectionScore(pred) { function selectPublishedForecastPool (line 5267) | function selectPublishedForecastPool(predictions, options = {}) { function buildPublishedForecastArtifacts (line 5367) | function buildPublishedForecastArtifacts(candidatePool, fullRunSituation... function markDeferredFamilySelection (line 5387) | function markDeferredFamilySelection(predictions, selectedPool) { function filterPublishedForecasts (line 5402) | function filterPublishedForecasts(predictions, minProbability = PUBLISH_... function applySituationFamilyCaps (line 5516) | function applySituationFamilyCaps(predictions, situationFamilies = []) { function selectForecastsForEnrichment (line 5568) | function selectForecastsForEnrichment(predictions, options = {}) { constant FORECAST_LLM_PROVIDERS (line 5640) | const FORECAST_LLM_PROVIDERS = [ constant FORECAST_LLM_PROVIDER_NAMES (line 5644) | const FORECAST_LLM_PROVIDER_NAMES = new Set(FORECAST_LLM_PROVIDERS.map(p... function parseForecastProviderOrder (line 5646) | function parseForecastProviderOrder(raw) { function getForecastLlmCallOptions (line 5659) | function getForecastLlmCallOptions(stage = 'default') { function resolveForecastLlmProviders (line 5677) | function resolveForecastLlmProviders(options = {}) { function summarizeForecastLlmOptions (line 5697) | function summarizeForecastLlmOptions(options = {}) { constant SCENARIO_SYSTEM_PROMPT (line 5704) | const SCENARIO_SYSTEM_PROMPT = `You are a senior geopolitical intelligen... constant COMBINED_SYSTEM_PROMPT (line 5719) | const COMBINED_SYSTEM_PROMPT = `You are a senior geopolitical intelligen... function validatePerspectives (line 5739) | function validatePerspectives(items, predictions) { function validateCaseNarratives (line 5752) | function validateCaseNarratives(items, predictions) { function sanitizeForPrompt (line 5765) | function sanitizeForPrompt(text) { function parseLLMScenarios (line 5769) | function parseLLMScenarios(text) { function hasEvidenceReference (line 5789) | function hasEvidenceReference(text, candidate) { function validateScenarios (line 5796) | function validateScenarios(scenarios, predictions) { function getEnrichmentFailureReason (line 5822) | function getEnrichmentFailureReason({ result, raw, scenarios = 0, perspe... function callForecastLLM (line 5830) | async function callForecastLLM(systemPrompt, userPrompt, options = {}) { function redisSet (line 5878) | async function redisSet(url, token, key, data, ttlSeconds) { function buildCacheHash (line 5889) | function buildCacheHash(preds) { function buildUserPrompt (line 5903) | function buildUserPrompt(preds) { function buildFallbackBaseCase (line 5943) | function buildFallbackBaseCase(pred) { function buildFallbackEscalatoryCase (line 5964) | function buildFallbackEscalatoryCase(pred) { function buildFallbackContrarianCase (line 5981) | function buildFallbackContrarianCase(pred) { function buildFallbackScenario (line 5993) | function buildFallbackScenario(pred) { function buildFeedSummary (line 6003) | function buildFeedSummary(pred) { function buildFallbackPerspectives (line 6019) | function buildFallbackPerspectives(pred) { function populateFallbackNarratives (line 6029) | function populateFallbackNarratives(predictions) { function refreshPublishedNarratives (line 6060) | function refreshPublishedNarratives(predictions) { function enrichScenariosWithLLM (line 6074) | async function enrichScenariosWithLLM(predictions) { function fetchForecasts (line 6357) | async function fetchForecasts() { function readForecastRefreshRequest (line 6439) | async function readForecastRefreshRequest() { function clearForecastRefreshRequest (line 6450) | async function clearForecastRefreshRequest() { function sameForecastRefreshRequest (line 6459) | function sameForecastRefreshRequest(left, right) { function clearForecastRefreshRequestIfUnchanged (line 6467) | async function clearForecastRefreshRequestIfUnchanged(consumedRequest) { function buildForecastTriggerContext (line 6481) | function buildForecastTriggerContext(request = null) { FILE: scripts/seed-gdelt-intel.mjs constant CANONICAL_KEY (line 7) | const CANONICAL_KEY = 'intelligence:gdelt-intel:v1'; constant CACHE_TTL (line 8) | const CACHE_TTL = 86400; constant GDELT_DOC_API (line 9) | const GDELT_DOC_API = 'https://api.gdeltproject.org/api/v2/doc/doc'; constant INTER_TOPIC_DELAY_MS (line 10) | const INTER_TOPIC_DELAY_MS = 20_000; constant POST_EXHAUST_DELAY_MS (line 11) | const POST_EXHAUST_DELAY_MS = 120_000; constant INTEL_TOPICS (line 13) | const INTEL_TOPICS = [ function isValidUrl (line 22) | function isValidUrl(str) { function normalizeArticle (line 29) | function normalizeArticle(raw) { function fetchTopicArticles (line 43) | async function fetchTopicArticles(topic) { function fetchWithRetry (line 71) | async function fetchWithRetry(topic, maxRetries = 3) { function fetchAllTopics (line 90) | async function fetchAllTopics() { function validate (line 129) | function validate(data) { FILE: scripts/seed-gulf-quotes.mjs constant CANONICAL_KEY (line 9) | const CANONICAL_KEY = 'market:gulf-quotes:v1'; constant CACHE_TTL (line 10) | const CACHE_TTL = 3600; constant YAHOO_DELAY_MS (line 11) | const YAHOO_DELAY_MS = 200; constant GULF_SYMBOLS (line 13) | const GULF_SYMBOLS = gulfConfig.symbols; function sleep (line 15) | function sleep(ms) { function fetchYahooWithRetry (line 19) | async function fetchYahooWithRetry(url, label, maxAttempts = 4) { function parseYahooChart (line 41) | function parseYahooChart(data, meta) { function fetchGulfQuotes (line 65) | async function fetchGulfQuotes() { function validate (line 101) | function validate(data) { FILE: scripts/seed-infra.mjs constant API_BASE (line 24) | const API_BASE = 'https://api.worldmonitor.app'; constant TIMEOUT (line 25) | const TIMEOUT = 30_000; function warmPing (line 27) | async function warmPing(name, path) { function main (line 49) | async function main() { FILE: scripts/seed-insights.mjs constant CANONICAL_KEY (line 8) | const CANONICAL_KEY = 'news:insights:v1'; constant DIGEST_KEY (line 9) | const DIGEST_KEY = 'news:digest:v1:full:en'; constant CACHE_TTL (line 10) | const CACHE_TTL = 1800; constant MAX_HEADLINES (line 11) | const MAX_HEADLINES = 10; constant MAX_HEADLINE_LEN (line 12) | const MAX_HEADLINE_LEN = 500; constant GROQ_MODEL (line 13) | const GROQ_MODEL = 'llama-3.1-8b-instant'; constant TASK_NARRATION (line 15) | const TASK_NARRATION = /^(we need to|i need to|let me|i'll |i should|i w... constant PROMPT_ECHO (line 16) | const PROMPT_ECHO = /^(summarize the top story|summarize the key|rules:|... function stripReasoningPreamble (line 18) | function stripReasoningPreamble(text) { function sanitizeTitle (line 28) | function sanitizeTitle(title) { function readDigestFromRedis (line 37) | async function readDigestFromRedis() { function readExistingInsights (line 48) | async function readExistingInsights() { constant LLM_PROVIDERS (line 61) | const LLM_PROVIDERS = [ function callLLM (line 94) | async function callLLM(headlines) { function categorizeStory (line 168) | function categorizeStory(title) { function warmDigestCache (line 189) | async function warmDigestCache() { function fetchInsights (line 203) | async function fetchInsights() { function validate (line 322) | function validate(data) { FILE: scripts/seed-internet-outages.mjs constant CF_RADAR_URL (line 7) | const CF_RADAR_URL = 'https://api.cloudflare.com/client/v4/radar/annotat... constant CANONICAL_KEY (line 8) | const CANONICAL_KEY = 'infra:outages:v1'; constant CACHE_TTL (line 9) | const CACHE_TTL = 1800; constant COUNTRY_COORDS (line 11) | const COUNTRY_COORDS = { function mapOutageSeverity (line 52) | function mapOutageSeverity(outageType) { function toEpochMs (line 58) | function toEpochMs(value) { function fetchOutages (line 64) | async function fetchOutages() { function validate (line 123) | function validate(data) { FILE: scripts/seed-iran-events.mjs constant CANONICAL_KEY (line 11) | const CANONICAL_KEY = 'conflict:iran-events:v1'; constant LOCATION_COORDS (line 13) | const LOCATION_COORDS = { constant CATEGORY_MAP (line 154) | const CATEGORY_MAP = { function geolocate (line 164) | function geolocate(title) { function categorizeSeverity (line 172) | function categorizeSeverity(title) { function parseRelativeTime (line 180) | function parseRelativeTime(timeStr) { function fetchIranEvents (line 192) | async function fetchIranEvents() { function validate (line 225) | function validate(data) { FILE: scripts/seed-market-quotes.mjs constant CANONICAL_KEY (line 9) | const CANONICAL_KEY = 'market:stocks-bootstrap:v1'; constant CACHE_TTL (line 10) | const CACHE_TTL = 1800; constant YAHOO_DELAY_MS (line 11) | const YAHOO_DELAY_MS = 200; constant MARKET_SYMBOLS (line 13) | const MARKET_SYMBOLS = stocksConfig.symbols.map(s => s.symbol); constant YAHOO_ONLY (line 15) | const YAHOO_ONLY = new Set(stocksConfig.yahooOnly); function fetchFinnhubQuote (line 17) | async function fetchFinnhubQuote(symbol, apiKey) { function fetchYahooWithRetry (line 34) | async function fetchYahooWithRetry(url, label, maxAttempts = 4) { function fetchYahooQuote (line 56) | async function fetchYahooQuote(symbol) { function fetchMarketQuotes (line 68) | async function fetchMarketQuotes() { function validate (line 116) | function validate(data) { function fetchAndStash (line 122) | async function fetchAndStash() { FILE: scripts/seed-military-bases.mjs constant BATCH_SIZE (line 9) | const BATCH_SIZE = 500; constant R2_BUCKET_URL (line 10) | const R2_BUCKET_URL = 'https://api.cloudflare.com/client/v4/accounts/{ac... constant MAX_RETRIES (line 11) | const MAX_RETRIES = 3; constant RETRY_BASE_MS (line 12) | const RETRY_BASE_MS = 1000; constant PROGRESS_INTERVAL (line 13) | const PROGRESS_INTERVAL = 5000; constant GRACE_PERIOD_MS (line 14) | const GRACE_PERIOD_MS = 5 * 60 * 1000; constant VALIDATION_SAMPLE_SIZE (line 15) | const VALIDATION_SAMPLE_SIZE = 10; function parseArgs (line 17) | function parseArgs() { function getKeyPrefix (line 47) | function getKeyPrefix(env, sha) { function maskToken (line 52) | function maskToken(token) { function loadEnvFile (line 57) | function loadEnvFile() { function pipelineRequest (line 79) | async function pipelineRequest(url, token, commands, attempt = 1) { function sleep (line 105) | function sleep(ms) { function seedGeo (line 109) | async function seedGeo(url, token, geoKey, entries) { function seedMeta (line 127) | async function seedMeta(url, token, metaKey, entries) { function validate (line 149) | async function validate(url, token, prefix, version, expectedCount) { function atomicSwitch (line 205) | async function atomicSwitch(url, token, prefix, version) { function cleanupOldVersion (line 211) | async function cleanupOldVersion(url, token, prefix, newVersion) { function main (line 225) | async function main() { FILE: scripts/seed-military-flights.mjs constant LIVE_KEY (line 12) | const LIVE_KEY = 'military:flights:v1'; constant STALE_KEY (line 13) | const STALE_KEY = 'military:flights:stale:v1'; constant LIVE_TTL (line 14) | const LIVE_TTL = 600; constant STALE_TTL (line 15) | const STALE_TTL = 86400; constant THEATER_POSTURE_LIVE_KEY (line 17) | const THEATER_POSTURE_LIVE_KEY = 'theater-posture:sebuf:v1'; constant THEATER_POSTURE_STALE_KEY (line 18) | const THEATER_POSTURE_STALE_KEY = 'theater_posture:sebuf:stale:v1'; constant THEATER_POSTURE_BACKUP_KEY (line 19) | const THEATER_POSTURE_BACKUP_KEY = 'theater-posture:sebuf:backup:v1'; constant THEATER_POSTURE_LIVE_TTL (line 20) | const THEATER_POSTURE_LIVE_TTL = 900; constant THEATER_POSTURE_STALE_TTL (line 21) | const THEATER_POSTURE_STALE_TTL = 86400; constant THEATER_POSTURE_BACKUP_TTL (line 22) | const THEATER_POSTURE_BACKUP_TTL = 604800; constant MILITARY_FORECAST_INPUTS_LIVE_KEY (line 23) | const MILITARY_FORECAST_INPUTS_LIVE_KEY = 'military:forecast-inputs:v1'; constant MILITARY_FORECAST_INPUTS_STALE_KEY (line 24) | const MILITARY_FORECAST_INPUTS_STALE_KEY = 'military:forecast-inputs:sta... constant MILITARY_FORECAST_INPUTS_LIVE_TTL (line 25) | const MILITARY_FORECAST_INPUTS_LIVE_TTL = 900; constant MILITARY_FORECAST_INPUTS_STALE_TTL (line 26) | const MILITARY_FORECAST_INPUTS_STALE_TTL = 86400; constant MILITARY_SURGES_LIVE_KEY (line 27) | const MILITARY_SURGES_LIVE_KEY = 'military:surges:v1'; constant MILITARY_SURGES_STALE_KEY (line 28) | const MILITARY_SURGES_STALE_KEY = 'military:surges:stale:v1'; constant MILITARY_SURGES_HISTORY_KEY (line 29) | const MILITARY_SURGES_HISTORY_KEY = 'military:surges:history:v1'; constant MILITARY_SURGES_LIVE_TTL (line 30) | const MILITARY_SURGES_LIVE_TTL = 900; constant MILITARY_SURGES_STALE_TTL (line 31) | const MILITARY_SURGES_STALE_TTL = 86400; constant MILITARY_SURGES_HISTORY_TTL (line 32) | const MILITARY_SURGES_HISTORY_TTL = 604800; constant MILITARY_SURGES_HISTORY_MAX (line 33) | const MILITARY_SURGES_HISTORY_MAX = 72; constant MILITARY_CLASSIFICATION_AUDIT_LIVE_KEY (line 34) | const MILITARY_CLASSIFICATION_AUDIT_LIVE_KEY = 'military:classification-... constant MILITARY_CLASSIFICATION_AUDIT_STALE_KEY (line 35) | const MILITARY_CLASSIFICATION_AUDIT_STALE_KEY = 'military:classification... constant MILITARY_CLASSIFICATION_AUDIT_LIVE_TTL (line 36) | const MILITARY_CLASSIFICATION_AUDIT_LIVE_TTL = 900; constant MILITARY_CLASSIFICATION_AUDIT_STALE_TTL (line 37) | const MILITARY_CLASSIFICATION_AUDIT_STALE_TTL = 86400; constant CHAIN_FORECAST_SEED (line 38) | const CHAIN_FORECAST_SEED = process.env.CHAIN_FORECAST_SEED_ON_MILITARY ... constant FORECAST_REFRESH_REQUEST_KEY (line 39) | const FORECAST_REFRESH_REQUEST_KEY = 'forecast:refresh-request:v1'; constant FORECAST_REFRESH_REQUEST_TTL (line 40) | const FORECAST_REFRESH_REQUEST_TTL = 60 * 60; constant OPENSKY_PROXY_AUTH (line 43) | const OPENSKY_PROXY_AUTH = process.env.OPENSKY_PROXY_AUTH || process.env... constant PROXY_ENABLED (line 44) | const PROXY_ENABLED = !!OPENSKY_PROXY_AUTH; constant QUERY_REGIONS (line 47) | const QUERY_REGIONS = [ constant HEX_RANGES (line 53) | const HEX_RANGES = [ constant COMMERCIAL_CALLSIGNS (line 86) | const COMMERCIAL_CALLSIGNS = new Set([ constant COMMERCIAL_CALLSIGN_PATTERNS (line 91) | const COMMERCIAL_CALLSIGN_PATTERNS = [ constant TRUSTED_HEX_OPERATORS (line 105) | const TRUSTED_HEX_OPERATORS = new Set(['usaf', 'raf', 'faf', 'gaf', 'iaf... constant CALLSIGN_PATTERNS (line 108) | const CALLSIGN_PATTERNS = [ constant OPERATOR_COUNTRY (line 203) | const OPERATOR_COUNTRY = { constant HOTSPOTS (line 210) | const HOTSPOTS = [ constant POSTURE_THEATERS (line 218) | const POSTURE_THEATERS = [ function isKnownHex (line 231) | function isKnownHex(hexCode) { function identifyByCallsign (line 239) | function identifyByCallsign(callsign, originCountry) { function identifyCommercialCallsign (line 259) | function identifyCommercialCallsign(callsign) { function detectAircraftType (line 272) | function detectAircraftType(callsign) { function buildWingbitsSourceMeta (line 285) | function buildWingbitsSourceMeta(flight) { function getSourceHintText (line 314) | function getSourceHintText(sourceMeta = {}) { function summarizeSourceMeta (line 330) | function summarizeSourceMeta(sourceMeta = {}) { function summarizeRawSourcePreview (line 345) | function summarizeRawSourcePreview(sourceMeta = {}) { constant SOURCE_META_FIELDS (line 352) | const SOURCE_META_FIELDS = [ function hasMeaningfulSourceMeta (line 364) | function hasMeaningfulSourceMeta(sourceMeta = {}) { function createClassificationStageCounters (line 369) | function createClassificationStageCounters() { function recordSourceCoverage (line 392) | function recordSourceCoverage(stageCounters, sourceMeta = {}, sourceHint... function deriveSourceHints (line 429) | function deriveSourceHints(sourceMeta = {}) { function detectAircraftTypeFromSourceMeta (line 439) | function detectAircraftTypeFromSourceMeta(sourceMeta = {}) { function deriveOperatorFromSourceMeta (line 452) | function deriveOperatorFromSourceMeta(sourceMeta = {}) { function getNearbyHotspot (line 482) | function getNearbyHotspot(lat, lon) { function redactProxy (line 491) | function redactProxy(msg) { function parseProxyAuth (line 495) | function parseProxyAuth() { function proxyFetchJson (line 508) | function proxyFetchJson(url, { headers = {}, timeout = 15000, method = '... constant OPENSKY_BASE (line 570) | const OPENSKY_BASE = 'https://opensky-network.org/api'; constant WINGBITS_BASE (line 571) | const WINGBITS_BASE = 'https://customer-api.wingbits.com/v1/flights'; constant OPENSKY_TOKEN_URL (line 572) | const OPENSKY_TOKEN_URL = 'https://auth.opensky-network.org/auth/realms/... constant OPENSKY_AUTH_COOLDOWN_MS (line 573) | const OPENSKY_AUTH_COOLDOWN_MS = 60_000; constant OPENSKY_AUTH_RETRY_DELAYS (line 574) | const OPENSKY_AUTH_RETRY_DELAYS = [0, 2_000, 5_000]; function clearOpenSkyToken (line 580) | function clearOpenSkyToken() { function isOpenSkyUnauthorizedError (line 585) | function isOpenSkyUnauthorizedError(error) { function getOpenSkyAuthStatus (line 589) | function getOpenSkyAuthStatus() { function fetchJsonDirect (line 595) | async function fetchJsonDirect(url, { headers = {}, method = 'GET', body... function getOpenSkyToken (line 609) | async function getOpenSkyToken() { function fetchOpenSkyAuthenticated (line 683) | async function fetchOpenSkyAuthenticated(region) { function fetchOpenSkyAnonymous (line 722) | async function fetchOpenSkyAnonymous(region) { function fetchOpenSkyRegion (line 742) | async function fetchOpenSkyRegion(region, { source, fetchSources, seenId... function fetchWingbits (line 805) | async function fetchWingbits() { function fetchAllStates (line 886) | async function fetchAllStates() { function summarizeClassificationAudit (line 926) | function summarizeClassificationAudit(rawStates, flights, rejected, stag... function pushRejectedFlight (line 1016) | function pushRejectedFlight(rejected, state, reason, extra = {}) { function classifyCallsignMatchedFlight (line 1025) | function classifyCallsignMatchedFlight({ csMatch, hexMatch, callsign, so... function classifyHexMatchedFlight (line 1059) | function classifyHexMatchedFlight({ state, hexMatch, callsign, sourceMet... function buildMilitaryFlightRecord (line 1098) | function buildMilitaryFlightRecord(state, classified, sourceHints) { function filterMilitaryFlights (line 1136) | function filterMilitaryFlights(allStates) { function calculateTheaterPostures (line 1196) | function calculateTheaterPostures(flights) { function redisSet (line 1222) | async function redisSet(url, token, key, value, ttl) { function redisGet (line 1234) | async function redisGet(url, token, key) { function requestForecastRefreshIfEnabled (line 1245) | async function requestForecastRefreshIfEnabled(runId, assessedAt, source) { function main (line 1263) | async function main() { FILE: scripts/seed-military-maritime-news.mjs constant API_BASE (line 27) | const API_BASE = 'https://api.worldmonitor.app'; constant TIMEOUT (line 28) | const TIMEOUT = 30_000; function warmPing (line 30) | async function warmPing(name, path, body = {}) { function main (line 52) | async function main() { FILE: scripts/seed-natural-events.mjs constant EONET_API_URL (line 7) | const EONET_API_URL = 'https://eonet.gsfc.nasa.gov/api/v3/events'; constant GDACS_API (line 8) | const GDACS_API = 'https://www.gdacs.org/gdacsapi/api/events/geteventlis... constant NHC_BASE (line 9) | const NHC_BASE = 'https://mapservices.weather.noaa.gov/tropical/rest/ser... constant CANONICAL_KEY (line 10) | const CANONICAL_KEY = 'natural:events:v1'; constant CACHE_TTL (line 11) | const CACHE_TTL = 3600; constant DAYS (line 13) | const DAYS = 30; constant WILDFIRE_MAX_AGE_MS (line 14) | const WILDFIRE_MAX_AGE_MS = 48 * 60 * 60 * 1000; constant GDACS_TO_CATEGORY (line 16) | const GDACS_TO_CATEGORY = { constant EVENT_TYPE_NAMES (line 25) | const EVENT_TYPE_NAMES = { constant NATURAL_EVENT_CATEGORIES (line 34) | const NATURAL_EVENT_CATEGORIES = new Set([ function normalizeCategory (line 40) | function normalizeCategory(id) { function fetchEonet (line 45) | async function fetchEonet(days) { function classifyWind (line 92) | function classifyWind(kt) { function parseGdacsTcFields (line 102) | function parseGdacsTcFields(props) { function fetchGdacs (line 142) | async function fetchGdacs() { constant NHC_STORM_SLOTS (line 196) | const NHC_STORM_SLOTS = []; constant BASIN_OFFSETS (line 197) | const BASIN_OFFSETS = { AT: 4, EP: 134, CP: 264 }; constant BASIN_CODES (line 198) | const BASIN_CODES = { AT: 'AL', EP: 'EP', CP: 'CP' }; function nhcQuery (line 213) | async function nhcQuery(layerId) { constant NHC_STORM_TYPES (line 223) | const NHC_STORM_TYPES = { function fetchNhc (line 229) | async function fetchNhc() { function fetchNaturalEvents (line 359) | async function fetchNaturalEvents() { function validate (line 418) | function validate(data) { FILE: scripts/seed-prediction-markets.mjs constant CANONICAL_KEY (line 12) | const CANONICAL_KEY = 'prediction:markets-bootstrap:v1'; constant CACHE_TTL (line 13) | const CACHE_TTL = 1800; constant GAMMA_BASE (line 15) | const GAMMA_BASE = 'https://gamma-api.polymarket.com'; constant KALSHI_BASE (line 16) | const KALSHI_BASE = 'https://api.elections.kalshi.com/trade-api/v2'; constant FETCH_TIMEOUT (line 17) | const FETCH_TIMEOUT = 10_000; constant TAG_DELAY_MS (line 18) | const TAG_DELAY_MS = 300; constant GEOPOLITICAL_TAGS (line 20) | const GEOPOLITICAL_TAGS = predictionTags.geopolitical; constant TECH_TAGS (line 21) | const TECH_TAGS = predictionTags.tech; constant FINANCE_TAGS (line 22) | const FINANCE_TAGS = predictionTags.finance; function fetchEventsByTag (line 24) | async function fetchEventsByTag(tag, limit = 20) { function fetchKalshiEvents (line 48) | async function fetchKalshiEvents() { function kalshiTitle (line 72) | function kalshiTitle(marketTitle, eventTitle) { function fetchKalshiMarkets (line 79) | async function fetchKalshiMarkets() { function fetchAllPredictions (line 121) | async function fetchAllPredictions() { FILE: scripts/seed-radiation-watch.mjs constant CANONICAL_KEY (line 7) | const CANONICAL_KEY = 'radiation:observations:v1'; constant CACHE_TTL (line 8) | const CACHE_TTL = 7200; constant EPA_TIMEOUT_MS (line 9) | const EPA_TIMEOUT_MS = 20_000; constant SAFECAST_TIMEOUT_MS (line 10) | const SAFECAST_TIMEOUT_MS = 20_000; constant BASELINE_WINDOW_SIZE (line 11) | const BASELINE_WINDOW_SIZE = 168; constant BASELINE_MIN_SAMPLES (line 12) | const BASELINE_MIN_SAMPLES = 48; constant SAFECAST_BASELINE_WINDOW_SIZE (line 13) | const SAFECAST_BASELINE_WINDOW_SIZE = 96; constant SAFECAST_MIN_SAMPLES (line 14) | const SAFECAST_MIN_SAMPLES = 24; constant SAFECAST_DISTANCE_KM (line 15) | const SAFECAST_DISTANCE_KM = 120; constant SAFECAST_LOOKBACK_DAYS (line 16) | const SAFECAST_LOOKBACK_DAYS = 400; constant SAFECAST_CPM_PER_USV_H (line 17) | const SAFECAST_CPM_PER_USV_H = 350; constant EPA_SITES (line 19) | const EPA_SITES = [ constant SAFECAST_SITES (line 32) | const SAFECAST_SITES = [ function round (line 38) | function round(value, digits = 1) { function parseRadNetTimestamp (line 43) | function parseRadNetTimestamp(raw) { function classifyFreshness (line 57) | function classifyFreshness(observedAt) { function classifySeverity (line 64) | function classifySeverity(delta, zScore, freshness) { function severityRank (line 71) | function severityRank(value) { function freshnessRank (line 79) | function freshnessRank(value) { function confidenceRank (line 87) | function confidenceRank(value) { function average (line 95) | function average(values) { function stdDev (line 101) | function stdDev(values, mean) { function downgradeConfidence (line 107) | function downgradeConfidence(value) { function normalizeUnit (line 112) | function normalizeUnit(value, unit) { function parseApprovedReadings (line 132) | function parseApprovedReadings(csv) { function buildBaseObservation (line 153) | function buildBaseObservation({ function toEpaObservation (line 202) | function toEpaObservation(site, readings) { function toSafecastObservation (line 237) | function toSafecastObservation(site, measurements) { function baseConfidence (line 272) | function baseConfidence(observation) { function observationPriority (line 280) | function observationPriority(observation) { function supportsSameSignal (line 289) | function supportsSameSignal(primary, secondary) { function materiallyConflicts (line 300) | function materiallyConflicts(primary, secondary) { function finalizeObservationGroup (line 311) | function finalizeObservationGroup(group) { function sortFinalObservations (line 353) | function sortFinalObservations(a, b) { function summarizeObservations (line 364) | function summarizeObservations(observations) { function fetchEpaObservation (line 381) | async function fetchEpaObservation(site, year) { function fetchSafecastObservation (line 392) | async function fetchSafecastObservation(site, capturedAfter) { function fetchRadiationWatch (line 436) | async function fetchRadiationWatch() { function validate (line 461) | function validate(data) { FILE: scripts/seed-research.mjs constant ARXIV_TTL (line 15) | const ARXIV_TTL = 3600; constant HN_TTL (line 16) | const HN_TTL = 600; constant TECH_EVENTS_TTL (line 17) | const TECH_EVENTS_TTL = 28800; constant TRENDING_TTL (line 18) | const TRENDING_TTL = 3600; function fetchArxivPapers (line 22) | async function fetchArxivPapers() { function fetchHackerNews (line 70) | async function fetchHackerNews() { function fetchTechEvents (line 120) | async function fetchTechEvents() { constant OSSINSIGHT_LANG_MAP (line 230) | const OSSINSIGHT_LANG_MAP = { python: 'Python', javascript: 'JavaScript'... function fetchTrendingFromOSSInsight (line 232) | async function fetchTrendingFromOSSInsight(lang) { function fetchTrendingFromGitHubSearch (line 253) | async function fetchTrendingFromGitHubSearch(lang) { function fetchTrendingRepos (line 273) | async function fetchTrendingRepos() { function fetchAll (line 298) | async function fetchAll() { function validate (line 335) | function validate(data) { FILE: scripts/seed-sanctions-pressure.mjs constant CANONICAL_KEY (line 9) | const CANONICAL_KEY = 'sanctions:pressure:v1'; constant STATE_KEY (line 10) | const STATE_KEY = 'sanctions:pressure:state:v1'; constant CACHE_TTL (line 11) | const CACHE_TTL = 12 * 60 * 60; constant DEFAULT_RECENT_LIMIT (line 12) | const DEFAULT_RECENT_LIMIT = 60; constant OFAC_TIMEOUT_MS (line 13) | const OFAC_TIMEOUT_MS = 45_000; constant PROGRAM_CODE_RE (line 14) | const PROGRAM_CODE_RE = /^[A-Z0-9][A-Z0-9-]{1,24}$/; constant OFAC_SOURCES (line 16) | const OFAC_SOURCES = [ constant XML_PARSER (line 21) | const XML_PARSER = new XMLParser({ function listify (line 29) | function listify(value) { function textValue (line 34) | function textValue(value) { function buildEpoch (line 45) | function buildEpoch(parts) { function uniqueSorted (line 53) | function uniqueSorted(values) { function compactNote (line 57) | function compactNote(value) { function extractDocumentedName (line 63) | function extractDocumentedName(documentedName) { function normalizeDateOfIssue (line 71) | function normalizeDateOfIssue(value) { function buildReferenceMaps (line 76) | function buildReferenceMaps(doc) { function buildLocationMap (line 99) | function buildLocationMap(doc, areaCodes) { function extractPartyName (line 116) | function extractPartyName(profile) { function resolveEntityType (line 125) | function resolveEntityType(profile, featureTypes) { function extractPartyCountries (line 140) | function extractPartyCountries(profile, featureTypes, locations) { function buildPartyMap (line 168) | function buildPartyMap(doc, featureTypes, locations) { function extractPrograms (line 186) | function extractPrograms(entry) { function extractEffectiveAt (line 193) | function extractEffectiveAt(entry) { function extractNote (line 209) | function extractNote(entry, legalBasis) { function buildEntriesForDocument (line 221) | function buildEntriesForDocument(doc, sourceLabel) { function sortEntries (line 251) | function sortEntries(a, b) { function buildCountryPressure (line 257) | function buildCountryPressure(entries) { function buildProgramPressure (line 287) | function buildProgramPressure(entries) { function fetchSource (line 305) | async function fetchSource(source) { function fetchSanctionsPressure (line 324) | async function fetchSanctionsPressure() { function validate (line 370) | function validate(data) { FILE: scripts/seed-security-advisories.mjs constant CANONICAL_KEY (line 7) | const CANONICAL_KEY = 'intelligence:advisories:v1'; constant BOOTSTRAP_KEY (line 8) | const BOOTSTRAP_KEY = 'intelligence:advisories-bootstrap:v1'; constant TTL (line 9) | const TTL = 7200; constant ALLOWED_DOMAINS (line 11) | const ALLOWED_DOMAINS = new Set(loadSharedConfig('rss-allowed-domains.js... constant ADVISORY_FEEDS (line 13) | const ADVISORY_FEEDS = [ constant RELAY_URL (line 40) | const RELAY_URL = process.env.RELAY_URL || 'https://proxy.worldmonitor.a... function parseUsLevel (line 42) | function parseUsLevel(title) { function parseAuLevel (line 48) | function parseAuLevel(title) { function parseLevel (line 56) | function parseLevel(title, parser) { constant COUNTRY_NAMES (line 62) | const COUNTRY_NAMES = loadSharedConfig('country-names.json'); constant SORTED_COUNTRY_ENTRIES (line 63) | const SORTED_COUNTRY_ENTRIES = Object.entries(COUNTRY_NAMES).sort((a, b)... function extractCountry (line 65) | function extractCountry(title, feed) { function isValidUrl (line 75) | function isValidUrl(link) { function stripHtml (line 83) | function stripHtml(html) { function parseRssItems (line 90) | function parseRssItems(xml) { function parseAtomEntries (line 104) | function parseAtomEntries(xml) { function parseFeed (line 120) | function parseFeed(xml) { function rssProxyUrl (line 125) | function rssProxyUrl(feedUrl) { function fetchFeed (line 134) | async function fetchFeed(feed) { function buildByCountryMap (line 166) | function buildByCountryMap(advisories) { function fetchAll (line 179) | async function fetchAll() { function validate (line 206) | function validate(data) { FILE: scripts/seed-service-statuses.mjs constant RPC_URL (line 15) | const RPC_URL = 'https://api.worldmonitor.app/api/infrastructure/v1/list... constant CANONICAL_KEY (line 16) | const CANONICAL_KEY = 'infra:service-statuses:v1'; function warmPing (line 18) | async function warmPing() { FILE: scripts/seed-stablecoin-markets.mjs constant CANONICAL_KEY (line 9) | const CANONICAL_KEY = 'market:stablecoins:v1'; constant CACHE_TTL (line 10) | const CACHE_TTL = 3600; constant STABLECOIN_IDS (line 12) | const STABLECOIN_IDS = stablecoinConfig.ids.join(','); function fetchWithRateLimitRetry (line 14) | async function fetchWithRateLimitRetry(url, maxAttempts = 5, headers = {... constant COINPAPRIKA_ID_MAP (line 32) | const COINPAPRIKA_ID_MAP = stablecoinConfig.coinpaprika; function fetchFromCoinGecko (line 34) | async function fetchFromCoinGecko() { function fetchFromCoinPaprika (line 51) | async function fetchFromCoinPaprika() { function fetchStablecoinMarkets (line 79) | async function fetchStablecoinMarkets() { function validate (line 128) | function validate(data) { FILE: scripts/seed-submarine-cables.mjs constant BASE (line 7) | const BASE = 'https://www.submarinecablemap.com/api/v3'; constant CANONICAL_KEY (line 8) | const CANONICAL_KEY = 'infrastructure:submarine-cables:v1'; constant CACHE_TTL (line 9) | const CACHE_TTL = 7 * 24 * 3600; constant CABLE_REGIONS (line 13) | const CABLE_REGIONS = [ constant COUNTRY_CODES (line 86) | const COUNTRY_CODES = { function r1 (line 127) | function r1(n) { return Math.round(n * 10) / 10; } function r2 (line 128) | function r2(n) { return Math.round(n * 100) / 100; } function simplifyRoute (line 130) | function simplifyRoute(coords) { function slugToId (line 145) | function slugToId(slug) { return slug.replace(/-/g, '_'); } function getCountryCode (line 148) | function getCountryCode(countryName) { function fetchSubmarineCables (line 159) | async function fetchSubmarineCables() { function validate (line 290) | function validate(data) { FILE: scripts/seed-supply-chain-trade.mjs constant KEYS (line 9) | const KEYS = { constant SHIPPING_TTL (line 16) | const SHIPPING_TTL = 3600; constant TRADE_TTL (line 17) | const TRADE_TTL = 21600; constant MAJOR_REPORTERS (line 19) | const MAJOR_REPORTERS = ['840', '156', '276', '392', '826', '356', '076'... constant WTO_MEMBER_CODES (line 21) | const WTO_MEMBER_CODES = { constant SHIPPING_SERIES (line 30) | const SHIPPING_SERIES = [ function detectSpike (line 35) | function detectSpike(history) { function fetchShippingRates (line 46) | async function fetchShippingRates() { function fetchSSEIndex (line 85) | async function fetchSSEIndex(indexName, indexId, dataItemType, displayNa... function fetchSCFI (line 113) | async function fetchSCFI() { function fetchCCFI (line 117) | async function fetchCCFI() { constant BDI_INDEX_MAP (line 123) | const BDI_INDEX_MAP = [ function fetchBDI (line 131) | async function fetchBDI() { function accumulateHistory (line 196) | function accumulateHistory(newIndices, previousPayload) { function wtoFetch (line 224) | async function wtoFetch(path, params) { function fetchBudgetLabEffectiveTariffRate (line 238) | async function fetchBudgetLabEffectiveTariffRate() { constant BILATERAL_PAIRS (line 264) | const BILATERAL_PAIRS = [ function parseFlowRows (line 277) | function parseFlowRows(data, indicator) { function buildFlowRecords (line 286) | function buildFlowRecords(rows, reporterCode, partnerCode) { function fetchFlowPair (line 308) | async function fetchFlowPair(reporter, partner, years, flows) { function fetchTradeFlows (line 326) | async function fetchTradeFlows() { function fetchTradeBarriers (line 346) | async function fetchTradeBarriers() { function fetchTradeRestrictions (line 409) | async function fetchTradeRestrictions() { function fetchTariffTrends (line 451) | async function fetchTariffTrends() { constant TREASURY_MTS_URL (line 493) | const TREASURY_MTS_URL = 'https://api.fiscaldata.treasury.gov/services/a... function fetchCustomsRevenue (line 495) | async function fetchCustomsRevenue() { function fetchAll (line 533) | async function fetchAll() { function validate (line 593) | function validate(data) { FILE: scripts/seed-thermal-escalation.mjs constant CANONICAL_KEY (line 8) | const CANONICAL_KEY = 'thermal:escalation:v1'; constant HISTORY_KEY (line 9) | const HISTORY_KEY = 'thermal:escalation:history:v1'; constant CACHE_TTL (line 10) | const CACHE_TTL = 3 * 60 * 60; constant SOURCE_VERSION (line 11) | const SOURCE_VERSION = 'thermal-escalation-v1'; function fetchEscalations (line 14) | async function fetchEscalations() { function main (line 38) | async function main() { FILE: scripts/seed-ucdp-events.mjs constant REDIS_KEY (line 9) | const REDIS_KEY = 'conflict:ucdp-events:v1'; constant UCDP_PAGE_SIZE (line 10) | const UCDP_PAGE_SIZE = 1000; constant MAX_PAGES (line 11) | const MAX_PAGES = 6; constant MAX_EVENTS (line 12) | const MAX_EVENTS = 2000; constant TRAILING_WINDOW_MS (line 13) | const TRAILING_WINDOW_MS = 365 * 24 * 60 * 60 * 1000; constant VIOLENCE_TYPE_MAP (line 15) | const VIOLENCE_TYPE_MAP = { constant CHROME_UA (line 21) | const CHROME_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit... function loadEnvFile (line 23) | function loadEnvFile() { function maskToken (line 46) | function maskToken(token) { function buildVersionCandidates (line 51) | function buildVersionCandidates() { function fetchGedPage (line 56) | async function fetchGedPage(version, page, token) { function discoverVersion (line 67) | async function discoverVersion(token) { function parseDateMs (line 84) | function parseDateMs(value) { function getMaxDateMs (line 89) | function getMaxDateMs(events) { function main (line 99) | async function main() { FILE: scripts/seed-unrest-events.mjs constant GDELT_GKG_URL (line 8) | const GDELT_GKG_URL = 'https://api.gdeltproject.org/api/v1/gkg_geojson'; constant ACLED_API_URL (line 9) | const ACLED_API_URL = 'https://acleddata.com/api/acled/read'; constant CANONICAL_KEY (line 10) | const CANONICAL_KEY = 'unrest:events:v1'; constant CACHE_TTL (line 11) | const CACHE_TTL = 3600; function mapAcledEventType (line 15) | function mapAcledEventType(eventType, subEventType) { function classifySeverity (line 26) | function classifySeverity(fatalities, eventType) { function classifyGdeltSeverity (line 32) | function classifyGdeltSeverity(count, name) { function classifyGdeltEventType (line 39) | function classifyGdeltEventType(name) { function deduplicateEvents (line 49) | function deduplicateEvents(events) { function sortBySeverityAndRecency (line 77) | function sortBySeverityAndRecency(events) { function fetchAcledProtests (line 93) | async function fetchAcledProtests() { function fetchGdeltEvents (line 162) | async function fetchGdeltEvents() { function fetchUnrestEvents (line 233) | async function fetchUnrestEvents() { function validate (line 250) | function validate(data) { FILE: scripts/seed-usa-spending.mjs constant API_BASE (line 7) | const API_BASE = 'https://api.usaspending.gov/api/v2'; constant CANONICAL_KEY (line 8) | const CANONICAL_KEY = 'economic:spending:v1'; constant CACHE_TTL (line 9) | const CACHE_TTL = 3600; constant AWARD_TYPE_MAP (line 11) | const AWARD_TYPE_MAP = { function getDateDaysAgo (line 18) | function getDateDaysAgo(days) { function getToday (line 24) | function getToday() { function fetchSpending (line 28) | async function fetchSpending() { function validate (line 77) | function validate(data) { FILE: scripts/seed-wb-indicators.mjs constant BOOTSTRAP_KEY (line 19) | const BOOTSTRAP_KEY = 'economic:worldbank-techreadiness:v1'; constant PROGRESS_KEY (line 20) | const PROGRESS_KEY = 'economic:worldbank-progress:v1'; constant RENEWABLE_KEY (line 21) | const RENEWABLE_KEY = 'economic:worldbank-renewable:v1'; constant TTL_SECONDS (line 22) | const TTL_SECONDS = 7 * 24 * 3600; constant MAX_RETRIES (line 23) | const MAX_RETRIES = 3; constant RETRY_BASE_MS (line 24) | const RETRY_BASE_MS = 1000; constant WEIGHTS (line 27) | const WEIGHTS = { internet: 30, mobile: 15, broadband: 20, rdSpend: 35 }; constant NORMALIZE_MAX (line 28) | const NORMALIZE_MAX = { internet: 100, mobile: 150, broadband: 50, rdSpe... constant INDICATORS (line 31) | const INDICATORS = [ function parseArgs (line 42) | function parseArgs() { function getKeyPrefix (line 72) | function getKeyPrefix(env, sha) { function maskToken (line 77) | function maskToken(token) { function loadEnvFile (line 82) | function loadEnvFile() { function sleep (line 103) | function sleep(ms) { function fetchWithRetry (line 107) | async function fetchWithRetry(url, attempt = 1) { function redisPipeline (line 131) | async function redisPipeline(redisUrl, token, commands) { function fetchWbIndicator (line 156) | async function fetchWbIndicator(indicatorId, dateRange) { function normalize (line 209) | function normalize(val, max) { function computeRankings (line 214) | function computeRankings(indicatorData) { constant PROGRESS_INDICATORS (line 267) | const PROGRESS_INDICATORS = [ function fetchProgressData (line 274) | async function fetchProgressData() { constant RENEWABLE_REGIONS (line 309) | const RENEWABLE_REGIONS = ['1W', 'EAS', 'ECS', 'LCN', 'MEA', 'NAC', 'SAS... constant RENEWABLE_REGION_NAMES (line 310) | const RENEWABLE_REGION_NAMES = { function fetchRenewableData (line 316) | async function fetchRenewableData() { function main (line 376) | async function main() { FILE: scripts/seed-weather-alerts.mjs constant NWS_API (line 7) | const NWS_API = 'https://api.weather.gov/alerts/active'; constant CANONICAL_KEY (line 8) | const CANONICAL_KEY = 'weather:alerts:v1'; constant CACHE_TTL (line 9) | const CACHE_TTL = 900; function extractCoordinates (line 11) | function extractCoordinates(geometry) { function calculateCentroid (line 24) | function calculateCentroid(coords) { function fetchAlerts (line 30) | async function fetchAlerts() { function validate (line 63) | function validate(data) { FILE: scripts/seed-webcams.mjs constant WINDY_API_KEY (line 10) | const WINDY_API_KEY = process.env.WINDY_API_KEY; constant REDIS_URL (line 16) | const REDIS_URL = process.env.UPSTASH_REDIS_REST_URL; constant REDIS_TOKEN (line 17) | const REDIS_TOKEN = process.env.UPSTASH_REDIS_REST_TOKEN; constant PREFIX (line 23) | const PREFIX = process.env.KEY_PREFIX || ''; constant WINDY_BASE (line 24) | const WINDY_BASE = 'https://api.windy.com/webcams/api/v3/webcams'; constant PAGE_LIMIT (line 25) | const PAGE_LIMIT = 50; constant BATCH_SIZE (line 26) | const BATCH_SIZE = 500; constant GEO_TTL (line 27) | const GEO_TTL = 86400; constant MAX_OFFSET (line 28) | const MAX_OFFSET = 10000; constant REGIONS (line 31) | const REGIONS = [ function pipelineRequest (line 42) | async function pipelineRequest(commands) { constant MAX_SPLIT_DEPTH (line 55) | const MAX_SPLIT_DEPTH = 3; function fetchRegion (line 57) | async function fetchRegion(bounds, regionName, depth = 0) { function seedGeo (line 125) | async function seedGeo(geoKey, cameras) { function seedMeta (line 136) | async function seedMeta(metaKey, cameras) { function main (line 148) | async function main() { FILE: scripts/seo-indexnow-submit.mjs constant KEY (line 11) | const KEY = 'a7f3e9d1b2c44e8f9a0b1c2d3e4f5a6b'; constant BATCHES (line 13) | const BATCHES = [ constant ENDPOINTS (line 44) | const ENDPOINTS = [ function submit (line 52) | async function submit(endpoint, host, urlList) { FILE: scripts/shared/acled-oauth.mjs constant ACLED_TOKEN_URL (line 9) | const ACLED_TOKEN_URL = 'https://acleddata.com/oauth/token'; constant ACLED_CLIENT_ID (line 10) | const ACLED_CLIENT_ID = 'acled'; function getAcledToken (line 24) | async function getAcledToken({ userAgent } = {}) { FILE: scripts/sync-desktop-version.mjs constant CHECK_ONLY (line 6) | const CHECK_ONLY = process.argv.includes('--check'); function updateCargoPackageVersion (line 15) | function updateCargoPackageVersion(cargoToml, targetVersion) { function main (line 42) | async function main() { FILE: scripts/validate-rss-feeds.mjs constant FEEDS_PATH (line 9) | const FEEDS_PATH = join(__dirname, '..', 'src', 'config', 'feeds.ts'); constant CHROME_UA (line 11) | const CHROME_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit... constant FETCH_TIMEOUT (line 12) | const FETCH_TIMEOUT = 15_000; constant CONCURRENCY (line 13) | const CONCURRENCY = 10; constant STALE_DAYS (line 14) | const STALE_DAYS = 30; function extractFeeds (line 16) | function extractFeeds() { function fetchFeed (line 81) | async function fetchFeed(url) { function parseNewestDate (line 97) | function parseNewestDate(xml) { function validateFeed (line 137) | async function validateFeed(feed) { function runBatch (line 164) | async function runBatch(items, fn, concurrency) { function pad (line 180) | function pad(str, len) { function main (line 184) | async function main() { FILE: scripts/validate-seed-migration.mjs constant BASE_URL (line 13) | const BASE_URL = process.argv.includes('--base-url') constant ORIGIN (line 17) | const ORIGIN = 'https://worldmonitor.app'; constant TESTS (line 23) | const TESTS = [ constant API_KEY (line 133) | const API_KEY = process.env.WORLDMONITOR_KEY || ''; constant SEED_HEALTH_TEST (line 135) | const SEED_HEALTH_TEST = { constant PASS (line 145) | const PASS = '\x1b[32m✓\x1b[0m'; constant FAIL (line 146) | const FAIL = '\x1b[31m✗\x1b[0m'; constant WARN (line 147) | const WARN = '\x1b[33m⚠\x1b[0m'; constant BOLD (line 148) | const BOLD = '\x1b[1m'; constant RESET (line 149) | const RESET = '\x1b[0m'; function fetchEndpoint (line 151) | async function fetchEndpoint(endpoint) { function runTest (line 166) | async function runTest(test) { function runSeedHealth (line 200) | async function runSeedHealth() { function main (line 216) | async function main() { FILE: server/_shared/acled-auth.ts constant ACLED_TOKEN_URL (line 23) | const ACLED_TOKEN_URL = 'https://acleddata.com/oauth/token'; constant ACLED_CLIENT_ID (line 24) | const ACLED_CLIENT_ID = 'acled'; constant EXPIRY_MARGIN_MS (line 27) | const EXPIRY_MARGIN_MS = 5 * 60 * 1000; constant REDIS_CACHE_KEY (line 30) | const REDIS_CACHE_KEY = 'acled:oauth:token'; constant REDIS_TTL_SECONDS (line 33) | const REDIS_TTL_SECONDS = 23 * 60 * 60; type TokenState (line 35) | interface TokenState { type AcledOAuthTokenResponse (line 42) | interface AcledOAuthTokenResponse { function requestAcledToken (line 55) | async function requestAcledToken( function exchangeCredentials (line 82) | async function exchangeCredentials( function refreshAccessToken (line 108) | async function refreshAccessToken(refreshToken: string): Promise { function restoreFromRedis (line 141) | async function restoreFromRedis(): Promise { function getAcledAccessToken (line 171) | async function getAcledAccessToken(): Promise { FILE: server/_shared/acled.ts constant ACLED_API_URL (line 12) | const ACLED_API_URL = 'https://acleddata.com/api/acled/read'; constant ACLED_CACHE_TTL (line 13) | const ACLED_CACHE_TTL = 900; constant ACLED_TIMEOUT_MS (line 14) | const ACLED_TIMEOUT_MS = 15_000; type AcledRawEvent (line 16) | interface AcledRawEvent { type FetchAcledOptions (line 34) | interface FetchAcledOptions { function fetchAcledCached (line 47) | async function fetchAcledCached(opts: FetchAcledOptions): Promise = { constant BOOTSTRAP_TIERS (line 55) | const BOOTSTRAP_TIERS: Record = { FILE: server/_shared/constants.ts constant CHROME_UA (line 1) | const CHROME_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Apple... function clampInt (line 3) | function clampInt(value: number | undefined, fallback: number, min: numb... constant YAHOO_MIN_GAP_MS (line 14) | const YAHOO_MIN_GAP_MS = 600; function yahooGate (line 17) | function yahooGate(): Promise { constant FINNHUB_MIN_GAP_MS (line 34) | const FINNHUB_MIN_GAP_MS = 350; function finnhubGate (line 37) | function finnhubGate(): Promise { FILE: server/_shared/hash.ts function hashString (line 8) | function hashString(input: string): string { function sha256Hex (line 25) | async function sha256Hex(input: string): Promise { FILE: server/_shared/llm-health.ts constant PROBE_TIMEOUT_MS (line 6) | const PROBE_TIMEOUT_MS = 2_000; constant CACHE_TTL_MS (line 7) | const CACHE_TTL_MS = 60_000; type HealthEntry (line 9) | interface HealthEntry { function probe (line 22) | async function probe(url: string): Promise { function isProviderAvailable (line 40) | async function isProviderAvailable(apiUrl: string): Promise { function getLlmHealthStatus (line 67) | function getLlmHealthStatus(): Record { function warmHealthCache (line 91) | function warmHealthCache(): void { FILE: server/_shared/llm-sanitize.js constant INJECTION_PATTERNS (line 31) | const INJECTION_PATTERNS = [ constant ROLE_PREFIX_RE (line 53) | const ROLE_PREFIX_RE = /^\s*(?:#{1,4}\s*)?(?:\[|\()?\s*(?:user|assistant... constant ROLE_OVERRIDE_STRONG_RE (line 54) | const ROLE_OVERRIDE_STRONG_RE = /\b(?:you\s+are\s+now|act\s+as|pretend\s... constant ROLE_OVERRIDE_COMMAND_RE (line 55) | const ROLE_OVERRIDE_COMMAND_RE = /\b(?:ignore|disregard|forget|bypass|ov... constant ROLE_OVERRIDE_FOLLOW_RE (line 56) | const ROLE_OVERRIDE_FOLLOW_RE = /\b(?:follow|obey)\s+(?:all\s+)?(?:the\s... constant ROLE_OVERRIDE_TARGET_RE (line 57) | const ROLE_OVERRIDE_TARGET_RE = /\b(?:instructions?|prompt|system|rules?... function isRolePrefixedInjectionLine (line 59) | function isRolePrefixedInjectionLine(line) { constant CONTROL_CHARS_RE (line 72) | const CONTROL_CHARS_RE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\xAD\u200B-\u20... function sanitizeForPrompt (line 79) | function sanitizeForPrompt(input) { function sanitizeHeadlines (line 107) | function sanitizeHeadlines(headlines) { constant STRUCTURAL_PATTERNS (line 116) | const STRUCTURAL_PATTERNS = [ function sanitizeHeadline (line 135) | function sanitizeHeadline(input) { function sanitizeHeadlinesLight (line 151) | function sanitizeHeadlinesLight(headlines) { FILE: server/_shared/llm.ts type ProviderCredentials (line 4) | interface ProviderCredentials { type LlmProviderName (line 11) | type LlmProviderName = 'ollama' | 'groq' | 'openrouter' | 'generic'; type ProviderCredentialOverrides (line 13) | interface ProviderCredentialOverrides { constant OLLAMA_HOST_ALLOWLIST (line 17) | const OLLAMA_HOST_ALLOWLIST = new Set([ function isLocalDeployment (line 21) | function isLocalDeployment(): boolean { function getProviderCredentials (line 26) | function getProviderCredentials( function stripThinkingTags (line 104) | function stripThinkingTags(text: string): string { constant PROVIDER_CHAIN (line 124) | const PROVIDER_CHAIN = ['ollama', 'groq', 'openrouter', 'generic'] as co... constant PROVIDER_SET (line 125) | const PROVIDER_SET = new Set(PROVIDER_CHAIN); type LlmCallOptions (line 127) | interface LlmCallOptions { type LlmCallResult (line 141) | interface LlmCallResult { function resolveProviderChain (line 148) | function resolveProviderChain(opts: { function callLlm (line 168) | async function callLlm(opts: LlmCallOptions): Promise = { function getEndpointRatelimit (line 87) | function getEndpointRatelimit(pathname: string): Ratelimit | null { function hasEndpointRatePolicy (line 108) | function hasEndpointRatePolicy(pathname: string): boolean { function checkEndpointRateLimit (line 112) | async function checkEndpointRateLimit( FILE: server/_shared/redis.ts constant REDIS_OP_TIMEOUT_MS (line 1) | const REDIS_OP_TIMEOUT_MS = 1_500; constant REDIS_PIPELINE_TIMEOUT_MS (line 2) | const REDIS_PIPELINE_TIMEOUT_MS = 5_000; function errMsg (line 4) | function errMsg(err: unknown): string { function getKeyPrefix (line 12) | function getKeyPrefix(): string { function prefixKey (line 20) | function prefixKey(key: string): string { function getCachedJson (line 26) | async function getCachedJson(key: string, raw = false): Promise( function cachedFetchJsonWithMeta (line 168) | async function cachedFetchJsonWithMeta( function geoSearchByBox (line 206) | async function geoSearchByBox( function getHashFieldsBatch (line 234) | async function getHashFieldsBatch( function runRedisPipeline (line 265) | async function runRedisPipeline( FILE: server/_shared/response-headers.ts function setResponseHeader (line 11) | function setResponseHeader(req: Request, key: string, value: string): vo... function markNoCacheResponse (line 20) | function markNoCacheResponse(req: Request): void { function drainResponseHeaders (line 24) | function drainResponseHeaders(req: Request): Record | un... FILE: server/_shared/sidecar-cache.ts constant MAX_ENTRIES (line 7) | const MAX_ENTRIES = 500; constant MAX_BYTES (line 8) | const MAX_BYTES = 50 * 1024 * 1024; constant MAX_SINGLE_VALUE_BYTES (line 9) | const MAX_SINGLE_VALUE_BYTES = 2 * 1024 * 1024; constant MIN_TTL_S (line 10) | const MIN_TTL_S = 10; constant MAX_TTL_S (line 11) | const MAX_TTL_S = 86_400; constant SWEEP_INTERVAL_MS (line 12) | const SWEEP_INTERVAL_MS = 60_000; type CacheEntry (line 14) | interface CacheEntry { function startSweepIfNeeded (line 27) | function startSweepIfNeeded(): void { function evictLRU (line 44) | function evictLRU(incomingSize = 0): void { function sidecarCacheGet (line 58) | function sidecarCacheGet(key: string): unknown | null { function sidecarCacheSet (line 77) | function sidecarCacheSet(key: string, value: unknown, ttlSeconds: number... function sidecarCacheStats (line 111) | function sidecarCacheStats(): { entries: number; bytes: number; hits: nu... FILE: server/cors.ts constant PRODUCTION_PATTERNS (line 8) | const PRODUCTION_PATTERNS: RegExp[] = [ constant DEV_PATTERNS (line 17) | const DEV_PATTERNS: RegExp[] = [ constant ALLOWED_ORIGIN_PATTERNS (line 22) | const ALLOWED_ORIGIN_PATTERNS: RegExp[] = function isAllowedOrigin (line 27) | function isAllowedOrigin(origin: string): boolean { function getCorsHeaders (line 31) | function getCorsHeaders(req: Request): Record { function isDisallowedOrigin (line 43) | function isDisallowedOrigin(req: Request): boolean { FILE: server/error-mapper.ts function isNetworkError (line 16) | function isNetworkError(error: unknown): boolean { function jsonMessageResponse (line 32) | function jsonMessageResponse(message: string, status: number, extras?: R... function mapErrorToResponse (line 39) | function mapErrorToResponse(error: unknown, _req: Request): Response { FILE: server/gateway.ts type CacheTier (line 27) | type CacheTier = 'fast' | 'medium' | 'slow' | 'slow-browser' | 'static' ... constant TIER_HEADERS (line 33) | const TIER_HEADERS: Record = { constant TIER_CDN_CACHE (line 46) | const TIER_CDN_CACHE: Record = { constant RPC_CACHE_TIER (line 56) | const RPC_CACHE_TIER: Record = { constant PREMIUM_RPC_PATHS (line 151) | const PREMIUM_RPC_PATHS = new Set([ function createDomainGateway (line 164) | function createDomainGateway( FILE: server/router.ts type RouteDescriptor (line 9) | interface RouteDescriptor { type Router (line 15) | interface Router { type DynamicRoute (line 20) | interface DynamicRoute { function createRouter (line 29) | function createRouter(allRoutes: RouteDescriptor[]): Router { FILE: server/worldmonitor/_bootstrap-cache-key-refs.ts constant SEED_ONLY_BOOTSTRAP_CACHE_KEYS (line 6) | const SEED_ONLY_BOOTSTRAP_CACHE_KEYS = { FILE: server/worldmonitor/aviation/v1/_providers/demo_prices.ts constant AIRPORT_COORDS (line 9) | const AIRPORT_COORDS: Record = { function haversineKm (line 21) | function haversineKm(lat1: number, lon1: number, lat2: number, lon2: num... constant CABIN_MULTIPLIERS (line 30) | const CABIN_MULTIPLIERS: Record = { function advancePurchaseMultiplier (line 38) | function advancePurchaseMultiplier(departureDate: string): number { constant DEMO_CARRIERS (line 47) | const DEMO_CARRIERS: Carrier[] = [ function generateDemoPrices (line 55) | function generateDemoPrices( FILE: server/worldmonitor/aviation/v1/_providers/travelpayouts_data.ts constant BASE_V2 (line 16) | const BASE_V2 = 'https://api.travelpayouts.com/v2/prices'; constant BASE_V3 (line 17) | const BASE_V3 = 'https://api.travelpayouts.com/v3'; constant SNAPSHOT_PREFIX (line 20) | const SNAPSHOT_PREFIX = 'aviation:price-snapshot'; constant CABIN_CLASS_MAP (line 23) | const CABIN_CLASS_MAP: Record = { type TpLatestTicket (line 32) | interface TpLatestTicket { type TpMonthMatrixTicket (line 48) | interface TpMonthMatrixTicket { type TpV3Ticket (line 60) | interface TpV3Ticket { function expiresMs (line 76) | function expiresMs(isoStr?: string): number { function parseCarrier (line 81) | function parseCarrier(iata?: string): Carrier { function fromLatest (line 85) | function fromLatest(t: TpLatestTicket, origin: string, destination: stri... function fromMonthMatrix (line 107) | function fromMonthMatrix(t: TpMonthMatrixTicket, origin: string, destina... function fromV3 (line 129) | function fromV3(t: TpV3Ticket, origin: string, destination: string, curr... function makeHeaders (line 154) | function makeHeaders(token: string): Record { function fetchTp (line 163) | async function fetchTp(url: string, token: string): Promise { type TravelpayoutsResult (line 185) | interface TravelpayoutsResult { function searchPricesTravelpayouts (line 190) | async function searchPricesTravelpayouts(opts: { function inferMarket (line 298) | function inferMarket(originIata: string): string { FILE: server/worldmonitor/aviation/v1/_shared.ts constant FAA_URL (line 21) | const FAA_URL = 'https://nasstatus.faa.gov/api/airport-status-information'; constant AVIATIONSTACK_URL (line 22) | const AVIATIONSTACK_URL = 'https://api.aviationstack.com/v1/flights'; constant ICAO_NOTAM_URL (line 23) | const ICAO_NOTAM_URL = 'https://dataservices.icao.int/api/notams-realtim... constant DEFAULT_WATCHED_AIRPORTS (line 24) | const DEFAULT_WATCHED_AIRPORTS = ['IST', 'ESB', 'SAW', 'LHR', 'FRA', 'CD... constant BATCH_CONCURRENCY (line 25) | const BATCH_CONCURRENCY = 10; constant MIN_FLIGHTS_FOR_CLOSURE (line 26) | const MIN_FLIGHTS_FOR_CLOSURE = 10; constant RESOLVED_STATUSES (line 27) | const RESOLVED_STATUSES = new Set(['cancelled', 'landed', 'active', 'arr... constant NOTAM_CLOSURE_QCODES (line 28) | const NOTAM_CLOSURE_QCODES = new Set(['FA', 'AH', 'AL', 'AW', 'AC', 'AM']); constant NOTAM_RESTRICTION_QCODES (line 29) | const NOTAM_RESTRICTION_QCODES = new Set(['RA', 'RO']); type FAADelayInfo (line 43) | interface FAADelayInfo { function parseDelayTypeFromReason (line 52) | function parseDelayTypeFromReason(reason: string): string { function parseFaaXml (line 62) | function parseFaaXml(xml: string): Map { function toProtoDelayType (line 139) | function toProtoDelayType(t: string): FlightDelayType { function toProtoSeverity (line 151) | function toProtoSeverity(s: string): FlightDelaySeverity { function toProtoRegion (line 162) | function toProtoRegion(r: string): AirportRegion { function toProtoSource (line 173) | function toProtoSource(s: string): FlightDelaySource { function severityFromCancelRate (line 186) | function severityFromCancelRate(cancelRate: number): string { function determineSeverity (line 194) | function determineSeverity(avgDelayMinutes: number, delayedPct?: number)... type AviationStackFlight (line 205) | interface AviationStackFlight { type AviationStackResult (line 211) | interface AviationStackResult { function fetchAviationStackDelays (line 216) | async function fetchAviationStackDelays( type FetchResult (line 256) | interface FetchResult { ok: boolean; alert: AirportDelayAlert | null; } function fetchSingleAirport (line 258) | async function fetchSingleAirport( function aggregateFlights (line 292) | function aggregateFlights( type IcaoNotam (line 354) | interface IcaoNotam { type NotamClosureResult (line 366) | interface NotamClosureResult { function getRelayBaseUrl (line 372) | function getRelayBaseUrl(): string | null { function getRelayHeaders (line 381) | function getRelayHeaders(_extra: Record = {}): Record { constant SEV_ORDER (line 555) | const SEV_ORDER = ['normal', 'minor', 'moderate', 'major', 'severe']; function mergeNotamWithExistingAlert (line 557) | function mergeNotamWithExistingAlert( FILE: server/worldmonitor/aviation/v1/get-airport-ops-summary.ts constant SEED_CACHE_KEY (line 19) | const SEED_CACHE_KEY = 'aviation:delays:intl:v3'; function getAirportOpsSummary (line 21) | async function getAirportOpsSummary( FILE: server/worldmonitor/aviation/v1/get-carrier-ops.ts constant CACHE_TTL (line 11) | const CACHE_TTL = 300; function getCarrierOps (line 13) | async function getCarrierOps( FILE: server/worldmonitor/aviation/v1/get-flight-status.ts constant CACHE_TTL (line 10) | const CACHE_TTL = 120; type AVSFlight (line 12) | interface AVSFlight { function normalizeFlight (line 21) | function normalizeFlight(f: AVSFlight, now: number): FlightInstance { function getFlightStatus (line 53) | async function getFlightStatus( FILE: server/worldmonitor/aviation/v1/list-airport-delays.ts constant FAA_CACHE_KEY (line 21) | const FAA_CACHE_KEY = 'aviation:delays:faa:v1'; constant INTL_CACHE_KEY (line 22) | const INTL_CACHE_KEY = 'aviation:delays:intl:v3'; function listAirportDelays (line 24) | async function listAirportDelays( FILE: server/worldmonitor/aviation/v1/list-airport-flights.ts constant CACHE_TTL (line 13) | const CACHE_TTL = 300; type AVSFlight (line 15) | interface AVSFlight { function statusToProto (line 24) | function statusToProto(s: string): FlightInstanceStatus { function parseTs (line 36) | function parseTs(s?: string): number { function normalizeFlights (line 41) | function normalizeFlights(flights: AVSFlight[], now: number): FlightInst... function buildSimulatedFlights (line 90) | function buildSimulatedFlights(airport: string, direction: string, limit... function listAirportFlights (line 139) | async function listAirportFlights( FILE: server/worldmonitor/aviation/v1/list-aviation-news.ts constant CACHE_TTL (line 11) | const CACHE_TTL = 900; constant AVIATION_RSS_FEEDS (line 13) | const AVIATION_RSS_FEEDS = [ type RssItem (line 25) | interface RssItem { function parseRssItems (line 33) | function parseRssItems(xml: string, sourceName: string): RssItem[] { function matchesEntities (line 54) | function matchesEntities(text: string, entities: string[]): string[] { function fetchFeed (line 60) | async function fetchFeed(feedUrl: string, sourceName: string): Promise = { FILE: server/worldmonitor/conflict/v1/get-humanitarian-summary-batch.ts constant REDIS_CACHE_KEY (line 13) | const REDIS_CACHE_KEY = 'conflict:humanitarian:v1'; constant REDIS_CACHE_TTL (line 14) | const REDIS_CACHE_TTL = 21600; constant ISO2_PATTERN (line 15) | const ISO2_PATTERN = /^[A-Z]{2}$/; type HapiCountryAgg (line 17) | interface HapiCountryAgg { function fetchSingleHapiSummary (line 29) | async function fetchSingleHapiSummary(countryCode: string): Promise = { constant SOURCE_MAP (line 135) | const SOURCE_MAP: Record = { constant INDICATOR_TYPE_MAP (line 143) | const INDICATOR_TYPE_MAP: Record = { constant SEVERITY_MAP (line 149) | const SEVERITY_MAP: Record = { constant SEVERITY_RANK (line 156) | const SEVERITY_RANK: Record = { constant COUNTRY_CENTROIDS (line 168) | const COUNTRY_CENTROIDS: Record = { function djb2 (line 190) | function djb2(seed: string): number { function getCountryCentroid (line 196) | function getCountryCentroid(countryCode: string, seed?: string): { lat: ... type RawThreat (line 210) | interface RawThreat { function sanitizeRawThreat (line 226) | function sanitizeRawThreat(threat: Partial & { indicator?: st... constant GEO_CACHE_MAX_SIZE (line 254) | const GEO_CACHE_MAX_SIZE = 2048; function getGeoCached (line 257) | function getGeoCached(ip: string): { lat: number; lon: number; country: ... function setGeoCached (line 267) | function setGeoCached(ip: string, geo: { lat: number; lon: number; count... function fetchGeoIp (line 276) | async function fetchGeoIp( function geolocateIp (line 317) | async function geolocateIp( function hydrateThreatCoordinates (line 328) | async function hydrateThreatCoordinates(threats: RawThreat[]): Promise { function fetchOtxSource (line 625) | async function fetchOtxSource(limit: number, days: number): Promise { function dedupeThreats (line 733) | function dedupeThreats(threats: RawThreat[]): RawThreat[] { function toProtoCyberThreat (line 760) | function toProtoCyberThreat(raw: RawThreat): CyberThreat { FILE: server/worldmonitor/cyber/v1/list-cyber-threats.ts constant SEED_CACHE_KEY (line 20) | const SEED_CACHE_KEY = 'cyber:threats:v2'; function parseCursor (line 22) | function parseCursor(cursor: string | undefined): number { function filterSeededThreats (line 29) | function filterSeededThreats( function listCyberThreats (line 47) | async function listCyberThreats( FILE: server/worldmonitor/displacement/v1/get-displacement-summary.ts constant REDIS_CACHE_KEY (line 18) | const REDIS_CACHE_KEY = 'displacement:summary:v1'; constant REDIS_CACHE_TTL (line 19) | const REDIS_CACHE_TTL = 43200; constant SEED_FRESHNESS_MS (line 20) | const SEED_FRESHNESS_MS = 7 * 60 * 60 * 1000; constant COUNTRY_CENTROIDS (line 24) | const COUNTRY_CENTROIDS: Record = { type UnhcrRawItem (line 39) | interface UnhcrRawItem { function fetchUnhcrYearItems (line 53) | async function fetchUnhcrYearItems(year: number): Promise = { function getPopulationExposure (line 49) | async function getPopulationExposure( FILE: server/worldmonitor/economic/v1/_bis-shared.ts constant BIS_BASE (line 10) | const BIS_BASE = 'https://stats.bis.org/api/v1/data'; constant BIS_COUNTRIES (line 14) | const BIS_COUNTRIES: Record> { function parseBisNumber (line 60) | function parseBisNumber(val: string | undefined): number | null { FILE: server/worldmonitor/economic/v1/_fetch-with-timeout.ts function fetchWithTimeout (line 5) | async function fetchWithTimeout(url: string, init: RequestInit = {}, tim... FILE: server/worldmonitor/economic/v1/_fred-shared.ts constant FRED_KEY_PREFIX (line 3) | const FRED_KEY_PREFIX = 'economic:fred:v1'; function fredSeedKey (line 5) | function fredSeedKey(seriesId: string): string { function normalizeFredLimit (line 9) | function normalizeFredLimit(limit: number): number { function applyFredObservationLimit (line 13) | function applyFredObservationLimit(series: FredSeries, limit: number): F... FILE: server/worldmonitor/economic/v1/_shared.ts function fetchJSON (line 12) | async function fetchJSON(url: string, timeout = 8000): Promise { function rateOfChange (line 23) | function rateOfChange(prices: number[], days: number): number | null { function smaCalc (line 34) | function smaCalc(prices: number[], period: number): number | null { function extractClosePrices (line 43) | function extractClosePrices(chart: any): number[] { function extractVolumes (line 55) | function extractVolumes(chart: any): number[] { function extractAlignedPriceVolume (line 68) | function extractAlignedPriceVolume(chart: any): Array<{ price: number; v... FILE: server/worldmonitor/economic/v1/get-bis-credit.ts constant SEED_CACHE_KEY (line 14) | const SEED_CACHE_KEY = 'economic:bis:credit:v1'; function getBisCredit (line 16) | async function getBisCredit( FILE: server/worldmonitor/economic/v1/get-bis-exchange-rates.ts constant SEED_CACHE_KEY (line 14) | const SEED_CACHE_KEY = 'economic:bis:eer:v1'; function getBisExchangeRates (line 16) | async function getBisExchangeRates( FILE: server/worldmonitor/economic/v1/get-bis-policy-rates.ts constant SEED_CACHE_KEY (line 14) | const SEED_CACHE_KEY = 'economic:bis:policy:v1'; function getBisPolicyRates (line 16) | async function getBisPolicyRates( FILE: server/worldmonitor/economic/v1/get-energy-capacity.ts constant SEED_CACHE_KEY (line 14) | const SEED_CACHE_KEY = 'economic:capacity:v1:COL,SUN,WND:20'; function getEnergyCapacity (line 16) | async function getEnergyCapacity( FILE: server/worldmonitor/economic/v1/get-energy-prices.ts constant SEED_CACHE_KEY (line 14) | const SEED_CACHE_KEY = 'economic:energy:v1:all'; function getEnergyPrices (line 16) | async function getEnergyPrices( FILE: server/worldmonitor/economic/v1/get-fred-series-batch.ts constant ALLOWED_SERIES (line 17) | const ALLOWED_SERIES = new Set([ function getFredSeriesBatch (line 22) | async function getFredSeriesBatch( FILE: server/worldmonitor/economic/v1/get-fred-series.ts function getFredSeries (line 15) | async function getFredSeries( FILE: server/worldmonitor/economic/v1/get-macro-signals.ts constant SEED_CACHE_KEY (line 14) | const SEED_CACHE_KEY = 'economic:macro-signals:v1'; function buildFallbackResult (line 16) | function buildFallbackResult(): GetMacroSignalsResponse { function getMacroSignals (line 36) | async function getMacroSignals( FILE: server/worldmonitor/economic/v1/list-world-bank-indicators.ts constant REDIS_CACHE_KEY (line 16) | const REDIS_CACHE_KEY = 'economic:worldbank:v1'; constant REDIS_CACHE_TTL (line 17) | const REDIS_CACHE_TTL = 86400; constant TECH_COUNTRIES (line 19) | const TECH_COUNTRIES = [ function fetchWorldBankIndicators (line 29) | async function fetchWorldBankIndicators( function listWorldBankIndicators (line 74) | async function listWorldBankIndicators( FILE: server/worldmonitor/forecast/v1/get-forecasts.ts constant REDIS_KEY (line 10) | const REDIS_KEY = 'forecast:predictions:v2'; FILE: server/worldmonitor/giving/v1/get-giving-summary.ts constant REDIS_CACHE_KEY (line 26) | const REDIS_CACHE_KEY = 'giving:summary:v1'; constant REDIS_CACHE_TTL (line 27) | const REDIS_CACHE_TTL = 3600; function getGoFundMeEstimate (line 40) | function getGoFundMeEstimate(): PlatformGiving { function getGlobalGivingEstimate (line 62) | function getGlobalGivingEstimate(): PlatformGiving { function getJustGivingEstimate (line 76) | function getJustGivingEstimate(): PlatformGiving { function getCryptoGivingEstimate (line 92) | function getCryptoGivingEstimate(): CryptoGivingSummary { function getInstitutionalBaseline (line 107) | function getInstitutionalBaseline(): InstitutionalGiving { function getDefaultCategories (line 121) | function getDefaultCategories(): CategoryBreakdown[] { function computeActivityIndex (line 138) | function computeActivityIndex(platforms: PlatformGiving[], crypto: Crypt... function computeTrend (line 165) | function computeTrend(index: number): string { function getGivingSummary (line 174) | async function getGivingSummary( FILE: server/worldmonitor/imagery/v1/search-imagery.ts constant STAC_SEARCH (line 10) | const STAC_SEARCH = 'https://earth-search.aws.element84.com/v1/search'; constant COLLECTIONS (line 11) | const COLLECTIONS = ['sentinel-2-l2a', 'sentinel-1-grd']; constant CACHE_TTL (line 12) | const CACHE_TTL = 3600; function fnv1a (line 14) | function fnv1a(str: string): number { function validateBbox (line 23) | function validateBbox(bbox: string): [number, number, number, number] | ... function cacheKey (line 36) | function cacheKey(bbox: string, datetime: string, source: string, limit:... type StacFeature (line 41) | interface StacFeature { type StacSearchResponse (line 58) | interface StacSearchResponse { function s3ToHttps (line 65) | function s3ToHttps(url: string): string { function mapFeature (line 75) | function mapFeature(f: StacFeature): ImageryScene { function searchImagery (line 103) | async function searchImagery( FILE: server/worldmonitor/infrastructure/v1/_shared.ts constant UPSTREAM_TIMEOUT_MS (line 5) | const UPSTREAM_TIMEOUT_MS = 10_000; constant BASELINE_TTL (line 8) | const BASELINE_TTL = 7776000; constant MIN_SAMPLES (line 9) | const MIN_SAMPLES = 10; constant Z_THRESHOLD_LOW (line 10) | const Z_THRESHOLD_LOW = 1.5; constant Z_THRESHOLD_MEDIUM (line 11) | const Z_THRESHOLD_MEDIUM = 2.0; constant Z_THRESHOLD_HIGH (line 12) | const Z_THRESHOLD_HIGH = 3.0; constant VALID_BASELINE_TYPES (line 14) | const VALID_BASELINE_TYPES = [ type BaselineEntry (line 22) | interface BaselineEntry { function makeBaselineKey (line 29) | function makeBaselineKey(type: string, region: string, weekday: number, ... function makeBaselineKeyV2 (line 33) | function makeBaselineKeyV2(type: string, region: string, weekday: number... constant COUNT_SOURCE_KEYS (line 37) | const COUNT_SOURCE_KEYS: Record = { constant TEMPORAL_ANOMALIES_KEY (line 42) | const TEMPORAL_ANOMALIES_KEY = 'temporal:anomalies:v1'; constant TEMPORAL_ANOMALIES_TTL (line 43) | const TEMPORAL_ANOMALIES_TTL = 900; constant BASELINE_LOCK_KEY (line 44) | const BASELINE_LOCK_KEY = 'baseline:lock'; constant BASELINE_LOCK_TTL (line 45) | const BASELINE_LOCK_TTL = 30; function getBaselineSeverity (line 47) | function getBaselineSeverity(zScore: number): string { function mgetJson (line 59) | async function mgetJson(keys: string[]): Promise<(unknown | null)[]> { FILE: server/worldmonitor/infrastructure/v1/get-cable-health.ts constant CACHE_KEY (line 18) | const CACHE_KEY = 'cable-health-v1'; constant CACHE_TTL (line 19) | const CACHE_TTL = 1800; constant NGA_CACHE_KEY (line 20) | const NGA_CACHE_KEY = 'cable-health-nga-warnings-v1'; constant NGA_CACHE_TTL (line 21) | const NGA_CACHE_TTL = 86400; type NgaWarning (line 30) | interface NgaWarning { constant CABLE_KEYWORDS (line 42) | const CABLE_KEYWORDS = [ constant FAULT_KEYWORDS (line 48) | const FAULT_KEYWORDS = /FAULT|BREAK|CUT|DAMAGE|SEVERED|RUPTURE|OUTAGE|FA... constant SHIP_PATTERNS (line 49) | const SHIP_PATTERNS = [ constant ON_STATION_RE (line 55) | const ON_STATION_RE = /ON STATION|OPERATIONS IN PROGRESS|LAYING|REPAIRIN... constant CABLE_NAME_MAP (line 60) | const CABLE_NAME_MAP: Record = { constant CABLE_LANDINGS (line 122) | const CABLE_LANDINGS: Record = { type Signal (line 157) | interface Signal { function fetchNgaWarnings (line 171) | async function fetchNgaWarnings(): Promise { function isCableRelated (line 189) | function isCableRelated(text: string): boolean { function parseCoordinates (line 194) | function parseCoordinates(text: string): [number, number][] { function matchCableByName (line 215) | function matchCableByName(text: string): string | null { function findNearestCable (line 222) | function findNearestCable(lat: number, lon: number): { cableId: string; ... constant MONTH_MAP (line 244) | const MONTH_MAP: Record = { function parseIssueDate (line 249) | function parseIssueDate(dateStr: string | undefined): number { function hasShipName (line 262) | function hasShipName(text: string): boolean { function processNgaSignals (line 270) | function processNgaSignals(warnings: NgaWarning[]): Signal[] { function computeHealthMap (line 350) | function computeHealthMap(signals: Signal[]): Record = { function filterAndSortStatuses (line 302) | function filterAndSortStatuses(statuses: ServiceStatus[], req: ListServi... function listServiceStatuses (line 310) | async function listServiceStatuses( FILE: server/worldmonitor/infrastructure/v1/list-temporal-anomalies.ts type AnomalySnapshot (line 24) | interface AnomalySnapshot { constant WEEKDAY_NAMES (line 30) | const WEEKDAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thur... constant MONTH_NAMES (line 31) | const MONTH_NAMES = ['', 'January', 'February', 'March', 'April', 'May',... constant TYPE_LABELS (line 34) | const TYPE_LABELS: Record = { function getSeverity (line 39) | function getSeverity(zScore: number): string { function formatMessage (line 46) | function formatMessage(type: string, count: number, mean: number, multip... function redisCmd (line 51) | function redisCmd(cmd: string[]): { url: string; token: string; body: st... function tryAcquireLock (line 58) | async function tryAcquireLock(): Promise { function listTemporalAnomalies (line 76) | async function listTemporalAnomalies( FILE: server/worldmonitor/infrastructure/v1/record-baseline-snapshot.ts function recordBaselineSnapshot (line 20) | async function recordBaselineSnapshot( FILE: server/worldmonitor/intelligence/v1/_batch-classify.ts constant VALID_LEVELS (line 5) | const VALID_LEVELS = ['critical', 'high', 'medium', 'low', 'info']; constant VALID_CATEGORIES (line 6) | const VALID_CATEGORIES = [ constant CLASSIFY_CACHE_TTL (line 12) | const CLASSIFY_CACHE_TTL = 86400; constant SKIP_SENTINEL_TTL (line 13) | const SKIP_SENTINEL_TTL = 1800; constant BATCH_SIZE (line 14) | const BATCH_SIZE = 50; function sanitizeTitle (line 16) | function sanitizeTitle(title: string): string { constant SYSTEM_PROMPT (line 20) | const SYSTEM_PROMPT = `You classify news headlines by threat level and c... function batchClassifyTitles (line 30) | async function batchClassifyTitles( FILE: server/worldmonitor/intelligence/v1/_shared.ts constant UPSTREAM_TIMEOUT_MS (line 11) | const UPSTREAM_TIMEOUT_MS = 25_000; constant CLASSIFY_CACHE_PREFIX (line 12) | const CLASSIFY_CACHE_PREFIX = 'classify:sebuf:v1:'; constant TIER1_COUNTRIES (line 18) | const TIER1_COUNTRIES: Record = { function buildClassifyCacheKey (line 34) | async function buildClassifyCacheKey(title: string): Promise { FILE: server/worldmonitor/intelligence/v1/classify-event.ts constant CLASSIFY_CACHE_TTL (line 17) | const CLASSIFY_CACHE_TTL = 86400; constant VALID_LEVELS (line 18) | const VALID_LEVELS = ['critical', 'high', 'medium', 'low', 'info']; constant VALID_CATEGORIES (line 19) | const VALID_CATEGORIES = [ function mapLevelToSeverity (line 29) | function mapLevelToSeverity(level: string): SeverityLevel { function classifyEvent (line 39) | async function classifyEvent( FILE: server/worldmonitor/intelligence/v1/deduct-situation.ts constant DEDUCT_TIMEOUT_MS (line 12) | const DEDUCT_TIMEOUT_MS = 120_000; constant DEDUCT_CACHE_TTL (line 13) | const DEDUCT_CACHE_TTL = 3600; function deductSituation (line 15) | async function deductSituation( FILE: server/worldmonitor/intelligence/v1/deduction-prompt.ts type PromptContextParts (line 1) | interface PromptContextParts { type DeductionMode (line 6) | type DeductionMode = 'brief' | 'forecast'; constant BRIEF_MODE_PATTERNS (line 8) | const BRIEF_MODE_PATTERNS = [ function normalizeWhitespace (line 15) | function normalizeWhitespace(input: string): string { function trimList (line 19) | function trimList(items: string[], maxItems: number, maxChars: number): ... function inferDeductionMode (line 33) | function inferDeductionMode(query: string): DeductionMode { function splitDeductionContext (line 37) | function splitDeductionContext(geoContext: string): PromptContextParts { function inferProviderLabel (line 62) | function inferProviderLabel(apiUrl: string): string { function buildSharedEvidencePrompt (line 75) | function buildSharedEvidencePrompt(primaryContext: string, recentNews: s... function buildDeductionPrompt (line 89) | function buildDeductionPrompt(input: { function postProcessDeductionOutput (line 147) | function postProcessDeductionOutput(raw: string, mode: DeductionMode): s... FILE: server/worldmonitor/intelligence/v1/get-country-facts.ts constant FACTS_TTL (line 10) | const FACTS_TTL = 86400; constant NEGATIVE_TTL (line 11) | const NEGATIVE_TTL = 120; constant UPSTREAM_TIMEOUT (line 12) | const UPSTREAM_TIMEOUT = 10_000; type RestCountryData (line 14) | interface RestCountryData { type WikidataBinding (line 23) | interface WikidataBinding { type WikidataResponse (line 28) | interface WikidataResponse { type WikipediaSummary (line 32) | interface WikipediaSummary { constant EMPTY (line 37) | const EMPTY: GetCountryFactsResponse = { function getCountryFacts (line 50) | async function getCountryFacts( function fetchRestCountries (line 83) | async function fetchRestCountries(code: string): Promise { type WikiSummaryResult (line 155) | interface WikiSummaryResult { function fetchWikipediaSummary (line 160) | async function fetchWikipediaSummary(code: string, countryName: string):... FILE: server/worldmonitor/intelligence/v1/get-country-intel-brief.ts constant INTEL_CACHE_TTL (line 11) | const INTEL_CACHE_TTL = 7200; function getCountryIntelBrief (line 13) | async function getCountryIntelBrief( FILE: server/worldmonitor/intelligence/v1/get-pizzint-status.ts constant REDIS_CACHE_KEY (line 16) | const REDIS_CACHE_KEY = 'intel:pizzint:v1'; constant REDIS_CACHE_TTL (line 17) | const REDIS_CACHE_TTL = 600; constant PIZZINT_API (line 23) | const PIZZINT_API = 'https://www.pizzint.watch/api/dashboard-data'; constant GDELT_BATCH_API (line 24) | const GDELT_BATCH_API = 'https://www.pizzint.watch/api/gdelt/batch'; constant DEFAULT_GDELT_PAIRS (line 25) | const DEFAULT_GDELT_PAIRS = 'usa_russia,russia_ukraine,usa_china,china_t... function getPizzintStatus (line 31) | async function getPizzintStatus( FILE: server/worldmonitor/intelligence/v1/get-risk-scores.ts constant BASELINE_RISK (line 19) | const BASELINE_RISK: Record = { constant EVENT_MULTIPLIER (line 26) | const EVENT_MULTIPLIER: Record = { constant COUNTRY_KEYWORDS (line 33) | const COUNTRY_KEYWORDS: Record = { constant COUNTRY_BBOX (line 67) | const COUNTRY_BBOX: Record = { constant ADVISORY_LEVELS_FALLBACK (line 108) | const ADVISORY_LEVELS_FALLBACK: Record = { type CountrySignals (line 153) | interface CountrySignals { function emptySignals (line 180) | function emptySignals(): CountrySignals { function fetchACLEDEvents (line 195) | async function fetchACLEDEvents(): Promise { function computeCIIScores (line 301) | function computeCIIScores( function computeStrategicRisks (line 513) | function computeStrategicRisks(ciiScores: CiiScore[]): StrategicRisk[] { constant RISK_CACHE_KEY (line 539) | const RISK_CACHE_KEY = 'risk:scores:sebuf:v1'; constant RISK_STALE_CACHE_KEY (line 540) | const RISK_STALE_CACHE_KEY = 'risk:scores:sebuf:stale:v1'; constant RISK_CACHE_TTL (line 541) | const RISK_CACHE_TTL = 600; constant RISK_STALE_TTL (line 542) | const RISK_STALE_TTL = 3600; function getRiskScores (line 548) | async function getRiskScores( FILE: server/worldmonitor/intelligence/v1/list-security-advisories.ts constant ADVISORY_KEY (line 9) | const ADVISORY_KEY = 'intelligence:advisories:v1'; function listSecurityAdvisories (line 11) | async function listSecurityAdvisories( FILE: server/worldmonitor/intelligence/v1/search-gdelt-documents.ts constant SEEDED_KEY (line 9) | const SEEDED_KEY = 'intelligence:gdelt-intel:v1'; type SeededGdeltData (line 15) | type SeededGdeltData = { function searchGdeltDocuments (line 30) | async function searchGdeltDocuments( FILE: server/worldmonitor/maritime/v1/get-vessel-snapshot.ts function getRelayBaseUrl (line 18) | function getRelayBaseUrl(): string | null { function getRelayRequestHeaders (line 27) | function getRelayRequestHeaders(): Record { constant DISRUPTION_TYPE_MAP (line 41) | const DISRUPTION_TYPE_MAP: Record = { constant SEVERITY_MAP (line 46) | const SEVERITY_MAP: Record = { constant SNAPSHOT_CACHE_TTL_MS (line 53) | const SNAPSHOT_CACHE_TTL_MS = 300_000; function fetchVesselSnapshot (line 58) | async function fetchVesselSnapshot(): Promise { function fetchVesselSnapshotFromRelay (line 83) | async function fetchVesselSnapshotFromRelay(): Promise(a: T,... function simulateEvaluation (line 38) | function simulateEvaluation( function ensureHistoricalAnalysisLedger (line 101) | async function ensureHistoricalAnalysisLedger( function _ensureHistoricalAnalysisLedger (line 118) | async function _ensureHistoricalAnalysisLedger( FILE: server/worldmonitor/market/v1/get-country-stock-index.ts constant COUNTRY_INDEX (line 19) | const COUNTRY_INDEX: Record = { constant REDIS_CACHE_KEY (line 71) | const REDIS_CACHE_KEY = 'market:stock-index:v1'; constant REDIS_CACHE_TTL (line 72) | const REDIS_CACHE_TTL = 1800; constant STOCK_INDEX_CACHE_TTL (line 75) | const STOCK_INDEX_CACHE_TTL = 3_600_000; function getCountryStockIndex (line 81) | async function getCountryStockIndex( FILE: server/worldmonitor/market/v1/get-sector-summary.ts constant SEED_CACHE_KEY (line 13) | const SEED_CACHE_KEY = 'market:sectors:v1'; function getSectorSummary (line 15) | async function getSectorSummary( FILE: server/worldmonitor/market/v1/get-stock-analysis-history.ts constant DEFAULT_LIMIT_PER_SYMBOL (line 9) | const DEFAULT_LIMIT_PER_SYMBOL = 4; constant MAX_LIMIT_PER_SYMBOL (line 10) | const MAX_LIMIT_PER_SYMBOL = 32; FILE: server/worldmonitor/market/v1/list-commodity-quotes.ts constant BOOTSTRAP_KEY (line 15) | const BOOTSTRAP_KEY = 'market:commodities-bootstrap:v1'; function listCommodityQuotes (line 17) | async function listCommodityQuotes( FILE: server/worldmonitor/market/v1/list-crypto-quotes.ts constant SEED_CACHE_KEY (line 15) | const SEED_CACHE_KEY = 'market:crypto:v1'; constant SYMBOL_TO_ID (line 17) | const SYMBOL_TO_ID = new Map(Object.entries(CRYPTO_META).map(([id, m]) =... function listCryptoQuotes (line 19) | async function listCryptoQuotes( FILE: server/worldmonitor/market/v1/list-etf-flows.ts constant SEED_CACHE_KEY (line 13) | const SEED_CACHE_KEY = 'market:etf-flows:v1'; constant EMPTY_RESPONSE (line 15) | const EMPTY_RESPONSE: ListEtfFlowsResponse = { function listEtfFlows (line 29) | async function listEtfFlows( FILE: server/worldmonitor/market/v1/list-gulf-quotes.ts constant SEED_CACHE_KEY (line 13) | const SEED_CACHE_KEY = 'market:gulf-quotes:v1'; function listGulfQuotes (line 15) | async function listGulfQuotes( FILE: server/worldmonitor/market/v1/list-market-quotes.ts constant BOOTSTRAP_KEY (line 15) | const BOOTSTRAP_KEY = 'market:stocks-bootstrap:v1'; function listMarketQuotes (line 17) | async function listMarketQuotes( FILE: server/worldmonitor/market/v1/list-stablecoin-markets.ts constant SEED_CACHE_KEY (line 13) | const SEED_CACHE_KEY = 'market:stablecoins:v1'; constant EMPTY_RESPONSE (line 15) | const EMPTY_RESPONSE: ListStablecoinMarketsResponse = { function listStablecoinMarkets (line 27) | async function listStablecoinMarkets( FILE: server/worldmonitor/market/v1/list-stored-stock-backtests.ts constant DEFAULT_EVAL_WINDOW_DAYS (line 9) | const DEFAULT_EVAL_WINDOW_DAYS = 10; FILE: server/worldmonitor/market/v1/premium-stock-store.ts constant ANALYSIS_HISTORY_LIMIT (line 8) | const ANALYSIS_HISTORY_LIMIT = 32; constant ANALYSIS_HISTORY_TTL_SECONDS (line 9) | const ANALYSIS_HISTORY_TTL_SECONDS = 90 * 24 * 60 * 60; constant BACKTEST_LEDGER_LIMIT (line 10) | const BACKTEST_LEDGER_LIMIT = 192; constant BACKTEST_LEDGER_TTL_SECONDS (line 11) | const BACKTEST_LEDGER_TTL_SECONDS = 90 * 24 * 60 * 60; constant BACKTEST_STORE_TTL_SECONDS (line 12) | const BACKTEST_STORE_TTL_SECONDS = 30 * 24 * 60 * 60; type AnalysisHistoryRecord (line 14) | type AnalysisHistoryRecord = Record; function compareAnalysisDesc (line 16) | function compareAnalysisDesc { function loadAnalysisRecords (line 97) | async function loadAnalysisRecords(ids: string[], itemKeyFor: (analysisI... function trimIndexTail (line 108) | async function trimIndexTail(indexKey: string, ids: string[], keepLimit:... function storeStockAnalysisSnapshot (line 116) | async function storeStockAnalysisSnapshot( function getStoredStockAnalysisHistory (line 136) | async function getStoredStockAnalysisHistory( function storeHistoricalBacktestAnalysisRecords (line 153) | async function storeHistoricalBacktestAnalysisRecords( function getStoredHistoricalBacktestAnalyses (line 184) | async function getStoredHistoricalBacktestAnalyses( function storeStockBacktestSnapshot (line 194) | async function storeStockBacktestSnapshot( function getStoredStockBacktestSnapshots (line 205) | async function getStoredStockBacktestSnapshots( FILE: server/worldmonitor/market/v1/stock-news-search.ts type StockNewsSearchProviderId (line 8) | type StockNewsSearchProviderId = 'exa' | 'brave' | 'serpapi' | 'google-n... type StockNewsSearchResult (line 10) | type StockNewsSearchResult = { type SearchProviderDefinition (line 15) | type SearchProviderDefinition = { type ProviderRotationState (line 21) | type ProviderRotationState = { constant SEARCH_CACHE_TTL_SECONDS (line 27) | const SEARCH_CACHE_TTL_SECONDS = 1_200; constant PROVIDER_ERROR_THRESHOLD (line 28) | const PROVIDER_ERROR_THRESHOLD = 3; constant SEARCH_XML (line 29) | const SEARCH_XML = new XMLParser({ function resetStockNewsSearchStateForTests (line 36) | function resetStockNewsSearchStateForTests(): void { function splitApiKeys (line 40) | function splitApiKeys(raw: string | undefined): string[] { function normalizeSymbol (line 47) | function normalizeSymbol(raw: string): string { function stableHash (line 51) | function stableHash(input: string): string { function extractDomain (line 60) | function extractDomain(url: string): string { function parsePublishedAt (line 69) | function parsePublishedAt(value: unknown): number { function relativeDateToTimestamp (line 75) | function relativeDateToTimestamp(value: unknown): number { function dedupeHeadlines (line 96) | function dedupeHeadlines(headlines: StockAnalysisHeadline[], maxResults:... function getSearchDays (line 110) | function getSearchDays(now = new Date()): number { function buildStockNewsSearchQuery (line 117) | function buildStockNewsSearchQuery(symbol: string, name: string): string { function getProviderCandidates (line 125) | function getProviderCandidates(provider: SearchProviderDefinition): stri... function recordProviderSuccess (line 154) | function recordProviderSuccess(providerId: string, apiKey: string): void { function recordProviderError (line 161) | function recordProviderError(providerId: string, apiKey: string): void { function searchWithExa (line 167) | async function searchWithExa(query: string, maxResults: number, days: nu... function searchWithBrave (line 204) | async function searchWithBrave(query: string, maxResults: number, days: ... function searchWithSerpApi (line 243) | async function searchWithSerpApi(query: string, maxResults: number, days... function searchViaProviders (line 283) | async function searchViaProviders(query: string, maxResults: number, day... function fetchGoogleNewsRss (line 311) | async function fetchGoogleNewsRss(query: string, maxResults: number): Pr... function searchRecentStockHeadlines (line 348) | async function searchRecentStockHeadlines(symbol: string, name: string, ... FILE: server/worldmonitor/military/v1/_shared.ts constant MILITARY_HEX_SET (line 10) | const MILITARY_HEX_SET = new Set( function isMilitaryHex (line 14) | function isMilitaryHex(hexId: string | null | undefined): boolean { constant MILITARY_PREFIXES (line 19) | const MILITARY_PREFIXES = [ constant SHORT_MILITARY_PREFIXES (line 39) | const SHORT_MILITARY_PREFIXES = ['AE', 'RF', 'TF', 'PAT', 'SAM', 'OPS', ... constant AIRLINE_CODES (line 41) | const AIRLINE_CODES = new Set([ function isMilitaryCallsign (line 54) | function isMilitaryCallsign(callsign: string | null | undefined): boolean { function detectAircraftType (line 70) | function detectAircraftType(callsign: string | null | undefined): string { type TheaterDef (line 86) | interface TheaterDef { constant POSTURE_THEATERS (line 94) | const POSTURE_THEATERS: TheaterDef[] = [ type RawFlight (line 110) | interface RawFlight { constant UPSTREAM_TIMEOUT_MS (line 121) | const UPSTREAM_TIMEOUT_MS = 20_000; function mapWingbitsDetails (line 127) | function mapWingbitsDetails(icao24: string, data: Record { function normalizeBounds (line 41) | function normalizeBounds(req: ListMilitaryFlightsRequest): RequestBounds { function filterFlightsToBounds (line 50) | function filterFlightsToBounds( constant AIRCRAFT_TYPE_MAP (line 62) | const AIRCRAFT_TYPE_MAP: Record = { function listMilitaryFlights (line 71) | async function listMilitaryFlights( FILE: server/worldmonitor/natural/v1/list-natural-events.ts constant SEED_CACHE_KEY (line 15) | const SEED_CACHE_KEY = 'natural:events:v1'; FILE: server/worldmonitor/news/v1/_classifier.ts type ThreatLevel (line 1) | type ThreatLevel = 'critical' | 'high' | 'medium' | 'low' | 'info'; type EventCategory (line 3) | type EventCategory = type ClassificationResult (line 8) | interface ClassificationResult { type KeywordMap (line 15) | type KeywordMap = Record; constant CRITICAL_KEYWORDS (line 17) | const CRITICAL_KEYWORDS: KeywordMap = { constant HIGH_KEYWORDS (line 40) | const HIGH_KEYWORDS: KeywordMap = { constant MEDIUM_KEYWORDS (line 67) | const MEDIUM_KEYWORDS: KeywordMap = { constant LOW_KEYWORDS (line 103) | const LOW_KEYWORDS: KeywordMap = { constant TECH_HIGH_KEYWORDS (line 133) | const TECH_HIGH_KEYWORDS: KeywordMap = { constant TECH_MEDIUM_KEYWORDS (line 143) | const TECH_MEDIUM_KEYWORDS: KeywordMap = { constant TECH_LOW_KEYWORDS (line 156) | const TECH_LOW_KEYWORDS: KeywordMap = { constant EXCLUSIONS (line 170) | const EXCLUSIONS = [ constant SHORT_KEYWORDS (line 177) | const SHORT_KEYWORDS = new Set([ function getKeywordRegex (line 184) | function getKeywordRegex(kw: string): RegExp { function matchKeywords (line 195) | function matchKeywords( function classifyByKeyword (line 207) | function classifyByKeyword(title: string, variant?: string): Classificat... FILE: server/worldmonitor/news/v1/_feeds.ts type ServerFeed (line 1) | interface ServerFeed { constant VARIANT_FEEDS (line 10) | const VARIANT_FEEDS: Record> = { constant INTEL_SOURCES (line 404) | const INTEL_SOURCES: ServerFeed[] = [ FILE: server/worldmonitor/news/v1/_shared.ts constant CACHE_TTL_SECONDS (line 5) | const CACHE_TTL_SECONDS = 86400; function buildArticlePrompts (line 36) | function buildArticlePrompts( FILE: server/worldmonitor/news/v1/dedup.mjs function deduplicateHeadlines (line 7) | function deduplicateHeadlines(headlines) { FILE: server/worldmonitor/news/v1/get-summarize-article-cache.ts constant CACHE_KEY_PATTERN (line 10) | const CACHE_KEY_PATTERN = /^summary:v\d+:[a-z0-9:_-]{3,120}$/; constant NEG_SENTINEL (line 11) | const NEG_SENTINEL = '__WM_NEG__'; constant EMPTY_MISS (line 13) | const EMPTY_MISS: SummarizeArticleResponse = { function getSummarizeArticleCache (line 25) | async function getSummarizeArticleCache( FILE: server/worldmonitor/news/v1/list-feed-digest.ts function getRelayBaseUrl (line 16) | function getRelayBaseUrl(): string | null { function getRelayHeaders (line 24) | function getRelayHeaders(): Record { constant VALID_VARIANTS (line 37) | const VALID_VARIANTS = new Set(['full', 'tech', 'finance', 'happy', 'com... constant ITEMS_PER_FEED (line 39) | const ITEMS_PER_FEED = 5; constant MAX_ITEMS_PER_CATEGORY (line 40) | const MAX_ITEMS_PER_CATEGORY = 20; constant FEED_TIMEOUT_MS (line 41) | const FEED_TIMEOUT_MS = 8_000; constant OVERALL_DEADLINE_MS (line 42) | const OVERALL_DEADLINE_MS = 25_000; constant BATCH_CONCURRENCY (line 43) | const BATCH_CONCURRENCY = 20; constant LEVEL_TO_PROTO (line 45) | const LEVEL_TO_PROTO: Record = { type ParsedItem (line 53) | interface ParsedItem { function createTimeoutLinkedController (line 65) | function createTimeoutLinkedController(parentSignal: AbortSignal): { function fetchRssText (line 83) | async function fetchRssText( function fetchAndParseRss (line 105) | async function fetchAndParseRss( function parseRssXml (line 145) | function parseRssXml(xml: string, feed: ServerFeed, variant: string): Pa... constant TAG_REGEX_CACHE (line 194) | const TAG_REGEX_CACHE = new Map { function toProtoItem (line 257) | function toProtoItem(item: ParsedItem): ProtoNewsItem { function listFeedDigest (line 274) | async function listFeedDigest( function buildDigest (line 315) | async function buildDigest(variant: string, lang: string): Promise { function fetchTextWithRelay (line 57) | async function fetchTextWithRelay(url: string): Promise { constant CURATED_EVENTS (line 102) | const CURATED_EVENTS: TechEvent[] = [ function normalizeLocation (line 155) | function normalizeLocation(location: string | null): (TechEventCoords) |... function parseICS (line 193) | function parseICS(icsText: string): TechEvent[] { function parseDevEventsRSS (line 242) | function parseDevEventsRSS(rssText: string): TechEvent[] { function fetchTechEvents (line 313) | async function fetchTechEvents(req: ListTechEventsRequest): Promise ${THRE... type ThreatLevel (line 33) | type ThreatLevel = 'war_zone' | 'critical' | 'high' | 'elevated' | 'norm... type GeoCoordinates (line 34) | type GeoCoordinates = { latitude: number; longitude: number }; type ChokepointConfig (line 36) | interface ChokepointConfig { type DirectionLabel (line 68) | type DirectionLabel = 'eastbound' | 'westbound' | 'northbound' | 'southb... type PreBuiltTransitSummary (line 70) | interface PreBuiltTransitSummary { type TransitSummariesPayload (line 85) | interface TransitSummariesPayload { constant THREAT_CONFIG_LAST_REVIEWED (line 95) | const THREAT_CONFIG_LAST_REVIEWED = '2026-03-04'; constant CHOKEPOINTS (line 97) | const CHOKEPOINTS: ChokepointConfig[] = [ function normalizeText (line 113) | function normalizeText(input: string): string { function containsPhrase (line 121) | function containsPhrase(normalizedHaystack: string, keyword: string): bo... function haversineKm (line 127) | function haversineKm(aLat: number, aLon: number, bLat: number, bLon: num... function nearestChokepoint (line 136) | function nearestChokepoint(location?: GeoCoordinates): { id: string; dis... function keywordScore (line 149) | function keywordScore(cp: ChokepointConfig, normalizedText: string): num... function resolveChokepointId (line 165) | function resolveChokepointId(input: { text: string; location?: GeoCoordi... function groupWarningsByChokepoint (line 192) | function groupWarningsByChokepoint(warnings: NavigationalWarning[]): Map... function groupDisruptionsByChokepoint (line 208) | function groupDisruptionsByChokepoint(disruptions: AisDisruption[]): Map... function isThreatConfigFresh (line 226) | function isThreatConfigFresh(asOfMs = Date.now()): boolean { function makeInternalCtx (line 233) | function makeInternalCtx(): { request: Request; pathParams: Record { function getChokepointStatus (line 380) | async function getChokepointStatus( FILE: server/worldmonitor/supply-chain/v1/get-critical-minerals.ts constant REDIS_CACHE_KEY (line 14) | const REDIS_CACHE_KEY = 'supply_chain:minerals:v2'; constant REDIS_CACHE_TTL (line 15) | const REDIS_CACHE_TTL = 86400; function buildMineralsData (line 17) | function buildMineralsData(): CriticalMineral[] { function getCriticalMinerals (line 57) | async function getCriticalMinerals( FILE: server/worldmonitor/supply-chain/v1/get-shipping-rates.ts constant REDIS_CACHE_KEY (line 9) | const REDIS_CACHE_KEY = 'supply_chain:shipping:v2'; function getShippingRates (line 11) | async function getShippingRates( FILE: server/worldmonitor/thermal/v1/list-thermal-escalations.ts constant REDIS_CACHE_KEY (line 10) | const REDIS_CACHE_KEY = 'thermal:escalation:v1'; constant DEFAULT_MAX_ITEMS (line 11) | const DEFAULT_MAX_ITEMS = 12; constant MAX_ITEMS_LIMIT (line 12) | const MAX_ITEMS_LIMIT = 25; function readSeededThermalWatch (line 14) | async function readSeededThermalWatch(): Promise = { function wtoFetch (line 46) | async function wtoFetch( FILE: server/worldmonitor/trade/v1/get-customs-revenue.ts constant CUSTOMS_KEY (line 9) | const CUSTOMS_KEY = 'trade:customs-revenue:v1'; function getCustomsRevenue (line 11) | async function getCustomsRevenue( FILE: server/worldmonitor/trade/v1/get-tariff-trends.ts constant SEED_KEY_PREFIX (line 12) | const SEED_KEY_PREFIX = 'trade:tariffs:v1'; function isValidCode (line 14) | function isValidCode(c: string): boolean { function getTariffTrends (line 18) | async function getTariffTrends( FILE: server/worldmonitor/trade/v1/get-trade-barriers.ts constant SEED_CACHE_KEY (line 12) | const SEED_CACHE_KEY = 'trade:barriers:v1:tariff-gap:50'; function getTradeBarriers (line 14) | async function getTradeBarriers( FILE: server/worldmonitor/trade/v1/get-trade-flows.ts constant SEED_KEY_PREFIX (line 12) | const SEED_KEY_PREFIX = 'trade:flows:v1'; function isValidCode (line 14) | function isValidCode(c: string): boolean { function getTradeFlows (line 18) | async function getTradeFlows( FILE: server/worldmonitor/trade/v1/get-trade-restrictions.ts constant SEED_CACHE_KEY (line 12) | const SEED_CACHE_KEY = 'trade:restrictions:v1:tariff-overview:50'; function getTradeRestrictions (line 14) | async function getTradeRestrictions( FILE: server/worldmonitor/unrest/v1/_shared.ts constant GDELT_GEO_URL (line 11) | const GDELT_GEO_URL = 'https://api.gdeltproject.org/api/v2/geo/geo'; function mapAcledEventType (line 17) | function mapAcledEventType(eventType: string, subEventType: string): Unr... function classifySeverity (line 34) | function classifySeverity(fatalities: number, eventType: string): Severi... function classifyGdeltSeverity (line 46) | function classifyGdeltSeverity(count: number, name: string): SeverityLev... function classifyGdeltEventType (line 55) | function classifyGdeltEventType(name: string): UnrestEventType { function deduplicateEvents (line 67) | function deduplicateEvents(events: UnrestEvent[]): UnrestEvent[] { function sortBySeverityAndRecency (line 108) | function sortBySeverityAndRecency(events: UnrestEvent[]): UnrestEvent[] { FILE: server/worldmonitor/unrest/v1/list-unrest-events.ts constant SEED_CACHE_KEY (line 16) | const SEED_CACHE_KEY = 'unrest:events:v1'; function filterSeedEvents (line 18) | function filterSeedEvents( function listUnrestEvents (line 38) | async function listUnrestEvents( FILE: server/worldmonitor/webcam/v1/get-webcam-image.ts constant WINDY_BASE (line 4) | const WINDY_BASE = 'https://api.windy.com/webcams/api/v3/webcams'; constant CACHE_TTL (line 5) | const CACHE_TTL = 300; constant WEBCAM_ID_RE (line 7) | const WEBCAM_ID_RE = /^[\w-]+$/; function getWebcamImage (line 9) | async function getWebcamImage(_ctx: ServerContext, req: GetWebcamImageRe... FILE: server/worldmonitor/webcam/v1/list-webcams.ts constant MAX_RESULTS (line 4) | const MAX_RESULTS = 2000; constant RESPONSE_CACHE_TTL (line 5) | const RESPONSE_CACHE_TTL = 3600; function getClusterCellSize (line 7) | function getClusterCellSize(zoom: number): number { function clusterWebcams (line 15) | function clusterWebcams( function listWebcams (line 73) | async function listWebcams(_ctx: ServerContext, req: ListWebcamsRequest)... function equirectangularWidthKm (line 162) | function equirectangularWidthKm(s: number, n: number, w: number, e: numb... FILE: server/worldmonitor/wildfire/v1/list-fire-detections.ts constant SEED_CACHE_KEY (line 15) | const SEED_CACHE_KEY = 'wildfire:fires:v1'; FILE: src-tauri/build.rs function main (line 1) | fn main() { FILE: src-tauri/sidecar/local-api-server.mjs function normalizeRequestBody (line 21) | function normalizeRequestBody(body) { function resolveRequestBody (line 30) | async function resolveRequestBody(input, init, method, isRequest) { function buildSafeResponse (line 46) | function buildSafeResponse(statusCode, statusText, headers, bodyBuffer) { function isTransientVerificationError (line 52) | function isTransientVerificationError(error) { constant MAX_CONCURRENT_UPSTREAM (line 65) | const MAX_CONCURRENT_UPSTREAM = 6; function acquireUpstreamSlot (line 66) | function acquireUpstreamSlot() { function releaseUpstreamSlot (line 73) | function releaseUpstreamSlot() { function sidecarYahooGate (line 84) | function sidecarYahooGate() { constant ALLOWED_ENV_KEYS (line 138) | const ALLOWED_ENV_KEYS = new Set([ constant CHROME_UA (line 148) | const CHROME_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Apple... function isPrivateIP (line 154) | function isPrivateIP(ip) { function isSafeUrl (line 180) | async function isSafeUrl(urlString) { function json (line 241) | function json(data, status = 200, extraHeaders = {}) { function canCompress (line 248) | function canCompress(headers, body) { function appendVary (line 252) | function appendVary(existing, token) { function maybeCompressResponseBody (line 261) | async function maybeCompressResponseBody(body, headers, acceptEncoding =... function isBracketSegment (line 278) | function isBracketSegment(segment) { function splitRoutePath (line 282) | function splitRoutePath(routePath) { function routePriority (line 286) | function routePriority(routePath) { function matchRoute (line 296) | function matchRoute(routePath, pathname) { function buildRouteTable (line 344) | async function buildRouteTable(root) { constant REQUEST_BODY_CACHE (line 372) | const REQUEST_BODY_CACHE = Symbol('requestBodyCache'); function readBody (line 374) | async function readBody(req) { function toHeaders (line 386) | function toHeaders(nodeHeaders, options = {}) { function proxyToCloud (line 404) | async function proxyToCloud(requestUrl, req, remoteBase) { function pickModule (line 424) | function pickModule(pathname, routes) { function isCloudPreferred (line 457) | function isCloudPreferred(pathname) { constant TRAFFIC_LOG_MAX (line 463) | const TRAFFIC_LOG_MAX = 200; function loadVerboseState (line 468) | function loadVerboseState(dataDir) { function saveVerboseState (line 476) | function saveVerboseState() { function recordTraffic (line 481) | function recordTraffic(entry) { function logOnce (line 490) | function logOnce(logger, route, message) { function importHandler (line 501) | async function importHandler(modulePath) { function resolveConfig (line 521) | function resolveConfig(options = {}) { function isMainModule (line 552) | function isMainModule() { function handleLocalServiceStatus (line 557) | async function handleLocalServiceStatus(context) { function tryCloudFallback (line 570) | async function tryCloudFallback(requestUrl, req, context, reason) { constant SIDECAR_ALLOWED_ORIGINS (line 596) | const SIDECAR_ALLOWED_ORIGINS = [ function getSidecarCorsOrigin (line 607) | function getSidecarCorsOrigin(req) { function makeCorsHeaders (line 613) | function makeCorsHeaders(req) { function fetchWithTimeout (line 623) | async function fetchWithTimeout(url, options = {}, timeoutMs = 12000) { function relayToHttpUrl (line 685) | function relayToHttpUrl(rawUrl) { function isAuthFailure (line 696) | function isAuthFailure(status, text = '') { function isCloudflareChallenge403 (line 704) | function isCloudflareChallenge403(response, text = '') { function validateSecretAgainstProvider (line 719) | async function validateSecretAgainstProvider(key, rawValue, context = {}) { function dispatch (line 1033) | async function dispatch(requestUrl, req, routes, context) { function createLocalApiServer (line 1433) | async function createLocalApiServer(options = {}) { FILE: src-tauri/sidecar/local-api-server.test.mjs function listen (line 12) | async function listen(server, host = '127.0.0.1', port = 0) { function postJsonViaHttp (line 34) | async function postJsonViaHttp(url, payload) { function mockHttpsRequestOnce (line 63) | function mockHttpsRequestOnce({ statusCode, headers, body }) { function setupRemoteServer (line 90) | async function setupRemoteServer() { function setupApiDir (line 118) | async function setupApiDir(files) { function setupResourceDirWithUpApi (line 139) | async function setupResourceDirWithUpApi(files) { method log (line 178) | log() { } method warn (line 178) | warn() { } method error (line 178) | error() { } method log (line 213) | log() { } method warn (line 213) | warn() { } method error (line 213) | error() { } method log (line 261) | log() { } method warn (line 261) | warn() { } method error (line 261) | error() { } method log (line 304) | log() { } method warn (line 304) | warn() { } method error (line 304) | error() { } method log (line 329) | log() { } method warn (line 329) | warn() { } method error (line 329) | error() { } method log (line 368) | log() { } method warn (line 368) | warn() { } method error (line 368) | error() { } method log (line 428) | log() { } method warn (line 428) | warn() { } method error (line 428) | error() { } method log (line 480) | log() { } method warn (line 480) | warn() { } method error (line 480) | error() { } method log (line 511) | log() { } method warn (line 511) | warn() { } method error (line 511) | error() { } method log (line 551) | log() {} method warn (line 551) | warn(...args) { warnings.push(args.join(' ')); } method error (line 551) | error() {} method log (line 582) | log() { } method warn (line 582) | warn() { } method error (line 582) | error() { } method log (line 611) | log() { } method warn (line 611) | warn() { } method error (line 611) | error() { } method log (line 657) | log() { } method warn (line 657) | warn() { } method error (line 657) | error() { } method log (line 685) | log() { } method warn (line 685) | warn() { } method error (line 685) | error() { } method log (line 713) | log() { } method warn (line 713) | warn() { } method error (line 713) | error() { } method log (line 741) | log() { } method warn (line 741) | warn() { } method error (line 741) | error() { } method log (line 777) | log() { } method warn (line 777) | warn() { } method error (line 777) | error() { } method log (line 816) | log() { } method warn (line 816) | warn() { } method error (line 816) | error() { } method log (line 856) | log() { } method warn (line 856) | warn() { } method error (line 856) | error() { } method log (line 884) | log() { } method warn (line 884) | warn() { } method error (line 884) | error() { } method log (line 909) | log() { } method warn (line 909) | warn() { } method error (line 909) | error() { } method log (line 943) | log() { } method warn (line 943) | warn() { } method error (line 943) | error() { } method log (line 976) | log() { } method warn (line 976) | warn() { } method error (line 976) | error() { } method log (line 1003) | log() { } method warn (line 1003) | warn() { } method error (line 1003) | error() { } method log (line 1059) | log() { } method warn (line 1059) | warn() { } method error (line 1059) | error() { } method log (line 1100) | log() { } method warn (line 1100) | warn() { } method error (line 1100) | error() { } method log (line 1133) | log() { } method warn (line 1133) | warn() { } method error (line 1133) | error() { } method log (line 1167) | log() { } method warn (line 1167) | warn() { } method error (line 1167) | error() { } method log (line 1193) | log() { } method warn (line 1193) | warn() { } method error (line 1193) | error() { } method log (line 1219) | log() { } method warn (line 1219) | warn() { } method error (line 1219) | error() { } method log (line 1245) | log() { } method warn (line 1245) | warn() { } method error (line 1245) | error() { } method log (line 1271) | log() { } method warn (line 1271) | warn() { } method error (line 1271) | error() { } method log (line 1292) | log() { } method warn (line 1292) | warn() { } method error (line 1292) | error() { } method log (line 1320) | log() { } method warn (line 1320) | warn() { } method error (line 1320) | error() { } method log (line 1341) | log() { } method warn (line 1341) | warn() { } method error (line 1341) | error() { } method log (line 1371) | log() { } method warn (line 1371) | warn() { } method error (line 1371) | error() { } method log (line 1406) | log() { } method warn (line 1406) | warn() { } method error (line 1406) | error() { } FILE: src-tauri/src/main.rs constant DEFAULT_LOCAL_API_PORT (line 21) | const DEFAULT_LOCAL_API_PORT: u16 = 46123; constant KEYRING_SERVICE (line 22) | const KEYRING_SERVICE: &str = "world-monitor"; constant LOCAL_API_LOG_FILE (line 23) | const LOCAL_API_LOG_FILE: &str = "local-api.log"; constant DESKTOP_LOG_FILE (line 24) | const DESKTOP_LOG_FILE: &str = "desktop.log"; constant MENU_FILE_SETTINGS_ID (line 25) | const MENU_FILE_SETTINGS_ID: &str = "file.settings"; constant MENU_HELP_GITHUB_ID (line 26) | const MENU_HELP_GITHUB_ID: &str = "help.github"; constant MENU_HELP_DEVTOOLS_ID (line 28) | const MENU_HELP_DEVTOOLS_ID: &str = "help.devtools"; constant TRUSTED_WINDOWS (line 29) | const TRUSTED_WINDOWS: [&str; 3] = ["main", "settings", "live-channels"]; constant SUPPORTED_SECRET_KEYS (line 30) | const SUPPORTED_SECRET_KEYS: [&str; 28] = [ type LocalApiState (line 61) | struct LocalApiState { method default (line 69) | fn default() -> Self { type SecretsCache (line 85) | struct SecretsCache { method load_from_keychain (line 101) | fn load_from_keychain() -> Self { type PersistentCache (line 92) | struct PersistentCache { method load (line 156) | fn load(path: &Path) -> Self { method get (line 175) | fn get(&self, key: &str) -> Option { method flush (line 182) | fn flush(&self, path: &Path) -> Result { type DesktopRuntimeInfo (line 211) | struct DesktopRuntimeInfo { function save_vault (line 217) | fn save_vault(cache: &HashMap) -> Result<(), String> { function generate_local_token (line 228) | fn generate_local_token() -> String { function require_trusted_window (line 234) | fn require_trusted_window(label: &str) -> Result<(), String> { function get_local_api_token (line 243) | fn get_local_api_token(webview: Webview, state: tauri::State<'_, LocalAp... function get_desktop_runtime_info (line 255) | fn get_desktop_runtime_info(webview: Webview, state: tauri::State<'_, Lo... function get_local_api_port (line 266) | fn get_local_api_port(webview: Webview, state: tauri::State<'_, LocalApi... function list_supported_secret_keys (line 274) | fn list_supported_secret_keys() -> Vec { function get_secret (line 282) | fn get_secret( function get_all_secrets (line 299) | fn get_all_secrets(webview: Webview, cache: tauri::State<'_, SecretsCach... function set_secret (line 309) | fn set_secret( function delete_secret (line 337) | fn delete_secret(webview: Webview, key: String, cache: tauri::State<'_, ... function cache_file_path (line 353) | fn cache_file_path(app: &AppHandle) -> Result { function read_cache_entry (line 364) | fn read_cache_entry(webview: Webview, cache: tauri::State<'_, Persistent... constant MAX_FLUSH_RETRIES (line 369) | const MAX_FLUSH_RETRIES: u32 = 5; function schedule_debounced_flush (line 371) | fn schedule_debounced_flush(cache: &PersistentCache, app: &AppHandle) { function delete_cache_entry (line 421) | fn delete_cache_entry(webview: Webview, app: AppHandle, cache: tauri::St... function delete_cache_entries_by_prefix (line 436) | fn delete_cache_entries_by_prefix(webview: Webview, app: AppHandle, cach... function write_cache_entry (line 461) | fn write_cache_entry(webview: Webview, app: AppHandle, cache: tauri::Sta... function logs_dir_path (line 477) | fn logs_dir_path(app: &AppHandle) -> Result { function sidecar_log_path (line 487) | fn sidecar_log_path(app: &AppHandle) -> Result { function desktop_log_path (line 491) | fn desktop_log_path(app: &AppHandle) -> Result { function append_desktop_log (line 495) | fn append_desktop_log(app: &AppHandle, level: &str, message: &str) { function open_in_shell (line 511) | fn open_in_shell(arg: &str) -> Result<(), String> { function open_path_in_shell (line 541) | fn open_path_in_shell(path: &Path) -> Result<(), String> { function open_url (line 546) | fn open_url(webview: Webview, url: String) -> Result<(), String> { function open_logs_folder_impl (line 560) | fn open_logs_folder_impl(app: &AppHandle) -> Result { function open_sidecar_log_impl (line 566) | fn open_sidecar_log_impl(app: &AppHandle) -> Result { function open_logs_folder (line 577) | fn open_logs_folder(app: AppHandle) -> Result { function open_sidecar_log_file (line 582) | fn open_sidecar_log_file(app: AppHandle) -> Result { function open_settings_window_command (line 587) | async fn open_settings_window_command(app: AppHandle) -> Result<(), Stri... function close_settings_window (line 592) | fn close_settings_window(app: AppHandle) -> Result<(), String> { function open_live_channels_window_command (line 602) | async fn open_live_channels_window_command( function close_live_channels_window (line 625) | fn close_live_channels_window(app: AppHandle) -> Result<(), String> { function fetch_polymarket (line 637) | async fn fetch_polymarket(webview: Webview, state: tauri::State<'_, Loca... function open_settings_window (line 660) | fn open_settings_window(app: &AppHandle) -> Result<(), String> { function open_live_channels_window (line 687) | fn open_live_channels_window(app: &AppHandle, base_url: Option) ... function open_youtube_login_window (line 723) | fn open_youtube_login_window(app: &AppHandle) -> Result<(), String> { function open_youtube_login (line 751) | async fn open_youtube_login(webview: Webview, app: AppHandle) -> Result<... function build_app_menu (line 756) | fn build_app_menu(handle: &AppHandle) -> tauri::Result> { function handle_menu_event (line 836) | fn handle_menu_event(app: &AppHandle, event: tauri::menu::MenuEvent) { function sanitize_path_for_node (line 864) | fn sanitize_path_for_node(p: &Path) -> String { function strips_extended_drive_prefix (line 881) | fn strips_extended_drive_prefix() { function strips_extended_unc_prefix_and_preserves_unc_root (line 890) | fn strips_extended_unc_prefix_and_preserves_unc_root() { function leaves_standard_paths_unchanged (line 899) | fn leaves_standard_paths_unchanged() { function local_api_paths (line 908) | fn local_api_paths(app: &AppHandle) -> (PathBuf, PathBuf) { function resolve_node_binary (line 941) | fn resolve_node_binary(app: &AppHandle) -> Option { function read_port_file (line 1002) | fn read_port_file(path: &Path, timeout_ms: u64) -> Option { function start_local_api (line 1019) | fn start_local_api(app: &AppHandle) -> Result<(), String> { function stop_local_api (line 1181) | fn stop_local_api(app: &AppHandle) { function resolve_appimage_gio_module_dir (line 1199) | fn resolve_appimage_gio_module_dir() -> Option { function main (line 1242) | fn main() { FILE: src/App.ts constant CYBER_LAYER_ENABLED (line 55) | const CYBER_LAYER_ENABLED = import.meta.env.VITE_ENABLE_CYBER_LAYER === ... class App (line 59) | class App { method isPanelNearViewport (line 85) | private isPanelNearViewport(panelId: string, marginPx = 400): boolean { method isAnyPanelNearViewport (line 90) | private isAnyPanelNearViewport(panelIds: string[], marginPx = 400): bo... method shouldRefreshIntelligence (line 94) | private shouldRefreshIntelligence(): boolean { method shouldRefreshFirms (line 99) | private shouldRefreshFirms(): boolean { method shouldRefreshCorrelation (line 103) | private shouldRefreshCorrelation(): boolean { method primeVisiblePanelData (line 107) | private async primeVisiblePanelData(forceAll = false): Promise { method constructor (line 186) | constructor(containerId: string) { method init (line 500) | public async init(): Promise { method destroy (line 694) | public destroy(): void { method handleDeepLinks (line 716) | private handleDeepLinks(): void { method setupRefreshIntervals (line 755) | private setupRefreshIntervals(): void { FILE: src/app/app-context.ts type IntelligenceCache (line 11) | interface IntelligenceCache { type AppContext (line 27) | interface AppContext { type AppModule (line 89) | interface AppModule { FILE: src/app/country-intel.ts type IntlDisplayNamesCtor (line 44) | type IntlDisplayNamesCtor = new ( type CountryStockSnapshot (line 49) | type CountryStockSnapshot = { class CountryIntelManager (line 59) | class CountryIntelManager implements AppModule { method constructor (line 63) | constructor(ctx: AppContext) { method init (line 67) | init(): void { method destroy (line 71) | destroy(): void { method setupCountryIntel (line 77) | private setupCountryIntel(): void { method openCountryBrief (line 137) | async openCountryBrief(lat: number, lon: number): Promise { method openCountryBriefByCode (line 161) | async openCountryBriefByCode(code: string, country: string, opts?: { m... method refreshOpenBrief (line 383) | refreshOpenBrief(): void { method fetchCountryIntelBrief (line 399) | private async fetchCountryIntelBrief(code: string, contextSnapshot: st... method buildBriefContextSnapshot (line 418) | private buildBriefContextSnapshot( method mountCountryTimeline (line 463) | private mountCountryTimeline(code: string, country: string): void { method getCountrySignals (line 552) | getCountrySignals(code: string, country: string): CountryBriefSignals { method newsSeverityRank (line 686) | private newsSeverityRank(item: NewsItem): number { method buildSignalDetails (line 696) | private buildSignalDetails(code: string): CountryDeepDiveSignalDetails { method buildMilitarySummary (line 734) | private buildMilitarySummary(code: string, country: string): CountryDe... method buildEconomicIndicators (line 769) | private buildEconomicIndicators( method sameCountry (line 824) | private sameCountry(code: string, country: string, raw: string | undef... method mapSignalType (line 844) | private mapSignalType(type: string): CountryDeepDiveSignalDetails['rec... method normalizeSignalSeverity (line 856) | private normalizeSignalSeverity( method openCountryStory (line 867) | openCountryStory(code: string, name: string): void { method showToast (line 886) | showToast(msg: string): void { method getCountryStrikes (line 896) | private getCountryStrikes(code: string, hasGeoShape: boolean): typeof ... method isInCountry (line 906) | private isInCountry(lat: number, lon: number, code: string): boolean { method firstMentionPosition (line 958) | static firstMentionPosition(text: string, terms: string[]): number { method getOtherCountryTerms (line 967) | static getOtherCountryTerms(code: string): string[] { method resolveCountryName (line 985) | static resolveCountryName(code: string): string { method getCountrySearchTerms (line 1001) | static getCountrySearchTerms(country: string, code: string): string[] { method toFlagEmoji (line 1008) | static toFlagEmoji(code: string): string { FILE: src/app/data-loader.ts constant PROTO_TO_CLIENT_LEVEL (line 158) | const PROTO_TO_CLIENT_LEVEL: Record... function protoItemToNewsItem (line 166) | function protoItemToNewsItem(p: ProtoNewsItem): NewsItem { constant CYBER_LAYER_ENABLED (line 185) | const CYBER_LAYER_ENABLED = import.meta.env.VITE_ENABLE_CYBER_LAYER === ... type DataLoaderCallbacks (line 187) | interface DataLoaderCallbacks { class DataLoaderManager (line 192) | class DataLoaderManager implements AppModule { method callPanel (line 204) | private callPanel(key: string, method: string, ...args: unknown[]): vo... method constructor (line 228) | constructor(ctx: AppContext, callbacks: DataLoaderCallbacks) { method init (line 233) | init(): void { method destroy (line 246) | destroy(): void { method refreshCiiAndBrief (line 257) | private refreshCiiAndBrief(forceLocal = false): void { method tryFetchDigest (line 265) | private async tryFetchDigest(): Promise { method persistDigest (line 299) | private persistDigest(data: ListFeedDigestResponse): void { method loadPersistedDigest (line 303) | private async loadPersistedDigest(): Promise(feeds: T[], maxFeeds: number): T[] { method shouldShowIntelligenceNotifications (line 331) | private shouldShowIntelligenceNotifications(): boolean { method isPanelNearViewport (line 335) | private isPanelNearViewport(panelId: string, marginPx = 400): boolean { method isAnyPanelNearViewport (line 340) | private isAnyPanelNearViewport(panelIds: string[], marginPx = 400): bo... method loadAllData (line 344) | async loadAllData(forceAll = false): Promise { method refreshTemporalBaseline (line 528) | async refreshTemporalBaseline(): Promise { method loadDataForLayer (line 535) | async loadDataForLayer(layer: keyof MapLayers): Promise { method loadSatellites (line 612) | async loadSatellites(): Promise { method stopSatellitePropagation (line 624) | private stopSatellitePropagation(): void { method loadImageryFootprints (line 631) | private loadImageryFootprints(retries = 2): void { method stopLayerActivity (line 651) | stopLayerActivity(layer: keyof MapLayers): void { method findFlashLocation (line 658) | private findFlashLocation(title: string): { lat: number; lon: number }... method flashMapForNews (line 691) | private flashMapForNews(items: NewsItem[]): void { method getTimeRangeWindowMs (line 717) | getTimeRangeWindowMs(range: TimeRange): number { method filterItemsByTimeRange (line 729) | filterItemsByTimeRange(items: NewsItem[], range: TimeRange = this.ctx.... method getTimeRangeLabel (line 738) | getTimeRangeLabel(range: TimeRange = this.ctx.currentTimeRange): string { method renderNewsForCategory (line 750) | renderNewsForCategory(category: string, items: NewsItem[]): void { method applyTimeRangeFilterToNewsPanels (line 762) | applyTimeRangeFilterToNewsPanels(): void { method applyTimeRangeFilterDebounced (line 768) | applyTimeRangeFilterDebounced(): void { method loadNewsCategory (line 772) | private async loadNewsCategory(category: string, feeds: typeof FEEDS.p... method loadNews (line 934) | async loadNews(): Promise { method loadStockAnalysis (line 1096) | async loadStockAnalysis(): Promise { method loadStockBacktest (line 1136) | async loadStockBacktest(): Promise { method loadMarkets (line 1172) | async loadMarkets(): Promise { method loadDailyMarketBrief (line 1331) | async loadDailyMarketBrief(force = false): Promise { method loadPredictions (line 1381) | async loadPredictions(): Promise { method loadForecasts (line 1401) | async loadForecasts(): Promise { method loadNatural (line 1414) | async loadNatural(): Promise { method loadTechEvents (line 1451) | async loadTechEvents(): Promise { method loadWeatherAlerts (line 1519) | async loadWeatherAlerts(): Promise { method loadIntelligenceSignals (line 1533) | async loadIntelligenceSignals(): Promise { method loadOutages (line 1840) | async loadOutages(): Promise { method loadCyberThreats (line 1864) | async loadCyberThreats(): Promise { method loadIranEvents (line 1898) | async loadIranEvents(): Promise { method loadAisSignals (line 1913) | async loadAisSignals(): Promise { method waitForAisData (line 1956) | waitForAisData(): void { method loadCableActivity (line 1987) | async loadCableActivity(): Promise { method loadCableHealth (line 1998) | async loadCableHealth(): Promise { method loadProtests (line 2011) | async loadProtests(): Promise { method loadWebcams (line 2068) | async loadWebcams(): Promise { method loadFlightDelays (line 2108) | async loadFlightDelays(): Promise { method loadMilitary (line 2128) | async loadMilitary(): Promise { method loadCachedPosturesForBanner (line 2221) | private async loadCachedPosturesForBanner(): Promise { method loadFredData (line 2234) | async loadFredData(): Promise { method loadOilAnalytics (line 2275) | async loadOilAnalytics(): Promise { method loadGovernmentSpending (line 2295) | async loadGovernmentSpending(): Promise { method loadBisData (line 2313) | async loadBisData(): Promise { method loadTradePolicy (line 2330) | async loadTradePolicy(): Promise { method loadSupplyChain (line 2375) | async loadSupplyChain(): Promise { method updateMonitorResults (line 2411) | updateMonitorResults(): void { method runCorrelationAnalysis (line 2416) | async runCorrelationAnalysis(): Promise { method loadFirmsData (line 2453) | async loadFirmsData(): Promise { method loadPizzInt (line 2497) | async loadPizzInt(): Promise { method syncDataFreshnessWithLayers (line 2524) | syncDataFreshnessWithLayers(): void { method hydrateHappyPanelsFromCache (line 2542) | async hydrateHappyPanelsFromCache(): Promise { method loadHappySupplementaryAndRender (line 2571) | private async loadHappySupplementaryAndRender(): Promise { method loadPositiveEvents (line 2623) | private async loadPositiveEvents(): Promise { method loadKindnessData (line 2650) | private loadKindnessData(): void { method loadProgressData (line 2660) | private async loadProgressData(): Promise { method loadSpeciesData (line 2665) | private async loadSpeciesData(): Promise { method loadRenewableData (line 2677) | private async loadRenewableData(): Promise { method loadSecurityAdvisories (line 2693) | async loadSecurityAdvisories(): Promise { method loadSanctionsPressure (line 2706) | async loadSanctionsPressure(): Promise { method loadRadiationWatch (line 2725) | async loadRadiationWatch(): Promise { method loadTelegramIntel (line 2744) | async loadTelegramIntel(): Promise { method loadThermalEscalations (line 2757) | async loadThermalEscalations(): Promise { FILE: src/app/desktop-updater.ts type DesktopRuntimeInfo (line 7) | interface DesktopRuntimeInfo { type UpdaterOutcome (line 12) | type UpdaterOutcome = 'no_update' | 'update_available' | 'open_failed' |... type DesktopBuildVariant (line 13) | type DesktopBuildVariant = 'full' | 'tech' | 'finance'; constant DESKTOP_BUILD_VARIANT (line 15) | const DESKTOP_BUILD_VARIANT: DesktopBuildVariant = ( class DesktopUpdater (line 21) | class DesktopUpdater implements AppModule { method constructor (line 26) | constructor(ctx: AppContext) { method init (line 30) | init(): void { method destroy (line 34) | destroy(): void { method setupUpdateChecks (line 41) | private setupUpdateChecks(): void { method logUpdaterOutcome (line 58) | private logUpdaterOutcome(outcome: UpdaterOutcome, context: Record { method isNewerVersion (line 110) | private isNewerVersion(remote: string, current: string): boolean { method mapDesktopDownloadPlatform (line 122) | private mapDesktopDownloadPlatform(os: string, arch: string): string |... method resolveUpdateDownloadUrl (line 148) | private async resolveUpdateDownloadUrl(releaseUrl: string): Promise { method platformLabel (line 697) | private platformLabel(p: Platform): string { method initDownloadDropdown (line 708) | private initDownloadDropdown(): void { method setCopyLinkFeedback (line 778) | private setCopyLinkFeedback(button: HTMLElement | null, message: strin... method getFullscreenDocument (line 789) | private getFullscreenDocument(): Document & { method syncMapAfterLayoutChange (line 799) | private syncMapAfterLayoutChange(delayMs = 320): void { method exitFullscreenForNavigation (line 809) | private async exitFullscreenForNavigation(): Promise { method navigateToVariant (line 821) | private async navigateToVariant( method toggleFullscreen (line 838) | toggleFullscreen(): void { method updateMobileMenuThemeItem (line 857) | private updateMobileMenuThemeItem(): void { method startHeaderClock (line 867) | startHeaderClock(): void { method setupStatusPanel (line 877) | setupStatusPanel(): void { method setupPizzIntIndicator (line 881) | setupPizzIntIndicator(): void { method setupLlmStatusIndicator (line 891) | setupLlmStatusIndicator(): void { method setupExportPanel (line 900) | setupExportPanel(): void { method setupUnifiedSettings (line 914) | setupUnifiedSettings(): void { method setupPlaybackControl (line 977) | setupPlaybackControl(): void { method setupSnapshotSaving (line 995) | setupSnapshotSaving(): void { method restoreSnapshot (line 1020) | restoreSnapshot(snapshot: DashboardSnapshot): void { method setupMapLayerHandlers (line 1042) | setupMapLayerHandlers(): void { method setupPanelViewTracking (line 1088) | setupPanelViewTracking(): void { method showToast (line 1112) | showToast(msg: string): void { method shouldShowIntelligenceNotifications (line 1122) | shouldShowIntelligenceNotifications(): boolean { method setupMapResize (line 1126) | setupMapResize(): void { method setupMapPin (line 1248) | setupMapPin(): void { method setupMapDimensionToggle (line 1269) | private setupMapDimensionToggle(): void { method setupMapFullscreen (line 1291) | private setupMapFullscreen(mapSection: HTMLElement): void { method getLocalizedPanelName (line 1314) | getLocalizedPanelName(panelKey: string, fallback: string): string { method getAllSourceNames (line 1324) | getAllSourceNames(): string[] { method applyPanelSettings (line 1333) | applyPanelSettings(): void { FILE: src/app/panel-layout.ts type PanelLayoutCallbacks (line 72) | interface PanelLayoutCallbacks { class PanelLayoutManager (line 80) | class PanelLayoutManager implements AppModule { method constructor (line 90) | constructor(ctx: AppContext, callbacks: PanelLayoutCallbacks) { method init (line 98) | init(): void { method destroy (line 102) | destroy(): void { method renderLayout (line 130) | renderLayout(): void { method setupMobileMapToggle (line 366) | private setupMobileMapToggle(): void { method renderCriticalBanner (line 392) | renderCriticalBanner(postures: TheaterPostureSummary[]): void { method applyPanelSettings (line 461) | applyPanelSettings(): void { method shouldCreatePanel (line 480) | private shouldCreatePanel(key: string): boolean { method createNewsPanel (line 484) | private createNewsPanel(key: string, labelKey: string): NewsPanel | nu... method createPanel (line 493) | private createPanel(key:... method createPanels (line 500) | private createPanels(): void { method applyTimeRangeFilterToNewsPanels (line 1091) | private applyTimeRangeFilterToNewsPanels(): void { method filterItemsByTimeRange (line 1104) | private filterItemsByTimeRange(items: import('@/types').NewsItem[], ra... method getTimeRangeLabel (line 1118) | private getTimeRangeLabel(): string { method applyInitialUrlState (line 1127) | private applyInitialUrlState(): void { method addCustomWidget (line 1160) | addCustomWidget(spec: CustomWidgetSpec): void { method addMcpPanel (line 1181) | addMcpPanel(spec: McpPanelSpec): void { method getSavedPanelOrder (line 1202) | private getSavedPanelOrder(): string[] { method savePanelOrder (line 1214) | savePanelOrder(): void { method buildUnifiedOrder (line 1233) | private buildUnifiedOrder(sidebarIds: string[], bottomIds: string[]): ... method getSavedBottomSet (line 1305) | private getSavedBottomSet(): Set { method getEffectiveUltraWide (line 1339) | private getEffectiveUltraWide(): boolean { method insertByOrder (line 1345) | private insertByOrder(grid: HTMLElement, el: HTMLElement, key: string)... method ensureCorrectZones (line 1358) | public ensureCorrectZones(): void { method attachRelatedAssetHandlers (line 1385) | private attachRelatedAssetHandlers(panel: NewsPanel): void { method handleRelatedAssetClick (line 1393) | private handleRelatedAssetClick(asset: RelatedAsset): void { method lazyPanel (line 1430) | private lazyPanel( method makeDraggable (line 1462) | private makeDraggable(el: HTMLElement, key: string): void { method getLocalizedPanelName (line 1790) | getLocalizedPanelName(panelKey: string, fallback: string): string { method getAllSourceNames (line 1800) | getAllSourceNames(): string[] { FILE: src/app/pending-panel-data.ts function enqueuePanelCall (line 3) | function enqueuePanelCall(key: string, method: string, args: unknown[]):... function replayPendingCalls (line 15) | async function replayPendingCalls(key: string, panel: unknown): Promise<... function clearAllPendingCalls (line 28) | function clearAllPendingCalls(): void { FILE: src/app/refresh-scheduler.ts type RefreshRegistration (line 4) | interface RefreshRegistration { class RefreshScheduler (line 11) | class RefreshScheduler implements AppModule { method constructor (line 18) | constructor(ctx: AppContext) { method init (line 22) | init(): void {} method destroy (line 24) | destroy(): void { method setHiddenSince (line 36) | setHiddenSince(ts: number): void { method getHiddenSince (line 40) | getHiddenSince(): number { method scheduleRefresh (line 44) | scheduleRefresh( method flushStaleRefreshes (line 78) | flushStaleRefreshes(): void { method registerAll (line 114) | registerAll(registrations: RefreshRegistration[]): void { FILE: src/app/search-manager.ts type SearchManagerCallbacks (line 29) | interface SearchManagerCallbacks { class SearchManager (line 33) | class SearchManager implements AppModule { method constructor (line 39) | constructor(ctx: AppContext, callbacks: SearchManagerCallbacks) { method init (line 44) | init(): void { method destroy (line 48) | destroy(): void { method setupSearchModal (line 55) | private setupSearchModal(): void { method handleSearchResult (line 224) | private handleSearchResult(result: SearchResult): void { method handleCommand (line 387) | private handleCommand(cmd: Command): void { method scrollToPanel (line 496) | private scrollToPanel(panelId: string): void { method highlightNewsItem (line 504) | private highlightNewsItem(itemId: string): void { method applyHighlight (line 514) | private applyHighlight(el: Element): void { method updateSearchIndex (line 526) | updateSearchIndex(): void { method buildCountrySearchItems (line 560) | private buildCountrySearchItems(): { id: string; title: string; subtit... FILE: src/bootstrap/chunk-reload.ts type EventTargetLike (line 1) | interface EventTargetLike { type StorageLike (line 5) | interface StorageLike { type ChunkReloadGuardOptions (line 11) | interface ChunkReloadGuardOptions { function buildChunkReloadStorageKey (line 18) | function buildChunkReloadStorageKey(version: string): string { function installChunkReloadGuard (line 22) | function installChunkReloadGuard( function clearChunkReloadGuard (line 41) | function clearChunkReloadGuard(storageKey: string, storage: StorageLike ... FILE: src/components/AirlineIntelPanel.ts constant SEVERITY_COLOR (line 24) | const SEVERITY_COLOR: Record = { constant STATUS_BADGE (line 32) | const STATUS_BADGE: Record = { function fmt (line 38) | function fmt(n: number | null | undefined): string { return n == null ? ... function fmtTime (line 39) | function fmtTime(dt: Date | null | undefined): string { function fmtMin (line 43) | function fmtMin(m: number): string { function expCountdown (line 47) | function expCountdown(exp: Date | null, now: number): string { constant TABS (line 57) | const TABS = ['ops', 'flights', 'airlines', 'tracking', 'news', 'prices'... type Tab (line 58) | type Tab = typeof TABS[number]; constant TAB_LABELS (line 60) | const TAB_LABELS: Record = { class AirlineIntelPanel (line 67) | class AirlineIntelPanel extends Panel { method constructor (line 86) | constructor() { method toggle (line 141) | toggle(visible: boolean): void { method destroy (line 145) | destroy(): void { method updateLivePositions (line 151) | updateLivePositions(positions: PositionSample[]): void { method setLiveMode (line 157) | setLiveMode(active: boolean): void { method switchTab (line 161) | private switchTab(tab: Tab): void { method refresh (line 177) | private async refresh(): Promise { method loadOps (line 182) | private async loadOps(): Promise { method loadTab (line 187) | private async loadTab(tab: Tab): Promise { method renderLoading (line 225) | private renderLoading(): void { method renderTab (line 229) | private renderTab(): void { method renderOps (line 242) | private renderOps(): void { method renderFlights (line 261) | private renderFlights(): void { method renderAirlines (line 281) | private renderAirlines(): void { method renderTracking (line 297) | private renderTracking(): void { method renderNews (line 313) | private renderNews(): void { method renderPrices (line 327) | private renderPrices(): void { FILE: src/components/AviationCommandBar.ts type Intent (line 6) | type Intent = function parseIntent (line 16) | function parseIntent(raw: string): Intent { type CommandResult (line 62) | type CommandResult = { html: string; error?: boolean }; function executeIntent (line 64) | async function executeIntent(intent: Intent): Promise { constant HISTORY_KEY (line 125) | const HISTORY_KEY = 'aviation:cmdbar:history:v1'; constant MAX_HISTORY (line 126) | const MAX_HISTORY = 20; class AviationCommandBar (line 128) | class AviationCommandBar { method constructor (line 132) | constructor() { method destroy (line 145) | destroy(): void { method open (line 150) | open(): void { method focus (line 192) | private focus(): void { method close (line 197) | private close(): void { method run (line 202) | private async run(raw: string): Promise { method getHistory (line 216) | private getHistory(): string[] { method addToHistory (line 220) | private addToHistory(cmd: string): void { method renderHistory (line 227) | private renderHistory(): void { method updateSuggestions (line 243) | private updateSuggestions(val: string): void { method addStyles (line 261) | private addStyles(): void { FILE: src/components/BreakingNewsBanner.ts constant MAX_ALERTS (line 6) | const MAX_ALERTS = 3; constant CRITICAL_DISMISS_MS (line 7) | const CRITICAL_DISMISS_MS = 60_000; constant HIGH_DISMISS_MS (line 8) | const HIGH_DISMISS_MS = 30_000; constant SOUND_COOLDOWN_MS (line 9) | const SOUND_COOLDOWN_MS = 5 * 60 * 1000; type ActiveAlert (line 11) | interface ActiveAlert { class BreakingNewsBanner (line 19) | class BreakingNewsBanner { method constructor (line 33) | constructor() { method initAudio (line 66) | private initAudio(): void { method playSound (line 71) | private playSound(): void { method setupObservers (line 80) | private setupObservers(): void { method attachResizeObserverIfNeeded (line 88) | private attachResizeObserverIfNeeded(): void { method updatePosition (line 99) | private updatePosition(): void { method updateOffset (line 112) | private updateOffset(): void { method isDismissedRecently (line 121) | private isDismissedRecently(id: string): boolean { method handleAlert (line 131) | private handleAlert(alert: BreakingAlert): void { method resolveTargetPanel (line 173) | private resolveTargetPanel(alert: BreakingAlert): string { method scrollToPanel (line 179) | private scrollToPanel(panelId: string): void { method createAlertElement (line 194) | private createAlertElement(alert: BreakingAlert): HTMLElement { method formatTimeAgo (line 242) | private formatTimeAgo(date: Date): string { method dismissAlert (line 249) | private dismissAlert(id: string): void { method removeAlert (line 259) | private removeAlert(active: ActiveAlert): void { method handleVisibility (line 264) | private handleVisibility(): void { method destroy (line 289) | public destroy(): void { FILE: src/components/BreakthroughsTickerPanel.ts class BreakthroughsTickerPanel (line 14) | class BreakthroughsTickerPanel extends Panel { method constructor (line 17) | constructor() { method createTickerDOM (line 25) | private createTickerDOM(): void { method setItems (line 44) | public setItems(items: NewsItem[]): void { method destroy (line 71) | public destroy(): void { FILE: src/components/CIIPanel.ts class CIIPanel (line 9) | class CIIPanel extends Panel { method constructor (line 16) | constructor() { method setShareStoryHandler (line 26) | public setShareStoryHandler(handler: (code: string, name: string) => v... method setCountryClickHandler (line 30) | public setCountryClickHandler(handler: (code: string) => void): void { method getLevelColor (line 34) | private getLevelColor(level: CountryScore['level']): string { method getLevelEmoji (line 44) | private getLevelEmoji(level: CountryScore['level']): string { method buildTrendArrow (line 56) | private buildTrendArrow(trend: CountryScore['trend'], change: number):... method buildCountry (line 62) | private buildCountry(country: CountryScore): HTMLElement { method bindShareButtons (line 93) | private bindShareButtons(): void { method refresh (line 117) | public async refresh(forceLocal = false): Promise { method renderFromCached (line 154) | public renderFromCached(cached: CachedRiskScores): void { method getScores (line 167) | public getScores(): CountryScore[] { FILE: src/components/CascadePanel.ts type NodeFilter (line 14) | type NodeFilter = 'all' | 'cable' | 'pipeline' | 'port' | 'chokepoint'; class CascadePanel (line 16) | class CascadePanel extends Panel { method constructor (line 23) | constructor() { method init (line 35) | private async init(): Promise { method getImpactColor (line 48) | private getImpactColor(level: CascadeImpactLevel): string { method getImpactEmoji (line 57) | private getImpactEmoji(level: CascadeImpactLevel): string { method getNodeTypeEmoji (line 66) | private getNodeTypeEmoji(type: string): string { method getFilterLabel (line 77) | private getFilterLabel(filter: Exclude): string { method getFilteredNodes (line 87) | private getFilteredNodes(): InfrastructureNode[] { method renderSelector (line 100) | private renderSelector(): string { method renderCascadeResult (line 129) | private renderCascadeResult(): string { method render (line 175) | private render(): void { method setupDelegatedListeners (line 206) | private setupDelegatedListeners(): void { method runAnalysis (line 238) | private runAnalysis(): void { method selectNode (line 249) | public selectNode(nodeId: string): void { method onSelect (line 258) | public onSelect(callback: (nodeId: string | null) => void): void { method getSelectedNode (line 262) | public getSelectedNode(): string | null { method getCascadeResult (line 266) | public getCascadeResult(): CascadeResult | null { method refresh (line 270) | public refresh(): void { FILE: src/components/ClimateAnomalyPanel.ts class ClimateAnomalyPanel (line 6) | class ClimateAnomalyPanel extends Panel { method constructor (line 10) | constructor() { method setZoneClickHandler (line 21) | public setZoneClickHandler(handler: (lat: number, lon: number) => void... method setAnomalies (line 25) | public setAnomalies(anomalies: ClimateAnomaly[]): void { method renderContent (line 31) | private renderContent(): void { FILE: src/components/CommunityWidget.ts constant DISMISSED_KEY (line 4) | const DISMISSED_KEY = 'wm-community-dismissed-v2'; constant DISCUSSION_URL (line 5) | const DISCUSSION_URL = 'https://discord.gg/re63kWKxaz'; function mountCommunityWidget (line 7) | function mountCommunityWidget(): void { FILE: src/components/CorrelationPanel.ts function getCorrelationBootstrap (line 7) | function getCorrelationBootstrap(): Record | ... constant SCORE_COLORS (line 14) | const SCORE_COLORS = { constant TREND_ICONS (line 21) | const TREND_ICONS: Record = { class CorrelationPanel (line 27) | class CorrelationPanel extends Panel { method constructor (line 34) | constructor(id: string, title: string, domain: CorrelationDomain, info... method destroy (line 55) | override destroy(): void { method setMapNavigateHandler (line 60) | setMapNavigateHandler(handler: (lat: number, lon: number) => void): vo... method requestRender (line 65) | private requestRender(): void { method updateCards (line 76) | updateCards(cards: ConvergenceCard[]): void { method render (line 82) | private render(): void { method buildCard (line 98) | private buildCard(card: ConvergenceCard): HTMLElement { method populateDetail (line 145) | private populateDetail(el: HTMLElement, card: ConvergenceCard): void { FILE: src/components/CountersPanel.ts class CountersPanel (line 20) | class CountersPanel extends Panel { method constructor (line 28) | constructor() { method createCounterGrid (line 48) | private createCounterGrid(): void { method createCounterCard (line 65) | private createCounterCard(metric: CounterMetric): HTMLElement { method startTicking (line 105) | public startTicking(): void { method stopTicking (line 111) | private stopTicking(): void { method destroy (line 146) | public destroy(): void { FILE: src/components/CountryBriefPage.ts type BriefAssetType (line 18) | type BriefAssetType = AssetType | 'port'; class CountryBriefPage (line 20) | class CountryBriefPage implements CountryBriefPanel { method constructor (line 66) | constructor() { method countryFlag (line 166) | private countryFlag(code: string): string { method levelColor (line 170) | private levelColor(level: string): string { method levelBadge (line 181) | private levelBadge(level: string): string { method trendIndicator (line 188) | private trendIndicator(trend: string): string { method scoreRing (line 196) | private scoreRing(score: number, level: string): string { method componentBars (line 215) | private componentBars(components: CountryScore['components']): string { method signalChips (line 235) | private signalChips(signals: CountryBriefSignals): string { method setShareStoryHandler (line 274) | public setShareStoryHandler(handler: (code: string, name: string) => v... method setExportImageHandler (line 278) | public setExportImageHandler(handler: (code: string, name: string) => ... method showLoading (line 282) | public showLoading(): void { method showGeoError (line 307) | public showGeoError(onRetry: () => void): void { method signal (line 357) | public get signal(): AbortSignal { method show (line 361) | public show(country: string, code: string, score: CountryScore | null,... method updateBrief (line 487) | public updateBrief(data: CountryIntelData): void { method updateMarkets (line 508) | public updateMarkets(markets: PredictionMarket[]): void { method updateStock (line 535) | public updateStock(data: StockIndexData): void { method updateNews (line 552) | public updateNews(headlines: NewsItem[]): void { method updateInfrastructure (line 583) | public updateInfrastructure(countryCode: string): void { method getTimelineMount (line 634) | public getTimelineMount(): HTMLElement | null { method getCode (line 638) | public getCode(): string | null { method getName (line 642) | public getName(): string | null { method timeAgo (line 646) | private timeAgo(date: Date): string { method formatBrief (line 654) | private formatBrief(text: string, headlineCount = 0): string { method exportBrief (line 675) | private exportBrief(format: 'json' | 'csv'): void { method exportPdf (line 726) | private exportPdf(): void { method hide (line 766) | public hide(): void { method onClose (line 774) | public onClose(cb: () => void): void { method isVisible (line 778) | public isVisible(): boolean { FILE: src/components/CountryBriefPanel.ts type CountryIntelData (line 6) | interface CountryIntelData { type StockIndexData (line 18) | interface StockIndexData { type ThreatLevel (line 29) | type ThreatLevel = 'critical' | 'high' | 'medium' | 'low' | 'info'; type TrendDirection (line 30) | type TrendDirection = 'up' | 'down' | 'flat'; type CountryDeepDiveSignalItem (line 32) | interface CountryDeepDiveSignalItem { type CountryDeepDiveSignalDetails (line 39) | interface CountryDeepDiveSignalDetails { type CountryDeepDiveBaseSummary (line 47) | interface CountryDeepDiveBaseSummary { type CountryDeepDiveMilitarySummary (line 54) | interface CountryDeepDiveMilitarySummary { type CountryDeepDiveEconomicIndicator (line 62) | interface CountryDeepDiveEconomicIndicator { type CountryFactsData (line 69) | interface CountryFactsData { type CountryBriefPanel (line 82) | interface CountryBriefPanel { FILE: src/components/CountryDeepDivePanel.ts type ThreatLevel (line 26) | type ThreatLevel = 'critical' | 'high' | 'medium' | 'low' | 'info'; type TrendDirection (line 27) | type TrendDirection = 'up' | 'down' | 'flat'; constant INFRA_TYPES (line 29) | const INFRA_TYPES: AssetType[] = ['pipeline', 'cable', 'datacenter', 'ba... constant INFRA_ICONS (line 31) | const INFRA_ICONS: Record = { constant SEVERITY_ORDER (line 39) | const SEVERITY_ORDER: Record = { class CountryDeepDivePanel (line 47) | class CountryDeepDivePanel implements CountryBriefPanel { method constructor (line 110) | constructor(map: MapContainer | null = null) { method setMap (line 131) | public setMap(map: MapContainer | null): void { method setShareStoryHandler (line 135) | public setShareStoryHandler(handler: (code: string, name: string) => v... method setExportImageHandler (line 139) | public setExportImageHandler(handler: (code: string, name: string) => ... method signal (line 143) | public get signal(): AbortSignal { method showLoading (line 147) | public showLoading(): void { method showGeoError (line 154) | public showGeoError(onRetry: () => void): void { method show (line 180) | public show(country: string, code: string, score: CountryScore | null,... method hide (line 191) | public hide(): void { method onClose (line 205) | public onClose(cb: () => void): void { method onStateChange (line 209) | public onStateChange(cb: (state: { visible: boolean; maximized: boolea... method maximize (line 213) | public maximize(): void { method minimize (line 221) | public minimize(): void { method getIsMaximized (line 229) | public getIsMaximized(): boolean { method isVisible (line 233) | public isVisible(): boolean { method getCode (line 237) | public getCode(): string | null { method getName (line 241) | public getName(): string | null { method getTimelineMount (line 245) | public getTimelineMount(): HTMLElement | null { method updateSignalDetails (line 249) | public updateSignalDetails(details: CountryDeepDiveSignalDetails): void { method updateNews (line 255) | public updateNews(headlines: NewsItem[]): void { method updateMilitaryActivity (line 316) | public updateMilitaryActivity(summary: CountryDeepDiveMilitarySummary)... method updateInfrastructure (line 348) | public updateInfrastructure(countryCode: string): void { method updateEconomicIndicators (line 431) | public updateEconomicIndicators(indicators: CountryDeepDiveEconomicInd... method updateCountryFacts (line 436) | public updateCountryFacts(data: CountryFactsData): void { method factItem (line 480) | private factItem(label: string, value: string): HTMLElement { method updateScore (line 487) | public updateScore(score: CountryScore | null, _signals: CountryBriefS... method updateStock (line 511) | public updateStock(data: StockIndexData): void { method updateMarkets (line 533) | public updateMarkets(markets: PredictionMarket[]): void { method updateBrief (line 580) | public updateBrief(data: CountryIntelData): void { method renderLoading (line 607) | private renderLoading(): void { method renderSkeleton (line 619) | private renderSkeleton(country: string, code: string, score: CountrySc... method renderInitialSignals (line 734) | private renderInitialSignals(signals: CountryBriefSignals): void { method addSignalChip (line 786) | private addSignalChip(container: HTMLElement, count: number, label: st... method makeSignalChip (line 791) | private makeSignalChip(text: string, cls: string): HTMLElement { method renderComponentBars (line 795) | private renderComponentBars(components: CountryScore['components']): H... method renderSignalBreakdown (line 824) | private renderSignalBreakdown(details: CountryDeepDiveSignalDetails): ... method renderRecentSignals (line 836) | private renderRecentSignals(items: CountryDeepDiveSignalItem[]): void { method renderEconomicIndicators (line 859) | private renderEconomicIndicators(): void { method highlightInfrastructure (line 886) | private highlightInfrastructure(type: AssetType): void { method open (line 893) | private open(): void { method close (line 903) | private close(): void { method getFocusableElements (line 911) | private getFocusableElements(): HTMLElement[] { method getOrCreatePanel (line 917) | private getOrCreatePanel(): HTMLElement { method sectionCard (line 939) | private sectionCard(title: string): [HTMLElement, HTMLElement] { method metric (line 947) | private metric(label: string, value: string, chipClass: string): HTMLE... method makeLoading (line 956) | private makeLoading(text: string): HTMLElement { method makeEmpty (line 966) | private makeEmpty(text: string): HTMLElement { method badge (line 970) | private badge(text: string, className: string): HTMLElement { method formatBrief (line 974) | private formatBrief(text: string, headlineCount = 0): string { method summarizeBrief (line 995) | private summarizeBrief(brief: string): string { method trendArrow (line 1006) | private trendArrow(trend: CountryScore['trend']): string { method trendArrowFromDirection (line 1012) | private trendArrowFromDirection(trend: TrendDirection): string { method ciiBand (line 1018) | private ciiBand(score: number): 'stable' | 'elevated' | 'high' | 'crit... method decodeEntities (line 1025) | private decodeEntities(text: string): string { method toThreatLevel (line 1036) | private toThreatLevel(level: string | undefined): ThreatLevel { method toTimestamp (line 1043) | private toTimestamp(date: Date | string): number { method shortDate (line 1048) | private shortDate(value: Date | string): string { method formatRelativeTime (line 1054) | private formatRelativeTime(value: Date | string): string { method el (line 1065) | private el(tag: K, className?: ... method toFlagEmoji (line 1072) | public static toFlagEmoji(code: string): string { FILE: src/components/CountryIntelModal.ts type CountryIntelData (line 12) | interface CountryIntelData { type StockIndexData (line 21) | interface StockIndexData { type ActiveSignals (line 32) | interface ActiveSignals { class CountryIntelModal (line 40) | class CountryIntelModal { method constructor (line 50) | constructor() { method countryFlag (line 76) | private countryFlag(code: string): string { method levelBadge (line 80) | private levelBadge(level: string): string { method scoreBar (line 92) | private scoreBar(score: number): string { method showLoading (line 103) | public showLoading(): void { method show (line 122) | public show(country: string, code: string, score: CountryScore | null,... method updateBrief (line 188) | public updateBrief(data: CountryIntelData & { skipped?: boolean; reaso... method updateMarkets (line 216) | public updateMarkets(markets: PredictionMarket[]): void { method updateStock (line 240) | public updateStock(data: StockIndexData): void { method formatBrief (line 257) | private formatBrief(text: string): string { method hide (line 266) | public hide(): void { method onClose (line 273) | public onClose(cb: () => void): void { method isVisible (line 277) | public isVisible(): boolean { FILE: src/components/CountryTimeline.ts type TimelineEvent (line 6) | interface TimelineEvent { constant LANES (line 13) | const LANES: TimelineEvent['lane'][] = ['protest', 'conflict', 'natural'... constant LANE_COLORS (line 15) | const LANE_COLORS: Record = { constant SEVERITY_RADIUS (line 22) | const SEVERITY_RADIUS: Record = { constant MARGIN (line 29) | const MARGIN = { top: 20, right: 20, bottom: 30, left: 80 }; constant HEIGHT (line 30) | const HEIGHT = 200; constant SEVEN_DAYS_MS (line 31) | const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000; class CountryTimeline (line 33) | class CountryTimeline { method constructor (line 41) | constructor(container: HTMLElement) { method createTooltip (line 62) | private createTooltip(): void { method render (line 82) | render(events: TimelineEvent[]): void { method drawGrid (line 122) | private drawGrid( method drawAxes (line 139) | private drawAxes( method drawNowMarker (line 179) | private drawNowMarker( method drawEmptyLaneLabels (line 205) | private drawEmptyLaneLabels( method drawEvents (line 227) | private drawEvents( method destroy (line 272) | destroy(): void { FILE: src/components/CustomWidgetPanel.ts constant ACCENT_COLORS (line 8) | const ACCENT_COLORS: Array = [ class CustomWidgetPanel (line 14) | class CustomWidgetPanel extends Panel { method constructor (line 17) | constructor(spec: CustomWidgetSpec) { method addHeaderButtons (line 29) | private addHeaderButtons(): void { method cycleAccentColor (line 74) | private cycleAccentColor(btn: HTMLElement): void { method renderWidget (line 84) | renderWidget(): void { method applyAccentColor (line 93) | private applyAccentColor(): void { method updateSpec (line 101) | updateSpec(spec: CustomWidgetSpec): void { method getSpec (line 110) | getSpec(): CustomWidgetSpec { FILE: src/components/DailyMarketBriefPanel.ts type BriefSource (line 6) | type BriefSource = 'live' | 'cached'; function formatGeneratedTime (line 8) | function formatGeneratedTime(isoTimestamp: string, timezone: string): st... function stanceLabel (line 22) | function stanceLabel(stance: DailyMarketBrief['items'][number]['stance']... function formatPrice (line 28) | function formatPrice(price: number | null): string { function formatChange (line 33) | function formatChange(change: number | null): string { class DailyMarketBriefPanel (line 39) | class DailyMarketBriefPanel extends Panel { method constructor (line 40) | constructor() { method renderBrief (line 44) | public renderBrief(brief: DailyMarketBrief, source: BriefSource = 'liv... method showUnavailable (line 101) | public showUnavailable(message = 'The daily brief needs live market da... FILE: src/components/DeckGLMap.ts type TimeRange (line 119) | type TimeRange = '1h' | '6h' | '24h' | '48h' | '7d' | 'all'; type DeckMapView (line 120) | type DeckMapView = 'global' | 'america' | 'mena' | 'eu' | 'asia' | 'lata... type MapInteractionMode (line 121) | type MapInteractionMode = 'flat' | '3d'; type CountryClickPayload (line 123) | interface CountryClickPayload { type DeckMapState (line 130) | interface DeckMapState { type HotspotWithBreaking (line 138) | interface HotspotWithBreaking extends Hotspot { type TechEventMarker (line 142) | interface TechEventMarker { constant VIEW_PRESETS (line 156) | const VIEW_PRESETS: Record = { function ensureClosedRing (line 282) | function ensureClosedRing(ring: [number, number][]): [number, number][] { class DeckGLMap (line 290) | class DeckGLMap { method constructor (line 444) | constructor(container: HTMLElement, initialState: DeckMapState) { method startDayNightTimer (line 514) | private startDayNightTimer(): void { method stopDayNightTimer (line 523) | private stopDayNightTimer(): void { method startWeatherRadar (line 531) | private startWeatherRadar(): void { method stopWeatherRadar (line 539) | private stopWeatherRadar(): void { method fetchAndApplyRadar (line 548) | private fetchAndApplyRadar(): void { method applyRadarLayer (line 561) | private applyRadarLayer(): void { method removeRadarLayer (line 583) | private removeRadarLayer(): void { method setupDOM (line 591) | private setupDOM(): void { method initMapLibre (line 613) | private initMapLibre(): void { method initDeck (line 760) | private initDeck(): void { method setIsResizing (line 823) | public setIsResizing(value: boolean): void { method resize (line 835) | public resize(): void { method getSetSignature (line 839) | private getSetSignature(set: Set): string { method hasRecentNews (line 843) | private hasRecentNews(now = Date.now()): boolean { method getTimeRangeMs (line 850) | private getTimeRangeMs(range: TimeRange = this.state.timeRange): number { method parseTime (line 862) | private parseTime(value: Date | string | number | undefined | null): n... method filterByTime (line 868) | private filterByTime( method getFilteredProtests (line 880) | private getFilteredProtests(): SocialUnrestEvent[] { method filterMilitaryFlightClustersByTime (line 884) | private filterMilitaryFlightClustersByTime(clusters: MilitaryFlightClu... method filterMilitaryVesselClustersByTime (line 898) | private filterMilitaryVesselClustersByTime(clusters: MilitaryVesselClu... method rebuildProtestSupercluster (line 912) | private rebuildProtestSupercluster(source: SocialUnrestEvent[] = this.... method rebuildTechHQSupercluster (line 957) | private rebuildTechHQSupercluster(): void { method rebuildTechEventSupercluster (line 991) | private rebuildTechEventSupercluster(): void { method rebuildDatacenterSupercluster (line 1029) | private rebuildDatacenterSupercluster(): void { method updateClusterData (line 1066) | private updateClusterData(): void { method isLayerVisible (line 1259) | private isLayerVisible(layerKey: keyof MapLayers): boolean { method buildLayers (line 1266) | private buildLayers(): LayersList { method createCablesLayer (line 1618) | private createCablesLayer(): PathLayer { method createPipelinesLayer (line 1657) | private createPipelinesLayer(): PathLayer { method buildConflictZoneGeoJson (line 1688) | private buildConflictZoneGeoJson(): GeoJSON.FeatureCollection { method createConflictZonesLayer (line 1724) | private createConflictZonesLayer(): GeoJsonLayer { method getBasesData (line 1746) | private getBasesData(): MilitaryBaseEnriched[] { method getBaseColor (line 1750) | private getBaseColor(type: string, a: number): [number, number, number... method createBasesLayer (line 1763) | private createBasesLayer(): IconLayer { method createBasesClusterLayer (line 1791) | private createBasesClusterLayer(): Layer[] { method createNuclearLayer (line 1823) | private createNuclearLayer(): IconLayer { method createIrradiatorsLayer (line 1852) | private createIrradiatorsLayer(): ScatterplotLayer { method createSpaceportsLayer (line 1865) | private createSpaceportsLayer(): ScatterplotLayer { method createPortsLayer (line 1878) | private createPortsLayer(): ScatterplotLayer { method createFlightDelaysLayer (line 1902) | private createFlightDelaysLayer(delays: AirportDelayAlert[]): Scatterp... method createNotamOverlayLayer (line 1925) | private createNotamOverlayLayer(closures: AirportDelayAlert[]): Scatte... method createAircraftPositionsLayer (line 1941) | private createAircraftPositionsLayer(): IconLayer { method createGhostLayer (line 1963) | private createGhostLayer(id: string, data: T[], getPosition: (d: T)... method createEmptyGhost (line 1976) | private createEmptyGhost(id: string): ScatterplotLayer { method createDatacentersLayer (line 1981) | private createDatacentersLayer(): IconLayer { method createEarthquakesLayer (line 2010) | private createEarthquakesLayer(earthquakes: Earthquake[]): Scatterplot... method windColor (line 2038) | private static windColor(kt: number): [number, number, number, number] { method createNaturalEventsLayers (line 2045) | private createNaturalEventsLayers(events: NaturalEvent[]): Layer[] { method createFiresLayer (line 2159) | private createFiresLayer(): ScatterplotLayer { method createIranEventsLayer (line 2176) | private createIranEventsLayer(): ScatterplotLayer { method createWeatherLayer (line 2189) | private createWeatherLayer(alerts: WeatherAlert[]): ScatterplotLayer { method createOutagesLayer (line 2210) | private createOutagesLayer(outages: InternetOutage[]): ScatterplotLayer { method createCyberThreatsLayer (line 2223) | private createCyberThreatsLayer(): ScatterplotLayer { method createRadiationLayer (line 2253) | private createRadiationLayer(): ScatterplotLayer { method createAisDensityLayer (line 2280) | private createAisDensityLayer(): ScatterplotLayer { method createGpsJammingLayer (line 2302) | private createGpsJammingLayer(): H3HexagonLayer { method createAisDisruptionsLayer (line 2322) | private createAisDisruptionsLayer(): ScatterplotLayer { method createCableAdvisoriesLayer (line 2348) | private createCableAdvisoriesLayer(advisories: CableAdvisory[]): Scatt... method createRepairShipsLayer (line 2370) | private createRepairShipsLayer(): ScatterplotLayer { method createMilitaryVesselsLayer (line 2384) | private createMilitaryVesselsLayer(vessels: MilitaryVessel[]): Scatter... method createMilitaryVesselClustersLayer (line 2406) | private createMilitaryVesselClustersLayer(clusters: MilitaryVesselClus... method createMilitaryFlightsLayer (line 2425) | private createMilitaryFlightsLayer(flights: MilitaryFlight[]): Scatter... method createMilitaryFlightClustersLayer (line 2438) | private createMilitaryFlightClustersLayer(clusters: MilitaryFlightClus... method createWaterwaysLayer (line 2456) | private createWaterwaysLayer(): ScatterplotLayer { method createEconomicCentersLayer (line 2469) | private createEconomicCentersLayer(): ScatterplotLayer { method createStockExchangesLayer (line 2482) | private createStockExchangesLayer(): ScatterplotLayer { method createFinancialCentersLayer (line 2499) | private createFinancialCentersLayer(): ScatterplotLayer { method createCentralBanksLayer (line 2516) | private createCentralBanksLayer(): ScatterplotLayer { method createCommodityHubsLayer (line 2533) | private createCommodityHubsLayer(): ScatterplotLayer { method createAPTGroupsLayer (line 2550) | private createAPTGroupsLayer(): ScatterplotLayer { method createMineralsLayer (line 2566) | private createMineralsLayer(): ScatterplotLayer { method mineralColor (line 2589) | private mineralColor(mineral: string): [number, number, number, number] { method createMiningSitesLayer (line 2608) | private createMiningSitesLayer(): ScatterplotLayer { method createProcessingPlantsLayer (line 2624) | private createProcessingPlantsLayer(): ScatterplotLayer { method createCommodityPortsLayer (line 2648) | private createCommodityPortsLayer(): ScatterplotLayer { method createStartupHubsLayer (line 2665) | private createStartupHubsLayer(): ScatterplotLayer { method createAcceleratorsLayer (line 2678) | private createAcceleratorsLayer(): ScatterplotLayer { method createCloudRegionsLayer (line 2691) | private createCloudRegionsLayer(): ScatterplotLayer { method createProtestClusterLayers (line 2704) | private createProtestClusterLayers(): Layer[] { method createTechHQClusterLayers (line 2768) | private createTechHQClusterLayers(): Layer[] { method createTechEventClusterLayers (line 2829) | private createTechEventClusterLayers(): Layer[] { method createDatacenterClusterLayers (line 2871) | private createDatacenterClusterLayers(): Layer[] { method createHotspotsLayers (line 2913) | private createHotspotsLayers(): Layer[] { method createGulfInvestmentsLayer (line 2975) | private createGulfInvestmentsLayer(): ScatterplotLayer { method canPulse (line 2999) | private canPulse(now = Date.now()): boolean { method hasRecentRiot (line 3003) | private hasRecentRiot(now = Date.now(), windowMs = 2 * 60 * 60 * 1000)... method needsPulseAnimation (line 3017) | private needsPulseAnimation(now = Date.now()): boolean { method syncPulseAnimation (line 3025) | private syncPulseAnimation(now = Date.now()): void { method startPulseAnimation (line 3038) | private startPulseAnimation(): void { method stopPulseAnimation (line 3055) | private stopPulseAnimation(): void { method createNewsLocationsLayer (line 3062) | private createNewsLocationsLayer(): ScatterplotLayer[] { method createPositiveEventsLayers (line 3136) | private createPositiveEventsLayers(): Layer[] { method createKindnessLayers (line 3191) | private createKindnessLayers(): Layer[] { method createHappinessChoroplethLayer (line 3228) | private createHappinessChoroplethLayer(): GeoJsonLayer | null { method createCIIChoroplethLayer (line 3268) | private createCIIChoroplethLayer(): GeoJsonLayer | null { method createSpeciesRecoveryLayer (line 3290) | private createSpeciesRecoveryLayer(): ScatterplotLayer { method createRenewableInstallationsLayer (line 3306) | private createRenewableInstallationsLayer(): ScatterplotLayer { method createImageryFootprintLayer (line 3334) | private createImageryFootprintLayer(): PolygonLayer { method fetchImageryForViewport (line 3352) | private async fetchImageryForViewport(): Promise { method getTooltip (line 3366) | private getTooltip(info: PickingInfo): { html: string } | null { method handleClick (line 3609) | private handleClick(info: PickingInfo): void { method showWebcamClickPopup (line 3883) | private async showWebcamClickPopup(webcam: WebcamEntry, x: number, y: ... method hexToRgba (line 3950) | private hexToRgba(hex: string, alpha: number): [number, number, number... method createControls (line 3964) | private createControls(): void { method createTimeSlider (line 4004) | private createTimeSlider(): void { method updateTimeSliderButtons (line 4028) | private updateTimeSliderButtons(): void { method createLayerToggles (line 4037) | private createLayerToggles(): void { method showLayerHelp (line 4125) | private showLayerHelp(): void { method createLegend (line 4285) | private createLegend(): void { method render (line 4360) | public render(): void { method setRenderPaused (line 4374) | public setRenderPaused(paused: boolean): void { method updateLayers (line 4396) | private updateLayers(): void { method updateZoomHints (line 4410) | private updateZoomHints(): void { method setView (line 4421) | public setView(view: DeckMapView): void { method setZoom (line 4440) | public setZoom(zoom: number): void { method setCenter (line 4447) | public setCenter(lat: number, lon: number, zoom?: number): void { method fitCountry (line 4457) | public fitCountry(code: string): void { method getCenter (line 4468) | public getCenter(): { lat: number; lon: number } | null { method getBbox (line 4476) | public getBbox(): string | null { method setTimeRange (line 4482) | public setTimeRange(range: TimeRange): void { method getTimeRange (line 4490) | public getTimeRange(): TimeRange { method setLayers (line 4494) | public setLayers(layers: MapLayers): void { method getState (line 4508) | public getState(): DeckMapState { method zoomIn (line 4517) | public zoomIn(): void { method zoomOut (line 4523) | public zoomOut(): void { method resetView (line 4529) | private resetView(): void { method createUcdpEventsLayer (line 4533) | private createUcdpEventsLayer(events: UcdpGeoEvent[]): ScatterplotLaye... method createDisplacementArcsLayer (line 4553) | private createDisplacementArcsLayer(): ArcLayer { method createClimateHeatmapLayer (line 4571) | private createClimateHeatmapLayer(): HeatmapLayer { method createTradeRoutesLayer (line 4593) | private createTradeRoutesLayer(): ArcLayer { method createTradeChokepointsLayer (line 4615) | private createTradeChokepointsLayer(): ScatterplotLayer { method computeNightPolygon (line 4644) | private computeNightPolygon(): [number, number][] { method createDayNightLayer (line 4703) | private createDayNightLayer(): PolygonLayer { method setEarthquakes (line 4722) | public setEarthquakes(earthquakes: Earthquake[]): void { method setWeatherAlerts (line 4727) | public setWeatherAlerts(alerts: WeatherAlert[]): void { method setImageryScenes (line 4732) | public setImageryScenes(scenes: ImageryScene[]): void { method setOutages (line 4737) | public setOutages(outages: InternetOutage[]): void { method setCyberThreats (line 4742) | public setCyberThreats(threats: CyberThreat[]): void { method setIranEvents (line 4747) | public setIranEvents(events: IranEvent[]): void { method setAisData (line 4752) | public setAisData(disruptions: AisDisruptionEvent[], density: AisDensi... method setCableActivity (line 4758) | public setCableActivity(advisories: CableAdvisory[], repairShips: Repa... method setCableHealth (line 4764) | public setCableHealth(healthMap: Record): v... method setProtests (line 4770) | public setProtests(events: SocialUnrestEvent[]): void { method setFlightDelays (line 4777) | public setFlightDelays(delays: AirportDelayAlert[]): void { method setAircraftPositions (line 4782) | public setAircraftPositions(positions: PositionSample[]): void { method setMilitaryFlights (line 4787) | public setMilitaryFlights(flights: MilitaryFlight[], clusters: Militar... method setMilitaryVessels (line 4793) | public setMilitaryVessels(vessels: MilitaryVessel[], clusters: Militar... method fetchServerBases (line 4799) | private fetchServerBases(): void { method manageAircraftTimer (line 4819) | private manageAircraftTimer(enabled: boolean): void { method hasAircraftViewportChanged (line 4837) | private hasAircraftViewportChanged(): boolean { method fetchViewportAircraft (line 4849) | private fetchViewportAircraft(): void { method setNaturalEvents (line 4883) | public setNaturalEvents(events: NaturalEvent[]): void { method setFires (line 4888) | public setFires(fires: Array<{ lat: number; lon: number; brightness: n... method setTechEvents (line 4893) | public setTechEvents(events: TechEventMarker[]): void { method setUcdpEvents (line 4899) | public setUcdpEvents(events: UcdpGeoEvent[]): void { method setDisplacementFlows (line 4904) | public setDisplacementFlows(flows: DisplacementFlow[]): void { method setClimateAnomalies (line 4909) | public setClimateAnomalies(anomalies: ClimateAnomaly[]): void { method setRadiationObservations (line 4914) | public setRadiationObservations(observations: RadiationObservation[]):... method setWebcams (line 4919) | public setWebcams(markers: Array): void { method setGpsJamming (line 4924) | public setGpsJamming(hexes: GpsJamHex[]): void { method setNewsLocations (line 4929) | public setNewsLocations(data: Array<{ lat: number; lon: number; title:... method setPositiveEvents (line 4945) | public setPositiveEvents(events: PositiveGeoEvent[]): void { method setKindnessData (line 4951) | public setKindnessData(points: KindnessPoint[]): void { method setHappinessScores (line 4957) | public setHappinessScores(data: HappinessData): void { method setCIIScores (line 4964) | public setCIIScores(scores: Array<{ code: string; score: number; level... method setSpeciesRecoveryZones (line 4970) | public setSpeciesRecoveryZones(species: SpeciesRecovery[]): void { method setRenewableInstallations (line 4978) | public setRenewableInstallations(installations: RenewableInstallation[... method updateHotspotActivity (line 4983) | public updateHotspotActivity(news: NewsItem[]): void { method getRelatedNews (line 5018) | private getRelatedNews(hotspot: Hotspot): NewsItem[] { method updateMilitaryForEscalation (line 5049) | public updateMilitaryForEscalation(flights: MilitaryFlight[], vessels:... method getHotspotDynamicScore (line 5053) | public getHotspotDynamicScore(hotspotId: string) { method getMilitaryFlightClusters (line 5058) | public getMilitaryFlightClusters(): MilitaryFlightCluster[] { method getMilitaryVesselClusters (line 5063) | public getMilitaryVesselClusters(): MilitaryVesselCluster[] { method highlightAssets (line 5067) | public highlightAssets(assets: RelatedAsset[] | null): void { method setOnHotspotClick (line 5082) | public setOnHotspotClick(callback: (hotspot: Hotspot) => void): void { method setOnTimeRangeChange (line 5086) | public setOnTimeRangeChange(callback: (range: TimeRange) => void): void { method setOnLayerChange (line 5090) | public setOnLayerChange(callback: (layer: keyof MapLayers, enabled: bo... method setOnStateChange (line 5094) | public setOnStateChange(callback: (state: DeckMapState) => void): void { method setOnAircraftPositionsUpdate (line 5098) | public setOnAircraftPositionsUpdate(callback: (positions: PositionSamp... method getHotspotLevels (line 5102) | public getHotspotLevels(): Record { method setHotspotLevels (line 5110) | public setHotspotLevels(levels: Record): void { method initEscalationGetters (line 5119) | public initEscalationGetters(): void { method enforceLayerLimit (line 5127) | private enforceLayerLimit(): void { method hideLayerToggle (line 5145) | public hideLayerToggle(layer: keyof MapLayers): void { method setLayerLoading (line 5153) | public setLayerLoading(layer: keyof MapLayers, loading: boolean): void { method setLayerReady (line 5158) | public setLayerReady(layer: keyof MapLayers, hasData: boolean): void { method flashAssets (line 5171) | public flashAssets(assetType: AssetType, ids: string[]): void { method enableLayer (line 5183) | public enableLayer(layer: keyof MapLayers): void { method toggleLayer (line 5195) | public toggleLayer(layer: keyof MapLayers): void { method getContainerCenter (line 5205) | private getContainerCenter(): { x: number; y: number } { method projectToScreen (line 5211) | private projectToScreen(lat: number, lon: number): { x: number; y: num... method triggerHotspotClick (line 5218) | public triggerHotspotClick(id: string): void { method triggerConflictClick (line 5239) | public triggerConflictClick(id: string): void { method triggerBaseClick (line 5249) | public triggerBaseClick(id: string): void { method triggerPipelineClick (line 5258) | public triggerPipelineClick(id: string): void { method triggerCableClick (line 5270) | public triggerCableClick(id: string): void { method triggerDatacenterClick (line 5282) | public triggerDatacenterClick(id: string): void { method triggerNuclearClick (line 5292) | public triggerNuclearClick(id: string): void { method triggerIrradiatorClick (line 5302) | public triggerIrradiatorClick(id: string): void { method flashLocation (line 5312) | public flashLocation(lat: number, lon: number, durationMs = 2000): void { method setOnCountryClick (line 5357) | public setOnCountryClick(cb: (country: CountryClickPayload) => void): ... method setOnMapContextMenu (line 5361) | public setOnMapContextMenu(cb: (payload: { lat: number; lon: number; s... method resolveCountryFromCoordinate (line 5365) | private resolveCountryFromCoordinate(lon: number, lat: number): { code... method loadCountryBoundaries (line 5387) | private loadCountryBoundaries(): void { method setupCountryHover (line 5463) | private setupCountryHover(): void { method getHighlightRestOpacity (line 5513) | private getHighlightRestOpacity(): { fill: number; border: number } { method highlightCountry (line 5518) | public highlightCountry(code: string): void { method clearCountryHighlight (line 5530) | public clearCountryHighlight(): void { method pulseCountryHighlight (line 5545) | private pulseCountryHighlight(): void { method switchBasemap (line 5574) | private switchBasemap(): void { method monitorTileLoading (line 5599) | private monitorTileLoading(mapTheme: string): void { method switchToFallbackStyle (line 5641) | private switchToFallbackStyle(mapTheme: string): void { method reloadBasemap (line 5659) | public reloadBasemap(): void { method updateCountryLayerPaint (line 5667) | private updateCountryLayerPaint(theme: 'dark' | 'light'): void { method destroy (line 5678) | public destroy(): void { FILE: src/components/DeductionPanel.ts constant COOLDOWN_MS (line 12) | const COOLDOWN_MS = 5_000; class DeductionPanel (line 14) | class DeductionPanel extends Panel { method constructor (line 24) | constructor(getLatestNews?: () => NewsItem[]) { method destroy (line 94) | public override destroy(): void { method handleSubmit (line 99) | private async handleSubmit(e: Event) { FILE: src/components/DisasterCorrelationPanel.ts class DisasterCorrelationPanel (line 4) | class DisasterCorrelationPanel extends CorrelationPanel { method constructor (line 5) | constructor() { FILE: src/components/DisplacementPanel.ts type DisplacementTab (line 7) | type DisplacementTab = 'origins' | 'hosts'; class DisplacementPanel (line 9) | class DisplacementPanel extends Panel { method constructor (line 14) | constructor() { method setCountryClickHandler (line 41) | public setCountryClickHandler(handler: (lat: number, lon: number) => v... method setData (line 45) | public setData(data: UnhcrSummary): void { method renderContent (line 51) | private renderContent(): void { FILE: src/components/DownloadBanner.ts type Platform (line 4) | type Platform = 'macos-arm64' | 'macos-x64' | 'macos' | 'windows' | 'lin... function detectPlatform (line 6) | function detectPlatform(): Platform { type DlButton (line 28) | interface DlButton { cls: string; href: string; label: string } function allButtons (line 30) | function allButtons(): DlButton[] { function buttonsForPlatform (line 41) | function buttonsForPlatform(p: Platform): DlButton[] { FILE: src/components/ETFFlowsPanel.ts type ETFFlowsResult (line 9) | type ETFFlowsResult = ListEtfFlowsResponse; function formatVolume (line 11) | function formatVolume(v: number): string { function flowClass (line 18) | function flowClass(direction: string): string { function changeClass (line 24) | function changeClass(val: number): string { class ETFFlowsPanel (line 30) | class ETFFlowsPanel extends Panel { method constructor (line 34) | constructor() { method fetchData (line 38) | public async fetchData(): Promise { method renderPanel (line 63) | private renderPanel(): void { FILE: src/components/EconomicCorrelationPanel.ts class EconomicCorrelationPanel (line 4) | class EconomicCorrelationPanel extends CorrelationPanel { method constructor (line 5) | constructor() { FILE: src/components/EconomicPanel.ts type TabId (line 12) | type TabId = 'indicators' | 'spending' | 'centralBanks'; function formatSeriesValue (line 14) | function formatSeriesValue(series: FredSeries): string { function formatSeriesChange (line 20) | function formatSeriesChange(series: FredSeries): string { function getSeriesChangeClass (line 30) | function getSeriesChangeClass(change: number | null): string { function getMacroPressure (line 35) | function getMacroPressure(data: FredSeries[]): { class EconomicPanel (line 73) | class EconomicPanel extends Panel { method constructor (line 80) | constructor() { method update (line 96) | public update(data: FredSeries[]): void { method updateSpending (line 102) | public updateSpending(data: SpendingSummary): void { method updateBis (line 107) | public updateBis(data: BisData): void { method setLoading (line 112) | public setLoading(loading: boolean): void { method render (line 116) | private render(): void { method getSourceLabel (line 166) | private getSourceLabel(): string { method renderIndicators (line 174) | private renderIndicators(): string { method renderSpending (line 227) | private renderSpending(): string { method renderCentralBanks (line 257) | private renderCentralBanks(): string { FILE: src/components/EnergyComplexPanel.ts function hasAnalytics (line 10) | function hasAnalytics(data: OilAnalytics | null): boolean { class EnergyComplexPanel (line 14) | class EnergyComplexPanel extends Panel { method constructor (line 18) | constructor() { method updateAnalytics (line 27) | public updateAnalytics(data: OilAnalytics): void { method updateTape (line 32) | public updateTape(data: MarketData[]): void { method render (line 37) | private render(): void { FILE: src/components/EscalationCorrelationPanel.ts class EscalationCorrelationPanel (line 4) | class EscalationCorrelationPanel extends CorrelationPanel { method constructor (line 5) | constructor() { FILE: src/components/ForecastPanel.ts constant DOMAINS (line 6) | const DOMAINS = ['all', 'conflict', 'market', 'supply_chain', 'political... constant PANEL_MIN_PROBABILITY (line 7) | const PANEL_MIN_PROBABILITY = 0.1; constant DOMAIN_LABELS (line 9) | const DOMAIN_LABELS: Record = { function injectStyles (line 21) | function injectStyles(): void { class ForecastPanel (line 75) | class ForecastPanel extends Panel { method constructor (line 79) | constructor() { method updateForecasts (line 103) | updateForecasts(forecasts: Forecast[]): void { method getVisibleForecasts (line 111) | private getVisibleForecasts(): Forecast[] { method render (line 115) | private render(): void { method renderCard (line 140) | private renderCard(f: Forecast): string { method renderList (line 192) | private renderList(items: string[] | undefined): string { method renderEvidence (line 197) | private renderEvidence(items: Array<{ summary?: string; weight?: numbe... method renderActors (line 205) | private renderActors(items: Array<{ method renderBranches (line 236) | private renderBranches(items: Array<{ method renderDetail (line 267) | private renderDetail(f: Forecast): string { FILE: src/components/GdeltIntelPanel.ts class GdeltIntelPanel (line 15) | class GdeltIntelPanel extends Panel { method constructor (line 20) | constructor() { method createTabs (line 33) | private createTabs(): void { method selectTopic (line 51) | private selectTopic(topic: IntelTopic): void { method loadActiveTopic (line 68) | private async loadActiveTopic(): Promise { method renderArticles (line 86) | private renderArticles(articles: GdeltArticle[]): void { method buildArticle (line 100) | private buildArticle(article: GdeltArticle): HTMLElement { method refresh (line 119) | public async refresh(): Promise { method refreshAll (line 123) | public async refreshAll(): Promise { FILE: src/components/GeoHubsPanel.ts constant COUNTRY_FLAGS (line 7) | const COUNTRY_FLAGS: Record = { constant TYPE_ICONS (line 17) | const TYPE_ICONS: Record = { constant TYPE_LABELS (line 24) | const TYPE_LABELS: Record = { class GeoHubsPanel (line 31) | class GeoHubsPanel extends Panel { method constructor (line 35) | constructor() { method setOnHubClick (line 49) | public setOnHubClick(handler: (hub: GeoHubActivity) => void): void { method setActivities (line 53) | public setActivities(activities: GeoHubActivity[]): void { method getFlag (line 59) | private getFlag(country: string): string { method getTypeIcon (line 63) | private getTypeIcon(type: string): string { method getTypeLabel (line 67) | private getTypeLabel(type: string): string { method render (line 71) | private render(): void { method setupDelegatedListeners (line 115) | private setupDelegatedListeners(): void { FILE: src/components/GivingPanel.ts type GivingTab (line 7) | type GivingTab = 'platforms' | 'categories' | 'crypto' | 'institutional'; class GivingPanel (line 9) | class GivingPanel extends Panel { method constructor (line 13) | constructor() { method setData (line 24) | public setData(data: GivingSummary): void { method renderContent (line 30) | private renderContent(): void { method renderPlatforms (line 107) | private renderPlatforms(platforms: PlatformGiving[]): string { method renderCategories (line 140) | private renderCategories(categories: CategoryBreakdown[]): string { method renderCrypto (line 172) | private renderCrypto(): string { method renderInstitutional (line 203) | private renderInstitutional(): string { FILE: src/components/GlobeMap.ts constant SAT_COUNTRY_COLORS (line 53) | const SAT_COUNTRY_COLORS: Record = { CN: '#ff2020', RU: ... constant SAT_TYPE_EMOJI (line 54) | const SAT_TYPE_EMOJI: Record = { sar: '\u{1F4E1}', optic... constant SAT_TYPE_LABEL (line 55) | const SAT_TYPE_LABEL: Record = { sar: 'SAR Imaging', opt... constant SAT_OPERATOR_NAME (line 56) | const SAT_OPERATOR_NAME: Record = { CN: 'China', RU: 'Ru... type BaseMarker (line 59) | interface BaseMarker { type ConflictMarker (line 64) | interface ConflictMarker extends BaseMarker { type HotspotMarker (line 71) | interface HotspotMarker extends BaseMarker { type FlightMarker (line 77) | interface FlightMarker extends BaseMarker { type VesselMarker (line 84) | interface VesselMarker extends BaseMarker { type ClusterMarker (line 102) | interface ClusterMarker extends BaseMarker { type WeatherMarker (line 110) | interface WeatherMarker extends BaseMarker { type NaturalMarker (line 116) | interface NaturalMarker extends BaseMarker { type IranMarker (line 122) | interface IranMarker extends BaseMarker { type OutageMarker (line 130) | interface OutageMarker extends BaseMarker { type CyberMarker (line 137) | interface CyberMarker extends BaseMarker { type FireMarker (line 144) | interface FireMarker extends BaseMarker { type ProtestMarker (line 150) | interface ProtestMarker extends BaseMarker { type UcdpMarker (line 157) | interface UcdpMarker extends BaseMarker { type DisplacementMarker (line 165) | interface DisplacementMarker extends BaseMarker { type ClimateMarker (line 172) | interface ClimateMarker extends BaseMarker { type GpsJamMarker (line 180) | interface GpsJamMarker extends BaseMarker { type TechMarker (line 186) | interface TechMarker extends BaseMarker { type ConflictZoneMarker (line 193) | interface ConflictZoneMarker extends BaseMarker { type MilBaseMarker (line 201) | interface MilBaseMarker extends BaseMarker { type NuclearSiteMarker (line 208) | interface NuclearSiteMarker extends BaseMarker { type IrradiatorSiteMarker (line 215) | interface IrradiatorSiteMarker extends BaseMarker { type SpaceportSiteMarker (line 221) | interface SpaceportSiteMarker extends BaseMarker { type EarthquakeMarker (line 229) | interface EarthquakeMarker extends BaseMarker { type RadiationMarker (line 235) | interface RadiationMarker extends BaseMarker { type EconomicMarker (line 256) | interface EconomicMarker extends BaseMarker { type DatacenterMarker (line 264) | interface DatacenterMarker extends BaseMarker { type WaterwayMarker (line 272) | interface WaterwayMarker extends BaseMarker { type MineralMarker (line 278) | interface MineralMarker extends BaseMarker { type FlightDelayMarker (line 286) | interface FlightDelayMarker extends BaseMarker { type NotamRingMarker (line 298) | interface NotamRingMarker extends BaseMarker { type NewsLocationMarker (line 303) | interface NewsLocationMarker extends BaseMarker { type FlashMarker (line 309) | interface FlashMarker extends BaseMarker { type CableAdvisoryMarker (line 313) | interface CableAdvisoryMarker extends BaseMarker { type RepairShipMarker (line 322) | interface RepairShipMarker extends BaseMarker { type AisDisruptionMarker (line 330) | interface AisDisruptionMarker extends BaseMarker { type SatelliteMarker (line 338) | interface SatelliteMarker extends BaseMarker { type SatFootprintMarker (line 348) | interface SatFootprintMarker extends BaseMarker { type ImagerySceneMarker (line 353) | interface ImagerySceneMarker extends BaseMarker { type WebcamMarkerData (line 361) | interface WebcamMarkerData extends BaseMarker { type WebcamClusterData (line 368) | interface WebcamClusterData extends BaseMarker { type GlobePath (line 373) | interface GlobePath { type GlobePolygon (line 382) | interface GlobePolygon { type GlobeMarker (line 399) | type GlobeMarker = type GlobeControlsLike (line 410) | interface GlobeControlsLike { class GlobeMap (line 423) | class GlobeMap { method constructor (line 545) | constructor(container: HTMLElement, initialState: MapContainerState) { method initGlobe (line 560) | private async initGlobe(): Promise { method pulseStyle (line 911) | private pulseStyle(duration: string): string { method wrapHit (line 916) | private static wrapHit(inner: string): string { method buildMarkerElement (line 920) | private buildMarkerElement(d: GlobeMarker): HTMLElement { method handleMarkerClick (line 1196) | private handleMarkerClick(d: GlobeMarker, anchor: HTMLElement): void { method showMarkerTooltip (line 1291) | private showMarkerTooltip(d: GlobeMarker, anchor: HTMLElement): void { method hideTooltip (line 1727) | private hideTooltip(): void { method createControls (line 1736) | private createControls(): void { method zoomInGlobe (line 1755) | private zoomInGlobe(): void { method zoomOutGlobe (line 1763) | private zoomOutGlobe(): void { method createLayerToggles (line 1771) | private createLayerToggles(): void { method flushMarkers (line 1883) | private flushMarkers(): void { method flushMarkersImmediate (line 1902) | private flushMarkersImmediate(): void { method flushArcs (line 1961) | private flushArcs(): void { method flushPaths (line 1968) | private flushPaths(): void { method getReversedRing (line 1993) | private getReversedRing(zoneId: string, countryIso: string, ringIdx: n... method flushPolygons (line 2003) | private flushPolygons(): void { method setCIIScores (line 2064) | public setCIIScores(scores: Array<{ code: string; score: number; level... method setHotspots (line 2069) | public setHotspots(hotspots: Hotspot[]): void { method setConflictZones (line 2081) | private setConflictZones(): void { method initStaticLayers (line 2095) | private initStaticLayers(): void { method setMilitaryFlights (line 2197) | public setMilitaryFlights(flights: MilitaryFlight[]): void { method setMilitaryVessels (line 2262) | public setMilitaryVessels(vessels: MilitaryVessel[], clusters: Militar... method setWeatherAlerts (line 2301) | public setWeatherAlerts(alerts: WeatherAlert[]): void { method setNaturalEvents (line 2315) | public setNaturalEvents(events: NaturalEvent[]): void { method flushLayerChannels (line 2388) | private flushLayerChannels(layer: keyof MapLayers): void { method setLayers (line 2400) | public setLayers(layers: MapLayers): void { method enableLayer (line 2431) | public enableLayer(layer: keyof MapLayers): void { method enforceLayerLimit (line 2444) | private enforceLayerLimit(): void { method setView (line 2472) | public setView(view: MapView): void { method setCenter (line 2480) | public setCenter(lat: number, lon: number, zoom?: number): void { method getCenter (line 2498) | public getCenter(): { lat: number; lon: number } | null { method getBbox (line 2504) | public getBbox(): string | null { method resize (line 2519) | public resize(): void { method getState (line 2527) | public getState(): MapContainerState { method setTimeRange (line 2537) | public setTimeRange(range: TimeRange): void { method getTimeRange (line 2541) | public getTimeRange(): TimeRange { method setOnHotspotClick (line 2547) | public setOnHotspotClick(cb: (h: Hotspot) => void): void { method setOnCountryClick (line 2551) | public setOnCountryClick(_cb: (c: CountryClickPayload) => void): void { method setOnMapContextMenu (line 2555) | public setOnMapContextMenu(cb: (payload: { lat: number; lon: number; s... method render (line 2560) | public render(): void { this.resize(); } method setIsResizing (line 2561) | public setIsResizing(isResizing: boolean): void { method setZoom (line 2565) | public setZoom(_z: number): void {} method setRenderPaused (line 2566) | public setRenderPaused(paused: boolean): void { method updateHotspotActivity (line 2603) | public updateHotspotActivity(_news: any[]): void {} method updateMilitaryForEscalation (line 2604) | public updateMilitaryForEscalation(_f: any[], _v: any[]): void {} method getHotspotDynamicScore (line 2605) | public getHotspotDynamicScore(_id: string) { return undefined; } method getHotspotLevels (line 2606) | public getHotspotLevels() { return {} as Record; } method setHotspotLevels (line 2607) | public setHotspotLevels(_l: Record): void {} method initEscalationGetters (line 2608) | public initEscalationGetters(): void {} method highlightAssets (line 2609) | public highlightAssets(_assets: any): void {} method setOnLayerChange (line 2610) | public setOnLayerChange(cb: (layer: keyof MapLayers, enabled: boolean,... method setOnTimeRangeChange (line 2613) | public setOnTimeRangeChange(_cb: any): void {} method hideLayerToggle (line 2614) | public hideLayerToggle(layer: keyof MapLayers): void { method setLayerLoading (line 2617) | public setLayerLoading(layer: keyof MapLayers, loading: boolean): void { method setLayerReady (line 2620) | public setLayerReady(layer: keyof MapLayers, hasData: boolean): void { method flashAssets (line 2623) | public flashAssets(_type: string, _ids: string[]): void {} method flashLocation (line 2624) | public flashLocation(lat: number, lon: number, durationMs = 2000): void { method triggerHotspotClick (line 2634) | public triggerHotspotClick(_id: string): void {} method triggerConflictClick (line 2635) | public triggerConflictClick(_id: string): void {} method triggerBaseClick (line 2636) | public triggerBaseClick(_id: string): void {} method triggerPipelineClick (line 2637) | public triggerPipelineClick(_id: string): void {} method triggerCableClick (line 2638) | public triggerCableClick(_id: string): void {} method triggerDatacenterClick (line 2639) | public triggerDatacenterClick(_id: string): void {} method triggerNuclearClick (line 2640) | public triggerNuclearClick(_id: string): void {} method triggerIrradiatorClick (line 2641) | public triggerIrradiatorClick(_id: string): void {} method fitCountry (line 2642) | public fitCountry(code: string): void { method highlightCountry (line 2654) | public highlightCountry(_code: string): void {} method clearCountryHighlight (line 2655) | public clearCountryHighlight(): void {} method setEarthquakes (line 2656) | public setEarthquakes(earthquakes: Earthquake[]): void { method setRadiationObservations (line 2670) | public setRadiationObservations(observations: RadiationObservation[]):... method setImageryScenes (line 2697) | public setImageryScenes(scenes: ImageryScene[]): void { method fetchImageryForViewport (line 2741) | private async fetchImageryForViewport(): Promise { method setOutages (line 2766) | public setOutages(outages: InternetOutage[]): void { method setAisData (line 2778) | public setAisData(disruptions: AisDisruptionEvent[], _density: AisDens... method setCableActivity (line 2794) | public setCableActivity(advisories: CableAdvisory[], repairShips: Repa... method setCableHealth (line 2825) | public setCableHealth(_m: any): void {} method setProtests (line 2826) | public setProtests(events: SocialUnrestEvent[]): void { method setFlightDelays (line 2838) | public setFlightDelays(delays: AirportDelayAlert[]): void { method setNewsLocations (line 2866) | public setNewsLocations(data: Array<{ lat: number; lon: number; title:... method setPositiveEvents (line 2879) | public setPositiveEvents(_events: any[]): void {} method setKindnessData (line 2880) | public setKindnessData(_points: any[]): void {} method setHappinessScores (line 2881) | public setHappinessScores(_data: any): void {} method setSpeciesRecoveryZones (line 2882) | public setSpeciesRecoveryZones(_zones: any[]): void {} method setRenewableInstallations (line 2883) | public setRenewableInstallations(_installations: any[]): void {} method setCyberThreats (line 2884) | public setCyberThreats(threats: CyberThreat[]): void { method setIranEvents (line 2896) | public setIranEvents(events: IranEvent[]): void { method setFires (line 2909) | public setFires(fires: Array<{ lat: number; lon: number; brightness: n... method setWebcams (line 2920) | public setWebcams(markers: Array): void { method setUcdpEvents (line 2929) | public setUcdpEvents(events: UcdpGeoEvent[]): void { method setDisplacementFlows (line 2942) | public setDisplacementFlows(flows: DisplacementFlow[]): void { method setClimateAnomalies (line 2956) | public setClimateAnomalies(anomalies: ClimateAnomaly[]): void { method setGpsJamming (line 2969) | public setGpsJamming(hexes: GpsJamHex[]): void { method latLngAltToVec3 (line 2981) | private static latLngAltToVec3(lat: number, lng: number, alt: number, ... method rebuildSatBeams (line 2994) | private async rebuildSatBeams(positions: SatellitePosition[]): Promise... method setSatellites (line 3093) | public setSatellites(positions: SatellitePosition[]): void { method setTechEvents (line 3130) | public setTechEvents(events: Array<{ id: string; title: string; lat: n... method onHotspotClicked (line 3142) | public onHotspotClicked(cb: (h: Hotspot) => void): void { this.onHotsp... method onTimeRangeChanged (line 3143) | public onTimeRangeChanged(_cb: (r: TimeRange) => void): void {} method onStateChanged (line 3144) | public onStateChanged(_cb: (s: MapContainerState) => void): void {} method setOnCountry (line 3145) | public setOnCountry(_cb: any): void {} method getHotspotLevel (line 3146) | public getHotspotLevel(_id: string) { return 'low'; } method applyEnhancedVisuals (line 3148) | private async applyEnhancedVisuals(): Promise { method startExtrasLoop (line 3208) | private startExtrasLoop(): void { method removeEnhancedVisuals (line 3219) | private removeEnhancedVisuals(): void { method applyVisualPreset (line 3247) | private applyVisualPreset(preset: GlobeVisualPreset): void { method applyRenderQuality (line 3259) | private applyRenderQuality(scale?: GlobeRenderScale, width?: number, h... method applyPerformanceProfile (line 3274) | private applyPerformanceProfile(profile: GlobePerformanceProfile): void { method wakeGlobe (line 3312) | private wakeGlobe(): void { method scheduleIdlePause (line 3321) | private scheduleIdlePause(): void { method setupVisibilityHandler (line 3333) | private setupVisibilityHandler(): void { method destroy (line 3356) | public destroy(): void { FILE: src/components/GoodThingsDigestPanel.ts class GoodThingsDigestPanel (line 15) | class GoodThingsDigestPanel extends Panel { method constructor (line 19) | constructor() { method setStories (line 28) | public async setStories(items: NewsItem[]): Promise { method updateCardSummary (line 94) | private updateCardSummary(idx: number, summary: string): void { method destroy (line 106) | public destroy(): void { FILE: src/components/GulfEconomiesPanel.ts function renderSection (line 13) | function renderSection(title: string, quotes: GulfQuote[]): string { class GulfEconomiesPanel (line 31) | class GulfEconomiesPanel extends Panel { method constructor (line 32) | constructor() { method fetchData (line 36) | public async fetchData(): Promise { method renderGulf (line 54) | private renderGulf(data: ListGulfQuotesResponse): void { FILE: src/components/HeroSpotlightPanel.ts class HeroSpotlightPanel (line 13) | class HeroSpotlightPanel extends Panel { method constructor (line 19) | constructor() { method setHeroStory (line 28) | public setHeroStory(item: NewsItem | undefined): void { method destroy (line 83) | public destroy(): void { FILE: src/components/InsightsPanel.ts class InsightsPanel (line 20) | class InsightsPanel extends Panel { method constructor (line 33) | constructor() { method setMilitaryFlights (line 51) | public setMilitaryFlights(flights: MilitaryFlight[]): void { method getTheaterPostureContext (line 55) | private getTheaterPostureContext(): string { method loadBriefFromCache (line 83) | private async loadBriefFromCache(): Promise { method getImportanceScore (line 132) | private getImportanceScore(cluster: ClusteredEvent): number { method selectTopStories (line 203) | private selectTopStories(clusters: ClusteredEvent[], maxCount: number)... method setProgress (line 240) | private setProgress(step: number, total: number, message: string): void { method updateInsights (line 255) | public async updateInsights(clusters: ClusteredEvent[]): Promise { method updateFromServer (line 282) | private async updateFromServer( method updateFromClient (line 340) | private async updateFromClient(clusters: ClusteredEvent[], thisGenerat... method renderInsights (line 482) | private renderInsights( method renderServerInsights (line 509) | private renderServerInsights( method renderServerStories (line 535) | private renderServerStories( method renderServerStats (line 574) | private renderServerStats(insights: ServerInsights): string { method renderWorldBrief (line 593) | private renderWorldBrief(brief: string): string { method renderBreakingStories (line 602) | private renderBreakingStories( method renderSentimentOverview (line 640) | private renderSentimentOverview(sentiments: Array<{ label: string; sco... method renderStats (line 681) | private renderStats(clusters: ClusteredEvent[]): string { method renderMissedStories (line 706) | private renderMissedStories(): string { method renderConvergenceZones (line 740) | private renderConvergenceZones(): string { method renderFocalPoints (line 773) | private renderFocalPoints(): string { method renderDisabledState (line 823) | private renderDisabledState(): void { method onAiFlowChanged (line 833) | private async onAiFlowChanged(): Promise { method destroy (line 856) | public override destroy(): void { FILE: src/components/IntelligenceGapBadge.ts constant LOW_COUNT_THRESHOLD (line 9) | const LOW_COUNT_THRESHOLD = 3; constant MAX_VISIBLE_FINDINGS (line 10) | const MAX_VISIBLE_FINDINGS = 10; constant SORT_TIME_TOLERANCE_MS (line 11) | const SORT_TIME_TOLERANCE_MS = 60000; constant REFRESH_INTERVAL_MS (line 12) | const REFRESH_INTERVAL_MS = 180000; constant ALERT_HOURS (line 13) | const ALERT_HOURS = 6; constant STORAGE_KEY (line 14) | const STORAGE_KEY = 'worldmonitor-intel-findings'; constant POPUP_STORAGE_KEY (line 15) | const POPUP_STORAGE_KEY = 'wm-alert-popup-enabled'; type FindingSource (line 17) | type FindingSource = 'signal' | 'alert'; type UnifiedFinding (line 19) | interface UnifiedFinding { class IntelligenceFindingsBadge (line 31) | class IntelligenceFindingsBadge { method constructor (line 55) | constructor() { method initAudio (line 136) | private initAudio(): void { method playSound (line 141) | private playSound(): void { method setOnSignalClick (line 148) | public setOnSignalClick(handler: (signal: CorrelationSignal) => void):... method setOnAlertClick (line 152) | public setOnAlertClick(handler: (alert: UnifiedAlert) => void): void { method getStoredEnabledState (line 156) | public static getStoredEnabledState(): boolean { method isEnabled (line 160) | public isEnabled(): boolean { method isPopupEnabled (line 164) | public isPopupEnabled(): boolean { method setEnabled (line 168) | public setEnabled(enabled: boolean): void { method showContextMenu (line 193) | private showContextMenu(x: number, y: number): void { method dismissContextMenu (line 215) | private dismissContextMenu(): void { method mount (line 222) | private mount(): void { method startRefresh (line 230) | private startRefresh(): void { method update (line 235) | public update(): void { method mergeFindings (line 274) | private mergeFindings(): UnifiedFinding[] { method priorityToConfidence (line 312) | private priorityToConfidence(priority: string): number { method priorityScore (line 317) | private priorityScore(priority: string): number { method renderPopupToggle (line 322) | private renderPopupToggle(): string { method renderDropdown (line 337) | private renderDropdown(): void { method getInsight (line 407) | private getInsight(finding: UnifiedFinding): string { method getTypeIcon (line 426) | private getTypeIcon(type: string): string { method formatTimeAgo (line 452) | private formatTimeAgo(date: Date): string { method toggleDropdown (line 460) | private toggleDropdown(): void { method closeDropdown (line 469) | private closeDropdown(): void { method showAllFindings (line 475) | private showAllFindings(): void { method destroy (line 548) | public destroy(): void { FILE: src/components/InvestmentsPanel.ts type InvestmentFilters (line 14) | interface InvestmentFilters { function getSectorLabel (line 22) | function getSectorLabel(sector: GulfInvestmentSector): string { constant STATUS_COLORS (line 40) | const STATUS_COLORS: Record = { constant FLAG (line 49) | const FLAG: Record = { function formatUSD (line 54) | function formatUSD(usd?: number): string { class InvestmentsPanel (line 61) | class InvestmentsPanel extends Panel { method constructor (line 74) | constructor(onInvestmentClick?: (inv: GulfInvestment) => void) { method getFiltered (line 86) | private getFiltered(): GulfInvestment[] { method render (line 111) | private render(): void { method setupEventDelegation (line 197) | private setupEventDelegation(): void { FILE: src/components/LiveNewsPanel.ts type YouTubePlayer (line 13) | type YouTubePlayer = { type YouTubePlayerConstructor (line 26) | type YouTubePlayerConstructor = new ( type YouTubeNamespace (line 39) | type YouTubeNamespace = { type Window (line 44) | interface Window { type LiveChannel (line 50) | interface LiveChannel { constant FULL_LIVE_CHANNELS (line 64) | const FULL_LIVE_CHANNELS: LiveChannel[] = [ constant TECH_LIVE_CHANNELS (line 77) | const TECH_LIVE_CHANNELS: LiveChannel[] = [ constant OPTIONAL_LIVE_CHANNELS (line 86) | const OPTIONAL_LIVE_CHANNELS: LiveChannel[] = [ constant OPTIONAL_CHANNEL_REGIONS (line 199) | const OPTIONAL_CHANNEL_REGIONS: { key: string; labelKey: string; channel... constant DEFAULT_LIVE_CHANNELS (line 203) | const DEFAULT_LIVE_CHANNELS = SITE_VARIANT === 'tech' ? TECH_LIVE_CHANNE... function getDefaultLiveChannels (line 206) | function getDefaultLiveChannels(): LiveChannel[] { function getFilteredOptionalChannels (line 211) | function getFilteredOptionalChannels(userCountry: string | null): LiveCh... function getFilteredChannelRegions (line 218) | function getFilteredChannelRegions(userCountry: string | null): typeof O... type StoredLiveChannels (line 228) | interface StoredLiveChannels { constant DEFAULT_STORED (line 235) | const DEFAULT_STORED: StoredLiveChannels = { constant DIRECT_HLS_MAP (line 239) | const DIRECT_HLS_MAP: Readonly> = { type ProxiedHlsEntry (line 294) | interface ProxiedHlsEntry { url: string; referer: string; } constant PROXIED_HLS_MAP (line 295) | const PROXIED_HLS_MAP: Readonly> = { constant IDLE_ACTIVITY_EVENTS (line 299) | const IDLE_ACTIVITY_EVENTS = ['mousedown', 'keydown', 'scroll', 'touchst... constant BUILTIN_IDS (line 312) | const BUILTIN_IDS = new Set([ function loadChannelsFromStorage (line 318) | function loadChannelsFromStorage(): LiveChannel[] { function saveChannelsToStorage (line 341) | function saveChannelsToStorage(channels: LiveChannel[]): void { class LiveNewsPanel (line 355) | class LiveNewsPanel extends Panel { method constructor (line 409) | constructor() { method renderPlaceholder (line 434) | private renderPlaceholder(): void { method setupLazyInit (line 458) | private setupLazyInit(): void { method triggerInit (line 479) | private triggerInit(): void { method saveChannels (line 491) | private saveChannels(): void { method getDirectHlsUrl (line 495) | private getDirectHlsUrl(channelId: string): string | undefined { method getProxiedHlsUrl (line 503) | private getProxiedHlsUrl(channelId: string): string | undefined { method embedOrigin (line 512) | private get embedOrigin(): string { method setupBridgeMessageListener (line 517) | private setupBridgeMessageListener(): void { method resolveYouTubeOrigin (line 550) | private static resolveYouTubeOrigin(): string | null { method applyIdleMode (line 575) | private applyIdleMode(): void { method setupIdleDetection (line 603) | private setupIdleDetection(): void { method pauseForIdle (line 627) | private pauseForIdle(): void { method stopMuteSyncPolling (line 636) | private stopMuteSyncPolling(): void { method startMuteSyncPolling (line 643) | private startMuteSyncPolling(): void { method syncMuteStateFromPlayer (line 648) | private syncMuteStateFromPlayer(): void { method destroyPlayer (line 660) | private destroyPlayer(): void { method resumeFromIdle (line 695) | private resumeFromIdle(): void { method createLiveButton (line 703) | private createLiveButton(): void { method updateLiveIndicator (line 714) | private updateLiveIndicator(): void { method togglePlayback (line 721) | private togglePlayback(): void { method createMuteButton (line 733) | private createMuteButton(): void { method createFullscreenButton (line 750) | private createFullscreenButton(): void { method toggleFullscreen (line 763) | private toggleFullscreen(): void { method updateMuteIcon (line 780) | private updateMuteIcon(): void { method toggleMute (line 788) | private toggleMute(): void { method getChannelDisplayName (line 794) | private getChannelDisplayName(channel: LiveChannel): string { method createChannelButton (line 799) | private createChannelButton(channel: LiveChannel): HTMLButtonElement { method createChannelSwitcher (line 819) | private createChannelSwitcher(): void { method createManageButton (line 885) | private createManageButton(toolbar: HTMLElement): void { method openChannelManagementModal (line 898) | private openChannelManagementModal(): void { method refreshChannelSwitcher (line 943) | private refreshChannelSwitcher(): void { method applyChannelOrderFromDom (line 951) | private applyChannelOrderFromDom(): void { method resolveChannelVideo (line 961) | private async resolveChannelVideo(channel: LiveChannel, forceFallback ... method switchChannel (line 989) | private async switchChannel(channel: LiveChannel): Promise { method showOfflineMessage (line 1038) | private showOfflineMessage(channel: LiveChannel): void { method showEmbedError (line 1050) | private showEmbedError(channel: LiveChannel, errorCode: number): void { method renderPlayer (line 1068) | private renderPlayer(): void { method ensurePlayerContainer (line 1073) | private ensurePlayerContainer(): void { method postToEmbed (line 1090) | private postToEmbed(msg: Record): void { method syncDesktopEmbedState (line 1095) | private syncDesktopEmbedState(): void { method renderDesktopEmbed (line 1100) | private renderDesktopEmbed(force = false): void { method renderDesktopEmbedAsync (line 1105) | private async renderDesktopEmbedAsync(force = false): Promise { method renderNativeHlsPlayer (line 1170) | private renderNativeHlsPlayer(): void { method syncNativeVideoState (line 1247) | private syncNativeVideoState(): void { method loadYouTubeApi (line 1257) | private static loadYouTubeApi(): Promise { method initializePlayer (line 1305) | private async initializePlayer(): Promise { method startBotCheckTimeout (line 1431) | private startBotCheckTimeout(): void { method clearBotCheckTimeout (line 1441) | private clearBotCheckTimeout(): void { method showBotCheckPrompt (line 1448) | private showBotCheckPrompt(): void { method openYouTubeSignIn (line 1502) | private async openYouTubeSignIn(): Promise { method syncPlayerState (line 1516) | private syncPlayerState(): void { method refresh (line 1593) | public refresh(): void { method refreshChannelsFromStorage (line 1598) | public refreshChannelsFromStorage(): void { method destroy (line 1608) | public destroy(): void { FILE: src/components/LiveWebcamsPanel.ts type WebcamRegion (line 11) | type WebcamRegion = 'iran' | 'middle-east' | 'europe' | 'asia' | 'americ... type WebcamFeed (line 13) | interface WebcamFeed { constant WEBCAM_FEEDS (line 24) | const WEBCAM_FEEDS: WebcamFeed[] = [ constant MAX_GRID_CELLS (line 60) | const MAX_GRID_CELLS = 4; constant ECO_IDLE_PAUSE_MS (line 63) | const ECO_IDLE_PAUSE_MS = IDLE_PAUSE_MS; constant IDLE_ACTIVITY_EVENTS (line 64) | const IDLE_ACTIVITY_EVENTS = ['mousedown', 'keydown', 'scroll', 'touchst... type ViewMode (line 66) | type ViewMode = 'grid' | 'single'; type RegionFilter (line 67) | type RegionFilter = 'all' | WebcamRegion; constant ALL_REGIONS (line 69) | const ALL_REGIONS: RegionFilter[] = ['all', 'iran', 'middle-east', 'euro... type WebcamPrefs (line 71) | interface WebcamPrefs { function loadWebcamPrefs (line 77) | function loadWebcamPrefs(forceSingleView: boolean): WebcamPrefs { function saveWebcamPrefs (line 90) | function saveWebcamPrefs(prefs: WebcamPrefs): void { type WebcamIframeTracker (line 94) | interface WebcamIframeTracker { class LiveWebcamsPanel (line 101) | class LiveWebcamsPanel extends Panel { method constructor (line 126) | constructor() { method createFullscreenButton (line 150) | private createFullscreenButton(): void { method toggleFullscreen (line 163) | private toggleFullscreen(): void { method savePrefs (line 179) | private savePrefs(): void { method filteredFeeds (line 187) | private get filteredFeeds(): WebcamFeed[] { method gridFeeds (line 194) | private get gridFeeds(): WebcamFeed[] { method createToolbar (line 203) | private createToolbar(): void { method setRegionFilter (line 260) | private setRegionFilter(filter: RegionFilter): void { method setViewMode (line 275) | private setViewMode(mode: ViewMode): void { method buildEmbedUrl (line 286) | private buildEmbedUrl(videoId: string): string { method createIframe (line 299) | private createIframe(feed: WebcamFeed): HTMLIFrameElement { method findIframeBySource (line 313) | private findIframeBySource(source: MessageEventSource | null): HTMLIFr... method clearIframeTimeout (line 321) | private clearIframeTimeout(iframe: HTMLIFrameElement): void { method markIframeBlocked (line 328) | private markIframeBlocked(iframe: HTMLIFrameElement): void { method markIframeReady (line 336) | private markIframeReady(iframe: HTMLIFrameElement): void { method trackIframe (line 344) | private trackIframe(iframe: HTMLIFrameElement, feed: WebcamFeed, conta... method retryIframe (line 361) | private retryIframe(oldIframe: HTMLIFrameElement): void { method renderBlockedOverlay (line 382) | private renderBlockedOverlay(iframe: HTMLIFrameElement, feed: WebcamFe... method handleEmbedMessage (line 417) | private handleEmbedMessage(e: MessageEvent): void { method render (line 456) | private render(): void { method renderGrid (line 471) | private renderGrid(): void { method renderSingle (line 540) | private renderSingle(): void { method destroyIframes (line 580) | private destroyIframes(): void { method setupIntersectionObserver (line 596) | private setupIntersectionObserver(): void { method applyIdleMode (line 612) | private applyIdleMode(): void { method setupIdleDetection (line 641) | private setupIdleDetection(): void { method refresh (line 678) | public refresh(): void { method destroy (line 684) | public destroy(): void { FILE: src/components/LlmStatusIndicator.ts constant POLL_INTERVAL_MS (line 6) | const POLL_INTERVAL_MS = 60_000; type LlmHealthResponse (line 8) | interface LlmHealthResponse { class LlmStatusIndicator (line 14) | class LlmStatusIndicator { method constructor (line 20) | constructor() { method poll (line 37) | private async poll(): Promise { method setStatus (line 72) | private setStatus(available: boolean, labelText: string, tooltip: stri... method getElement (line 78) | public getElement(): HTMLElement { method destroy (line 82) | public destroy(): void { FILE: src/components/MacroSignalsPanel.ts type MacroSignalData (line 9) | interface MacroSignalData { function mapProtoToData (line 30) | function mapProtoToData(r: GetMacroSignalsResponse): MacroSignalData { function sparklineSvg (line 80) | function sparklineSvg(data: number[], width = 80, height = 24, color = '... function donutGaugeSvg (line 93) | function donutGaugeSvg(value: number | null, size = 48): string { function fgSparklineColor (line 110) | function fgSparklineColor(status: string): string { function statusBadgeClass (line 117) | function statusBadgeClass(status: string): string { function formatNum (line 124) | function formatNum(v: number | null, suffix = '%'): string { class MacroSignalsPanel (line 130) | class MacroSignalsPanel extends Panel { method constructor (line 136) | constructor() { method fetchData (line 140) | public async fetchData(): Promise { method renderPanel (line 171) | private renderPanel(): void { method renderSignalCard (line 214) | private renderSignalCard(name: string, status: string, value: string, ... method renderFearGreedCard (line 231) | private renderFearGreedCard(fg: MacroSignalData['signals']['fearGreed'... FILE: src/components/Map.ts type TimeRange (line 65) | type TimeRange = '1h' | '6h' | '24h' | '48h' | '7d' | 'all'; type MapView (line 66) | type MapView = 'global' | 'america' | 'mena' | 'eu' | 'asia' | 'latam' |... type MapState (line 68) | interface MapState { type HotspotWithBreaking (line 76) | interface HotspotWithBreaking extends Hotspot { type TechEventMarker (line 80) | interface TechEventMarker { type WorldTopology (line 93) | interface WorldTopology extends Topology { class MapComponent (line 99) | class MapComponent { method constructor (line 174) | constructor(container: HTMLElement, initialState: MapState) { method setupResizeObserver (line 228) | private setupResizeObserver(): void { method setIsResizing (line 253) | public setIsResizing(value: boolean): void { method resize (line 261) | public resize(): void { method destroy (line 265) | public destroy(): void { method createControls (line 278) | private createControls(): HTMLElement { method createTimeSlider (line 298) | private createTimeSlider(): HTMLElement { method updateTimeSliderButtons (line 337) | private updateTimeSliderButtons(): void { method setTimeRange (line 346) | public setTimeRange(range: TimeRange): void { method getTimeRangeMs (line 353) | private getTimeRangeMs(): number { method createLayerToggles (line 367) | private createLayerToggles(): HTMLElement { method showLayerHelp (line 488) | private showLayerHelp(): void { method syncLayerButtons (line 642) | private syncLayerButtons(): void { method createLegend (line 650) | private createLegend(): HTMLElement { method runHealthCheck (line 682) | private runHealthCheck(): void { method setupZoomHandlers (line 702) | private setupZoomHandlers(): void { method loadMapData (line 917) | private async loadMapData(): Promise { method initClusterRenderer (line 937) | private initClusterRenderer(): void { method clearClusterCanvas (line 944) | private clearClusterCanvas(): void { method renderClusterLayer (line 950) | private renderClusterLayer(_projection: d3.GeoProjection): void { method scheduleRender (line 957) | public scheduleRender(): void { method render (line 966) | public render(): void { method renderGrid (line 1106) | private renderGrid( method getProjection (line 1137) | private getProjection(width: number, height: number): d3.GeoProjection { method renderGraticule (line 1157) | private renderGraticule( method renderCountries (line 1172) | private renderCountries( method renderCables (line 1190) | private renderCables(projection: d3.GeoProjection): void { method renderPipelines (line 1228) | private renderPipelines(projection: d3.GeoProjection): void { method renderConflicts (line 1274) | private renderConflicts(projection: d3.GeoProjection): void { method updateCountryFills (line 1294) | private updateCountryFills(): void { method clusterMarkers (line 1325) | private clusterMarkers( method renderOverlays (line 1390) | private renderOverlays(projection: d3.GeoProjection): void { method makeWebcamTooltipShell (line 2866) | private makeWebcamTooltipShell(): { tooltip: HTMLDivElement; closeBtn:... method placeWebcamTooltip (line 2893) | private placeWebcamTooltip(tooltip: HTMLElement, clientX: number, clie... method showWebcamTooltip (line 2905) | private showWebcamTooltip(cam: WebcamEntry, clientX: number, clientY: ... method showWebcamClusterPopup (line 2989) | private showWebcamClusterPopup(cam: WebcamCluster, clientX: number, cl... method renderWaterways (line 3040) | private renderWaterways(projection: d3.GeoProjection): void { method renderAisDisruptions (line 3070) | private renderAisDisruptions(projection: d3.GeoProjection): void { method renderAisDensity (line 3105) | private renderAisDensity(projection: d3.GeoProjection): void { method renderPorts (line 3131) | private renderPorts(projection: d3.GeoProjection): void { method renderAPTMarkers (line 3166) | private renderAPTMarkers(projection: d3.GeoProjection): void { method getRelatedNews (line 3195) | private getRelatedNews(hotspot: Hotspot): NewsItem[] { method updateHotspotActivity (line 3226) | public updateHotspotActivity(news: NewsItem[]): void { method flashLocation (line 3287) | public flashLocation(lat: number, lon: number, durationMs = 2000): void { method initEscalationGetters (line 3308) | public initEscalationGetters(): void { method updateMilitaryForEscalation (line 3313) | public updateMilitaryForEscalation(flights: MilitaryFlight[], vessels:... method getHotspotDynamicScore (line 3317) | public getHotspotDynamicScore(hotspotId: string) { method setView (line 3321) | public setView(view: MapView): void { method toggleLayer (line 3348) | public toggleLayer(layer: keyof MapLayers, source: 'user' | 'programma... method setOnLayerChange (line 3381) | public setOnLayerChange(callback: (layer: keyof MapLayers, enabled: bo... method hideLayerToggle (line 3385) | public hideLayerToggle(layer: keyof MapLayers): void { method setLayerLoading (line 3392) | public setLayerLoading(layer: keyof MapLayers, loading: boolean): void { method setLayerReady (line 3399) | public setLayerReady(layer: keyof MapLayers, hasData: boolean): void { method onStateChanged (line 3411) | public onStateChanged(callback: (state: MapState) => void): void { method zoomIn (line 3415) | public zoomIn(): void { method zoomOut (line 3420) | public zoomOut(): void { method reset (line 3425) | public reset(): void { method triggerHotspotClick (line 3436) | public triggerHotspotClick(id: string): void { method triggerConflictClick (line 3458) | public triggerConflictClick(id: string): void { method triggerBaseClick (line 3476) | public triggerBaseClick(id: string): void { method triggerPipelineClick (line 3494) | public triggerPipelineClick(id: string): void { method triggerCableClick (line 3513) | public triggerCableClick(id: string): void { method triggerDatacenterClick (line 3532) | public triggerDatacenterClick(id: string): void { method triggerNuclearClick (line 3550) | public triggerNuclearClick(id: string): void { method triggerIrradiatorClick (line 3568) | public triggerIrradiatorClick(id: string): void { method enableLayer (line 3586) | public enableLayer(layer: keyof MapLayers): void { method highlightAssets (line 3602) | public highlightAssets(assets: RelatedAsset[] | null): void { method clampPan (line 3618) | private clampPan(): void { method applyTransform (line 3632) | private applyTransform(): void { method updateZoomLayerVisibility (line 3662) | private updateZoomLayerVisibility(): void { method emitStateChange (line 3694) | private emitStateChange(): void { method updateLabelVisibility (line 3698) | private updateLabelVisibility(zoom: number): void { method onHotspotClicked (line 3754) | public onHotspotClicked(callback: (hotspot: Hotspot) => void): void { method onTimeRangeChanged (line 3758) | public onTimeRangeChanged(callback: (range: TimeRange) => void): void { method setOnCountryClick (line 3762) | public setOnCountryClick(cb: (country: CountryClickPayload) => void): ... method fitCountry (line 3766) | public fitCountry(code: string): void { method getState (line 3791) | public getState(): MapState { method getCenter (line 3795) | public getCenter(): { lat: number; lon: number } | null { method getTimeRange (line 3808) | public getTimeRange(): TimeRange { method setZoom (line 3812) | public setZoom(zoom: number): void { method ensureBaseLayerIntact (line 3819) | private ensureBaseLayerIntact(): void { method setCenter (line 3842) | public setCenter(lat: number, lon: number): void { method setLayers (line 3864) | public setLayers(layers: MapLayers): void { method setEarthquakes (line 3870) | public setEarthquakes(earthquakes: Earthquake[]): void { method setWeatherAlerts (line 3880) | public setWeatherAlerts(alerts: WeatherAlert[]): void { method setRadiationObservations (line 3885) | public setRadiationObservations(observations: RadiationObservation[]):... method setOutages (line 3890) | public setOutages(outages: InternetOutage[]): void { method setAisData (line 3895) | public setAisData(disruptions: AisDisruptionEvent[], density: AisDensi... method setCableActivity (line 3901) | public setCableActivity(advisories: CableAdvisory[], repairShips: Repa... method setCableHealth (line 3908) | public setCableHealth(healthMap: Record): v... method setProtests (line 3913) | public setProtests(events: SocialUnrestEvent[]): void { method setFlightDelays (line 3918) | public setFlightDelays(delays: AirportDelayAlert[]): void { method setAircraftPositions (line 3923) | public setAircraftPositions(positions: PositionSample[]): void { method setMilitaryFlights (line 3928) | public setMilitaryFlights(flights: MilitaryFlight[], clusters: Militar... method setMilitaryVessels (line 3934) | public setMilitaryVessels(vessels: MilitaryVessel[], clusters: Militar... method setNaturalEvents (line 3940) | public setNaturalEvents(events: NaturalEvent[]): void { method setFires (line 3945) | public setFires(fires: Array<{ lat: number; lon: number; brightness: n... method setWebcams (line 3950) | public setWebcams(markers: Array): void { method setTechEvents (line 3955) | public setTechEvents(events: TechEventMarker[]): void { method setCyberThreats (line 3960) | public setCyberThreats(_threats: CyberThreat[]): void { method setIranEvents (line 3964) | public setIranEvents(events: IranEvent[]): void { method setNewsLocations (line 3969) | public setNewsLocations(_data: Array<{ lat: number; lon: number; title... method setTechActivity (line 3974) | public setTechActivity(activities: TechHubActivity[]): void { method setOnTechHubClick (line 3979) | public setOnTechHubClick(handler: (hub: TechHubActivity) => void): void { method setGeoActivity (line 3983) | public setGeoActivity(activities: GeoHubActivity[]): void { method setOnGeoHubClick (line 3988) | public setOnGeoHubClick(handler: (hub: GeoHubActivity) => void): void { method getCableAdvisory (line 3992) | private getCableAdvisory(cableId: string): CableAdvisory | undefined { method getCableName (line 4000) | private getCableName(cableId: string): string { method getHotspotLevels (line 4004) | public getHotspotLevels(): Record { method setHotspotLevels (line 4012) | public setHotspotLevels(levels: Record): void { FILE: src/components/MapContainer.ts type TimeRange (line 48) | type TimeRange = '1h' | '6h' | '24h' | '48h' | '7d' | 'all'; type MapView (line 49) | type MapView = 'global' | 'america' | 'mena' | 'eu' | 'asia' | 'latam' |... type MapContainerState (line 51) | interface MapContainerState { type TechEventMarker (line 59) | interface TechEventMarker { type FireMarker (line 72) | type FireMarker = { lat: number; lon: number; brightness: number; frp: n... type NewsLocationMarker (line 73) | type NewsLocationMarker = { lat: number; lon: number; title: string; thr... type CIIScore (line 74) | type CIIScore = { code: string; score: number; level: string }; class MapContainer (line 80) | class MapContainer { method constructor (line 141) | constructor(container: HTMLElement, initialState: MapContainerState, p... method hasWebGLSupport (line 153) | private hasWebGLSupport(): boolean { method shouldUseDeckGL (line 166) | private shouldUseDeckGL(): boolean { method initSvgMap (line 174) | private initSvgMap(logMessage: string): void { method init (line 186) | private init(): void { method switchToGlobe (line 218) | public switchToGlobe(): void { method reloadBasemap (line 233) | public reloadBasemap(): void { method switchToFlat (line 238) | public switchToFlat(): void { method restoreViewport (line 253) | private restoreViewport(snapshot: MapContainerState, center: { lat: nu... method rehydrateActiveMap (line 260) | private rehydrateActiveMap(): void { method isGlobeMode (line 310) | public isGlobeMode(): boolean { method destroyFlatMap (line 314) | private destroyFlatMap(): void { method render (line 325) | public render(): void { method resize (line 330) | public resize(): void { method setIsResizing (line 342) | public setIsResizing(isResizing: boolean): void { method setView (line 348) | public setView(view: MapView): void { method setZoom (line 353) | public setZoom(zoom: number): void { method setCenter (line 358) | public setCenter(lat: number, lon: number, zoom?: number): void { method getCenter (line 368) | public getCenter(): { lat: number; lon: number } | null { method setTimeRange (line 374) | public setTimeRange(range: TimeRange): void { method getTimeRange (line 379) | public getTimeRange(): TimeRange { method setLayers (line 385) | public setLayers(layers: MapLayers): void { method getState (line 390) | public getState(): MapContainerState { method setEarthquakes (line 401) | public setEarthquakes(earthquakes: Earthquake[]): void { method setImageryScenes (line 407) | public setImageryScenes(scenes: ImageryScene[]): void { method setWebcams (line 413) | public setWebcams(markers: Array): void { method setWeatherAlerts (line 420) | public setWeatherAlerts(alerts: WeatherAlert[]): void { method setOutages (line 426) | public setOutages(outages: InternetOutage[]): void { method setAisData (line 432) | public setAisData(disruptions: AisDisruptionEvent[], density: AisDensi... method setCableActivity (line 443) | public setCableActivity(advisories: CableAdvisory[], repairShips: Repa... method setCableHealth (line 454) | public setCableHealth(healthMap: Record): v... method setProtests (line 464) | public setProtests(events: SocialUnrestEvent[]): void { method setFlightDelays (line 474) | public setFlightDelays(delays: AirportDelayAlert[]): void { method setAircraftPositions (line 484) | public setAircraftPositions(positions: PositionSample[]): void { method setMilitaryFlights (line 493) | public setMilitaryFlights(flights: MilitaryFlight[], clusters: Militar... method setMilitaryVessels (line 500) | public setMilitaryVessels(vessels: MilitaryVessel[], clusters: Militar... method setNaturalEvents (line 507) | public setNaturalEvents(events: NaturalEvent[]): void { method setFires (line 513) | public setFires(fires: FireMarker[]): void { method setTechEvents (line 523) | public setTechEvents(events: TechEventMarker[]): void { method setUcdpEvents (line 533) | public setUcdpEvents(events: UcdpGeoEvent[]): void { method setDisplacementFlows (line 541) | public setDisplacementFlows(flows: DisplacementFlow[]): void { method setClimateAnomalies (line 549) | public setClimateAnomalies(anomalies: ClimateAnomaly[]): void { method setRadiationObservations (line 557) | public setRadiationObservations(observations: RadiationObservation[]):... method setGpsJamming (line 567) | public setGpsJamming(hexes: GpsJamHex[]): void { method setSatellites (line 575) | public setSatellites(positions: SatellitePosition[]): void { method setCyberThreats (line 580) | public setCyberThreats(threats: CyberThreat[]): void { method setIranEvents (line 590) | public setIranEvents(events: IranEvent[]): void { method setNewsLocations (line 600) | public setNewsLocations(data: NewsLocationMarker[]): void { method setPositiveEvents (line 610) | public setPositiveEvents(events: PositiveGeoEvent[]): void { method setKindnessData (line 619) | public setKindnessData(points: KindnessPoint[]): void { method setHappinessScores (line 628) | public setHappinessScores(data: HappinessData): void { method setCIIScores (line 637) | public setCIIScores(scores: CIIScore[]): void { method setSpeciesRecoveryZones (line 643) | public setSpeciesRecoveryZones(species: SpeciesRecovery[]): void { method setRenewableInstallations (line 652) | public setRenewableInstallations(installations: RenewableInstallation[... method updateHotspotActivity (line 661) | public updateHotspotActivity(news: NewsItem[]): void { method updateMilitaryForEscalation (line 670) | public updateMilitaryForEscalation(flights: MilitaryFlight[], vessels:... method getHotspotDynamicScore (line 680) | public getHotspotDynamicScore(hotspotId: string) { method highlightAssets (line 687) | public highlightAssets(assets: RelatedAsset[] | null): void { method onHotspotClicked (line 697) | public onHotspotClicked(callback: (hotspot: Hotspot) => void): void { method onTimeRangeChanged (line 703) | public onTimeRangeChanged(callback: (range: TimeRange) => void): void { method setOnLayerChange (line 709) | public setOnLayerChange(callback: (layer: keyof MapLayers, enabled: bo... method setOnAircraftPositionsUpdate (line 715) | public setOnAircraftPositionsUpdate(callback: (positions: PositionSamp... method getBbox (line 722) | public getBbox(): string | null { method onStateChanged (line 728) | public onStateChanged(callback: (state: MapContainerState) => void): v... method getHotspotLevels (line 740) | public getHotspotLevels(): Record { method setHotspotLevels (line 747) | public setHotspotLevels(levels: Record): void { method initEscalationGetters (line 755) | public initEscalationGetters(): void { method hideLayerToggle (line 764) | public hideLayerToggle(layer: keyof MapLayers): void { method setLayerLoading (line 773) | public setLayerLoading(layer: keyof MapLayers, loading: boolean): void { method setLayerReady (line 782) | public setLayerReady(layer: keyof MapLayers, hasData: boolean): void { method flashAssets (line 791) | public flashAssets(assetType: AssetType, ids: string[]): void { method enableLayer (line 799) | public enableLayer(layer: keyof MapLayers): void { method triggerHotspotClick (line 808) | public triggerHotspotClick(id: string): void { method triggerConflictClick (line 816) | public triggerConflictClick(id: string): void { method triggerBaseClick (line 824) | public triggerBaseClick(id: string): void { method triggerPipelineClick (line 832) | public triggerPipelineClick(id: string): void { method triggerCableClick (line 840) | public triggerCableClick(id: string): void { method triggerDatacenterClick (line 848) | public triggerDatacenterClick(id: string): void { method triggerNuclearClick (line 856) | public triggerNuclearClick(id: string): void { method triggerIrradiatorClick (line 864) | public triggerIrradiatorClick(id: string): void { method flashLocation (line 872) | public flashLocation(lat: number, lon: number, durationMs?: number): v... method onCountryClicked (line 881) | public onCountryClicked(callback: (country: CountryClickPayload) => vo... method onMapContextMenu (line 887) | public onMapContextMenu(callback: (payload: { lat: number; lon: number... method fitCountry (line 893) | public fitCountry(code: string): void { method highlightCountry (line 902) | public highlightCountry(code: string): void { method clearCountryHighlight (line 908) | public clearCountryHighlight(): void { method setRenderPaused (line 914) | public setRenderPaused(paused: boolean): void { method isDeckGLMode (line 921) | public isDeckGLMode(): boolean { method isMobileMode (line 925) | public isMobileMode(): boolean { method destroy (line 929) | public destroy(): void { method clearCache (line 937) | private clearCache(): void { FILE: src/components/MapContextMenu.ts type MapContextMenuItem (line 1) | interface MapContextMenuItem { function onEscape (line 8) | function onEscape(e: KeyboardEvent): void { function dismissMapContextMenu (line 12) | function dismissMapContextMenu(): void { function showMapContextMenu (line 20) | function showMapContextMenu(x: number, y: number, items: MapContextMenuI... FILE: src/components/MapPopup.ts type PopupType (line 22) | type PopupType = 'conflict' | 'hotspot' | 'earthquake' | 'weather' | 'ba... type TechEventPopupData (line 24) | interface TechEventPopupData { type TechHQClusterData (line 37) | interface TechHQClusterData { type TechEventClusterData (line 48) | interface TechEventClusterData { type GpsJammingPopupData (line 57) | interface GpsJammingPopupData { type IranEventPopupData (line 67) | interface IranEventPopupData { type StockExchangePopupData (line 81) | interface StockExchangePopupData { type FinancialCenterPopupData (line 94) | interface FinancialCenterPopupData { type CentralBankPopupData (line 105) | interface CentralBankPopupData { type CommodityHubPopupData (line 116) | interface CommodityHubPopupData { type ProtestClusterData (line 126) | interface ProtestClusterData { type DatacenterClusterData (line 137) | interface DatacenterClusterData { type PopupData (line 149) | interface PopupData { class MapPopup (line 157) | class MapPopup { method constructor (line 169) | constructor(container: HTMLElement) { method show (line 173) | public show(data: PopupData): void { method positionDesktopPopup (line 244) | private positionDesktopPopup(data: PopupData, containerRect: DOMRect):... method hide (line 357) | public hide(): void { method setOnClose (line 380) | public setOnClose(callback: () => void): void { method setCableActivity (line 384) | public setCableActivity(advisories: CableAdvisory[], repairShips: Repa... method renderContent (line 389) | private renderContent(data: PopupData): string { method renderRadiationPopup (line 487) | private renderRadiationPopup(observation: RadiationObservation): string { method renderConflictPopup (line 536) | private renderConflictPopup(conflict: ConflictZone): string { method getLocalizedHotspotSubtext (line 594) | private getLocalizedHotspotSubtext(subtext: string): string { method renderHotspotPopup (line 604) | private renderHotspotPopup(hotspot: Hotspot, relatedNews?: NewsItem[])... method loadHotspotGdeltContext (line 812) | public async loadHotspotGdeltContext(hotspot: Hotspot): Promise { method loadWingbitsLiveFlight (line 847) | public async loadWingbitsLiveFlight(hexCode: string): Promise { method renderGdeltArticle (line 885) | private renderGdeltArticle(article: GdeltArticle): string { method renderEarthquakePopup (line 900) | private renderEarthquakePopup(earthquake: Earthquake): string { method getTimeAgo (line 933) | private getTimeAgo(date: Date): string { method renderWeatherPopup (line 944) | private renderWeatherPopup(alert: WeatherAlert): string { method getTimeUntil (line 971) | private getTimeUntil(date: Date | string): string { method renderBasePopup (line 982) | private renderBasePopup(base: MilitaryBase): string { method renderWaterwayPopup (line 1028) | private renderWaterwayPopup(waterway: StrategicWaterway): string { method renderAisPopup (line 1047) | private renderAisPopup(event: AisDisruptionEvent): string { method renderProtestPopup (line 1088) | private renderProtestPopup(event: SocialUnrestEvent): string { method renderProtestClusterPopup (line 1137) | private renderProtestClusterPopup(data: ProtestClusterData): string { method renderFlightPopup (line 1185) | private renderFlightPopup(delay: AirportDelayAlert): string { method renderAircraftPopup (line 1256) | private renderAircraftPopup(pos: PositionSample): string { method renderAPTPopup (line 1302) | private renderAPTPopup(apt: APTGroup): string { method renderCyberThreatPopup (line 1327) | private renderCyberThreatPopup(threat: CyberThreat): string { method renderNuclearPopup (line 1378) | private renderNuclearPopup(facility: NuclearFacility): string { method renderEconomicPopup (line 1417) | private renderEconomicPopup(center: EconomicCenter): string { method renderIrradiatorPopup (line 1471) | private renderIrradiatorPopup(irradiator: GammaIrradiator): string { method renderPipelinePopup (line 1500) | private renderPipelinePopup(pipeline: Pipeline): string { method renderCablePopup (line 1563) | private renderCablePopup(cable: UnderseaCable): string { method renderCableAdvisoryPopup (line 1655) | private renderCableAdvisoryPopup(advisory: CableAdvisory): string { method renderRepairShipPopup (line 1694) | private renderRepairShipPopup(ship: RepairShip): string { method getLatestCableAdvisory (line 1731) | private getLatestCableAdvisory(cableId: string): CableAdvisory | undef... method getPriorityRepairShip (line 1739) | private getPriorityRepairShip(cableId: string): RepairShip | undefined { method renderOutagePopup (line 1746) | private renderOutagePopup(outage: InternetOutage): string { method renderDatacenterPopup (line 1796) | private renderDatacenterPopup(dc: AIDataCenter): string { method renderDatacenterClusterPopup (line 1850) | private renderDatacenterClusterPopup(data: DatacenterClusterData): str... method renderStartupHubPopup (line 1911) | private renderStartupHubPopup(hub: StartupHub): string { method renderCloudRegionPopup (line 1939) | private renderCloudRegionPopup(region: CloudRegion): string { method renderTechHQPopup (line 1966) | private renderTechHQPopup(hq: TechHQ): string { method renderAcceleratorPopup (line 1999) | private renderAcceleratorPopup(acc: Accelerator): string { method renderTechEventPopup (line 2032) | private renderTechEventPopup(event: TechEventPopupData): string { method renderTechHQClusterPopup (line 2074) | private renderTechHQClusterPopup(data: TechHQClusterData): string { method renderTechEventClusterPopup (line 2110) | private renderTechEventClusterPopup(data: TechEventClusterData): string { method getMarketStatus (line 2137) | private getMarketStatus(hours: { open: string; close: string; timezone... method renderMilitaryFlightPopup (line 2164) | private renderMilitaryFlightPopup(flight: MilitaryFlight): string { method getFlagEmoji (line 2268) | private getFlagEmoji(countryCode: string): string { method getOperatorCountryCode (line 2293) | private getOperatorCountryCode(vessel: { operator: string; operatorCou... method formatCoord (line 2299) | private formatCoord(lat: number, lon: number): string { method renderClusterVesselItem (line 2305) | private renderClusterVesselItem(v: MilitaryVessel): string { method renderMilitaryVesselPopup (line 2311) | private renderMilitaryVesselPopup(vessel: MilitaryVessel): string { method renderMilitaryFlightClusterPopup (line 2477) | private renderMilitaryFlightClusterPopup(cluster: MilitaryFlightCluste... method renderMilitaryVesselClusterPopup (line 2538) | private renderMilitaryVesselClusterPopup(cluster: MilitaryVesselCluste... method sanitizeClassToken (line 2617) | private sanitizeClassToken(value: string | undefined, fallback = 'unkn... method renderNaturalEventPopup (line 2622) | private renderNaturalEventPopup(event: NaturalEvent): string { method renderTcDetails (line 2682) | private renderTcDetails(event: NaturalEvent): string { method renderPortPopup (line 2720) | private renderPortPopup(port: Port): string { method renderSpaceportPopup (line 2775) | private renderSpaceportPopup(port: Spaceport): string { method renderMineralPopup (line 2811) | private renderMineralPopup(mine: CriticalMineralProject): string { method renderStockExchangePopup (line 2854) | private renderStockExchangePopup(exchange: StockExchangePopupData): st... method renderFinancialCenterPopup (line 2879) | private renderFinancialCenterPopup(center: FinancialCenterPopupData): ... method renderCentralBankPopup (line 2909) | private renderCentralBankPopup(bank: CentralBankPopupData): string { method renderCommodityHubPopup (line 2932) | private renderCommodityHubPopup(hub: CommodityHubPopupData): string { method normalizeSeverity (line 2961) | private normalizeSeverity(s: string): 'high' | 'medium' | 'low' { method renderIranEventPopup (line 2968) | private renderIranEventPopup(event: IranEventPopupData): string { method renderGpsJammingPopup (line 3013) | private renderGpsJammingPopup(data: GpsJammingPopupData): string { function formatRadiationSources (line 3047) | function formatRadiationSources(observation: RadiationObservation): stri... function formatRadiationConfidence (line 3052) | function formatRadiationConfidence(confidence: RadiationObservation['con... FILE: src/components/MarketPanel.ts class MarketPanel (line 14) | class MarketPanel extends Panel { method constructor (line 18) | constructor() { method createSettingsButton (line 23) | private createSettingsButton(): void { method openWatchlistModal (line 35) | private openWatchlistModal(): void { method closeWatchlistModal (line 102) | private closeWatchlistModal(): void { method renderMarkets (line 108) | public renderMarkets(data: MarketData[], rateLimited?: boolean): void { class HeatmapPanel (line 136) | class HeatmapPanel extends Panel { method constructor (line 137) | constructor() { method renderHeatmap (line 141) | public renderHeatmap(data: Array<{ name: string; change: number | null... class CommoditiesPanel (line 168) | class CommoditiesPanel extends Panel { method constructor (line 169) | constructor() { method renderCommodities (line 173) | public renderCommodities(data: Array<{ display: string; price: number ... class CryptoPanel (line 201) | class CryptoPanel extends Panel { method constructor (line 202) | constructor() { method renderCrypto (line 206) | public renderCrypto(data: CryptoData[]): void { FILE: src/components/McpConnectModal.ts type McpConnectOptions (line 7) | interface McpConnectOptions { function openMcpConnectModal (line 14) | function openMcpConnectModal(options: McpConnectOptions): void { function _headersToLine (line 273) | function _headersToLine(headers: Record): string { function closeMcpConnectModal (line 279) | function closeMcpConnectModal(): void { FILE: src/components/McpDataPanel.ts type McpResult (line 8) | type McpResult = { class McpDataPanel (line 13) | class McpDataPanel extends Panel { method constructor (line 18) | constructor(spec: McpPanelSpec) { method addHeaderButtons (line 30) | private addHeaderButtons(): void { method scheduleRefresh (line 65) | private scheduleRefresh(immediate = false): void { method clearRefreshTimer (line 75) | private clearRefreshTimer(): void { method fetchData (line 82) | async fetchData(): Promise { method renderResult (line 106) | private renderResult(result: McpResult): void { method buildMetaLine (line 115) | private buildMetaLine(): string { method extractText (line 127) | private extractText(result: McpResult): string { method formatValue (line 137) | private formatValue(text: string): string { method formatAgo (line 148) | private formatAgo(ts: number): string { method updateSpec (line 155) | updateSpec(spec: McpPanelSpec): void { method getSpec (line 163) | getSpec(): McpPanelSpec { method destroy (line 167) | destroy(): void { FILE: src/components/MilitaryCorrelationPanel.ts class MilitaryCorrelationPanel (line 4) | class MilitaryCorrelationPanel extends CorrelationPanel { method constructor (line 5) | constructor() { FILE: src/components/MobileWarningModal.ts constant STORAGE_KEY (line 5) | const STORAGE_KEY = 'mobile-warning-dismissed'; class MobileWarningModal (line 7) | class MobileWarningModal { method constructor (line 10) | constructor() { method setupEventListeners (line 43) | private setupEventListeners(): void { method dismiss (line 55) | private dismiss(): void { method show (line 63) | public show(): void { method hide (line 67) | public hide(): void { method shouldShow (line 71) | public static shouldShow(): boolean { method getElement (line 76) | public getElement(): HTMLElement { FILE: src/components/MonitorPanel.ts class MonitorPanel (line 9) | class MonitorPanel extends Panel { method constructor (line 13) | constructor(initialMonitors: Monitor[] = []) { method renderInput (line 19) | private renderInput(): void { method addMonitor (line 47) | private addMonitor(): void { method removeMonitor (line 65) | public removeMonitor(id: string): void { method renderMonitorsList (line 71) | private renderMonitorsList(): void { method renderResults (line 89) | public renderResults(news: NewsItem[]): void { method onChanged (line 161) | public onChanged(callback: (monitors: Monitor[]) => void): void { method getMonitors (line 165) | public getMonitors(): Monitor[] { method setMonitors (line 169) | public setMonitors(monitors: Monitor[]): void { FILE: src/components/NewsPanel.ts type SortMode (line 12) | type SortMode = 'relevance' | 'newest'; constant VIRTUAL_SCROLL_THRESHOLD (line 15) | const VIRTUAL_SCROLL_THRESHOLD = 15; constant SUMMARY_CACHE_TTL (line 18) | const SUMMARY_CACHE_TTL = 10 * 60 * 1000; type PreparedCluster (line 21) | interface PreparedCluster { class NewsPanel (line 28) | class NewsPanel extends Panel { method constructor (line 55) | constructor(id: string, title: string) { method initWindowedList (line 66) | private initWindowedList(): void { method setupActivityTracking (line 83) | private setupActivityTracking(): void { method setRelatedAssetHandlers (line 106) | public setRelatedAssetHandlers(options: { method createDeviationIndicator (line 116) | private createDeviationIndicator(): void { method sortStorageKey (line 126) | private get sortStorageKey(): string { method loadSortMode (line 130) | private loadSortMode(): SortMode { method saveSortMode (line 137) | private saveSortMode(): void { method createSortToggle (line 141) | private createSortToggle(): void { method updateSortButtonLabel (line 165) | private updateSortButtonLabel(): void { method createSummarizeButton (line 180) | private createSummarizeButton(): void { method handleSummarize (line 211) | private async handleSummarize(): Promise { method handleTranslate (line 260) | private async handleTranslate(element: HTMLElement, text: string): Pro... method showSummary (line 297) | private showSummary(summary: string): void { method hideSummary (line 309) | private hideSummary(): void { method getHeadlineSignature (line 315) | private getHeadlineSignature(): string { method updateHeadlineSignature (line 319) | private updateHeadlineSignature(): void { method getCachedSummary (line 329) | private getCachedSummary(key: string): string | null { method setCachedSummary (line 343) | private setCachedSummary(key: string, summary: string): void { method setDeviation (line 353) | public setDeviation(zScore: number, percentChange: number, level: Devi... method showError (line 369) | public override showError(message?: string, onRetry?: () => void, auto... method renderNews (line 375) | public renderNews(items: NewsItem[]): void { method renderFilteredEmpty (line 394) | public renderFilteredEmpty(message: string): void { method renderClustersAsync (line 406) | private async renderClustersAsync(items: NewsItem[]): Promise { method renderFlat (line 421) | private renderFlat(items: NewsItem[]): void { method renderClusters (line 461) | private renderClusters(clusters: ClusteredEvent[]): void { method renderClusterHtmlSafely (line 528) | private renderClusterHtmlSafely( method renderClusterHtml (line 551) | private renderClusterHtml( method setupContentDelegation (line 672) | private setupContentDelegation(): void { method bindRelatedAssetEvents (line 716) | private bindRelatedAssetEvents(): void { method getLocalizedAssetLabel (line 721) | private getLocalizedAssetLabel(type: RelatedAsset['type']): string { method destroy (line 735) | public destroy(): void { FILE: src/components/OrefSirensPanel.ts constant MAX_HISTORY_WAVES (line 7) | const MAX_HISTORY_WAVES = 50; constant ONE_HOUR_MS (line 8) | const ONE_HOUR_MS = 60 * 60 * 1000; constant HISTORY_TTL (line 9) | const HISTORY_TTL = 3 * 60 * 1000; class OrefSirensPanel (line 11) | class OrefSirensPanel extends Panel { method constructor (line 19) | constructor() { method setData (line 30) | public setData(data: OrefAlertsResponse): void { method loadHistory (line 51) | private loadHistory(): void { method formatAlertTime (line 67) | private formatAlertTime(dateStr: string): string { method formatWaveTime (line 83) | private formatWaveTime(dateStr: string): string { method renderHistoryWaves (line 94) | private renderHistoryWaves(): string { method render (line 134) | private render(): void { FILE: src/components/Panel.ts type PanelOptions (line 9) | interface PanelOptions { constant PANEL_SPANS_KEY (line 21) | const PANEL_SPANS_KEY = 'worldmonitor-panel-spans'; function loadPanelSpans (line 23) | function loadPanelSpans(): Record { function savePanelSpan (line 32) | function savePanelSpan(panelId: string, span: number): void { constant PANEL_COL_SPANS_KEY (line 38) | const PANEL_COL_SPANS_KEY = 'worldmonitor-panel-col-spans'; constant ROW_RESIZE_STEP_PX (line 39) | const ROW_RESIZE_STEP_PX = 80; constant COL_RESIZE_STEP_PX (line 40) | const COL_RESIZE_STEP_PX = 80; constant PANELS_GRID_MIN_TRACK_PX (line 41) | const PANELS_GRID_MIN_TRACK_PX = 280; function loadPanelColSpans (line 43) | function loadPanelColSpans(): Record { function savePanelColSpan (line 52) | function savePanelColSpan(panelId: string, span: number): void { function clearPanelColSpan (line 58) | function clearPanelColSpan(panelId: string): void { function getDefaultColSpan (line 69) | function getDefaultColSpan(element: HTMLElement): number { function getColSpan (line 73) | function getColSpan(element: HTMLElement): number { function getGridColumnCount (line 80) | function getGridColumnCount(element: HTMLElement): number { function getMaxColSpan (line 109) | function getMaxColSpan(element: HTMLElement): number { function clampColSpan (line 113) | function clampColSpan(span: number, maxSpan: number): number { function persistPanelColSpan (line 117) | function persistPanelColSpan(panelId: string, element: HTMLElement): void { function deltaToColSpan (line 130) | function deltaToColSpan(startSpan: number, deltaX: number, maxSpan = 3):... function clearColSpanClass (line 137) | function clearColSpanClass(element: HTMLElement): void { function setColSpanClass (line 141) | function setColSpanClass(element: HTMLElement, span: number): void { function getRowSpan (line 146) | function getRowSpan(element: HTMLElement): number { function deltaToRowSpan (line 153) | function deltaToRowSpan(startSpan: number, deltaY: number): number { function setSpanClass (line 160) | function setSpanClass(element: HTMLElement, span: number): void { class Panel (line 166) | class Panel { method constructor (line 207) | constructor(options: PanelOptions) { method restoreSavedColSpan (line 322) | private restoreSavedColSpan(): void { method reconcileColSpanAfterAttach (line 341) | private reconcileColSpanAfterAttach(attempts = 3): void { method addRowTouchDocumentListeners (line 360) | private addRowTouchDocumentListeners(): void { method removeRowTouchDocumentListeners (line 372) | private removeRowTouchDocumentListeners(): void { method setupResizeHandlers (line 384) | private setupResizeHandlers(): void { method addColTouchDocumentListeners (line 500) | private addColTouchDocumentListeners(): void { method removeColTouchDocumentListeners (line 512) | private removeColTouchDocumentListeners(): void { method setupColResizeHandlers (line 524) | private setupColResizeHandlers(): void { method setDataBadge (line 630) | protected setDataBadge(state: 'live' | 'cached' | 'unavailable', detai... method clearDataBadge (line 642) | protected clearDataBadge(): void { method insertLiveCountBadge (line 647) | protected insertLiveCountBadge(count: number): void { method appendCloseButton (line 656) | protected appendCloseButton(): void { method getElement (line 672) | public getElement(): HTMLElement { method isNearViewport (line 676) | public isNearViewport(marginPx = 400): boolean { method showLoading (line 697) | public showLoading(message = t('common.loading')): void { method showError (line 712) | public showError(message?: string, onRetry?: () => void, autoRetrySeco... method resetRetryBackoff (line 748) | public resetRetryBackoff(): void { method showLocked (line 752) | public showLocked(features: string[] = []): void { method showRetrying (line 789) | public showRetrying(message?: string, countdownSeconds?: number): void { method clearRetryCountdown (line 824) | private clearRetryCountdown(): void { method setRetryCallback (line 831) | protected setRetryCallback(fn: (() => void) | null): void { method setFetching (line 835) | protected setFetching(v: boolean): void { method isFetching (line 841) | protected get isFetching(): boolean { method showConfigError (line 845) | public showConfigError(message: string): void { method setCount (line 859) | public setCount(count: number): void { method setErrorState (line 871) | public setErrorState(hasError: boolean, tooltip?: string): void { method setContent (line 880) | public setContent(html: string): void { method setContentImmediate (line 901) | private setContentImmediate(html: string): void { method show (line 913) | public show(): void { method hide (line 917) | public hide(): void { method toggle (line 921) | public toggle(visible: boolean): void { method setNewBadge (line 931) | public setNewBadge(count: number, pulse = false): void { method clearNewBadge (line 955) | public clearNewBadge(): void { method getId (line 962) | public getId(): string { method resetHeight (line 969) | public resetHeight(): void { method resetWidth (line 976) | public resetWidth(): void { method signal (line 981) | protected get signal(): AbortSignal { method isAbortError (line 985) | protected isAbortError(error: unknown): boolean { method destroy (line 989) | public destroy(): void { FILE: src/components/PinnedWebcamsPanel.ts constant MAX_SLOTS (line 11) | const MAX_SLOTS = 4; constant PLAYER_FALLBACK (line 12) | const PLAYER_FALLBACK = 'https://webcams.windy.com/webcams/public/embed/... function buildPlayerUrl (line 14) | function buildPlayerUrl(webcamId: string, playerUrl?: string): string { class PinnedWebcamsPanel (line 19) | class PinnedWebcamsPanel extends Panel { method constructor (line 22) | constructor() { method render (line 28) | private render(): void { method refresh (line 135) | public refresh(): void { method destroy (line 139) | public destroy(): void { FILE: src/components/PizzIntIndicator.ts constant DEFCON_COLORS (line 5) | const DEFCON_COLORS: Record = { class PizzIntIndicator (line 13) | class PizzIntIndicator { method constructor (line 19) | constructor() { method updateStatus (line 60) | public updateStatus(status: PizzIntStatus): void { method updateTensions (line 65) | public updateTensions(tensions: GdeltTensionPair[]): void { method render (line 70) | private render(): void { method renderTensions (line 101) | private renderTensions(): void { method getStatusClass (line 120) | private getStatusClass(loc: { is_closed_now: boolean; is_spike: boolea... method getStatusLabel (line 129) | private getStatusLabel(loc: { is_closed_now: boolean; is_spike: boolea... method formatTimeAgo (line 138) | private formatTimeAgo(date: Date): string { method getDefconLabel (line 145) | private getDefconLabel(level: number): string { method getElement (line 151) | public getElement(): HTMLElement { method hide (line 155) | public hide(): void { method show (line 159) | public show(): void { FILE: src/components/PlaybackControl.ts class PlaybackControl (line 4) | class PlaybackControl { method constructor (line 11) | constructor() { method setupEventListeners (line 40) | private setupEventListeners(): void { method loadTimestamps (line 72) | private async loadTimestamps(): Promise { method loadSnapshot (line 85) | private async loadSnapshot(index: number): Promise { method goLive (line 108) | private goLive(): void { method handleAction (line 122) | private handleAction(action: string): void { method updateTimeDisplay (line 146) | private updateTimeDisplay(): void { method onSnapshot (line 168) | public onSnapshot(callback: (snapshot: DashboardSnapshot | null) => vo... method getElement (line 172) | public getElement(): HTMLElement { method isInPlaybackMode (line 176) | public isInPlaybackMode(): boolean { FILE: src/components/PopulationExposurePanel.ts class PopulationExposurePanel (line 7) | class PopulationExposurePanel extends Panel { method constructor (line 10) | constructor() { method setExposures (line 21) | public setExposures(exposures: PopulationExposure[]): void { method renderContent (line 27) | private renderContent(): void { method getTypeIcon (line 58) | private getTypeIcon(type: string): string { FILE: src/components/PositiveNewsFeedPanel.ts class PositiveNewsFeedPanel (line 14) | class PositiveNewsFeedPanel extends Panel { method constructor (line 21) | constructor() { method createFilterBar (line 30) | private createFilterBar(): void { method setFilter (line 65) | private setFilter(filter: HappyContentCategory | 'all'): void { method renderPositiveNews (line 84) | public renderPositiveNews(items: NewsItem[]): void { method applyFilter (line 93) | private applyFilter(): void { method renderCards (line 105) | private renderCards(items: NewsItem[]): void { method renderCard (line 148) | private renderCard(item: NewsItem, idx: number): string { method destroy (line 181) | public destroy(): void { FILE: src/components/PredictionPanel.ts class PredictionPanel (line 6) | class PredictionPanel extends Panel { method constructor (line 7) | constructor() { method formatVolume (line 15) | private formatVolume(volume?: number): string { method convictionLabel (line 22) | private convictionLabel(yes: number): { label: string; cls: string } { method renderPredictions (line 28) | public renderPredictions(data: PredictionMarket[]): void { FILE: src/components/ProBanner.ts function showProBanner (line 28) | function showProBanner(container: HTMLElement): void { function hideProBanner (line 61) | function hideProBanner(): void { function isProBannerVisible (line 70) | function isProBannerVisible(): boolean { FILE: src/components/ProgressChartsPanel.ts constant CHART_MARGIN (line 18) | const CHART_MARGIN = { top: 8, right: 12, bottom: 24, left: 40 }; constant CHART_HEIGHT (line 19) | const CHART_HEIGHT = 90; constant RESIZE_DEBOUNCE_MS (line 20) | const RESIZE_DEBOUNCE_MS = 200; class ProgressChartsPanel (line 22) | class ProgressChartsPanel extends Panel { method constructor (line 28) | constructor() { method setData (line 36) | public setData(datasets: ProgressDataSet[]): void { method createTooltip (line 61) | private createTooltip(): void { method renderChart (line 88) | private renderChart(dataset: ProgressDataSet): void { method renderD3Chart (line 152) | private renderD3Chart( method addHoverInteraction (line 249) | private addHoverInteraction( method setupResizeObserver (line 329) | private setupResizeObserver(): void { method destroy (line 345) | public destroy(): void { function formatAxisValue (line 365) | function formatAxisValue(value: number): string { function formatTooltipValue (line 372) | function formatTooltipValue(value: number): string { FILE: src/components/RadiationWatchPanel.ts class RadiationWatchPanel (line 5) | class RadiationWatchPanel extends Panel { method constructor (line 19) | constructor() { method setLocationClickHandler (line 38) | public setLocationClickHandler(handler: (lat: number, lon: number) => ... method setData (line 42) | public setData(data: RadiationWatchResult): void { method render (line 50) | private render(): void { function formatReading (line 140) | function formatReading(value: number, unit: string): string { function formatDelta (line 145) | function formatDelta(value: number, unit: string, zScore: number): string { function formatObservedAt (line 150) | function formatObservedAt(date: Date): string { function formatSourceLine (line 161) | function formatSourceLine(observation: RadiationObservation): string { function formatConfidence (line 167) | function formatConfidence(value: RadiationObservation['confidence']): st... FILE: src/components/RegulationPanel.ts class RegulationPanel (line 13) | class RegulationPanel extends Panel { method constructor (line 16) | constructor(id: string) { method render (line 21) | protected render(): void { method renderContent (line 52) | private renderContent(): string { method renderTimeline (line 67) | private renderTimeline(): string { method renderTimelineItem (line 87) | private renderTimelineItem(action: RegulatoryAction): string { method renderDeadlines (line 129) | private renderDeadlines(): string { method renderDeadlineItem (line 149) | private renderDeadlineItem(regulation: AIRegulation): string { method renderRegulations (line 184) | private renderRegulations(): string { method renderRegulationCard (line 206) | private renderRegulationCard(regulation: AIRegulation): string { method renderCountries (line 247) | private renderCountries(): string { method renderCountryCard (line 276) | private renderCountryCard(profile: CountryRegulationProfile): string { method updateData (line 312) | public updateData(): void { method setView (line 316) | public setView(view: 'timeline' | 'deadlines' | 'regulations' | 'count... FILE: src/components/RenewableEnergyPanel.ts class RenewableEnergyPanel (line 15) | class RenewableEnergyPanel extends Panel { method constructor (line 16) | constructor() { method setData (line 23) | public setData(data: RenewableEnergyData): void { method renderGauge (line 84) | private renderGauge( method renderSparkline (line 170) | private renderSparkline( method renderRegions (line 231) | private renderRegions( method setCapacityData (line 315) | public setCapacityData(series: CapacitySeries[]): void { method renderCapacityChart (line 342) | private renderCapacityChart( method destroy (line 514) | public destroy(): void { FILE: src/components/RuntimeConfigPanel.ts type RuntimeConfigPanelOptions (line 26) | interface RuntimeConfigPanelOptions { class RuntimeConfigPanel (line 32) | class RuntimeConfigPanel extends Panel { method constructor (line 42) | constructor(options: RuntimeConfigPanelOptions = {}) { method commitPendingSecrets (line 51) | public async commitPendingSecrets(): Promise { method commitVerifiedSecrets (line 60) | public async commitVerifiedSecrets(): Promise { method hasPendingChanges (line 71) | public hasPendingChanges(): boolean { method getFilteredFeatures (line 75) | private getFilteredFeatures(): RuntimeFeatureDefinition[] { method getMissingRequiredSecrets (line 82) | public getMissingRequiredSecrets(): string[] { method getValidationErrors (line 98) | public getValidationErrors(): string[] { method verifyPendingSecrets (line 107) | public async verifyPendingSecrets(): Promise { method destroy (line 156) | public destroy(): void { method setEffectiveVisibility (line 161) | private setEffectiveVisibility(visible: boolean): void { method show (line 166) | public override show(): void { method hide (line 175) | public override hide(): void { method captureUnsavedInputs (line 180) | private captureUnsavedInputs(): void { method render (line 209) | protected render(): void { method renderFeature (line 267) | private renderFeature(feature: RuntimeFeatureDefinition): string { method renderSecretRow (line 295) | private renderSecretRow(key: RuntimeSecretKey): string { method attachListeners (line 355) | private attachListeners(): void { method updateFeatureCardStatus (line 495) | private updateFeatureCardStatus(secretKey: RuntimeSecretKey): void { method showManualModelInput (line 520) | private showManualModelInput(select: HTMLSelectElement): void { method fetchOllamaModels (line 537) | private async fetchOllamaModels(select: HTMLSelectElement): Promise = { function kebabToCamel (line 22) | function kebabToCamel(s: string): string { function resolveCommandLabel (line 26) | function resolveCommandLabel(cmd: Command): string { function resolveCategoryLabel (line 51) | function resolveCategoryLabel(cmd: Command): string { type SearchResultType (line 56) | type SearchResultType = 'country' | 'news' | 'hotspot' | 'market' | 'pre... type SearchResult (line 58) | interface SearchResult { type SearchableSource (line 66) | interface SearchableSource { constant RECENT_SEARCHES_KEY (line 71) | const RECENT_SEARCHES_KEY = 'worldmonitor_recent_searches'; constant MAX_RECENT (line 72) | const MAX_RECENT = 8; constant MAX_RESULTS (line 73) | const MAX_RESULTS = 24; constant MAX_COMMANDS (line 74) | const MAX_COMMANDS = 5; type SearchModalOptions (line 76) | interface SearchModalOptions { class SearchModal (line 80) | class SearchModal { method constructor (line 101) | constructor(container: HTMLElement, options?: SearchModalOptions) { method registerSource (line 108) | public registerSource(type: SearchResultType, items: SearchableSource[... method setOnSelect (line 117) | public setOnSelect(callback: (result: SearchResult) => void): void { method setOnCommand (line 121) | public setOnCommand(callback: (command: Command) => void): void { method setActivePanels (line 125) | public setActivePanels(panelIds: string[]): void { method open (line 129) | public open(): void { method close (line 145) | public close(): void { method isOpen (line 173) | public isOpen(): boolean { method createModal (line 177) | private createModal(): void { method matchCommands (line 247) | private matchCommands(query: string): CommandResult[] { method handleSearch (line 273) | private handleSearch(): void { method showRecentOrEmpty (line 334) | private showRecentOrEmpty(): void { method renderRecent (line 349) | private renderRecent(): void { method renderEmpty (line 381) | private renderEmpty(): void { method appendSeeAllCommandsLink (line 423) | private appendSeeAllCommandsLink(): void { method renderAllCommandsList (line 441) | private renderAllCommandsList(): void { method totalResultCount (line 508) | private get totalResultCount(): number { method renderResults (line 512) | private renderResults(): void { method renderChips (line 596) | private renderChips(query?: string): void { method highlightMatch (line 630) | private highlightMatch(text: string): string { method handleKeydown (line 640) | private handleKeydown(e: KeyboardEvent): void { method moveSelection (line 661) | private moveSelection(delta: number): void { method updateSelection (line 669) | private updateSelection(): void { method selectResult (line 680) | private selectResult(index: number): void { method loadRecentSearches (line 708) | private loadRecentSearches(): void { method saveRecentSearch (line 717) | private saveRecentSearch(term: string): void { FILE: src/components/SecurityAdvisoriesPanel.ts type AdvisoryFilter (line 6) | type AdvisoryFilter = 'all' | 'critical' | 'US' | 'AU' | 'UK' | 'NZ' | '... class SecurityAdvisoriesPanel (line 8) | class SecurityAdvisoriesPanel extends Panel { method constructor (line 14) | constructor() { method setData (line 40) | public setData(advisories: SecurityAdvisory[]): void { method getFiltered (line 52) | private getFiltered(): SecurityAdvisory[] { method getLevelClass (line 68) | private getLevelClass(level?: SecurityAdvisory['level']): string { method getLevelLabel (line 78) | private getLevelLabel(level?: SecurityAdvisory['level']): string { method getSourceFlag (line 88) | private getSourceFlag(sourceCountry: string): string { method formatTime (line 100) | private formatTime(date: Date): string { method render (line 114) | private render(): void { method setRefreshHandler (line 194) | public setRefreshHandler(handler: () => void): void { method destroy (line 198) | public destroy(): void { FILE: src/components/ServiceStatusPanel.ts type CategoryFilter (line 10) | type CategoryFilter = 'all' | 'cloud' | 'dev' | 'comm' | 'ai' | 'saas'; function getCategoryLabel (line 12) | function getCategoryLabel(category: CategoryFilter): string { class ServiceStatusPanel (line 24) | class ServiceStatusPanel extends Panel { method constructor (line 29) | constructor() { method fetchStatus (line 35) | public async fetchStatus(): Promise { method setFilter (line 61) | private setFilter(filter: CategoryFilter): void { method getFilteredServices (line 66) | private getFilteredServices(): ServiceStatus[] { method render (line 71) | protected render(): void { method buildSummary (line 101) | private buildSummary(services: ServiceStatus[]): HTMLElement { method buildFilters (line 123) | private buildFilters(): HTMLElement { method buildServiceItems (line 136) | private buildServiceItems(services: ServiceStatus[]): HTMLElement[] { method getStatusIcon (line 146) | private getStatusIcon(status: string): string { FILE: src/components/SignalModal.ts class SignalModal (line 9) | class SignalModal { method constructor (line 17) | constructor() { method initAudio (line 48) | private initAudio(): void { method setupEventListeners (line 53) | private setupEventListeners(): void { method setLocationClickHandler (line 99) | public setLocationClickHandler(handler: (lat: number, lon: number) => ... method activateEsc (line 103) | private activateEsc(): void { method show (line 107) | public show(signals: CorrelationSignal[]): void { method showSignal (line 118) | public showSignal(signal: CorrelationSignal): void { method showAlert (line 125) | public showAlert(alert: UnifiedAlert): void { method playSound (line 295) | public playSound(): void { method hide (line 302) | public hide(): void { method renderSignals (line 307) | private renderSignals(): void { method formatTime (line 396) | private formatTime(date: Date): string { method getElement (line 400) | public getElement(): HTMLElement { FILE: src/components/SpeciesComebackPanel.ts constant SPARKLINE_MARGIN (line 17) | const SPARKLINE_MARGIN = { top: 4, right: 8, bottom: 16, left: 8 }; constant SPARKLINE_HEIGHT (line 18) | const SPARKLINE_HEIGHT = 50; function getNumberFormat (line 23) | function getNumberFormat(): Intl.NumberFormat { constant FALLBACK_IMAGE_SVG (line 33) | const FALLBACK_IMAGE_SVG = 'data:image/svg+xml,' + encodeURIComponent( class SpeciesComebackPanel (line 40) | class SpeciesComebackPanel extends Panel { method constructor (line 41) | constructor() { method setData (line 48) | public setData(species: SpeciesRecovery[]): void { method createCard (line 76) | private createCard(entry: SpeciesRecovery): HTMLElement { method createPhotoSection (line 107) | private createPhotoSection(entry: SpeciesRecovery): HTMLElement { method createInfoSection (line 127) | private createInfoSection(entry: SpeciesRecovery): HTMLElement { method createSummarySection (line 169) | private createSummarySection(entry: SpeciesRecovery): HTMLElement { method renderSparkline (line 189) | private renderSparkline( method destroy (line 277) | public destroy(): void { FILE: src/components/StablecoinPanel.ts type StablecoinResult (line 9) | type StablecoinResult = ListStablecoinMarketsResponse; function formatLargeNum (line 11) | function formatLargeNum(v: number): string { function pegClass (line 18) | function pegClass(status: string): string { function healthClass (line 24) | function healthClass(status: string): string { class StablecoinPanel (line 30) | class StablecoinPanel extends Panel { method constructor (line 34) | constructor() { method fetchData (line 38) | public async fetchData(): Promise { method renderPanel (line 63) | private renderPanel(): void { FILE: src/components/StatusPanel.ts type StatusLevel (line 4) | type StatusLevel = 'ok' | 'warning' | 'error' | 'disabled'; type FeedStatus (line 6) | interface FeedStatus { type ApiStatus (line 14) | interface ApiStatus { constant TECH_FEEDS (line 21) | const TECH_FEEDS = new Set([ constant TECH_APIS (line 28) | const TECH_APIS = new Set([ constant WORLD_FEEDS (line 33) | const WORLD_FEEDS = new Set([ constant WORLD_APIS (line 39) | const WORLD_APIS = new Set([ class StatusPanel (line 48) | class StatusPanel extends Panel { method constructor (line 55) | constructor() { method init (line 60) | private init(): void { method initDefaultStatuses (line 68) | private initDefaultStatuses(): void { method getFeeds (line 77) | public getFeeds(): Map { return this.feeds; } method getApis (line 78) | public getApis(): Map { return this.apis; } method updateFeed (line 80) | public updateFeed(name: string, status: Partial): void { method updateApi (line 87) | public updateApi(name: string, status: Partial): void { method setFeedDisabled (line 94) | public setFeedDisabled(name: string): void { method setApiDisabled (line 102) | public setApiDisabled(name: string): void { method formatTime (line 110) | public formatTime(date: Date): string { method getElement (line 118) | public getElement(): HTMLElement { FILE: src/components/StockAnalysisPanel.ts function formatChange (line 7) | function formatChange(change: number): string { function formatPrice (line 12) | function formatPrice(price: number, currency: string): string { function stockSignalTone (line 17) | function stockSignalTone(signal: string): string { function list (line 24) | function list(items: string[], tone: string): string { class StockAnalysisPanel (line 29) | class StockAnalysisPanel extends Panel { method constructor (line 30) | constructor() { method renderAnalyses (line 34) | public renderAnalyses(items: StockAnalysisResult[], historyBySymbol: S... method renderCard (line 55) | private renderCard(item: StockAnalysisResult, history: StockAnalysisRe... FILE: src/components/StockBacktestPanel.ts function tone (line 5) | function tone(value: number): string { function fmtPct (line 11) | function fmtPct(value: number): string { class StockBacktestPanel (line 16) | class StockBacktestPanel extends Panel { method constructor (line 17) | constructor() { method renderBacktests (line 21) | public renderBacktests(items: StockBacktestResult[], source: 'live' | ... FILE: src/components/StoryModal.ts function storyEscHandler (line 11) | function storyEscHandler(e: KeyboardEvent): void { function openStoryModal (line 15) | function openStoryModal(data: StoryData): void { function renderAndDisplay (line 82) | async function renderAndDisplay(data: StoryData): Promise { function closeStoryModal (line 105) | function closeStoryModal(): void { function downloadStory (line 116) | function downloadStory(): void { function shareWhatsApp (line 125) | async function shareWhatsApp(data: StoryData): Promise { function shareTwitter (line 156) | async function shareTwitter(data: StoryData): Promise { function shareLinkedIn (line 162) | async function shareLinkedIn(data: StoryData): Promise { function copyDeepLink (line 168) | async function copyDeepLink(data: StoryData): Promise { function flashButton (line 174) | function flashButton(selector: string, flashText: string, originalText: ... FILE: src/components/StrategicPosturePanel.ts class StrategicPosturePanel (line 11) | class StrategicPosturePanel extends Panel { method constructor (line 20) | constructor(private getLatestNews?: () => NewsItem[]) { method init (line 32) | private init(): void { method isPanelVisible (line 43) | private isPanelVisible(): boolean { method reaugmentVessels (line 47) | private async reaugmentVessels(): Promise { method showLoading (line 55) | public override showLoading(): void { method startLoadingTimer (line 88) | private startLoadingTimer(): void { method stopLoadingTimer (line 99) | private stopLoadingTimer(): void { method showLoadingStage (line 106) | private showLoadingStage(stage: 'aircraft' | 'vessels' | 'analysis'): ... method fetchAndRender (line 123) | private async fetchAndRender(): Promise { method augmentWithVessels (line 166) | private async augmentWithVessels(): Promise { method cacheVesselCounts (line 226) | private cacheVesselCounts(): void { method restoreVesselCounts (line 246) | private restoreVesselCounts(): void { method updatePostures (line 269) | public updatePostures(data: CachedTheaterPosture): void { method updateBadges (line 288) | private updateBadges(): void { method refresh (line 300) | public async refresh(): Promise { method showNoData (line 304) | private showNoData(): void { method showFetchError (line 331) | private showFetchError(): void { method getPostureBadge (line 351) | private getPostureBadge(level: string): string { method getTrendIcon (line 362) | private getTrendIcon(trend: string, change: number): string { method theaterDisplayName (line 373) | private theaterDisplayName(p: TheaterPostureSummary): string { method renderTheater (line 379) | private renderTheater(p: TheaterPostureSummary): string { method render (line 449) | private render(): void { method attachEventListeners (line 480) | private attachEventListeners(): void { method setLocationClickHandler (line 542) | public setLocationClickHandler(handler: (lat: number, lon: number) => ... method getPostures (line 549) | public getPostures(): TheaterPostureSummary[] { method show (line 553) | public override show(): void { method destroy (line 561) | public destroy(): void { FILE: src/components/StrategicRiskPanel.ts class StrategicRiskPanel (line 25) | class StrategicRiskPanel extends Panel { method constructor (line 37) | constructor() { method init (line 48) | private async init(): Promise { method refresh (line 84) | public async refresh(): Promise { method getScoreColor (line 158) | private getScoreColor(score: number): string { method getScoreLevel (line 165) | private getScoreLevel(score: number): string { method getTrendEmoji (line 172) | private getTrendEmoji(trend: string): string { method getTrendColor (line 180) | private getTrendColor(trend: string): string { method getPriorityColor (line 189) | private getPriorityColor(priority: AlertPriority): string { method getPriorityEmoji (line 198) | private getPriorityEmoji(priority: AlertPriority): string { method getTypeEmoji (line 207) | private getTypeEmoji(type: string): string { method renderInsufficientData (line 222) | private renderInsufficientData(): string { method renderFullData (line 268) | private renderFullData(): string { method renderSourceRow (line 323) | private renderSourceRow(source: DataSourceState): string { method renderMetrics (line 341) | private renderMetrics(): string { method renderTopRisks (line 368) | private renderTopRisks(): string { method renderRecentAlerts (line 404) | private renderRecentAlerts(): string { method formatTime (line 440) | private formatTime(date: Date): string { method render (line 452) | private render(): void { method attachEventListeners (line 477) | private attachEventListeners(): void { method emitEnablePanel (line 533) | private emitEnablePanel(panelId: string): void { method emitEnablePanels (line 537) | private emitEnablePanels(panelIds: string[]): void { method destroy (line 541) | public destroy(): void { method getOverview (line 556) | public getOverview(): StrategicRiskOverview | null { method getAlerts (line 560) | public getAlerts(): UnifiedAlert[] { method setLocationClickHandler (line 564) | public setLocationClickHandler(handler: (lat: number, lon: number) => ... FILE: src/components/SupplyChainPanel.ts type TabId (line 13) | type TabId = 'chokepoints' | 'shipping' | 'indicators' | 'minerals'; class SupplyChainPanel (line 15) | class SupplyChainPanel extends Panel { method constructor (line 25) | constructor() { method clearTransitChart (line 48) | private clearTransitChart(): void { method updateShippingRates (line 54) | public updateShippingRates(data: GetShippingRatesResponse): void { method updateChokepointStatus (line 59) | public updateChokepointStatus(data: GetChokepointStatusResponse): void { method updateCriticalMinerals (line 64) | public updateCriticalMinerals(data: GetCriticalMineralsResponse): void { method render (line 69) | private render(): void { method renderChokepoints (line 145) | private renderChokepoints(): string { method renderShipping (line 203) | private renderShipping(): string { method renderDisruptionSnapshot (line 217) | private renderDisruptionSnapshot(): string { method renderFredIndices (line 264) | private renderFredIndices(): string { method renderIndicators (line 303) | private renderIndicators(): string { method renderSparkline (line 336) | private renderSparkline(values: number[], dates?: string[]): string { method renderMinerals (line 361) | private renderMinerals(): string { FILE: src/components/TechEventsPanel.ts type ViewMode (line 13) | type ViewMode = 'upcoming' | 'conferences' | 'earnings' | 'all'; class TechEventsPanel (line 17) | class TechEventsPanel extends Panel { method constructor (line 23) | constructor(id: string, private getLatestNews?: () => NewsItem[]) { method fetchEvents (line 29) | private async fetchEvents(): Promise { method render (line 68) | protected render(): void { method getFilteredEvents (line 121) | private getFilteredEvents(): TechEvent[] { method buildEvent (line 146) | private buildEvent(event: TechEvent): HTMLElement { method panToLocation (line 242) | private panToLocation(lat: number, lng: number): void { method refresh (line 249) | public refresh(): void { method getConferencesForMap (line 253) | public getConferencesForMap(): TechEvent[] { FILE: src/components/TechHubsPanel.ts constant COUNTRY_FLAGS (line 7) | const COUNTRY_FLAGS: Record = { class TechHubsPanel (line 62) | class TechHubsPanel extends Panel { method constructor (line 66) | constructor() { method setOnHubClick (line 79) | public setOnHubClick(handler: (hub: TechHubActivity) => void): void { method setActivities (line 83) | public setActivities(activities: TechHubActivity[]): void { method getFlag (line 89) | private getFlag(country: string): string { method render (line 93) | private render(): void { method bindEvents (line 134) | private bindEvents(): void { FILE: src/components/TechReadinessPanel.ts constant COUNTRY_FLAGS (line 6) | const COUNTRY_FLAGS: Record = { class TechReadinessPanel (line 21) | class TechReadinessPanel extends Panel { method constructor (line 27) | constructor() { method refresh (line 36) | public async refresh(): Promise { method showFetchingState (line 60) | private showFetchingState(): void { method getFlag (line 95) | private getFlag(countryCode: string): string { method getScoreClass (line 99) | private getScoreClass(score: number): string { method formatComponent (line 105) | private formatComponent(value: number | null): string { method render (line 110) | private render(): void { FILE: src/components/TelegramIntelPanel.ts constant LIVE_THRESHOLD_MS (line 12) | const LIVE_THRESHOLD_MS = 600_000; class TelegramIntelPanel (line 14) | class TelegramIntelPanel extends Panel { method constructor (line 20) | constructor() { method createTabs (line 33) | private createTabs(): void { method selectTopic (line 46) | private selectTopic(topicId: string): void { method setData (line 57) | public setData(response: TelegramFeedResponse & { error?: string }): v... method renderItems (line 74) | private renderItems(): void { method buildItem (line 95) | private buildItem(item: TelegramItem): HTMLElement { method refresh (line 150) | public async refresh(): Promise { method destroy (line 154) | public destroy(): void { FILE: src/components/ThermalEscalationPanel.ts constant STATUS_CLASS (line 6) | const STATUS_CLASS: Record = { constant CONFIDENCE_CLASS (line 9) | const CONFIDENCE_CLASS: Record = { class ThermalEscalationPanel (line 13) | class ThermalEscalationPanel extends Panel { method constructor (line 26) | constructor() { method setLocationClickHandler (line 45) | public setLocationClickHandler(handler: (lat: number, lon: number) => ... method setData (line 49) | public setData(data: ThermalEscalationWatch): void { method render (line 57) | private render(): void { method renderSummary (line 78) | private renderSummary(): string { method renderCard (line 110) | private renderCard(c: ThermalEscalationCluster): string { function formatAge (line 160) | function formatAge(date: Date): string { FILE: src/components/TradePolicyPanel.ts type TabId (line 16) | type TabId = 'restrictions' | 'tariffs' | 'flows' | 'barriers' | 'revenue'; class TradePolicyPanel (line 18) | class TradePolicyPanel extends Panel { method constructor (line 26) | constructor() { method updateRestrictions (line 39) | public updateRestrictions(data: GetTradeRestrictionsResponse): void { method updateTariffs (line 44) | public updateTariffs(data: GetTariffTrendsResponse): void { method updateFlows (line 49) | public updateFlows(data: GetTradeFlowsResponse): void { method updateBarriers (line 54) | public updateBarriers(data: GetTradeBarriersResponse): void { method updateRevenue (line 59) | public updateRevenue(data: GetCustomsRevenueResponse): void { method render (line 67) | private render(): void { method renderRestrictions (line 146) | private renderRestrictions(): string { method renderRestrictionsContext (line 178) | private renderRestrictionsContext(): string { method renderTariffs (line 195) | private renderTariffs(): string { method renderTariffSummary (line 228) | private renderTariffSummary(latestBaseline: TariffDataPoint | null, ef... method getLatestBaselineTariffPoint (line 279) | private getLatestBaselineTariffPoint(): TariffDataPoint | null { method getEffectiveTariffGapSummary (line 284) | private getEffectiveTariffGapSummary(): { baseline: TariffDataPoint; e... method renderRestrictionEffectiveContext (line 295) | private renderRestrictionEffectiveContext(reportingCountry: string): s... method renderFlows (line 307) | private renderFlows(): string { method renderBarriers (line 337) | private renderBarriers(): string { method renderRevenue (line 364) | private renderRevenue(): string { method renderSourceUrl (line 437) | private renderSourceUrl(url: string): string { FILE: src/components/UcdpEventsPanel.ts class UcdpEventsPanel (line 6) | class UcdpEventsPanel extends Panel { method constructor (line 11) | constructor() { method setEventClickHandler (line 38) | public setEventClickHandler(handler: (lat: number, lon: number) => voi... method setEvents (line 42) | public setEvents(events: UcdpGeoEvent[]): void { method getEvents (line 48) | public getEvents(): UcdpGeoEvent[] { method renderContent (line 52) | private renderContent(): void { FILE: src/components/UnifiedSettings.ts constant GEAR_SVG (line 10) | const GEAR_SVG = ` { method renderPanelCategoryPills (line 329) | private renderPanelCategoryPills(): void { method renderPanelsTab (line 339) | private renderPanelsTab(): void { method clonePanelSettings (line 358) | private clonePanelSettings(source: Record = this.... method resetPanelDraft (line 364) | private resetPanelDraft(): void { method hasPendingPanelChanges (line 369) | private hasPendingPanelChanges(): boolean { method toggleDraftPanel (line 374) | private toggleDraftPanel(key: string): void { method savePanelChanges (line 382) | private savePanelChanges(): void { method updatePanelsFooter (line 396) | private updatePanelsFooter(): void { method getAvailableRegions (line 411) | private getAvailableRegions(): Array<{ key: string; label: string }> { method getSourcesByRegion (line 433) | private getSourcesByRegion(): Map { method getVisibleSourceNames (line 456) | private getVisibleSourceNames(): string[] { method renderRegionPills (line 473) | private renderRegionPills(): void { method renderSourcesGrid (line 483) | private renderSourcesGrid(): void { method updateSourcesCounter (line 502) | private updateSourcesCounter(): void { FILE: src/components/VerificationChecklist.ts type VerificationCheck (line 4) | interface VerificationCheck { type VerificationResult (line 11) | interface VerificationResult { function getVerificationTemplate (line 18) | function getVerificationTemplate(): VerificationCheck[] { class VerificationChecklist (line 31) | class VerificationChecklist extends Component { method toggleCheck (line 36) | private toggleCheck(id: string): void { method addNote (line 43) | private addNote(): void { method calculateResult (line 51) | private calculateResult(): VerificationResult { method reset (line 64) | private reset(): void { method render (line 71) | render() { FILE: src/components/VirtualList.ts type VirtualListOptions (line 6) | interface VirtualListOptions { type PooledElement (line 19) | interface PooledElement { class VirtualList (line 24) | class VirtualList { method constructor (line 44) | constructor(options: VirtualListOptions) { method setItemCount (line 86) | setItemCount(count: number): void { method refresh (line 95) | refresh(): void { method scrollToIndex (line 106) | scrollToIndex(index: number, behavior: ScrollBehavior = 'auto'): void { method getViewport (line 114) | getViewport(): HTMLElement { method destroy (line 121) | destroy(): void { method updateLayout (line 146) | private updateLayout(): void { method updateVisibleRange (line 151) | private updateVisibleRange(): void { method ensurePoolSize (line 225) | private ensurePoolSize(count: number): void { type WindowedListOptions (line 250) | interface WindowedListOptions { class WindowedList (line 259) | class WindowedList { method constructor (line 271) | constructor( method setItems (line 289) | setItems(items: T[]): void { method refresh (line 325) | refresh(): void { method getVisibleChunks (line 342) | private getVisibleChunks(): number[] { method updateVisibleChunks (line 364) | private updateVisibleChunks(): void { method renderChunk (line 381) | private renderChunk(chunkIndex: number): void { method destroy (line 401) | destroy(): void { FILE: src/components/WidgetChatModal.ts type WidgetChatOptions (line 8) | interface WidgetChatOptions { type PreviewPhase (line 15) | type PreviewPhase = 'checking' | 'ready_to_prompt' | 'fetching' | 'compo... type WidgetAgentHealth (line 16) | type WidgetAgentHealth = { constant EXAMPLE_PROMPT_KEYS (line 25) | const EXAMPLE_PROMPT_KEYS = [ constant PRO_EXAMPLE_PROMPT_KEYS (line 32) | const PRO_EXAMPLE_PROMPT_KEYS = [ function openWidgetChatModal (line 43) | function openWidgetChatModal(options: WidgetChatOptions): void { function closeWidgetChatModal (line 339) | function closeWidgetChatModal(): void { function renderExampleChips (line 350) | function renderExampleChips(container: HTMLElement, inputEl: HTMLTextAre... function resolvePreflightMessage (line 366) | function resolvePreflightMessage(status: number, payload: WidgetAgentHea... function setReadinessState (line 373) | function setReadinessState(container: HTMLElement, tone: 'checking' | 'r... function setFooterStatus (line 378) | function setFooterStatus(container: HTMLElement, text: string, tone: 'mu... function renderPreviewState (line 383) | function renderPreviewState(container: HTMLElement, phase: PreviewPhase,... function renderPreviewHtml (line 416) | function renderPreviewHtml( function getPhaseLabel (line 445) | function getPhaseLabel(phase: PreviewPhase): string { function getPreviewHeading (line 456) | function getPreviewHeading(phase: PreviewPhase): string { function getPreviewCopy (line 467) | function getPreviewCopy(phase: PreviewPhase): string { function appendMessage (line 478) | function appendMessage(container: HTMLElement, role: 'user' | 'assistant... FILE: src/components/WorldClockPanel.ts type CityEntry (line 4) | interface CityEntry { constant WORLD_CITIES (line 13) | const WORLD_CITIES: CityEntry[] = [ constant CITY_REGIONS (line 46) | const CITY_REGIONS: { name: string; ids: string[] }[] = [ constant TIMEZONE_TO_CITY (line 53) | const TIMEZONE_TO_CITY: Record = {}; constant STORAGE_KEY (line 66) | const STORAGE_KEY = 'worldmonitor-world-clock-cities'; constant DEFAULT_CITIES (line 67) | const DEFAULT_CITIES = ['new-york', 'london', 'dubai', 'bangkok', 'tokyo... function detectHomeCity (line 69) | function detectHomeCity(): string | null { function loadSelectedCities (line 78) | function loadSelectedCities(): string[] { function saveSelectedCities (line 92) | function saveSelectedCities(ids: string[]): void { function getTimeInZone (line 96) | function getTimeInZone(tz: string): { h: number; m: number; s: number; d... function getTzAbbr (line 118) | function getTzAbbr(tz: string): string { function pad2 (line 129) | function pad2(n: number): string { class WorldClockPanel (line 135) | class WorldClockPanel extends Panel { method constructor (line 145) | constructor() { method toggleSettings (line 180) | private toggleSettings(): void { method renderSettings (line 195) | private renderSettings(): void { method setupDragHandlers (line 211) | private setupDragHandlers(): void { method renderClocks (line 278) | private renderClocks(): void { method destroy (line 315) | destroy(): void { FILE: src/config/ai-datacenters.ts constant AI_DATA_CENTERS (line 8) | const AI_DATA_CENTERS: AIDataCenter[] = [ FILE: src/config/ai-regulations.ts constant AI_REGULATIONS (line 4) | const AI_REGULATIONS: AIRegulation[] = [ constant REGULATORY_ACTIONS (line 266) | const REGULATORY_ACTIONS: RegulatoryAction[] = [ constant COUNTRY_REGULATION_PROFILES (line 344) | const COUNTRY_REGULATION_PROFILES: CountryRegulationProfile[] = [ function getRegulationById (line 447) | function getRegulationById(id: string): AIRegulation | undefined { function getCountryProfile (line 452) | function getCountryProfile(countryCode: string): CountryRegulationProfil... function getRegulationsByCountry (line 457) | function getRegulationsByCountry(country: string): AIRegulation[] { function getUpcomingDeadlines (line 462) | function getUpcomingDeadlines(): AIRegulation[] { function getRecentActions (line 479) | function getRecentActions(months: number = 6): RegulatoryAction[] { FILE: src/config/ai-research-labs.ts constant AI_RESEARCH_LABS (line 6) | const AI_RESEARCH_LABS: AIResearchLab[] = [ FILE: src/config/airports.ts constant MONITORED_AIRPORTS (line 3) | const MONITORED_AIRPORTS: MonitoredAirport[] = [ constant FAA_AIRPORTS (line 135) | const FAA_AIRPORTS = MONITORED_AIRPORTS.filter( constant AVIATIONSTACK_AIRPORTS (line 141) | const AVIATIONSTACK_AIRPORTS: string[] = [ constant DELAY_SEVERITY_THRESHOLDS (line 157) | const DELAY_SEVERITY_THRESHOLDS = { FILE: src/config/basemap.ts constant R2_PROXY (line 6) | const R2_PROXY = import.meta.env.VITE_PMTILES_URL ?? ''; constant R2_PUBLIC (line 7) | const R2_PUBLIC = import.meta.env.VITE_PMTILES_URL_PUBLIC ?? ''; constant R2_BASE (line 9) | const R2_BASE = isTauri && R2_PUBLIC ? R2_PUBLIC : R2_PROXY; function registerPMTilesProtocol (line 15) | function registerPMTilesProtocol(): void { type PMTilesTheme (line 22) | type PMTilesTheme = 'black' | 'dark' | 'grayscale' | 'light' | 'white'; type OpenFreeMapTheme (line 23) | type OpenFreeMapTheme = 'dark' | 'positron'; type CartoTheme (line 24) | type CartoTheme = 'dark-matter' | 'voyager' | 'positron'; function buildPMTilesStyle (line 26) | function buildPMTilesStyle(flavor: PMTilesTheme): StyleSpecification | n... constant FALLBACK_DARK_STYLE (line 44) | const FALLBACK_DARK_STYLE = 'https://tiles.openfreemap.org/styles/dark'; constant FALLBACK_LIGHT_STYLE (line 45) | const FALLBACK_LIGHT_STYLE = 'https://tiles.openfreemap.org/styles/posit... type MapProvider (line 47) | type MapProvider = 'auto' | 'pmtiles' | 'openfreemap' | 'carto'; constant STORAGE_KEY (line 49) | const STORAGE_KEY = 'wm-map-provider'; constant THEME_STORAGE_PREFIX (line 50) | const THEME_STORAGE_PREFIX = 'wm-map-theme:'; constant MAP_PROVIDER_OPTIONS (line 54) | const MAP_PROVIDER_OPTIONS: { value: MapProvider; label: string }[] = ((... constant PMTILES_THEMES (line 65) | const PMTILES_THEMES: { value: string; label: string }[] = [ constant MAP_THEME_OPTIONS (line 73) | const MAP_THEME_OPTIONS: Record = { function getMapProvider (line 94) | function getMapProvider(): MapProvider { function setMapProvider (line 105) | function setMapProvider(provider: MapProvider): void { function getMapTheme (line 109) | function getMapTheme(provider: MapProvider): string { function setMapTheme (line 116) | function setMapTheme(provider: MapProvider, theme: string): void { function isLightMapTheme (line 122) | function isLightMapTheme(mapTheme: string): boolean { constant CARTO_DARK (line 126) | const CARTO_DARK = 'https://basemaps.cartocdn.com/gl/dark-matter-gl-styl... constant CARTO_VOYAGER (line 127) | const CARTO_VOYAGER = 'https://basemaps.cartocdn.com/gl/voyager-gl-style... constant CARTO_POSITRON (line 128) | const CARTO_POSITRON = 'https://basemaps.cartocdn.com/gl/positron-gl-sty... constant CARTO_STYLES (line 130) | const CARTO_STYLES: Record = { function asPMTilesTheme (line 136) | function asPMTilesTheme(mapTheme: string): PMTilesTheme { function getStyleForProvider (line 141) | function getStyleForProvider(provider: MapProvider, mapTheme: string): S... FILE: src/config/bases-expanded.ts constant MILITARY_BASES_EXPANDED (line 13) | const MILITARY_BASES_EXPANDED: MilitaryBase[] = [ FILE: src/config/beta.ts constant BETA_MODE (line 1) | const BETA_MODE = typeof window !== 'undefined' FILE: src/config/commands.ts type Command (line 7) | interface Command { constant LAYER_PRESETS (line 15) | const LAYER_PRESETS: Record = { constant LAYER_KEY_MAP (line 24) | const LAYER_KEY_MAP: Record = { constant COMMANDS (line 34) | const COMMANDS: Command[] = [ constant ISO_CODES (line 163) | const ISO_CODES = [ constant KEYWORD_I18N_MAP (line 183) | const KEYWORD_I18N_MAP: Record = { function injectLocalizedKeywords (line 197) | function injectLocalizedKeywords(commands: Command[]): Command[] { function buildCountryCommands (line 217) | function buildCountryCommands(): Command[] { function getAllCommands (line 255) | function getAllCommands(): Command[] { FILE: src/config/commodity-geo.ts type MineralType (line 4) | type MineralType = type MineSiteStatus (line 25) | type MineSiteStatus = 'producing' | 'development' | 'care-and-maintenanc... type MineSite (line 27) | interface MineSite { type ProcessingPlant (line 43) | interface ProcessingPlant { type CommodityPort (line 59) | interface CommodityPort { constant MINING_SITES (line 75) | const MINING_SITES: MineSite[] = [ constant PROCESSING_PLANTS (line 867) | const PROCESSING_PLANTS: ProcessingPlant[] = [ constant COMMODITY_PORTS (line 1017) | const COMMODITY_PORTS: CommodityPort[] = [ FILE: src/config/commodity-markets.ts constant COMMODITY_SECTORS (line 7) | const COMMODITY_SECTORS: Sector[] = [ constant COMMODITY_PRICES (line 23) | const COMMODITY_PRICES: Commodity[] = [ constant COMMODITY_MARKET_SYMBOLS (line 46) | const COMMODITY_MARKET_SYMBOLS: MarketSymbol[] = [ FILE: src/config/commodity-miners.ts type CommodityMiner (line 4) | interface CommodityMiner { constant COMMODITY_MINERS (line 23) | const COMMODITY_MINERS: CommodityMiner[] = [ FILE: src/config/countries.ts type CuratedCountryConfig (line 1) | interface CuratedCountryConfig { constant CURATED_COUNTRIES (line 9) | const CURATED_COUNTRIES: Record = { constant TIER1_COUNTRIES (line 229) | const TIER1_COUNTRIES: Record = { constant DEFAULT_BASELINE_RISK (line 263) | const DEFAULT_BASELINE_RISK = 15; constant DEFAULT_EVENT_MULTIPLIER (line 264) | const DEFAULT_EVENT_MULTIPLIER = 1.0; constant HOTSPOT_COUNTRY_MAP (line 266) | const HOTSPOT_COUNTRY_MAP: Record = { function getHotspotCountries (line 276) | function getHotspotCountries(hotspotId: string): string[] { FILE: src/config/entities.ts type EntityType (line 1) | type EntityType = 'company' | 'index' | 'commodity' | 'crypto' | 'sector... type EntityEntry (line 3) | interface EntityEntry { constant ENTITY_REGISTRY (line 13) | const ENTITY_REGISTRY: EntityEntry[] = [ function getEntityById (line 633) | function getEntityById(id: string): EntityEntry | undefined { FILE: src/config/feeds.ts constant SOURCE_TIERS (line 13) | const SOURCE_TIERS: Record = { function getSourceTier (line 313) | function getSourceTier(sourceName: string): number { type SourceType (line 317) | type SourceType = 'wire' | 'gov' | 'intel' | 'mainstream' | 'market' | '... constant SOURCE_TYPES (line 319) | const SOURCE_TYPES: Record = { function getSourceType (line 399) | function getSourceType(sourceName: string): SourceType { type PropagandaRisk (line 407) | type PropagandaRisk = 'low' | 'medium' | 'high'; type SourceRiskProfile (line 409) | interface SourceRiskProfile { constant SOURCE_PROPAGANDA_RISK (line 416) | const SOURCE_PROPAGANDA_RISK: Record = { function getSourcePropagandaRisk (line 451) | function getSourcePropagandaRisk(sourceName: string): SourceRiskProfile { function isStateAffiliatedSource (line 455) | function isStateAffiliatedSource(sourceName: string): boolean { function getSourcePanelId (line 461) | function getSourcePanelId(sourceName: string): string { constant FULL_FEEDS (line 472) | const FULL_FEEDS: Record = { constant TECH_FEEDS (line 731) | const TECH_FEEDS: Record = { constant FINANCE_FEEDS (line 954) | const FINANCE_FEEDS: Record = { constant HAPPY_FEEDS (line 1041) | const HAPPY_FEEDS: Record = { constant COMMODITY_FEEDS (line 1084) | const COMMODITY_FEEDS: Record = { constant FEEDS (line 1175) | const FEEDS = SITE_VARIANT === 'tech' constant SOURCE_REGION_MAP (line 1185) | const SOURCE_REGION_MAP: Record = { constant DEFAULT_ENABLED_INTEL (line 1287) | const DEFAULT_ENABLED_INTEL: string[] = [ function getAllDefaultEnabledSources (line 1292) | function getAllDefaultEnabledSources(): Set { function getLocaleBoostedSources (line 1300) | function getLocaleBoostedSources(locale: string): Set { function computeDefaultDisabledSources (line 1312) | function computeDefaultDisabledSources(locale?: string): string[] { function getTotalFeedCount (line 1323) | function getTotalFeedCount(): number { constant ALERT_KEYWORDS (line 1342) | const ALERT_KEYWORDS = [ constant ALERT_EXCLUSIONS (line 1350) | const ALERT_EXCLUSIONS = [ FILE: src/config/finance-geo.ts type StockExchange (line 3) | interface StockExchange { type FinancialCenter (line 18) | interface FinancialCenter { type CentralBank (line 31) | interface CentralBank { type CommodityHub (line 44) | interface CommodityHub { constant STOCK_EXCHANGES (line 57) | const STOCK_EXCHANGES: StockExchange[] = [ constant FINANCIAL_CENTERS (line 95) | const FINANCIAL_CENTERS: FinancialCenter[] = [ constant CENTRAL_BANKS (line 123) | const CENTRAL_BANKS: CentralBank[] = [ constant COMMODITY_HUBS (line 141) | const COMMODITY_HUBS: CommodityHub[] = [ FILE: src/config/geo.ts constant INTEL_HOTSPOTS (line 7) | const INTEL_HOTSPOTS: Hotspot[] = [ constant STRATEGIC_WATERWAYS (line 500) | const STRATEGIC_WATERWAYS: StrategicWaterway[] = [ constant APT_GROUPS (line 516) | const APT_GROUPS: APTGroup[] = [ constant CONFLICT_ZONES (line 523) | const CONFLICT_ZONES: ConflictZone[] = [ constant US_DOMESTIC_BASES (line 775) | const US_DOMESTIC_BASES: MilitaryBase[] = [ function mergeAndDeduplicateBases (line 797) | function mergeAndDeduplicateBases(): MilitaryBase[] { constant MILITARY_BASES (line 821) | const MILITARY_BASES: MilitaryBase[] = mergeAndDeduplicateBases(); constant UNDERSEA_CABLES (line 825) | const UNDERSEA_CABLES: UnderseaCable[] = [ constant NUCLEAR_FACILITIES (line 3025) | const NUCLEAR_FACILITIES: NuclearFacility[] = [ constant SANCTIONED_COUNTRIES (line 3165) | const SANCTIONED_COUNTRIES: Record = { constant VARIANT_LAYER_ORDER (line 85) | const VARIANT_LAYER_ORDER: Record> = { constant SVG_ONLY_LAYERS (line 119) | const SVG_ONLY_LAYERS: Partial... constant I18N_PREFIX (line 125) | const I18N_PREFIX = 'components.deckgl.layers.'; function getLayersForVariant (line 127) | function getLayersForVariant(variant: MapVariant, renderer: MapRenderer)... function getAllowedLayerKeys (line 134) | function getAllowedLayerKeys(variant: MapVariant): Set { function sanitizeLayersForVariant (line 140) | function sanitizeLayersForVariant(layers: MapLayers, variant: MapVariant... constant LAYER_SYNONYMS (line 149) | const LAYER_SYNONYMS: Record> = { function resolveLayerLabel (line 222) | function resolveLayerLabel(def: LayerDefinition, tFn?: (key: string) => ... function bindLayerSearch (line 230) | function bindLayerSearch(container: HTMLElement): void { FILE: src/config/markets.ts constant SECTORS (line 7) | const SECTORS: Sector[] = sectorConfig.sectors as Sector[]; constant COMMODITIES (line 9) | const COMMODITIES: Commodity[] = commodityConfig.commodities as Commodit... constant MARKET_SYMBOLS (line 11) | const MARKET_SYMBOLS: MarketSymbol[] = stocksConfig.symbols as MarketSym... constant CRYPTO_IDS (line 13) | const CRYPTO_IDS = cryptoConfig.ids as readonly string[]; constant CRYPTO_MAP (line 14) | const CRYPTO_MAP: Record = cry... FILE: src/config/military.ts type CallsignPattern (line 7) | interface CallsignPattern { constant US_MILITARY_CALLSIGNS (line 15) | const US_MILITARY_CALLSIGNS: CallsignPattern[] = [ constant NATO_ALLIED_CALLSIGNS (line 74) | const NATO_ALLIED_CALLSIGNS: CallsignPattern[] = [ constant ADVERSARY_CALLSIGNS (line 151) | const ADVERSARY_CALLSIGNS: CallsignPattern[] = [ constant ALL_MILITARY_CALLSIGNS (line 164) | const ALL_MILITARY_CALLSIGNS: CallsignPattern[] = [ constant MILITARY_AIRCRAFT_TYPES (line 174) | const MILITARY_AIRCRAFT_TYPES: Record = { function normalizeUSNIRegion (line 578) | function normalizeUSNIRegion(regionText: string): string { function getUSNIRegionCoords (line 585) | function getUSNIRegionCoords(regionText: string): { lat: number; lon: nu... function getUSNIRegionApproxCoords (line 597) | function getUSNIRegionApproxCoords(regionText: string): { lat: number; l... function identifyByCallsign (line 625) | function identifyByCallsign(callsign: string, originCountry?: string): C... function identifyByAircraftType (line 651) | function identifyByAircraftType(typeCode: string): { type: MilitaryAircr... function isKnownMilitaryHex (line 659) | function isKnownMilitaryHex(hexCode: string): { operator: MilitaryOperat... function getNearbyHotspot (line 672) | function getNearbyHotspot(lat: number, lon: number): typeof MILITARY_HOT... FILE: src/config/ml-config.ts type ModelConfig (line 6) | interface ModelConfig { constant MODEL_CONFIGS (line 16) | const MODEL_CONFIGS: ModelConfig[] = [ constant ML_FEATURE_FLAGS (line 64) | const ML_FEATURE_FLAGS = { constant ML_THRESHOLDS (line 72) | const ML_THRESHOLDS = { function getModelConfig (line 81) | function getModelConfig(modelId: string): ModelConfig | undefined { function getRequiredModels (line 85) | function getRequiredModels(): ModelConfig[] { function getModelsByPriority (line 89) | function getModelsByPriority(): ModelConfig[] { FILE: src/config/panels.ts constant FULL_PANELS (line 13) | const FULL_PANELS: Record = { constant FULL_MAP_LAYERS (line 75) | const FULL_MAP_LAYERS: MapLayers = { constant FULL_MOBILE_MAP_LAYERS (line 137) | const FULL_MOBILE_MAP_LAYERS: MapLayers = { constant TECH_PANELS (line 202) | const TECH_PANELS: Record = { constant TECH_MAP_LAYERS (line 242) | const TECH_MAP_LAYERS: MapLayers = { constant TECH_MOBILE_MAP_LAYERS (line 303) | const TECH_MOBILE_MAP_LAYERS: MapLayers = { constant FINANCE_PANELS (line 367) | const FINANCE_PANELS: Record = { constant FINANCE_MAP_LAYERS (line 410) | const FINANCE_MAP_LAYERS: MapLayers = { constant FINANCE_MOBILE_MAP_LAYERS (line 471) | const FINANCE_MOBILE_MAP_LAYERS: MapLayers = { constant HAPPY_PANELS (line 535) | const HAPPY_PANELS: Record = { constant HAPPY_MAP_LAYERS (line 548) | const HAPPY_MAP_LAYERS: MapLayers = { constant HAPPY_MOBILE_MAP_LAYERS (line 609) | const HAPPY_MOBILE_MAP_LAYERS: MapLayers = { constant COMMODITY_PANELS (line 673) | const COMMODITY_PANELS: Record = { constant COMMODITY_MAP_LAYERS (line 702) | const COMMODITY_MAP_LAYERS: MapLayers = { constant COMMODITY_MOBILE_MAP_LAYERS (line 763) | const COMMODITY_MOBILE_MAP_LAYERS: MapLayers = { constant DEFAULT_PANELS (line 827) | const DEFAULT_PANELS = SITE_VARIANT === 'happy' constant DEFAULT_MAP_LAYERS (line 837) | const DEFAULT_MAP_LAYERS = SITE_VARIANT === 'happy' constant MOBILE_DEFAULT_MAP_LAYERS (line 847) | const MOBILE_DEFAULT_MAP_LAYERS = SITE_VARIANT === 'happy' constant LAYER_TO_SOURCE (line 858) | const LAYER_TO_SOURCE: Partial> = { constant PANEL_CATEGORY_MAP (line 880) | const PANEL_CATEGORY_MAP: Record = { function getPipelineStatusColor (line 1023) | function getPipelineStatusColor(status: string): string { constant PIPELINE_STATUS_COLORS (line 1032) | const PIPELINE_STATUS_COLORS: Record = { FILE: src/config/ports.ts constant PORTS (line 4) | const PORTS: Port[] = [ function getPortsByType (line 78) | function getPortsByType(type: PortType): Port[] { function getTopContainerPorts (line 82) | function getTopContainerPorts(limit = 20): Port[] { FILE: src/config/startup-ecosystems.ts constant STARTUP_ECOSYSTEMS (line 6) | const STARTUP_ECOSYSTEMS: StartupEcosystem[] = [ FILE: src/config/tech-companies.ts constant TECH_COMPANIES (line 6) | const TECH_COMPANIES: TechCompany[] = [ FILE: src/config/tech-geo.ts type StartupHub (line 1) | interface StartupHub { type Accelerator (line 13) | interface Accelerator { type CloudRegion (line 28) | interface CloudRegion { constant STARTUP_HUBS (line 39) | const STARTUP_HUBS: StartupHub[] = [ constant ACCELERATORS (line 81) | const ACCELERATORS: Accelerator[] = [ constant TECH_HQS (line 243) | const TECH_HQS: TechHQ[] = [ constant CLOUD_REGIONS (line 600) | const CLOUD_REGIONS: CloudRegion[] = [ FILE: src/config/trade-routes.ts type TradeRouteCategory (line 4) | type TradeRouteCategory = 'container' | 'energy' | 'bulk'; type TradeRouteStatus (line 5) | type TradeRouteStatus = 'active' | 'disrupted' | 'high_risk'; type TradeRoute (line 7) | interface TradeRoute { type TradeRouteSegment (line 18) | interface TradeRouteSegment { constant TRADE_ROUTES (line 30) | const TRADE_ROUTES: TradeRoute[] = [ function resolveTradeRouteSegments (line 243) | function resolveTradeRouteSegments(): TradeRouteSegment[] { function getChokepointRoutes (line 296) | function getChokepointRoutes(waterwayId: string): TradeRoute[] { FILE: src/config/variant-meta.ts type VariantMeta (line 1) | interface VariantMeta { constant VARIANT_META (line 14) | const VARIANT_META: { full: VariantMeta; [k: string]: VariantMeta } = { FILE: src/config/variant.ts constant SITE_VARIANT (line 9) | const SITE_VARIANT: string = (() => { FILE: src/config/variants/base.ts constant IDLE_PAUSE_MS (line 10) | const IDLE_PAUSE_MS = 5 * 60 * 1000; constant REFRESH_INTERVALS (line 13) | const REFRESH_INTERVALS = { constant MONITOR_COLORS (line 51) | const MONITOR_COLORS = [ constant STORAGE_KEYS (line 65) | const STORAGE_KEYS = { type VariantConfig (line 77) | interface VariantConfig { FILE: src/config/variants/commodity.ts constant DEFAULT_PANELS (line 16) | const DEFAULT_PANELS: Record = { constant DEFAULT_MAP_LAYERS (line 51) | const DEFAULT_MAP_LAYERS: MapLayers = { constant MOBILE_DEFAULT_MAP_LAYERS (line 124) | const MOBILE_DEFAULT_MAP_LAYERS: MapLayers = { constant VARIANT_CONFIG (line 184) | const VARIANT_CONFIG: VariantConfig = { FILE: src/config/variants/finance.ts constant FEEDS (line 28) | const FEEDS: Record = { constant DEFAULT_PANELS (line 143) | const DEFAULT_PANELS: Record = { constant DEFAULT_MAP_LAYERS (line 175) | const DEFAULT_MAP_LAYERS: MapLayers = { constant MOBILE_DEFAULT_MAP_LAYERS (line 236) | const MOBILE_DEFAULT_MAP_LAYERS: MapLayers = { constant VARIANT_CONFIG (line 296) | const VARIANT_CONFIG: VariantConfig = { FILE: src/config/variants/full.ts constant DEFAULT_PANELS (line 19) | const DEFAULT_PANELS: Record = { constant DEFAULT_MAP_LAYERS (line 54) | const DEFAULT_MAP_LAYERS: MapLayers = { constant MOBILE_DEFAULT_MAP_LAYERS (line 115) | const MOBILE_DEFAULT_MAP_LAYERS: MapLayers = { constant VARIANT_CONFIG (line 175) | const VARIANT_CONFIG: VariantConfig = { FILE: src/config/variants/happy.ts constant DEFAULT_PANELS (line 9) | const DEFAULT_PANELS: Record = { constant DEFAULT_MAP_LAYERS (line 22) | const DEFAULT_MAP_LAYERS: MapLayers = { constant MOBILE_DEFAULT_MAP_LAYERS (line 84) | const MOBILE_DEFAULT_MAP_LAYERS: MapLayers = { constant VARIANT_CONFIG (line 145) | const VARIANT_CONFIG: VariantConfig = { FILE: src/config/variants/tech.ts constant FEEDS (line 31) | const FEEDS: Record = { constant DEFAULT_PANELS (line 187) | const DEFAULT_PANELS: Record = { constant DEFAULT_MAP_LAYERS (line 215) | const DEFAULT_MAP_LAYERS: MapLayers = { constant MOBILE_DEFAULT_MAP_LAYERS (line 277) | const MOBILE_DEFAULT_MAP_LAYERS: MapLayers = { constant VARIANT_CONFIG (line 337) | const VARIANT_CONFIG: VariantConfig = { FILE: src/e2e/map-harness.ts type Scenario (line 50) | type Scenario = 'alpha' | 'beta'; type HarnessVariant (line 51) | type HarnessVariant = 'full' | 'tech' | 'finance'; type HarnessLayerKey (line 52) | type HarnessLayerKey = keyof MapLayers; type PulseProtestScenario (line 53) | type PulseProtestScenario = type NewsPulseScenario (line 58) | type NewsPulseScenario = 'none' | 'recent' | 'stale'; type LayerSnapshot (line 60) | type LayerSnapshot = { type OverlaySnapshot (line 65) | type OverlaySnapshot = { type CameraState (line 73) | type CameraState = { type VisualScenario (line 79) | type VisualScenario = { type VisualScenarioSummary (line 89) | type VisualScenarioSummary = { type MapHarness (line 94) | type MapHarness = { type Window (line 123) | interface Window { constant SEEDED_NEWS_LOCATIONS (line 250) | const SEEDED_NEWS_LOCATIONS: Array<{ constant DETERMINISTIC_BODY_CLASS (line 273) | const DETERMINISTIC_BODY_CLASS = 'e2e-deterministic'; constant VISUAL_SCENARIOS (line 457) | const VISUAL_SCENARIOS: VisualScenario[] = [ constant DETERMINISTIC_STYLE_ID (line 1132) | const DETERMINISTIC_STYLE_ID = 'e2e-deterministic-style'; constant STYLE_READY_FALLBACK_MS (line 1240) | const STYLE_READY_FALLBACK_MS = 12_000; method ready (line 1263) | get ready() { FILE: src/e2e/mobile-map-harness.ts type MobileMapHarness (line 5) | type MobileMapHarness = { type Window (line 24) | interface Window { FILE: src/e2e/mobile-map-integration-harness.ts type MobileMapIntegrationHarness (line 5) | type MobileMapIntegrationHarness = { type Window (line 20) | interface Window { constant MINIMAL_WORLD_TOPOLOGY (line 39) | const MINIMAL_WORLD_TOPOLOGY = { method ready (line 213) | get ready() { FILE: src/generated/client/worldmonitor/aviation/v1/service_client.ts type ListAirportDelaysRequest (line 5) | interface ListAirportDelaysRequest { type ListAirportDelaysResponse (line 12) | interface ListAirportDelaysResponse { type AirportDelayAlert (line 17) | interface AirportDelayAlert { type GeoCoordinates (line 37) | interface GeoCoordinates { type PaginationResponse (line 42) | interface PaginationResponse { type GetAirportOpsSummaryRequest (line 47) | interface GetAirportOpsSummaryRequest { type GetAirportOpsSummaryResponse (line 51) | interface GetAirportOpsSummaryResponse { type AirportOpsSummary (line 56) | interface AirportOpsSummary { type ListAirportFlightsRequest (line 73) | interface ListAirportFlightsRequest { type ListAirportFlightsResponse (line 79) | interface ListAirportFlightsResponse { type FlightInstance (line 86) | interface FlightInstance { type Carrier (line 111) | interface Carrier { type AirportRef (line 117) | interface AirportRef { type GetCarrierOpsRequest (line 124) | interface GetCarrierOpsRequest { type GetCarrierOpsResponse (line 129) | interface GetCarrierOpsResponse { type CarrierOpsSummary (line 135) | interface CarrierOpsSummary { type GetFlightStatusRequest (line 147) | interface GetFlightStatusRequest { type GetFlightStatusResponse (line 153) | interface GetFlightStatusResponse { type TrackAircraftRequest (line 159) | interface TrackAircraftRequest { type TrackAircraftResponse (line 168) | interface TrackAircraftResponse { type PositionSample (line 174) | interface PositionSample { type SearchFlightPricesRequest (line 188) | interface SearchFlightPricesRequest { type SearchFlightPricesResponse (line 201) | interface SearchFlightPricesResponse { type PriceQuote (line 209) | interface PriceQuote { type ListAviationNewsRequest (line 229) | interface ListAviationNewsRequest { type ListAviationNewsResponse (line 235) | interface ListAviationNewsResponse { type AviationNewsItem (line 241) | interface AviationNewsItem { type AirportRegion (line 252) | type AirportRegion = "AIRPORT_REGION_UNSPECIFIED" | "AIRPORT_REGION_AMER... type CabinClass (line 254) | type CabinClass = "CABIN_CLASS_UNSPECIFIED" | "CABIN_CLASS_ECONOMY" | "C... type FlightDelaySeverity (line 256) | type FlightDelaySeverity = "FLIGHT_DELAY_SEVERITY_UNSPECIFIED" | "FLIGHT... type FlightDelaySource (line 258) | type FlightDelaySource = "FLIGHT_DELAY_SOURCE_UNSPECIFIED" | "FLIGHT_DEL... type FlightDelayType (line 260) | type FlightDelayType = "FLIGHT_DELAY_TYPE_UNSPECIFIED" | "FLIGHT_DELAY_T... type FlightDirection (line 262) | type FlightDirection = "FLIGHT_DIRECTION_UNSPECIFIED" | "FLIGHT_DIRECTIO... type FlightInstanceStatus (line 264) | type FlightInstanceStatus = "FLIGHT_INSTANCE_STATUS_UNSPECIFIED" | "FLIG... type PositionSource (line 266) | type PositionSource = "POSITION_SOURCE_UNSPECIFIED" | "POSITION_SOURCE_O... type FieldViolation (line 268) | interface FieldViolation { class ValidationError (line 273) | class ValidationError extends Error { method constructor (line 276) | constructor(violations: FieldViolation[]) { class ApiError (line 283) | class ApiError extends Error { method constructor (line 287) | constructor(statusCode: number, message: string, body: string) { type AviationServiceClientOptions (line 295) | interface AviationServiceClientOptions { type AviationServiceCallOptions (line 300) | interface AviationServiceCallOptions { class AviationServiceClient (line 305) | class AviationServiceClient { method constructor (line 310) | constructor(baseURL: string, options?: AviationServiceClientOptions) { method listAirportDelays (line 316) | async listAirportDelays(req: ListAirportDelaysRequest, options?: Aviat... method getAirportOpsSummary (line 344) | async getAirportOpsSummary(req: GetAirportOpsSummaryRequest, options?:... method listAirportFlights (line 369) | async listAirportFlights(req: ListAirportFlightsRequest, options?: Avi... method getCarrierOps (line 396) | async getCarrierOps(req: GetCarrierOpsRequest, options?: AviationServi... method getFlightStatus (line 422) | async getFlightStatus(req: GetFlightStatusRequest, options?: AviationS... method trackAircraft (line 449) | async trackAircraft(req: TrackAircraftRequest, options?: AviationServi... method searchFlightPrices (line 479) | async searchFlightPrices(req: SearchFlightPricesRequest, options?: Avi... method listAviationNews (line 513) | async listAviationNews(req: ListAviationNewsRequest, options?: Aviatio... method handleError (line 540) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/climate/v1/service_client.ts type ListClimateAnomaliesRequest (line 5) | interface ListClimateAnomaliesRequest { type ListClimateAnomaliesResponse (line 11) | interface ListClimateAnomaliesResponse { type ClimateAnomaly (line 16) | interface ClimateAnomaly { type GeoCoordinates (line 26) | interface GeoCoordinates { type PaginationResponse (line 31) | interface PaginationResponse { type AnomalySeverity (line 36) | type AnomalySeverity = "ANOMALY_SEVERITY_UNSPECIFIED" | "ANOMALY_SEVERIT... type AnomalyType (line 38) | type AnomalyType = "ANOMALY_TYPE_UNSPECIFIED" | "ANOMALY_TYPE_WARM" | "A... type FieldViolation (line 40) | interface FieldViolation { class ValidationError (line 45) | class ValidationError extends Error { method constructor (line 48) | constructor(violations: FieldViolation[]) { class ApiError (line 55) | class ApiError extends Error { method constructor (line 59) | constructor(statusCode: number, message: string, body: string) { type ClimateServiceClientOptions (line 67) | interface ClimateServiceClientOptions { type ClimateServiceCallOptions (line 72) | interface ClimateServiceCallOptions { class ClimateServiceClient (line 77) | class ClimateServiceClient { method constructor (line 82) | constructor(baseURL: string, options?: ClimateServiceClientOptions) { method listClimateAnomalies (line 88) | async listClimateAnomalies(req: ListClimateAnomaliesRequest, options?:... method handleError (line 115) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/conflict/v1/service_client.ts type ListAcledEventsRequest (line 5) | interface ListAcledEventsRequest { type ListAcledEventsResponse (line 13) | interface ListAcledEventsResponse { type AcledConflictEvent (line 18) | interface AcledConflictEvent { type GeoCoordinates (line 30) | interface GeoCoordinates { type PaginationResponse (line 35) | interface PaginationResponse { type ListUcdpEventsRequest (line 40) | interface ListUcdpEventsRequest { type ListUcdpEventsResponse (line 48) | interface ListUcdpEventsResponse { type UcdpViolenceEvent (line 53) | interface UcdpViolenceEvent { type GetHumanitarianSummaryRequest (line 68) | interface GetHumanitarianSummaryRequest { type GetHumanitarianSummaryResponse (line 72) | interface GetHumanitarianSummaryResponse { type HumanitarianCountrySummary (line 76) | interface HumanitarianCountrySummary { type ListIranEventsRequest (line 87) | interface ListIranEventsRequest { type ListIranEventsResponse (line 90) | interface ListIranEventsResponse { type IranEvent (line 95) | interface IranEvent { type GetHumanitarianSummaryBatchRequest (line 107) | interface GetHumanitarianSummaryBatchRequest { type GetHumanitarianSummaryBatchResponse (line 111) | interface GetHumanitarianSummaryBatchResponse { type UcdpViolenceType (line 117) | type UcdpViolenceType = "UCDP_VIOLENCE_TYPE_UNSPECIFIED" | "UCDP_VIOLENC... type FieldViolation (line 119) | interface FieldViolation { class ValidationError (line 124) | class ValidationError extends Error { method constructor (line 127) | constructor(violations: FieldViolation[]) { class ApiError (line 134) | class ApiError extends Error { method constructor (line 138) | constructor(statusCode: number, message: string, body: string) { type ConflictServiceClientOptions (line 146) | interface ConflictServiceClientOptions { type ConflictServiceCallOptions (line 151) | interface ConflictServiceCallOptions { class ConflictServiceClient (line 156) | class ConflictServiceClient { method constructor (line 161) | constructor(baseURL: string, options?: ConflictServiceClientOptions) { method listAcledEvents (line 167) | async listAcledEvents(req: ListAcledEventsRequest, options?: ConflictS... method listUcdpEvents (line 196) | async listUcdpEvents(req: ListUcdpEventsRequest, options?: ConflictSer... method getHumanitarianSummary (line 225) | async getHumanitarianSummary(req: GetHumanitarianSummaryRequest, optio... method listIranEvents (line 250) | async listIranEvents(req: ListIranEventsRequest, options?: ConflictSer... method getHumanitarianSummaryBatch (line 273) | async getHumanitarianSummaryBatch(req: GetHumanitarianSummaryBatchRequ... method handleError (line 297) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/cyber/v1/service_client.ts type ListCyberThreatsRequest (line 5) | interface ListCyberThreatsRequest { type ListCyberThreatsResponse (line 15) | interface ListCyberThreatsResponse { type CyberThreat (line 20) | interface CyberThreat { type GeoCoordinates (line 35) | interface GeoCoordinates { type PaginationResponse (line 40) | interface PaginationResponse { type CriticalityLevel (line 45) | type CriticalityLevel = "CRITICALITY_LEVEL_UNSPECIFIED" | "CRITICALITY_L... type CyberThreatIndicatorType (line 47) | type CyberThreatIndicatorType = "CYBER_THREAT_INDICATOR_TYPE_UNSPECIFIED... type CyberThreatSource (line 49) | type CyberThreatSource = "CYBER_THREAT_SOURCE_UNSPECIFIED" | "CYBER_THRE... type CyberThreatType (line 51) | type CyberThreatType = "CYBER_THREAT_TYPE_UNSPECIFIED" | "CYBER_THREAT_T... type FieldViolation (line 53) | interface FieldViolation { class ValidationError (line 58) | class ValidationError extends Error { method constructor (line 61) | constructor(violations: FieldViolation[]) { class ApiError (line 68) | class ApiError extends Error { method constructor (line 72) | constructor(statusCode: number, message: string, body: string) { type CyberServiceClientOptions (line 80) | interface CyberServiceClientOptions { type CyberServiceCallOptions (line 85) | interface CyberServiceCallOptions { class CyberServiceClient (line 90) | class CyberServiceClient { method constructor (line 95) | constructor(baseURL: string, options?: CyberServiceClientOptions) { method listCyberThreats (line 101) | async listCyberThreats(req: ListCyberThreatsRequest, options?: CyberSe... method handleError (line 132) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/displacement/v1/service_client.ts type GetDisplacementSummaryRequest (line 5) | interface GetDisplacementSummaryRequest { type GetDisplacementSummaryResponse (line 11) | interface GetDisplacementSummaryResponse { type DisplacementSummary (line 15) | interface DisplacementSummary { type GlobalDisplacementTotals (line 22) | interface GlobalDisplacementTotals { type CountryDisplacement (line 30) | interface CountryDisplacement { type GeoCoordinates (line 44) | interface GeoCoordinates { type DisplacementFlow (line 49) | interface DisplacementFlow { type GetPopulationExposureRequest (line 59) | interface GetPopulationExposureRequest { type GetPopulationExposureResponse (line 66) | interface GetPopulationExposureResponse { type CountryPopulationEntry (line 72) | interface CountryPopulationEntry { type ExposureResult (line 79) | interface ExposureResult { type FieldViolation (line 86) | interface FieldViolation { class ValidationError (line 91) | class ValidationError extends Error { method constructor (line 94) | constructor(violations: FieldViolation[]) { class ApiError (line 101) | class ApiError extends Error { method constructor (line 105) | constructor(statusCode: number, message: string, body: string) { type DisplacementServiceClientOptions (line 113) | interface DisplacementServiceClientOptions { type DisplacementServiceCallOptions (line 118) | interface DisplacementServiceCallOptions { class DisplacementServiceClient (line 123) | class DisplacementServiceClient { method constructor (line 128) | constructor(baseURL: string, options?: DisplacementServiceClientOption... method getDisplacementSummary (line 134) | async getDisplacementSummary(req: GetDisplacementSummaryRequest, optio... method getPopulationExposure (line 161) | async getPopulationExposure(req: GetPopulationExposureRequest, options... method handleError (line 189) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/economic/v1/service_client.ts type GetFredSeriesRequest (line 5) | interface GetFredSeriesRequest { type GetFredSeriesResponse (line 10) | interface GetFredSeriesResponse { type FredSeries (line 14) | interface FredSeries { type FredObservation (line 22) | interface FredObservation { type ListWorldBankIndicatorsRequest (line 27) | interface ListWorldBankIndicatorsRequest { type ListWorldBankIndicatorsResponse (line 35) | interface ListWorldBankIndicatorsResponse { type WorldBankCountryData (line 40) | interface WorldBankCountryData { type PaginationResponse (line 49) | interface PaginationResponse { type GetEnergyPricesRequest (line 54) | interface GetEnergyPricesRequest { type GetEnergyPricesResponse (line 58) | interface GetEnergyPricesResponse { type EnergyPrice (line 62) | interface EnergyPrice { type GetMacroSignalsRequest (line 71) | interface GetMacroSignalsRequest { type GetMacroSignalsResponse (line 74) | interface GetMacroSignalsResponse { type MacroSignals (line 84) | interface MacroSignals { type LiquiditySignal (line 94) | interface LiquiditySignal { type FlowStructureSignal (line 100) | interface FlowStructureSignal { type MacroRegimeSignal (line 106) | interface MacroRegimeSignal { type TechnicalTrendSignal (line 112) | interface TechnicalTrendSignal { type HashRateSignal (line 122) | interface HashRateSignal { type PriceMomentumSignal (line 127) | interface PriceMomentumSignal { type FearGreedSignal (line 131) | interface FearGreedSignal { type FearGreedHistoryEntry (line 137) | interface FearGreedHistoryEntry { type MacroMeta (line 142) | interface MacroMeta { type GetEnergyCapacityRequest (line 146) | interface GetEnergyCapacityRequest { type GetEnergyCapacityResponse (line 151) | interface GetEnergyCapacityResponse { type EnergyCapacitySeries (line 155) | interface EnergyCapacitySeries { type EnergyCapacityYear (line 161) | interface EnergyCapacityYear { type GetBisPolicyRatesRequest (line 166) | interface GetBisPolicyRatesRequest { type GetBisPolicyRatesResponse (line 169) | interface GetBisPolicyRatesResponse { type BisPolicyRate (line 173) | interface BisPolicyRate { type GetBisExchangeRatesRequest (line 182) | interface GetBisExchangeRatesRequest { type GetBisExchangeRatesResponse (line 185) | interface GetBisExchangeRatesResponse { type BisExchangeRate (line 189) | interface BisExchangeRate { type GetBisCreditRequest (line 198) | interface GetBisCreditRequest { type GetBisCreditResponse (line 201) | interface GetBisCreditResponse { type BisCreditToGdp (line 205) | interface BisCreditToGdp { type GetFredSeriesBatchRequest (line 213) | interface GetFredSeriesBatchRequest { type GetFredSeriesBatchResponse (line 218) | interface GetFredSeriesBatchResponse { type FieldViolation (line 224) | interface FieldViolation { class ValidationError (line 229) | class ValidationError extends Error { method constructor (line 232) | constructor(violations: FieldViolation[]) { class ApiError (line 239) | class ApiError extends Error { method constructor (line 243) | constructor(statusCode: number, message: string, body: string) { type EconomicServiceClientOptions (line 251) | interface EconomicServiceClientOptions { type EconomicServiceCallOptions (line 256) | interface EconomicServiceCallOptions { class EconomicServiceClient (line 261) | class EconomicServiceClient { method constructor (line 266) | constructor(baseURL: string, options?: EconomicServiceClientOptions) { method getFredSeries (line 272) | async getFredSeries(req: GetFredSeriesRequest, options?: EconomicServi... method listWorldBankIndicators (line 298) | async listWorldBankIndicators(req: ListWorldBankIndicatorsRequest, opt... method getEnergyPrices (line 327) | async getEnergyPrices(req: GetEnergyPricesRequest, options?: EconomicS... method getMacroSignals (line 352) | async getMacroSignals(req: GetMacroSignalsRequest, options?: EconomicS... method getEnergyCapacity (line 375) | async getEnergyCapacity(req: GetEnergyCapacityRequest, options?: Econo... method getBisPolicyRates (line 401) | async getBisPolicyRates(req: GetBisPolicyRatesRequest, options?: Econo... method getBisExchangeRates (line 424) | async getBisExchangeRates(req: GetBisExchangeRatesRequest, options?: E... method getBisCredit (line 447) | async getBisCredit(req: GetBisCreditRequest, options?: EconomicService... method getFredSeriesBatch (line 470) | async getFredSeriesBatch(req: GetFredSeriesBatchRequest, options?: Eco... method handleError (line 494) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/forecast/v1/service_client.ts type GetForecastsRequest (line 5) | interface GetForecastsRequest { type GetForecastsResponse (line 10) | interface GetForecastsResponse { type Forecast (line 15) | interface Forecast { type ForecastSignal (line 37) | interface ForecastSignal { type CascadeEffect (line 43) | interface CascadeEffect { type CalibrationInfo (line 49) | interface CalibrationInfo { type Perspectives (line 56) | interface Perspectives { type Projections (line 62) | interface Projections { type ForecastCase (line 68) | interface ForecastCase { type ForecastCaseEvidence (line 83) | interface ForecastCaseEvidence { type ForecastActor (line 89) | interface ForecastActor { type ForecastWorldState (line 100) | interface ForecastWorldState { type ForecastBranch (line 107) | interface ForecastBranch { type ForecastBranchRound (line 116) | interface ForecastBranchRound { type FieldViolation (line 124) | interface FieldViolation { class ValidationError (line 129) | class ValidationError extends Error { method constructor (line 132) | constructor(violations: FieldViolation[]) { class ApiError (line 139) | class ApiError extends Error { method constructor (line 143) | constructor(statusCode: number, message: string, body: string) { type ForecastServiceClientOptions (line 151) | interface ForecastServiceClientOptions { type ForecastServiceCallOptions (line 156) | interface ForecastServiceCallOptions { class ForecastServiceClient (line 161) | class ForecastServiceClient { method constructor (line 166) | constructor(baseURL: string, options?: ForecastServiceClientOptions) { method getForecasts (line 172) | async getForecasts(req: GetForecastsRequest, options?: ForecastService... method handleError (line 198) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/giving/v1/service_client.ts type GetGivingSummaryRequest (line 5) | interface GetGivingSummaryRequest { type GetGivingSummaryResponse (line 10) | interface GetGivingSummaryResponse { type GivingSummary (line 14) | interface GivingSummary { type PlatformGiving (line 25) | interface PlatformGiving { type CategoryBreakdown (line 35) | interface CategoryBreakdown { type CryptoGivingSummary (line 43) | interface CryptoGivingSummary { type InstitutionalGiving (line 51) | interface InstitutionalGiving { type FieldViolation (line 60) | interface FieldViolation { class ValidationError (line 65) | class ValidationError extends Error { method constructor (line 68) | constructor(violations: FieldViolation[]) { class ApiError (line 75) | class ApiError extends Error { method constructor (line 79) | constructor(statusCode: number, message: string, body: string) { type GivingServiceClientOptions (line 87) | interface GivingServiceClientOptions { type GivingServiceCallOptions (line 92) | interface GivingServiceCallOptions { class GivingServiceClient (line 97) | class GivingServiceClient { method constructor (line 102) | constructor(baseURL: string, options?: GivingServiceClientOptions) { method getGivingSummary (line 108) | async getGivingSummary(req: GetGivingSummaryRequest, options?: GivingS... method handleError (line 134) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/imagery/v1/service_client.ts type SearchImageryRequest (line 5) | interface SearchImageryRequest { type SearchImageryResponse (line 12) | interface SearchImageryResponse { type ImageryScene (line 18) | interface ImageryScene { type FieldViolation (line 29) | interface FieldViolation { class ValidationError (line 34) | class ValidationError extends Error { method constructor (line 37) | constructor(violations: FieldViolation[]) { class ApiError (line 44) | class ApiError extends Error { method constructor (line 48) | constructor(statusCode: number, message: string, body: string) { type ImageryServiceClientOptions (line 56) | interface ImageryServiceClientOptions { type ImageryServiceCallOptions (line 61) | interface ImageryServiceCallOptions { class ImageryServiceClient (line 66) | class ImageryServiceClient { method constructor (line 71) | constructor(baseURL: string, options?: ImageryServiceClientOptions) { method searchImagery (line 77) | async searchImagery(req: SearchImageryRequest, options?: ImageryServic... method handleError (line 105) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/infrastructure/v1/service_client.ts type ListInternetOutagesRequest (line 5) | interface ListInternetOutagesRequest { type ListInternetOutagesResponse (line 13) | interface ListInternetOutagesResponse { type InternetOutage (line 18) | interface InternetOutage { type GeoCoordinates (line 34) | interface GeoCoordinates { type PaginationResponse (line 39) | interface PaginationResponse { type ListServiceStatusesRequest (line 44) | interface ListServiceStatusesRequest { type ListServiceStatusesResponse (line 48) | interface ListServiceStatusesResponse { type ServiceStatus (line 52) | interface ServiceStatus { type GetTemporalBaselineRequest (line 62) | interface GetTemporalBaselineRequest { type GetTemporalBaselineResponse (line 68) | interface GetTemporalBaselineResponse { type BaselineAnomaly (line 77) | interface BaselineAnomaly { type BaselineStats (line 83) | interface BaselineStats { type RecordBaselineSnapshotRequest (line 89) | interface RecordBaselineSnapshotRequest { type BaselineUpdate (line 93) | interface BaselineUpdate { type RecordBaselineSnapshotResponse (line 99) | interface RecordBaselineSnapshotResponse { type GetCableHealthRequest (line 104) | interface GetCableHealthRequest { type GetCableHealthResponse (line 107) | interface GetCableHealthResponse { type CableHealthRecord (line 112) | interface CableHealthRecord { type CableHealthEvidence (line 120) | interface CableHealthEvidence { type ListTemporalAnomaliesRequest (line 126) | interface ListTemporalAnomaliesRequest { type ListTemporalAnomaliesResponse (line 129) | interface ListTemporalAnomaliesResponse { type TemporalAnomaly (line 135) | interface TemporalAnomaly { type CableHealthStatus (line 146) | type CableHealthStatus = "CABLE_HEALTH_STATUS_UNSPECIFIED" | "CABLE_HEAL... type OutageSeverity (line 148) | type OutageSeverity = "OUTAGE_SEVERITY_UNSPECIFIED" | "OUTAGE_SEVERITY_P... type ServiceOperationalStatus (line 150) | type ServiceOperationalStatus = "SERVICE_OPERATIONAL_STATUS_UNSPECIFIED"... type FieldViolation (line 152) | interface FieldViolation { class ValidationError (line 157) | class ValidationError extends Error { method constructor (line 160) | constructor(violations: FieldViolation[]) { class ApiError (line 167) | class ApiError extends Error { method constructor (line 171) | constructor(statusCode: number, message: string, body: string) { type InfrastructureServiceClientOptions (line 179) | interface InfrastructureServiceClientOptions { type InfrastructureServiceCallOptions (line 184) | interface InfrastructureServiceCallOptions { class InfrastructureServiceClient (line 189) | class InfrastructureServiceClient { method constructor (line 194) | constructor(baseURL: string, options?: InfrastructureServiceClientOpti... method listInternetOutages (line 200) | async listInternetOutages(req: ListInternetOutagesRequest, options?: I... method listServiceStatuses (line 229) | async listServiceStatuses(req: ListServiceStatusesRequest, options?: I... method getTemporalBaseline (line 254) | async getTemporalBaseline(req: GetTemporalBaselineRequest, options?: I... method recordBaselineSnapshot (line 281) | async recordBaselineSnapshot(req: RecordBaselineSnapshotRequest, optio... method getCableHealth (line 305) | async getCableHealth(req: GetCableHealthRequest, options?: Infrastruct... method listTemporalAnomalies (line 328) | async listTemporalAnomalies(req: ListTemporalAnomaliesRequest, options... method handleError (line 351) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/intelligence/v1/service_client.ts type GetRiskScoresRequest (line 5) | interface GetRiskScoresRequest { type GetRiskScoresResponse (line 9) | interface GetRiskScoresResponse { type CiiScore (line 14) | interface CiiScore { type CiiComponents (line 24) | interface CiiComponents { type StrategicRisk (line 31) | interface StrategicRisk { type GetPizzintStatusRequest (line 39) | interface GetPizzintStatusRequest { type GetPizzintStatusResponse (line 43) | interface GetPizzintStatusResponse { type PizzintStatus (line 48) | interface PizzintStatus { type PizzintLocation (line 60) | interface PizzintLocation { type GdeltTensionPair (line 76) | interface GdeltTensionPair { type ClassifyEventRequest (line 86) | interface ClassifyEventRequest { type ClassifyEventResponse (line 93) | interface ClassifyEventResponse { type EventClassification (line 97) | interface EventClassification { type GetCountryIntelBriefRequest (line 106) | interface GetCountryIntelBriefRequest { type GetCountryIntelBriefResponse (line 110) | interface GetCountryIntelBriefResponse { type SearchGdeltDocumentsRequest (line 118) | interface SearchGdeltDocumentsRequest { type SearchGdeltDocumentsResponse (line 126) | interface SearchGdeltDocumentsResponse { type GdeltArticle (line 132) | interface GdeltArticle { type DeductSituationRequest (line 142) | interface DeductSituationRequest { type DeductSituationResponse (line 147) | interface DeductSituationResponse { type GetCountryFactsRequest (line 153) | interface GetCountryFactsRequest { type GetCountryFactsResponse (line 157) | interface GetCountryFactsResponse { type ListSecurityAdvisoriesRequest (line 170) | interface ListSecurityAdvisoriesRequest { type ListSecurityAdvisoriesResponse (line 173) | interface ListSecurityAdvisoriesResponse { type SecurityAdvisoryItem (line 178) | interface SecurityAdvisoryItem { type SeverityLevel (line 188) | type SeverityLevel = "SEVERITY_LEVEL_UNSPECIFIED" | "SEVERITY_LEVEL_LOW"... type TrendDirection (line 190) | type TrendDirection = "TREND_DIRECTION_UNSPECIFIED" | "TREND_DIRECTION_R... type DataFreshness (line 192) | type DataFreshness = "DATA_FRESHNESS_UNSPECIFIED" | "DATA_FRESHNESS_FRES... type FieldViolation (line 194) | interface FieldViolation { class ValidationError (line 199) | class ValidationError extends Error { method constructor (line 202) | constructor(violations: FieldViolation[]) { class ApiError (line 209) | class ApiError extends Error { method constructor (line 213) | constructor(statusCode: number, message: string, body: string) { type IntelligenceServiceClientOptions (line 221) | interface IntelligenceServiceClientOptions { type IntelligenceServiceCallOptions (line 226) | interface IntelligenceServiceCallOptions { class IntelligenceServiceClient (line 231) | class IntelligenceServiceClient { method constructor (line 236) | constructor(baseURL: string, options?: IntelligenceServiceClientOption... method getRiskScores (line 242) | async getRiskScores(req: GetRiskScoresRequest, options?: IntelligenceS... method getPizzintStatus (line 267) | async getPizzintStatus(req: GetPizzintStatusRequest, options?: Intelli... method classifyEvent (line 292) | async classifyEvent(req: ClassifyEventRequest, options?: IntelligenceS... method getCountryIntelBrief (line 320) | async getCountryIntelBrief(req: GetCountryIntelBriefRequest, options?:... method searchGdeltDocuments (line 345) | async searchGdeltDocuments(req: SearchGdeltDocumentsRequest, options?:... method deductSituation (line 374) | async deductSituation(req: DeductSituationRequest, options?: Intellige... method getCountryFacts (line 398) | async getCountryFacts(req: GetCountryFactsRequest, options?: Intellige... method listSecurityAdvisories (line 423) | async listSecurityAdvisories(req: ListSecurityAdvisoriesRequest, optio... method handleError (line 446) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/maritime/v1/service_client.ts type GetVesselSnapshotRequest (line 5) | interface GetVesselSnapshotRequest { type GetVesselSnapshotResponse (line 12) | interface GetVesselSnapshotResponse { type VesselSnapshot (line 16) | interface VesselSnapshot { type AisDensityZone (line 22) | interface AisDensityZone { type GeoCoordinates (line 32) | interface GeoCoordinates { type AisDisruption (line 37) | interface AisDisruption { type ListNavigationalWarningsRequest (line 51) | interface ListNavigationalWarningsRequest { type ListNavigationalWarningsResponse (line 57) | interface ListNavigationalWarningsResponse { type NavigationalWarning (line 62) | interface NavigationalWarning { type PaginationResponse (line 73) | interface PaginationResponse { type AisDisruptionSeverity (line 78) | type AisDisruptionSeverity = "AIS_DISRUPTION_SEVERITY_UNSPECIFIED" | "AI... type AisDisruptionType (line 80) | type AisDisruptionType = "AIS_DISRUPTION_TYPE_UNSPECIFIED" | "AIS_DISRUP... type FieldViolation (line 82) | interface FieldViolation { class ValidationError (line 87) | class ValidationError extends Error { method constructor (line 90) | constructor(violations: FieldViolation[]) { class ApiError (line 97) | class ApiError extends Error { method constructor (line 101) | constructor(statusCode: number, message: string, body: string) { type MaritimeServiceClientOptions (line 109) | interface MaritimeServiceClientOptions { type MaritimeServiceCallOptions (line 114) | interface MaritimeServiceCallOptions { class MaritimeServiceClient (line 119) | class MaritimeServiceClient { method constructor (line 124) | constructor(baseURL: string, options?: MaritimeServiceClientOptions) { method getVesselSnapshot (line 130) | async getVesselSnapshot(req: GetVesselSnapshotRequest, options?: Marit... method listNavigationalWarnings (line 158) | async listNavigationalWarnings(req: ListNavigationalWarningsRequest, o... method handleError (line 185) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/market/v1/service_client.ts type ListMarketQuotesRequest (line 5) | interface ListMarketQuotesRequest { type ListMarketQuotesResponse (line 9) | interface ListMarketQuotesResponse { type MarketQuote (line 16) | interface MarketQuote { type ListCryptoQuotesRequest (line 25) | interface ListCryptoQuotesRequest { type ListCryptoQuotesResponse (line 29) | interface ListCryptoQuotesResponse { type CryptoQuote (line 33) | interface CryptoQuote { type ListCommodityQuotesRequest (line 41) | interface ListCommodityQuotesRequest { type ListCommodityQuotesResponse (line 45) | interface ListCommodityQuotesResponse { type CommodityQuote (line 49) | interface CommodityQuote { type GetSectorSummaryRequest (line 58) | interface GetSectorSummaryRequest { type GetSectorSummaryResponse (line 62) | interface GetSectorSummaryResponse { type SectorPerformance (line 66) | interface SectorPerformance { type ListStablecoinMarketsRequest (line 72) | interface ListStablecoinMarketsRequest { type ListStablecoinMarketsResponse (line 76) | interface ListStablecoinMarketsResponse { type StablecoinSummary (line 82) | interface StablecoinSummary { type Stablecoin (line 90) | interface Stablecoin { type ListEtfFlowsRequest (line 104) | interface ListEtfFlowsRequest { type ListEtfFlowsResponse (line 107) | interface ListEtfFlowsResponse { type EtfFlowsSummary (line 114) | interface EtfFlowsSummary { type EtfFlow (line 123) | interface EtfFlow { type GetCountryStockIndexRequest (line 135) | interface GetCountryStockIndexRequest { type GetCountryStockIndexResponse (line 139) | interface GetCountryStockIndexResponse { type ListGulfQuotesRequest (line 150) | interface ListGulfQuotesRequest { type ListGulfQuotesResponse (line 153) | interface ListGulfQuotesResponse { type GulfQuote (line 158) | interface GulfQuote { type AnalyzeStockRequest (line 169) | interface AnalyzeStockRequest { type AnalyzeStockResponse (line 175) | interface AnalyzeStockResponse { type StockAnalysisHeadline (line 224) | interface StockAnalysisHeadline { type GetStockAnalysisHistoryRequest (line 231) | interface GetStockAnalysisHistoryRequest { type GetStockAnalysisHistoryResponse (line 237) | interface GetStockAnalysisHistoryResponse { type StockAnalysisHistoryItem (line 241) | interface StockAnalysisHistoryItem { type BacktestStockRequest (line 246) | interface BacktestStockRequest { type BacktestStockResponse (line 252) | interface BacktestStockResponse { type BacktestStockEvaluation (line 273) | interface BacktestStockEvaluation { type ListStoredStockBacktestsRequest (line 287) | interface ListStoredStockBacktestsRequest { type ListStoredStockBacktestsResponse (line 292) | interface ListStoredStockBacktestsResponse { type FieldViolation (line 296) | interface FieldViolation { class ValidationError (line 301) | class ValidationError extends Error { method constructor (line 304) | constructor(violations: FieldViolation[]) { class ApiError (line 311) | class ApiError extends Error { method constructor (line 315) | constructor(statusCode: number, message: string, body: string) { type MarketServiceClientOptions (line 323) | interface MarketServiceClientOptions { type MarketServiceCallOptions (line 328) | interface MarketServiceCallOptions { class MarketServiceClient (line 333) | class MarketServiceClient { method constructor (line 338) | constructor(baseURL: string, options?: MarketServiceClientOptions) { method listMarketQuotes (line 344) | async listMarketQuotes(req: ListMarketQuotesRequest, options?: MarketS... method listCryptoQuotes (line 369) | async listCryptoQuotes(req: ListCryptoQuotesRequest, options?: MarketS... method listCommodityQuotes (line 394) | async listCommodityQuotes(req: ListCommodityQuotesRequest, options?: M... method getSectorSummary (line 419) | async getSectorSummary(req: GetSectorSummaryRequest, options?: MarketS... method listStablecoinMarkets (line 444) | async listStablecoinMarkets(req: ListStablecoinMarketsRequest, options... method listEtfFlows (line 469) | async listEtfFlows(req: ListEtfFlowsRequest, options?: MarketServiceCa... method getCountryStockIndex (line 492) | async getCountryStockIndex(req: GetCountryStockIndexRequest, options?:... method listGulfQuotes (line 517) | async listGulfQuotes(req: ListGulfQuotesRequest, options?: MarketServi... method analyzeStock (line 540) | async analyzeStock(req: AnalyzeStockRequest, options?: MarketServiceCa... method getStockAnalysisHistory (line 567) | async getStockAnalysisHistory(req: GetStockAnalysisHistoryRequest, opt... method backtestStock (line 594) | async backtestStock(req: BacktestStockRequest, options?: MarketService... method listStoredStockBacktests (line 621) | async listStoredStockBacktests(req: ListStoredStockBacktestsRequest, o... method handleError (line 647) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/military/v1/service_client.ts type ListMilitaryFlightsRequest (line 5) | interface ListMilitaryFlightsRequest { type ListMilitaryFlightsResponse (line 16) | interface ListMilitaryFlightsResponse { type MilitaryFlight (line 22) | interface MilitaryFlight { type GeoCoordinates (line 48) | interface GeoCoordinates { type FlightEnrichment (line 53) | interface FlightEnrichment { type MilitaryFlightCluster (line 63) | interface MilitaryFlightCluster { type PaginationResponse (line 73) | interface PaginationResponse { type GetTheaterPostureRequest (line 78) | interface GetTheaterPostureRequest { type GetTheaterPostureResponse (line 82) | interface GetTheaterPostureResponse { type TheaterPosture (line 86) | interface TheaterPosture { type GetAircraftDetailsRequest (line 95) | interface GetAircraftDetailsRequest { type GetAircraftDetailsResponse (line 99) | interface GetAircraftDetailsResponse { type AircraftDetails (line 104) | interface AircraftDetails { type GetAircraftDetailsBatchRequest (line 122) | interface GetAircraftDetailsBatchRequest { type GetAircraftDetailsBatchResponse (line 126) | interface GetAircraftDetailsBatchResponse { type GetWingbitsStatusRequest (line 133) | interface GetWingbitsStatusRequest { type GetWingbitsStatusResponse (line 136) | interface GetWingbitsStatusResponse { type GetUSNIFleetReportRequest (line 140) | interface GetUSNIFleetReportRequest { type GetUSNIFleetReportResponse (line 144) | interface GetUSNIFleetReportResponse { type USNIFleetReport (line 151) | interface USNIFleetReport { type BattleForceSummary (line 163) | interface BattleForceSummary { type USNIVessel (line 169) | interface USNIVessel { type USNIStrikeGroup (line 184) | interface USNIStrikeGroup { type ListMilitaryBasesRequest (line 192) | interface ListMilitaryBasesRequest { type ListMilitaryBasesResponse (line 203) | interface ListMilitaryBasesResponse { type MilitaryBaseEntry (line 210) | interface MilitaryBaseEntry { type MilitaryBaseCluster (line 228) | interface MilitaryBaseCluster { type GetWingbitsLiveFlightRequest (line 236) | interface GetWingbitsLiveFlightRequest { type GetWingbitsLiveFlightResponse (line 240) | interface GetWingbitsLiveFlightResponse { type WingbitsLiveFlight (line 244) | interface WingbitsLiveFlight { type MilitaryActivityType (line 260) | type MilitaryActivityType = "MILITARY_ACTIVITY_TYPE_UNSPECIFIED" | "MILI... type MilitaryAircraftType (line 262) | type MilitaryAircraftType = "MILITARY_AIRCRAFT_TYPE_UNSPECIFIED" | "MILI... type MilitaryConfidence (line 264) | type MilitaryConfidence = "MILITARY_CONFIDENCE_UNSPECIFIED" | "MILITARY_... type MilitaryOperator (line 266) | type MilitaryOperator = "MILITARY_OPERATOR_UNSPECIFIED" | "MILITARY_OPER... type FieldViolation (line 268) | interface FieldViolation { class ValidationError (line 273) | class ValidationError extends Error { method constructor (line 276) | constructor(violations: FieldViolation[]) { class ApiError (line 283) | class ApiError extends Error { method constructor (line 287) | constructor(statusCode: number, message: string, body: string) { type MilitaryServiceClientOptions (line 295) | interface MilitaryServiceClientOptions { type MilitaryServiceCallOptions (line 300) | interface MilitaryServiceCallOptions { class MilitaryServiceClient (line 305) | class MilitaryServiceClient { method constructor (line 310) | constructor(baseURL: string, options?: MilitaryServiceClientOptions) { method listMilitaryFlights (line 316) | async listMilitaryFlights(req: ListMilitaryFlightsRequest, options?: M... method getTheaterPosture (line 348) | async getTheaterPosture(req: GetTheaterPostureRequest, options?: Milit... method getAircraftDetails (line 373) | async getAircraftDetails(req: GetAircraftDetailsRequest, options?: Mil... method getAircraftDetailsBatch (line 398) | async getAircraftDetailsBatch(req: GetAircraftDetailsBatchRequest, opt... method getWingbitsStatus (line 422) | async getWingbitsStatus(req: GetWingbitsStatusRequest, options?: Milit... method getUSNIFleetReport (line 445) | async getUSNIFleetReport(req: GetUSNIFleetReportRequest, options?: Mil... method listMilitaryBases (line 470) | async listMilitaryBases(req: ListMilitaryBasesRequest, options?: Milit... method getWingbitsLiveFlight (line 502) | async getWingbitsLiveFlight(req: GetWingbitsLiveFlightRequest, options... method handleError (line 527) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/natural/v1/service_client.ts type ListNaturalEventsRequest (line 5) | interface ListNaturalEventsRequest { type ListNaturalEventsResponse (line 9) | interface ListNaturalEventsResponse { type NaturalEvent (line 13) | interface NaturalEvent { type ForecastPoint (line 41) | interface ForecastPoint { type CoordRing (line 49) | interface CoordRing { type Coordinate (line 53) | interface Coordinate { type PastTrackPoint (line 58) | interface PastTrackPoint { type FieldViolation (line 65) | interface FieldViolation { class ValidationError (line 70) | class ValidationError extends Error { method constructor (line 73) | constructor(violations: FieldViolation[]) { class ApiError (line 80) | class ApiError extends Error { method constructor (line 84) | constructor(statusCode: number, message: string, body: string) { type NaturalServiceClientOptions (line 92) | interface NaturalServiceClientOptions { type NaturalServiceCallOptions (line 97) | interface NaturalServiceCallOptions { class NaturalServiceClient (line 102) | class NaturalServiceClient { method constructor (line 107) | constructor(baseURL: string, options?: NaturalServiceClientOptions) { method listNaturalEvents (line 113) | async listNaturalEvents(req: ListNaturalEventsRequest, options?: Natur... method handleError (line 138) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/news/v1/service_client.ts type SummarizeArticleRequest (line 5) | interface SummarizeArticleRequest { type SummarizeArticleResponse (line 14) | interface SummarizeArticleResponse { type GetSummarizeArticleCacheRequest (line 26) | interface GetSummarizeArticleCacheRequest { type ListFeedDigestRequest (line 30) | interface ListFeedDigestRequest { type ListFeedDigestResponse (line 35) | interface ListFeedDigestResponse { type CategoryBucket (line 41) | interface CategoryBucket { type NewsItem (line 45) | interface NewsItem { type ThreatClassification (line 56) | interface ThreatClassification { type GeoCoordinates (line 63) | interface GeoCoordinates { type SummarizeStatus (line 68) | type SummarizeStatus = "SUMMARIZE_STATUS_UNSPECIFIED" | "SUMMARIZE_STATU... type ThreatLevel (line 70) | type ThreatLevel = "THREAT_LEVEL_UNSPECIFIED" | "THREAT_LEVEL_LOW" | "TH... type FieldViolation (line 72) | interface FieldViolation { class ValidationError (line 77) | class ValidationError extends Error { method constructor (line 80) | constructor(violations: FieldViolation[]) { class ApiError (line 87) | class ApiError extends Error { method constructor (line 91) | constructor(statusCode: number, message: string, body: string) { type NewsServiceClientOptions (line 99) | interface NewsServiceClientOptions { type NewsServiceCallOptions (line 104) | interface NewsServiceCallOptions { class NewsServiceClient (line 109) | class NewsServiceClient { method constructor (line 114) | constructor(baseURL: string, options?: NewsServiceClientOptions) { method summarizeArticle (line 120) | async summarizeArticle(req: SummarizeArticleRequest, options?: NewsSer... method getSummarizeArticleCache (line 144) | async getSummarizeArticleCache(req: GetSummarizeArticleCacheRequest, o... method listFeedDigest (line 169) | async listFeedDigest(req: ListFeedDigestRequest, options?: NewsService... method handleError (line 195) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/positive_events/v1/service_client.ts type ListPositiveGeoEventsRequest (line 5) | interface ListPositiveGeoEventsRequest { type ListPositiveGeoEventsResponse (line 8) | interface ListPositiveGeoEventsResponse { type PositiveGeoEvent (line 12) | interface PositiveGeoEvent { type FieldViolation (line 21) | interface FieldViolation { class ValidationError (line 26) | class ValidationError extends Error { method constructor (line 29) | constructor(violations: FieldViolation[]) { class ApiError (line 36) | class ApiError extends Error { method constructor (line 40) | constructor(statusCode: number, message: string, body: string) { type PositiveEventsServiceClientOptions (line 48) | interface PositiveEventsServiceClientOptions { type PositiveEventsServiceCallOptions (line 53) | interface PositiveEventsServiceCallOptions { class PositiveEventsServiceClient (line 58) | class PositiveEventsServiceClient { method constructor (line 63) | constructor(baseURL: string, options?: PositiveEventsServiceClientOpti... method listPositiveGeoEvents (line 69) | async listPositiveGeoEvents(req: ListPositiveGeoEventsRequest, options... method handleError (line 92) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/prediction/v1/service_client.ts type ListPredictionMarketsRequest (line 5) | interface ListPredictionMarketsRequest { type ListPredictionMarketsResponse (line 12) | interface ListPredictionMarketsResponse { type PredictionMarket (line 17) | interface PredictionMarket { type PaginationResponse (line 28) | interface PaginationResponse { type MarketSource (line 33) | type MarketSource = "MARKET_SOURCE_UNSPECIFIED" | "MARKET_SOURCE_POLYMAR... type FieldViolation (line 35) | interface FieldViolation { class ValidationError (line 40) | class ValidationError extends Error { method constructor (line 43) | constructor(violations: FieldViolation[]) { class ApiError (line 50) | class ApiError extends Error { method constructor (line 54) | constructor(statusCode: number, message: string, body: string) { type PredictionServiceClientOptions (line 62) | interface PredictionServiceClientOptions { type PredictionServiceCallOptions (line 67) | interface PredictionServiceCallOptions { class PredictionServiceClient (line 72) | class PredictionServiceClient { method constructor (line 77) | constructor(baseURL: string, options?: PredictionServiceClientOptions) { method listPredictionMarkets (line 83) | async listPredictionMarkets(req: ListPredictionMarketsRequest, options... method handleError (line 111) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/radiation/v1/service_client.ts type ListRadiationObservationsRequest (line 5) | interface ListRadiationObservationsRequest { type ListRadiationObservationsResponse (line 9) | interface ListRadiationObservationsResponse { type RadiationObservation (line 23) | interface RadiationObservation { type GeoCoordinates (line 45) | interface GeoCoordinates { type RadiationConfidence (line 50) | type RadiationConfidence = "RADIATION_CONFIDENCE_UNSPECIFIED" | "RADIATI... type RadiationFreshness (line 52) | type RadiationFreshness = "RADIATION_FRESHNESS_UNSPECIFIED" | "RADIATION... type RadiationSeverity (line 54) | type RadiationSeverity = "RADIATION_SEVERITY_UNSPECIFIED" | "RADIATION_S... type RadiationSource (line 56) | type RadiationSource = "RADIATION_SOURCE_UNSPECIFIED" | "RADIATION_SOURC... type FieldViolation (line 58) | interface FieldViolation { class ValidationError (line 63) | class ValidationError extends Error { method constructor (line 66) | constructor(violations: FieldViolation[]) { class ApiError (line 73) | class ApiError extends Error { method constructor (line 77) | constructor(statusCode: number, message: string, body: string) { type RadiationServiceClientOptions (line 85) | interface RadiationServiceClientOptions { type RadiationServiceCallOptions (line 90) | interface RadiationServiceCallOptions { class RadiationServiceClient (line 95) | class RadiationServiceClient { method constructor (line 100) | constructor(baseURL: string, options?: RadiationServiceClientOptions) { method listRadiationObservations (line 106) | async listRadiationObservations(req: ListRadiationObservationsRequest,... method handleError (line 131) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/research/v1/service_client.ts type ListArxivPapersRequest (line 5) | interface ListArxivPapersRequest { type ListArxivPapersResponse (line 12) | interface ListArxivPapersResponse { type ArxivPaper (line 17) | interface ArxivPaper { type PaginationResponse (line 27) | interface PaginationResponse { type ListTrendingReposRequest (line 32) | interface ListTrendingReposRequest { type ListTrendingReposResponse (line 39) | interface ListTrendingReposResponse { type GithubRepo (line 44) | interface GithubRepo { type ListHackernewsItemsRequest (line 54) | interface ListHackernewsItemsRequest { type ListHackernewsItemsResponse (line 60) | interface ListHackernewsItemsResponse { type HackernewsItem (line 65) | interface HackernewsItem { type ListTechEventsRequest (line 75) | interface ListTechEventsRequest { type ListTechEventsResponse (line 82) | interface ListTechEventsResponse { type TechEvent (line 92) | interface TechEvent { type TechEventCoords (line 105) | interface TechEventCoords { type FieldViolation (line 113) | interface FieldViolation { class ValidationError (line 118) | class ValidationError extends Error { method constructor (line 121) | constructor(violations: FieldViolation[]) { class ApiError (line 128) | class ApiError extends Error { method constructor (line 132) | constructor(statusCode: number, message: string, body: string) { type ResearchServiceClientOptions (line 140) | interface ResearchServiceClientOptions { type ResearchServiceCallOptions (line 145) | interface ResearchServiceCallOptions { class ResearchServiceClient (line 150) | class ResearchServiceClient { method constructor (line 155) | constructor(baseURL: string, options?: ResearchServiceClientOptions) { method listArxivPapers (line 161) | async listArxivPapers(req: ListArxivPapersRequest, options?: ResearchS... method listTrendingRepos (line 189) | async listTrendingRepos(req: ListTrendingReposRequest, options?: Resea... method listHackernewsItems (line 217) | async listHackernewsItems(req: ListHackernewsItemsRequest, options?: R... method listTechEvents (line 244) | async listTechEvents(req: ListTechEventsRequest, options?: ResearchSer... method handleError (line 272) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/sanctions/v1/service_client.ts type ListSanctionsPressureRequest (line 5) | interface ListSanctionsPressureRequest { type ListSanctionsPressureResponse (line 9) | interface ListSanctionsPressureResponse { type SanctionsEntry (line 23) | interface SanctionsEntry { type CountrySanctionsPressure (line 36) | interface CountrySanctionsPressure { type ProgramSanctionsPressure (line 45) | interface ProgramSanctionsPressure { type SanctionsEntityType (line 51) | type SanctionsEntityType = "SANCTIONS_ENTITY_TYPE_UNSPECIFIED" | "SANCTI... type FieldViolation (line 53) | interface FieldViolation { class ValidationError (line 58) | class ValidationError extends Error { method constructor (line 61) | constructor(violations: FieldViolation[]) { class ApiError (line 68) | class ApiError extends Error { method constructor (line 72) | constructor(statusCode: number, message: string, body: string) { type SanctionsServiceClientOptions (line 80) | interface SanctionsServiceClientOptions { type SanctionsServiceCallOptions (line 85) | interface SanctionsServiceCallOptions { class SanctionsServiceClient (line 90) | class SanctionsServiceClient { method constructor (line 95) | constructor(baseURL: string, options?: SanctionsServiceClientOptions) { method listSanctionsPressure (line 101) | async listSanctionsPressure(req: ListSanctionsPressureRequest, options... method handleError (line 126) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/seismology/v1/service_client.ts type ListEarthquakesRequest (line 5) | interface ListEarthquakesRequest { type ListEarthquakesResponse (line 13) | interface ListEarthquakesResponse { type Earthquake (line 18) | interface Earthquake { type GeoCoordinates (line 28) | interface GeoCoordinates { type PaginationResponse (line 33) | interface PaginationResponse { type FieldViolation (line 38) | interface FieldViolation { class ValidationError (line 43) | class ValidationError extends Error { method constructor (line 46) | constructor(violations: FieldViolation[]) { class ApiError (line 53) | class ApiError extends Error { method constructor (line 57) | constructor(statusCode: number, message: string, body: string) { type SeismologyServiceClientOptions (line 65) | interface SeismologyServiceClientOptions { type SeismologyServiceCallOptions (line 70) | interface SeismologyServiceCallOptions { class SeismologyServiceClient (line 75) | class SeismologyServiceClient { method constructor (line 80) | constructor(baseURL: string, options?: SeismologyServiceClientOptions) { method listEarthquakes (line 86) | async listEarthquakes(req: ListEarthquakesRequest, options?: Seismolog... method handleError (line 115) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/supply_chain/v1/service_client.ts type GetShippingRatesRequest (line 5) | interface GetShippingRatesRequest { type GetShippingRatesResponse (line 8) | interface GetShippingRatesResponse { type ShippingIndex (line 14) | interface ShippingIndex { type ShippingRatePoint (line 25) | interface ShippingRatePoint { type GetChokepointStatusRequest (line 30) | interface GetChokepointStatusRequest { type GetChokepointStatusResponse (line 33) | interface GetChokepointStatusResponse { type ChokepointInfo (line 39) | interface ChokepointInfo { type DirectionalDwt (line 56) | interface DirectionalDwt { type TransitSummary (line 62) | interface TransitSummary { type TransitDayCount (line 76) | interface TransitDayCount { type GetCriticalMineralsRequest (line 84) | interface GetCriticalMineralsRequest { type GetCriticalMineralsResponse (line 87) | interface GetCriticalMineralsResponse { type CriticalMineral (line 93) | interface CriticalMineral { type MineralProducer (line 102) | interface MineralProducer { type FieldViolation (line 109) | interface FieldViolation { class ValidationError (line 114) | class ValidationError extends Error { method constructor (line 117) | constructor(violations: FieldViolation[]) { class ApiError (line 124) | class ApiError extends Error { method constructor (line 128) | constructor(statusCode: number, message: string, body: string) { type SupplyChainServiceClientOptions (line 136) | interface SupplyChainServiceClientOptions { type SupplyChainServiceCallOptions (line 141) | interface SupplyChainServiceCallOptions { class SupplyChainServiceClient (line 146) | class SupplyChainServiceClient { method constructor (line 151) | constructor(baseURL: string, options?: SupplyChainServiceClientOptions) { method getShippingRates (line 157) | async getShippingRates(req: GetShippingRatesRequest, options?: SupplyC... method getChokepointStatus (line 180) | async getChokepointStatus(req: GetChokepointStatusRequest, options?: S... method getCriticalMinerals (line 203) | async getCriticalMinerals(req: GetCriticalMineralsRequest, options?: S... method handleError (line 226) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/thermal/v1/service_client.ts type ListThermalEscalationsRequest (line 5) | interface ListThermalEscalationsRequest { type ListThermalEscalationsResponse (line 9) | interface ListThermalEscalationsResponse { type ThermalEscalationCluster (line 17) | interface ThermalEscalationCluster { type GeoCoordinates (line 46) | interface GeoCoordinates { type ThermalEscalationSummary (line 51) | interface ThermalEscalationSummary { type ThermalConfidence (line 60) | type ThermalConfidence = "THERMAL_CONFIDENCE_UNSPECIFIED" | "THERMAL_CON... type ThermalContext (line 62) | type ThermalContext = "THERMAL_CONTEXT_UNSPECIFIED" | "THERMAL_CONTEXT_W... type ThermalStatus (line 64) | type ThermalStatus = "THERMAL_STATUS_UNSPECIFIED" | "THERMAL_STATUS_NORM... type ThermalStrategicRelevance (line 66) | type ThermalStrategicRelevance = "THERMAL_RELEVANCE_UNSPECIFIED" | "THER... type FieldViolation (line 68) | interface FieldViolation { class ValidationError (line 73) | class ValidationError extends Error { method constructor (line 76) | constructor(violations: FieldViolation[]) { class ApiError (line 83) | class ApiError extends Error { method constructor (line 87) | constructor(statusCode: number, message: string, body: string) { type ThermalServiceClientOptions (line 95) | interface ThermalServiceClientOptions { type ThermalServiceCallOptions (line 100) | interface ThermalServiceCallOptions { class ThermalServiceClient (line 105) | class ThermalServiceClient { method constructor (line 110) | constructor(baseURL: string, options?: ThermalServiceClientOptions) { method listThermalEscalations (line 116) | async listThermalEscalations(req: ListThermalEscalationsRequest, optio... method handleError (line 141) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/trade/v1/service_client.ts type GetTradeRestrictionsRequest (line 5) | interface GetTradeRestrictionsRequest { type GetTradeRestrictionsResponse (line 10) | interface GetTradeRestrictionsResponse { type TradeRestriction (line 16) | interface TradeRestriction { type GetTariffTrendsRequest (line 28) | interface GetTariffTrendsRequest { type GetTariffTrendsResponse (line 35) | interface GetTariffTrendsResponse { type TariffDataPoint (line 42) | interface TariffDataPoint { type EffectiveTariffRate (line 52) | interface EffectiveTariffRate { type GetTradeFlowsRequest (line 60) | interface GetTradeFlowsRequest { type GetTradeFlowsResponse (line 66) | interface GetTradeFlowsResponse { type TradeFlowRecord (line 72) | interface TradeFlowRecord { type GetTradeBarriersRequest (line 83) | interface GetTradeBarriersRequest { type GetTradeBarriersResponse (line 89) | interface GetTradeBarriersResponse { type TradeBarrier (line 95) | interface TradeBarrier { type GetCustomsRevenueRequest (line 107) | interface GetCustomsRevenueRequest { type GetCustomsRevenueResponse (line 110) | interface GetCustomsRevenueResponse { type CustomsRevenueMonth (line 116) | interface CustomsRevenueMonth { type FieldViolation (line 125) | interface FieldViolation { class ValidationError (line 130) | class ValidationError extends Error { method constructor (line 133) | constructor(violations: FieldViolation[]) { class ApiError (line 140) | class ApiError extends Error { method constructor (line 144) | constructor(statusCode: number, message: string, body: string) { type TradeServiceClientOptions (line 152) | interface TradeServiceClientOptions { type TradeServiceCallOptions (line 157) | interface TradeServiceCallOptions { class TradeServiceClient (line 162) | class TradeServiceClient { method constructor (line 167) | constructor(baseURL: string, options?: TradeServiceClientOptions) { method getTradeRestrictions (line 173) | async getTradeRestrictions(req: GetTradeRestrictionsRequest, options?:... method getTariffTrends (line 199) | async getTariffTrends(req: GetTariffTrendsRequest, options?: TradeServ... method getTradeFlows (line 227) | async getTradeFlows(req: GetTradeFlowsRequest, options?: TradeServiceC... method getTradeBarriers (line 254) | async getTradeBarriers(req: GetTradeBarriersRequest, options?: TradeSe... method getCustomsRevenue (line 281) | async getCustomsRevenue(req: GetCustomsRevenueRequest, options?: Trade... method handleError (line 304) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/unrest/v1/service_client.ts type ListUnrestEventsRequest (line 5) | interface ListUnrestEventsRequest { type ListUnrestEventsResponse (line 18) | interface ListUnrestEventsResponse { type UnrestEvent (line 24) | interface UnrestEvent { type GeoCoordinates (line 43) | interface GeoCoordinates { type UnrestCluster (line 48) | interface UnrestCluster { type PaginationResponse (line 60) | interface PaginationResponse { type SeverityLevel (line 65) | type SeverityLevel = "SEVERITY_LEVEL_UNSPECIFIED" | "SEVERITY_LEVEL_LOW"... type ConfidenceLevel (line 67) | type ConfidenceLevel = "CONFIDENCE_LEVEL_UNSPECIFIED" | "CONFIDENCE_LEVE... type UnrestEventType (line 69) | type UnrestEventType = "UNREST_EVENT_TYPE_UNSPECIFIED" | "UNREST_EVENT_T... type UnrestSourceType (line 71) | type UnrestSourceType = "UNREST_SOURCE_TYPE_UNSPECIFIED" | "UNREST_SOURC... type FieldViolation (line 73) | interface FieldViolation { class ValidationError (line 78) | class ValidationError extends Error { method constructor (line 81) | constructor(violations: FieldViolation[]) { class ApiError (line 88) | class ApiError extends Error { method constructor (line 92) | constructor(statusCode: number, message: string, body: string) { type UnrestServiceClientOptions (line 100) | interface UnrestServiceClientOptions { type UnrestServiceCallOptions (line 105) | interface UnrestServiceCallOptions { class UnrestServiceClient (line 110) | class UnrestServiceClient { method constructor (line 115) | constructor(baseURL: string, options?: UnrestServiceClientOptions) { method listUnrestEvents (line 121) | async listUnrestEvents(req: ListUnrestEventsRequest, options?: UnrestS... method handleError (line 155) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/webcam/v1/service_client.ts type ListWebcamsRequest (line 5) | interface ListWebcamsRequest { type ListWebcamsResponse (line 13) | interface ListWebcamsResponse { type WebcamEntry (line 19) | interface WebcamEntry { type WebcamCluster (line 28) | interface WebcamCluster { type GetWebcamImageRequest (line 35) | interface GetWebcamImageRequest { type GetWebcamImageResponse (line 39) | interface GetWebcamImageResponse { type FieldViolation (line 48) | interface FieldViolation { class ValidationError (line 53) | class ValidationError extends Error { method constructor (line 56) | constructor(violations: FieldViolation[]) { class ApiError (line 63) | class ApiError extends Error { method constructor (line 67) | constructor(statusCode: number, message: string, body: string) { type WebcamServiceClientOptions (line 75) | interface WebcamServiceClientOptions { type WebcamServiceCallOptions (line 80) | interface WebcamServiceCallOptions { class WebcamServiceClient (line 85) | class WebcamServiceClient { method constructor (line 90) | constructor(baseURL: string, options?: WebcamServiceClientOptions) { method listWebcams (line 96) | async listWebcams(req: ListWebcamsRequest, options?: WebcamServiceCall... method getWebcamImage (line 125) | async getWebcamImage(req: GetWebcamImageRequest, options?: WebcamServi... method handleError (line 150) | private async handleError(resp: Response): Promise { FILE: src/generated/client/worldmonitor/wildfire/v1/service_client.ts type ListFireDetectionsRequest (line 5) | interface ListFireDetectionsRequest { type ListFireDetectionsResponse (line 16) | interface ListFireDetectionsResponse { type FireDetection (line 21) | interface FireDetection { type GeoCoordinates (line 33) | interface GeoCoordinates { type PaginationResponse (line 38) | interface PaginationResponse { type FireConfidence (line 43) | type FireConfidence = "FIRE_CONFIDENCE_UNSPECIFIED" | "FIRE_CONFIDENCE_L... type FieldViolation (line 45) | interface FieldViolation { class ValidationError (line 50) | class ValidationError extends Error { method constructor (line 53) | constructor(violations: FieldViolation[]) { class ApiError (line 60) | class ApiError extends Error { method constructor (line 64) | constructor(statusCode: number, message: string, body: string) { type WildfireServiceClientOptions (line 72) | interface WildfireServiceClientOptions { type WildfireServiceCallOptions (line 77) | interface WildfireServiceCallOptions { class WildfireServiceClient (line 82) | class WildfireServiceClient { method constructor (line 87) | constructor(baseURL: string, options?: WildfireServiceClientOptions) { method listFireDetections (line 93) | async listFireDetections(req: ListFireDetectionsRequest, options?: Wil... method handleError (line 125) | private async handleError(resp: Response): Promise { FILE: src/generated/server/worldmonitor/aviation/v1/service_server.ts type ListAirportDelaysRequest (line 5) | interface ListAirportDelaysRequest { type ListAirportDelaysResponse (line 12) | interface ListAirportDelaysResponse { type AirportDelayAlert (line 17) | interface AirportDelayAlert { type GeoCoordinates (line 37) | interface GeoCoordinates { type PaginationResponse (line 42) | interface PaginationResponse { type GetAirportOpsSummaryRequest (line 47) | interface GetAirportOpsSummaryRequest { type GetAirportOpsSummaryResponse (line 51) | interface GetAirportOpsSummaryResponse { type AirportOpsSummary (line 56) | interface AirportOpsSummary { type ListAirportFlightsRequest (line 73) | interface ListAirportFlightsRequest { type ListAirportFlightsResponse (line 79) | interface ListAirportFlightsResponse { type FlightInstance (line 86) | interface FlightInstance { type Carrier (line 111) | interface Carrier { type AirportRef (line 117) | interface AirportRef { type GetCarrierOpsRequest (line 124) | interface GetCarrierOpsRequest { type GetCarrierOpsResponse (line 129) | interface GetCarrierOpsResponse { type CarrierOpsSummary (line 135) | interface CarrierOpsSummary { type GetFlightStatusRequest (line 147) | interface GetFlightStatusRequest { type GetFlightStatusResponse (line 153) | interface GetFlightStatusResponse { type TrackAircraftRequest (line 159) | interface TrackAircraftRequest { type TrackAircraftResponse (line 168) | interface TrackAircraftResponse { type PositionSample (line 174) | interface PositionSample { type SearchFlightPricesRequest (line 188) | interface SearchFlightPricesRequest { type SearchFlightPricesResponse (line 201) | interface SearchFlightPricesResponse { type PriceQuote (line 209) | interface PriceQuote { type ListAviationNewsRequest (line 229) | interface ListAviationNewsRequest { type ListAviationNewsResponse (line 235) | interface ListAviationNewsResponse { type AviationNewsItem (line 241) | interface AviationNewsItem { type AirportRegion (line 252) | type AirportRegion = "AIRPORT_REGION_UNSPECIFIED" | "AIRPORT_REGION_AMER... type CabinClass (line 254) | type CabinClass = "CABIN_CLASS_UNSPECIFIED" | "CABIN_CLASS_ECONOMY" | "C... type FlightDelaySeverity (line 256) | type FlightDelaySeverity = "FLIGHT_DELAY_SEVERITY_UNSPECIFIED" | "FLIGHT... type FlightDelaySource (line 258) | type FlightDelaySource = "FLIGHT_DELAY_SOURCE_UNSPECIFIED" | "FLIGHT_DEL... type FlightDelayType (line 260) | type FlightDelayType = "FLIGHT_DELAY_TYPE_UNSPECIFIED" | "FLIGHT_DELAY_T... type FlightDirection (line 262) | type FlightDirection = "FLIGHT_DIRECTION_UNSPECIFIED" | "FLIGHT_DIRECTIO... type FlightInstanceStatus (line 264) | type FlightInstanceStatus = "FLIGHT_INSTANCE_STATUS_UNSPECIFIED" | "FLIG... type PositionSource (line 266) | type PositionSource = "POSITION_SOURCE_UNSPECIFIED" | "POSITION_SOURCE_O... type FieldViolation (line 268) | interface FieldViolation { class ValidationError (line 273) | class ValidationError extends Error { method constructor (line 276) | constructor(violations: FieldViolation[]) { class ApiError (line 283) | class ApiError extends Error { method constructor (line 287) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 295) | interface ServerContext { type ServerOptions (line 301) | interface ServerOptions { type RouteDescriptor (line 306) | interface RouteDescriptor { type AviationServiceHandler (line 312) | interface AviationServiceHandler { function createAviationServiceRoutes (line 323) | function createAviationServiceRoutes( FILE: src/generated/server/worldmonitor/climate/v1/service_server.ts type ListClimateAnomaliesRequest (line 5) | interface ListClimateAnomaliesRequest { type ListClimateAnomaliesResponse (line 11) | interface ListClimateAnomaliesResponse { type ClimateAnomaly (line 16) | interface ClimateAnomaly { type GeoCoordinates (line 26) | interface GeoCoordinates { type PaginationResponse (line 31) | interface PaginationResponse { type AnomalySeverity (line 36) | type AnomalySeverity = "ANOMALY_SEVERITY_UNSPECIFIED" | "ANOMALY_SEVERIT... type AnomalyType (line 38) | type AnomalyType = "ANOMALY_TYPE_UNSPECIFIED" | "ANOMALY_TYPE_WARM" | "A... type FieldViolation (line 40) | interface FieldViolation { class ValidationError (line 45) | class ValidationError extends Error { method constructor (line 48) | constructor(violations: FieldViolation[]) { class ApiError (line 55) | class ApiError extends Error { method constructor (line 59) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 67) | interface ServerContext { type ServerOptions (line 73) | interface ServerOptions { type RouteDescriptor (line 78) | interface RouteDescriptor { type ClimateServiceHandler (line 84) | interface ClimateServiceHandler { function createClimateServiceRoutes (line 88) | function createClimateServiceRoutes( FILE: src/generated/server/worldmonitor/conflict/v1/service_server.ts type ListAcledEventsRequest (line 5) | interface ListAcledEventsRequest { type ListAcledEventsResponse (line 13) | interface ListAcledEventsResponse { type AcledConflictEvent (line 18) | interface AcledConflictEvent { type GeoCoordinates (line 30) | interface GeoCoordinates { type PaginationResponse (line 35) | interface PaginationResponse { type ListUcdpEventsRequest (line 40) | interface ListUcdpEventsRequest { type ListUcdpEventsResponse (line 48) | interface ListUcdpEventsResponse { type UcdpViolenceEvent (line 53) | interface UcdpViolenceEvent { type GetHumanitarianSummaryRequest (line 68) | interface GetHumanitarianSummaryRequest { type GetHumanitarianSummaryResponse (line 72) | interface GetHumanitarianSummaryResponse { type HumanitarianCountrySummary (line 76) | interface HumanitarianCountrySummary { type ListIranEventsRequest (line 87) | interface ListIranEventsRequest { type ListIranEventsResponse (line 90) | interface ListIranEventsResponse { type IranEvent (line 95) | interface IranEvent { type GetHumanitarianSummaryBatchRequest (line 107) | interface GetHumanitarianSummaryBatchRequest { type GetHumanitarianSummaryBatchResponse (line 111) | interface GetHumanitarianSummaryBatchResponse { type UcdpViolenceType (line 117) | type UcdpViolenceType = "UCDP_VIOLENCE_TYPE_UNSPECIFIED" | "UCDP_VIOLENC... type FieldViolation (line 119) | interface FieldViolation { class ValidationError (line 124) | class ValidationError extends Error { method constructor (line 127) | constructor(violations: FieldViolation[]) { class ApiError (line 134) | class ApiError extends Error { method constructor (line 138) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 146) | interface ServerContext { type ServerOptions (line 152) | interface ServerOptions { type RouteDescriptor (line 157) | interface RouteDescriptor { type ConflictServiceHandler (line 163) | interface ConflictServiceHandler { function createConflictServiceRoutes (line 171) | function createConflictServiceRoutes( FILE: src/generated/server/worldmonitor/cyber/v1/service_server.ts type ListCyberThreatsRequest (line 5) | interface ListCyberThreatsRequest { type ListCyberThreatsResponse (line 15) | interface ListCyberThreatsResponse { type CyberThreat (line 20) | interface CyberThreat { type GeoCoordinates (line 35) | interface GeoCoordinates { type PaginationResponse (line 40) | interface PaginationResponse { type CriticalityLevel (line 45) | type CriticalityLevel = "CRITICALITY_LEVEL_UNSPECIFIED" | "CRITICALITY_L... type CyberThreatIndicatorType (line 47) | type CyberThreatIndicatorType = "CYBER_THREAT_INDICATOR_TYPE_UNSPECIFIED... type CyberThreatSource (line 49) | type CyberThreatSource = "CYBER_THREAT_SOURCE_UNSPECIFIED" | "CYBER_THRE... type CyberThreatType (line 51) | type CyberThreatType = "CYBER_THREAT_TYPE_UNSPECIFIED" | "CYBER_THREAT_T... type FieldViolation (line 53) | interface FieldViolation { class ValidationError (line 58) | class ValidationError extends Error { method constructor (line 61) | constructor(violations: FieldViolation[]) { class ApiError (line 68) | class ApiError extends Error { method constructor (line 72) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 80) | interface ServerContext { type ServerOptions (line 86) | interface ServerOptions { type RouteDescriptor (line 91) | interface RouteDescriptor { type CyberServiceHandler (line 97) | interface CyberServiceHandler { function createCyberServiceRoutes (line 101) | function createCyberServiceRoutes( FILE: src/generated/server/worldmonitor/displacement/v1/service_server.ts type GetDisplacementSummaryRequest (line 5) | interface GetDisplacementSummaryRequest { type GetDisplacementSummaryResponse (line 11) | interface GetDisplacementSummaryResponse { type DisplacementSummary (line 15) | interface DisplacementSummary { type GlobalDisplacementTotals (line 22) | interface GlobalDisplacementTotals { type CountryDisplacement (line 30) | interface CountryDisplacement { type GeoCoordinates (line 44) | interface GeoCoordinates { type DisplacementFlow (line 49) | interface DisplacementFlow { type GetPopulationExposureRequest (line 59) | interface GetPopulationExposureRequest { type GetPopulationExposureResponse (line 66) | interface GetPopulationExposureResponse { type CountryPopulationEntry (line 72) | interface CountryPopulationEntry { type ExposureResult (line 79) | interface ExposureResult { type FieldViolation (line 86) | interface FieldViolation { class ValidationError (line 91) | class ValidationError extends Error { method constructor (line 94) | constructor(violations: FieldViolation[]) { class ApiError (line 101) | class ApiError extends Error { method constructor (line 105) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 113) | interface ServerContext { type ServerOptions (line 119) | interface ServerOptions { type RouteDescriptor (line 124) | interface RouteDescriptor { type DisplacementServiceHandler (line 130) | interface DisplacementServiceHandler { function createDisplacementServiceRoutes (line 135) | function createDisplacementServiceRoutes( FILE: src/generated/server/worldmonitor/economic/v1/service_server.ts type GetFredSeriesRequest (line 5) | interface GetFredSeriesRequest { type GetFredSeriesResponse (line 10) | interface GetFredSeriesResponse { type FredSeries (line 14) | interface FredSeries { type FredObservation (line 22) | interface FredObservation { type ListWorldBankIndicatorsRequest (line 27) | interface ListWorldBankIndicatorsRequest { type ListWorldBankIndicatorsResponse (line 35) | interface ListWorldBankIndicatorsResponse { type WorldBankCountryData (line 40) | interface WorldBankCountryData { type PaginationResponse (line 49) | interface PaginationResponse { type GetEnergyPricesRequest (line 54) | interface GetEnergyPricesRequest { type GetEnergyPricesResponse (line 58) | interface GetEnergyPricesResponse { type EnergyPrice (line 62) | interface EnergyPrice { type GetMacroSignalsRequest (line 71) | interface GetMacroSignalsRequest { type GetMacroSignalsResponse (line 74) | interface GetMacroSignalsResponse { type MacroSignals (line 84) | interface MacroSignals { type LiquiditySignal (line 94) | interface LiquiditySignal { type FlowStructureSignal (line 100) | interface FlowStructureSignal { type MacroRegimeSignal (line 106) | interface MacroRegimeSignal { type TechnicalTrendSignal (line 112) | interface TechnicalTrendSignal { type HashRateSignal (line 122) | interface HashRateSignal { type PriceMomentumSignal (line 127) | interface PriceMomentumSignal { type FearGreedSignal (line 131) | interface FearGreedSignal { type FearGreedHistoryEntry (line 137) | interface FearGreedHistoryEntry { type MacroMeta (line 142) | interface MacroMeta { type GetEnergyCapacityRequest (line 146) | interface GetEnergyCapacityRequest { type GetEnergyCapacityResponse (line 151) | interface GetEnergyCapacityResponse { type EnergyCapacitySeries (line 155) | interface EnergyCapacitySeries { type EnergyCapacityYear (line 161) | interface EnergyCapacityYear { type GetBisPolicyRatesRequest (line 166) | interface GetBisPolicyRatesRequest { type GetBisPolicyRatesResponse (line 169) | interface GetBisPolicyRatesResponse { type BisPolicyRate (line 173) | interface BisPolicyRate { type GetBisExchangeRatesRequest (line 182) | interface GetBisExchangeRatesRequest { type GetBisExchangeRatesResponse (line 185) | interface GetBisExchangeRatesResponse { type BisExchangeRate (line 189) | interface BisExchangeRate { type GetBisCreditRequest (line 198) | interface GetBisCreditRequest { type GetBisCreditResponse (line 201) | interface GetBisCreditResponse { type BisCreditToGdp (line 205) | interface BisCreditToGdp { type GetFredSeriesBatchRequest (line 213) | interface GetFredSeriesBatchRequest { type GetFredSeriesBatchResponse (line 218) | interface GetFredSeriesBatchResponse { type FieldViolation (line 224) | interface FieldViolation { class ValidationError (line 229) | class ValidationError extends Error { method constructor (line 232) | constructor(violations: FieldViolation[]) { class ApiError (line 239) | class ApiError extends Error { method constructor (line 243) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 251) | interface ServerContext { type ServerOptions (line 257) | interface ServerOptions { type RouteDescriptor (line 262) | interface RouteDescriptor { type EconomicServiceHandler (line 268) | interface EconomicServiceHandler { function createEconomicServiceRoutes (line 280) | function createEconomicServiceRoutes( FILE: src/generated/server/worldmonitor/forecast/v1/service_server.ts type GetForecastsRequest (line 5) | interface GetForecastsRequest { type GetForecastsResponse (line 10) | interface GetForecastsResponse { type Forecast (line 15) | interface Forecast { type ForecastSignal (line 37) | interface ForecastSignal { type CascadeEffect (line 43) | interface CascadeEffect { type CalibrationInfo (line 49) | interface CalibrationInfo { type Perspectives (line 56) | interface Perspectives { type Projections (line 62) | interface Projections { type ForecastCase (line 68) | interface ForecastCase { type ForecastCaseEvidence (line 83) | interface ForecastCaseEvidence { type ForecastActor (line 89) | interface ForecastActor { type ForecastWorldState (line 100) | interface ForecastWorldState { type ForecastBranch (line 107) | interface ForecastBranch { type ForecastBranchRound (line 116) | interface ForecastBranchRound { type FieldViolation (line 124) | interface FieldViolation { class ValidationError (line 129) | class ValidationError extends Error { method constructor (line 132) | constructor(violations: FieldViolation[]) { class ApiError (line 139) | class ApiError extends Error { method constructor (line 143) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 151) | interface ServerContext { type ServerOptions (line 157) | interface ServerOptions { type RouteDescriptor (line 162) | interface RouteDescriptor { type ForecastServiceHandler (line 168) | interface ForecastServiceHandler { function createForecastServiceRoutes (line 172) | function createForecastServiceRoutes( FILE: src/generated/server/worldmonitor/giving/v1/service_server.ts type GetGivingSummaryRequest (line 5) | interface GetGivingSummaryRequest { type GetGivingSummaryResponse (line 10) | interface GetGivingSummaryResponse { type GivingSummary (line 14) | interface GivingSummary { type PlatformGiving (line 25) | interface PlatformGiving { type CategoryBreakdown (line 35) | interface CategoryBreakdown { type CryptoGivingSummary (line 43) | interface CryptoGivingSummary { type InstitutionalGiving (line 51) | interface InstitutionalGiving { type FieldViolation (line 60) | interface FieldViolation { class ValidationError (line 65) | class ValidationError extends Error { method constructor (line 68) | constructor(violations: FieldViolation[]) { class ApiError (line 75) | class ApiError extends Error { method constructor (line 79) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 87) | interface ServerContext { type ServerOptions (line 93) | interface ServerOptions { type RouteDescriptor (line 98) | interface RouteDescriptor { type GivingServiceHandler (line 104) | interface GivingServiceHandler { function createGivingServiceRoutes (line 108) | function createGivingServiceRoutes( FILE: src/generated/server/worldmonitor/imagery/v1/service_server.ts type SearchImageryRequest (line 5) | interface SearchImageryRequest { type SearchImageryResponse (line 12) | interface SearchImageryResponse { type ImageryScene (line 18) | interface ImageryScene { type FieldViolation (line 29) | interface FieldViolation { class ValidationError (line 34) | class ValidationError extends Error { method constructor (line 37) | constructor(violations: FieldViolation[]) { class ApiError (line 44) | class ApiError extends Error { method constructor (line 48) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 56) | interface ServerContext { type ServerOptions (line 62) | interface ServerOptions { type RouteDescriptor (line 67) | interface RouteDescriptor { type ImageryServiceHandler (line 73) | interface ImageryServiceHandler { function createImageryServiceRoutes (line 77) | function createImageryServiceRoutes( FILE: src/generated/server/worldmonitor/infrastructure/v1/service_server.ts type ListInternetOutagesRequest (line 5) | interface ListInternetOutagesRequest { type ListInternetOutagesResponse (line 13) | interface ListInternetOutagesResponse { type InternetOutage (line 18) | interface InternetOutage { type GeoCoordinates (line 34) | interface GeoCoordinates { type PaginationResponse (line 39) | interface PaginationResponse { type ListServiceStatusesRequest (line 44) | interface ListServiceStatusesRequest { type ListServiceStatusesResponse (line 48) | interface ListServiceStatusesResponse { type ServiceStatus (line 52) | interface ServiceStatus { type GetTemporalBaselineRequest (line 62) | interface GetTemporalBaselineRequest { type GetTemporalBaselineResponse (line 68) | interface GetTemporalBaselineResponse { type BaselineAnomaly (line 77) | interface BaselineAnomaly { type BaselineStats (line 83) | interface BaselineStats { type RecordBaselineSnapshotRequest (line 89) | interface RecordBaselineSnapshotRequest { type BaselineUpdate (line 93) | interface BaselineUpdate { type RecordBaselineSnapshotResponse (line 99) | interface RecordBaselineSnapshotResponse { type GetCableHealthRequest (line 104) | interface GetCableHealthRequest { type GetCableHealthResponse (line 107) | interface GetCableHealthResponse { type CableHealthRecord (line 112) | interface CableHealthRecord { type CableHealthEvidence (line 120) | interface CableHealthEvidence { type ListTemporalAnomaliesRequest (line 126) | interface ListTemporalAnomaliesRequest { type ListTemporalAnomaliesResponse (line 129) | interface ListTemporalAnomaliesResponse { type TemporalAnomaly (line 135) | interface TemporalAnomaly { type CableHealthStatus (line 146) | type CableHealthStatus = "CABLE_HEALTH_STATUS_UNSPECIFIED" | "CABLE_HEAL... type OutageSeverity (line 148) | type OutageSeverity = "OUTAGE_SEVERITY_UNSPECIFIED" | "OUTAGE_SEVERITY_P... type ServiceOperationalStatus (line 150) | type ServiceOperationalStatus = "SERVICE_OPERATIONAL_STATUS_UNSPECIFIED"... type FieldViolation (line 152) | interface FieldViolation { class ValidationError (line 157) | class ValidationError extends Error { method constructor (line 160) | constructor(violations: FieldViolation[]) { class ApiError (line 167) | class ApiError extends Error { method constructor (line 171) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 179) | interface ServerContext { type ServerOptions (line 185) | interface ServerOptions { type RouteDescriptor (line 190) | interface RouteDescriptor { type InfrastructureServiceHandler (line 196) | interface InfrastructureServiceHandler { function createInfrastructureServiceRoutes (line 205) | function createInfrastructureServiceRoutes( FILE: src/generated/server/worldmonitor/intelligence/v1/service_server.ts type GetRiskScoresRequest (line 5) | interface GetRiskScoresRequest { type GetRiskScoresResponse (line 9) | interface GetRiskScoresResponse { type CiiScore (line 14) | interface CiiScore { type CiiComponents (line 24) | interface CiiComponents { type StrategicRisk (line 31) | interface StrategicRisk { type GetPizzintStatusRequest (line 39) | interface GetPizzintStatusRequest { type GetPizzintStatusResponse (line 43) | interface GetPizzintStatusResponse { type PizzintStatus (line 48) | interface PizzintStatus { type PizzintLocation (line 60) | interface PizzintLocation { type GdeltTensionPair (line 76) | interface GdeltTensionPair { type ClassifyEventRequest (line 86) | interface ClassifyEventRequest { type ClassifyEventResponse (line 93) | interface ClassifyEventResponse { type EventClassification (line 97) | interface EventClassification { type GetCountryIntelBriefRequest (line 106) | interface GetCountryIntelBriefRequest { type GetCountryIntelBriefResponse (line 110) | interface GetCountryIntelBriefResponse { type SearchGdeltDocumentsRequest (line 118) | interface SearchGdeltDocumentsRequest { type SearchGdeltDocumentsResponse (line 126) | interface SearchGdeltDocumentsResponse { type GdeltArticle (line 132) | interface GdeltArticle { type DeductSituationRequest (line 142) | interface DeductSituationRequest { type DeductSituationResponse (line 147) | interface DeductSituationResponse { type GetCountryFactsRequest (line 153) | interface GetCountryFactsRequest { type GetCountryFactsResponse (line 157) | interface GetCountryFactsResponse { type ListSecurityAdvisoriesRequest (line 170) | interface ListSecurityAdvisoriesRequest { type ListSecurityAdvisoriesResponse (line 173) | interface ListSecurityAdvisoriesResponse { type SecurityAdvisoryItem (line 178) | interface SecurityAdvisoryItem { type SeverityLevel (line 188) | type SeverityLevel = "SEVERITY_LEVEL_UNSPECIFIED" | "SEVERITY_LEVEL_LOW"... type TrendDirection (line 190) | type TrendDirection = "TREND_DIRECTION_UNSPECIFIED" | "TREND_DIRECTION_R... type DataFreshness (line 192) | type DataFreshness = "DATA_FRESHNESS_UNSPECIFIED" | "DATA_FRESHNESS_FRES... type FieldViolation (line 194) | interface FieldViolation { class ValidationError (line 199) | class ValidationError extends Error { method constructor (line 202) | constructor(violations: FieldViolation[]) { class ApiError (line 209) | class ApiError extends Error { method constructor (line 213) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 221) | interface ServerContext { type ServerOptions (line 227) | interface ServerOptions { type RouteDescriptor (line 232) | interface RouteDescriptor { type IntelligenceServiceHandler (line 238) | interface IntelligenceServiceHandler { function createIntelligenceServiceRoutes (line 249) | function createIntelligenceServiceRoutes( FILE: src/generated/server/worldmonitor/maritime/v1/service_server.ts type GetVesselSnapshotRequest (line 5) | interface GetVesselSnapshotRequest { type GetVesselSnapshotResponse (line 12) | interface GetVesselSnapshotResponse { type VesselSnapshot (line 16) | interface VesselSnapshot { type AisDensityZone (line 22) | interface AisDensityZone { type GeoCoordinates (line 32) | interface GeoCoordinates { type AisDisruption (line 37) | interface AisDisruption { type ListNavigationalWarningsRequest (line 51) | interface ListNavigationalWarningsRequest { type ListNavigationalWarningsResponse (line 57) | interface ListNavigationalWarningsResponse { type NavigationalWarning (line 62) | interface NavigationalWarning { type PaginationResponse (line 73) | interface PaginationResponse { type AisDisruptionSeverity (line 78) | type AisDisruptionSeverity = "AIS_DISRUPTION_SEVERITY_UNSPECIFIED" | "AI... type AisDisruptionType (line 80) | type AisDisruptionType = "AIS_DISRUPTION_TYPE_UNSPECIFIED" | "AIS_DISRUP... type FieldViolation (line 82) | interface FieldViolation { class ValidationError (line 87) | class ValidationError extends Error { method constructor (line 90) | constructor(violations: FieldViolation[]) { class ApiError (line 97) | class ApiError extends Error { method constructor (line 101) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 109) | interface ServerContext { type ServerOptions (line 115) | interface ServerOptions { type RouteDescriptor (line 120) | interface RouteDescriptor { type MaritimeServiceHandler (line 126) | interface MaritimeServiceHandler { function createMaritimeServiceRoutes (line 131) | function createMaritimeServiceRoutes( FILE: src/generated/server/worldmonitor/market/v1/service_server.ts type ListMarketQuotesRequest (line 5) | interface ListMarketQuotesRequest { type ListMarketQuotesResponse (line 9) | interface ListMarketQuotesResponse { type MarketQuote (line 16) | interface MarketQuote { type ListCryptoQuotesRequest (line 25) | interface ListCryptoQuotesRequest { type ListCryptoQuotesResponse (line 29) | interface ListCryptoQuotesResponse { type CryptoQuote (line 33) | interface CryptoQuote { type ListCommodityQuotesRequest (line 41) | interface ListCommodityQuotesRequest { type ListCommodityQuotesResponse (line 45) | interface ListCommodityQuotesResponse { type CommodityQuote (line 49) | interface CommodityQuote { type GetSectorSummaryRequest (line 58) | interface GetSectorSummaryRequest { type GetSectorSummaryResponse (line 62) | interface GetSectorSummaryResponse { type SectorPerformance (line 66) | interface SectorPerformance { type ListStablecoinMarketsRequest (line 72) | interface ListStablecoinMarketsRequest { type ListStablecoinMarketsResponse (line 76) | interface ListStablecoinMarketsResponse { type StablecoinSummary (line 82) | interface StablecoinSummary { type Stablecoin (line 90) | interface Stablecoin { type ListEtfFlowsRequest (line 104) | interface ListEtfFlowsRequest { type ListEtfFlowsResponse (line 107) | interface ListEtfFlowsResponse { type EtfFlowsSummary (line 114) | interface EtfFlowsSummary { type EtfFlow (line 123) | interface EtfFlow { type GetCountryStockIndexRequest (line 135) | interface GetCountryStockIndexRequest { type GetCountryStockIndexResponse (line 139) | interface GetCountryStockIndexResponse { type ListGulfQuotesRequest (line 150) | interface ListGulfQuotesRequest { type ListGulfQuotesResponse (line 153) | interface ListGulfQuotesResponse { type GulfQuote (line 158) | interface GulfQuote { type AnalyzeStockRequest (line 169) | interface AnalyzeStockRequest { type AnalyzeStockResponse (line 175) | interface AnalyzeStockResponse { type StockAnalysisHeadline (line 224) | interface StockAnalysisHeadline { type GetStockAnalysisHistoryRequest (line 231) | interface GetStockAnalysisHistoryRequest { type GetStockAnalysisHistoryResponse (line 237) | interface GetStockAnalysisHistoryResponse { type StockAnalysisHistoryItem (line 241) | interface StockAnalysisHistoryItem { type BacktestStockRequest (line 246) | interface BacktestStockRequest { type BacktestStockResponse (line 252) | interface BacktestStockResponse { type BacktestStockEvaluation (line 273) | interface BacktestStockEvaluation { type ListStoredStockBacktestsRequest (line 287) | interface ListStoredStockBacktestsRequest { type ListStoredStockBacktestsResponse (line 292) | interface ListStoredStockBacktestsResponse { type FieldViolation (line 296) | interface FieldViolation { class ValidationError (line 301) | class ValidationError extends Error { method constructor (line 304) | constructor(violations: FieldViolation[]) { class ApiError (line 311) | class ApiError extends Error { method constructor (line 315) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 323) | interface ServerContext { type ServerOptions (line 329) | interface ServerOptions { type RouteDescriptor (line 334) | interface RouteDescriptor { type MarketServiceHandler (line 340) | interface MarketServiceHandler { function createMarketServiceRoutes (line 355) | function createMarketServiceRoutes( FILE: src/generated/server/worldmonitor/military/v1/service_server.ts type ListMilitaryFlightsRequest (line 5) | interface ListMilitaryFlightsRequest { type ListMilitaryFlightsResponse (line 16) | interface ListMilitaryFlightsResponse { type MilitaryFlight (line 22) | interface MilitaryFlight { type GeoCoordinates (line 48) | interface GeoCoordinates { type FlightEnrichment (line 53) | interface FlightEnrichment { type MilitaryFlightCluster (line 63) | interface MilitaryFlightCluster { type PaginationResponse (line 73) | interface PaginationResponse { type GetTheaterPostureRequest (line 78) | interface GetTheaterPostureRequest { type GetTheaterPostureResponse (line 82) | interface GetTheaterPostureResponse { type TheaterPosture (line 86) | interface TheaterPosture { type GetAircraftDetailsRequest (line 95) | interface GetAircraftDetailsRequest { type GetAircraftDetailsResponse (line 99) | interface GetAircraftDetailsResponse { type AircraftDetails (line 104) | interface AircraftDetails { type GetAircraftDetailsBatchRequest (line 122) | interface GetAircraftDetailsBatchRequest { type GetAircraftDetailsBatchResponse (line 126) | interface GetAircraftDetailsBatchResponse { type GetWingbitsStatusRequest (line 133) | interface GetWingbitsStatusRequest { type GetWingbitsStatusResponse (line 136) | interface GetWingbitsStatusResponse { type GetUSNIFleetReportRequest (line 140) | interface GetUSNIFleetReportRequest { type GetUSNIFleetReportResponse (line 144) | interface GetUSNIFleetReportResponse { type USNIFleetReport (line 151) | interface USNIFleetReport { type BattleForceSummary (line 163) | interface BattleForceSummary { type USNIVessel (line 169) | interface USNIVessel { type USNIStrikeGroup (line 184) | interface USNIStrikeGroup { type ListMilitaryBasesRequest (line 192) | interface ListMilitaryBasesRequest { type ListMilitaryBasesResponse (line 203) | interface ListMilitaryBasesResponse { type MilitaryBaseEntry (line 210) | interface MilitaryBaseEntry { type MilitaryBaseCluster (line 228) | interface MilitaryBaseCluster { type GetWingbitsLiveFlightRequest (line 236) | interface GetWingbitsLiveFlightRequest { type GetWingbitsLiveFlightResponse (line 240) | interface GetWingbitsLiveFlightResponse { type WingbitsLiveFlight (line 244) | interface WingbitsLiveFlight { type MilitaryActivityType (line 260) | type MilitaryActivityType = "MILITARY_ACTIVITY_TYPE_UNSPECIFIED" | "MILI... type MilitaryAircraftType (line 262) | type MilitaryAircraftType = "MILITARY_AIRCRAFT_TYPE_UNSPECIFIED" | "MILI... type MilitaryConfidence (line 264) | type MilitaryConfidence = "MILITARY_CONFIDENCE_UNSPECIFIED" | "MILITARY_... type MilitaryOperator (line 266) | type MilitaryOperator = "MILITARY_OPERATOR_UNSPECIFIED" | "MILITARY_OPER... type FieldViolation (line 268) | interface FieldViolation { class ValidationError (line 273) | class ValidationError extends Error { method constructor (line 276) | constructor(violations: FieldViolation[]) { class ApiError (line 283) | class ApiError extends Error { method constructor (line 287) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 295) | interface ServerContext { type ServerOptions (line 301) | interface ServerOptions { type RouteDescriptor (line 306) | interface RouteDescriptor { type MilitaryServiceHandler (line 312) | interface MilitaryServiceHandler { function createMilitaryServiceRoutes (line 323) | function createMilitaryServiceRoutes( FILE: src/generated/server/worldmonitor/natural/v1/service_server.ts type ListNaturalEventsRequest (line 5) | interface ListNaturalEventsRequest { type ListNaturalEventsResponse (line 9) | interface ListNaturalEventsResponse { type NaturalEvent (line 13) | interface NaturalEvent { type ForecastPoint (line 41) | interface ForecastPoint { type CoordRing (line 49) | interface CoordRing { type Coordinate (line 53) | interface Coordinate { type PastTrackPoint (line 58) | interface PastTrackPoint { type FieldViolation (line 65) | interface FieldViolation { class ValidationError (line 70) | class ValidationError extends Error { method constructor (line 73) | constructor(violations: FieldViolation[]) { class ApiError (line 80) | class ApiError extends Error { method constructor (line 84) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 92) | interface ServerContext { type ServerOptions (line 98) | interface ServerOptions { type RouteDescriptor (line 103) | interface RouteDescriptor { type NaturalServiceHandler (line 109) | interface NaturalServiceHandler { function createNaturalServiceRoutes (line 113) | function createNaturalServiceRoutes( FILE: src/generated/server/worldmonitor/news/v1/service_server.ts type SummarizeArticleRequest (line 5) | interface SummarizeArticleRequest { type SummarizeArticleResponse (line 14) | interface SummarizeArticleResponse { type GetSummarizeArticleCacheRequest (line 26) | interface GetSummarizeArticleCacheRequest { type ListFeedDigestRequest (line 30) | interface ListFeedDigestRequest { type ListFeedDigestResponse (line 35) | interface ListFeedDigestResponse { type CategoryBucket (line 41) | interface CategoryBucket { type NewsItem (line 45) | interface NewsItem { type ThreatClassification (line 56) | interface ThreatClassification { type GeoCoordinates (line 63) | interface GeoCoordinates { type SummarizeStatus (line 68) | type SummarizeStatus = "SUMMARIZE_STATUS_UNSPECIFIED" | "SUMMARIZE_STATU... type ThreatLevel (line 70) | type ThreatLevel = "THREAT_LEVEL_UNSPECIFIED" | "THREAT_LEVEL_LOW" | "TH... type FieldViolation (line 72) | interface FieldViolation { class ValidationError (line 77) | class ValidationError extends Error { method constructor (line 80) | constructor(violations: FieldViolation[]) { class ApiError (line 87) | class ApiError extends Error { method constructor (line 91) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 99) | interface ServerContext { type ServerOptions (line 105) | interface ServerOptions { type RouteDescriptor (line 110) | interface RouteDescriptor { type NewsServiceHandler (line 116) | interface NewsServiceHandler { function createNewsServiceRoutes (line 122) | function createNewsServiceRoutes( FILE: src/generated/server/worldmonitor/positive_events/v1/service_server.ts type ListPositiveGeoEventsRequest (line 5) | interface ListPositiveGeoEventsRequest { type ListPositiveGeoEventsResponse (line 8) | interface ListPositiveGeoEventsResponse { type PositiveGeoEvent (line 12) | interface PositiveGeoEvent { type FieldViolation (line 21) | interface FieldViolation { class ValidationError (line 26) | class ValidationError extends Error { method constructor (line 29) | constructor(violations: FieldViolation[]) { class ApiError (line 36) | class ApiError extends Error { method constructor (line 40) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 48) | interface ServerContext { type ServerOptions (line 54) | interface ServerOptions { type RouteDescriptor (line 59) | interface RouteDescriptor { type PositiveEventsServiceHandler (line 65) | interface PositiveEventsServiceHandler { function createPositiveEventsServiceRoutes (line 69) | function createPositiveEventsServiceRoutes( FILE: src/generated/server/worldmonitor/prediction/v1/service_server.ts type ListPredictionMarketsRequest (line 5) | interface ListPredictionMarketsRequest { type ListPredictionMarketsResponse (line 12) | interface ListPredictionMarketsResponse { type PredictionMarket (line 17) | interface PredictionMarket { type PaginationResponse (line 28) | interface PaginationResponse { type MarketSource (line 33) | type MarketSource = "MARKET_SOURCE_UNSPECIFIED" | "MARKET_SOURCE_POLYMAR... type FieldViolation (line 35) | interface FieldViolation { class ValidationError (line 40) | class ValidationError extends Error { method constructor (line 43) | constructor(violations: FieldViolation[]) { class ApiError (line 50) | class ApiError extends Error { method constructor (line 54) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 62) | interface ServerContext { type ServerOptions (line 68) | interface ServerOptions { type RouteDescriptor (line 73) | interface RouteDescriptor { type PredictionServiceHandler (line 79) | interface PredictionServiceHandler { function createPredictionServiceRoutes (line 83) | function createPredictionServiceRoutes( FILE: src/generated/server/worldmonitor/radiation/v1/service_server.ts type ListRadiationObservationsRequest (line 5) | interface ListRadiationObservationsRequest { type ListRadiationObservationsResponse (line 9) | interface ListRadiationObservationsResponse { type RadiationObservation (line 23) | interface RadiationObservation { type GeoCoordinates (line 45) | interface GeoCoordinates { type RadiationConfidence (line 50) | type RadiationConfidence = "RADIATION_CONFIDENCE_UNSPECIFIED" | "RADIATI... type RadiationFreshness (line 52) | type RadiationFreshness = "RADIATION_FRESHNESS_UNSPECIFIED" | "RADIATION... type RadiationSeverity (line 54) | type RadiationSeverity = "RADIATION_SEVERITY_UNSPECIFIED" | "RADIATION_S... type RadiationSource (line 56) | type RadiationSource = "RADIATION_SOURCE_UNSPECIFIED" | "RADIATION_SOURC... type FieldViolation (line 58) | interface FieldViolation { class ValidationError (line 63) | class ValidationError extends Error { method constructor (line 66) | constructor(violations: FieldViolation[]) { class ApiError (line 73) | class ApiError extends Error { method constructor (line 77) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 85) | interface ServerContext { type ServerOptions (line 91) | interface ServerOptions { type RouteDescriptor (line 96) | interface RouteDescriptor { type RadiationServiceHandler (line 102) | interface RadiationServiceHandler { function createRadiationServiceRoutes (line 106) | function createRadiationServiceRoutes( FILE: src/generated/server/worldmonitor/research/v1/service_server.ts type ListArxivPapersRequest (line 5) | interface ListArxivPapersRequest { type ListArxivPapersResponse (line 12) | interface ListArxivPapersResponse { type ArxivPaper (line 17) | interface ArxivPaper { type PaginationResponse (line 27) | interface PaginationResponse { type ListTrendingReposRequest (line 32) | interface ListTrendingReposRequest { type ListTrendingReposResponse (line 39) | interface ListTrendingReposResponse { type GithubRepo (line 44) | interface GithubRepo { type ListHackernewsItemsRequest (line 54) | interface ListHackernewsItemsRequest { type ListHackernewsItemsResponse (line 60) | interface ListHackernewsItemsResponse { type HackernewsItem (line 65) | interface HackernewsItem { type ListTechEventsRequest (line 75) | interface ListTechEventsRequest { type ListTechEventsResponse (line 82) | interface ListTechEventsResponse { type TechEvent (line 92) | interface TechEvent { type TechEventCoords (line 105) | interface TechEventCoords { type FieldViolation (line 113) | interface FieldViolation { class ValidationError (line 118) | class ValidationError extends Error { method constructor (line 121) | constructor(violations: FieldViolation[]) { class ApiError (line 128) | class ApiError extends Error { method constructor (line 132) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 140) | interface ServerContext { type ServerOptions (line 146) | interface ServerOptions { type RouteDescriptor (line 151) | interface RouteDescriptor { type ResearchServiceHandler (line 157) | interface ResearchServiceHandler { function createResearchServiceRoutes (line 164) | function createResearchServiceRoutes( FILE: src/generated/server/worldmonitor/sanctions/v1/service_server.ts type ListSanctionsPressureRequest (line 5) | interface ListSanctionsPressureRequest { type ListSanctionsPressureResponse (line 9) | interface ListSanctionsPressureResponse { type SanctionsEntry (line 23) | interface SanctionsEntry { type CountrySanctionsPressure (line 36) | interface CountrySanctionsPressure { type ProgramSanctionsPressure (line 45) | interface ProgramSanctionsPressure { type SanctionsEntityType (line 51) | type SanctionsEntityType = "SANCTIONS_ENTITY_TYPE_UNSPECIFIED" | "SANCTI... type FieldViolation (line 53) | interface FieldViolation { class ValidationError (line 58) | class ValidationError extends Error { method constructor (line 61) | constructor(violations: FieldViolation[]) { class ApiError (line 68) | class ApiError extends Error { method constructor (line 72) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 80) | interface ServerContext { type ServerOptions (line 86) | interface ServerOptions { type RouteDescriptor (line 91) | interface RouteDescriptor { type SanctionsServiceHandler (line 97) | interface SanctionsServiceHandler { function createSanctionsServiceRoutes (line 101) | function createSanctionsServiceRoutes( FILE: src/generated/server/worldmonitor/seismology/v1/service_server.ts type ListEarthquakesRequest (line 5) | interface ListEarthquakesRequest { type ListEarthquakesResponse (line 13) | interface ListEarthquakesResponse { type Earthquake (line 18) | interface Earthquake { type GeoCoordinates (line 28) | interface GeoCoordinates { type PaginationResponse (line 33) | interface PaginationResponse { type FieldViolation (line 38) | interface FieldViolation { class ValidationError (line 43) | class ValidationError extends Error { method constructor (line 46) | constructor(violations: FieldViolation[]) { class ApiError (line 53) | class ApiError extends Error { method constructor (line 57) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 65) | interface ServerContext { type ServerOptions (line 71) | interface ServerOptions { type RouteDescriptor (line 76) | interface RouteDescriptor { type SeismologyServiceHandler (line 82) | interface SeismologyServiceHandler { function createSeismologyServiceRoutes (line 86) | function createSeismologyServiceRoutes( FILE: src/generated/server/worldmonitor/supply_chain/v1/service_server.ts type GetShippingRatesRequest (line 5) | interface GetShippingRatesRequest { type GetShippingRatesResponse (line 8) | interface GetShippingRatesResponse { type ShippingIndex (line 14) | interface ShippingIndex { type ShippingRatePoint (line 25) | interface ShippingRatePoint { type GetChokepointStatusRequest (line 30) | interface GetChokepointStatusRequest { type GetChokepointStatusResponse (line 33) | interface GetChokepointStatusResponse { type ChokepointInfo (line 39) | interface ChokepointInfo { type DirectionalDwt (line 56) | interface DirectionalDwt { type TransitSummary (line 62) | interface TransitSummary { type TransitDayCount (line 76) | interface TransitDayCount { type GetCriticalMineralsRequest (line 84) | interface GetCriticalMineralsRequest { type GetCriticalMineralsResponse (line 87) | interface GetCriticalMineralsResponse { type CriticalMineral (line 93) | interface CriticalMineral { type MineralProducer (line 102) | interface MineralProducer { type FieldViolation (line 109) | interface FieldViolation { class ValidationError (line 114) | class ValidationError extends Error { method constructor (line 117) | constructor(violations: FieldViolation[]) { class ApiError (line 124) | class ApiError extends Error { method constructor (line 128) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 136) | interface ServerContext { type ServerOptions (line 142) | interface ServerOptions { type RouteDescriptor (line 147) | interface RouteDescriptor { type SupplyChainServiceHandler (line 153) | interface SupplyChainServiceHandler { function createSupplyChainServiceRoutes (line 159) | function createSupplyChainServiceRoutes( FILE: src/generated/server/worldmonitor/thermal/v1/service_server.ts type ListThermalEscalationsRequest (line 5) | interface ListThermalEscalationsRequest { type ListThermalEscalationsResponse (line 9) | interface ListThermalEscalationsResponse { type ThermalEscalationCluster (line 17) | interface ThermalEscalationCluster { type GeoCoordinates (line 46) | interface GeoCoordinates { type ThermalEscalationSummary (line 51) | interface ThermalEscalationSummary { type ThermalConfidence (line 60) | type ThermalConfidence = "THERMAL_CONFIDENCE_UNSPECIFIED" | "THERMAL_CON... type ThermalContext (line 62) | type ThermalContext = "THERMAL_CONTEXT_UNSPECIFIED" | "THERMAL_CONTEXT_W... type ThermalStatus (line 64) | type ThermalStatus = "THERMAL_STATUS_UNSPECIFIED" | "THERMAL_STATUS_NORM... type ThermalStrategicRelevance (line 66) | type ThermalStrategicRelevance = "THERMAL_RELEVANCE_UNSPECIFIED" | "THER... type FieldViolation (line 68) | interface FieldViolation { class ValidationError (line 73) | class ValidationError extends Error { method constructor (line 76) | constructor(violations: FieldViolation[]) { class ApiError (line 83) | class ApiError extends Error { method constructor (line 87) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 95) | interface ServerContext { type ServerOptions (line 101) | interface ServerOptions { type RouteDescriptor (line 106) | interface RouteDescriptor { type ThermalServiceHandler (line 112) | interface ThermalServiceHandler { function createThermalServiceRoutes (line 116) | function createThermalServiceRoutes( FILE: src/generated/server/worldmonitor/trade/v1/service_server.ts type GetTradeRestrictionsRequest (line 5) | interface GetTradeRestrictionsRequest { type GetTradeRestrictionsResponse (line 10) | interface GetTradeRestrictionsResponse { type TradeRestriction (line 16) | interface TradeRestriction { type GetTariffTrendsRequest (line 28) | interface GetTariffTrendsRequest { type GetTariffTrendsResponse (line 35) | interface GetTariffTrendsResponse { type TariffDataPoint (line 42) | interface TariffDataPoint { type EffectiveTariffRate (line 52) | interface EffectiveTariffRate { type GetTradeFlowsRequest (line 60) | interface GetTradeFlowsRequest { type GetTradeFlowsResponse (line 66) | interface GetTradeFlowsResponse { type TradeFlowRecord (line 72) | interface TradeFlowRecord { type GetTradeBarriersRequest (line 83) | interface GetTradeBarriersRequest { type GetTradeBarriersResponse (line 89) | interface GetTradeBarriersResponse { type TradeBarrier (line 95) | interface TradeBarrier { type GetCustomsRevenueRequest (line 107) | interface GetCustomsRevenueRequest { type GetCustomsRevenueResponse (line 110) | interface GetCustomsRevenueResponse { type CustomsRevenueMonth (line 116) | interface CustomsRevenueMonth { type FieldViolation (line 125) | interface FieldViolation { class ValidationError (line 130) | class ValidationError extends Error { method constructor (line 133) | constructor(violations: FieldViolation[]) { class ApiError (line 140) | class ApiError extends Error { method constructor (line 144) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 152) | interface ServerContext { type ServerOptions (line 158) | interface ServerOptions { type RouteDescriptor (line 163) | interface RouteDescriptor { type TradeServiceHandler (line 169) | interface TradeServiceHandler { function createTradeServiceRoutes (line 177) | function createTradeServiceRoutes( FILE: src/generated/server/worldmonitor/unrest/v1/service_server.ts type ListUnrestEventsRequest (line 5) | interface ListUnrestEventsRequest { type ListUnrestEventsResponse (line 18) | interface ListUnrestEventsResponse { type UnrestEvent (line 24) | interface UnrestEvent { type GeoCoordinates (line 43) | interface GeoCoordinates { type UnrestCluster (line 48) | interface UnrestCluster { type PaginationResponse (line 60) | interface PaginationResponse { type SeverityLevel (line 65) | type SeverityLevel = "SEVERITY_LEVEL_UNSPECIFIED" | "SEVERITY_LEVEL_LOW"... type ConfidenceLevel (line 67) | type ConfidenceLevel = "CONFIDENCE_LEVEL_UNSPECIFIED" | "CONFIDENCE_LEVE... type UnrestEventType (line 69) | type UnrestEventType = "UNREST_EVENT_TYPE_UNSPECIFIED" | "UNREST_EVENT_T... type UnrestSourceType (line 71) | type UnrestSourceType = "UNREST_SOURCE_TYPE_UNSPECIFIED" | "UNREST_SOURC... type FieldViolation (line 73) | interface FieldViolation { class ValidationError (line 78) | class ValidationError extends Error { method constructor (line 81) | constructor(violations: FieldViolation[]) { class ApiError (line 88) | class ApiError extends Error { method constructor (line 92) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 100) | interface ServerContext { type ServerOptions (line 106) | interface ServerOptions { type RouteDescriptor (line 111) | interface RouteDescriptor { type UnrestServiceHandler (line 117) | interface UnrestServiceHandler { function createUnrestServiceRoutes (line 121) | function createUnrestServiceRoutes( FILE: src/generated/server/worldmonitor/webcam/v1/service_server.ts type ListWebcamsRequest (line 5) | interface ListWebcamsRequest { type ListWebcamsResponse (line 13) | interface ListWebcamsResponse { type WebcamEntry (line 19) | interface WebcamEntry { type WebcamCluster (line 28) | interface WebcamCluster { type GetWebcamImageRequest (line 35) | interface GetWebcamImageRequest { type GetWebcamImageResponse (line 39) | interface GetWebcamImageResponse { type FieldViolation (line 48) | interface FieldViolation { class ValidationError (line 53) | class ValidationError extends Error { method constructor (line 56) | constructor(violations: FieldViolation[]) { class ApiError (line 63) | class ApiError extends Error { method constructor (line 67) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 75) | interface ServerContext { type ServerOptions (line 81) | interface ServerOptions { type RouteDescriptor (line 86) | interface RouteDescriptor { type WebcamServiceHandler (line 92) | interface WebcamServiceHandler { function createWebcamServiceRoutes (line 97) | function createWebcamServiceRoutes( FILE: src/generated/server/worldmonitor/wildfire/v1/service_server.ts type ListFireDetectionsRequest (line 5) | interface ListFireDetectionsRequest { type ListFireDetectionsResponse (line 16) | interface ListFireDetectionsResponse { type FireDetection (line 21) | interface FireDetection { type GeoCoordinates (line 33) | interface GeoCoordinates { type PaginationResponse (line 38) | interface PaginationResponse { type FireConfidence (line 43) | type FireConfidence = "FIRE_CONFIDENCE_UNSPECIFIED" | "FIRE_CONFIDENCE_L... type FieldViolation (line 45) | interface FieldViolation { class ValidationError (line 50) | class ValidationError extends Error { method constructor (line 53) | constructor(violations: FieldViolation[]) { class ApiError (line 60) | class ApiError extends Error { method constructor (line 64) | constructor(statusCode: number, message: string, body: string) { type ServerContext (line 72) | interface ServerContext { type ServerOptions (line 78) | interface ServerOptions { type RouteDescriptor (line 83) | interface RouteDescriptor { type WildfireServiceHandler (line 89) | interface WildfireServiceHandler { function createWildfireServiceRoutes (line 93) | function createWildfireServiceRoutes( FILE: src/live-channels-main.ts function main (line 9) | async function main(): Promise { FILE: src/live-channels-window.ts function customChannelIdFromHandle (line 20) | function customChannelIdFromHandle(handle: string): string { function parseYouTubeInput (line 31) | function parseYouTubeInput(raw: string): { handle: string } | { videoId:... function isHlsUrl (line 63) | function isHlsUrl(raw: string): boolean { function channelInitials (line 76) | function channelInitials(name: string): string { function initLiveChannelsWindow (line 80) | async function initLiveChannelsWindow(containerEl?: HTMLElement): Promis... FILE: src/main.ts method beforeSend (line 248) | beforeSend(event) { method get (line 405) | get() { method set (line 410) | set(v: boolean) { FILE: src/services/activity-tracker.ts type ActivityState (line 6) | interface ActivityState { constant NEW_TAG_DURATION_MS (line 18) | const NEW_TAG_DURATION_MS = 2 * 60 * 1000; constant HIGHLIGHT_DURATION_MS (line 21) | const HIGHLIGHT_DURATION_MS = 30 * 1000; class ActivityTracker (line 23) | class ActivityTracker { method register (line 31) | register(panelId: string): void { method updateItems (line 46) | updateItems(panelId: string, itemIds: string[]): string[] { method markAsSeen (line 88) | markAsSeen(panelId: string): void { method getNewCount (line 110) | getNewCount(panelId: string): number { method isNewItem (line 117) | isNewItem(panelId: string, itemId: string): boolean { method shouldHighlight (line 130) | shouldHighlight(panelId: string, itemId: string): boolean { method getRelativeTime (line 146) | getRelativeTime(panelId: string, itemId: string): string { method onChange (line 169) | onChange(panelId: string, callback: (newCount: number) => void): void { method observePanel (line 176) | observePanel(panelId: string, element: HTMLElement): void { method unobservePanel (line 199) | unobservePanel(panelId: string): void { method unregister (line 207) | unregister(panelId: string): void { method clear (line 216) | clear(): void { FILE: src/services/ai-classify-queue.ts constant AI_CLASSIFY_DEDUP_MS (line 3) | const AI_CLASSIFY_DEDUP_MS = 30 * 60 * 1000; constant AI_CLASSIFY_WINDOW_MS (line 4) | const AI_CLASSIFY_WINDOW_MS = 60 * 1000; constant AI_CLASSIFY_MAX_PER_WINDOW (line 5) | const AI_CLASSIFY_MAX_PER_WINDOW = constant AI_CLASSIFY_MAX_PER_FEED (line 7) | const AI_CLASSIFY_MAX_PER_FEED = function toAiKey (line 13) | function toAiKey(title: string): string { function canQueueAiClassification (line 17) | function canQueueAiClassification(title: string): boolean { FILE: src/services/ai-flow-settings.ts constant STORAGE_KEY_BROWSER_MODEL (line 9) | const STORAGE_KEY_BROWSER_MODEL = 'wm-ai-flow-browser-model'; constant STORAGE_KEY_CLOUD_LLM (line 10) | const STORAGE_KEY_CLOUD_LLM = 'wm-ai-flow-cloud-llm'; constant STORAGE_KEY_MAP_NEWS_FLASH (line 11) | const STORAGE_KEY_MAP_NEWS_FLASH = 'wm-map-news-flash'; constant STORAGE_KEY_HEADLINE_MEMORY (line 12) | const STORAGE_KEY_HEADLINE_MEMORY = 'wm-headline-memory'; constant STORAGE_KEY_BADGE_ANIMATION (line 13) | const STORAGE_KEY_BADGE_ANIMATION = 'wm-badge-animation'; constant STORAGE_KEY_STREAM_QUALITY (line 14) | const STORAGE_KEY_STREAM_QUALITY = 'wm-stream-quality'; constant EVENT_NAME (line 15) | const EVENT_NAME = 'ai-flow-changed'; constant STREAM_QUALITY_EVENT (line 16) | const STREAM_QUALITY_EVENT = 'stream-quality-changed'; type AiFlowSettings (line 18) | interface AiFlowSettings { function readBool (line 26) | function readBool(key: string, defaultValue: boolean): boolean { function writeBool (line 36) | function writeBool(key: string, value: boolean): void { constant STORAGE_KEY_MAP (line 44) | const STORAGE_KEY_MAP: Record = { constant DEFAULTS (line 52) | const DEFAULTS: AiFlowSettings = { function getAiFlowSettings (line 60) | function getAiFlowSettings(): AiFlowSettings { function isHeadlineMemoryEnabled (line 70) | function isHeadlineMemoryEnabled(): boolean { function setAiFlowSetting (line 74) | function setAiFlowSetting(key: keyof AiFlowSettings, value: boolean): vo... function isAnyAiProviderEnabled (line 79) | function isAnyAiProviderEnabled(): boolean { function subscribeAiFlowChange (line 84) | function subscribeAiFlowChange(cb: (changedKey?: keyof AiFlowSettings) =... type StreamQuality (line 95) | type StreamQuality = 'auto' | 'small' | 'medium' | 'large' | 'hd720'; constant STREAM_QUALITY_OPTIONS (line 97) | const STREAM_QUALITY_OPTIONS: { value: StreamQuality; label: string }[] = [ function getStreamQuality (line 105) | function getStreamQuality(): StreamQuality { function setStreamQuality (line 113) | function setStreamQuality(quality: StreamQuality): void { function subscribeStreamQualityChange (line 120) | function subscribeStreamQualityChange(cb: (quality: StreamQuality) => vo... FILE: src/services/analysis-core.ts constant TOPIC_BASELINE_WINDOW_MS (line 39) | const TOPIC_BASELINE_WINDOW_MS = 7 * 24 * 60 * 60 * 1000; constant TOPIC_BASELINE_SPIKE_MULTIPLIER (line 40) | const TOPIC_BASELINE_SPIKE_MULTIPLIER = 3; constant TOPIC_HISTORY_MAX_POINTS (line 41) | const TOPIC_HISTORY_MAX_POINTS = 1000; type TopicVelocityPoint (line 43) | interface TopicVelocityPoint { type NewsItemCore (line 61) | interface NewsItemCore { type NewsItemWithTier (line 76) | type NewsItemWithTier = NewsItemCore & { tier: number }; type ClusteredEventCore (line 78) | interface ClusteredEventCore { type PredictionMarketCore (line 97) | interface PredictionMarketCore { type MarketDataCore (line 103) | interface MarketDataCore { type SignalType (line 111) | type SignalType = type CorrelationSignalCore (line 127) | interface CorrelationSignalCore { type SourceType (line 149) | type SourceType = 'wire' | 'gov' | 'intel' | 'mainstream' | 'market' | '... type StreamSnapshot (line 151) | interface StreamSnapshot { function generateClusterId (line 163) | function generateClusterId(items: NewsItemWithTier[]): string { function clusterNewsCore (line 173) | function clusterNewsCore( function extractTopics (line 306) | function extractTopics(events: ClusteredEventCore[]): Map { function pruneVelocityHistory (line 322) | function pruneVelocityHistory(history: TopicVelocityPoint[], now: number... function averageVelocity (line 326) | function averageVelocity(history: TopicVelocityPoint[]): number { function countRelatedTopicMentions (line 332) | function countRelatedTopicMentions( function detectPipelineFlowDrops (line 343) | function detectPipelineFlowDrops( function detectConvergence (line 384) | function detectConvergence( function detectTriangulation (line 433) | function detectTriangulation( function analyzeCorrelationsCore (line 481) | function analyzeCorrelationsCore( FILE: src/services/analysis-worker.ts type PendingRequest (line 14) | interface PendingRequest { type ClusterResult (line 20) | interface ClusterResult { type CorrelationResult (line 26) | interface CorrelationResult { type WorkerResult (line 32) | type WorkerResult = ClusterResult | CorrelationResult | { type: 'ready' }; class AnalysisWorkerManager (line 34) | class AnalysisWorkerManager { method initWorker (line 49) | private initWorker(): void { method cleanup (line 141) | private cleanup(): void { method waitForReady (line 159) | private async waitForReady(): Promise { method generateId (line 168) | private generateId(): string { method request (line 172) | private request( method clusterNews (line 203) | async clusterNews(items: NewsItem[]): Promise { method analyzeCorrelations (line 217) | async analyzeCorrelations( method reset (line 239) | reset(): void { method terminate (line 255) | terminate(): void { method ready (line 268) | get ready(): boolean { FILE: src/services/analytics.ts function initAnalytics (line 9) | async function initAnalytics(): Promise { function trackEvent (line 13) | function trackEvent(_name: string, _props?: Record): vo... function trackEventBeforeUnload (line 17) | function trackEventBeforeUnload(_name: string, _props?: Record = { constant DELAY_TYPE_MAP (line 150) | const DELAY_TYPE_MAP: Record = { constant REGION_MAP (line 159) | const REGION_MAP: Record = { constant SOURCE_MAP (line 167) | const SOURCE_MAP: Record = { constant FLIGHT_STATUS_MAP (line 175) | const FLIGHT_STATUS_MAP: Record = { function msToDt (line 188) | function msToDt(ms: number): Date | null { return ms ? new Date(ms) : nu... function toDisplayAlert (line 190) | function toDisplayAlert(p: ProtoAlert): AirportDelayAlert { function toDisplayOps (line 207) | function toDisplayOps(p: ProtoOpsSummary): AirportOpsSummary { function toDisplayFlight (line 217) | function toDisplayFlight(p: ProtoFlight): FlightInstance { function toDisplayCarrierOps (line 232) | function toDisplayCarrierOps(p: ProtoCarrierOps): CarrierOps { function toDisplayPosition (line 241) | function toDisplayPosition(p: ProtoPosition): PositionSample { function toDisplayPriceQuote (line 250) | function toDisplayPriceQuote(p: ProtoPriceQuote): PriceQuote { function toDisplayNewsItem (line 264) | function toDisplayNewsItem(p: ProtoAviationNews): AviationNewsItem { function fetchFlightDelays (line 287) | async function fetchFlightDelays(): Promise { function fetchAirportOpsSummary (line 297) | async function fetchAirportOpsSummary(airports: string[]): Promise { function fetchFlightStatus (line 319) | async function fetchFlightStatus(flightNumber: string, date?: string, or... function fetchAircraftPositions (line 326) | async function fetchAircraftPositions(opts: { icao24?: string; callsign?... function fetchFlightPrices (line 333) | async function fetchFlightPrices(opts: { origin: string; destination: st... function fetchAviationNews (line 351) | async function fetchAviationNews(entities: string[], windowHours = 24, m... FILE: src/services/aviation/watchlist.ts constant STORAGE_KEY (line 6) | const STORAGE_KEY = 'aviation:watchlist:v1'; type AviationWatchlist (line 8) | interface AviationWatchlist { constant DEFAULT_WATCHLIST (line 14) | const DEFAULT_WATCHLIST: AviationWatchlist = { function load (line 20) | function load(): AviationWatchlist { function save (line 35) | function save(wl: AviationWatchlist): void { method get (line 42) | get(): AviationWatchlist { method set (line 46) | set(wl: Partial): void { method addAirport (line 51) | addAirport(iata: string): void { method removeAirport (line 60) | removeAirport(iata: string): void { method addAirline (line 66) | addAirline(iata: string): void { method removeAirline (line 75) | removeAirline(iata: string): void { method addRoute (line 81) | addRoute(origin: string, destination: string): void { method removeRoute (line 90) | removeRoute(route: string): void { method reset (line 96) | reset(): void { FILE: src/services/bootstrap.ts function getHydratedData (line 5) | function getHydratedData(key: string): unknown | undefined { function populateCache (line 11) | function populateCache(data: Record): void { function fetchTier (line 19) | async function fetchTier(tier: string, signal: AbortSignal): Promise { FILE: src/services/breaking-news-alerts.ts type BreakingAlert (line 5) | interface BreakingAlert { type AlertSettings (line 15) | interface AlertSettings { constant SETTINGS_KEY (line 22) | const SETTINGS_KEY = 'wm-breaking-alerts-v1'; constant DEDUPE_KEY (line 23) | const DEDUPE_KEY = 'wm-breaking-alerts-dedupe'; constant RECENCY_GATE_MS (line 24) | const RECENCY_GATE_MS = 15 * 60 * 1000; constant PER_EVENT_COOLDOWN_MS (line 25) | const PER_EVENT_COOLDOWN_MS = 30 * 60 * 1000; constant GLOBAL_COOLDOWN_MS (line 26) | const GLOBAL_COOLDOWN_MS = 60 * 1000; constant STARTUP_GRACE_MS (line 29) | const STARTUP_GRACE_MS = 10 * 1000; constant DEFAULT_SETTINGS (line 31) | const DEFAULT_SETTINGS: AlertSettings = { function simpleHash (line 45) | function simpleHash(str: string): string { function normalizeTitle (line 54) | function normalizeTitle(title: string): string { function extractHostname (line 58) | function extractHostname(url: string): string { function makeAlertKey (line 66) | function makeAlertKey(headline: string, source: string, link?: string): ... function loadDedupeMap (line 74) | function loadDedupeMap(): void { function saveDedupeMap (line 88) | function saveDedupeMap(): void { function getAlertSettings (line 97) | function getAlertSettings(): AlertSettings { function updateAlertSettings (line 111) | function updateAlertSettings(partial: Partial): void { function isRecent (line 122) | function isRecent(pubDate: Date): boolean { function isInStartupGrace (line 126) | function isInStartupGrace(): boolean { function pruneDedupeMap (line 130) | function pruneDedupeMap(): void { function isDuplicate (line 137) | function isDuplicate(key: string): boolean { function isGlobalCooldown (line 143) | function isGlobalCooldown(candidateLevel: 'critical' | 'high'): boolean { function dispatchAlert (line 149) | function dispatchAlert(alert: BreakingAlert): void { function checkBatchForBreakingAlerts (line 158) | function checkBatchForBreakingAlerts(items: NewsItem[]): void { function dispatchOrefBreakingAlert (line 207) | function dispatchOrefBreakingAlert(alerts: OrefAlert[]): void { function initBreakingNewsAlerts (line 235) | function initBreakingNewsAlerts(): void { function destroyBreakingNewsAlerts (line 246) | function destroyBreakingNewsAlerts(): void { FILE: src/services/cable-activity.ts type CableActivity (line 8) | interface CableActivity { type NgaWarning (line 13) | interface NgaWarning { constant CABLE_KEYWORDS (line 24) | const CABLE_KEYWORDS = [ constant CABLESHIP_PATTERNS (line 36) | const CABLESHIP_PATTERNS = [ function isCableRelated (line 44) | function isCableRelated(text: string): boolean { function parseCoordinates (line 49) | function parseCoordinates(text: string): { lat: number; lon: number }[] { function extractCableshipName (line 96) | function extractCableshipName(text: string): string | null { function findNearestCable (line 110) | function findNearestCable(lat: number, lon: number): UnderseaCable | null { function parseIssueDate (line 128) | function parseIssueDate(dateStr: string): Date { function determineSeverity (line 151) | function determineSeverity(text: string): 'fault' | 'degraded' { function determineShipStatus (line 156) | function determineShipStatus(text: string): 'enroute' | 'on-station' { function slugify (line 161) | function slugify(text: string): string { function processWarnings (line 169) | function processWarnings(warnings: NgaWarning[]): CableActivity { function protoToNgaWarning (line 249) | function protoToNgaWarning(w: NavigationalWarning): NgaWarning { function formatNgaDate (line 272) | function formatNgaDate(epochMs: number): string { function fetchCableActivity (line 284) | async function fetchCableActivity(): Promise { FILE: src/services/cable-health.ts constant STATUS_REVERSE (line 16) | const STATUS_REVERSE: Record = { function toRecord (line 23) | function toRecord(proto: ProtoCableHealthRecord): CableHealthRecord { constant LOCAL_CACHE_MS (line 41) | const LOCAL_CACHE_MS = 60_000; function fetchCableHealth (line 45) | async function fetchCableHealth(): Promise { function getCableHealthRecord (line 69) | function getCableHealthRecord(cableId: string): CableHealthRecord | unde... function getCableHealthMap (line 73) | function getCableHealthMap(): Record { FILE: src/services/cached-risk-scores.ts type CachedCIIScore (line 19) | interface CachedCIIScore { type CachedStrategicRisk (line 30) | interface CachedStrategicRisk { type CachedRiskScores (line 43) | interface CachedRiskScores { constant TIER1_NAMES (line 53) | const TIER1_NAMES: Record = { constant TREND_REVERSE (line 61) | const TREND_REVERSE: Record = { constant SEVERITY_REVERSE (line 67) | const SEVERITY_REVERSE: Record = { function getScoreLevel (line 73) | function getScoreLevel(score: number): 'low' | 'normal' | 'elevated' | '... function toCachedCII (line 81) | function toCachedCII(proto: CiiScore): CachedCIIScore { function toCachedStrategicRisk (line 99) | function toCachedStrategicRisk(risks: StrategicRisk[], ciiScores: CiiSco... function toRiskScores (line 119) | function toRiskScores(resp: GetRiskScoresResponse): CachedRiskScores { constant VALID_LEVELS (line 131) | const VALID_LEVELS = new Set(['low', 'normal', 'elevated', 'high', 'crit... function isValidCiiEntry (line 133) | function isValidCiiEntry(e: unknown): e is CachedCIIScore { constant LS_KEY (line 141) | const LS_KEY = 'wm:risk-scores'; constant LS_MAX_STALENESS_MS (line 142) | const LS_MAX_STALENESS_MS = 60 * 60 * 1000; function loadFromStorage (line 144) | function loadFromStorage(): CachedRiskScores | null { function saveToStorage (line 165) | function saveToStorage(data: CachedRiskScores): void { function emptyFallback (line 187) | function emptyFallback(): CachedRiskScores { function createAbortError (line 199) | function createAbortError(): DOMException { function withCallerAbort (line 203) | function withCallerAbort(promise: Promise, signal?: AbortSignal): ... function fetchCachedRiskScores (line 227) | async function fetchCachedRiskScores(signal?: AbortSignal): Promise = { function toPostureSummary (line 49) | function toPostureSummary(proto: TheaterPosture): TheaterPostureSummary { function toPostureData (line 93) | function toPostureData(resp: GetTheaterPostureResponse): CachedTheaterPo... function emptyFallback (line 112) | function emptyFallback(): CachedTheaterPosture { constant LS_KEY (line 123) | const LS_KEY = 'wm:theater-posture'; constant LS_MAX_STALENESS_MS (line 124) | const LS_MAX_STALENESS_MS = 24 * 60 * 60 * 1000; function createAbortError (line 126) | function createAbortError(): DOMException { function withCallerAbort (line 130) | function withCallerAbort(promise: Promise, signal?: AbortSignal): ... function loadFromStorage (line 154) | function loadFromStorage(): CachedTheaterPosture | null { function saveToStorage (line 171) | function saveToStorage(data: CachedTheaterPosture): void { function fetchCachedTheaterPosture (line 181) | async function fetchCachedTheaterPosture(signal?: AbortSignal): Promise<... function getCachedPosture (line 213) | function getCachedPosture(): CachedTheaterPosture | null { function hasCachedPosture (line 217) | function hasCachedPosture(): boolean { FILE: src/services/celebration.ts type MilestoneData (line 18) | interface MilestoneData { constant REDUCED_MOTION (line 27) | const REDUCED_MOTION = typeof window !== 'undefined' constant WARM_COLORS (line 32) | const WARM_COLORS = ['#6B8F5E', '#C4A35A', '#7BA5C4', '#8BAF7A', '#E8B96... function celebrate (line 45) | function celebrate(type: 'milestone' | 'record' = 'milestone'): void { function checkMilestones (line 84) | function checkMilestones(data: MilestoneData): void { function resetCelebrations (line 125) | function resetCelebrations(): void { FILE: src/services/climate/index.ts type ClimateAnomaly (line 16) | interface ClimateAnomaly { type ClimateFetchResult (line 37) | interface ClimateFetchResult { function fetchClimateAnomalies (line 47) | async function fetchClimateAnomalies(): Promise { function getSeverityIcon (line 64) | function getSeverityIcon(anomaly: ClimateAnomaly): string { function formatDelta (line 75) | function formatDelta(value: number, unit: string): string { function toDisplayAnomaly (line 81) | function toDisplayAnomaly(proto: ProtoClimateAnomaly): ClimateAnomaly { function mapSeverity (line 94) | function mapSeverity(s: ProtoAnomalySeverity): ClimateAnomaly['severity'] { function mapType (line 102) | function mapType(t: ProtoAnomalyType): ClimateAnomaly['type'] { FILE: src/services/clustering.ts function clusterNews (line 13) | function clusterNews(items: NewsItem[]): ClusteredEvent[] { function clusterNewsHybrid (line 20) | async function clusterNewsHybrid(items: NewsItem[]): Promise = { function toUcdpGeoEvent (line 129) | function toUcdpGeoEvent(proto: ProtoUcdpEvent): UcdpGeoEvent { constant HAPI_COUNTRY_CODES (line 149) | const HAPI_COUNTRY_CODES = [ function toHapiSummary (line 154) | function toHapiSummary(proto: ProtoHumanSummary): HapiConflictSummary { function deriveUcdpClassifications (line 171) | function deriveUcdpClassifications(events: ProtoUcdpEvent[]): Map { function fetchUcdpClassifications (line 281) | async function fetchUcdpClassifications(hydrated?: ListUcdpEventsRespons... function fetchHapiSummary (line 294) | async function fetchHapiSummary(): Promise): Ir... constant IRAN_RGBA (line 426) | const IRAN_RGBA: Record... constant IRAN_CSS (line 429) | const IRAN_CSS: Record = { function getIranEventColor (line 433) | function getIranEventColor(ev: Pick)... function getIranEventCssColor (line 437) | function getIranEventCssColor(ev: Pick): string { function getIranEventRadius (line 447) | function getIranEventRadius(severity: string): number { function getIranEventSize (line 453) | function getIranEventSize(severity: string): number { function fetchIranEvents (line 459) | async function fetchIranEvents(): Promise { FILE: src/services/conservation-data.ts type SpeciesRecovery (line 14) | interface SpeciesRecovery { function fetchConservationWins (line 38) | async function fetchConservationWins(): Promise { FILE: src/services/correlation-engine/adapters/disaster.ts constant WEIGHTS (line 6) | const WEIGHTS: Record = { method collectSignals (line 20) | collectSignals(ctx: AppContext): SignalEvidence[] { method generateTitle (line 89) | generateTitle(cluster: SignalEvidence[]): string { FILE: src/services/correlation-engine/adapters/economic.ts constant WEIGHTS (line 5) | const WEIGHTS: Record = { constant SANCTIONS_KEYWORDS (line 11) | const SANCTIONS_KEYWORDS = /\b(sanction|tariff|embargo|trade\s+war|ban|r... constant COMMODITY_SYMBOLS (line 12) | const COMMODITY_SYMBOLS = new Set(['CL=F', 'GC=F', 'NG=F', 'SI=F', 'HG=F... constant SIGNIFICANT_CHANGE_PCT (line 13) | const SIGNIFICANT_CHANGE_PCT = 1.5; method collectSignals (line 24) | collectSignals(ctx: AppContext): SignalEvidence[] { method generateTitle (line 76) | generateTitle(cluster: SignalEvidence[], context?: { entityKey?: string;... constant KNOWN_ENTITIES (line 131) | const KNOWN_ENTITIES = /\b(Iran|Russia|China|North Korea|Venezuela|Cuba|... function extractMentionedEntities (line 133) | function extractMentionedEntities(labels: string[]): string { constant GENERIC_ENTITY_KEYS (line 141) | const GENERIC_ENTITY_KEYS = new Set([ function displayEntity (line 146) | function displayEntity(key?: string): string { FILE: src/services/correlation-engine/adapters/escalation.ts constant WEIGHTS (line 7) | const WEIGHTS: Record = { function normalizeToCode (line 13) | function normalizeToCode(country: string | undefined, lat?: number, lon?... constant ESCALATION_KEYWORDS (line 31) | const ESCALATION_KEYWORDS = /\b((?:military|armed|air)\s*(?:strike|attac... method collectSignals (line 42) | collectSignals(ctx: AppContext): SignalEvidence[] { method generateTitle (line 136) | generateTitle(cluster: SignalEvidence[]): string { FILE: src/services/correlation-engine/adapters/military.ts constant WEIGHTS (line 7) | const WEIGHTS: Record = { constant STRIKE_TYPES (line 13) | const STRIKE_TYPES = new Set(['fighter', 'bomber', 'attack']); constant SUPPORT_TYPES (line 14) | const SUPPORT_TYPES = new Set(['tanker', 'awacs', 'surveillance', 'elect... method collectSignals (line 25) | collectSignals(ctx: AppContext): SignalEvidence[] { method generateTitle (line 99) | generateTitle(cluster: SignalEvidence[]): string { FILE: src/services/correlation-engine/engine.ts constant LLM_SCORE_THRESHOLD (line 13) | const LLM_SCORE_THRESHOLD = 60; constant LLM_CACHE_TTL_MS (line 14) | const LLM_CACHE_TTL_MS = 30 * 60 * 1000; constant LLM_MAX_CONCURRENT (line 15) | const LLM_MAX_CONCURRENT = 3; type LlmCacheEntry (line 17) | interface LlmCacheEntry { class CorrelationEngine (line 22) | class CorrelationEngine { method constructor (line 31) | constructor() { method registerAdapter (line 36) | registerAdapter(adapter: DomainAdapter): void { method run (line 42) | async run(ctx: AppContext): Promise { method getCards (line 84) | getCards(domain: string): ConvergenceCard[] { method clusterSignals (line 90) | private clusterSignals( method clusterByCountry (line 106) | private clusterByCountry(signals: SignalEvidence[]): SignalCluster[] { method clusterByEntity (line 122) | private clusterByEntity(signals: SignalEvidence[]): SignalCluster[] { method clusterByProximity (line 160) | private clusterByProximity( method scoreClusters (line 237) | private scoreClusters( method applyTrends (line 299) | private applyTrends( method toCard (line 331) | private toCard( method queueLlmAssessments (line 358) | private queueLlmAssessments(cards: ConvergenceCard[], adapter: DomainA... method llmCacheKey (line 380) | private llmCacheKey(card: ConvergenceCard): string { method fetchAssessment (line 389) | private async fetchAssessment( method pruneLlmCache (line 432) | pruneLlmCache(): void { type SignalCluster (line 443) | interface SignalCluster { type ScoredCluster (line 449) | interface ScoredCluster { type ScoredClusterWithTrend (line 458) | interface ScoredClusterWithTrend extends ScoredCluster { FILE: src/services/correlation-engine/types.ts type CorrelationDomain (line 6) | type CorrelationDomain = 'military' | 'escalation' | 'economic' | 'disas... type TrendDirection (line 7) | type TrendDirection = 'escalating' | 'stable' | 'de-escalating'; type SignalEvidence (line 9) | interface SignalEvidence { type ConvergenceCard (line 21) | interface ConvergenceCard { type ClusterMode (line 34) | type ClusterMode = 'geographic' | 'country' | 'entity'; type DomainAdapter (line 36) | interface DomainAdapter { type ClusterState (line 48) | interface ClusterState { FILE: src/services/correlation.ts type SignalType (line 17) | type SignalType = CorrelationSignalCore['type']; type CorrelationSignal (line 18) | type CorrelationSignal = CorrelationSignalCore; constant DEFAULT_DEDUPE_TTL (line 25) | const DEFAULT_DEDUPE_TTL = 30 * 60 * 1000; constant DEDUPE_TTLS (line 26) | const DEDUPE_TTLS: Record = { function getDedupeType (line 34) | function getDedupeType(key: string): string { function isRecentDuplicate (line 38) | function isRecentDuplicate(key: string): boolean { function markSignalSeen (line 46) | function markSignalSeen(key: string): void { function analyzeCorrelations (line 56) | function analyzeCorrelations( function getRecentSignals (line 77) | function getRecentSignals(): CorrelationSignal[] { function addToSignalHistory (line 82) | function addToSignalHistory(signals: CorrelationSignal[]): void { FILE: src/services/country-geometry.ts type IndexedCountryGeometry (line 3) | interface IndexedCountryGeometry { type CountryHit (line 10) | interface CountryHit { constant COUNTRY_GEOJSON_URL (line 15) | const COUNTRY_GEOJSON_URL = '/data/countries.geojson'; constant COUNTRY_OVERRIDES_URL (line 18) | const COUNTRY_OVERRIDES_URL = 'https://maps.worldmonitor.app/country-bou... constant COUNTRY_OVERRIDE_TIMEOUT_MS (line 19) | const COUNTRY_OVERRIDE_TIMEOUT_MS = 3_000; constant POLITICAL_OVERRIDES (line 21) | const POLITICAL_OVERRIDES: Record = { 'CN-TW': 'TW' }; constant NAME_ALIASES (line 23) | const NAME_ALIASES: Record = { function normalizeCode (line 41) | function normalizeCode(properties: GeoJsonProperties | null | undefined)... function normalizeName (line 50) | function normalizeName(properties: GeoJsonProperties | null | undefined)... function toCoord (line 58) | function toCoord(point: Position): [number, number] | null { function normalizePolygonRings (line 66) | function normalizePolygonRings(rings: Position[][]): [number, number][][] { function normalizeGeometry (line 72) | function normalizeGeometry(geometry: Geometry | null | undefined): [numb... function computeBbox (line 86) | function computeBbox(polygons: [number, number][][][]): [number, number,... function pointOnSegment (line 108) | function pointOnSegment( function pointInRing (line 122) | function pointInRing(lon: number, lat: number, ring: [number, number][])... function pointInCountryGeometry (line 138) | function pointInCountryGeometry(country: IndexedCountryGeometry, lon: nu... function escapeRegex (line 158) | function escapeRegex(str: string): string { function buildCountryNameMatchers (line 162) | function buildCountryNameMatchers(): void { function makeTimeout (line 173) | function makeTimeout(ms: number): AbortSignal { function rebuildCountryIndex (line 180) | function rebuildCountryIndex(data: FeatureCollection): void { function applyCountryGeometryOverrides (line 217) | function applyCountryGeometryOverrides( function ensureLoaded (line 245) | async function ensureLoaded(): Promise { function preloadCountryGeometry (line 290) | async function preloadCountryGeometry(): Promise { function getCountriesGeoJson (line 294) | async function getCountriesGeoJson(): Promise { function normalizeCountryName (line 229) | function normalizeCountryName(name: string): string | null { function ingestProtestsForCII (line 237) | function ingestProtestsForCII(events: SocialUnrestEvent[]): void { function ingestConflictsForCII (line 249) | function ingestConflictsForCII(events: ConflictEvent[]): void { function ingestUcdpForCII (line 261) | function ingestUcdpForCII(classifications: Map): ... function ingestDisplacementForCII (line 281) | function ingestDisplacementForCII(countries: CountryDisplacement[]): void { constant ZONE_COUNTRY_MAP (line 304) | const ZONE_COUNTRY_MAP: Record = { function ingestClimateForCII (line 309) | function ingestClimateForCII(anomalies: ClimateAnomaly[]): void { function getCountryFromLocation (line 325) | function getCountryFromLocation(lat: number, lon: number): string | null { function haversineKm (line 330) | function haversineKm(lat1: number, lon1: number, lat2: number, lon2: num... function resetHotspotActivity (line 340) | function resetHotspotActivity(): void { function trackHotspotActivity (line 344) | function trackHotspotActivity(lat: number, lon: number, weight: number =... function getHotspotBoost (line 385) | function getHotspotBoost(countryCode: string): number { function ingestMilitaryForCII (line 390) | function ingestMilitaryForCII(flights: MilitaryFlight[], vessels: Milita... function ingestNewsForCII (line 446) | function ingestNewsForCII(events: ClusteredEvent[]): void { function coordsToBoundsCountry (line 477) | function coordsToBoundsCountry(lat: number, lon: number): string | null { function ingestStrikesForCII (line 481) | function ingestStrikesForCII(events: Array<{ function ingestOutagesForCII (line 505) | function ingestOutagesForCII(outages: InternetOutage[]): void { function ingestOrefForCII (line 516) | function ingestOrefForCII(alertCount: number, historyCount24h: number): ... function getOrefBlendBoost (line 523) | function getOrefBlendBoost(code: string, data: CountryData): number { function ingestAviationForCII (line 528) | function ingestAviationForCII(alerts: AirportDelayAlert[]): void { constant TRAVEL_ADVISORY_SOURCES (line 539) | const TRAVEL_ADVISORY_SOURCES = new Set(['US', 'AU', 'UK', 'NZ']); constant ADVISORY_LEVEL_RANK (line 540) | const ADVISORY_LEVEL_RANK: Record = { 'do-not-travel': 4... function ingestAdvisoriesForCII (line 542) | function ingestAdvisoriesForCII(advisories: SecurityAdvisory[]): void { function getAdvisoryBoost (line 565) | function getAdvisoryBoost(data: CountryData): number { function getAdvisoryFloor (line 579) | function getAdvisoryFloor(data: CountryData): number { function getSupplementalSignalBoost (line 585) | function getSupplementalSignalBoost(data: CountryData): number { function ingestGpsJammingForCII (line 607) | function ingestGpsJammingForCII(hexes: GpsJamHex[]): void { function resolveCountryForSignal (line 632) | function resolveCountryForSignal(countryHint: string | undefined, lat: n... function ingestAisDisruptionsForCII (line 643) | function ingestAisDisruptionsForCII(events: AisDisruptionEvent[]): void { function ingestSatelliteFiresForCII (line 662) | function ingestSatelliteFiresForCII(fires: Array<{ function ingestCyberThreatsForCII (line 687) | function ingestCyberThreatsForCII(threats: CyberThreat[]): void { function ingestTemporalAnomaliesForCII (line 706) | function ingestTemporalAnomaliesForCII(anomalies: TemporalAnomaly[]): vo... function calcUnrestScore (line 726) | function calcUnrestScore(data: CountryData, countryCode: string): number { function calcNewsConflictFloor (line 761) | function calcNewsConflictFloor(data: CountryData, multiplier: number, no... function calcConflictScore (line 790) | function calcConflictScore(data: CountryData, countryCode: string): numb... function getUcdpFloor (line 836) | function getUcdpFloor(data: CountryData): number { function calcSecurityScore (line 846) | function calcSecurityScore(data: CountryData): number { function calcInformationScore (line 866) | function calcInformationScore(data: CountryData, countryCode: string): n... function getLevel (line 891) | function getLevel(score: number): CountryScore['level'] { function getTrend (line 899) | function getTrend(code: string, current: number): CountryScore['trend'] { function calculateCII (line 908) | function calculateCII(): CountryScore[] { function getTopUnstableCountries (line 971) | function getTopUnstableCountries(limit = 10): CountryScore[] { function getCountryScore (line 975) | function getCountryScore(code: string): number | null { FILE: src/services/cross-module-integration.ts type AlertPriority (line 11) | type AlertPriority = 'critical' | 'high' | 'medium' | 'low'; type AlertType (line 12) | type AlertType = 'convergence' | 'cii_spike' | 'cascade' | 'sanctions' |... type UnifiedAlert (line 14) | interface UnifiedAlert { type CIIChangeAlert (line 32) | interface CIIChangeAlert { type CascadeAlert (line 42) | interface CascadeAlert { type SanctionsAlert (line 51) | interface SanctionsAlert { type RadiationAlert (line 64) | interface RadiationAlert { type StrategicRiskOverview (line 88) | interface StrategicRiskOverview { constant ALERT_MERGE_WINDOW_MS (line 102) | const ALERT_MERGE_WINDOW_MS = 2 * 60 * 60 * 1000; constant ALERT_MERGE_DISTANCE_KM (line 103) | const ALERT_MERGE_DISTANCE_KM = 200; function generateAlertId (line 106) | function generateAlertId(): string { function haversineDistance (line 110) | function haversineDistance( function getPriorityFromCIIChange (line 129) | function getPriorityFromCIIChange(change: number, level: CountryScore['l... function getPriorityFromCascadeImpact (line 138) | function getPriorityFromCascadeImpact(impact: CascadeImpactLevel, count:... function getPriorityFromConvergence (line 145) | function getPriorityFromConvergence(score: number, typeCount: number): A... function getPriorityFromSanctions (line 154) | function getPriorityFromSanctions(data: SanctionsPressureResult): AlertP... function getPriorityFromRadiation (line 162) | function getPriorityFromRadiation(observation: RadiationObservation, spi... function buildConvergenceAlert (line 178) | function buildConvergenceAlert(convergence: GeoConvergenceAlert, alertId... function createConvergenceAlert (line 193) | function createConvergenceAlert(convergence: GeoConvergenceAlert): Unifi... function createCIIAlert (line 199) | function createCIIAlert( function createCascadeAlert (line 237) | function createCascadeAlert(cascade: CascadeResult): UnifiedAlert | null { function createSanctionsAlert (line 266) | function createSanctionsAlert(): UnifiedAlert | null { function getRadiationRank (line 314) | function getRadiationRank(observation: RadiationObservation): number { function createRadiationAlert (line 322) | function createRadiationAlert(): UnifiedAlert | null { function shouldMergeAlerts (line 394) | function shouldMergeAlerts(a: UnifiedAlert, b: UnifiedAlert): boolean { function mergeAlerts (line 408) | function mergeAlerts(existing: UnifiedAlert, incoming: UnifiedAlert): Un... function getHigherPriority (line 427) | function getHigherPriority(a: AlertPriority, b: AlertPriority): AlertPri... function getCountryDisplayName (line 432) | function getCountryDisplayName(code: string): string { function generateCompositeTitle (line 436) | function generateCompositeTitle(a: UnifiedAlert, b: UnifiedAlert): string { function generateCompositeSummary (line 467) | function generateCompositeSummary(a: UnifiedAlert, b: UnifiedAlert): str... function addAndMergeAlert (line 504) | function addAndMergeAlert(alert: UnifiedAlert): UnifiedAlert { function getCountriesNearLocation (line 535) | function getCountriesNearLocation(lat: number, lon: number): string[] { function checkCIIChanges (line 561) | function checkCIIChanges(): UnifiedAlert[] { function getHighestComponent (line 592) | function getHighestComponent(score: CountryScore): string { function updateAlerts (line 600) | function updateAlerts(convergenceAlerts: GeoConvergenceAlert[]): void { function calculateStrategicRiskOverview (line 624) | function calculateStrategicRiskOverview( function calculateCIIRiskScore (line 714) | function calculateCIIRiskScore(scores: CountryScore[]): number { function determineTrend (line 743) | function determineTrend(current: number): 'escalating' | 'stable' | 'de-... function countInfrastructureIncidents (line 755) | function countInfrastructureIncidents(): number { function identifyTopRisks (line 759) | function identifyTopRisks( function getAlerts (line 801) | function getAlerts(): UnifiedAlert[] { function getRecentAlerts (line 805) | function getRecentAlerts(hours: number = 24): UnifiedAlert[] { function clearAlerts (line 810) | function clearAlerts(): void { function getAlertCount (line 814) | function getAlertCount(): { critical: number; high: number; medium: numb... FILE: src/services/cyber/index.ts constant THREAT_TYPE_REVERSE (line 26) | const THREAT_TYPE_REVERSE: Record = { constant SOURCE_REVERSE (line 33) | const SOURCE_REVERSE: Record = { constant INDICATOR_TYPE_REVERSE (line 41) | const INDICATOR_TYPE_REVERSE: Record = { constant SEVERITY_REVERSE (line 47) | const SEVERITY_REVERSE: Record = { function toCyberThreat (line 56) | function toCyberThreat(proto: ProtoCyberThreat): CyberThreat { constant DEFAULT_LIMIT (line 76) | const DEFAULT_LIMIT = 500; constant MAX_LIMIT (line 77) | const MAX_LIMIT = 1000; constant DEFAULT_DAYS (line 78) | const DEFAULT_DAYS = 14; constant MAX_DAYS (line 79) | const MAX_DAYS = 90; function clampInt (line 81) | function clampInt(rawValue: number | undefined, fallback: number, min: n... function fetchCyberThreats (line 86) | async function fetchCyberThreats(options: { limit?: number; days?: numbe... FILE: src/services/daily-market-brief.ts type DailyMarketBriefItem (line 6) | interface DailyMarketBriefItem { type DailyMarketBrief (line 17) | interface DailyMarketBrief { type BuildDailyMarketBriefOptions (line 33) | interface BuildDailyMarketBriefOptions { function getDefaultSummarizer (line 47) | async function getDefaultSummarizer(): Promise)... function resolveTargets (line 158) | function resolveTargets(markets: MarketData[], explicitTargets?: MarketW... function getStance (line 187) | function getStance(change: number | null): DailyMarketBriefItem['stance'] { function formatSignedPercent (line 194) | function formatSignedPercent(value: number | null): string { function buildItemNote (line 200) | function buildItemNote(change: number | null, relatedHeadline?: string):... function buildRuleSummary (line 212) | function buildRuleSummary(items: DailyMarketBriefItem[], headlineCount: ... function buildActionPlan (line 231) | function buildActionPlan(items: DailyMarketBriefItem[], headlineCount: n... function buildRiskWatch (line 250) | function buildRiskWatch(items: DailyMarketBriefItem[], headlines: NewsIt... function buildSummaryInputs (line 266) | function buildSummaryInputs(items: DailyMarketBriefItem[], headlines: Ne... function shouldRefreshDailyBrief (line 277) | function shouldRefreshDailyBrief( function getCachedDailyMarketBrief (line 290) | async function getCachedDailyMarketBrief(timezone?: string): Promise void): () => void { method calculateStatus (line 244) | private calculateStatus(source: DataSourceState): FreshnessStatus { method notifyListeners (line 256) | private notifyListeners(): void { method getTimeSince (line 269) | getTimeSince(sourceId: DataSourceId): string { function getStatusColor (line 285) | function getStatusColor(status: FreshnessStatus): string { function getStatusIcon (line 297) | function getStatusIcon(status: FreshnessStatus): string { constant INTELLIGENCE_GAP_MESSAGES (line 309) | const INTELLIGENCE_GAP_MESSAGES: Record = { function getIntelligenceGaps (line 350) | function getIntelligenceGaps(): { source: DataSourceId; message: string;... function getIntelligenceGapSummary (line 371) | function getIntelligenceGapSummary(): string[] { function hasCriticalGaps (line 382) | function hasCriticalGaps(): boolean { FILE: src/services/desktop-readiness.ts type LocalityClass (line 3) | type LocalityClass = 'fully-local' | 'api-key' | 'cloud-fallback'; type DesktopParityFeature (line 5) | interface DesktopParityFeature { type DesktopReadinessCheck (line 16) | interface DesktopReadinessCheck { constant DESKTOP_PARITY_FEATURES (line 39) | const DESKTOP_PARITY_FEATURES: DesktopParityFeature[] = [ function getNonParityFeatures (line 122) | function getNonParityFeatures(): DesktopParityFeature[] { function getDesktopReadinessChecks (line 126) | function getDesktopReadinessChecks(localBackendEnabled: boolean): Deskto... function getKeyBackedAvailabilitySummary (line 139) | function getKeyBackedAvailabilitySummary(): { available: number; total: ... FILE: src/services/displacement/index.ts type DisplacementFlow (line 12) | interface DisplacementFlow { type CountryDisplacement (line 24) | interface CountryDisplacement { type UnhcrSummary (line 39) | interface UnhcrSummary { type UnhcrFetchResult (line 52) | interface UnhcrFetchResult { function toDisplaySummary (line 67) | function toDisplaySummary(proto: ProtoResponse): UnhcrSummary { function toDisplayCountry (line 86) | function toDisplayCountry(proto: ProtoCountry): CountryDisplacement { function toDisplayFlow (line 103) | function toDisplayFlow(proto: ProtoFlow): DisplacementFlow { function fetchUnhcrPopulation (line 129) | async function fetchUnhcrPopulation(): Promise { function getDisplacementColor (line 147) | function getDisplacementColor(totalDisplaced: number): [number, number, ... function getDisplacementBadge (line 154) | function getDisplacementBadge(totalDisplaced: number): { label: string; ... function formatPopulation (line 161) | function formatPopulation(n: number): string { function getOriginCountries (line 167) | function getOriginCountries(data: UnhcrSummary): CountryDisplacement[] { function getHostCountries (line 173) | function getHostCountries(data: UnhcrSummary): CountryDisplacement[] { FILE: src/services/earthquakes.ts function fetchEarthquakes (line 18) | async function fetchEarthquakes(): Promise { FILE: src/services/economic/index.ts constant WB_BREAKERS_WARN_THRESHOLD (line 38) | const WB_BREAKERS_WARN_THRESHOLD = 50; function getWbBreaker (line 41) | function getWbBreaker(indicatorCode: string) { type FredSeries (line 74) | interface FredSeries { type FredConfig (line 86) | interface FredConfig { constant FRED_SERIES (line 94) | const FRED_SERIES: FredConfig[] = [ function toDisplayValue (line 109) | function toDisplayValue(value: number, config: FredConfig): number { function roundValue (line 113) | function roundValue(value: number, precision: number): number { function fetchFredData (line 117) | async function fetchFredData(): Promise { function getFredStatus (line 184) | function getFredStatus(): string { function getChangeClass (line 188) | function getChangeClass(change: number | null): string { function getFractionDigits (line 195) | function getFractionDigits(value: number): number { function formatValueWithUnit (line 201) | function formatValueWithUnit(value: number, unit: string): string { function formatFredValue (line 212) | function formatFredValue(value: number | null, unit: string): string { function formatChange (line 217) | function formatChange(change: number | null, unit: string): string { type OilDataPoint (line 227) | interface OilDataPoint { type OilMetric (line 233) | interface OilMetric { type OilAnalytics (line 245) | interface OilAnalytics { function protoEnergyToOilMetric (line 253) | function protoEnergyToOilMetric(proto: ProtoEnergyPrice): OilMetric { function checkEiaStatus (line 268) | async function checkEiaStatus(): Promise { function fetchOilAnalytics (line 280) | async function fetchOilAnalytics(): Promise { function formatOilValue (line 316) | function formatOilValue(value: number, unit: string): string { function getTrendIndicator (line 324) | function getTrendIndicator(trend: OilMetric['trend']): string { function getTrendColor (line 332) | function getTrendColor(trend: OilMetric['trend'], inverse = false): stri... function fetchEnergyCapacityRpc (line 346) | async function fetchEnergyCapacityRpc( type WbCountryDataPoint (line 367) | interface WbCountryDataPoint { type WbCountryData (line 372) | interface WbCountryData { type WbLatestValue (line 378) | interface WbLatestValue { type WorldBankResponse (line 385) | interface WorldBankResponse { constant TECH_INDICATORS (line 399) | const TECH_INDICATORS: Record = { constant TECH_COUNTRIES (line 418) | const TECH_COUNTRIES = [ function getAvailableIndicators (line 428) | async function getAvailableIndicators(): Promise<{ indicators: Record { FILE: src/services/entity-extraction.ts type ExtractedEntity (line 9) | interface ExtractedEntity { type NewsEntityContext (line 17) | interface NewsEntityContext { function extractEntitiesFromTitle (line 25) | function extractEntitiesFromTitle(title: string): ExtractedEntity[] { function extractEntitiesFromCluster (line 37) | function extractEntitiesFromCluster(cluster: ClusteredEventCore): NewsEn... function extractEntitiesFromClusters (line 81) | function extractEntitiesFromClusters( function findNewsForEntity (line 94) | function findNewsForEntity( function findNewsForMarketSymbol (line 130) | function findNewsForMarketSymbol( function getTopEntitiesFromNews (line 137) | function getTopEntitiesFromNews( FILE: src/services/entity-index.ts type EntityIndex (line 3) | interface EntityIndex { function escapeRegex (line 11) | function escapeRegex(str: string): string { function buildEntityIndex (line 15) | function buildEntityIndex(entities: EntityEntry[]): EntityIndex { function getEntityIndex (line 52) | function getEntityIndex(): EntityIndex { function lookupEntityByAlias (line 59) | function lookupEntityByAlias(alias: string): EntityEntry | undefined { function lookupEntitiesByKeyword (line 65) | function lookupEntitiesByKeyword(keyword: string): EntityEntry[] { function lookupEntitiesBySector (line 74) | function lookupEntitiesBySector(sector: string): EntityEntry[] { function findRelatedEntities (line 83) | function findRelatedEntities(entityId: string): EntityEntry[] { type EntityMatch (line 90) | interface EntityMatch { function findEntitiesInText (line 98) | function findEntitiesInText(text: string): EntityMatch[] { function getEntityDisplayName (line 146) | function getEntityDisplayName(entityId: string): string { FILE: src/services/eonet.ts constant CATEGORY_ICONS (line 11) | const CATEGORY_ICONS: Record = { function getNaturalEventIcon (line 27) | function getNaturalEventIcon(category: NaturalEventCategory): string { function normalizeNaturalCategory (line 31) | function normalizeNaturalCategory(category: string | undefined): Natural... function toNaturalEvent (line 43) | function toNaturalEvent(e: ListNaturalEventsResponse['events'][number]):... function fetchNaturalEvents (line 75) | async function fetchNaturalEvents(_days = 30): Promise { FILE: src/services/feed-date.ts function parseFeedDateOrNow (line 1) | function parseFeedDateOrNow(value: string | null | undefined): Date { FILE: src/services/focal-point-detector.ts constant SIGNAL_TYPE_LABELS (line 16) | const SIGNAL_TYPE_LABELS: Record = { constant SIGNAL_TYPE_ICONS (line 29) | const SIGNAL_TYPE_ICONS: Record = { class FocalPointDetector (line 42) | class FocalPointDetector { method entityAppearsInTitle (line 49) | private entityAppearsInTitle(entityId: string, title: string, index: E... method analyze (line 69) | analyze(clusters: ClusteredEvent[], signalSummary: SignalSummary): Foc... method aggregateEntities (line 89) | private aggregateEntities( method buildFocalPoints (line 137) | private buildFocalPoints( method createFocalPoint (line 203) | private createFocalPoint( method calculateNewsScore (line 248) | private calculateNewsScore(mention: EntityMention): number { method calculateSignalScore (line 255) | private calculateSignalScore(signals: CountrySignalCluster): number { method calculateConflictScore (line 264) | private calculateConflictScore(signals: CountrySignalCluster): number { method calculateCorrelationBonus (line 280) | private calculateCorrelationBonus( method determineUrgency (line 306) | private determineUrgency(score: number, signalTypeCount: number): 'wat... method generateNarrative (line 312) | private generateNarrative( method getCorrelationEvidence (line 339) | private getCorrelationEvidence( method generateAIContext (line 364) | private generateAIContext(focalPoints: FocalPoint[]): string { method getSignalIcons (line 410) | getSignalIcons(signalTypes: string[]): string { method getLastSummary (line 417) | getLastSummary(): FocalPointSummary | null { method getCountryUrgency (line 425) | getCountryUrgency(countryCode: string): 'watch' | 'elevated' | 'critic... method getCountryUrgencyMap (line 436) | getCountryUrgencyMap(): Map { method getFocalPointForCountry (line 451) | getFocalPointForCountry(countryCode: string): FocalPoint | null { method getNewsCorrelationContext (line 462) | getNewsCorrelationContext(countryCodes: string[]): string | null { FILE: src/services/font-settings.ts type FontFamily (line 1) | type FontFamily = 'mono' | 'system'; constant STORAGE_KEY (line 3) | const STORAGE_KEY = 'wm-font-family'; constant EVENT_NAME (line 4) | const EVENT_NAME = 'wm-font-changed'; constant ALLOWED (line 6) | const ALLOWED: FontFamily[] = ['mono', 'system']; constant SYSTEM_FONT_STACK (line 8) | const SYSTEM_FONT_STACK = function getFontFamily (line 11) | function getFontFamily(): FontFamily { function setFontFamily (line 21) | function setFontFamily(font: FontFamily): void { function applyFont (line 32) | function applyFont(font?: FontFamily): void { function subscribeFontChange (line 41) | function subscribeFontChange(cb: (font: FontFamily) => void): () => void { FILE: src/services/forecast.ts function getClient (line 11) | function getClient(): ForecastServiceClient { function fetchForecasts (line 20) | async function fetchForecasts(domain?: string, region?: string): Promise... FILE: src/services/gdelt-intel.ts type GdeltArticle (line 12) | interface GdeltArticle { type IntelTopic (line 22) | interface IntelTopic { type TopicIntelligence (line 30) | interface TopicIntelligence { constant INTEL_TOPICS (line 36) | const INTEL_TOPICS: IntelTopic[] = [ constant POSITIVE_GDELT_TOPICS (line 81) | const POSITIVE_GDELT_TOPICS: IntelTopic[] = [ function getIntelTopics (line 119) | function getIntelTopics(): IntelTopic[] { constant CACHE_TTL (line 135) | const CACHE_TTL = 5 * 60 * 1000; constant STALE_MAX (line 136) | const STALE_MAX = 60 * 60 * 1000; function toGdeltArticle (line 140) | function toGdeltArticle(a: ProtoGdeltArticle): GdeltArticle { function fetchGdeltArticles (line 152) | async function fetchGdeltArticles( function fetchHotspotContext (line 194) | async function fetchHotspotContext(hotspot: Hotspot): Promise { function formatArticleDate (line 240) | function formatArticleDate(dateStr: string): string { function extractDomain (line 265) | function extractDomain(url: string): string { function fetchPositiveGdeltArticles (line 275) | async function fetchPositiveGdeltArticles( function fetchPositiveTopicIntelligence (line 308) | async function fetchPositiveTopicIntelligence(topic: IntelTopic): Promis... function fetchAllPositiveTopicIntelligence (line 313) | async function fetchAllPositiveTopicIntelligence(): Promise = { constant TYPE_BONUS (line 37) | const TYPE_BONUS: Record = { function aggregateGeoActivity (line 44) | function aggregateGeoActivity(clusters: ClusteredEvent[]): GeoHubActivit... function getTopActiveGeoHubs (line 135) | function getTopActiveGeoHubs(clusters: ClusteredEvent[], limit = 10): Ge... function getGeoHubActivity (line 139) | function getGeoHubActivity(hubId: string, clusters: ClusteredEvent[]): G... FILE: src/services/geo-convergence.ts type GeoEventType (line 7) | type GeoEventType = 'protest' | 'military_flight' | 'military_vessel' | ... type GeoCell (line 9) | interface GeoCell { constant WINDOW_MS (line 18) | const WINDOW_MS = 24 * 60 * 60 * 1000; constant CONVERGENCE_THRESHOLD (line 19) | const CONVERGENCE_THRESHOLD = 3; function getCellId (line 21) | function getCellId(lat: number, lon: number): string { function ingestGeoEvent (line 25) | function ingestGeoEvent( function pruneOldEvents (line 52) | function pruneOldEvents(): void { function ingestProtests (line 67) | function ingestProtests(events: SocialUnrestEvent[]): void { function ingestFlights (line 73) | function ingestFlights(flights: MilitaryFlight[]): void { function ingestVessels (line 79) | function ingestVessels(vessels: MilitaryVessel[]): void { function ingestEarthquakes (line 85) | function ingestEarthquakes(quakes: Earthquake[]): void { type GeoConvergenceAlert (line 91) | interface GeoConvergenceAlert { function detectGeoConvergence (line 100) | function detectGeoConvergence(seenAlerts: Set): GeoConvergenceAl... constant TYPE_LABELS (line 125) | const TYPE_LABELS: Record = { function haversineKm (line 133) | function haversineKm(lat1: number, lon1: number, lat2: number, lon2: num... function getLocationName (line 142) | function getLocationName(lat: number, lon: number): string { function geoConvergenceToSignal (line 186) | function geoConvergenceToSignal(alert: GeoConvergenceAlert): Correlation... function detectConvergence (line 204) | function detectConvergence(): GeoConvergenceAlert[] { function clearCells (line 208) | function clearCells(): void { function getCellCount (line 212) | function getCellCount(): number { function debugGetCells (line 216) | function debugGetCells(): Map { function getAlertsNearLocation (line 220) | function getAlertsNearLocation(lat: number, lon: number, radiusKm: numbe... FILE: src/services/geo-hub-index.ts type GeoHubLocation (line 4) | interface GeoHubLocation { type GeoHubIndex (line 16) | interface GeoHubIndex { constant GEO_HUBS (line 24) | const GEO_HUBS: GeoHubLocation[] = [ function buildGeoHubIndex (line 156) | function buildGeoHubIndex(): GeoHubIndex { type GeoHubMatch (line 182) | interface GeoHubMatch { function inferGeoHubsFromTitle (line 189) | function inferGeoHubsFromTitle(title: string): GeoHubMatch[] { function getGeoHubById (line 230) | function getGeoHubById(hubId: string): GeoHubLocation | undefined { function getAllGeoHubs (line 235) | function getAllGeoHubs(): GeoHubLocation[] { FILE: src/services/giving/index.ts type PlatformGiving (line 15) | interface PlatformGiving { type CategoryBreakdown (line 25) | interface CategoryBreakdown { type CryptoGivingSummary (line 33) | interface CryptoGivingSummary { type InstitutionalGiving (line 41) | interface InstitutionalGiving { type GivingSummary (line 50) | interface GivingSummary { type GivingFetchResult (line 61) | interface GivingFetchResult { function toDisplaySummary (line 69) | function toDisplaySummary(proto: ProtoResponse): GivingSummary { function toDisplayPlatform (line 83) | function toDisplayPlatform(proto: ProtoPlatform): PlatformGiving { function toDisplayCategory (line 95) | function toDisplayCategory(proto: ProtoCategory): CategoryBreakdown { function toDisplayCrypto (line 105) | function toDisplayCrypto(proto?: ProtoCrypto): CryptoGivingSummary { function toDisplayInstitutional (line 115) | function toDisplayInstitutional(proto?: ProtoInstitutional): Institution... constant REFETCH_INTERVAL_MS (line 151) | const REFETCH_INTERVAL_MS = 30 * 60 * 1000; function fetchGivingSummary (line 155) | async function fetchGivingSummary(): Promise { function formatCurrency (line 207) | function formatCurrency(n: number): string { function formatPercent (line 214) | function formatPercent(n: number): string { function getActivityColor (line 218) | function getActivityColor(index: number): string { function getTrendIcon (line 225) | function getTrendIcon(trend: string): string { function getTrendColor (line 231) | function getTrendColor(trend: string): string { FILE: src/services/globe-render-settings.ts type GlobeRenderScale (line 1) | type GlobeRenderScale = 'auto' | '1' | '1.5' | '2' | '3'; type GlobeTexture (line 2) | type GlobeTexture = 'topographic' | 'blue-marble'; constant STORAGE_KEY (line 4) | const STORAGE_KEY = 'wm-globe-render-scale'; constant EVENT_NAME (line 5) | const EVENT_NAME = 'wm-globe-render-scale-changed'; constant TEXTURE_STORAGE_KEY (line 7) | const TEXTURE_STORAGE_KEY = 'wm-globe-texture'; constant TEXTURE_EVENT_NAME (line 8) | const TEXTURE_EVENT_NAME = 'wm-globe-texture-changed'; constant GLOBE_RENDER_SCALE_OPTIONS (line 10) | const GLOBE_RENDER_SCALE_OPTIONS: { constant ALLOWED_SCALES (line 23) | const ALLOWED_SCALES = GLOBE_RENDER_SCALE_OPTIONS.filter(o => !o.disable... function getGlobeRenderScale (line 25) | function getGlobeRenderScale(): GlobeRenderScale { function setGlobeRenderScale (line 35) | function setGlobeRenderScale(scale: GlobeRenderScale): void { function subscribeGlobeRenderScaleChange (line 45) | function subscribeGlobeRenderScaleChange(cb: (scale: GlobeRenderScale) =... function resolveGlobePixelRatio (line 54) | function resolveGlobePixelRatio(scale: GlobeRenderScale): number { type GlobePerformanceProfile (line 62) | interface GlobePerformanceProfile { function resolvePerformanceProfile (line 68) | function resolvePerformanceProfile(scale: GlobeRenderScale): GlobePerfor... constant GLOBE_TEXTURE_OPTIONS (line 77) | const GLOBE_TEXTURE_OPTIONS: { value: GlobeTexture; label: string }[] = [ constant GLOBE_TEXTURE_URLS (line 82) | const GLOBE_TEXTURE_URLS: Record = { function getGlobeTexture (line 87) | function getGlobeTexture(): GlobeTexture { function setGlobeTexture (line 95) | function setGlobeTexture(texture: GlobeTexture): void { function subscribeGlobeTextureChange (line 100) | function subscribeGlobeTextureChange(cb: (texture: GlobeTexture) => void... type GlobeVisualPreset (line 111) | type GlobeVisualPreset = 'classic' | 'enhanced'; constant PRESET_STORAGE_KEY (line 113) | const PRESET_STORAGE_KEY = 'wm-globe-visual-preset'; constant PRESET_EVENT_NAME (line 114) | const PRESET_EVENT_NAME = 'wm-globe-visual-preset-changed'; constant GLOBE_VISUAL_PRESET_OPTIONS (line 116) | const GLOBE_VISUAL_PRESET_OPTIONS: { value: GlobeVisualPreset; label: st... function getGlobeVisualPreset (line 121) | function getGlobeVisualPreset(): GlobeVisualPreset { function setGlobeVisualPreset (line 129) | function setGlobeVisualPreset(preset: GlobeVisualPreset): void { function subscribeGlobeVisualPresetChange (line 134) | function subscribeGlobeVisualPresetChange(cb: (preset: GlobeVisualPreset... FILE: src/services/gps-interference.ts type GpsJamHex (line 3) | interface GpsJamHex { type GpsJamData (line 13) | interface GpsJamData { constant CACHE_TTL (line 26) | const CACHE_TTL = 5 * 60 * 1000; function fetchGpsInterference (line 28) | async function fetchGpsInterference(): Promise { function getGpsInterferenceByRegion (line 63) | function getGpsInterferenceByRegion(data: GpsJamData): Record { FILE: src/services/happy-share-renderer.ts constant SIZE (line 10) | const SIZE = 1080; constant PAD (line 11) | const PAD = 80; constant CONTENT_W (line 12) | const CONTENT_W = SIZE - PAD * 2; constant CATEGORY_GRADIENTS (line 15) | const CATEGORY_GRADIENTS: Record... constant CATEGORY_ACCENTS (line 25) | const CATEGORY_ACCENTS: Record = { constant DEFAULT_CATEGORY (line 34) | const DEFAULT_CATEGORY: HappyContentCategory = 'humanity-kindness'; function wrapText (line 40) | function wrapText(ctx: CanvasRenderingContext2D, text: string, maxWidth:... function roundRect (line 63) | function roundRect(ctx: CanvasRenderingContext2D, x: number, y: number, ... function renderHappyShareCard (line 81) | async function renderHappyShareCard(item: NewsItem): Promise { FILE: src/services/hotspot-escalation.ts type DynamicEscalationScore (line 5) | interface DynamicEscalationScore { type EscalationInputs (line 21) | interface EscalationInputs { constant COMPONENT_WEIGHTS (line 32) | const COMPONENT_WEIGHTS = { constant SIGNAL_COOLDOWN_MS (line 41) | const SIGNAL_COOLDOWN_MS = 2 * 60 * 60 * 1000; constant HISTORY_WINDOW_MS (line 42) | const HISTORY_WINDOW_MS = 24 * 60 * 60 * 1000; constant MAX_HISTORY_POINTS (line 43) | const MAX_HISTORY_POINTS = 48; function setCIIGetter (line 48) | function setCIIGetter(fn: (code: string) => number | null): void { function setGeoAlertGetter (line 52) | function setGeoAlertGetter(fn: (lat: number, lon: number, radiusKm: numb... function getStaticBaseline (line 56) | function getStaticBaseline(hotspot: Hotspot): number { function getCIIForHotspot (line 60) | function getCIIForHotspot(hotspotId: string): number | null { function getGeoAlertForHotspot (line 70) | function getGeoAlertForHotspot(hotspot: Hotspot): { score: number; types... function normalizeNewsActivity (line 75) | function normalizeNewsActivity(matches: number, hasBreaking: boolean, ve... function normalizeCII (line 79) | function normalizeCII(score: number | null): number { function normalizeGeo (line 83) | function normalizeGeo(alertScore: number, alertTypes: number): number { function normalizeMilitary (line 88) | function normalizeMilitary(flights: number, vessels: number): number { function calculateDynamicRaw (line 92) | function calculateDynamicRaw(components: DynamicEscalationScore['compone... function rawToScore (line 101) | function rawToScore(raw: number): number { function blendScores (line 105) | function blendScores(staticBaseline: number, dynamicScore: number): numb... function pruneHistory (line 109) | function pruneHistory(history: Array<{ timestamp: number; score: number ... function detectTrend (line 118) | function detectTrend(history: Array<{ timestamp: number; score: number }... function calculateDynamicScore (line 146) | function calculateDynamicScore( function getHotspotEscalation (line 191) | function getHotspotEscalation(hotspotId: string): DynamicEscalationScore... function getAllEscalationScores (line 195) | function getAllEscalationScores(): DynamicEscalationScore[] { type EscalationSignalReason (line 199) | interface EscalationSignalReason { function shouldEmitSignal (line 206) | function shouldEmitSignal(hotspotId: string, oldScore: number | null, ne... function markSignalEmitted (line 229) | function markSignalEmitted(hotspotId: string): void { function haversineKm (line 233) | function haversineKm(lat1: number, lon1: number, lat2: number, lon2: num... function countMilitaryNearHotspot (line 241) | function countMilitaryNearHotspot( function setMilitaryData (line 267) | function setMilitaryData(flights: MilitaryFlight[], vessels: MilitaryVes... function updateHotspotEscalation (line 271) | function updateHotspotEscalation( function getEscalationChange24h (line 298) | function getEscalationChange24h(hotspotId: string): { change: number; st... function clearEscalationData (line 317) | function clearEscalationData(): void { FILE: src/services/hub-activity-scoring.ts type HubActivityLevel (line 1) | type HubActivityLevel = 'high' | 'elevated' | 'low'; type HubTrend (line 2) | type HubTrend = 'rising' | 'stable' | 'falling'; function normalizeHubScore (line 4) | function normalizeHubScore(rawScore: number, maxRawScore: number): number { function deriveHubActivityLevel (line 9) | function deriveHubActivityLevel(score: number, hasBreaking: boolean): Hu... function deriveHubTrend (line 19) | function deriveHubTrend(totalVelocity: number, newsCount: number): HubTr... FILE: src/services/humanity-counters.ts type CounterMetric (line 15) | interface CounterMetric { constant SECONDS_PER_YEAR (line 25) | const SECONDS_PER_YEAR = 31_536_000; constant COUNTER_METRICS (line 27) | const COUNTER_METRICS: CounterMetric[] = [ function getCounterValue (line 91) | function getCounterValue(metric: CounterMetric): number { function formatCounterValue (line 108) | function formatCounterValue(value: number, precision: number): string { FILE: src/services/i18n.ts constant SUPPORTED_LANGUAGES (line 7) | const SUPPORTED_LANGUAGES = ['en', 'bg', 'cs', 'fr', 'de', 'el', 'es', '... type SupportedLanguage (line 8) | type SupportedLanguage = typeof SUPPORTED_LANGUAGES[number]; type TranslationDictionary (line 9) | type TranslationDictionary = Record; constant SUPPORTED_LANGUAGE_SET (line 11) | const SUPPORTED_LANGUAGE_SET = new Set(SUPPORTED_LANG... constant RTL_LANGUAGES (line 20) | const RTL_LANGUAGES = new Set(['ar']); function normalizeLanguage (line 22) | function normalizeLanguage(lng: string): SupportedLanguage { function applyDocumentDirection (line 30) | function applyDocumentDirection(lang: string): void { function ensureLanguageLoaded (line 40) | async function ensureLanguageLoaded(lng: string): Promise { function t (line 104) | function t(key: string, options?: Record): string { function changeLanguage (line 109) | async function changeLanguage(lng: string): Promise { function getCurrentLanguage (line 117) | function getCurrentLanguage(): string { function isRTL (line 122) | function isRTL(): boolean { function getLocale (line 126) | function getLocale(): string { constant LANGUAGES (line 132) | const LANGUAGES = [ FILE: src/services/imagery.ts type ImagerySearchParams (line 6) | interface ImagerySearchParams { function fetchImageryScenes (line 13) | async function fetchImageryScenes(params: ImagerySearchParams): Promise<... FILE: src/services/infrastructure-cascade.ts constant COUNTRY_NAMES (line 17) | const COUNTRY_NAMES: Record = { type DependencyGraph (line 38) | interface DependencyGraph { function clearGraphCache (line 47) | function clearGraphCache(): void { function addCablesAsNodes (line 51) | function addCablesAsNodes(graph: DependencyGraph): void { function addPipelinesAsNodes (line 69) | function addPipelinesAsNodes(graph: DependencyGraph): void { function addPortsAsNodes (line 88) | function addPortsAsNodes(graph: DependencyGraph): void { function addChokepointsAsNodes (line 104) | function addChokepointsAsNodes(graph: DependencyGraph): void { function addCountriesAsNodes (line 118) | function addCountriesAsNodes(graph: DependencyGraph): void { function addEdge (line 143) | function addEdge(graph: DependencyGraph, edge: DependencyEdge): void { function buildCableCountryEdges (line 153) | function buildCableCountryEdges(graph: DependencyGraph): void { function buildPipelineCountryEdges (line 185) | function buildPipelineCountryEdges(graph: DependencyGraph): void { function normalizeCountryCode (line 207) | function normalizeCountryCode(country: string): string { function getPortImportance (line 223) | function getPortImportance(port: Port): number { function buildPortCountryEdges (line 238) | function buildPortCountryEdges(graph: DependencyGraph): void { function getAffectedCountries (line 297) | function getAffectedCountries(port: Port): { code: string; strength: num... function buildChokepointEdges (line 351) | function buildChokepointEdges(graph: DependencyGraph): void { function getChokepointDependentCountries (line 401) | function getChokepointDependentCountries(chokepointId: string): { code: ... function haversineDistance (line 453) | function haversineDistance(lat1: number, lon1: number, lat2: number, lon... function buildDependencyGraph (line 461) | function buildDependencyGraph(): DependencyGraph { function categorizeImpact (line 488) | function categorizeImpact(strength: number): CascadeImpactLevel { function calculateCascade (line 495) | function calculateCascade( function getCapacityForCountry (line 572) | function getCapacityForCountry( function findRedundancies (line 615) | function findRedundancies(sourceId: string): CascadeResult['redundancies... function getCableById (line 642) | function getCableById(id: string): UnderseaCable | undefined { function getPipelineById (line 646) | function getPipelineById(id: string): Pipeline | undefined { function getPortById (line 650) | function getPortById(id: string): Port | undefined { function getGraphStats (line 654) | function getGraphStats(): { nodes: number; edges: number; cables: number... FILE: src/services/infrastructure/index.ts constant SEVERITY_REVERSE (line 33) | const SEVERITY_REVERSE: Record = { constant STATUS_REVERSE (line 39) | const STATUS_REVERSE: Record { function getOutagesStatus (line 105) | function getOutagesStatus(): string { type ServiceStatusResult (line 113) | interface ServiceStatusResult { type ServiceStatusSummary (line 121) | interface ServiceStatusSummary { type ServiceStatusResponse (line 128) | interface ServiceStatusResponse { constant CATEGORY_MAP (line 136) | const CATEGORY_MAP: Record = { function toServiceResult (line 146) | function toServiceResult(proto: ProtoServiceStatus): ServiceStatusResult { function computeSummary (line 156) | function computeSummary(services: ServiceStatusResult[]): ServiceStatusS... function fetchServiceStatuses (line 165) | async function fetchServiceStatuses(): Promise { FILE: src/services/insights-loader.ts type ServerInsightStory (line 3) | interface ServerInsightStory { type ServerInsights (line 15) | interface ServerInsights { constant MAX_AGE_MS (line 27) | const MAX_AGE_MS = 15 * 60 * 1000; function isFresh (line 29) | function isFresh(data: ServerInsights): boolean { function getServerInsights (line 34) | function getServerInsights(): ServerInsights | null { function setServerInsights (line 51) | function setServerInsights(data: ServerInsights): void { FILE: src/services/investments-focus.ts type InvestmentsMapLike (line 3) | interface InvestmentsMapLike { function focusInvestmentOnMap (line 8) | function focusInvestmentOnMap( FILE: src/services/kindness-data.ts type KindnessPoint (line 6) | interface KindnessPoint { function extractKindnessEvents (line 20) | function extractKindnessEvents( function fetchKindnessData (line 51) | function fetchKindnessData( FILE: src/services/live-news.ts type LiveVideoInfo (line 3) | interface LiveVideoInfo { constant CACHE_TTL (line 9) | const CACHE_TTL = 5 * 60 * 1000; function fetchLiveVideoInfo (line 11) | async function fetchLiveVideoInfo(channelHandle: string): Promise v... FILE: src/services/maritime/index.ts constant DISRUPTION_TYPE_REVERSE (line 20) | const DISRUPTION_TYPE_REVERSE: Record = { constant SEVERITY_REVERSE (line 25) | const SEVERITY_REVERSE: Record = { function toDisruptionEvent (line 31) | function toDisruptionEvent(proto: ProtoDisruption): AisDisruptionEvent { function toDensityZone (line 48) | function toDensityZone(proto: ProtoDensityZone): AisDensityZone { function isAisConfigured (line 66) | function isAisConfigured(): boolean { type AisPositionData (line 72) | interface AisPositionData { type SnapshotStatus (line 85) | interface SnapshotStatus { type SnapshotCandidateReport (line 91) | interface SnapshotCandidateReport extends AisPositionData { type AisSnapshotResponse (line 95) | interface AisSnapshotResponse { type AisCallback (line 110) | type AisCallback = (data: AisPositionData) => void; constant SNAPSHOT_POLL_INTERVAL_MS (line 132) | const SNAPSHOT_POLL_INTERVAL_MS = 5 * 60 * 1000; constant SNAPSHOT_STALE_MS (line 133) | const SNAPSHOT_STALE_MS = 6 * 60 * 1000; constant CALLBACK_RETENTION_MS (line 134) | const CALLBACK_RETENTION_MS = 2 * 60 * 60 * 1000; constant MAX_CALLBACK_TRACKED_VESSELS (line 135) | const MAX_CALLBACK_TRACKED_VESSELS = 20000; constant SNAPSHOT_PROXY_URL (line 139) | const SNAPSHOT_PROXY_URL = toApiUrl('/api/ais-snapshot'); constant DIRECT_RAILWAY_SNAPSHOT_URL (line 141) | const DIRECT_RAILWAY_SNAPSHOT_URL = wsRelayUrl constant LOCAL_SNAPSHOT_FALLBACK (line 144) | const LOCAL_SNAPSHOT_FALLBACK = 'http://localhost:3004/ais/snapshot'; function shouldIncludeCandidates (line 149) | function shouldIncludeCandidates(): boolean { function parseSnapshot (line 153) | function parseSnapshot(data: unknown): { function fetchRawRelaySnapshot (line 181) | async function fetchRawRelaySnapshot(includeCandidates: boolean, signal?... function fetchSnapshotPayload (line 205) | async function fetchSnapshotPayload(includeCandidates: boolean, signal?:... function pruneCallbackTimestampIndex (line 236) | function pruneCallbackTimestampIndex(now: number): void { function emitCandidateReports (line 262) | function emitCandidateReports(reports: SnapshotCandidateReport[]): void { function pollSnapshot (line 299) | async function pollSnapshot(force = false, signal?: AbortSignal): Promis... function startPolling (line 339) | function startPolling(): void { function registerAisCallback (line 355) | function registerAisCallback(callback: AisCallback): void { function unregisterAisCallback (line 360) | function unregisterAisCallback(callback: AisCallback): void { function initAisStream (line 367) | function initAisStream(): void { function disconnectAisStream (line 371) | function disconnectAisStream(): void { function getAisStatus (line 379) | function getAisStatus(): { connected: boolean; vessels: number; messages... function fetchAisSignals (line 388) | async function fetchAisSignals(): Promise<{ disruptions: AisDisruptionEv... FILE: src/services/market-watchlist.ts type MarketWatchlistEntry (line 8) | interface MarketWatchlistEntry { constant STORAGE_KEY (line 16) | const STORAGE_KEY = 'wm-market-watchlist-v1'; constant MARKET_WATCHLIST_EVENT (line 17) | const MARKET_WATCHLIST_EVENT = 'wm-market-watchlist-changed'; function safeParseJson (line 19) | function safeParseJson(raw: string | null): T | null { function normalizeSymbol (line 24) | function normalizeSymbol(raw: string): string { function normalizeName (line 30) | function normalizeName(raw: string | undefined): string | undefined { function coerceEntry (line 35) | function coerceEntry(v: unknown): MarketWatchlistEntry | null { function getMarketWatchlistEntries (line 52) | function getMarketWatchlistEntries(): MarketWatchlistEntry[] { function setMarketWatchlistEntries (line 69) | function setMarketWatchlistEntries(entries: MarketWatchlistEntry[]): void { function resetMarketWatchlist (line 95) | function resetMarketWatchlist(): void { function subscribeMarketWatchlistChange (line 100) | function subscribeMarketWatchlistChange(cb: (entries: MarketWatchlistEnt... function parseMarketWatchlistInput (line 118) | function parseMarketWatchlistInput(text: string): MarketWatchlistEntry[] { FILE: src/services/market/index.ts constant MARKET_QUOTES_CACHE_TTL_MS (line 23) | const MARKET_QUOTES_CACHE_TTL_MS = 5 * 60 * 1000; function toMarketData (line 33) | function toMarketData(proto: ProtoMarketQuote, meta?: { name?: string; d... function toCryptoData (line 44) | function toCryptoData(proto: ProtoCryptoQuote): CryptoData { type MarketFetchResult (line 58) | interface MarketFetchResult { function symbolSetKey (line 71) | function symbolSetKey(symbols: string[]): string { function fetchMultipleStocks (line 75) | async function fetchMultipleStocks( function fetchStockQuote (line 132) | async function fetchStockQuote( function fetchCrypto (line 147) | async function fetchCrypto(): Promise { FILE: src/services/mcp-store.ts constant STORAGE_KEY (line 3) | const STORAGE_KEY = 'wm-mcp-panels'; constant PANEL_SPANS_KEY (line 4) | const PANEL_SPANS_KEY = 'worldmonitor-panel-spans'; constant PANEL_COL_SPANS_KEY (line 5) | const PANEL_COL_SPANS_KEY = 'worldmonitor-panel-col-spans'; constant MAX_PANELS (line 6) | const MAX_PANELS = 10; type McpPreset (line 8) | interface McpPreset { constant MCP_PRESETS (line 19) | const MCP_PRESETS: McpPreset[] = [ type McpToolDef (line 180) | interface McpToolDef { type McpPanelSpec (line 186) | interface McpPanelSpec { function loadMcpPanels (line 198) | function loadMcpPanels(): McpPanelSpec[] { function saveMcpPanel (line 202) | function saveMcpPanel(spec: McpPanelSpec): void { function deleteMcpPanel (line 208) | function deleteMcpPanel(id: string): void { function getMcpPanel (line 215) | function getMcpPanel(id: string): McpPanelSpec | null { function cleanSpanEntry (line 219) | function cleanSpanEntry(storageKey: string, panelId: string): void { FILE: src/services/meta-tags.ts type StoryMeta (line 5) | interface StoryMeta { constant BASE_URL (line 15) | const BASE_URL = variantMeta.url.replace(/\/$/, ''); constant API_ORIGIN (line 16) | const API_ORIGIN = getCanonicalApiOrigin(); constant DEFAULT_IMAGE (line 17) | const DEFAULT_IMAGE = `${BASE_URL}/favico/${SITE_VARIANT === 'full' ? ''... function updateMetaTagsForStory (line 19) | function updateMetaTagsForStory(meta: StoryMeta): void { function resetMetaTags (line 46) | function resetMetaTags(): void { function generateDescription (line 64) | function generateDescription( function setMetaTag (line 96) | function setMetaTag(property: string, content: string): void { function setCanonicalLink (line 110) | function setCanonicalLink(href: string): void { function parseStoryParams (line 120) | function parseStoryParams(url: URL): StoryMeta | null { function initMetaTags (line 146) | function initMetaTags(): void { FILE: src/services/military-bases.ts type CachedResult (line 12) | interface CachedResult { function getBboxGridStep (line 22) | function getBboxGridStep(zoom: number): number { function quantizeBbox (line 28) | function quantizeBbox(swLat: number, swLon: number, neLat: number, neLon... function entryToEnriched (line 33) | function entryToEnriched(e: MilitaryBaseEntry): MilitaryBaseEnriched { function fetchMilitaryBases (line 58) | async function fetchMilitaryBases( FILE: src/services/military-flights.ts constant OPENSKY_PROXY_URL (line 21) | const OPENSKY_PROXY_URL = toApiUrl('/api/opensky'); constant DIRECT_OPENSKY_BASE_URL (line 23) | const DIRECT_OPENSKY_BASE_URL = wsRelayUrl constant CACHE_TTL (line 29) | const CACHE_TTL = isDesktopRuntime() ? 15 * 60 * 1000 : 2 * 60 * 1000; constant HISTORY_MAX_POINTS (line 34) | const HISTORY_MAX_POINTS = 20; constant HISTORY_CLEANUP_INTERVAL (line 35) | const HISTORY_CLEANUP_INTERVAL = 5 * 60 * 1000; function upsertFlightHistory (line 38) | function upsertFlightHistory(historyKey: string, lat: number, lon: numbe... type MilitaryFlightsResponse (line 72) | interface MilitaryFlightsResponse { function fetchFromRedis (line 97) | async function fetchFromRedis(): Promise { type OpenSkyStateArray (line 139) | type OpenSkyStateArray = [ type OpenSkyResponse (line 146) | interface OpenSkyResponse { function determineAircraftInfo (line 151) | function determineAircraftInfo( function isMilitaryFlight (line 169) | function isMilitaryFlight(state: OpenSkyStateArray): boolean { function parseOpenSkyResponse (line 176) | function parseOpenSkyResponse(data: OpenSkyResponse): MilitaryFlight[] { type RegionResult (line 211) | interface RegionResult { name: string; flights: MilitaryFlight[]; ok: bo... function fetchQueryRegion (line 213) | async function fetchQueryRegion(region: QueryRegion): Promise { function enrichFlightsWithWingbits (line 261) | async function enrichFlightsWithWingbits(flights: MilitaryFlight[]): Pro... function clusterFlights (line 345) | function clusterFlights(flights: MilitaryFlight[]): MilitaryFlightCluste... function cleanupFlightHistory (line 408) | function cleanupFlightHistory(): void { function stopFlightHistoryCleanup (line 423) | function stopFlightHistoryCleanup(): void { function fetchMilitaryFlights (line 433) | async function fetchMilitaryFlights(): Promise<{ function getMilitaryFlightsStatus (line 469) | function getMilitaryFlightsStatus(): string { function getFlightByHex (line 476) | function getFlightByHex(hexCode: string): MilitaryFlight | undefined { function getFlightsByOperator (line 484) | function getFlightsByOperator(operator: MilitaryOperator): MilitaryFligh... function getInterestingFlights (line 492) | function getInterestingFlights(): MilitaryFlight[] { FILE: src/services/military-surge.ts type GeoRegion (line 8) | interface GeoRegion { type OperatorHomeRegions (line 16) | interface OperatorHomeRegions { constant SENSITIVE_REGIONS (line 24) | const SENSITIVE_REGIONS: GeoRegion[] = [ constant OPERATOR_HOMES (line 53) | const OPERATOR_HOMES: OperatorHomeRegions[] = [ type ForeignPresenceAlert (line 67) | interface ForeignPresenceAlert { type MilitaryTheater (line 80) | interface MilitaryTheater { type SurgeAlert (line 88) | interface SurgeAlert { type TheaterActivity (line 101) | interface TheaterActivity { constant THEATERS (line 111) | const THEATERS: MilitaryTheater[] = [ constant SURGE_THRESHOLD (line 153) | const SURGE_THRESHOLD = 2.0; constant BASELINE_WINDOW_HOURS (line 154) | const BASELINE_WINDOW_HOURS = 48; constant BASELINE_MIN_SAMPLES (line 155) | const BASELINE_MIN_SAMPLES = 6; constant TRANSPORT_CALLSIGN_PATTERNS (line 156) | const TRANSPORT_CALLSIGN_PATTERNS = [ constant PROXIMITY_RADIUS_KM (line 159) | const PROXIMITY_RADIUS_KM = 150; constant CLEANUP_INTERVAL (line 164) | const CLEANUP_INTERVAL = 60 * 60 * 1000; constant MAX_HISTORY_HOURS (line 165) | const MAX_HISTORY_HOURS = 72; function getTheaterForBase (line 167) | function getTheaterForBase(baseId: string): MilitaryTheater | null { function distanceKm (line 176) | function distanceKm(lat1: number, lon1: number, lat2: number, lon2: numb... function findNearbyBases (line 186) | function findNearbyBases(lat: number, lon: number): { baseId: string; ba... function isTransportFlight (line 197) | function isTransportFlight(flight: MilitaryFlight): boolean { function classifyFlight (line 205) | function classifyFlight(flight: MilitaryFlight): 'transport' | 'fighter'... function getTheaterForFlight (line 212) | function getTheaterForFlight(flight: MilitaryFlight): MilitaryTheater | ... function calculateBaseline (line 225) | function calculateBaseline(theaterId: string): { transport: number; figh... function cleanupOldHistory (line 245) | function cleanupOldHistory(): void { function analyzeFlightsForSurge (line 268) | function analyzeFlightsForSurge(flights: MilitaryFlight[]): SurgeAlert[] { function getActiveSurges (line 380) | function getActiveSurges(): SurgeAlert[] { function getTheaterActivity (line 384) | function getTheaterActivity(theaterId: string): TheaterActivity[] { function getRegionForPosition (line 390) | function getRegionForPosition(lat: number, lon: number): GeoRegion | null { function isHomeRegion (line 400) | function isHomeRegion(operator: MilitaryOperator, regionId: string): boo... function getOperatorThreshold (line 406) | function getOperatorThreshold(operator: MilitaryOperator): number { function getOperatorCountry (line 411) | function getOperatorCountry(operator: MilitaryOperator): string { function detectForeignMilitaryPresence (line 416) | function detectForeignMilitaryPresence(flights: MilitaryFlight[]): Forei... constant COUNTRY_TO_ISO (line 466) | const COUNTRY_TO_ISO: Record = { constant REGION_AFFECTED_COUNTRIES (line 481) | const REGION_AFFECTED_COUNTRIES: Record = { function foreignPresenceToSignal (line 494) | function foreignPresenceToSignal(alert: ForeignPresenceAlert): { function getActiveForeignPresence (line 602) | function getActiveForeignPresence(): ForeignPresenceAlert[] { function surgeAlertToSignal (line 608) | function surgeAlertToSignal(surge: SurgeAlert): { type PostureTheater (line 672) | interface PostureTheater { constant POSTURE_THEATERS (line 684) | const POSTURE_THEATERS: PostureTheater[] = [ type TheaterPostureSummary (line 786) | interface TheaterPostureSummary { function getTheaterPostureSummaries (line 822) | function getTheaterPostureSummaries(flights: MilitaryFlight[]): TheaterP... constant TARGET_NATION_CODES (line 930) | const TARGET_NATION_CODES: Record = { function recalcPostureWithVessels (line 943) | function recalcPostureWithVessels(postures: TheaterPostureSummary[]): vo... function getCriticalPostures (line 986) | function getCriticalPostures(flights: MilitaryFlight[]): TheaterPostureS... FILE: src/services/military-vessels.ts constant HISTORY_MAX_POINTS (line 24) | const HISTORY_MAX_POINTS = 30; constant HISTORY_CLEANUP_INTERVAL (line 25) | const HISTORY_CLEANUP_INTERVAL = 10 * 60 * 1000; constant VESSEL_STALE_TIME (line 26) | const VESSEL_STALE_TIME = 60 * 60 * 1000; constant NAVAL_CHOKEPOINTS (line 50) | const NAVAL_CHOKEPOINTS = [ constant NAVAL_BASES (line 66) | const NAVAL_BASES = [ function analyzeMmsi (line 86) | function analyzeMmsi(mmsi: string): { isPotentialMilitary: boolean; coun... function matchKnownVessel (line 186) | function matchKnownVessel(name: string): typeof KNOWN_NAVAL_VESSELS[numb... function getAisShipTypeName (line 213) | function getAisShipTypeName(shipType: number | undefined): string | unde... function getVesselTypeFromAis (line 289) | function getVesselTypeFromAis(shipType: number): MilitaryVesselType | un... function getNearbyBase (line 305) | function getNearbyBase(lat: number, lon: number): string | undefined { function getNearbyChokepoint (line 318) | function getNearbyChokepoint(lat: number, lon: number): string | undefin... function processAisPosition (line 332) | function processAisPosition(data: AisPositionData): void { function cleanup (line 432) | function cleanup(): void { function clusterVessels (line 455) | function clusterVessels(vessels: MilitaryVessel[]): MilitaryVesselCluste... function stopVesselHistoryCleanup (line 505) | function stopVesselHistoryCleanup(): void { function initMilitaryVesselStream (line 516) | function initMilitaryVesselStream(): void { function disconnectMilitaryVesselStream (line 538) | function disconnectMilitaryVesselStream(): void { function getMilitaryVesselStatus (line 548) | function getMilitaryVesselStatus(): { connected: boolean; vessels: numbe... constant CACHE_TTL (line 557) | const CACHE_TTL = 30 * 1000; function fetchMilitaryVessels (line 562) | async function fetchMilitaryVessels(): Promise<{ function getMilitaryVesselsStatus (line 612) | function getMilitaryVesselsStatus(): string { function getVesselByMmsi (line 619) | function getVesselByMmsi(mmsi: string): MilitaryVessel | undefined { function getVesselsNearLocation (line 626) | function getVesselsNearLocation(lat: number, lon: number, radiusDeg: num... function getDarkVessels (line 640) | function getDarkVessels(): MilitaryVessel[] { function isMilitaryVesselTrackingConfigured (line 647) | function isMilitaryVesselTrackingConfigured(): boolean { FILE: src/services/ml-capabilities.ts type MLCapabilities (line 9) | interface MLCapabilities { function detectMLCapabilities (line 23) | async function detectMLCapabilities(): Promise { function checkWebGLSupport (line 66) | function checkWebGLSupport(): boolean { function checkWebGPUSupport (line 76) | async function checkWebGPUSupport(): Promise { function checkSIMDSupport (line 86) | function checkSIMDSupport(): boolean { function checkThreadsSupport (line 98) | function checkThreadsSupport(): boolean { function estimateAvailableMemory (line 102) | function estimateAvailableMemory(): number { function shouldEnableMLFeatures (line 113) | function shouldEnableMLFeatures(): boolean { function getMLCapabilities (line 117) | function getMLCapabilities(): MLCapabilities | null { function clearCapabilitiesCache (line 121) | function clearCapabilitiesCache(): void { FILE: src/services/ml-worker.ts type PendingRequest (line 12) | interface PendingRequest { type NEREntity (line 18) | interface NEREntity { type SentimentResult (line 26) | interface SentimentResult { type VectorSearchResult (line 31) | interface VectorSearchResult { type WorkerResult (line 38) | type WorkerResult = class MLWorkerManager (line 57) | class MLWorkerManager { method init (line 72) | async init(): Promise { method initWorker (line 85) | private initWorker(): Promise { method cleanup (line 197) | private cleanup(): void { method generateRequestId (line 207) | private generateRequestId(): string { method request (line 211) | private request( method loadModel (line 241) | async loadModel( method unloadModel (line 266) | async unloadModel(modelId: string): Promise { method unloadOptionalModels (line 279) | async unloadOptionalModels(): Promise { method embedTexts (line 291) | async embedTexts(texts: string[]): Promise { method summarize (line 299) | async summarize(texts: string[], modelId?: string): Promise { method classifySentiment (line 307) | async classifySentiment(texts: string[]): Promise { method extractEntities (line 315) | async extractEntities(texts: string[]): Promise { method semanticCluster (line 323) | async semanticCluster( method clusterBySemanticSimilarity (line 334) | async clusterBySemanticSimilarity( method vectorStoreIngest (line 345) | async vectorStoreIngest( method vectorStoreSearch (line 352) | async vectorStoreSearch( method vectorStoreCount (line 361) | async vectorStoreCount(): Promise { method vectorStoreReset (line 366) | async vectorStoreReset(): Promise { method getStatus (line 371) | async getStatus(): Promise { method reset (line 379) | reset(): void { method terminate (line 389) | terminate(): void { method isAvailable (line 396) | get isAvailable(): boolean { method mlCapabilities (line 403) | get mlCapabilities(): MLCapabilities | null { method loadedModelIds (line 410) | get loadedModelIds(): string[] { method isModelLoaded (line 417) | isModelLoaded(modelId: string): boolean { FILE: src/services/ollama-models.ts function makeTimeout (line 1) | function makeTimeout(ms: number): AbortSignal { function fetchOllamaModels (line 8) | async function fetchOllamaModels(ollamaUrl: string): Promise { FILE: src/services/oref-alerts.ts type OrefAlert (line 4) | interface OrefAlert { type OrefAlertsResponse (line 13) | interface OrefAlertsResponse { type OrefHistoryEntry (line 22) | interface OrefHistoryEntry { type OrefHistoryResponse (line 27) | interface OrefHistoryResponse { constant CACHE_TTL (line 37) | const CACHE_TTL = 8_000; function ensureLocationMapLoaded (line 44) | async function ensureLocationMapLoaded(): Promise { constant MAX_TRANSLATION_CACHE (line 53) | const MAX_TRANSLATION_CACHE = 200; function sanitizeHebrew (line 57) | function sanitizeHebrew(text: string): string { constant HEBREW_RE (line 66) | const HEBREW_RE = /[\u0590-\u05FF]/; constant STATIC_TRANSLATIONS (line 68) | const STATIC_TRANSLATIONS: Record = { function staticTranslate (line 93) | function staticTranslate(text: string): string { function hasHebrew (line 105) | function hasHebrew(text: string): boolean { function alertNeedsTranslation (line 109) | function alertNeedsTranslation(alert: OrefAlert): boolean { function escapeRegExp (line 113) | function escapeRegExp(s: string): string { constant OREF_LABEL_RE (line 117) | const OREF_LABEL_RE = /(?:ALERT|AREAS|DESC)\[[^\]]*\]:\s*/g; function stripOrefLabels (line 119) | function stripOrefLabels(text: string): string { function buildTranslationPrompt (line 125) | function buildTranslationPrompt(alerts: OrefAlert[]): string { function parseTranslationResponse (line 135) | function parseTranslationResponse(raw: string, alerts: OrefAlert[]): void { function translateFields (line 171) | function translateFields(alert: OrefAlert): OrefAlert { function applyTranslations (line 180) | function applyTranslations(alerts: OrefAlert[]): OrefAlert[] { function translateAlerts (line 192) | async function translateAlerts(alerts: OrefAlert[]): Promise { function getOrefApiUrl (line 225) | function getOrefApiUrl(endpoint?: string): string { function fetchOrefAlerts (line 230) | async function fetchOrefAlerts(options: { signal?: AbortSignal } = {}): ... function fetchOrefHistory (line 266) | async function fetchOrefHistory(): Promise { function onOrefAlertsUpdate (line 294) | function onOrefAlertsUpdate(cb: (data: OrefAlertsResponse) => void): void { function startOrefPolling (line 298) | function startOrefPolling(): void { function stopOrefPolling (line 311) | function stopOrefPolling(): void { FILE: src/services/oref-locations.ts function sanitizeHebrew (line 6) | function sanitizeHebrew(text: string): string { constant OREF_LOCATIONS (line 15) | const OREF_LOCATIONS: Record = { function translateLocation (line 1500) | function translateLocation(hebrew: string): string { FILE: src/services/parallel-analysis.ts type NEREntity (line 11) | interface NEREntity { type PerspectiveScore (line 17) | interface PerspectiveScore { type AnalyzedHeadline (line 24) | interface AnalyzedHeadline { type AnalysisReport (line 36) | interface AnalysisReport { constant VIOLENCE_KEYWORDS (line 46) | const VIOLENCE_KEYWORDS = [ constant MILITARY_KEYWORDS (line 52) | const MILITARY_KEYWORDS = [ constant UNREST_KEYWORDS (line 58) | const UNREST_KEYWORDS = [ constant FLASHPOINT_KEYWORDS (line 64) | const FLASHPOINT_KEYWORDS = [ constant BUSINESS_DEMOTE (line 70) | const BUSINESS_DEMOTE = [ class ParallelAnalysisService (line 75) | class ParallelAnalysisService { method analyzeHeadlines (line 78) | async analyzeHeadlines(clusters: ClusteredEvent[]): Promise { method getLastReport (line 495) | getLastReport(): AnalysisReport | null { method getSuggestedImprovements (line 499) | getSuggestedImprovements(): string[] { FILE: src/services/persistent-cache.ts type CacheEnvelope (line 5) | type CacheEnvelope = { constant CACHE_PREFIX (line 11) | const CACHE_PREFIX = 'worldmonitor-persistent-cache:'; constant CACHE_DB_NAME (line 12) | const CACHE_DB_NAME = 'worldmonitor_persistent_cache'; constant CACHE_DB_VERSION (line 13) | const CACHE_DB_VERSION = 1; constant CACHE_STORE (line 14) | const CACHE_STORE = 'entries'; function isIndexedDbAvailable (line 18) | function isIndexedDbAvailable(): boolean { function getCacheDb (line 22) | function getCacheDb(): Promise { function getFromIndexedDb (line 51) | async function getFromIndexedDb(key: string): Promise(payload: CacheEnvelope): Promise { function deleteFromLocalStorageByPrefix (line 93) | function deleteFromLocalStorageByPrefix(prefix: string): void { function validateBreakerPrefix (line 110) | function validateBreakerPrefix(prefix: string): void { function getPersistentCache (line 118) | async function getPersistentCache(key: string): Promise(key: string, data: T): Promise { function deletePersistentCache (line 176) | async function deletePersistentCache(key: string): Promise { function deletePersistentCacheByPrefix (line 210) | async function deletePersistentCacheByPrefix(prefix: string): Promise = { constant FRESHNESS_REVERSE (line 45) | const FRESHNESS_REVERSE: Record = { constant TREND_REVERSE (line 50) | const TREND_REVERSE: Record = { function toLocation (line 56) | function toLocation(proto: ProtoLocation): PizzIntLocation { function toStatus (line 74) | function toStatus(proto: ProtoPizzintStatus): PizzIntStatus { function toTensionPair (line 89) | function toTensionPair(proto: ProtoTensionPair): GdeltTensionPair { function fetchPizzIntStatus (line 117) | async function fetchPizzIntStatus(): Promise { function fetchGdeltTensions (line 125) | async function fetchGdeltTensions(): Promise { function getPizzIntStatus (line 132) | function getPizzIntStatus(): string { function getGdeltStatus (line 136) | function getGdeltStatus(): string { FILE: src/services/population-exposure.ts function fetchCountryPopulations (line 18) | async function fetchCountryPopulations(): Promise { type ExposureResponse (line 26) | interface ExposureResponse { function fetchExposure (line 33) | async function fetchExposure(lat: number, lon: number, radiusKm: number)... type EventForExposure (line 45) | interface EventForExposure { function getRadiusForEventType (line 53) | function getRadiusForEventType(type: string): number { function enrichEventsWithExposure (line 73) | async function enrichEventsWithExposure( function formatPopulation (line 106) | function formatPopulation(n: number): string { FILE: src/services/positive-classifier.ts constant HAPPY_CATEGORY_LABELS (line 7) | const HAPPY_CATEGORY_LABELS: Record = { constant HAPPY_CATEGORY_ALL (line 16) | const HAPPY_CATEGORY_ALL: HappyContentCategory[] = [ constant SOURCE_CATEGORY_MAP (line 27) | const SOURCE_CATEGORY_MAP: Record = { constant CATEGORY_KEYWORDS (line 37) | const CATEGORY_KEYWORDS: Array<[string, HappyContentCategory]> = [ function classifyPositiveContent (line 114) | function classifyPositiveContent(title: string): HappyContentCategory { function classifyNewsItem (line 127) | function classifyNewsItem(source: string, title: string): HappyContentCa... FILE: src/services/positive-events-geo.ts type PositiveGeoEvent (line 13) | interface PositiveGeoEvent { function fetchPositiveGeoEvents (line 36) | async function fetchPositiveGeoEvents(): Promise { function geocodePositiveNewsItems (line 54) | function geocodePositiveNewsItems( FILE: src/services/prediction/index.ts type PredictionMarket (line 7) | interface PredictionMarket { function isExpired (line 17) | function isExpired(endDate?: string): boolean { constant GEOPOLITICAL_TAGS (line 29) | const GEOPOLITICAL_TAGS = predictionTags.geopolitical; constant TECH_TAGS (line 30) | const TECH_TAGS = predictionTags.tech; constant FINANCE_TAGS (line 31) | const FINANCE_TAGS = predictionTags.finance; type BootstrapPredictionData (line 33) | interface BootstrapPredictionData { constant REGION_PATTERNS (line 40) | const REGION_PATTERNS: Record = { function tagRegions (line 50) | function tagRegions(title: string): string[] { function protoToMarket (line 56) | function protoToMarket(m: { title: string; yesPrice: number; volume: num... function fetchPredictions (line 68) | async function fetchPredictions(opts?: { region?: string }): Promise { function getLatestRadiationWatch (line 126) | function getLatestRadiationWatch(): RadiationWatchResult | null { function toResult (line 130) | function toResult(response: ListRadiationObservationsResponse): Radiatio... function mapSource (line 150) | function mapSource(source: ProtoRadiationSource): RadiationSourceLabel { function mapFreshness (line 161) | function mapFreshness(freshness: ProtoRadiationFreshness): RadiationFres... function mapSeverity (line 172) | function mapSeverity(severity: ProtoRadiationSeverity): RadiationSeverity { function mapConfidence (line 183) | function mapConfidence(confidence: ProtoRadiationConfidence): RadiationC... FILE: src/services/related-assets.ts constant MAX_DISTANCE_KM (line 14) | const MAX_DISTANCE_KM = 300; constant MAX_ASSETS_PER_TYPE (line 15) | const MAX_ASSETS_PER_TYPE = 3; constant ASSET_KEYWORDS (line 17) | const ASSET_KEYWORDS: Record = { type AssetOrigin (line 25) | interface AssetOrigin { function detectAssetTypes (line 31) | function detectAssetTypes(titles: string[]): AssetType[] { function countKeywordMatches (line 41) | function countKeywordMatches(titles: string[], keywords: string[]): numb... function inferOrigin (line 48) | function inferOrigin(titles: string[]): AssetOrigin | null { function haversineDistanceKm (line 69) | function haversineDistanceKm(lat1: number, lon1: number, lat2: number, l... function midpoint (line 82) | function midpoint(points: [number, number][]): { lat: number; lon: numbe... function buildAssetIndex (line 88) | function buildAssetIndex(type: AssetType): Array<{ id: string; name: str... function findNearbyAssets (line 113) | function findNearbyAssets(origin: AssetOrigin, types: AssetType[]): Rela... function getClusterAssetContext (line 140) | function getClusterAssetContext(cluster: ClusteredEvent): RelatedAssetCo... function getAssetLabel (line 152) | function getAssetLabel(type: AssetType): string { function getNearbyInfrastructure (line 156) | function getNearbyInfrastructure( FILE: src/services/renewable-energy-data.ts type RegionRenewableData (line 19) | interface RegionRenewableData { type RenewableEnergyData (line 26) | interface RenewableEnergyData { constant FALLBACK_DATA (line 37) | const FALLBACK_DATA: RenewableEnergyData = { function fetchRenewableEnergyDataFresh (line 73) | async function fetchRenewableEnergyDataFresh(): Promise { type CapacityDataPoint (line 105) | interface CapacityDataPoint { type CapacitySeries (line 110) | interface CapacitySeries { function fetchEnergyCapacity (line 121) | async function fetchEnergyCapacity(): Promise { FILE: src/services/renewable-installations.ts type RenewableInstallation (line 13) | interface RenewableInstallation { function fetchRenewableInstallations (line 29) | async function fetchRenewableInstallations(): Promise & { pub... function getFeedScope (line 31) | function getFeedScope(feedName: string, lang: string): string { function parseFeedScope (line 35) | function parseFeedScope(feedScope: string): { feedName: string; lang: st... function getPersistentFeedKey (line 44) | function getPersistentFeedKey(feedScope: string): string { function readPersistentFeed (line 48) | async function readPersistentFeed(key: string): Promise { function fetchCategoryFeeds (line 320) | async function fetchCategoryFeeds( FILE: src/services/runtime-config.ts type RuntimeSecretKey (line 4) | type RuntimeSecretKey = type RuntimeFeatureId (line 33) | type RuntimeFeatureId = type RuntimeFeatureDefinition (line 60) | interface RuntimeFeatureDefinition { type RuntimeSecretState (line 69) | interface RuntimeSecretState { type RuntimeConfig (line 74) | interface RuntimeConfig { constant TOGGLES_STORAGE_KEY (line 79) | const TOGGLES_STORAGE_KEY = 'worldmonitor-runtime-feature-toggles'; function getSidecarEnvUpdateUrl (line 80) | function getSidecarEnvUpdateUrl(): string { function getSidecarEnvUpdateBatchUrl (line 83) | function getSidecarEnvUpdateBatchUrl(): string { function getSidecarSecretValidateUrl (line 86) | function getSidecarSecretValidateUrl(): string { constant RUNTIME_FEATURES (line 118) | const RUNTIME_FEATURES: RuntimeFeatureDefinition[] = [ function readEnvSecret (line 298) | function readEnvSecret(key: RuntimeSecretKey): string { function readStoredToggles (line 303) | function readStoredToggles(): Record { constant URL_SECRET_KEYS (line 314) | const URL_SECRET_KEYS = new Set([ type SecretVerificationResult (line 320) | interface SecretVerificationResult { function validateSecret (line 325) | function validateSecret(key: RuntimeSecretKey, value: string): { valid: ... function notifyConfigChanged (line 369) | function notifyConfigChanged(): void { function seedSecretsFromEnvironment (line 373) | function seedSecretsFromEnvironment(): void { function subscribeRuntimeConfig (line 403) | function subscribeRuntimeConfig(listener: () => void): () => void { function getRuntimeConfigSnapshot (line 408) | function getRuntimeConfigSnapshot(): RuntimeConfig { function isFeatureEnabled (line 415) | function isFeatureEnabled(featureId: RuntimeFeatureId): boolean { function getSecretState (line 419) | function getSecretState(key: RuntimeSecretKey): { present: boolean; vali... function isFeatureAvailable (line 425) | function isFeatureAvailable(featureId: RuntimeFeatureId): boolean { function getEffectiveSecrets (line 440) | function getEffectiveSecrets(feature: RuntimeFeatureDefinition): Runtime... function setFeatureToggle (line 444) | function setFeatureToggle(featureId: RuntimeFeatureId, enabled: boolean)... function setSecretValue (line 450) | async function setSecretValue(key: RuntimeSecretKey, value: string): Pro... function getLocalApiToken (line 482) | async function getLocalApiToken(): Promise { function pushSecretToSidecar (line 495) | async function pushSecretToSidecar(key: string, value: string): Promise<... function callSidecarWithAuth (line 517) | async function callSidecarWithAuth(url: string, init: RequestInit): Prom... function verifySecretWithApi (line 526) | async function verifySecretWithApi( function loadDesktopSecrets (line 578) | async function loadDesktopSecrets(): Promise { function pushSecretBatchToSidecar (line 615) | async function pushSecretBatchToSidecar(entries: { key: string; value: s... FILE: src/services/runtime.ts constant ENV (line 3) | const ENV = (() => { constant WS_API_URL (line 11) | const WS_API_URL = ENV.VITE_WS_API_URL || ''; constant DEFAULT_WEB_API_URL (line 12) | const DEFAULT_WEB_API_URL = 'https://api.worldmonitor.app'; constant KEYED_CLOUD_API_PATTERN (line 13) | const KEYED_CLOUD_API_PATTERN = /^\/api\/(?:[^/]+\/v1\/|bootstrap(?:\?|$... constant DEFAULT_REMOTE_HOSTS (line 15) | const DEFAULT_REMOTE_HOSTS: Record = { constant DEFAULT_LOCAL_API_PORT (line 23) | const DEFAULT_LOCAL_API_PORT = 46123; constant FORCE_DESKTOP_RUNTIME (line 24) | const FORCE_DESKTOP_RUNTIME = ENV.VITE_DESKTOP_RUNTIME === '1'; function resolveLocalApiPort (line 29) | async function resolveLocalApiPort(): Promise { function getLocalApiPort (line 50) | function getLocalApiPort(): number { function normalizeBaseUrl (line 54) | function normalizeBaseUrl(baseUrl: string): string { type RuntimeProbe (line 58) | type RuntimeProbe = { function detectDesktopRuntime (line 66) | function detectDesktopRuntime(probe: RuntimeProbe): boolean { function isDesktopRuntime (line 91) | function isDesktopRuntime(): boolean { function getApiBaseUrl (line 109) | function getApiBaseUrl(): string { function isWorldMonitorWebHost (line 122) | function isWorldMonitorWebHost(hostname: string): boolean { function getConfiguredWebApiBaseUrl (line 128) | function getConfiguredWebApiBaseUrl(): string { function getCanonicalApiOrigin (line 149) | function getCanonicalApiOrigin(): string { function getRemoteApiBaseUrl (line 153) | function getRemoteApiBaseUrl(): string { function toRuntimeUrl (line 172) | function toRuntimeUrl(path: string): string { function toApiUrl (line 185) | function toApiUrl(path: string): string { function extractHostnames (line 202) | function extractHostnames(...urls: (string | undefined)[]): string[] { constant APP_HOSTS (line 211) | const APP_HOSTS = new Set([ function isAppOriginUrl (line 221) | function isAppOriginUrl(urlStr: string): boolean { function getApiTargetFromRequestInput (line 231) | function getApiTargetFromRequestInput(input: RequestInfo | URL): string ... function sleep (line 255) | function sleep(ms: number): Promise { type SmartPollReason (line 259) | type SmartPollReason = 'interval' | 'resume' | 'manual' | 'startup'; type SmartPollContext (line 261) | interface SmartPollContext { type SmartPollOptions (line 267) | interface SmartPollOptions { class VisibilityHub (line 283) | class VisibilityHub { method subscribe (line 288) | subscribe(cb: () => void): () => void { method destroy (line 297) | destroy(): void { method ensureListening (line 302) | private ensureListening(): void { method stopListening (line 311) | private stopListening(): void { type SmartPollLoopHandle (line 319) | interface SmartPollLoopHandle { function isAbortError (line 325) | function isAbortError(error: unknown): boolean { function hasVisibilityApi (line 331) | function hasVisibilityApi(): boolean { function isDocumentHidden (line 337) | function isDocumentHidden(): boolean { function startSmartPollLoop (line 341) | function startSmartPollLoop( function waitForSidecarReady (line 524) | async function waitForSidecarReady(timeoutMs = 3000): Promise { function isLocalOnlyApiTarget (line 541) | function isLocalOnlyApiTarget(target: string): boolean { function isKeyFreeApiTarget (line 547) | function isKeyFreeApiTarget(target: string): boolean { function fetchLocalWithStartupRetry (line 551) | async function fetchLocalWithStartupRetry( constant TOKEN_TTL_MS (line 602) | const TOKEN_TTL_MS = 5 * 60 * 1000; function installRuntimeFetchPatch (line 604) | function installRuntimeFetchPatch(): void { constant ALLOWED_REDIRECT_HOSTS (line 735) | const ALLOWED_REDIRECT_HOSTS = /^https:\/\/([a-z0-9]([a-z0-9-]*[a-z0-9])... function isAllowedRedirectTarget (line 737) | function isAllowedRedirectTarget(url: string): boolean { function installWebApiRedirect (line 746) | function installWebApiRedirect(): void { FILE: src/services/sanctions-pressure.ts type SanctionsEntityType (line 13) | type SanctionsEntityType = 'entity' | 'individual' | 'vessel' | 'aircraft'; type SanctionsEntry (line 15) | interface SanctionsEntry { type CountrySanctionsPressure (line 28) | interface CountrySanctionsPressure { type ProgramSanctionsPressure (line 37) | interface ProgramSanctionsPressure { type SanctionsPressureResult (line 43) | interface SanctionsPressureResult { function mapEntityType (line 80) | function mapEntityType(value: ProtoSanctionsEntityType): SanctionsEntity... function parseEpoch (line 93) | function parseEpoch(value: string | number | null | undefined): Date | n... function toEntry (line 100) | function toEntry(raw: ProtoSanctionsEntry): SanctionsEntry { function toCountry (line 115) | function toCountry(raw: ProtoCountryPressure): CountrySanctionsPressure { function toProgram (line 126) | function toProgram(raw: ProtoProgramPressure): ProgramSanctionsPressure { function toResult (line 134) | function toResult(response: ListSanctionsPressureResponse): SanctionsPre... function fetchSanctionsPressure (line 150) | async function fetchSanctionsPressure(): Promise { function getLatestSanctionsPressure (line 178) | function getLatestSanctionsPressure(): SanctionsPressureResult | null { FILE: src/services/satellites.ts type SatelliteTLE (line 18) | interface SatelliteTLE { type SatellitePosition (line 27) | interface SatellitePosition { type SatRecEntry (line 40) | interface SatRecEntry { constant CACHE_TTL (line 47) | const CACHE_TTL = 10 * 60 * 1000; constant MAX_FAILURES (line 51) | const MAX_FAILURES = 3; constant COOLDOWN_MS (line 52) | const COOLDOWN_MS = 10 * 60 * 1000; function fetchSatelliteTLEs (line 54) | async function fetchSatelliteTLEs(): Promise { function initSatRecs (line 80) | function initSatRecs(tles: SatelliteTLE[]): SatRecEntry[] { function propagatePositions (line 94) | function propagatePositions(satRecs: SatRecEntry[], date?: Date): Satell... function startPropagationLoop (line 137) | function startPropagationLoop( function getSatelliteStatus (line 149) | function getSatelliteStatus(): string { FILE: src/services/security-advisories.ts type SecurityAdvisory (line 9) | interface SecurityAdvisory { type SecurityAdvisoriesFetchResult (line 19) | interface SecurityAdvisoriesFetchResult { function normalizeAdvisories (line 27) | function normalizeAdvisories( constant CACHE_TTL (line 44) | const CACHE_TTL = 15 * 60 * 1000; function loadAdvisoriesFromServer (line 46) | async function loadAdvisoriesFromServer(): Promise> = { constant PLAINTEXT_KEYS (line 30) | const PLAINTEXT_KEYS = new Set([ constant MASKED_SENTINEL (line 37) | const MASKED_SENTINEL = '__WM_MASKED__'; constant HUMAN_LABELS (line 39) | const HUMAN_LABELS: Record = { type SettingsCategory (line 69) | interface SettingsCategory { constant SETTINGS_CATEGORIES (line 75) | const SETTINGS_CATEGORIES: SettingsCategory[] = [ FILE: src/services/settings-manager.ts class SettingsManager (line 14) | class SettingsManager { method captureUnsavedInputs (line 19) | captureUnsavedInputs(container: HTMLElement): void { method hasPendingChanges (line 45) | hasPendingChanges(): boolean { method getMissingRequiredSecrets (line 49) | getMissingRequiredSecrets(): string[] { method getValidationErrors (line 65) | getValidationErrors(): string[] { method verifyPendingSecrets (line 74) | async verifyPendingSecrets(): Promise { method commitVerifiedSecrets (line 116) | async commitVerifiedSecrets(): Promise { method setPending (line 127) | setPending(key: RuntimeSecretKey, value: string): void { method getPending (line 131) | getPending(key: RuntimeSecretKey): string | undefined { method hasPending (line 135) | hasPending(key: RuntimeSecretKey): boolean { method deletePending (line 139) | deletePending(key: RuntimeSecretKey): void { method setValidation (line 145) | setValidation(key: RuntimeSecretKey, valid: boolean, message?: string)... method getValidationState (line 154) | getValidationState(key: RuntimeSecretKey): { validated?: boolean; mess... method destroy (line 161) | destroy(): void { FILE: src/services/signal-aggregator.ts type SignalType (line 18) | type SignalType = type GeoSignal (line 30) | interface GeoSignal { type CountrySignalCluster (line 43) | interface CountrySignalCluster { type RegionalConvergence (line 53) | interface RegionalConvergence { type SignalSummary (line 61) | interface SignalSummary { constant REGION_DEFINITIONS (line 70) | const REGION_DEFINITIONS: Record; constant DEFAULT_LIMIT (line 14) | const DEFAULT_LIMIT = 4; constant DEFAULT_LIMIT_PER_SYMBOL (line 15) | const DEFAULT_LIMIT_PER_SYMBOL = 4; constant MAX_SNAPSHOTS_PER_SYMBOL (line 16) | const MAX_SNAPSHOTS_PER_SYMBOL = 32; constant STOCK_ANALYSIS_FRESH_MS (line 17) | const STOCK_ANALYSIS_FRESH_MS = 15 * 60 * 1000; function getTargetSymbols (line 19) | async function getTargetSymbols(limit: number): Promise { function compareSnapshots (line 24) | function compareSnapshots(a: StockAnalysisSnapshot, b: StockAnalysisSnap... function isSameSnapshot (line 30) | function isSameSnapshot(a: StockAnalysisSnapshot, b: StockAnalysisSnapsh... function mergeStockAnalysisHistory (line 38) | function mergeStockAnalysisHistory( function getLatestStockAnalysisSnapshots (line 59) | function getLatestStockAnalysisSnapshots(history: StockAnalysisHistory, ... function hasFreshStockAnalysisHistory (line 67) | function hasFreshStockAnalysisHistory( function getMissingOrStaleStockAnalysisSymbols (line 81) | function getMissingOrStaleStockAnalysisSymbols( function fetchStockAnalysisHistory (line 94) | async function fetchStockAnalysisHistory( FILE: src/services/stock-analysis.ts type StockAnalysisResult (line 14) | type StockAnalysisResult = AnalyzeStockResponse; type StockAnalysisTarget (line 16) | interface StockAnalysisTarget { constant DEFAULT_LIMIT (line 22) | const DEFAULT_LIMIT = 4; function isAnalyzableSymbol (line 24) | function isAnalyzableSymbol(symbol: string): boolean { function getStockAnalysisTargets (line 28) | function getStockAnalysisTargets(limit = DEFAULT_LIMIT): StockAnalysisTa... function fetchStockAnalysesForTargets (line 49) | async function fetchStockAnalysesForTargets(targets: StockAnalysisTarget... function fetchStockAnalyses (line 59) | async function fetchStockAnalyses(limit = DEFAULT_LIMIT): Promise { function withTransaction (line 44) | async function withTransaction( function getBaseline (line 79) | async function getBaseline(key: string): Promise { function updateBaseline (line 86) | async function updateBaseline(key: string, currentCount: number): Promis... function calculateDeviation (line 133) | function calculateDeviation(current: number, baseline: BaselineEntry): { function getAllBaselines (line 163) | async function getAllBaselines(): Promise { type DashboardSnapshot (line 170) | interface DashboardSnapshot { constant SNAPSHOT_RETENTION_DAYS (line 178) | const SNAPSHOT_RETENTION_DAYS = 7; constant DAY_MS (line 179) | const DAY_MS = 24 * 60 * 60 * 1000; function saveSnapshot (line 181) | async function saveSnapshot(snapshot: DashboardSnapshot): Promise { function getSnapshots (line 187) | async function getSnapshots(fromTime?: number, toTime?: number): Promise... function getSnapshotAt (line 198) | async function getSnapshotAt(timestamp: number): Promise { function getSnapshotTimestamps (line 225) | async function getSnapshotTimestamps(): Promise { FILE: src/services/story-data.ts type StoryData (line 7) | interface StoryData { function collectStoryData (line 56) | function collectStoryData( FILE: src/services/story-renderer.ts function humanizeSignalType (line 7) | function humanizeSignalType(type: string): string { constant LEVEL_COLORS (line 33) | const LEVEL_COLORS: Record = { constant THREAT_COLORS (line 36) | const THREAT_COLORS: Record = { constant LOGO_URL (line 40) | const LOGO_URL = '/favico/worldmonitor-icon-1024.png'; function loadImage (line 42) | function loadImage(src: string): Promise { function renderStoryToCanvas (line 51) | async function renderStoryToCanvas(data: StoryData): Promise { FILE: src/services/summarization.ts type SummarizationProvider (line 21) | type SummarizationProvider = 'ollama' | 'groq' | 'openrouter' | 'browser... type SummarizationResult (line 23) | interface SummarizationResult { type ProgressCallback (line 30) | type ProgressCallback = (step: number, total: number, message: string) =... type SummarizeOptions (line 32) | interface SummarizeOptions { type ApiProviderDef (line 53) | interface ApiProviderDef { constant API_PROVIDERS (line 59) | const API_PROVIDERS: ApiProviderDef[] = [ function tryApiProvider (line 69) | async function tryApiProvider( function tryBrowserT5 (line 111) | async function tryBrowserT5(headlines: string[], modelId?: string): Prom... function runApiChain (line 144) | async function runApiChain( function generateSummary (line 166) | async function generateSummary( function generateSummaryInternal (line 200) | async function generateSummaryInternal( function translateText (line 292) | async function translateText( FILE: src/services/supply-chain/index.ts function fetchShippingRates (line 37) | async function fetchShippingRates(): Promise { function fetchChokepointStatus (line 50) | async function fetchChokepointStatus(): Promise(command: string, payload?: Record( function tryInvokeTauri (line 36) | async function tryInvokeTauri( FILE: src/services/tech-activity.ts type TechHubActivity (line 5) | interface TechHubActivity { type HubAccumulator (line 22) | interface HubAccumulator { constant TIER_BONUS (line 30) | const TIER_BONUS: Record = { function aggregateTechActivity (line 36) | function aggregateTechActivity(clusters: ClusteredEvent[]): TechHubActiv... function getTopActiveHubs (line 133) | function getTopActiveHubs(clusters: ClusteredEvent[], limit = 10): TechH... function getHubActivity (line 137) | function getHubActivity(hubId: string, clusters: ClusteredEvent[]): Tech... FILE: src/services/tech-hub-index.ts type TechHubLocation (line 6) | interface TechHubLocation { type TechHubIndex (line 18) | interface TechHubIndex { function normalizeTier (line 25) | function normalizeTier(tier: string | undefined): 'mega' | 'major' | 'em... function buildTechHubIndex (line 32) | function buildTechHubIndex(): TechHubIndex { type HubMatch (line 205) | interface HubMatch { function inferHubsFromTitle (line 212) | function inferHubsFromTitle(title: string): HubMatch[] { function getHubById (line 255) | function getHubById(hubId: string): TechHubLocation | undefined { function getAllHubs (line 260) | function getAllHubs(): TechHubLocation[] { function getHubsByTier (line 265) | function getHubsByTier(tier: 'mega' | 'major' | 'emerging'): TechHubLoca... FILE: src/services/telegram-intel.ts type TelegramItem (line 4) | interface TelegramItem { type TelegramFeedResponse (line 18) | interface TelegramFeedResponse { constant TELEGRAM_TOPICS (line 27) | const TELEGRAM_TOPICS = [ constant CACHE_TTL (line 39) | const CACHE_TTL = 30_000; function telegramFeedUrl (line 41) | function telegramFeedUrl(limit: number): string { function fetchTelegramFeed (line 46) | async function fetchTelegramFeed(limit = 50): Promise = { constant WEEKDAY_NAMES (line 34) | const WEEKDAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thur... constant MONTH_NAMES (line 35) | const MONTH_NAMES = ['', 'January', 'February', 'March', 'April', 'May',... constant SERVER_TYPES (line 38) | const SERVER_TYPES = new Set(['news', 'satellite_fire... function formatAnomalyMessage (line 40) | function formatAnomalyMessage( function getSeverity (line 54) | function getSeverity(zScore: number): 'medium' | 'high' | 'critical' { function mapServerAnomaly (line 60) | function mapServerAnomaly(a: TemporalAnomalyProto): TemporalAnomaly { function consumeServerAnomalies (line 72) | function consumeServerAnomalies(): { anomalies: TemporalAnomaly[]; track... function fetchLiveAnomalies (line 86) | async function fetchLiveAnomalies(): Promise<{ anomalies: TemporalAnomal... function reportMetrics (line 100) | async function reportMetrics( function checkAnomaly (line 110) | async function checkAnomaly( function updateAndCheck (line 134) | async function updateAndCheck( FILE: src/services/thermal-escalation.ts type ThermalStatus (line 13) | type ThermalStatus = 'normal' | 'elevated' | 'spike' | 'persistent'; type ThermalContext (line 14) | type ThermalContext = type ThermalConfidence (line 22) | type ThermalConfidence = 'low' | 'medium' | 'high'; type ThermalStrategicRelevance (line 23) | type ThermalStrategicRelevance = 'low' | 'medium' | 'high'; type ThermalEscalationCluster (line 25) | interface ThermalEscalationCluster { type ThermalEscalationWatch (line 55) | interface ThermalEscalationWatch { type HydratedThermalData (line 92) | interface HydratedThermalData { function fetchThermalEscalations (line 107) | async function fetchThermalEscalations(maxItems = 12): Promise = { constant THREAT_VAR_MAP (line 16) | const THREAT_VAR_MAP: Record = { function getThreatColor (line 24) | function getThreatColor(level: string): string { constant THREAT_PRIORITY (line 28) | const THREAT_PRIORITY: Record = { function getThreatLabel (line 38) | function getThreatLabel(level: ThreatLevel): string { constant THREAT_LABELS (line 42) | const THREAT_LABELS: Record = { type KeywordMap (line 50) | type KeywordMap = Record; constant CRITICAL_KEYWORDS (line 52) | const CRITICAL_KEYWORDS: KeywordMap = { constant HIGH_KEYWORDS (line 104) | const HIGH_KEYWORDS: KeywordMap = { constant MEDIUM_KEYWORDS (line 165) | const MEDIUM_KEYWORDS: KeywordMap = { constant LOW_KEYWORDS (line 201) | const LOW_KEYWORDS: KeywordMap = { constant TECH_HIGH_KEYWORDS (line 231) | const TECH_HIGH_KEYWORDS: KeywordMap = { constant TECH_MEDIUM_KEYWORDS (line 241) | const TECH_MEDIUM_KEYWORDS: KeywordMap = { constant TECH_LOW_KEYWORDS (line 254) | const TECH_LOW_KEYWORDS: KeywordMap = { constant EXCLUSIONS (line 268) | const EXCLUSIONS = [ constant SHORT_KEYWORDS (line 276) | const SHORT_KEYWORDS = new Set([ constant TRAILING_BOUNDARY_KEYWORDS (line 281) | const TRAILING_BOUNDARY_KEYWORDS = new Set([ function getKeywordRegex (line 291) | function getKeywordRegex(kw: string): RegExp { function matchKeywords (line 307) | function matchKeywords( constant ESCALATION_ACTIONS (line 321) | const ESCALATION_ACTIONS = /\b(attack|attacks|attacked|strike|strikes|st... constant ESCALATION_TARGETS (line 322) | const ESCALATION_TARGETS = /\b(iran|tehran|isfahan|tabriz|russia|moscow|... function shouldEscalateToCritical (line 324) | function shouldEscalateToCritical(lower: string, matchCat: EventCategory... function classifyByKeyword (line 329) | function classifyByKeyword(title: string, variant = 'full'): ThreatClass... constant VALID_LEVELS (line 392) | const VALID_LEVELS: Record = { function toThreat (line 396) | function toThreat(resp: ClassifyEventResponse): ThreatClassification | n... type BatchJob (line 410) | type BatchJob = { constant BATCH_SIZE (line 417) | const BATCH_SIZE = 20; constant BATCH_DELAY_MS (line 418) | const BATCH_DELAY_MS = 500; constant STAGGER_BASE_MS (line 419) | const STAGGER_BASE_MS = 2100; constant STAGGER_JITTER_MS (line 420) | const STAGGER_JITTER_MS = 200; constant MIN_GAP_MS (line 421) | const MIN_GAP_MS = 2000; constant MAX_RETRIES (line 422) | const MAX_RETRIES = 2; constant MAX_QUEUE_LENGTH (line 423) | const MAX_QUEUE_LENGTH = 100; constant BASE_PAUSE_MS (line 424) | const BASE_PAUSE_MS = 60_000; constant MAX_PAUSE_MS (line 425) | const MAX_PAUSE_MS = 300_000; function waitForGap (line 433) | async function waitForGap(): Promise { function flushBatch (line 444) | function flushBatch(): void { function scheduleBatch (line 511) | function scheduleBatch(): void { function classifyWithAIUncached (line 520) | function classifyWithAIUncached( function classifyWithAI (line 535) | function classifyWithAI( function aggregateThreats (line 547) | function aggregateThreats( FILE: src/services/throttled-target-requests.ts type NamedSymbolTarget (line 1) | interface NamedSymbolTarget { type AvailabilityResult (line 6) | interface AvailabilityResult { function sleep (line 10) | function sleep(ms: number): Promise { function runThrottledTargetRequests (line 14) | async function runThrottledTargetRequests { FILE: src/services/trending-keywords.ts type TrendingHeadlineInput (line 7) | interface TrendingHeadlineInput { type StoredHeadline (line 14) | interface StoredHeadline { type TermCandidate (line 22) | interface TermCandidate { type PendingMLEnrichmentHeadline (line 27) | interface PendingMLEnrichmentHeadline { type MLEntity (line 32) | interface MLEntity { type TermRecord (line 38) | interface TermRecord { type TrendingSpike (line 46) | interface TrendingSpike { type TrendingConfig (line 56) | interface TrendingConfig { constant HOUR_MS (line 63) | const HOUR_MS = 60 * 60 * 1000; constant DAY_MS (line 64) | const DAY_MS = 24 * HOUR_MS; constant ROLLING_WINDOW_MS (line 66) | const ROLLING_WINDOW_MS = 2 * HOUR_MS; constant BASELINE_WINDOW_MS (line 67) | const BASELINE_WINDOW_MS = 7 * DAY_MS; constant BASELINE_REFRESH_MS (line 68) | const BASELINE_REFRESH_MS = HOUR_MS; constant SPIKE_COOLDOWN_MS (line 69) | const SPIKE_COOLDOWN_MS = 30 * 60 * 1000; constant MAX_TRACKED_TERMS (line 70) | const MAX_TRACKED_TERMS = 10000; constant MAX_AUTO_SUMMARIES_PER_HOUR (line 71) | const MAX_AUTO_SUMMARIES_PER_HOUR = 5; constant MIN_TOKEN_LENGTH (line 72) | const MIN_TOKEN_LENGTH = 3; constant MIN_SPIKE_SOURCE_COUNT (line 73) | const MIN_SPIKE_SOURCE_COUNT = 2; constant CONFIG_KEY (line 74) | const CONFIG_KEY = 'worldmonitor-trending-config-v1'; constant ML_ENTITY_MIN_CONFIDENCE (line 75) | const ML_ENTITY_MIN_CONFIDENCE = 0.75; constant ML_ENTITY_BATCH_SIZE (line 76) | const ML_ENTITY_BATCH_SIZE = 20; constant ML_ENTITY_TYPES (line 77) | const ML_ENTITY_TYPES = new Set(['PER', 'ORG', 'LOC', 'MISC']); constant DEFAULT_CONFIG (line 79) | const DEFAULT_CONFIG: TrendingConfig = { constant CVE_PATTERN (line 86) | const CVE_PATTERN = /CVE-\d{4}-\d{4,}/gi; constant APT_PATTERN (line 87) | const APT_PATTERN = /APT\d+/gi; constant FIN_PATTERN (line 88) | const FIN_PATTERN = /FIN\d+/gi; constant LEADER_NAMES (line 90) | const LEADER_NAMES = [ constant LEADER_PATTERNS (line 95) | const LEADER_PATTERNS = LEADER_NAMES.map(name => ({ function toTermKey (line 109) | function toTermKey(term: string): string { function asDisplayTerm (line 113) | function asDisplayTerm(term: string): string { function isStorageAvailable (line 120) | function isStorageAvailable(): boolean { function uniqueBlockedTerms (line 124) | function uniqueBlockedTerms(terms: string[]): string[] { function sanitizeConfig (line 134) | function sanitizeConfig(config: Partial | null | undefin... function readConfig (line 143) | function readConfig(): TrendingConfig { function persistConfig (line 163) | function persistConfig(config: TrendingConfig): void { function getBlockedTermSet (line 171) | function getBlockedTermSet(config: TrendingConfig): Set { function extractEntities (line 178) | function extractEntities(text: string): string[] { function normalizeEntityType (line 200) | function normalizeEntityType(type: string): string { function normalizeMLEntityText (line 204) | function normalizeMLEntityText(text: string): string { function collectMLEntities (line 212) | function collectMLEntities(rawEntities: MLEntity[] | undefined): string[] { function dedupeEntityTerms (line 228) | function dedupeEntityTerms(entities: string[]): string[] { function extractMLEntitiesForTexts (line 238) | async function extractMLEntitiesForTexts(texts: string[]): Promise { function headlineKey (line 270) | function headlineKey(headline: TrendingHeadlineInput): string { function pruneOldState (line 280) | function pruneOldState(now: number): void { function maybeRefreshBaselines (line 311) | function maybeRefreshBaselines(now: number): void { function dedupeHeadlines (line 320) | function dedupeHeadlines(headlines: StoredHeadline[]): StoredHeadline[] { function stripSourceAttribution (line 332) | function stripSourceAttribution(title: string): string { function buildBaseTermCandidates (line 342) | function buildBaseTermCandidates(title: string): Map): Trending... function suppressTrendingTerm (line 664) | function suppressTrendingTerm(term: string): TrendingConfig { function unsuppressTrendingTerm (line 671) | function unsuppressTrendingTerm(term: string): TrendingConfig { function getTrackedTermCount (line 679) | function getTrackedTermCount(): number { FILE: src/services/tv-mode.ts constant TV_INTERVAL_KEY (line 7) | const TV_INTERVAL_KEY = 'tv-mode-interval'; constant MIN_INTERVAL (line 8) | const MIN_INTERVAL = 30_000; constant MAX_INTERVAL (line 9) | const MAX_INTERVAL = 120_000; constant DEFAULT_INTERVAL (line 10) | const DEFAULT_INTERVAL = 60_000; function clampInterval (line 12) | function clampInterval(ms: number): number { class TvModeController (line 16) | class TvModeController { method constructor (line 24) | constructor(opts: { method active (line 40) | get active(): boolean { method enter (line 44) | enter(): void { method exit (line 73) | exit(): void { method toggle (line 95) | toggle(): void { method setIntervalMs (line 103) | setIntervalMs(ms: number): void { method updatePanelKeys (line 114) | updatePanelKeys(keys: string[]): void { method destroy (line 121) | destroy(): void { method startCycling (line 128) | private startCycling(): void { method stopCycling (line 133) | private stopCycling(): void { method nextPanel (line 140) | private nextPanel(): void { method showPanel (line 145) | private showPanel(index: number): void { method showAllPanels (line 187) | private showAllPanels(): void { FILE: src/services/unrest/index.ts function mapSeverity (line 22) | function mapSeverity(s: string): ProtestSeverity { function mapEventType (line 30) | function mapEventType(t: string): ProtestEventType { function mapSourceType (line 40) | function mapSourceType(s: string): ProtestSource { function mapConfidence (line 48) | function mapConfidence(c: string): 'high' | 'medium' | 'low' { function toSocialUnrestEvent (line 58) | function toSocialUnrestEvent(e: UnrestEvent): SocialUnrestEvent { type ProtestData (line 83) | interface ProtestData { function fetchProtestEvents (line 102) | async function fetchProtestEvents(): Promise { function getProtestStatus (line 171) | function getProtestStatus(): { acledConfigured: boolean | null; gdeltAva... FILE: src/services/usa-spending.ts type GovernmentAward (line 4) | interface GovernmentAward { type SpendingSummary (line 14) | interface SpendingSummary { type RawSpending (line 22) | interface RawSpending { function toSummary (line 30) | function toSummary(raw: RawSpending): SpendingSummary { constant EMPTY_SUMMARY (line 40) | const EMPTY_SUMMARY: SpendingSummary = { awards: [], totalAmount: 0, per... function fetchRecentAwards (line 42) | async function fetchRecentAwards(): Promise { function formatAwardAmount (line 58) | function formatAwardAmount(amount: number): string { function getAwardTypeIcon (line 71) | function getAwardTypeIcon(type: GovernmentAward['awardType']): string { FILE: src/services/usni-fleet.ts function mapProtoToReport (line 20) | function mapProtoToReport(resp: GetUSNIFleetReportResponse): USNIFleetRe... function fetchUSNIFleetReport (line 52) | async function fetchUSNIFleetReport(): Promise { function normalizeHull (line 60) | function normalizeHull(hull: string | undefined): string { function scatterOffset (line 65) | function scatterOffset(hullNumber: string, index: number): { lat: number... function portScatterOffset (line 78) | function portScatterOffset(hullNumber: string, index: number): { lat: nu... function resolvePortCoords (line 94) | function resolvePortCoords( function mergeUSNIWithAIS (line 115) | function mergeUSNIWithAIS( function buildUSNIClusters (line 240) | function buildUSNIClusters(vessels: MilitaryVessel[]): MilitaryVesselClu... function getUSNIFleetStatus (line 273) | function getUSNIFleetStatus(): string { FILE: src/services/velocity.ts constant HOUR_MS (line 4) | const HOUR_MS = 60 * 60 * 1000; constant ELEVATED_THRESHOLD (line 5) | const ELEVATED_THRESHOLD = 3; constant SPIKE_THRESHOLD (line 6) | const SPIKE_THRESHOLD = 6; constant NEGATIVE_WORDS (line 8) | const NEGATIVE_WORDS = new Set([ constant POSITIVE_WORDS (line 18) | const POSITIVE_WORDS = new Set([ function analyzeSentiment (line 26) | function analyzeSentiment(text: string): { sentiment: SentimentType; sco... function calculateVelocityLevel (line 39) | function calculateVelocityLevel(sourcesPerHour: number): VelocityLevel { function calculateVelocity (line 45) | function calculateVelocity(cluster: ClusteredEvent): VelocityMetrics { function enrichWithVelocity (line 80) | function enrichWithVelocity(clusters: ClusteredEvent[]): ClusteredEvent[] { function calculateVelocityWithML (line 87) | async function calculateVelocityWithML(cluster: ClusteredEvent): Promise... function enrichWithVelocityML (line 111) | async function enrichWithVelocityML(clusters: ClusteredEvent[]): Promise... FILE: src/services/weather.ts type WeatherAlert (line 5) | interface WeatherAlert { type BootstrapAlert (line 18) | interface BootstrapAlert { function mapAlert (line 33) | function mapAlert(a: BootstrapAlert): WeatherAlert { function fetchWeatherAlerts (line 48) | async function fetchWeatherAlerts(): Promise { function getWeatherStatus (line 65) | function getWeatherStatus(): string { function getSeverityColor (line 69) | function getSeverityColor(severity: WeatherAlert['severity']): string { FILE: src/services/webcams/index.ts constant IMAGE_CACHE_MS (line 17) | const IMAGE_CACHE_MS = 9 * 60 * 1000; constant IMAGE_CACHE_MAX (line 18) | const IMAGE_CACHE_MAX = 200; function fetchWebcams (line 21) | async function fetchWebcams( function fetchWebcamImage (line 39) | async function fetchWebcamImage(webcamId: string): Promise): v... function unpinWebcam (line 80) | function unpinWebcam(webcamId: string): void { function toggleWebcam (line 85) | function toggleWebcam(webcamId: string): void { function onPinnedChange (line 103) | function onPinnedChange(handler: () => void): () => void { FILE: src/services/widget-store.ts constant STORAGE_KEY (line 4) | const STORAGE_KEY = 'wm-custom-widgets'; constant PANEL_SPANS_KEY (line 5) | const PANEL_SPANS_KEY = 'worldmonitor-panel-spans'; constant PANEL_COL_SPANS_KEY (line 6) | const PANEL_COL_SPANS_KEY = 'worldmonitor-panel-col-spans'; constant MAX_WIDGETS (line 7) | const MAX_WIDGETS = 10; constant MAX_HISTORY (line 8) | const MAX_HISTORY = 10; constant MAX_HTML_CHARS (line 9) | const MAX_HTML_CHARS = 50_000; constant MAX_HTML_CHARS_PRO (line 10) | const MAX_HTML_CHARS_PRO = 80_000; function proHtmlKey (line 12) | function proHtmlKey(id: string): string { type CustomWidgetSpec (line 16) | interface CustomWidgetSpec { function loadWidgets (line 28) | function loadWidgets(): CustomWidgetSpec[] { function saveWidget (line 49) | function saveWidget(spec: CustomWidgetSpec): void { function deleteWidget (line 86) | function deleteWidget(id: string): void { function getWidget (line 94) | function getWidget(id: string): CustomWidgetSpec | null { function isWidgetFeatureEnabled (line 98) | function isWidgetFeatureEnabled(): boolean { function getWidgetAgentKey (line 106) | function getWidgetAgentKey(): string { function isProWidgetEnabled (line 114) | function isProWidgetEnabled(): boolean { function getProWidgetKey (line 122) | function getProWidgetKey(): string { function cleanSpanEntry (line 130) | function cleanSpanEntry(storageKey: string, panelId: string): void { FILE: src/services/wildfires/index.ts type FireRegionStats (line 15) | interface FireRegionStats { type FetchResult (line 23) | interface FetchResult { type MapFire (line 30) | interface MapFire { function fetchAllFires (line 50) | async function fetchAllFires(_days?: number): Promise { function computeRegionStats (line 70) | function computeRegionStats(regions: Record): F... function flattenFires (line 89) | function flattenFires(regions: Record): FireDet... function toMapFires (line 99) | function toMapFires(fires: FireDetection[]): MapFire[] { function confidenceToNumber (line 112) | function confidenceToNumber(c: FireConfidence): number { FILE: src/services/wingbits.ts type WingbitsAircraftDetails (line 21) | interface WingbitsAircraftDetails { type EnrichedAircraftInfo (line 39) | interface EnrichedAircraftInfo { constant LOCAL_CACHE_TTL (line 59) | const LOCAL_CACHE_TTL = 60 * 60 * 1000; constant MAX_LOCAL_CACHE_ENTRIES (line 60) | const MAX_LOCAL_CACHE_ENTRIES = 2000; constant CACHE_SWEEP_INTERVAL_MS (line 61) | const CACHE_SWEEP_INTERVAL_MS = 5 * 60 * 1000; function sweepLocalCache (line 64) | function sweepLocalCache(now = Date.now()): void { function getFromLocalCache (line 87) | function getFromLocalCache(key: string): WingbitsAircraftDetails | null { function setLocalCache (line 99) | function setLocalCache(key: string, data: WingbitsAircraftDetails): void { constant MILITARY_OPERATORS (line 118) | const MILITARY_OPERATORS = [ constant MILITARY_OWNERS (line 125) | const MILITARY_OWNERS = [ constant MILITARY_AIRCRAFT_TYPES (line 138) | const MILITARY_AIRCRAFT_TYPES = [ function toWingbitsDetails (line 149) | function toWingbitsDetails(d: AircraftDetails): WingbitsAircraftDetails { function createNegativeDetailsEntry (line 169) | function createNegativeDetailsEntry(icao24: string): WingbitsAircraftDet... function checkWingbitsStatus (line 192) | async function checkWingbitsStatus(): Promise { function getAircraftDetails (line 211) | async function getAircraftDetails(icao24: string): Promise = { function getFeatureStatusCounts (line 93) | function getFeatureStatusCounts(cat: SettingsCategory): { ready: number;... function getTotalProgress (line 101) | function getTotalProgress(): { ready: number; total: number } { function renderSidebar (line 109) | function renderSidebar(): void { function renderSection (line 154) | function renderSection(sectionId: string): void { function renderOverview (line 184) | function renderOverview(area: HTMLElement): void { function initOverviewListeners (line 253) | function initOverviewListeners(area: HTMLElement): void { function renderFeatureSection (line 281) | function renderFeatureSection(area: HTMLElement, cat: SettingsCategory):... function renderSecretInput (line 333) | function renderSecretInput(key: RuntimeSecretKey, _featureId: RuntimeFea... function initFeatureSectionListeners (line 389) | function initFeatureSectionListeners(area: HTMLElement): void { function updateFeatureCardStatus (line 510) | function updateFeatureCardStatus(featureId: RuntimeFeatureId): void { function loadOllamaModelsIntoSelect (line 532) | async function loadOllamaModelsIntoSelect(select: HTMLSelectElement): Pr... function renderDebug (line 579) | function renderDebug(area: HTMLElement): void { function initDiagnostics (line 664) | function initDiagnostics(): void { function highlightMatch (line 763) | function highlightMatch(text: string, query: string): string { function handleSearch (line 771) | function handleSearch(query: string): void { function initSettingsWindow (line 851) | async function initSettingsWindow(): Promise { FILE: src/settings-window.ts function getLocalizedPanelName (line 12) | function getLocalizedPanelName(panelKey: string, fallback: string): stri... function initSettingsWindow (line 22) | function initSettingsWindow(): void { FILE: src/shims/child-process-proxy.ts class ChildProcessProxy (line 6) | class ChildProcessProxy { method start (line 7) | async start(): Promise<{}> { method stop (line 11) | async stop(): Promise {} method exit (line 13) | async exit(_statusCode: number = 0): Promise {} FILE: src/shims/child-process.ts function spawn (line 5) | function spawn(): never { FILE: src/types/index.ts type DataSourceId (line 1) | type DataSourceId = type HappyContentCategory (line 40) | type HappyContentCategory = type TechHQ (line 48) | interface TechHQ { type DeductContextDetail (line 60) | interface DeductContextDetail { type PropagandaRisk (line 66) | type PropagandaRisk = 'low' | 'medium' | 'high'; type Feed (line 68) | interface Feed { type ThreatLevel (line 78) | type ThreatLevel = 'critical' | 'high' | 'medium' | 'low' | 'info'; type EventCategory (line 80) | type EventCategory = type ThreatClassification (line 85) | interface ThreatClassification { type NewsItem (line 92) | interface NewsItem { type VelocityLevel (line 109) | type VelocityLevel = 'normal' | 'elevated' | 'spike'; type SentimentType (line 110) | type SentimentType = 'negative' | 'neutral' | 'positive'; type DeviationLevel (line 111) | type DeviationLevel = 'normal' | 'elevated' | 'spike' | 'quiet'; type VelocityMetrics (line 113) | interface VelocityMetrics { type ClusteredEvent (line 121) | interface ClusteredEvent { type AssetType (line 140) | type AssetType = 'pipeline' | 'cable' | 'datacenter' | 'base' | 'nuclear'; type RelatedAsset (line 142) | interface RelatedAsset { type RelatedAssetContext (line 149) | interface RelatedAssetContext { type Sector (line 155) | interface Sector { type Commodity (line 160) | interface Commodity { type MarketSymbol (line 166) | interface MarketSymbol { type MarketData (line 172) | interface MarketData { type CryptoData (line 181) | interface CryptoData { type EscalationTrend (line 189) | type EscalationTrend = 'escalating' | 'stable' | 'de-escalating'; type DynamicEscalationScore (line 191) | interface DynamicEscalationScore { type HistoricalContext (line 207) | interface HistoricalContext { type Hotspot (line 215) | interface Hotspot { type StrategicWaterway (line 236) | interface StrategicWaterway { type AisDisruptionType (line 244) | type AisDisruptionType = 'gap_spike' | 'chokepoint_congestion'; type AisDisruptionEvent (line 246) | interface AisDisruptionEvent { type AisDensityZone (line 261) | interface AisDensityZone { type APTGroup (line 272) | interface APTGroup { type CyberThreatType (line 281) | type CyberThreatType = 'c2_server' | 'malware_host' | 'phishing' | 'mali... type CyberThreatSource (line 282) | type CyberThreatSource = 'feodo' | 'urlhaus' | 'c2intel' | 'otx' | 'abus... type CyberThreatSeverity (line 283) | type CyberThreatSeverity = 'low' | 'medium' | 'high' | 'critical'; type CyberThreatIndicatorType (line 284) | type CyberThreatIndicatorType = 'ip' | 'domain' | 'url'; type CyberThreat (line 286) | interface CyberThreat { type ConflictZone (line 302) | interface ConflictZone { type UcdpEventType (line 320) | type UcdpEventType = 'state-based' | 'non-state' | 'one-sided'; type UcdpGeoEvent (line 322) | interface UcdpGeoEvent { type CountryPopulation (line 339) | interface CountryPopulation { type PopulationExposure (line 346) | interface PopulationExposure { type MilitaryBaseType (line 357) | type MilitaryBaseType = type MilitaryBase (line 370) | interface MilitaryBase { type MilitaryBaseEnriched (line 383) | interface MilitaryBaseEnriched extends MilitaryBase { type CableLandingPoint (line 393) | interface CableLandingPoint { type CountryCapacity (line 401) | interface CountryCapacity { type UnderseaCable (line 407) | interface UnderseaCable { type CableAdvisorySeverity (line 420) | type CableAdvisorySeverity = 'fault' | 'degraded'; type CableAdvisory (line 422) | interface CableAdvisory { type RepairShipStatus (line 435) | type RepairShipStatus = 'enroute' | 'on-station'; type RepairShip (line 437) | interface RepairShip { type CableHealthStatus (line 450) | type CableHealthStatus = 'ok' | 'degraded' | 'fault' | 'unknown'; type CableHealthEvidence (line 452) | interface CableHealthEvidence { type CableHealthRecord (line 458) | interface CableHealthRecord { type CableHealthResponse (line 466) | interface CableHealthResponse { type ShippingChokepoint (line 471) | interface ShippingChokepoint { type CyberRegion (line 479) | interface CyberRegion { type NuclearFacilityType (line 487) | type NuclearFacilityType = type NuclearFacility (line 497) | interface NuclearFacility { type GammaIrradiator (line 507) | interface GammaIrradiator { type PipelineType (line 516) | type PipelineType = 'oil' | 'gas' | 'products'; type PipelineStatus (line 517) | type PipelineStatus = 'operating' | 'construction'; type PipelineTerminal (line 519) | interface PipelineTerminal { type Pipeline (line 527) | interface Pipeline { type Earthquake (line 546) | interface Earthquake { type Monitor (line 557) | interface Monitor { type PanelConfig (line 566) | interface PanelConfig { type MapLayers (line 573) | interface MapLayers { type AIDataCenter (line 641) | interface AIDataCenter { type InternetOutage (line 657) | interface InternetOutage { type EconomicCenterType (line 674) | type EconomicCenterType = 'exchange' | 'central-bank' | 'financial-hub'; type EconomicCenter (line 676) | interface EconomicCenter { type Spaceport (line 687) | interface Spaceport { type CriticalMineralProject (line 698) | interface CriticalMineralProject { type AppState (line 710) | interface AppState { type FeedCategory (line 721) | type FeedCategory = 'politics' | 'tech' | 'finance' | 'gov' | 'intel'; type ProtestSeverity (line 724) | type ProtestSeverity = 'low' | 'medium' | 'high'; type ProtestSource (line 725) | type ProtestSource = 'acled' | 'gdelt' | 'rss'; type ProtestEventType (line 726) | type ProtestEventType = 'protest' | 'riot' | 'strike' | 'demonstration' ... type SocialUnrestEvent (line 728) | interface SocialUnrestEvent { type ProtestCluster (line 752) | interface ProtestCluster { type MonitoredAirport (line 764) | interface MonitoredAirport { type MilitaryAircraftType (line 776) | type MilitaryAircraftType = type MilitaryOperator (line 790) | type MilitaryOperator = type MilitaryFlight (line 806) | interface MilitaryFlight { type MilitaryFlightCluster (line 843) | interface MilitaryFlightCluster { type MilitaryVesselType (line 855) | type MilitaryVesselType = type MilitaryVessel (line 868) | interface MilitaryVessel { type USNIDeploymentStatus (line 902) | type USNIDeploymentStatus = 'deployed' | 'underway' | 'in-port' | 'unkno... type USNIVesselEntry (line 904) | interface USNIVesselEntry { type USNIStrikeGroup (line 919) | interface USNIStrikeGroup { type USNIFleetReport (line 927) | interface USNIFleetReport { type MilitaryVesselCluster (line 943) | interface MilitaryVesselCluster { type MilitaryActivitySummary (line 955) | interface MilitaryActivitySummary { type PizzIntDefconLevel (line 965) | type PizzIntDefconLevel = 1 | 2 | 3 | 4 | 5; type PizzIntDataFreshness (line 966) | type PizzIntDataFreshness = 'fresh' | 'stale'; type PizzIntLocation (line 968) | interface PizzIntLocation { type PizzIntStatus (line 985) | interface PizzIntStatus { type GdeltTensionPair (line 998) | interface GdeltTensionPair { type NaturalEventCategory (line 1009) | type NaturalEventCategory = constant NATURAL_EVENT_CATEGORIES (line 1024) | const NATURAL_EVENT_CATEGORIES: ReadonlySet = new ... type ForecastPoint (line 1029) | interface ForecastPoint { type PastTrackPoint (line 1037) | interface PastTrackPoint { type NaturalEvent (line 1044) | interface NaturalEvent { type InfrastructureNodeType (line 1073) | type InfrastructureNodeType = 'cable' | 'pipeline' | 'port' | 'chokepoin... type InfrastructureNode (line 1075) | interface InfrastructureNode { type DependencyType (line 1083) | type DependencyType = type DependencyEdge (line 1095) | interface DependencyEdge { type CascadeImpactLevel (line 1110) | type CascadeImpactLevel = 'critical' | 'high' | 'medium' | 'low'; type CascadeAffectedNode (line 1112) | interface CascadeAffectedNode { type CascadeCountryImpact (line 1121) | interface CascadeCountryImpact { type CascadeResult (line 1129) | interface CascadeResult { type PortType (line 1144) | type PortType = 'container' | 'oil' | 'lng' | 'naval' | 'mixed' | 'bulk'; type Port (line 1146) | interface Port { type RegulationType (line 1158) | type RegulationType = 'comprehensive' | 'sectoral' | 'voluntary' | 'prop... type ComplianceStatus (line 1159) | type ComplianceStatus = 'active' | 'proposed' | 'draft' | 'superseded'; type RegulationStance (line 1160) | type RegulationStance = 'strict' | 'moderate' | 'permissive' | 'undefined'; type AIRegulation (line 1162) | interface AIRegulation { type RegulatoryAction (line 1180) | interface RegulatoryAction { type CountryRegulationProfile (line 1192) | interface CountryRegulationProfile { type TechCompany (line 1203) | interface TechCompany { type AIResearchLab (line 1220) | interface AIResearchLab { type StartupEcosystem (line 1237) | interface StartupEcosystem { type FocalPointUrgency (line 1260) | type FocalPointUrgency = 'watch' | 'elevated' | 'critical'; type HeadlineWithUrl (line 1262) | interface HeadlineWithUrl { type EntityMention (line 1267) | interface EntityMention { type FocalPoint (line 1277) | interface FocalPoint { type FocalPointSummary (line 1303) | interface FocalPointSummary { type GulfInvestorCountry (line 1315) | type GulfInvestorCountry = 'SA' | 'UAE'; type GulfInvestmentSector (line 1317) | type GulfInvestmentSector = type GulfInvestmentStatus (line 1331) | type GulfInvestmentStatus = type GulfInvestingEntity (line 1339) | type GulfInvestingEntity = type GulfInvestment (line 1355) | interface GulfInvestment { type MapProtestCluster (line 1376) | interface MapProtestCluster { type MapTechHQCluster (line 1394) | interface MapTechHQCluster { type MapTechEventCluster (line 1410) | interface MapTechEventCluster { type MapDatacenterCluster (line 1424) | interface MapDatacenterCluster { type CountryBriefSignals (line 1441) | interface CountryBriefSignals { FILE: src/utils/analysis-constants.ts constant SIMILARITY_THRESHOLD (line 11) | const SIMILARITY_THRESHOLD = 0.5; constant STOP_WORDS (line 13) | const STOP_WORDS = new Set([ constant PREDICTION_SHIFT_THRESHOLD (line 26) | const PREDICTION_SHIFT_THRESHOLD = 5; constant MARKET_MOVE_THRESHOLD (line 27) | const MARKET_MOVE_THRESHOLD = 2; constant NEWS_VELOCITY_THRESHOLD (line 28) | const NEWS_VELOCITY_THRESHOLD = 3; constant FLOW_PRICE_THRESHOLD (line 29) | const FLOW_PRICE_THRESHOLD = 1.5; constant ENERGY_COMMODITY_SYMBOLS (line 30) | const ENERGY_COMMODITY_SYMBOLS = new Set(['CL=F', 'NG=F']); constant PIPELINE_KEYWORDS (line 32) | const PIPELINE_KEYWORDS = ['pipeline', 'pipelines', 'line', 'terminal']; constant FLOW_DROP_KEYWORDS (line 33) | const FLOW_DROP_KEYWORDS = [ constant TOPIC_KEYWORDS (line 39) | const TOPIC_KEYWORDS = [ constant SUPPRESSED_TRENDING_TERMS (line 45) | const SUPPRESSED_TRENDING_TERMS = new Set([ constant TOPIC_MAPPINGS (line 157) | const TOPIC_MAPPINGS: Record = { function tokenize (line 171) | function tokenize(text: string): Set { function jaccardSimilarity (line 180) | function jaccardSimilarity(a: Set, b: Set): number { function includesKeyword (line 187) | function includesKeyword(text: string, keywords: string[]): boolean { function escapeRegex (line 191) | function escapeRegex(value: string): string { function containsTopicKeyword (line 195) | function containsTopicKeyword(text: string, keyword: string): boolean { function findRelatedTopics (line 202) | function findRelatedTopics(prediction: string): string[] { function generateSignalId (line 215) | function generateSignalId(): string { function generateDedupeKey (line 219) | function generateDedupeKey(type: string, identifier: string, value: numb... type SignalType (line 232) | type SignalType = type SignalContext (line 248) | interface SignalContext { constant SIGNAL_CONTEXT (line 254) | const SIGNAL_CONTEXT: Record = { function getSignalContext (line 329) | function getSignalContext(type: SignalType): SignalContext { FILE: src/utils/circuit-breaker.ts type CircuitState (line 1) | interface CircuitState { type CacheEntry (line 7) | interface CacheEntry { type BreakerDataMode (line 12) | type BreakerDataMode = 'live' | 'cached' | 'unavailable'; type BreakerDataState (line 14) | interface BreakerDataState { type CircuitBreakerOptions (line 20) | interface CircuitBreakerOptions { constant DEFAULT_MAX_FAILURES (line 41) | const DEFAULT_MAX_FAILURES = 2; constant DEFAULT_COOLDOWN_MS (line 42) | const DEFAULT_COOLDOWN_MS = 5 * 60 * 1000; constant DEFAULT_CACHE_TTL_MS (line 43) | const DEFAULT_CACHE_TTL_MS = 10 * 60 * 1000; constant PERSISTENT_STALE_CEILING_MS (line 44) | const PERSISTENT_STALE_CEILING_MS = 24 * 60 * 60 * 1000; constant DEFAULT_CACHE_KEY (line 45) | const DEFAULT_CACHE_KEY = '__default__'; constant DEFAULT_MAX_CACHE_ENTRIES (line 46) | const DEFAULT_MAX_CACHE_ENTRIES = 256; function isDesktopOfflineMode (line 48) | function isDesktopOfflineMode(): boolean { class CircuitBreaker (line 54) | class CircuitBreaker { method constructor (line 70) | constructor(options: CircuitBreakerOptions) { method resolveCacheKey (line 84) | private resolveCacheKey(cacheKey?: string): string { method isStateOnCooldown (line 89) | private isStateOnCooldown(): boolean { method getPersistKey (line 98) | private getPersistKey(cacheKey: string): string { method getCacheEntry (line 104) | private getCacheEntry(cacheKey: string): CacheEntry | null { method isCacheEntryFresh (line 108) | private isCacheEntryFresh(entry: CacheEntry, now = Date.now()): boo... method touchCacheKey (line 113) | private touchCacheKey(cacheKey: string): void { method evictCacheKey (line 121) | private evictCacheKey(cacheKey: string): void { method evictOldest (line 128) | private evictOldest(): void { method evictIfNeeded (line 139) | private evictIfNeeded(): void { method hydratePersistentCache (line 146) | private hydratePersistentCache(cacheKey: string): Promise { method writePersistentCache (line 186) | private writePersistentCache(data: T, cacheKey: string): void { method deletePersistentCache (line 193) | private deletePersistentCache(cacheKey: string): void { method deleteAllPersistentCache (line 200) | private deleteAllPersistentCache(): void { method isOnCooldown (line 208) | isOnCooldown(): boolean { method getCooldownRemaining (line 212) | getCooldownRemaining(): number { method getStatus (line 217) | getStatus(): string { method getDataState (line 229) | getDataState(): BreakerDataState { method getCached (line 233) | getCached(cacheKey?: string): T | null { method getCachedOrDefault (line 243) | getCachedOrDefault(defaultValue: T, cacheKey?: string): T { method getKnownCacheKeys (line 248) | getKnownCacheKeys(): string[] { method markSuccess (line 252) | private markSuccess(timestamp: number): void { method writeCacheEntry (line 259) | private writeCacheEntry(data: T, cacheKey: string, timestamp: number):... method recordSuccess (line 270) | recordSuccess(data: T, cacheKey?: string): void { method clearCache (line 277) | clearCache(cacheKey?: string): void { method clearMemoryCache (line 299) | clearMemoryCache(cacheKey?: string): void { method recordFailure (line 310) | recordFailure(error?: string): void { method execute (line 319) | async execute( function createCircuitBreaker (line 401) | function createCircuitBreaker(options: CircuitBreakerOptions): Cir... function getCircuitBreakerStatus (line 407) | function getCircuitBreakerStatus(): Record { function isCircuitBreakerOnCooldown (line 415) | function isCircuitBreakerOnCooldown(name: string): boolean { function getCircuitBreakerCooldownInfo (line 420) | function getCircuitBreakerCooldownInfo(name: string): { onCooldown: bool... function removeCircuitBreaker (line 429) | function removeCircuitBreaker(name: string): void { function clearAllCircuitBreakers (line 433) | function clearAllCircuitBreakers(): void { FILE: src/utils/country-flag.ts function toFlagEmoji (line 1) | function toFlagEmoji(code: string, fallback = '🌍'): string { FILE: src/utils/cross-domain-storage.ts constant COOKIE_DOMAIN (line 1) | const COOKIE_DOMAIN = '.worldmonitor.app'; constant MAX_AGE_SECONDS (line 2) | const MAX_AGE_SECONDS = 365 * 24 * 60 * 60; function usesCookies (line 4) | function usesCookies(): boolean { function getDismissed (line 8) | function getDismissed(key: string): boolean { function setDismissed (line 15) | function setDismissed(key: string): void { FILE: src/utils/distance.ts function haversineKm (line 1) | function haversineKm( FILE: src/utils/dom-utils.ts type DomChild (line 2) | type DomChild = Node | string | number | null | undefined | false; type DomProps (line 5) | interface DomProps { function h (line 12) | function h( function text (line 36) | function text(value: string): Text { function fragment (line 40) | function fragment(...children: DomChild[]): DocumentFragment { function clearChildren (line 46) | function clearChildren(el: Element): void { function replaceChildren (line 50) | function replaceChildren(el: Element, ...children: DomChild[]): void { function rawHtml (line 57) | function rawHtml(html: string): DocumentFragment { constant SAFE_TAGS (line 63) | const SAFE_TAGS = new Set([ constant SAFE_ATTRS (line 66) | const SAFE_ATTRS = new Set(['class', 'href', 'target', 'rel', 'style']); constant SAFE_STYLE_RE (line 70) | const SAFE_STYLE_RE = /^color:\s*(#[0-9a-fA-F]{3,8}|rgb\(\s*\d+\s*,\s*\d... function safeHtml (line 73) | function safeHtml(html: string): DocumentFragment { function applyProps (line 115) | function applyProps(el: HTMLElement, props: DomProps): void { function appendChildren (line 146) | function appendChildren( FILE: src/utils/export.ts type ExportFormat (line 5) | type ExportFormat = 'json' | 'csv'; type ExportData (line 7) | interface ExportData { function exportToJSON (line 15) | function exportToJSON(data: ExportData, filename = 'worldmonitor-export'... function exportToCSV (line 20) | function exportToCSV(data: ExportData, filename = 'worldmonitor-export')... type CountryBriefExport (line 71) | interface CountryBriefExport { function exportCountryBriefJSON (line 84) | function exportCountryBriefJSON(data: CountryBriefExport): void { function exportCountryBriefCSV (line 89) | function exportCountryBriefCSV(data: CountryBriefExport): void { function csvRow (line 128) | function csvRow(values: string[]): string { function downloadFile (line 132) | function downloadFile(content: string, filename: string, mimeType: strin... class ExportPanel (line 144) | class ExportPanel { method constructor (line 149) | constructor(getDataFn: () => ExportData) { method setupEventListeners (line 164) | private setupEventListeners(): void { method export (line 190) | private export(format: ExportFormat): void { method getElement (line 202) | public getElement(): HTMLElement { FILE: src/utils/hash.ts function hashString (line 1) | function hashString(input: string): string { FILE: src/utils/imagery-preview.ts constant IMAGERY_PREVIEW_HOSTS (line 1) | const IMAGERY_PREVIEW_HOSTS = [ function isAllowedPreviewUrl (line 7) | function isAllowedPreviewUrl(url: string | undefined): boolean { FILE: src/utils/index.ts function formatTime (line 1) | function formatTime(date: Date): string { function formatPrice (line 22) | function formatPrice(price: number): string { function formatChange (line 35) | function formatChange(change: number): string { function getChangeClass (line 40) | function getChangeClass(change: number): string { function getHeatmapClass (line 44) | function getHeatmapClass(change: number): string { function debounce (line 53) | function debounce void>( function throttle (line 66) | function throttle void>( function rafSchedule (line 81) | function rafSchedule void>(fn: T): ((.... function loadFromStorage (line 107) | function loadFromStorage(key: string, defaultValue: T): T { function saveToStorage (line 124) | function saveToStorage(key: string, value: T): void { function generateId (line 137) | function generateId(): string { constant MOBILE_BREAKPOINT_PX (line 142) | const MOBILE_BREAKPOINT_PX = 768; function isMobileDevice (line 145) | function isMobileDevice(): boolean { function chunkArray (line 149) | function chunkArray(items: T[], size: number): T[][] { function toUniqueSorted (line 158) | function toUniqueSorted(items: string[]): string[] { function toUniqueSortedLowercase (line 162) | function toUniqueSortedLowercase(items: string[]): string[] { function shuffle (line 166) | function shuffle(arr: T[]): T[] { FILE: src/utils/keyword-match.ts type TokenizedTitle (line 1) | interface TokenizedTitle { constant INFLECTION_SUFFIXES (line 6) | const INFLECTION_SUFFIXES = new Set(['s', 'es', 'ian', 'ians', 'ean', 'e... constant MIN_SUFFIX_KEYWORD_LEN (line 7) | const MIN_SUFFIX_KEYWORD_LEN = 4; function tokenizeForMatch (line 9) | function tokenizeForMatch(title: string): TokenizedTitle { function hasSuffix (line 25) | function hasSuffix(word: string, keyword: string): boolean { function wordMatches (line 41) | function wordMatches(token: string, kwPart: string): boolean { function matchSingleWord (line 47) | function matchSingleWord(words: Set, keyword: string): boolean { function matchKeyword (line 56) | function matchKeyword(tokens: TokenizedTitle, keyword: string): boolean { function matchesAnyKeyword (line 71) | function matchesAnyKeyword(tokens: TokenizedTitle, keywords: string[]): ... function findMatchingKeywords (line 78) | function findMatchingKeywords(tokens: TokenizedTitle, keywords: string[]... FILE: src/utils/layer-warning.ts constant DISMISS_KEY (line 4) | const DISMISS_KEY = 'wm-layer-warning-dismissed'; function showLayerWarning (line 7) | function showLayerWarning(threshold: number): void { FILE: src/utils/map-locale.ts constant LANG_TO_TILE_FIELD (line 3) | const LANG_TO_TILE_FIELD: Record = { type Expression (line 27) | type Expression = [string, ...unknown[]]; type MapStyleLayer (line 29) | interface MapStyleLayer { type MapStyle (line 34) | interface MapStyle { type LocalizableMap (line 38) | interface LocalizableMap { function getLocalizedNameField (line 44) | function getLocalizedNameField(lang?: string): string { function getLocalizedNameExpression (line 49) | function getLocalizedNameExpression(lang?: string): Expression { function isLocalizableTextField (line 59) | function isLocalizableTextField(textField: unknown): boolean { function localizeMapLabels (line 80) | function localizeMapLabels(map: LocalizableMap | null | undefined): void { FILE: src/utils/news-context.ts function buildNewsContext (line 3) | function buildNewsContext(getLatestNews: () => NewsItem[], limit = 15): ... function buildNewsContextFromItems (line 9) | function buildNewsContextFromItems(items: NewsItem[], limit = 15): string { FILE: src/utils/proxy.ts constant RESPONSE_CACHE_PREFIX (line 5) | const RESPONSE_CACHE_PREFIX = 'api-response:'; constant RSS_DIRECT_TO_RELAY (line 9) | const RSS_DIRECT_TO_RELAY = import.meta.env.VITE_RSS_DIRECT_TO_RELAY ===... constant RSS_PROXY_BASE (line 10) | const RSS_PROXY_BASE = isDev constant WIDGET_RELAY_BASE (line 18) | const WIDGET_RELAY_BASE = 'https://proxy.worldmonitor.app'; function widgetAgentUrl (line 19) | function widgetAgentUrl(): string { function widgetAgentHealthUrl (line 24) | function widgetAgentHealthUrl(): string { function rssProxyUrl (line 29) | function rssProxyUrl(feedUrl: string): string { type CachedResponsePayload (line 37) | type CachedResponsePayload = { function proxyUrl (line 48) | function proxyUrl(localPath: string): string { function shouldPersistResponse (line 60) | function shouldPersistResponse(url: string): boolean { function buildResponseCacheKey (line 64) | function buildResponseCacheKey(url: string): string { function toCachedPayload (line 68) | function toCachedPayload(url: string, response: Response, body: string):... function toResponse (line 83) | function toResponse(payload: CachedResponsePayload): Response { function fetchAndPersist (line 91) | async function fetchAndPersist(url: string): Promise { function fetchWithProxy (line 104) | async function fetchWithProxy(url: string): Promise { FILE: src/utils/reverse-geocode.ts type GeoResult (line 3) | interface GeoResult { function cacheKey (line 11) | function cacheKey(lat: number, lon: number): string { constant TIMEOUT_MS (line 15) | const TIMEOUT_MS = 8000; function reverseGeocode (line 17) | async function reverseGeocode(lat: number, lon: number, signal?: AbortSi... FILE: src/utils/sanitize.ts constant HTML_ESCAPE_MAP (line 1) | const HTML_ESCAPE_MAP: Record = { function escapeHtml (line 9) | function escapeHtml(str: string): string { function sanitizeUrl (line 14) | function sanitizeUrl(url: string): string { function escapeAttr (line 46) | function escapeAttr(str: string): string { FILE: src/utils/settings-persistence.ts type ExportedSettings (line 1) | interface ExportedSettings { type ImportResult (line 8) | interface ImportResult { constant MAX_IMPORT_SIZE_BYTES (line 14) | const MAX_IMPORT_SIZE_BYTES = 5 * 1024 * 1024; constant SETTINGS_KEY_PREFIXES (line 16) | const SETTINGS_KEY_PREFIXES = [ function isSettingsKey (line 41) | function isSettingsKey(key: string): boolean { function exportSettings (line 45) | function exportSettings(): void { function importSettings (line 74) | function importSettings(file: File): Promise { FILE: src/utils/sparkline.ts function miniSparkline (line 1) | function miniSparkline(data: number[] | undefined, change: number | null... function sparkline (line 15) | function sparkline(data: number[], color: string, w: number, h: number, ... FILE: src/utils/storage-quota.ts function isStorageQuotaExceeded (line 3) | function isStorageQuotaExceeded(): boolean { function isQuotaError (line 7) | function isQuotaError(error: unknown): boolean { function markStorageQuotaExceeded (line 11) | function markStorageQuotaExceeded(): void { FILE: src/utils/summary-cache-key.ts constant CACHE_VERSION (line 7) | const CACHE_VERSION = 'v5'; constant MAX_HEADLINE_LEN (line 9) | const MAX_HEADLINE_LEN = 500; constant MAX_HEADLINES_FOR_KEY (line 10) | const MAX_HEADLINES_FOR_KEY = 5; constant MAX_GEO_CONTEXT_LEN (line 11) | const MAX_GEO_CONTEXT_LEN = 2000; function canonicalizeSummaryInputs (line 13) | function canonicalizeSummaryInputs(headlines: string[], geoContext?: str... function buildSummaryCacheKey (line 20) | function buildSummaryCacheKey( FILE: src/utils/theme-colors.ts function getCSSColor (line 10) | function getCSSColor(varName: string): string { function invalidateColorCache (line 28) | function invalidateColorCache(): void { FILE: src/utils/theme-manager.ts type Theme (line 3) | type Theme = 'dark' | 'light'; type ThemePreference (line 4) | type ThemePreference = 'auto' | 'dark' | 'light'; constant STORAGE_KEY (line 6) | const STORAGE_KEY = 'worldmonitor-theme'; constant DEFAULT_THEME (line 7) | const DEFAULT_THEME: Theme = 'dark'; function resolveThemeColor (line 9) | function resolveThemeColor(theme: Theme, variant: string | undefined): s... function updateThemeMetaColor (line 14) | function updateThemeMetaColor(theme: Theme, variant = document.documentE... function getStoredTheme (line 23) | function getStoredTheme(): Theme { function getThemePreference (line 33) | function getThemePreference(): ThemePreference { function resolveAutoTheme (line 41) | function resolveAutoTheme(): Theme { function teardownAutoListener (line 51) | function teardownAutoListener(): void { function setThemePreference (line 59) | function setThemePreference(pref: ThemePreference): void { function getCurrentTheme (line 74) | function getCurrentTheme(): Theme { function setTheme (line 84) | function setTheme(theme: Theme): void { function applyStoredTheme (line 104) | function applyStoredTheme(): void { FILE: src/utils/transit-chart.ts type TransitPoint (line 3) | interface TransitPoint { constant MAX_DAYS (line 9) | const MAX_DAYS = 60; constant PAD (line 10) | const PAD = { top: 12, right: 36, bottom: 22, left: 4 }; constant GRID_LINES (line 11) | const GRID_LINES = 4; class TransitChart (line 13) | class TransitChart { method mount (line 21) | mount(container: HTMLElement, history: TransitPoint[]): void { method destroy (line 62) | destroy(): void { method colors (line 82) | private colors() { method metrics (line 92) | private metrics() { FILE: src/utils/urlState.ts constant LAYER_KEYS (line 4) | const LAYER_KEYS: (keyof MapLayers)[] = [ constant TIME_RANGES (line 42) | const TIME_RANGES: TimeRange[] = ['1h', '6h', '24h', '48h', '7d', 'all']; constant VIEW_VALUES (line 43) | const VIEW_VALUES: MapView[] = ['global', 'america', 'mena', 'eu', 'asia... type ParsedMapUrlState (line 45) | interface ParsedMapUrlState { function parseMapUrlState (line 79) | function parseMapUrlState( function buildMapUrl (line 135) | function buildMapUrl( FILE: src/utils/user-location.ts type MapView (line 3) | type MapView = 'global' | 'america' | 'mena' | 'eu' | 'asia' | 'latam' |... constant ASIA_EAST_TIMEZONES (line 5) | const ASIA_EAST_TIMEZONES = new Set([ function timezoneToRegion (line 10) | function timezoneToRegion(tz: string): MapView | null { function coordsToRegion (line 32) | function coordsToRegion(lat: number, lon: number): MapView { function getGeolocationPosition (line 43) | function getGeolocationPosition(timeout: number): Promise = { function resolveCountryCodeInternal (line 83) | async function resolveCountryCodeInternal(): Promise { function resolveUserCountryCode (line 102) | function resolveUserCountryCode(): Promise { type PreciseCoordinates (line 107) | interface PreciseCoordinates { constant SESSION_KEY_COORDS (line 112) | const SESSION_KEY_COORDS = 'wm-geo-coords'; constant SESSION_KEY_REGION (line 113) | const SESSION_KEY_REGION = 'wm-geo-region'; function getCachedCoords (line 115) | function getCachedCoords(): PreciseCoordinates | null { function cacheCoords (line 125) | function cacheCoords(coords: PreciseCoordinates): void { function getCachedRegion (line 129) | function getCachedRegion(): MapView | null { function cacheRegion (line 137) | function cacheRegion(region: MapView): void { function resolvePreciseUserCoordinates (line 141) | function resolvePreciseUserCoordinates(timeout = 5000): Promise { FILE: src/utils/utm.ts constant UTM_SOURCE (line 1) | const UTM_SOURCE = 'worldmonitor'; constant UTM_MEDIUM (line 2) | const UTM_MEDIUM = 'referral'; function isExternalUrl (line 4) | function isExternalUrl(url: string): boolean { function detectCampaign (line 13) | function detectCampaign(anchor: HTMLElement): string { function appendUtmParams (line 26) | function appendUtmParams(url: string, campaign: string): string { function installUtmInterceptor (line 39) | function installUtmInterceptor(): void { FILE: src/utils/widget-sanitizer.ts constant PURIFY_CONFIG (line 3) | const PURIFY_CONFIG = { constant UNSAFE_STYLE_PATTERN (line 21) | const UNSAFE_STYLE_PATTERN = /url\s*\(|expression\s*\(|javascript\s*:|@i... function sanitizeWidgetHtml (line 29) | function sanitizeWidgetHtml(html: string): string { function wrapWidgetHtml (line 33) | function wrapWidgetHtml(html: string, extraClass = ''): string { function escapeSrcdoc (line 44) | function escapeSrcdoc(str: string): string { function wrapProWidgetHtml (line 50) | function wrapProWidgetHtml(bodyContent: string): string { FILE: src/vite-env.d.ts type ImportMetaEnv (line 5) | interface ImportMetaEnv { type ImportMeta (line 10) | interface ImportMeta { FILE: src/workers/analysis.worker.ts type ClusterMessage (line 22) | interface ClusterMessage { type CorrelationMessage (line 29) | interface CorrelationMessage { type ResetMessage (line 38) | interface ResetMessage { type WorkerMessage (line 42) | type WorkerMessage = ClusterMessage | CorrelationMessage | ResetMessage; type ClusterResult (line 44) | interface ClusterResult { type CorrelationResult (line 50) | interface CorrelationResult { function isRecentDuplicate (line 60) | function isRecentDuplicate(key: string): boolean { function markSignalSeen (line 64) | function markSignalSeen(key: string): void { FILE: src/workers/ml.worker.ts type InitMessage (line 15) | interface InitMessage { type LoadModelMessage (line 20) | interface LoadModelMessage { type UnloadModelMessage (line 26) | interface UnloadModelMessage { type EmbedMessage (line 32) | interface EmbedMessage { type SummarizeMessage (line 38) | interface SummarizeMessage { type SentimentMessage (line 45) | interface SentimentMessage { type NERMessage (line 51) | interface NERMessage { type SemanticClusterMessage (line 57) | interface SemanticClusterMessage { type StatusMessage (line 64) | interface StatusMessage { type ResetMessage (line 69) | interface ResetMessage { type VectorStoreIngestMessage (line 73) | interface VectorStoreIngestMessage { type VectorStoreSearchMessage (line 85) | interface VectorStoreSearchMessage { type VectorStoreCountMessage (line 93) | interface VectorStoreCountMessage { type VectorStoreResetMessage (line 98) | interface VectorStoreResetMessage { type MLWorkerMessage (line 103) | type MLWorkerMessage = function getModelConfig (line 124) | function getModelConfig(modelId: string): ModelConfig | undefined { function loadModel (line 128) | async function loadModel(modelId: string): Promise { function unloadModel (line 171) | function unloadModel(modelId: string): void { function embedTexts (line 179) | async function embedTexts(texts: string[]): Promise { function summarizeTexts (line 192) | async function summarizeTexts(texts: string[], modelId = 'summarization'... function classifySentiment (line 209) | async function classifySentiment(texts: string[]): Promise { function cosineSimilarity (line 262) | function cosineSimilarity(a: number[], b: number[]): number { function cosineSimilarityF32 (line 279) | function cosineSimilarityF32(a: Float32Array, b: Float32Array): number { function semanticCluster (line 292) | function semanticCluster( FILE: src/workers/vector-db.ts constant DB_NAME (line 3) | const DB_NAME = 'worldmonitor_vector_store'; constant DB_VERSION (line 4) | const DB_VERSION = 1; constant STORE_NAME (line 5) | const STORE_NAME = 'embeddings'; constant MAX_VECTORS (line 6) | const MAX_VECTORS = 5000; type StoredVector (line 8) | interface StoredVector { type VectorSearchResult (line 19) | interface VectorSearchResult { function enqueue (line 29) | function enqueue(fn: () => Promise): Promise { function openDB (line 35) | function openDB(): Promise { function sanitizeTitle (line 56) | function sanitizeTitle(text: string): string { function makeVectorId (line 60) | function makeVectorId(source: string, url: string, pubDate: number, text... function storeVectors (line 64) | function storeVectors( function searchVectors (line 133) | function searchVectors( function getCount (line 182) | function getCount(): Promise { function closeDB (line 194) | function closeDB(): Promise { function resetStore (line 203) | function resetStore(): Promise { FILE: tests/bootstrap.test.mjs function walk (line 88) | function walk(dir) { function walk (line 245) | function walk(dir) { function extractSetKeys (line 271) | function extractSetKeys(src, varName) { function extractBootstrapKeys (line 278) | function extractBootstrapKeys(src) { function extractTierKeys (line 284) | function extractTierKeys(src) { FILE: tests/contact-handler.test.mjs function makeRequest (line 7) | function makeRequest(body, opts = {}) { function validBody (line 19) | function validBody(overrides = {}) { FILE: tests/countries-geojson.test.mjs constant COUNTRY_GEOJSON_URL (line 4) | const COUNTRY_GEOJSON_URL = 'https://maps.worldmonitor.app/countries.geo... FILE: tests/deckgl-layer-state-aliasing.test.mjs function copyInitialState (line 15) | function copyInitialState(initialState) { function copyLayers (line 23) | function copyLayers(layers) { function copyStateForExport (line 27) | function copyStateForExport(state) { function makeState (line 37) | function makeState() { FILE: tests/download-handler.test.mjs constant RELEASES_PAGE (line 5) | const RELEASES_PAGE = 'https://github.com/koala73/worldmonitor/releases/... function makeGitHubReleaseResponse (line 7) | function makeGitHubReleaseResponse(assets) { FILE: tests/flush-stale-refreshes.test.mjs function extractMethodBody (line 19) | function extractMethodBody(source, methodName) { function stripTSAnnotations (line 111) | function stripTSAnnotations(src) { function buildFlushStaleRefreshes (line 116) | function buildFlushStaleRefreshes(timers) { function createContext (line 132) | function createContext() { function createFakeTimers (line 140) | function createFakeTimers(startMs = 1_000_000) { FILE: tests/freight-indices.test.mjs function parseBDIFromHtml (line 21) | function parseBDIFromHtml(html) { function parseSSEResponse (line 62) | function parseSSEResponse(json, indexId, dataItemType, displayName, unit) { constant SCFI_FIXTURE (line 80) | const SCFI_FIXTURE = { constant CCFI_FIXTURE (line 104) | const CCFI_FIXTURE = { constant BDI_HTML_INCREASED (line 165) | const BDI_HTML_INCREASED = ` constant BDI_HTML_UNCHANGED (line 173) | const BDI_HTML_UNCHANGED = ` constant BDI_HTML_PARTIAL (line 177) | const BDI_HTML_PARTIAL = ` FILE: tests/globe-tooltip-enrichment.test.mjs function headingToCompass (line 27) | function headingToCompass(heading) { FILE: tests/gulf-fdi-data.test.mjs function loadGulfInvestments (line 10) | function loadGulfInvestments() { constant GULF_INVESTMENTS (line 27) | const GULF_INVESTMENTS = loadGulfInvestments(); constant VALID_COUNTRIES (line 29) | const VALID_COUNTRIES = new Set(['SA', 'UAE']); constant VALID_SECTORS (line 30) | const VALID_SECTORS = new Set([ constant VALID_STATUSES (line 44) | const VALID_STATUSES = new Set([ FILE: tests/helpers/llm-health-stub.ts function isProviderAvailable (line 1) | async function isProviderAvailable(): Promise { FILE: tests/helpers/runtime-config-panel-harness.mjs class MiniClassList (line 11) | class MiniClassList { method constructor (line 12) | constructor() { method add (line 16) | add(...tokens) { method remove (line 20) | remove(...tokens) { method contains (line 24) | contains(token) { method toggle (line 28) | toggle(token, force) { method setFromString (line 45) | setFromString(value) { method toString (line 49) | toString() { class MiniNode (line 54) | class MiniNode extends EventTarget { method constructor (line 55) | constructor() { method appendChild (line 62) | appendChild(child) { method removeChild (line 77) | removeChild(child) { method insertBefore (line 87) | insertBefore(child, referenceNode) { method firstChild (line 104) | get firstChild() { method lastChild (line 108) | get lastChild() { method textContent (line 112) | get textContent() { method textContent (line 116) | set textContent(value) { class MiniText (line 121) | class MiniText extends MiniNode { method constructor (line 122) | constructor(value) { method textContent (line 127) | get textContent() { method textContent (line 131) | set textContent(value) { method outerHTML (line 135) | get outerHTML() { class MiniDocumentFragment (line 140) | class MiniDocumentFragment extends MiniNode { method outerHTML (line 141) | get outerHTML() { class MiniElement (line 146) | class MiniElement extends MiniNode { method constructor (line 147) | constructor(tagName) { method className (line 160) | get className() { method className (line 164) | set className(value) { method innerHTML (line 168) | get innerHTML() { method innerHTML (line 173) | set innerHTML(value) { method appendChild (line 178) | appendChild(child) { method insertBefore (line 183) | insertBefore(child, referenceNode) { method removeChild (line 188) | removeChild(child) { method setAttribute (line 193) | setAttribute(name, value) { method getAttribute (line 210) | getAttribute(name) { method hasAttribute (line 214) | hasAttribute(name) { method removeAttribute (line 218) | removeAttribute(name) { method querySelector (line 223) | querySelector() { method querySelectorAll (line 227) | querySelectorAll() { method closest (line 231) | closest() { method remove (line 235) | remove() { method getBoundingClientRect (line 241) | getBoundingClientRect() { method nextElementSibling (line 245) | get nextElementSibling() { method isConnected (line 252) | get isConnected() { method outerHTML (line 263) | get outerHTML() { class MiniStorage (line 268) | class MiniStorage { method constructor (line 269) | constructor() { method getItem (line 273) | getItem(key) { method setItem (line 277) | setItem(key, value) { method removeItem (line 281) | removeItem(key) { method clear (line 285) | clear() { class MiniDocument (line 290) | class MiniDocument extends EventTarget { method constructor (line 291) | constructor() { method createElement (line 300) | createElement(tagName) { method createTextNode (line 304) | createTextNode(value) { method createDocumentFragment (line 308) | createDocumentFragment() { function createBrowserEnvironment (line 313) | function createBrowserEnvironment() { function snapshotGlobal (line 345) | function snapshotGlobal(name) { function restoreGlobal (line 352) | function restoreGlobal(name, snapshot) { function createRuntimeState (line 360) | function createRuntimeState() { function loadRuntimeConfigPanel (line 369) | async function loadRuntimeConfigPanel() { function createRuntimeConfigPanelHarness (line 541) | async function createRuntimeConfigPanelHarness() { FILE: tests/insights-loader.test.mjs function isFresh (line 8) | function isFresh(generatedAt) { FILE: tests/market-quote-cache-keying.test.mjs constant CIRCUIT_BREAKER_URL (line 19) | const CIRCUIT_BREAKER_URL = pathToFileURL( function emptyMarketFallback (line 23) | function emptyMarketFallback() { function quoteResponse (line 27) | function quoteResponse(symbol, price) { FILE: tests/market-service-symbol-casing.test.mjs constant MARKET_SERVICE_URL (line 8) | const MARKET_SERVICE_URL = pathToFileURL(resolve(root, 'src/services/mar... constant CIRCUIT_BREAKER_URL (line 9) | const CIRCUIT_BREAKER_URL = pathToFileURL(resolve(root, 'src/utils/circu... function freshImportUrl (line 11) | function freshImportUrl(url) { function overrideGlobal (line 15) | function overrideGlobal(name, value) { function installBrowserEnv (line 28) | function installBrowserEnv() { function getRequestUrl (line 49) | function getRequestUrl(input) { function quote (line 55) | function quote(symbol, price) { function marketResponse (line 66) | function marketResponse(quotes) { FILE: tests/mdx-lint.test.mjs constant DOCS_DIR (line 18) | const DOCS_DIR = new URL('../docs/', import.meta.url).pathname; function isIgnored (line 29) | function isIgnored(filename) { function stripCode (line 41) | function stripCode(content) { function findBareAngleBrackets (line 63) | function findBareAngleBrackets(lines) { function findBareCurlyBraces (line 75) | function findBareCurlyBraces(lines) { FILE: tests/military-classification.test.mjs function extractArray (line 18) | function extractArray(src, name) { constant MILITARY_PREFIXES (line 26) | const MILITARY_PREFIXES = extractArray(sharedSrc, 'MILITARY_PREFIXES'); constant SHORT_MILITARY_PREFIXES (line 27) | const SHORT_MILITARY_PREFIXES = extractArray(sharedSrc, 'SHORT_MILITARY_... constant AIRLINE_CODES (line 28) | const AIRLINE_CODES = new Set(extractArray(sharedSrc, 'AIRLINE_CODES')); function isMilitaryCallsign (line 30) | function isMilitaryCallsign(callsign) { function extractHexRanges (line 52) | function extractHexRanges(src) { constant HEX_RANGES (line 62) | const HEX_RANGES = extractHexRanges(clientSrc); function isKnownMilitaryHex (line 64) | function isKnownMilitaryHex(hexCode) { FILE: tests/military-flight-classification.test.mjs function makeState (line 12) | function makeState({ FILE: tests/military-surges.test.mjs constant TEST_THEATERS (line 6) | const TEST_THEATERS = [ FILE: tests/oref-breaking.test.mjs constant SRC (line 8) | const SRC = readFileSync(join(__dirname, '..', 'src', 'services', 'break... FILE: tests/oref-locations.test.mjs constant SRC (line 8) | const SRC = readFileSync(join(__dirname, '..', 'src', 'services', 'oref-... FILE: tests/oref-proxy.test.mjs constant OREF_PROXY_AUTH (line 16) | const OREF_PROXY_AUTH = process.env.OREF_PROXY_AUTH || ''; constant OREF_ALERTS_URL (line 17) | const OREF_ALERTS_URL = 'https://www.oref.org.il/WarningMessages/alert/a... function stripBom (line 19) | function stripBom(text) { function orefCurlFetch (line 23) | function orefCurlFetch(proxyAuth, url) { function runTests (line 31) | async function runTests() { FILE: tests/panel-config-guardrails.test.mjs constant VARIANT_FILES (line 10) | const VARIANT_FILES = ['full', 'tech', 'finance', 'commodity', 'happy']; function parsePanelKeys (line 12) | function parsePanelKeys(variant) { function levenshtein (line 99) | function levenshtein(a, b) { FILE: tests/portwatch-upstream.test.mjs function classifyVesselType (line 12) | function classifyVesselType(name) { function computeWowChangePct (line 19) | function computeWowChangePct(history) { function makeDays (line 30) | function makeDays(count, dailyTotal, startOffset) { FILE: tests/prediction-scoring.test.mjs function market (line 18) | function market(title, yesPrice, volume, opts = {}) { function genMarkets (line 246) | function genMarkets(n, overrides = {}) { FILE: tests/redis-caching.test.mjs constant REDIS_MODULE_URL (line 11) | const REDIS_MODULE_URL = pathToFileURL(resolve(root, 'server/_shared/red... function jsonResponse (line 13) | function jsonResponse(payload, ok = true) { function withEnv (line 22) | function withEnv(overrides) { function importRedisFresh (line 43) | async function importRedisFresh() { function importPatchedTsModule (line 47) | async function importPatchedTsModule(relPath, replacements) { function importTheaterPosture (line 449) | async function importTheaterPosture() { function mockOpenSkyResponse (line 457) | function mockOpenSkyResponse() { function importCountryIntelBrief (line 618) | async function importCountryIntelBrief() { function parseRedisKey (line 629) | function parseRedisKey(rawUrl, op) { function makeCtx (line 636) | function makeCtx(url) { function importListMilitaryFlights (line 765) | async function importListMilitaryFlights() { FILE: tests/relay-helper.test.mjs function restoreEnv (line 7) | function restoreEnv() { function makeRequest (line 19) | function makeRequest(url, opts = {}) { function mockFetch (line 29) | function mockFetch(handler) { function mockFetchOk (line 33) | function mockFetchOk(body = '{"ok":true}', headers = {}) { function mockFetchStatus (line 40) | function mockFetchStatus(status, body = '{"error":"upstream"}') { function mockFetchError (line 47) | function mockFetchError(message = 'Network error') { FILE: tests/route-cache-tier.test.mjs function extractGetRoutes (line 10) | function extractGetRoutes() { function extractCacheTierKeys (line 40) | function extractCacheTierKeys() { FILE: tests/sanctions-seed-unit.test.mjs function normalize (line 8) | function normalize(v) { class XMLParser (line 26) | class XMLParser { parse() { return {}; } } method parse (line 26) | parse() { return {}; } FILE: tests/seed-warm-ping-origin.test.mjs function readScript (line 10) | function readScript(relativePath) { FILE: tests/smart-poll-loop.test.mjs function stripTS (line 10) | function stripTS(src) { function extractBody (line 34) | function extractBody(source, funcName) { function createFakeTimers (line 67) | function createFakeTimers(startMs = 1_000_000) { function buildSmartPollLoop (line 126) | function buildSmartPollLoop(timers, docMock) { function createDocMock (line 151) | function createDocMock(hidden = false) { method subscribe (line 593) | subscribe(cb) { method subscribe (line 617) | subscribe(cb) { function buildVisibilityHub (line 641) | function buildVisibilityHub(doc) { FILE: tests/summarize-reasoning.test.mjs function extractRegex (line 115) | function extractRegex(source, name) { function hasReasoningPreamble (line 128) | function hasReasoningPreamble(text) { FILE: tests/tech-readiness-circuit-breakers.test.mjs function loadEconomicSourceFile (line 33) | function loadEconomicSourceFile() { function walk (line 43) | function walk(node, visit) { function findVariableDeclaration (line 48) | function findVariableDeclaration(sourceFile, name) { function findFunctionDeclaration (line 60) | function findFunctionDeclaration(sourceFile, name) { function collectCallExpressions (line 66) | function collectCallExpressions(node) { function findPropertyAssignment (line 74) | function findPropertyAssignment(node, name) { function isIdentifierNamed (line 83) | function isIdentifierNamed(node, name) { function isStringLiteralValue (line 87) | function isStringLiteralValue(node, value) { function getTechIndicatorKeys (line 91) | function getTechIndicatorKeys(sourceFile) { function getCreateCircuitBreakerNameInitializer (line 105) | function getCreateCircuitBreakerNameInitializer(fn) { FILE: tests/thermal-escalation-model.test.mjs function makeDetection (line 10) | function makeDetection(id, lat, lon, detectedAt, overrides = {}) { FILE: tests/transit-summaries.test.mjs function makeDays (line 17) | function makeDays(count, dailyTotal, startOffset) { function deriveRiskLevel (line 147) | function deriveRiskLevel(score) { FILE: tests/variant-layer-guardrail.test.mjs constant SRC (line 13) | const SRC = new URL('../src/config/', import.meta.url); function extractRecordBlock (line 18) | function extractRecordBlock(source, name) { function extractLayerRenderers (line 33) | function extractLayerRenderers(source) { function extractEnabledLayers (line 54) | function extractEnabledLayers(source, constName) { function getAllowedForVariant (line 71) | function getAllowedForVariant(variant) { constant VARIANT_DEFAULTS (line 77) | const VARIANT_DEFAULTS = { FILE: tests/widget-builder.test.mjs function src (line 22) | function src(relPath) { FILE: vite.config.ts constant BROTLI_EXTENSIONS (line 14) | const BROTLI_EXTENSIONS = new Set(['.js', '.mjs', '.css', '.html', '.svg... function brotliPrecompressPlugin (line 16) | function brotliPrecompressPlugin(): Plugin { function htmlVariantPlugin (line 41) | function htmlVariantPlugin(activeMeta: VariantMeta, activeVariant: strin... function polymarketPlugin (line 113) | function polymarketPlugin(): Plugin { function sebufApiPlugin (line 167) | function sebufApiPlugin(): Plugin { constant RSS_PROXY_ALLOWED_DOMAINS (line 397) | const RSS_PROXY_ALLOWED_DOMAINS = new Set([ function rssProxyPlugin (line 451) | function rssProxyPlugin(): Plugin { function youtubeLivePlugin (line 509) | function youtubeLivePlugin(): Plugin { function gpsjamDevPlugin (line 575) | function gpsjamDevPlugin(): Plugin { method onwarn (line 772) | onwarn(warning, warn) { method manualChunks (line 791) | manualChunks(id) {