From af2eed2d6ef09410059c434f7d0101653c3798fd Mon Sep 17 00:00:00 2001 From: itsrubberduck Date: Fri, 13 Feb 2026 18:44:34 +0100 Subject: [PATCH] dont log users id on transmission --- server/api/atc/say.post.ts | 6 ++--- server/middleware/auth.global.ts | 41 +++++++++++++++------------- shared/data/flightlab/types.ts | 46 ++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 23 deletions(-) diff --git a/server/api/atc/say.post.ts b/server/api/atc/say.post.ts index afa5ca3..057bf94 100644 --- a/server/api/atc/say.post.ts +++ b/server/api/atc/say.post.ts @@ -126,7 +126,7 @@ export default defineEventHandler(async (event) => { sessionId?: string; }>(event); - const user = await requireUserSession(event); + // const user = await requireUserSession(event); const rawSessionId = typeof body?.sessionId === "string" ? body.sessionId.trim() @@ -222,11 +222,9 @@ export default defineEventHandler(async (event) => { ttsProvider }; - // await writeFile(fileJson, JSON.stringify(meta, null, 2), "utf-8"); - try { await TransmissionLog.create({ - user: user._id, + // user: user._id, role: "atc", channel: "say", direction: "outgoing", diff --git a/server/middleware/auth.global.ts b/server/middleware/auth.global.ts index 951c7a4..1ccc194 100644 --- a/server/middleware/auth.global.ts +++ b/server/middleware/auth.global.ts @@ -1,23 +1,26 @@ -import { defineEventHandler, getRequestURL } from 'h3' -import { requireUserSession } from '../utils/auth' +import {defineEventHandler, getRequestURL} from 'h3' +import {requireUserSession} from '../utils/auth' export default defineEventHandler(async (event) => { - const url = getRequestURL(event) - if (!url.pathname.startsWith('/api/')) { - return - } - if (url.pathname.startsWith('/api/service/')) { - return - } - if (url.pathname.startsWith('/api/bridge/')) { - return - } - if (url.pathname === '/api/decision-flows/runtime') { - return - } - if (event.node.req.method === 'OPTIONS') { - return - } - await requireUserSession(event) + const url = getRequestURL(event) + if (!url.pathname.startsWith('/api/')) { + return + } + if (url.pathname.startsWith('/api/atc/say')) { + return + } + if (url.pathname.startsWith('/api/service/')) { + return + } + if (url.pathname.startsWith('/api/bridge/')) { + return + } + if (url.pathname === '/api/decision-flows/runtime') { + return + } + if (event.node.req.method === 'OPTIONS') { + return + } + await requireUserSession(event) }) diff --git a/shared/data/flightlab/types.ts b/shared/data/flightlab/types.ts index 7947eae..687f60d 100644 --- a/shared/data/flightlab/types.ts +++ b/shared/data/flightlab/types.ts @@ -16,6 +16,40 @@ export interface FlightLabButton { instructorAlert?: string } +// --- MSFS SimConnect Telemetry --- + +/** MSFS2020 SimConnect variable state — keys match SimConnect naming */ +export interface FlightLabTelemetryState { + AIRSPEED_INDICATED: number // knots + GROUND_VELOCITY: number // knots + VERTICAL_SPEED: number // feet per minute + PLANE_ALTITUDE: number // feet MSL + PLANE_PITCH_DEGREES: number // degrees + TURB_ENG_N1_1: number // percent (0-100), engine 1 + TURB_ENG_N1_2: number // percent (0-100), engine 2 + SIM_ON_GROUND: boolean + GEAR_HANDLE_POSITION: boolean // true = down, false = up + FLAPS_HANDLE_INDEX: number // 0-4 for A320 + BRAKE_PARKING_POSITION: boolean // true = set, false = released + AUTOPILOT_MASTER: boolean + timestamp?: number +} + +export type SimConditionOperator = '>' | '<' | '>=' | '<=' | '==' | '!=' + +export interface SimCondition { + variable: keyof FlightLabTelemetryState + operator: SimConditionOperator + value: number | boolean +} + +export interface SimConditionGroup { + conditions: SimCondition[] + logic: 'AND' | 'OR' +} + +// --- Phase --- + export interface FlightLabPhase { id: string atcMessage: string @@ -24,8 +58,18 @@ export interface FlightLabPhase { sounds?: FlightLabSound[] instructorNote?: string autoAdvanceAfterTTS?: boolean + /** SimConnect conditions for auto-advance (when sim data available) */ + simConditions?: SimConditionGroup + /** How long to wait (ms) before showing help if conditions not met. Default 20000 */ + simConditionTimeoutMs?: number + /** Help message spoken via TTS when timeout reached */ + simConditionHelpMessage?: string + /** Phase to advance to when conditions are met */ + simConditionNextPhase?: string } +// --- Scenario --- + export interface FlightLabScenario { id: string title: string @@ -38,6 +82,8 @@ export interface FlightLabScenario { phases: FlightLabPhase[] } +// --- Session / WebSocket --- + export type FlightLabRole = 'instructor' | 'participant' export interface FlightLabSessionState {