UNPKG

@lineai/gov-deals

Version:

Explore Federal contracts for government building renovations, city hall renovations, courthouse updates, library modernizations, federal building improvement contracts, base housing and facilities upgrades.

74 lines 4.57 kB
/** * SAM.gov API Client */ import axios from 'axios'; import { ApiError, AuthenticationError } from '../../core/errors'; /** * Simple SAM.gov API client */ export class SamClient { axios; apiKey; constructor(options) { if (!options.apiKey) { throw new Error('SAM.gov API key is required'); } this.apiKey = options.apiKey; this.axios = axios.create({ baseURL: options.baseUrl || 'https://api.sam.gov/prod', timeout: options.timeout || 30000, headers: { 'Accept': 'application/json', }, }); } /** * Make a GET request */ async get(path, params) { try { // Always add API key to query parameters const allParams = { api_key: this.apiKey, ...params, }; const response = await this.axios.get(path, { params: allParams }); return response.data; } catch (error) { this.handleError(error); } } /** * Make a POST request */ async post(path, data, params) { try { // Always add API key to query parameters const allParams = { api_key: this.apiKey, ...params, }; const response = await this.axios.post(path, data, { params: allParams }); return response.data; } catch (error) { this.handleError(error); } } /** * Handle errors */ handleError(error) { if (axios.isAxiosError(error)) { const status = error.response?.status; const message = error.response?.data?.message || error.message; if (status === 401 || status === 403) { throw new AuthenticationError(`Authentication failed: ${message}`); } throw new ApiError(`SAM.gov API error: ${message}`, status, error.response?.data); } throw error; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudHMvc2FtL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBd0IsTUFBTSxPQUFPLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBUWxFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDSCxLQUFLLENBQWdCO0lBQ3JCLE1BQU0sQ0FBUztJQUVoQyxZQUFZLE9BQXlCO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksMEJBQTBCO1lBQ3RELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEtBQUs7WUFDakMsT0FBTyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxrQkFBa0I7YUFDN0I7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFJLElBQVksRUFBRSxNQUE0QjtRQUNyRCxJQUFJO1lBQ0YseUNBQXlDO1lBQ3pDLE1BQU0sU0FBUyxHQUFHO2dCQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3BCLEdBQUcsTUFBTTthQUNWLENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFJLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztTQUN0QjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUksSUFBWSxFQUFFLElBQWMsRUFBRSxNQUE0QjtRQUN0RSxJQUFJO1lBQ0YseUNBQXlDO1lBQ3pDLE1BQU0sU0FBUyxHQUFHO2dCQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3BCLEdBQUcsTUFBTTthQUNWLENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUM3RSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDdEI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXLENBQUMsS0FBVTtRQUM1QixJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDdEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFFL0QsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ3BDLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQywwQkFBMEIsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNwRTtZQUVELE1BQU0sSUFBSSxRQUFRLENBQ2hCLHNCQUFzQixPQUFPLEVBQUUsRUFDL0IsTUFBTSxFQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUNyQixDQUFDO1NBQ0g7UUFFRCxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7Q0FDRiJ9