35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { api } from './client';
|
|
import type { FlightParameters, RawPrediction } from '$domain';
|
|
|
|
/**
|
|
* GFS datasets are published every 6 hours with a ~6 hour processing lag.
|
|
* Round down to the most recent available slot.
|
|
*/
|
|
export function getLatestDataset(now: Date = new Date()): string {
|
|
// const rounded = new Date(now);
|
|
// rounded.setUTCHours(Math.floor(rounded.getUTCHours() / 6) * 6, 0, 0, 0);
|
|
// rounded.setUTCHours(rounded.getUTCHours() - 6);
|
|
// return rounded.toISOString();
|
|
return "2025-04-06T00:00:00Z";
|
|
}
|
|
|
|
export function buildLaunchDateTime(date: string, time: string): string {
|
|
const fullTime = time.split(':').length === 2 ? `${time}:00` : time;
|
|
return new Date(`${date}T${fullTime}Z`).toISOString();
|
|
}
|
|
|
|
export interface PredictionResponse {
|
|
result: RawPrediction;
|
|
}
|
|
|
|
export const predictionsApi = {
|
|
run: (params: FlightParameters, launchDateTime: string) => {
|
|
const payload: FlightParameters & { launch_datetime: string } = {
|
|
...params,
|
|
dataset: params.dataset || getLatestDataset(),
|
|
launch_datetime: launchDateTime,
|
|
};
|
|
if (payload.start_point === -1) delete payload.start_point;
|
|
return api.post<PredictionResponse>('/predictions/', payload);
|
|
},
|
|
};
|