import {z} from 'zod' export type SortDirection = 'asc' | 'desc'; export type GetApiConjunctionMessagesCdmIdMitigationScenariosArgs = {cdm_id: string, filters?: (string | null) | undefined, sort_field?: string | undefined, sort_direction?: SortDirection | undefined, offset?: number | undefined, count?: number | undefined, fields?: string | undefined}; export type GetApiConjunctionMessagesCdmIdMitigationScenariosOptions = {baseUrl: string, Oauth2Scheme?: string | undefined, fetch?: typeof fetch | undefined}; export const offsetPagination = z.object({offset: z.number().int().optional(), count: z.number().int().optional()}); export const satcatSchemasModelsDesignation = z.enum(["OPERATIONAL", "PREDICTIVE", "DEFINITIVE", "THEORETICAL", "TLE"]); export const jobStatus = z.enum(["CREATED", "PENDING", "RUNNING", "SUCCESS", "FAILURE", "CANCELED"]); export const rSORead = z.object({id: z.string(), norad_id: z.number().int().nullable().optional(), international_designator: z.string().nullable().optional(), object_type: z.string().nullable().optional(), object_type_category: z.string().nullable().optional(), object_name: z.string().nullable().optional()}); export const spacecraftConjunctionStateRead = z.object({id: z.string().nullable().optional(), created_at: z.string().nullable().optional(), comment_screening_data_source: z.string().nullable().optional(), ephemeris_name: z.string().nullable().optional(), covariance_method: z.string().nullable().optional(), ref_frame: z.string().nullable().optional(), gravity_model: z.string().nullable().optional(), atmospheric_model: z.string().nullable().optional(), n_body_perturbations: z.string().nullable().optional(), solar_rad_pressure: z.string().nullable().optional(), earth_tides: z.string().nullable().optional(), intrack_thrust: z.string().nullable().optional(), comment_covariance_scale_factor: z.string().nullable().optional(), comment_exclusion_volume_radius: z.string().nullable().optional(), hbr_m: z.number().nullable().optional(), time_lastob_start: z.string().nullable().optional(), time_lastob_end: z.string().nullable().optional(), recommended_od_span: z.number().nullable().optional(), actual_od_span: z.number().nullable().optional(), obs_available: z.number().int().nullable().optional(), obs_used: z.number().int().nullable().optional(), tracks_available: z.number().int().nullable().optional(), tracks_used: z.number().int().nullable().optional(), residuals_accepted: z.number().int().nullable().optional(), weighted_rms: z.number().nullable().optional(), od_quality_rating: z.record(z.string(), z.record(z.string(), z.unknown())).nullable().optional(), is_diluted: z.boolean().nullable().optional(), comment_apogee: z.string().nullable().optional(), comment_perigee: z.string().nullable().optional(), comment_inclination: z.string().nullable().optional(), comment_operator_hard_body_radius: z.string().nullable().optional(), area_pc: z.number().nullable().optional(), cd_area_over_mass: z.number().nullable().optional(), cr_area_over_mass: z.number().nullable().optional(), thrust_acceleration_m: z.number().nullable().optional(), sedr: z.number().nullable().optional(), x_km: z.number(), y_km: z.number(), z_km: z.number(), x_dot_km: z.number(), y_dot_km: z.number(), z_dot_km: z.number(), comment_dcp_density_forecast_uncertainty: z.string().nullable().optional(), comment_dcp_sensitivity_vector_position: z.string().nullable().optional(), comment_dcp_sensitivity_vector_velocity: z.string().nullable().optional(), cr_r: z.number().nullable().optional(), ct_r: z.number().nullable().optional(), ct_t: z.number().nullable().optional(), cn_r: z.number().nullable().optional(), cn_t: z.number().nullable().optional(), cn_n: z.number().nullable().optional(), crdot_r: z.number().nullable().optional(), crdot_t: z.number().nullable().optional(), crdot_n: z.number().nullable().optional(), crdot_rdot: z.number().nullable().optional(), ctdot_r: z.number().nullable().optional(), ctdot_t: z.number().nullable().optional(), ctdot_n: z.number().nullable().optional(), ctdot_rdot: z.number().nullable().optional(), ctdot_tdot: z.number().nullable().optional(), cndot_r: z.number().nullable().optional(), cndot_t: z.number().nullable().optional(), cndot_n: z.number().nullable().optional(), cndot_rdot: z.number().nullable().optional(), cndot_tdot: z.number().nullable().optional(), cndot_ndot: z.number().nullable().optional(), cdrg_r: z.number().nullable().optional(), cdrg_t: z.number().nullable().optional(), cdrg_n: z.number().nullable().optional(), cdrg_rdot: z.number().nullable().optional(), cdrg_tdot: z.number().nullable().optional(), cdrg_ndot: z.number().nullable().optional(), cdrg_drg: z.number().nullable().optional(), csrp_r: z.number().nullable().optional(), csrp_t: z.number().nullable().optional(), csrp_n: z.number().nullable().optional(), csrp_rdot: z.number().nullable().optional(), csrp_tdot: z.number().nullable().optional(), csrp_ndot: z.number().nullable().optional(), csrp_drg: z.number().nullable().optional(), csrp_srp: z.number().nullable().optional(), ephemeris_id: z.string().nullable().optional(), screening_id: z.string().nullable().optional(), derived_from_spacecraft_state_id: z.string().nullable().optional(), rso_id: z.string().nullable().optional(), altitude_km: z.number().nullable().optional()}); export const scenarioFailureType = z.enum(["SATCAT", "NO_EPHEMERIS_OVERLAP", "PROPAGATION"]); export const scenarioRead = z.object({id: z.string(), name: z.string().nullable().optional(), started_at: z.string().nullable().optional(), completed_at: z.string().nullable().optional(), updated_at: z.string().nullable().optional(), cdm_id: z.number().int().nullable().optional(), cdm_key: z.string().nullable().optional(), status: z.string(), constellation: z.string().nullable().optional(), asset_norad_cat_id: z.number().int().nullable().optional(), autogenerated: z.boolean(), completed_tradespaces: z.number().int().nullable().optional(), ephemeris_id: z.string().nullable().optional(), propagation_id: z.string().nullable().optional(), failure_message: scenarioFailureType.nullable().optional()}); export const mitigationScenarioRead = z.object({key: z.string().nullable().optional(), event_key: z.string().nullable().optional(), cdm_id: z.number().int().nullable().optional(), primary_solution_type: z.string(), secondary_solution_type: z.string().nullable().optional(), originator: z.string(), designation: satcatSchemasModelsDesignation, derived_from_cdm_key: z.string().nullable().optional(), avm_status: jobStatus.nullable().optional(), collision_probability: z.number().nullable().optional(), original_cdm_pc: z.number().nullable().optional(), original_cdm_pc_method: z.string().nullable().optional(), updated_pc_available: z.boolean().nullable().optional(), updated_pc_method: z.string().nullable().optional(), miss_distance_km: z.number().nullable().optional(), tca: z.string(), creation_date: z.string(), latest: z.boolean(), stale_primary_data_warning: z.boolean().nullable().optional(), has_history: z.boolean(), angle_of_approach: z.number().nullable().optional(), mahalanobis_distance: z.number().nullable().optional(), relative_speed_m: z.number().nullable().optional(), relative_miss_sig_m: z.number().nullable().optional(), relative_position_r_km: z.number(), relative_sig_r_u_m: z.number().nullable().optional(), relative_position_i_km: z.number(), relative_sig_it_u_m: z.number().nullable().optional(), relative_position_c_km: z.number(), relative_sig_ct_u_m: z.number().nullable().optional(), primary_rso_id: z.string(), primary: rSORead.nullable().optional(), primary_state: spacecraftConjunctionStateRead.nullable().optional(), secondary_rso_id: z.string(), secondary: rSORead.nullable().optional(), secondary_state: spacecraftConjunctionStateRead.nullable().optional(), constellation_name: z.string().nullable().optional(), constellation_id: z.string().nullable().optional(), scenario: scenarioRead.nullable().optional(), is_robust: z.boolean().nullable().optional()}); export const offsetPageResultMitigationScenarioRead = z.object({pagination: offsetPagination, items: z.array(mitigationScenarioRead), total_count: z.number().int()}); 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 }; /** * List Mitigation Scenarios * * GET /conjunction_messages/{cdm_id}/mitigation_scenarios */ export const getApiConjunctionMessagesCdmIdMitigationScenarios = async (args: GetApiConjunctionMessagesCdmIdMitigationScenariosArgs, options: GetApiConjunctionMessagesCdmIdMitigationScenariosOptions) => { const {baseUrl, fetch: fetchFn = fetch, Oauth2Scheme} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.filters != null) query.append("filters", String(args.filters)) if (args.sort_field != null) query.append("sort_field", String(args.sort_field)) if (args.sort_direction != null) query.append("sort_direction", String(args.sort_direction)) if (args.offset != null) query.append("offset", String(args.offset)) if (args.count != null) query.append("count", String(args.count)) if (args.fields != null) query.append("fields", String(args.fields)) if (Oauth2Scheme !== undefined) headers.set('authorization', `Bearer ${Oauth2Scheme}`) const url = `${baseUrl.replace(/\/+$/, '')}/conjunction_messages/${encodeURIComponent(String(args.cdm_id))}/mitigation_scenarios${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(offsetPageResultMitigationScenarioRead, await res.json()) };