@devvai/devv-code-backend
Version:
Backend SDK for Devv Code - Provides authentication, data management, email and AI capabilities
64 lines (63 loc) • 2.08 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.DevvWebSearch = void 0;
const device_1 = require("./device");
const session_1 = require("./session");
const constants_1 = require("./constants");
/**
* DevvWebSearch - Web search functionality using Jina SERP API
*
* Searches the web and returns top results in LLM-friendly format
*
* Usage:
* ```typescript
* const webSearch = new DevvWebSearch();
* const result = await webSearch.search({
* query: "artificial intelligence news"
* });
* ```
*/
class DevvWebSearch {
async search(options) {
if (!options.query) {
throw new Error('Query is required for web search');
}
// Format query string
const query = this.formatQuery(options.query);
// Get authentication info
const deviceId = (0, device_1.getEncryptedDeviceId)();
const sid = (0, session_1.getSid)();
// Build request headers
const headers = {
'Accept': 'application/json',
'X-Respond-With': 'no-content',
'Device-Id': deviceId
};
if (sid) {
headers['sid'] = sid;
}
// Send request
const response = await fetch(`${constants_1.BASE_URL}api/v1/jina-serp?q=${query}`, {
method: 'POST',
headers
});
if (!response.ok) {
const error = await response.json().catch(() => ({ error: 'Web search failed' }));
throw new Error(error.error || `Failed to search (Status: ${response.status})`);
}
// Parse response
const result = await response.json();
// Check business status codes
if (result.code !== 200 || result.status !== 20000) {
throw new Error(`Search failed with code ${result.code}`);
}
return result;
}
formatQuery(query) {
if (Array.isArray(query)) {
return encodeURIComponent(query.join(' '));
}
return encodeURIComponent(query);
}
}
exports.DevvWebSearch = DevvWebSearch;
;