Skip to Content
This documentation is provided with the HEAT environment and is relevant for this HEAT instance only.
InternalCore APISession roleParticipants (OdySSEy Lite multi-user)

Session roleParticipants (OdySSEy Lite multi-user)

External systems that need per-role insights for a session should read:

  1. GET /api/sessions/{id} (or /users) → sessionUsers[] with role + externalId (HEAT Auth GUID). For OL, set SessionUser.Role to the Auth first-name role code (station/seat). Do not store Auth email or legal names on the session.
  2. MetadataJson.roleParticipants (via session metadata string on GET, or POST /api/sessions/querymetadataJson) → origin binding for bio/signal/cognitive.

Shape (object map, no arrays)

{ "roleParticipants": { "version": 1, "Aircraft_1": { "role": "Aircraft 1", "kind": "pilot", "originUuid": "<capture-origin-uuid-or-null>", "externalHeatId": "<auth-user-guid-or-null>", "entityKey": "site:app:entity-or-null", "marking": "TAMIM 11-or-null" }, "C2_1": { "role": "C2-1", "kind": "c2", "originUuid": null, "externalHeatId": null, "entityKey": null, "marking": null } } }

Keys are slugified role labels (Aircraft 1Aircraft_1). Compatible with session-metadata-enrich (no arrays).

Who writes it

session-model.js builds the map from:

  1. session-config.originRoleOverrides (uuid→role or role→{ originUuid, externalHeatId })
  2. DIS role assignment (entity census) as last-resort originUuid
  3. Fixed aircraft / C2 station label slots even when unbound

Then await ctx.session.metadata.set("roleParticipants", …).

Downstream

  • Cognitive / HR: cognitive_load_by_origin / heartrate_by_origin keyed by originUuid; dashboards resolve via roleParticipants.
  • Signal transcripts: groupByOrigin zip + merge by originUuid; dashboards flatten all entries.