UNPKG

linkup-sdk

Version:
99 lines 3.94 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LinkupClient = void 0; const axios_1 = __importDefault(require("axios")); const zod_to_json_schema_1 = __importDefault(require("zod-to-json-schema")); const errors_1 = require("./errors"); const utils_1 = require("./utils"); class LinkupClient { USER_AGENT = 'Linkup-JS-SDK/1.0.9'; apiKey; baseUrl; endpoint; constructor(config) { this.apiKey = config.apiKey; this.baseUrl = config.baseUrl || 'https://api.linkup.so/v1'; this.endpoint = config.endpoint || '/search'; } async search(params) { const headers = { Authorization: `Bearer ${this.apiKey}`, }; if (typeof window === 'undefined') { headers['User-Agent'] = this.USER_AGENT; } return axios_1.default .post(this.endpoint, this.sanitizeParams(params), { baseURL: this.baseUrl, headers, }) .then(response => this.formatResponse(response.data, params.outputType)) .catch(e => { throw this.refineError(e.response.data); }); } sanitizeParams({ query, depth, outputType, includeImages, structuredOutputSchema, includeDomains, excludeDomains, fromDate, toDate, }) { return { depth, outputType, q: query, ...(includeImages && { includeImages }), ...(includeDomains && { includeDomains }), ...(excludeDomains && { excludeDomains }), ...(fromDate && { fromDate: fromDate.toISOString() }), ...(toDate && { toDate: toDate.toISOString() }), ...(structuredOutputSchema && { structuredOutputSchema: JSON.stringify((0, utils_1.isZodObject)(structuredOutputSchema) ? (0, zod_to_json_schema_1.default)(structuredOutputSchema) : structuredOutputSchema), }), }; } formatResponse(searchResponse, outputType) { switch (outputType) { case 'sourcedAnswer': return { answer: searchResponse.answer, sources: searchResponse.sources, }; case 'searchResults': return { results: searchResponse.results, }; // biome-ignore lint/complexity/noUselessSwitchCase: left for exhaustiveness case 'structured': default: return searchResponse; } } refineError(e) { const { statusCode, error } = e; const { code, message } = error; switch (statusCode) { case 400: if (code === 'SEARCH_QUERY_NO_RESULT') { return new errors_1.LinkupNoResultError(message); } return new errors_1.LinkupInvalidRequestError((0, utils_1.concatErrorAndDetails)(e)); case 401: case 403: return new errors_1.LinkupAuthenticationError(message); case 429: switch (code) { case 'INSUFFICIENT_FUNDS_CREDITS': return new errors_1.LinkupInsufficientCreditError(message); case 'TOO_MANY_REQUESTS': return new errors_1.LinkupTooManyRequestsError(message); default: return new errors_1.LinkupUnknownError(`An unknown error occurred: ${error.message}`); } default: return new errors_1.LinkupUnknownError(`An unknown error occurred: ${error.message}`); } } } exports.LinkupClient = LinkupClient; //# sourceMappingURL=linkup-client.js.map