20c19d15f4
Modern.js SSR intercepts all routes before any Express middleware, so the API proxy runs as a separate Express server on port 8080. Modern.js runs on 8081. The proxy uses curl subprocesses which go through the system HTTPS proxy (GOST) with a proper TLS fingerprint that the Aeroflot WAF accepts. Usage: node scripts/dev-server.mjs (replaces pnpm dev for full-stack) Also: remove stray e2e-angular test directory, fix env default to same-origin /api.
410 lines
12 KiB
JSON
410 lines
12 KiB
JSON
{
|
||
"apiResponses": {
|
||
"flightBoardDeparture": {
|
||
"status": 200,
|
||
"headers": {
|
||
"Content-Type": "application/json",
|
||
"X-Request-Id": "req-12345"
|
||
},
|
||
"body": {
|
||
"direction": "departure",
|
||
"cityCode": "MOW",
|
||
"cityName": "Moscow",
|
||
"date": "2026-04-06",
|
||
"flights": [
|
||
{
|
||
"id": "fl-1124",
|
||
"flightNumber": "SU 1124",
|
||
"airlineCode": "SU",
|
||
"airlineName": "Aeroflot",
|
||
"aircraftType": "Airbus A320",
|
||
"direction": "departure",
|
||
"status": "scheduled",
|
||
"date": "2026-04-06",
|
||
"departure": {
|
||
"airportCode": "SVO",
|
||
"airportName": "Sheremetyevo",
|
||
"cityCode": "MOW",
|
||
"cityName": "Moscow",
|
||
"terminal": "B",
|
||
"time": {
|
||
"scheduled": "2026-04-06T12:13:00+03:00"
|
||
}
|
||
},
|
||
"arrival": {
|
||
"airportCode": "AER",
|
||
"airportName": "Adler",
|
||
"cityCode": "AER",
|
||
"cityName": "Sochi",
|
||
"time": {
|
||
"scheduled": "2026-04-06T16:05:00+03:00"
|
||
}
|
||
},
|
||
"boarding": {
|
||
"gate": "11",
|
||
"status": "Идёт посадка",
|
||
"startTime": "2026-04-06T11:30:00+03:00",
|
||
"endTime": "2026-04-06T12:05:00+03:00"
|
||
},
|
||
"checkin": {
|
||
"status": "Закончена",
|
||
"startTime": "2026-04-06T09:30:00+03:00",
|
||
"endTime": "2026-04-06T11:45:00+03:00"
|
||
},
|
||
"aircraft": {
|
||
"type": "Airbus A320",
|
||
"name": "В. Высоцкий",
|
||
"totalSeats": 158,
|
||
"economySeats": 150,
|
||
"businessSeats": 8,
|
||
"previousFlight": "SU 1123"
|
||
},
|
||
"catering": {
|
||
"economy": true,
|
||
"business": true
|
||
},
|
||
"schedule": {
|
||
"scheduledDeparture": "2026-04-06T12:13:00+03:00",
|
||
"scheduledArrival": "2026-04-06T16:05:00+03:00",
|
||
"duration": "3ч. 52мин.",
|
||
"utcOffset": "UTC+03:00",
|
||
"operatingDays": [1, 2, 3, 4, 5],
|
||
"weekRange": "* Расписание на неделю 2026-04-06"
|
||
},
|
||
"lastUpdated": "12:15 2026.04.06"
|
||
},
|
||
{
|
||
"id": "fl-1076",
|
||
"flightNumber": "SU 1076",
|
||
"airlineCode": "SU",
|
||
"airlineName": "Aeroflot",
|
||
"aircraftType": "Boeing 737-800",
|
||
"direction": "departure",
|
||
"status": "scheduled",
|
||
"date": "2026-04-06",
|
||
"departure": {
|
||
"airportCode": "SVO",
|
||
"airportName": "Sheremetyevo",
|
||
"cityCode": "MOW",
|
||
"cityName": "Moscow",
|
||
"terminal": "B",
|
||
"time": {
|
||
"scheduled": "2026-04-06T12:14:00+03:00"
|
||
}
|
||
},
|
||
"arrival": {
|
||
"airportCode": "OVB",
|
||
"airportName": "Tolmachevo",
|
||
"cityCode": "OVB",
|
||
"cityName": "Novosibirsk",
|
||
"time": {
|
||
"scheduled": "2026-04-06T20:25:00+03:00"
|
||
}
|
||
},
|
||
"aircraft": {
|
||
"type": "Boeing 737-800",
|
||
"totalSeats": 189,
|
||
"economySeats": 175,
|
||
"businessSeats": 14
|
||
},
|
||
"schedule": {
|
||
"scheduledDeparture": "2026-04-06T12:14:00+03:00",
|
||
"scheduledArrival": "2026-04-06T20:25:00+03:00",
|
||
"duration": "8ч. 11мин.",
|
||
"utcOffset": "UTC+03:00",
|
||
"operatingDays": [1, 2, 3, 4, 5, 6, 7],
|
||
"weekRange": "* Расписание на неделю 2026-04-06"
|
||
}
|
||
}
|
||
],
|
||
"total": 2,
|
||
"page": 1,
|
||
"pageSize": 20
|
||
}
|
||
},
|
||
"flightBoardArrival": {
|
||
"status": 200,
|
||
"headers": {
|
||
"Content-Type": "application/json",
|
||
"X-Request-Id": "req-12346"
|
||
},
|
||
"body": {
|
||
"direction": "arrival",
|
||
"cityCode": "MOW",
|
||
"cityName": "Moscow",
|
||
"date": "2026-04-06",
|
||
"flights": [
|
||
{
|
||
"id": "fl-1455",
|
||
"flightNumber": "SU 1455",
|
||
"airlineCode": "SU",
|
||
"airlineName": "Aeroflot",
|
||
"aircraftType": "Airbus A320",
|
||
"direction": "arrival",
|
||
"status": "arrived",
|
||
"date": "2026-04-06",
|
||
"departure": {
|
||
"airportCode": "UUD",
|
||
"airportName": "Ulan-Ude",
|
||
"cityCode": "UUD",
|
||
"cityName": "Ulan-Ude",
|
||
"time": {
|
||
"scheduled": "2026-04-06T10:38:00+03:00",
|
||
"actual": "2026-04-06T10:38:00+03:00"
|
||
}
|
||
},
|
||
"arrival": {
|
||
"airportCode": "SVO",
|
||
"airportName": "Sheremetyevo",
|
||
"cityCode": "MOW",
|
||
"cityName": "Moscow",
|
||
"time": {
|
||
"scheduled": "2026-04-06T12:12:00+03:00",
|
||
"actual": "2026-04-06T12:12:00+03:00"
|
||
}
|
||
},
|
||
"arrivalInfo": {
|
||
"baggageBelt": "5",
|
||
"transfer": "Тран"
|
||
},
|
||
"aircraft": {
|
||
"type": "Airbus A320",
|
||
"name": "С. Прокофьев",
|
||
"totalSeats": 158,
|
||
"economySeats": 150,
|
||
"businessSeats": 8,
|
||
"previousFlight": "SU 1454"
|
||
},
|
||
"catering": {
|
||
"economy": true,
|
||
"business": true
|
||
},
|
||
"schedule": {
|
||
"scheduledDeparture": "2026-04-06T10:38:00+03:00",
|
||
"scheduledArrival": "2026-04-06T12:12:00+03:00",
|
||
"duration": "1ч. 34мин.",
|
||
"utcOffset": "UTC+03:00",
|
||
"operatingDays": [1, 2, 3, 4, 5],
|
||
"weekRange": "* Расписание на неделю 2026-04-06"
|
||
},
|
||
"lastUpdated": "10:32 2026.04.06"
|
||
}
|
||
],
|
||
"total": 1,
|
||
"page": 1,
|
||
"pageSize": 20
|
||
}
|
||
},
|
||
"flightDetails": {
|
||
"status": 200,
|
||
"headers": {
|
||
"Content-Type": "application/json",
|
||
"X-Request-Id": "req-12347"
|
||
},
|
||
"body": {
|
||
"id": "fl-1124",
|
||
"flightNumber": "SU 1124",
|
||
"airlineCode": "SU",
|
||
"airlineName": "Aeroflot",
|
||
"aircraftType": "Airbus A320",
|
||
"direction": "departure",
|
||
"status": "scheduled",
|
||
"date": "2026-04-06",
|
||
"departure": {
|
||
"airportCode": "SVO",
|
||
"airportName": "Sheremetyevo",
|
||
"cityCode": "MOW",
|
||
"cityName": "Moscow",
|
||
"terminal": "B",
|
||
"time": {
|
||
"scheduled": "2026-04-06T12:13:00+03:00"
|
||
}
|
||
},
|
||
"arrival": {
|
||
"airportCode": "AER",
|
||
"airportName": "Adler",
|
||
"cityCode": "AER",
|
||
"cityName": "Sochi",
|
||
"time": {
|
||
"scheduled": "2026-04-06T16:05:00+03:00"
|
||
}
|
||
},
|
||
"boarding": {
|
||
"gate": "11",
|
||
"status": "Идёт посадка",
|
||
"startTime": "2026-04-06T11:30:00+03:00",
|
||
"endTime": "2026-04-06T12:05:00+03:00"
|
||
},
|
||
"checkin": {
|
||
"status": "Закончена",
|
||
"startTime": "2026-04-06T09:30:00+03:00",
|
||
"endTime": "2026-04-06T11:45:00+03:00"
|
||
},
|
||
"aircraft": {
|
||
"type": "Airbus A320",
|
||
"name": "В. Высоцкий",
|
||
"totalSeats": 158,
|
||
"economySeats": 150,
|
||
"businessSeats": 8,
|
||
"previousFlight": "SU 1123"
|
||
},
|
||
"catering": {
|
||
"economy": true,
|
||
"business": true
|
||
},
|
||
"schedule": {
|
||
"scheduledDeparture": "2026-04-06T12:13:00+03:00",
|
||
"scheduledArrival": "2026-04-06T16:05:00+03:00",
|
||
"duration": "3ч. 52мин.",
|
||
"utcOffset": "UTC+03:00",
|
||
"operatingDays": [1, 2, 3, 4, 5],
|
||
"weekRange": "* Расписание на неделю 2026-04-06"
|
||
},
|
||
"lastUpdated": "12:15 2026.04.06"
|
||
}
|
||
},
|
||
"scheduleSearch": {
|
||
"status": 200,
|
||
"headers": {
|
||
"Content-Type": "application/json",
|
||
"X-Request-Id": "req-12348"
|
||
},
|
||
"body": {
|
||
"from": "MOW",
|
||
"to": "AER",
|
||
"dateFrom": "2026-04-06",
|
||
"dateTo": "2026-04-12",
|
||
"entries": [
|
||
{
|
||
"id": "sch-001",
|
||
"flightNumber": "SU 1124",
|
||
"airlineCode": "SU",
|
||
"airlineName": "Aeroflot",
|
||
"aircraftType": "Airbus A320",
|
||
"departureCity": "Moscow",
|
||
"departureCityCode": "MOW",
|
||
"departureAirport": "Sheremetyevo",
|
||
"departureTime": "12:13",
|
||
"arrivalCity": "Sochi",
|
||
"arrivalCityCode": "AER",
|
||
"arrivalAirport": "Adler",
|
||
"arrivalTime": "16:05",
|
||
"daysOfWeek": [1, 2, 3, 4, 5, 6, 7],
|
||
"effectiveFrom": "2026-01-01",
|
||
"effectiveTo": "2026-12-31",
|
||
"direct": true
|
||
},
|
||
{
|
||
"id": "sch-002",
|
||
"flightNumber": "SU 1234",
|
||
"airlineCode": "SU",
|
||
"airlineName": "Aeroflot",
|
||
"aircraftType": "Airbus A321",
|
||
"departureCity": "Moscow",
|
||
"departureCityCode": "MOW",
|
||
"departureAirport": "SVO",
|
||
"departureTime": "08:00",
|
||
"arrivalCity": "Sochi",
|
||
"arrivalCityCode": "AER",
|
||
"arrivalAirport": "Adler",
|
||
"arrivalTime": "10:15",
|
||
"daysOfWeek": [1, 2, 3, 4, 5, 6, 7],
|
||
"effectiveFrom": "2026-01-01",
|
||
"effectiveTo": "2026-12-31",
|
||
"direct": true
|
||
}
|
||
],
|
||
"total": 2,
|
||
"page": 1,
|
||
"pageSize": 20
|
||
}
|
||
},
|
||
"flightsMap": {
|
||
"status": 200,
|
||
"headers": {
|
||
"Content-Type": "application/json",
|
||
"X-Request-Id": "req-12349"
|
||
},
|
||
"body": {
|
||
"flights": [
|
||
{
|
||
"id": "fl-1124",
|
||
"flightNumber": "SU 1124",
|
||
"airlineCode": "SU",
|
||
"airlineName": "Aeroflot",
|
||
"aircraftType": "Airbus A320",
|
||
"direction": "departure",
|
||
"status": "scheduled",
|
||
"date": "2026-04-06",
|
||
"departure": {
|
||
"airportCode": "SVO",
|
||
"airportName": "Sheremetyevo",
|
||
"cityCode": "MOW",
|
||
"cityName": "Moscow",
|
||
"latitude": 55.9721,
|
||
"longitude": 37.4146,
|
||
"time": {
|
||
"scheduled": "2026-04-06T12:13:00+03:00"
|
||
}
|
||
},
|
||
"arrival": {
|
||
"airportCode": "AER",
|
||
"airportName": "Adler",
|
||
"cityCode": "AER",
|
||
"cityName": "Sochi",
|
||
"latitude": 43.58,
|
||
"longitude": 39.72,
|
||
"time": {
|
||
"scheduled": "2026-04-06T16:05:00+03:00"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"total": 1
|
||
}
|
||
},
|
||
"popularRequests": {
|
||
"status": 200,
|
||
"headers": {
|
||
"Content-Type": "application/json",
|
||
"X-Request-Id": "req-12350"
|
||
},
|
||
"body": {
|
||
"requests": [
|
||
{
|
||
"id": "pop-001",
|
||
"departureCity": "Moscow",
|
||
"departureCityCode": "MOW",
|
||
"arrivalCity": "Sochi",
|
||
"arrivalCityCode": "AER",
|
||
"flightCount": 45,
|
||
"dates": ["2026-04-06", "2026-04-07", "2026-04-08"],
|
||
"timestamp": "2026-04-06T10:30:00Z"
|
||
},
|
||
{
|
||
"id": "pop-002",
|
||
"departureCity": "Moscow",
|
||
"departureCityCode": "MOW",
|
||
"arrivalCity": "Saint Petersburg",
|
||
"arrivalCityCode": "LED",
|
||
"flightCount": 38,
|
||
"dates": ["2026-04-06", "2026-04-07", "2026-04-08"],
|
||
"timestamp": "2026-04-06T10:25:00Z"
|
||
},
|
||
{
|
||
"id": "pop-003",
|
||
"departureCity": "Moscow",
|
||
"departureCityCode": "MOW",
|
||
"arrivalCity": "Novosibirsk",
|
||
"arrivalCityCode": "OVB",
|
||
"flightCount": 28,
|
||
"dates": ["2026-04-06", "2026-04-07", "2026-04-08"],
|
||
"timestamp": "2026-04-06T10:20:00Z"
|
||
}
|
||
],
|
||
"total": 3
|
||
}
|
||
}
|
||
}
|
||
}
|