@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.
94 lines • 6.6 kB
JavaScript
;
/**
* Wrapper to make SamApi work with Supabase Edge Functions
* Converts query parameter authentication to header authentication
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSupabaseApi = exports.SupabaseApi = void 0;
const opportunities_1 = require("./sam/endpoints/opportunities");
const axios_1 = __importDefault(require("axios"));
const errors_1 = require("../core/errors");
/**
* Custom client that sends API key in headers instead of query params
*/
class SupabaseClient {
constructor(apiKey, baseUrl) {
this.axios = axios_1.default.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) => {
var _a;
if ((_a = config.params) === null || _a === void 0 ? void 0 : _a.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) {
var _a, _b, _c, _d, _e, _f;
if (axios_1.default.isAxiosError(error)) {
const status = (_a = error.response) === null || _a === void 0 ? void 0 : _a.status;
const message = ((_c = (_b = error.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.error) || ((_e = (_d = error.response) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.message) || error.message;
if (status === 401 || status === 403) {
throw new errors_1.AuthenticationError(`Authentication failed: ${message}`);
}
throw new errors_1.ApiError(`API error: ${message}`, status, (_f = error.response) === null || _f === void 0 ? void 0 : _f.data);
}
throw error;
}
}
/**
* Supabase-compatible API wrapper
* Use this instead of SamApi when connecting to Supabase Edge Functions
*/
class SupabaseApi {
constructor(options) {
this.client = new SupabaseClient(options.apiKey, options.baseUrl);
this.opportunities = new opportunities_1.OpportunitiesEndpoint(this.client);
}
}
exports.SupabaseApi = SupabaseApi;
/**
* Helper function to create Supabase-compatible API instance
*/
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,
});
}
exports.createSupabaseApi = createSupabaseApi;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYWJhc2Utd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnRzL3N1cGFiYXNlLXdyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7Ozs7O0FBRUgsaUVBQXNFO0FBQ3RFLGtEQUE2QztBQUM3QywyQ0FBK0Q7QUFFL0Q7O0dBRUc7QUFDSCxNQUFNLGNBQWM7SUFHbEIsWUFBWSxNQUFjLEVBQUUsT0FBZTtRQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLGVBQWUsRUFBRSxVQUFVLE1BQU0sRUFBRTthQUNwQztTQUNGLENBQUMsQ0FBQztRQUVILHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7O1lBQzdDLElBQUksTUFBQSxNQUFNLENBQUMsTUFBTSwwQ0FBRSxPQUFPLEVBQUU7Z0JBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDOUI7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFJLElBQVksRUFBRSxNQUE0QjtRQUNyRCxJQUFJO1lBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztTQUN0QjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFJLElBQVksRUFBRSxJQUFjLEVBQUUsTUFBNEI7UUFDdEUsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUksSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3RCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFVOztRQUM1QixJQUFJLGVBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBQSxLQUFLLENBQUMsUUFBUSwwQ0FBRSxNQUFNLENBQUM7WUFDdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQSxNQUFBLE1BQUEsS0FBSyxDQUFDLFFBQVEsMENBQUUsSUFBSSwwQ0FBRSxLQUFLLE1BQUksTUFBQSxNQUFBLEtBQUssQ0FBQyxRQUFRLDBDQUFFLElBQUksMENBQUUsT0FBTyxDQUFBLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUU5RixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDcEMsTUFBTSxJQUFJLDRCQUFtQixDQUFDLDBCQUEwQixPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3BFO1lBRUQsTUFBTSxJQUFJLGlCQUFRLENBQ2hCLGNBQWMsT0FBTyxFQUFFLEVBQ3ZCLE1BQU0sRUFDTixNQUFBLEtBQUssQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FDckIsQ0FBQztTQUNIO1FBRUQsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFdBQVc7SUFJdEIsWUFBWSxPQUE0QztRQUN0RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxxQ0FBcUIsQ0FBQyxJQUFJLENBQUMsTUFBYSxDQUFDLENBQUM7SUFDckUsQ0FBQztDQUNGO0FBUkQsa0NBUUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFdBQW1CLEVBQUUsZUFBdUI7SUFDNUUsNENBQTRDO0lBQzVDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ25ELENBQUMsQ0FBQyxXQUFXO1FBQ2IsQ0FBQyxDQUFDLEdBQUcsV0FBVyxtQkFBbUIsQ0FBQztJQUV0QyxPQUFPLElBQUksV0FBVyxDQUFDO1FBQ3JCLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLE9BQU8sRUFBRSxPQUFPO0tBQ2pCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFWRCw4Q0FVQyJ9