@kareemaly/researcher
Version:
CLI tool for web research
47 lines (46 loc) • 1.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.contentClient = exports.searchClient = void 0;
const axios_1 = __importDefault(require("axios"));
const logger_1 = require("./logger");
const log = (0, logger_1.createLogger)("http-client");
// Client for search API calls
exports.searchClient = axios_1.default.create({
headers: {
Accept: "application/json",
"User-Agent": "Researcher/1.0",
},
timeout: 10000, // 10 seconds
});
// Client for fetching web content
exports.contentClient = axios_1.default.create({
headers: {
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"User-Agent": "Mozilla/5.0 (compatible; Researcher/1.0; +https://github.com/yourusername/researcher)",
},
timeout: 30000, // 30 seconds
maxContentLength: 10 * 1024 * 1024, // 10MB
});
// Add logging interceptors
[exports.searchClient, exports.contentClient].forEach((client) => {
client.interceptors.request.use((config) => {
log("Making request to %s", config.url);
return config;
}, (error) => {
log.error("Request error: %O", error);
return Promise.reject(error);
});
client.interceptors.response.use((response) => {
log("Received response from %s (%d bytes)", response.config.url, JSON.stringify(response.data).length);
return response;
}, (error) => {
if (axios_1.default.isAxiosError(error)) {
log.error("Response error from %s: %s", error.config?.url, error.message);
}
return Promise.reject(error);
});
});