import {z} from 'zod' export type SrcAtmV1SchemasInverseATMInverseRequestOutputFlags = {altitudes?: boolean | undefined, energy_flux?: boolean | undefined, characteristic_energy?: boolean | undefined, oxygen_correction_factor?: boolean | undefined, height_integrated_rayleighs_4278?: boolean | undefined, height_integrated_rayleighs_5577?: boolean | undefined, height_integrated_rayleighs_6300?: boolean | undefined, height_integrated_rayleighs_8446?: boolean | undefined, emission_4278?: boolean | undefined, emission_5577?: boolean | undefined, emission_6300?: boolean | undefined, emission_8446?: boolean | undefined, plasma_electron_density?: boolean | undefined, plasma_o2plus_density?: boolean | undefined, plasma_oplus_density?: boolean | undefined, plasma_noplus_density?: boolean | undefined, plasma_ionisation_rate?: boolean | undefined, plasma_electron_temperature?: boolean | undefined, plasma_ion_temperature?: boolean | undefined, plasma_pederson_conductivity?: boolean | undefined, plasma_hall_conductivity?: boolean | undefined, neutral_o2_density?: boolean | undefined, neutral_o_density?: boolean | undefined, neutral_n2_density?: boolean | undefined, neutral_n_density?: boolean | undefined, neutral_temperature?: boolean | undefined}; export type SrcAtmV1SchemasInverseATMInverseRequest = {atm_model_version?: '1.0' | undefined, timestamp: string, geodetic_latitude: number, geodetic_longitude: number, intensity_4278?: number | undefined, intensity_5577?: number | undefined, intensity_6300?: number | undefined, intensity_8446?: number | undefined, precipitation_flux_spectral_type?: ('gaussian' | 'maxwellian') | undefined, nrlmsis_model_version?: ('00' | '2.0') | undefined, atmospheric_attenuation_correction?: boolean | undefined, output?: SrcAtmV1SchemasInverseATMInverseRequestOutputFlags | undefined, no_cache?: boolean | undefined}; export type CreateApiApiV1AtmInverseArgs = {body: SrcAtmV1SchemasInverseATMInverseRequest}; export type CreateApiApiV1AtmInverseOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const srcAtmV1SchemasInverseATMInverseResponseData = z.object({altitudes: z.array(z.unknown()).optional(), energy_flux: z.number().optional(), characteristic_energy: z.number().optional(), oxygen_correction_factor: z.number().optional(), height_integrated_rayleighs_4278: z.number().optional(), height_integrated_rayleighs_5577: z.number().optional(), height_integrated_rayleighs_6300: z.number().optional(), height_integrated_rayleighs_8446: z.number().optional(), emission_4278: z.array(z.unknown()).optional(), emission_5577: z.array(z.unknown()).optional(), emission_6300: z.array(z.unknown()).optional(), emission_8446: z.array(z.unknown()).optional(), plasma_electron_density: z.array(z.unknown()).optional(), plasma_o2plus_density: z.array(z.unknown()).optional(), plasma_noplus_density: z.array(z.unknown()).optional(), plasma_oplus_density: z.array(z.unknown()).optional(), plasma_ionisation_rate: z.array(z.unknown()).optional(), plasma_electron_temperature: z.array(z.unknown()).optional(), plasma_ion_temperature: z.array(z.unknown()).optional(), plasma_pederson_conductivity: z.array(z.unknown()).optional(), plasma_hall_conductivity: z.array(z.unknown()).optional(), neutral_o2_density: z.array(z.unknown()).optional(), neutral_o_density: z.array(z.unknown()).optional(), neutral_n2_density: z.array(z.unknown()).optional(), neutral_n_density: z.array(z.unknown()).optional(), neutral_temperature: z.array(z.unknown()).optional()}); export const srcAtmV1SchemasInverseATMInverseRequestOutputFlags = z.object({altitudes: z.boolean().optional(), energy_flux: z.boolean().optional(), characteristic_energy: z.boolean().optional(), oxygen_correction_factor: z.boolean().optional(), height_integrated_rayleighs_4278: z.boolean().optional(), height_integrated_rayleighs_5577: z.boolean().optional(), height_integrated_rayleighs_6300: z.boolean().optional(), height_integrated_rayleighs_8446: z.boolean().optional(), emission_4278: z.boolean().optional(), emission_5577: z.boolean().optional(), emission_6300: z.boolean().optional(), emission_8446: z.boolean().optional(), plasma_electron_density: z.boolean().optional(), plasma_o2plus_density: z.boolean().optional(), plasma_oplus_density: z.boolean().optional(), plasma_noplus_density: z.boolean().optional(), plasma_ionisation_rate: z.boolean().optional(), plasma_electron_temperature: z.boolean().optional(), plasma_ion_temperature: z.boolean().optional(), plasma_pederson_conductivity: z.boolean().optional(), plasma_hall_conductivity: z.boolean().optional(), neutral_o2_density: z.boolean().optional(), neutral_o_density: z.boolean().optional(), neutral_n2_density: z.boolean().optional(), neutral_n_density: z.boolean().optional(), neutral_temperature: z.boolean().optional()}); export const srcAtmV1SchemasInverseATMInverseRequest = z.object({atm_model_version: z.literal("1.0").optional(), timestamp: z.string(), geodetic_latitude: z.number(), geodetic_longitude: z.number(), intensity_4278: z.number().optional(), intensity_5577: z.number().optional(), intensity_6300: z.number().optional(), intensity_8446: z.number().optional(), precipitation_flux_spectral_type: z.enum(["gaussian", "maxwellian"]).optional(), nrlmsis_model_version: z.enum(["00", "2.0"]).optional(), atmospheric_attenuation_correction: z.boolean().optional(), output: srcAtmV1SchemasInverseATMInverseRequestOutputFlags.optional(), no_cache: z.boolean().optional()}); export const aTMInverseForwardRequest = z.object({maxwellian_energy_flux: z.number(), gaussian_energy_flux: z.number(), maxwellian_characteristic_energy: z.number(), gaussian_peak_energy: z.number(), gaussian_spectral_width: z.number(), nrlmsis_model_version: z.enum(["00", "2.0"]), oxygen_correction_factor: z.number(), timescale_auroral: z.number().int(), timescale_transport: z.number().int()}); export const srcAtmV1SchemasInverseATMInverseResponse = z.object({data: srcAtmV1SchemasInverseATMInverseResponseData, request: srcAtmV1SchemasInverseATMInverseRequest, forward_params: aTMInverseForwardRequest.nullable().optional(), calculation_duration_ms: z.number()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Perform inverse ATM calculation * * POST /api/v1/atm/inverse */ export const createApiApiV1AtmInverse = async (args: CreateApiApiV1AtmInverseArgs, options: CreateApiApiV1AtmInverseOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/atm/inverse${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(srcAtmV1SchemasInverseATMInverseResponse, await res.json()) };