vk98's picture
Initial backend deployment - Hono proxy + ColPali embedding API
5dfbe50
import * as https from 'https';
import * as fs from 'fs';
import { config } from '../config';
interface VespaRequestOptions {
method?: string;
headers?: Record<string, string>;
body?: string;
}
export async function vespaRequest(url: string, options: VespaRequestOptions = {}): Promise<any> {
return new Promise((resolve, reject) => {
const urlObj = new URL(url);
const httpsOptions: https.RequestOptions = {
hostname: urlObj.hostname,
port: 443,
path: urlObj.pathname + urlObj.search,
method: options.method || 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
...options.headers
}
};
// Add certificate authentication if available
if (config.vespaCertPath && config.vespaKeyPath) {
try {
httpsOptions.cert = fs.readFileSync(config.vespaCertPath);
httpsOptions.key = fs.readFileSync(config.vespaKeyPath);
httpsOptions.rejectUnauthorized = false;
} catch (error) {
console.error('Failed to load certificates:', error);
}
}
const req = https.request(httpsOptions, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
try {
resolve({
ok: true,
status: res.statusCode,
json: async () => JSON.parse(data),
text: async () => data
});
} catch (error) {
reject(error);
}
} else if (res.statusCode === 504) {
// Handle timeout as success if we got data
try {
const parsed = JSON.parse(data);
if (parsed.root && parsed.root.children) {
resolve({
ok: false, // Keep ok: false for proper handling
status: res.statusCode,
json: async () => parsed,
text: async () => data
});
} else {
resolve({
ok: false,
status: res.statusCode,
text: async () => data
});
}
} catch (error) {
resolve({
ok: false,
status: res.statusCode,
text: async () => data
});
}
} else {
resolve({
ok: false,
status: res.statusCode,
text: async () => data
});
}
});
});
req.on('error', (error) => {
reject(error);
});
if (options.body) {
req.write(options.body);
}
req.end();
});
}