@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
JavaScript
/**
* 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