ReadonlybodyThe nav_chain field of a signed body or query: the chain when the
platform sends it there and a chain exists, undefined
otherwise. Android sends it; iOS sends nav_chain in no
request body, so it omits the field rather than porting Android's shape.
Readonlyclientx-ig-client-endpoint; undefined while the platform renders none.
Readonlycontainercontainer_module of the screen in front in the platform's own spelling;
undefined when the platform has no spelling for the screen, so
the field is omitted (never an Android spelling on iOS, never an invented
default for a screen the catalog does not name).
ReadonlycurrentEndpoint module of the screen in front: the module part of its
x-ig-client-endpoint (the catalog's endpointModule when it names one,
else its chain module). Request bodies that name the screen they were sent
from as a module (from_module) read this, never a caller literal.
undefined before the first screen.
ReadonlycurrentWhen the screen in front last came to front, for a navigation-derived request field; undefined before the first screen.
ReadonlynavThe header rendering (x-ig-nav-chain); undefined while the platform
renders none (Android: no chain yet; iOS: a screen the catalog does not
name). iOS also has a sentinel for "no screen yet" (not_init), which is
this header's value and never a body's.
ReadonlyrequestThe module the launch's get_account_family reports as request_source:
the screen in front's own module, except that a CDS-hosted Bloks screen
reports the module of the screen that hosts its container when the state
names one (the recovery code-entry screen reports the CAA landing screen).
undefined before the first screen or when the platform has no spelling
for it.
ReadonlyscreenChain module of the screen in front in the platform's spelling (the
screen's own module, never the host of a container it runs in).
undefined before the first screen or when the platform has no spelling
for it.
Optional ReadonlysurfacesThe session's foreground surface trail (the app's app_session_navigation),
in order, each screen's surface module and when it came to front. The module
is the screen's surface (container) module in the platform's spelling — what
the app counts as the surface the visit was — not its chain module; a screen
the platform has no container spelling for reports its chain module (the
Android 451 following filter is feed_timeline_following in the trail while
its chain entry stays feed_contextual, and the launch's save-credentials
prompt is its Bloks app id). surface says whether the screen is a surface
of the app (a native screen) rather than a Bloks screen shown over one; the
app counts only the former as a surface (the 451 launch's save-credentials
prompt is not one). Omitted while empty, so a NavigationWire written before
the trail existed keeps compiling.
What the navigation state looks like on the wire, in the platform's spelling. One value feeds every place a request names the navigation: the
x-ig-nav-chainheader and thenav_chainfield of a body, thex-ig-client-endpointheader, and thecontainer_modulefield — so they can never disagree.