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.

87 lines 5.96 kB
/** * Wrapper to make SamApi work with Supabase Edge Functions * Converts query parameter authentication to header authentication */ import { OpportunitiesEndpoint } from './sam/endpoints/opportunities'; import axios from 'axios'; import { ApiError, AuthenticationError } from '../core/errors'; /** * Custom client that sends API key in headers instead of query params */ class SupabaseClient { axios; constructor(apiKey, baseUrl) { this.axios = axios.create({ baseURL: baseUrl, timeout: 30000, headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'apikey': apiKey, 'Authorization': `Bearer ${apiKey}`, }, }); // Intercept requests to remove api_key from query params this.axios.interceptors.request.use((config) => { if (config.params?.api_key) { delete config.params.api_key; } return config; }); } async get(path, params) { try { const response = await this.axios.get(path, { params }); return response.data; } catch (error) { this.handleError(error); } } async post(path, data, params) { try { const response = await this.axios.post(path, data, { params }); return response.data; } catch (error) { this.handleError(error); } } handleError(error) { if (axios.isAxiosError(error)) { const status = error.response?.status; const message = error.response?.data?.error || error.response?.data?.message || error.message; if (status === 401 || status === 403) { throw new AuthenticationError(`Authentication failed: ${message}`); } throw new ApiError(`API error: ${message}`, status, error.response?.data); } throw error; } } /** * Supabase-compatible API wrapper * Use this instead of SamApi when connecting to Supabase Edge Functions */ export class SupabaseApi { client; opportunities; constructor(options) { this.client = new SupabaseClient(options.apiKey, options.baseUrl); this.opportunities = new OpportunitiesEndpoint(this.client); } } /** * Helper function to create Supabase-compatible API instance */ export function createSupabaseApi(supabaseUrl, supabaseAnonKey) { // Ensure the URL includes /functions/v1/api const baseUrl = supabaseUrl.includes('/functions/v1') ? supabaseUrl : `${supabaseUrl}/functions/v1/api`; return new SupabaseApi({ apiKey: supabaseAnonKey, baseUrl: baseUrl, }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYWJhc2Utd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnRzL3N1cGFiYXNlLXdyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxLQUF3QixNQUFNLE9BQU8sQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0Q7O0dBRUc7QUFDSCxNQUFNLGNBQWM7SUFDRCxLQUFLLENBQWdCO0lBRXRDLFlBQVksTUFBYyxFQUFFLE9BQWU7UUFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixlQUFlLEVBQUUsVUFBVSxNQUFNLEVBQUU7YUFDcEM7U0FDRixDQUFDLENBQUM7UUFFSCx5REFBeUQ7UUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzdDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7Z0JBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDOUI7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFJLElBQVksRUFBRSxNQUE0QjtRQUNyRCxJQUFJO1lBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztTQUN0QjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFJLElBQVksRUFBRSxJQUFjLEVBQUUsTUFBNEI7UUFDdEUsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUksSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3RCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFVO1FBQzVCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUN0QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFFOUYsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ3BDLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQywwQkFBMEIsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNwRTtZQUVELE1BQU0sSUFBSSxRQUFRLENBQ2hCLGNBQWMsT0FBTyxFQUFFLEVBQ3ZCLE1BQU0sRUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FDckIsQ0FBQztTQUNIO1FBRUQsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUNMLE1BQU0sQ0FBaUI7SUFDeEIsYUFBYSxDQUF3QjtJQUVyRCxZQUFZLE9BQTRDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFhLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxXQUFtQixFQUFFLGVBQXVCO0lBQzVFLDRDQUE0QztJQUM1QyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUNuRCxDQUFDLENBQUMsV0FBVztRQUNiLENBQUMsQ0FBQyxHQUFHLFdBQVcsbUJBQW1CLENBQUM7SUFFdEMsT0FBTyxJQUFJLFdBQVcsQ0FBQztRQUNyQixNQUFNLEVBQUUsZUFBZTtRQUN2QixPQUFPLEVBQUUsT0FBTztLQUNqQixDQUFDLENBQUM7QUFDTCxDQUFDIn0=