mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-12 14:22:21 +00:00
DATA LAYERS keeps its curated core layers; regional and niche sources live in the Data Library, opened from Browse data library at the foot of the panel. Each entry is a JSON manifest in src/library/entries/ pointing at a live upstream (query API, provider-hosted file or tile endpoint), so nothing is bundled and a self-hosted instance hosts no data. Sources without CORS go through one allowlisted /api/library route. Kinds: dataset (GeoJSON, CSV, JSON records, ArcGIS, partitioned GeoParquet), tiles (XYZ, WMS/ArcGIS bbox export, terrarium relief) and pack. Selections persist and travel in share links as lib=, separate from the core layer tokens. Library rows get Zoom and Remove icon chips that work while the layer is off, rendered through RailChips. Strings are translated in every locale.
145 lines
6.0 KiB
JavaScript
145 lines
6.0 KiB
JavaScript
import path from 'node:path';
|
|
import { openSkyProxy } from './aircraft/opensky.js';
|
|
import { celestrakProxy, rocketLaunchesProxy } from './space.js';
|
|
import { tomtomProxy } from './traffic.js';
|
|
import { firmsProxy } from './firms.js';
|
|
import { terrainHeightsProxy } from './terrain.js';
|
|
import { adsbdbProxy } from './aircraft/enrichment.js';
|
|
import { overpassProxy } from './overpass.js';
|
|
import { militaryInstallationsProxy } from './military-installations.js';
|
|
import { regionalBriefProxy } from './regional/briefing.js';
|
|
import { geocodeProxy, NOMINATIM_CACHE_DIR } from './regional/place.js';
|
|
import { weatherEffectsProxy } from './regional/weather-effects.js';
|
|
import { cctvProxy } from './cctv.js';
|
|
import { defaultSourceRoot } from './common/source-root.js';
|
|
import { radioBrowserProxy } from './radio.js';
|
|
import { gbfsProxy } from './gbfs.js';
|
|
import { localReceiversProxy } from './local-receivers.js';
|
|
import { transitProxy } from './transit.js';
|
|
import { railProxy } from './rail.js';
|
|
import { adsbLolProxy } from './aircraft/adsb-lol.js';
|
|
import { aisLiveProxy } from './vessels/ais-live.js';
|
|
import { trackBackfillProxies } from './aircraft/tracks.js';
|
|
import { openAiRealtimeProxy } from './openai.js';
|
|
import { geminiLiveProxy } from './gemini.js';
|
|
import { googlePlacesContextProxy } from './places.js';
|
|
import { mapillaryProxy } from './mapillary.js';
|
|
import { keySetupEndpoint } from '../standalone/key-setup.js';
|
|
import { weatherProxy } from './weather.js';
|
|
import { firePerimetersProxy } from './firePerimeters.js';
|
|
import { gnssIntegrityProxy } from './gnssIntegrity.js';
|
|
import { ghostMapsProxy } from './ghostMaps.js';
|
|
import { shipwrecksProxy } from './shipwrecks.js';
|
|
import { droneAirspaceProxy } from './droneAirspace.js';
|
|
import { newsProxy } from './news.js';
|
|
import { inaturalistProxy } from './inaturalist/observations.js';
|
|
import { acartiaProxy } from './acartia.js';
|
|
import { cycloneProxy } from './cyclones.js';
|
|
import { windProxy } from './wind.js';
|
|
import { libraryProxy } from './library.js';
|
|
|
|
/**
|
|
* Construct the local provider plugins in their established order.
|
|
* `realtime` configures OpenAI; `gemini` explicitly opts into Gemini Live.
|
|
* `nominatimStorageDir` binds an owned absolute directory before construction;
|
|
* omission retains the durable per-source cache and policy state.
|
|
*/
|
|
function localProviderPlugins({
|
|
realtime,
|
|
gemini,
|
|
nominatimStorageDir = NOMINATIM_CACHE_DIR,
|
|
} = {}) {
|
|
if (
|
|
typeof nominatimStorageDir !== 'string' ||
|
|
!nominatimStorageDir.trim() ||
|
|
!path.isAbsolute(nominatimStorageDir)
|
|
)
|
|
throw new TypeError('nominatimStorageDir must be an absolute directory');
|
|
return [
|
|
openSkyProxy(),
|
|
celestrakProxy(),
|
|
tomtomProxy(),
|
|
firmsProxy(),
|
|
rocketLaunchesProxy(),
|
|
terrainHeightsProxy(),
|
|
adsbdbProxy(),
|
|
overpassProxy(),
|
|
militaryInstallationsProxy(),
|
|
regionalBriefProxy(),
|
|
geocodeProxy({ storageDir: nominatimStorageDir }),
|
|
weatherEffectsProxy(),
|
|
cctvProxy({ sourceRoot: defaultSourceRoot }),
|
|
radioBrowserProxy(),
|
|
gbfsProxy(),
|
|
localReceiversProxy(),
|
|
transitProxy(),
|
|
railProxy(),
|
|
adsbLolProxy(),
|
|
aisLiveProxy(),
|
|
trackBackfillProxies(),
|
|
openAiRealtimeProxy({ realtime }),
|
|
...(gemini ? [geminiLiveProxy({ realtime: gemini })] : []),
|
|
googlePlacesContextProxy(),
|
|
windProxy(),
|
|
weatherProxy(),
|
|
cycloneProxy(),
|
|
mapillaryProxy(),
|
|
firePerimetersProxy(),
|
|
gnssIntegrityProxy(),
|
|
libraryProxy(),
|
|
ghostMapsProxy(),
|
|
shipwrecksProxy(),
|
|
droneAirspaceProxy(),
|
|
newsProxy(),
|
|
inaturalistProxy(),
|
|
acartiaProxy(),
|
|
keySetupEndpoint(),
|
|
];
|
|
}
|
|
|
|
export { localProviderPlugins };
|
|
|
|
export {
|
|
CCTV_FRAME_FETCH_TIMEOUT_MS,
|
|
fetchCctvImageFromUpstream,
|
|
} from './cctv.js';
|
|
export {
|
|
createRadioProxyMiddleware,
|
|
isPublicRadioAddress,
|
|
normalizeRadioBrowserStation,
|
|
publicRadioStation,
|
|
publicRadioHttpsUrl,
|
|
} from './radio.js';
|
|
export { LL2_CACHE_TTL_MS, launchLibraryRequestHeaders } from './space.js';
|
|
export { googlePlacesContextProxy } from './places.js';
|
|
export { googleServerApiKey } from './places.js';
|
|
export { keylessGooglePlacesResponse } from './places.js';
|
|
export { keylessGoogleGeocodeResponse } from './places.js';
|
|
export { validateGeocodeAddress } from './places.js';
|
|
export { geocodeBounds } from './places.js';
|
|
export { adsbLolFallbackAnchor } from './aircraft/opensky.js';
|
|
export { readResponseTextCapped } from './common/http.js';
|
|
export { readResponseJsonCapped } from './common/http.js';
|
|
export { coalesceProxyRequest } from './common/http.js';
|
|
export { requiredFiniteQueryNumber } from './common/query.js';
|
|
export { isOverpassBoundaryQuery } from './overpass/query.js';
|
|
export { simplifyOverpassPayloadBody } from './overpass/geometry.js';
|
|
export { readOverpassDisk } from './overpass/cache.js';
|
|
export { resolveOverpassPreflight } from './overpass/cache.js';
|
|
export { overpassPayloadIsData } from './overpass/transport.js';
|
|
export { fetchOverpassPayload } from './overpass/transport.js';
|
|
export { openAiRealtimeProxy } from './openai.js';
|
|
export { MILITARY_INSTALLATION_ELEMENT_CAP } from './military-installations/constants.js';
|
|
export { quantizeMilitaryInstallationBox } from './military-installations/query.js';
|
|
export { militaryInstallationCacheKey } from './military-installations/query.js';
|
|
export { resolveMilitaryInstallationTier } from './military-installations/cache.js';
|
|
export { migrateMilitaryInstallationEntry } from './military-installations/cache.js';
|
|
export { militaryInstallationDiskFresh } from './military-installations/cache.js';
|
|
export { militaryInstallationDiskPath } from './military-installations/cache.js';
|
|
export { readMilitaryInstallationDisk } from './military-installations/cache.js';
|
|
export { writeMilitaryInstallationDisk } from './military-installations/cache.js';
|
|
export { validMilitaryInstallationBox } from './military-installations/query.js';
|
|
export { militaryInstallationFailureReason } from './military-installations/query.js';
|
|
export { validRegionalPoint } from './regional/query.js';
|
|
export { regionalBriefHasAnySource } from './regional/briefing.js';
|