|
| 1 | +"use strict"; |
| 2 | +var __importDefault = (this && this.__importDefault) || function (mod) { |
| 3 | + return (mod && mod.__esModule) ? mod : { "default": mod }; |
| 4 | +}; |
| 5 | +Object.defineProperty(exports, "__esModule", { value: true }); |
| 6 | +exports.sbdbParamsSchema = void 0; |
| 7 | +exports.jplSbdbHandler = jplSbdbHandler; |
| 8 | +const zod_1 = require("zod"); |
| 9 | +const axios_1 = __importDefault(require("axios")); |
| 10 | +// Schema for validating JPL Small-Body Database request parameters |
| 11 | +exports.sbdbParamsSchema = zod_1.z.object({ |
| 12 | + sstr: zod_1.z.string().min(1), |
| 13 | + full_precision: zod_1.z.boolean().optional().default(false), |
| 14 | + solution_epoch: zod_1.z.string().optional(), |
| 15 | + orbit_class: zod_1.z.boolean().optional().default(false), |
| 16 | + body_type: zod_1.z.enum(['ast', 'com', 'all']).optional().default('all'), |
| 17 | + phys_par: zod_1.z.boolean().optional().default(false), |
| 18 | + close_approach: zod_1.z.boolean().optional().default(false), |
| 19 | + ca_time: zod_1.z.enum(['all', 'now', 'fut', 'past']).optional().default('all'), |
| 20 | + ca_dist: zod_1.z.enum(['au', 'ld', 'lu']).optional().default('au'), |
| 21 | + ca_tbl: zod_1.z.enum(['elem', 'approach']).optional().default('approach'), |
| 22 | + format: zod_1.z.enum(['json', 'xml']).optional().default('json') |
| 23 | +}); |
| 24 | +/** |
| 25 | + * Handle requests for JPL's Small-Body Database |
| 26 | + */ |
| 27 | +async function jplSbdbHandler(params) { |
| 28 | + try { |
| 29 | + const { sstr, full_precision, solution_epoch, orbit_class, body_type, phys_par, close_approach, ca_time, ca_dist, ca_tbl, format } = params; |
| 30 | + // Construct the SBDB query URL |
| 31 | + const url = 'https://ssd-api.jpl.nasa.gov/sbdb.api'; |
| 32 | + // Prepare the query parameters |
| 33 | + const queryParams = { |
| 34 | + sstr |
| 35 | + }; |
| 36 | + // Add optional parameters |
| 37 | + if (full_precision) |
| 38 | + queryParams.full_precision = full_precision ? 'yes' : 'no'; |
| 39 | + if (solution_epoch) |
| 40 | + queryParams.solution_epoch = solution_epoch; |
| 41 | + if (orbit_class) |
| 42 | + queryParams.orbit_class = orbit_class ? 'yes' : 'no'; |
| 43 | + if (body_type !== 'all') |
| 44 | + queryParams.body_type = body_type; |
| 45 | + if (phys_par) |
| 46 | + queryParams.phys_par = phys_par ? 'yes' : 'no'; |
| 47 | + if (close_approach) |
| 48 | + queryParams.close_approach = close_approach ? 'yes' : 'no'; |
| 49 | + if (ca_time !== 'all') |
| 50 | + queryParams.ca_time = ca_time; |
| 51 | + if (ca_dist !== 'au') |
| 52 | + queryParams.ca_dist = ca_dist; |
| 53 | + if (ca_tbl !== 'approach') |
| 54 | + queryParams.ca_tbl = ca_tbl; |
| 55 | + if (format !== 'json') |
| 56 | + queryParams.format = format; |
| 57 | + // Make the request to SBDB API |
| 58 | + const response = await axios_1.default.get(url, { params: queryParams }); |
| 59 | + return response.data; |
| 60 | + } |
| 61 | + catch (error) { |
| 62 | + console.error('Error in JPL SBDB handler:', error); |
| 63 | + if (error.name === 'ZodError') { |
| 64 | + throw new Error(`Invalid request parameters: ${error.message}`); |
| 65 | + } |
| 66 | + throw new Error(`API error: ${error.message}`); |
| 67 | + } |
| 68 | +} |
0 commit comments