LocalStorage Schema - msupino/NavigationApp GitHub Wiki

๐Ÿ‡ฎ๐Ÿ‡ฑ ืขื‘ืจื™ืช

Local storage schema

All application-owned browser keys use the navaid.* prefix. This page is a human-readable map; the complete enforceable registry is GDRIVE_SETTINGS_KEYS plus NOT_A_SYNCED_SETTING in tests/settings-sync-allowlist.spec.js, which scans current app source.

Main families

  • navaid.route, navaid.routes, navaid.view, navaid.layer โ€” working route/library and map state. Not the language: nothing stores one any more, and a navaid.lang left by an older version is ignored โ€” see Bilingual UI.
  • navaid.show*, opacity/size/color keys, navaid.navDataPrefix, navaid.imsPwx, navaid.sigwxOv, navaid.wxTime, and wind-field keys โ€” active layer/display choices.
  • navaid.etd โ€” the planned departure {date, time}, local, shared by the flight plan and the filing dialog. Device-local: a fact about one flight, not a setting. navaid.etaZulu โ€” show times in UTC (synced).
  • navaid.fpl.<field>, navaid.aircraft, navaid.profileVS โ€” flight-plan and aircraft profile values. aisEmail is device-local because it controls the filing destination; the user's replyTo may sync. The checkbox says so in place: ticking Sync settings too names the pilot details (name, licence, phone) and aircraft profile it uploads, since "settings" otherwise reads as layers and opacities.
  • navaid.ai.* โ€” provider/model/key/base URL. Provider and model choices may sync when Sync settings too is enabled. API keys and the base URL stay device-local. A successful settings sync removes any API-key copy left in Drive by an older version โ€” see AI Assistant.
  • navaid.*Pos, navaid.sec.*, collapse/hint/search state โ€” device-local UI geometry and one-time presentation state. Language-specific widgets use families such as navaid.clockPos.<lang>.
  • navaid.settingsSyncedAt, navaid.settingsSnapshot, navaid.settingsSnapKeys, navaid.syncSettings โ€” settings-sync bookkeeping.
  • navaid.gistCache โ€” the last remote config seen on this device, applied at boot so the first frame is already configured (see Tuning Panel). Device-local: it is a copy of a remote file, refetched on every load.
  • navaid.magVarAuto, navaid.magVarManual โ€” magnetic variation: automatic (World Magnetic Model) or the manual value, signed as the app uses it (magnetic = true + value, so -5 is 5ยฐE). They outrank the gist, like navaid.defaultSpeed, and sync with Sync settings too.
  • navaid.pressureUnit โ€” inHg or hPa. Synced with the other pilot settings.
  • navaid.altSource, navaid.brightness โ€” altitude from GPS or barometer, and screen brightness. Device-local: whether a phone has a usable barometer, and how bright its screen should be in this cockpit, are facts about that phone.
  • navaid.offlinePacks โ€” which charts and OpenFlightMaps areas this device keeps offline. Device-local: it describes storage on this device.
  • navaid.commFail โ€” a comm failure in progress, with the route from before it, so it survives a reload or language switch. Device-local, cleared when it ends.
  • navaid.headingUp, navaid.gpsFollow โ€” the in-flight map controls (heading-up orientation, follow lock). Per device, like the rest of the map state.
  • navaid.followMeSession, navaid.followMeCode โ€” the live-share session (topic, key, aircraft code) and the code last typed. Never synced: the session is a capability to watch this aircraft right now, not a preference, and syncing it would put two devices on one topic and hand the key to every device on the account. See Follow me.
  • navaid.navlog โ€” the flight planning form's own inputs: the met table, the compass card, and ONLY those settings the pilot typed over. Everything else is re-derived each time, which is what lets an untouched field elevation follow the route. Device-local and never synced: a met table from another day is worse than none. navaid.navlogPos is the window's position, like every other *Pos. See Flight planning form.
  • navaid.followVerified โ€” the signing key this device has seen for each aircraft it has followed (up to 32), so a link with the verify key stripped out cannot downgrade a viewer that was already checking signatures. Never synced, for the same reason as the session below.
  • navaid.tourSeen โ€” the map tour has played on this device. Device-local: a new phone gets the tour too.
  • navaid.notamModalSize โ€” the size the NOTAM sheet was dragged to. Device-local geometry.
  • navaid.notamListPos, navaid.sigmetListPos, navaid.airmetListPos (each .en / .he) โ€” where the NOTAM, SIGMET and AIRMET lists were dragged to. Device-local, like every *Pos.
  • navaid.inspSize โ€” the inspector's size per kind of panel (waypoint, leg, airfield, bubbleโ€ฆ). Device-local.
  • navaid.showSigmet, navaid.showAdc โ€” the SIGMET map layer and the aerodrome-chart plate type. Synced with the other navaid.show* keys.
  • navaid.notamSeen โ€” NOTAM ids this device has already been shown, with the time each was first seen, so the list can badge what is new. Marked on closing the sheet; entries older than notamSeenDays (90) are dropped. Device-local: it records what this pilot has read.
  • navaid.routeLibraryFilter โ€” which half of the saved-route library is on screen (all / route / gps). A view choice made on this device while looking for something, not a setting worth carrying to another.
  • navaid.selected, navaid.fpOpen, navaid.openChartModal โ€” session-only restoration keys. So are navaid.buildNoticeFor (which build this tab has already been told about) and navaid.apkReloadedForBuild (the once-per-build guard that stops an APK reload loop): both are per tab on purpose, so a page that cannot pick a new build up asks once rather than on every check.
  • navaid.otaInstalling โ€” the bundle id the embedded iOS build is currently trying to install, so a bundle that does not come up is attempted once and then left alone. Device-local, and cleared as soon as the install succeeds. See Offline and PWA.

Settings-sync protocol

Drive settings use a separate app-data document from saved routes. null is a deletion tombstone; an absent key means no information. Timestamps are monotonic, snapshots use canonical allowlist order, first sync unions non-conflicting values, conflicts require a user decision, and applying a remote snapshot is all-or-nothing. API keys, destination endpoints, working route, route library, caches, and device geometry are excluded.

When adding a key, update code, the allowlist or device-local reason, and this page in the same PR.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ