valyu-js 2.2.1 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -109,12 +109,20 @@ interface AIUsage {
109
109
  interface Cost {
110
110
  total_deduction_dollars: number;
111
111
  search_deduction_dollars: number;
112
- ai_deduction_dollars: number;
113
112
  contents_deduction_dollars?: number;
113
+ ai_deduction_dollars: number;
114
+ }
115
+ interface ExtractionMetadata {
116
+ urls_requested: number;
117
+ urls_processed: number;
118
+ urls_failed: number;
119
+ total_characters: number;
120
+ response_length: string;
121
+ extract_effort: string;
114
122
  }
115
123
  interface AnswerSuccessResponse {
116
124
  success: true;
117
- ai_tx_id: string;
125
+ tx_id: string;
118
126
  original_query: string;
119
127
  contents: string | Record<string, any>;
120
128
  data_type: "structured" | "unstructured";
@@ -122,6 +130,7 @@ interface AnswerSuccessResponse {
122
130
  search_metadata: SearchMetadata;
123
131
  ai_usage: AIUsage;
124
132
  cost: Cost;
133
+ extraction_metadata?: ExtractionMetadata;
125
134
  }
126
135
  interface AnswerErrorResponse {
127
136
  success: false;
@@ -134,12 +143,13 @@ interface AnswerStreamChunk {
134
143
  search_results?: SearchResult[];
135
144
  content?: string;
136
145
  finish_reason?: string;
137
- ai_tx_id?: string;
146
+ tx_id?: string;
138
147
  original_query?: string;
139
148
  data_type?: "structured" | "unstructured";
140
149
  search_metadata?: SearchMetadata;
141
150
  ai_usage?: AIUsage;
142
151
  cost?: Cost;
152
+ extraction_metadata?: ExtractionMetadata;
143
153
  error?: string;
144
154
  }
145
155
  type DeepResearchMode = "lite" | "heavy";
@@ -463,4 +473,4 @@ declare class Valyu {
463
473
  private createErrorGenerator;
464
474
  }
465
475
 
466
- export { type AIUsage, type AnswerErrorResponse, type AnswerOptions, type AnswerResponse, type AnswerStreamChunk, type AnswerStreamChunkType, type AnswerSuccessResponse, type ChartDataPoint, type ChartDataSeries, type ChartType, type ContentResponseLength, type ContentResult, type ContentsOptions, type ContentsResponse, type Cost, type CountryCode, type DeepResearchCancelResponse, type DeepResearchCreateOptions, type DeepResearchCreateResponse, type DeepResearchDeleteResponse, type DeepResearchListResponse, type DeepResearchMode, type DeepResearchOutputFormat, type DeepResearchSearchConfig, type DeepResearchSource, type DeepResearchStatus, type DeepResearchStatusResponse, type DeepResearchTaskListItem, type DeepResearchTogglePublicResponse, type DeepResearchUpdateResponse, type DeepResearchUsage, type ExtractEffort, type FeedbackResponse, type FeedbackSentiment, type FileAttachment, type ImageMetadata, type ImageType, type ListOptions, type MCPServerConfig, type Progress, type ResponseLength, type SearchMetadata, type SearchOptions, type SearchResponse, type SearchResult, type SearchType, type StreamCallback, Valyu, type WaitOptions };
476
+ export { type AIUsage, type AnswerErrorResponse, type AnswerOptions, type AnswerResponse, type AnswerStreamChunk, type AnswerStreamChunkType, type AnswerSuccessResponse, type ChartDataPoint, type ChartDataSeries, type ChartType, type ContentResponseLength, type ContentResult, type ContentsOptions, type ContentsResponse, type Cost, type CountryCode, type DeepResearchCancelResponse, type DeepResearchCreateOptions, type DeepResearchCreateResponse, type DeepResearchDeleteResponse, type DeepResearchListResponse, type DeepResearchMode, type DeepResearchOutputFormat, type DeepResearchSearchConfig, type DeepResearchSource, type DeepResearchStatus, type DeepResearchStatusResponse, type DeepResearchTaskListItem, type DeepResearchTogglePublicResponse, type DeepResearchUpdateResponse, type DeepResearchUsage, type ExtractEffort, type ExtractionMetadata, type FeedbackResponse, type FeedbackSentiment, type FileAttachment, type ImageMetadata, type ImageType, type ListOptions, type MCPServerConfig, type Progress, type ResponseLength, type SearchMetadata, type SearchOptions, type SearchResponse, type SearchResult, type SearchType, type StreamCallback, Valyu, type WaitOptions };
package/dist/index.d.ts CHANGED
@@ -109,12 +109,20 @@ interface AIUsage {
109
109
  interface Cost {
110
110
  total_deduction_dollars: number;
111
111
  search_deduction_dollars: number;
112
- ai_deduction_dollars: number;
113
112
  contents_deduction_dollars?: number;
113
+ ai_deduction_dollars: number;
114
+ }
115
+ interface ExtractionMetadata {
116
+ urls_requested: number;
117
+ urls_processed: number;
118
+ urls_failed: number;
119
+ total_characters: number;
120
+ response_length: string;
121
+ extract_effort: string;
114
122
  }
115
123
  interface AnswerSuccessResponse {
116
124
  success: true;
117
- ai_tx_id: string;
125
+ tx_id: string;
118
126
  original_query: string;
119
127
  contents: string | Record<string, any>;
120
128
  data_type: "structured" | "unstructured";
@@ -122,6 +130,7 @@ interface AnswerSuccessResponse {
122
130
  search_metadata: SearchMetadata;
123
131
  ai_usage: AIUsage;
124
132
  cost: Cost;
133
+ extraction_metadata?: ExtractionMetadata;
125
134
  }
126
135
  interface AnswerErrorResponse {
127
136
  success: false;
@@ -134,12 +143,13 @@ interface AnswerStreamChunk {
134
143
  search_results?: SearchResult[];
135
144
  content?: string;
136
145
  finish_reason?: string;
137
- ai_tx_id?: string;
146
+ tx_id?: string;
138
147
  original_query?: string;
139
148
  data_type?: "structured" | "unstructured";
140
149
  search_metadata?: SearchMetadata;
141
150
  ai_usage?: AIUsage;
142
151
  cost?: Cost;
152
+ extraction_metadata?: ExtractionMetadata;
143
153
  error?: string;
144
154
  }
145
155
  type DeepResearchMode = "lite" | "heavy";
@@ -463,4 +473,4 @@ declare class Valyu {
463
473
  private createErrorGenerator;
464
474
  }
465
475
 
466
- export { type AIUsage, type AnswerErrorResponse, type AnswerOptions, type AnswerResponse, type AnswerStreamChunk, type AnswerStreamChunkType, type AnswerSuccessResponse, type ChartDataPoint, type ChartDataSeries, type ChartType, type ContentResponseLength, type ContentResult, type ContentsOptions, type ContentsResponse, type Cost, type CountryCode, type DeepResearchCancelResponse, type DeepResearchCreateOptions, type DeepResearchCreateResponse, type DeepResearchDeleteResponse, type DeepResearchListResponse, type DeepResearchMode, type DeepResearchOutputFormat, type DeepResearchSearchConfig, type DeepResearchSource, type DeepResearchStatus, type DeepResearchStatusResponse, type DeepResearchTaskListItem, type DeepResearchTogglePublicResponse, type DeepResearchUpdateResponse, type DeepResearchUsage, type ExtractEffort, type FeedbackResponse, type FeedbackSentiment, type FileAttachment, type ImageMetadata, type ImageType, type ListOptions, type MCPServerConfig, type Progress, type ResponseLength, type SearchMetadata, type SearchOptions, type SearchResponse, type SearchResult, type SearchType, type StreamCallback, Valyu, type WaitOptions };
476
+ export { type AIUsage, type AnswerErrorResponse, type AnswerOptions, type AnswerResponse, type AnswerStreamChunk, type AnswerStreamChunkType, type AnswerSuccessResponse, type ChartDataPoint, type ChartDataSeries, type ChartType, type ContentResponseLength, type ContentResult, type ContentsOptions, type ContentsResponse, type Cost, type CountryCode, type DeepResearchCancelResponse, type DeepResearchCreateOptions, type DeepResearchCreateResponse, type DeepResearchDeleteResponse, type DeepResearchListResponse, type DeepResearchMode, type DeepResearchOutputFormat, type DeepResearchSearchConfig, type DeepResearchSource, type DeepResearchStatus, type DeepResearchStatusResponse, type DeepResearchTaskListItem, type DeepResearchTogglePublicResponse, type DeepResearchUpdateResponse, type DeepResearchUsage, type ExtractEffort, type ExtractionMetadata, type FeedbackResponse, type FeedbackSentiment, type FileAttachment, type ImageMetadata, type ImageType, type ListOptions, type MCPServerConfig, type Progress, type ResponseLength, type SearchMetadata, type SearchOptions, type SearchResponse, type SearchResult, type SearchType, type StreamCallback, Valyu, type WaitOptions };
package/dist/index.js CHANGED
@@ -880,9 +880,9 @@ var Valyu = class {
880
880
  }
881
881
  if (finalMetadata.success) {
882
882
  const finalSearchResults = finalMetadata.search_results || searchResults;
883
- return {
883
+ const response2 = {
884
884
  success: true,
885
- ai_tx_id: finalMetadata.ai_tx_id || "",
885
+ tx_id: finalMetadata.tx_id || "",
886
886
  original_query: finalMetadata.original_query || payload.query,
887
887
  contents: fullContent || finalMetadata.contents || "",
888
888
  data_type: finalMetadata.data_type || "unstructured",
@@ -891,6 +891,10 @@ var Valyu = class {
891
891
  ai_usage: finalMetadata.ai_usage || { input_tokens: 0, output_tokens: 0 },
892
892
  cost: finalMetadata.cost || { total_deduction_dollars: 0, search_deduction_dollars: 0, ai_deduction_dollars: 0 }
893
893
  };
894
+ if (finalMetadata.extraction_metadata) {
895
+ response2.extraction_metadata = finalMetadata.extraction_metadata;
896
+ }
897
+ return response2;
894
898
  }
895
899
  return {
896
900
  success: false,
@@ -955,13 +959,14 @@ var Valyu = class {
955
959
  } else if (parsed.success !== void 0) {
956
960
  yield {
957
961
  type: "metadata",
958
- ai_tx_id: parsed.ai_tx_id,
962
+ tx_id: parsed.tx_id,
959
963
  original_query: parsed.original_query,
960
964
  data_type: parsed.data_type,
961
965
  search_results: parsed.search_results,
962
966
  search_metadata: parsed.search_metadata,
963
967
  ai_usage: parsed.ai_usage,
964
- cost: parsed.cost
968
+ cost: parsed.cost,
969
+ extraction_metadata: parsed.extraction_metadata
965
970
  };
966
971
  }
967
972
  } catch {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios from \"axios\";\nimport {\n SearchResponse,\n SearchType,\n SearchOptions,\n ContentsOptions,\n ContentsResponse,\n AnswerOptions,\n AnswerResponse,\n AnswerSuccessResponse,\n AnswerStreamChunk,\n SearchResult,\n DeepResearchCreateOptions,\n DeepResearchCreateResponse,\n DeepResearchStatusResponse,\n DeepResearchListResponse,\n DeepResearchUpdateResponse,\n DeepResearchCancelResponse,\n DeepResearchDeleteResponse,\n DeepResearchTogglePublicResponse,\n WaitOptions,\n StreamCallback,\n ListOptions,\n} from \"./types\";\n\n\n// Valyu API client\nexport class Valyu {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n // DeepResearch namespace\n public deepresearch: {\n create: (options: DeepResearchCreateOptions) => Promise<DeepResearchCreateResponse>;\n status: (taskId: string) => Promise<DeepResearchStatusResponse>;\n wait: (taskId: string, options?: WaitOptions) => Promise<DeepResearchStatusResponse>;\n stream: (taskId: string, callback: StreamCallback) => Promise<void>;\n list: (options: ListOptions) => Promise<DeepResearchListResponse>;\n update: (taskId: string, instruction: string) => Promise<DeepResearchUpdateResponse>;\n cancel: (taskId: string) => Promise<DeepResearchCancelResponse>;\n delete: (taskId: string) => Promise<DeepResearchDeleteResponse>;\n togglePublic: (taskId: string, isPublic: boolean) => Promise<DeepResearchTogglePublicResponse>;\n };\n\n constructor(\n apiKey?: string,\n baseUrl: string = \"https://api.valyu.ai/v1\"\n ) {\n if (!apiKey) {\n apiKey = process.env.VALYU_API_KEY;\n if (!apiKey) {\n throw new Error(\"VALYU_API_KEY is not set\");\n }\n }\n this.baseUrl = baseUrl;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n };\n\n // Initialize DeepResearch namespace\n this.deepresearch = {\n create: this._deepresearchCreate.bind(this),\n status: this._deepresearchStatus.bind(this),\n wait: this._deepresearchWait.bind(this),\n stream: this._deepresearchStream.bind(this),\n list: this._deepresearchList.bind(this),\n update: this._deepresearchUpdate.bind(this),\n cancel: this._deepresearchCancel.bind(this),\n delete: this._deepresearchDelete.bind(this),\n togglePublic: this._deepresearchTogglePublic.bind(this),\n };\n }\n\n /**\n * Validates date format (YYYY-MM-DD)\n */\n private validateDateFormat(date: string): boolean {\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (!dateRegex.test(date)) {\n return false;\n }\n const parsedDate = new Date(date);\n return parsedDate instanceof Date && !isNaN(parsedDate.getTime());\n }\n\n /**\n * Validates if a string is a valid URL\n */\n private validateUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Validates if a string is a valid domain (with optional path)\n */\n private validateDomain(domain: string): boolean {\n // Domain must have at least one dot and valid structure\n // Supports: example.com, example.com/path, subdomain.example.com/path/to/resource\n const domainRegex =\n /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\\/.+)?$/;\n return domainRegex.test(domain);\n }\n\n /**\n * Validates if a string is a valid dataset identifier (provider/datasetname)\n */\n private validateDatasetId(datasetId: string): boolean {\n // Dataset format: provider/datasetname (exactly one slash)\n // Provider and dataset name can contain alphanumeric, hyphens, underscores\n const parts = datasetId.split(\"/\");\n if (parts.length !== 2) return false;\n\n const providerRegex = /^[a-zA-Z0-9_-]+$/;\n const datasetRegex = /^[a-zA-Z0-9_-]+$/;\n\n return (\n providerRegex.test(parts[0]) &&\n datasetRegex.test(parts[1]) &&\n parts[0].length > 0 &&\n parts[1].length > 0\n );\n }\n\n /**\n * Validates source strings (domains, URLs, or dataset IDs)\n */\n private validateSource(source: string): boolean {\n // Check if it's a valid URL\n if (this.validateUrl(source)) {\n return true;\n }\n\n // Check if it's a valid domain (with optional path)\n if (this.validateDomain(source)) {\n return true;\n }\n\n // Check if it's a valid dataset identifier\n if (this.validateDatasetId(source)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Validates an array of source strings\n */\n private validateSources(sources: string[]): {\n valid: boolean;\n invalidSources: string[];\n } {\n const invalidSources: string[] = [];\n\n for (const source of sources) {\n if (!this.validateSource(source)) {\n invalidSources.push(source);\n }\n }\n\n return {\n valid: invalidSources.length === 0,\n invalidSources,\n };\n }\n\n /**\n * Search for information using the Valyu DeepSearch API\n * @param query - The search query string\n * @param options - Search configuration options\n * @param options.searchType - Type of search: \"web\", \"proprietary\", \"all\", or \"news\"\n * @param options.maxNumResults - Maximum number of results (1-100)\n * @param options.maxPrice - Maximum price per thousand characters (CPM)\n * @param options.isToolCall - Whether this is a tool call\n * @param options.relevanceThreshold - Minimum relevance score (0-1)\n * @param options.includedSources - List of specific sources to include\n * @param options.excludeSources - List of URLs/domains to exclude from search results\n * @param options.category - Category filter for search results\n * @param options.startDate - Start date filter (YYYY-MM-DD format)\n * @param options.endDate - End date filter (YYYY-MM-DD format)\n * @param options.countryCode - Country code filter for search results\n * @param options.responseLength - Response content length: \"short\"/\"medium\"/\"large\"/\"max\" or integer character count\n * @param options.fastMode - Fast mode for quicker but shorter results (default: false)\n * @param options.urlOnly - Returns shortened snippets (default: false)\n * @returns Promise resolving to search results\n */\n async search(\n query: string,\n options: SearchOptions = {}\n ): Promise<SearchResponse> {\n try {\n // Default values\n const defaultSearchType: SearchType = \"all\";\n const defaultMaxNumResults = 10;\n const defaultIsToolCall = true;\n const defaultRelevanceThreshold = 0.5;\n\n // Validate searchType\n let finalSearchType: SearchType = defaultSearchType;\n const providedSearchTypeString = options.searchType?.toLowerCase();\n\n if (\n providedSearchTypeString === \"web\" ||\n providedSearchTypeString === \"proprietary\" ||\n providedSearchTypeString === \"all\" ||\n providedSearchTypeString === \"news\"\n ) {\n finalSearchType = providedSearchTypeString as SearchType;\n } else if (options.searchType !== undefined) {\n return {\n success: false,\n error:\n \"Invalid searchType provided. Must be one of: all, web, proprietary, news\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate date formats\n if (options.startDate && !this.validateDateFormat(options.startDate)) {\n return {\n success: false,\n error: \"Invalid startDate format. Must be YYYY-MM-DD\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n if (options.endDate && !this.validateDateFormat(options.endDate)) {\n return {\n success: false,\n error: \"Invalid endDate format. Must be YYYY-MM-DD\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate maxNumResults range\n const maxNumResults = options.maxNumResults ?? defaultMaxNumResults;\n if (maxNumResults < 1 || maxNumResults > 100) {\n return {\n success: false,\n error: \"maxNumResults must be between 1 and 100\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate includedSources format\n if (options.includedSources !== undefined) {\n if (!Array.isArray(options.includedSources)) {\n return {\n success: false,\n error: \"includedSources must be an array\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n const includedSourcesValidation = this.validateSources(\n options.includedSources\n );\n if (!includedSourcesValidation.valid) {\n return {\n success: false,\n error: `Invalid includedSources format. Invalid sources: ${includedSourcesValidation.invalidSources.join(\n \", \"\n )}. Sources must be valid URLs, domains (with optional paths), or dataset identifiers in 'provider/dataset' format.`,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n // Validate excludeSources format\n if (options.excludeSources !== undefined) {\n if (!Array.isArray(options.excludeSources)) {\n return {\n success: false,\n error: \"excludeSources must be an array\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n const excludeSourcesValidation = this.validateSources(\n options.excludeSources\n );\n if (!excludeSourcesValidation.valid) {\n return {\n success: false,\n error: `Invalid excludeSources format. Invalid sources: ${excludeSourcesValidation.invalidSources.join(\n \", \"\n )}. Sources must be valid URLs, domains (with optional paths), or dataset identifiers in 'provider/dataset' format.`,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n // Build payload with snake_case for API\n const payload: Record<string, any> = {\n query,\n search_type: finalSearchType,\n max_num_results: maxNumResults,\n is_tool_call: options.isToolCall ?? defaultIsToolCall,\n relevance_threshold:\n options.relevanceThreshold ?? defaultRelevanceThreshold,\n };\n\n // Add maxPrice only if explicitly provided\n if (options.maxPrice !== undefined) {\n payload.max_price = options.maxPrice;\n }\n\n // Add optional parameters only if provided\n if (options.includedSources !== undefined) {\n payload.included_sources = options.includedSources;\n }\n\n if (options.excludeSources !== undefined) {\n payload.exclude_sources = options.excludeSources;\n }\n\n if (options.category !== undefined) {\n payload.category = options.category;\n }\n\n if (options.startDate !== undefined) {\n payload.start_date = options.startDate;\n }\n\n if (options.endDate !== undefined) {\n payload.end_date = options.endDate;\n }\n\n if (options.countryCode !== undefined) {\n payload.country_code = options.countryCode;\n }\n\n if (options.responseLength !== undefined) {\n payload.response_length = options.responseLength;\n }\n\n if (options.fastMode !== undefined) {\n payload.fast_mode = options.fastMode;\n }\n\n if (options.urlOnly !== undefined) {\n payload.url_only = options.urlOnly;\n }\n\n const response = await axios.post(`${this.baseUrl}/deepsearch`, payload, {\n headers: this.headers,\n });\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n /**\n * Extract content from URLs with optional AI processing\n * @param urls - Array of URLs to process (max 10)\n * @param options - Content extraction configuration options\n * @param options.summary - AI summary configuration: false (raw), true (auto), string (custom), or JSON schema\n * @param options.extractEffort - Extraction thoroughness: \"normal\" or \"high\"\n * @param options.responseLength - Content length per URL\n * @param options.maxPriceDollars - Maximum cost limit in USD\n * @returns Promise resolving to content extraction results\n */\n async contents(\n urls: string[],\n options: ContentsOptions = {}\n ): Promise<ContentsResponse> {\n try {\n // Validate URLs array\n if (!urls || !Array.isArray(urls)) {\n return {\n success: false,\n error: \"urls must be an array\",\n urls_requested: 0,\n urls_processed: 0,\n urls_failed: 0,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n if (urls.length === 0) {\n return {\n success: false,\n error: \"urls array cannot be empty\",\n urls_requested: 0,\n urls_processed: 0,\n urls_failed: 0,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n if (urls.length > 10) {\n return {\n success: false,\n error: \"Maximum 10 URLs allowed per request\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n // Validate extractEffort if provided\n if (\n options.extractEffort &&\n ![\"normal\", \"high\", \"auto\"].includes(options.extractEffort)\n ) {\n return {\n success: false,\n error: \"extractEffort must be 'normal', 'high', or 'auto'\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n // Validate responseLength if provided\n if (options.responseLength !== undefined) {\n const validLengths = [\"short\", \"medium\", \"large\", \"max\"];\n if (\n typeof options.responseLength === \"string\" &&\n !validLengths.includes(options.responseLength)\n ) {\n return {\n success: false,\n error:\n \"responseLength must be 'short', 'medium', 'large', 'max', or a number\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n if (\n typeof options.responseLength === \"number\" &&\n options.responseLength <= 0\n ) {\n return {\n success: false,\n error: \"responseLength number must be positive\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n }\n\n // Build payload with snake_case for API\n const payload: Record<string, any> = {\n urls,\n };\n\n // Add optional parameters only if provided\n if (options.summary !== undefined) {\n payload.summary = options.summary;\n }\n\n if (options.extractEffort !== undefined) {\n payload.extract_effort = options.extractEffort;\n }\n\n if (options.responseLength !== undefined) {\n payload.response_length = options.responseLength;\n }\n\n if (options.maxPriceDollars !== undefined) {\n payload.max_price_dollars = options.maxPriceDollars;\n }\n\n const response = await axios.post(`${this.baseUrl}/contents`, payload, {\n headers: this.headers,\n });\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error || \"Request failed\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n }\n\n /**\n * DeepResearch: Create a new research task\n */\n private async _deepresearchCreate(\n options: DeepResearchCreateOptions\n ): Promise<DeepResearchCreateResponse> {\n try {\n // Validation\n if (!options.input?.trim()) {\n return {\n success: false,\n error: \"input is required and cannot be empty\",\n };\n }\n\n // Build payload with snake_case\n const payload: Record<string, any> = {\n input: options.input,\n model: options.model || \"lite\",\n output_formats: options.outputFormats || [\"markdown\"],\n code_execution: options.codeExecution !== false,\n };\n\n // Add optional fields\n if (options.strategy) payload.strategy = options.strategy;\n if (options.search) {\n payload.search = {\n search_type: options.search.searchType,\n included_sources: options.search.includedSources,\n };\n }\n if (options.urls) payload.urls = options.urls;\n if (options.files) payload.files = options.files;\n if (options.mcpServers) payload.mcp_servers = options.mcpServers;\n if (options.previousReports) {\n payload.previous_reports = options.previousReports;\n }\n if (options.webhookUrl) payload.webhook_url = options.webhookUrl;\n if (options.metadata) payload.metadata = options.metadata;\n\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks`,\n payload,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Get task status\n */\n private async _deepresearchStatus(\n taskId: string\n ): Promise<DeepResearchStatusResponse> {\n try {\n const response = await axios.get(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/status`,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Wait for task completion with polling\n */\n private async _deepresearchWait(\n taskId: string,\n options: WaitOptions = {}\n ): Promise<DeepResearchStatusResponse> {\n const pollInterval = options.pollInterval || 5000;\n const maxWaitTime = options.maxWaitTime || 3600000;\n const startTime = Date.now();\n\n while (true) {\n const status = await this._deepresearchStatus(taskId);\n\n if (!status.success) {\n throw new Error(status.error);\n }\n\n // Notify progress callback\n if (options.onProgress) {\n options.onProgress(status);\n }\n\n // Terminal states\n if (\n status.status === \"completed\" ||\n status.status === \"failed\" ||\n status.status === \"cancelled\"\n ) {\n return status;\n }\n\n // Check timeout\n if (Date.now() - startTime > maxWaitTime) {\n throw new Error(\"Maximum wait time exceeded\");\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n /**\n * DeepResearch: Stream real-time updates\n */\n private async _deepresearchStream(\n taskId: string,\n callback: StreamCallback\n ): Promise<void> {\n let isComplete = false;\n let lastMessageCount = 0;\n\n while (!isComplete) {\n try {\n const status = await this._deepresearchStatus(taskId);\n\n if (!status.success) {\n if (callback.onError) {\n callback.onError(new Error(status.error));\n }\n return;\n }\n\n // Progress updates\n if (status.progress && callback.onProgress) {\n callback.onProgress(\n status.progress.current_step,\n status.progress.total_steps\n );\n }\n\n // New messages\n if (status.messages && callback.onMessage) {\n const newMessages = status.messages.slice(lastMessageCount);\n newMessages.forEach((msg) => callback.onMessage!(msg));\n lastMessageCount = status.messages.length;\n }\n\n // Terminal states\n if (status.status === \"completed\") {\n if (callback.onComplete) {\n callback.onComplete(status);\n }\n isComplete = true;\n } else if (\n status.status === \"failed\" ||\n status.status === \"cancelled\"\n ) {\n if (callback.onError) {\n callback.onError(\n new Error(status.error || `Task ${status.status}`)\n );\n }\n isComplete = true;\n }\n\n if (!isComplete) {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n } catch (error: any) {\n if (callback.onError) {\n callback.onError(error);\n }\n throw error;\n }\n }\n }\n\n /**\n * DeepResearch: List all tasks\n */\n private async _deepresearchList(\n options: ListOptions\n ): Promise<DeepResearchListResponse> {\n try {\n const limit = options.limit || 10;\n const response = await axios.get(\n `${this.baseUrl}/deepresearch/listtasks?api_key_id=${options.apiKeyId}&limit=${limit}`,\n { headers: this.headers }\n );\n\n return { success: true, data: response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Add follow-up instruction\n */\n private async _deepresearchUpdate(\n taskId: string,\n instruction: string\n ): Promise<DeepResearchUpdateResponse> {\n try {\n if (!instruction?.trim()) {\n return {\n success: false,\n error: \"instruction is required and cannot be empty\",\n };\n }\n\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/update`,\n { instruction },\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Cancel task\n */\n private async _deepresearchCancel(\n taskId: string\n ): Promise<DeepResearchCancelResponse> {\n try {\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/cancel`,\n {},\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Delete task\n */\n private async _deepresearchDelete(\n taskId: string\n ): Promise<DeepResearchDeleteResponse> {\n try {\n const response = await axios.delete(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/delete`,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Toggle public flag\n */\n private async _deepresearchTogglePublic(\n taskId: string,\n isPublic: boolean\n ): Promise<DeepResearchTogglePublicResponse> {\n try {\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/public`,\n { public: isPublic },\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * Get AI-powered answers using the Valyu Answer API\n * @param query - The question or query string\n * @param options - Answer configuration options\n * @param options.structuredOutput - JSON Schema object for structured responses\n * @param options.systemInstructions - Custom system-level instructions (max 2000 chars)\n * @param options.searchType - Type of search: \"web\", \"proprietary\", \"all\", or \"news\"\n * @param options.dataMaxPrice - Maximum spend (USD) for data retrieval\n * @param options.countryCode - Country code filter for search results\n * @param options.includedSources - List of specific sources to include\n * @param options.excludedSources - List of URLs/domains to exclude from search results\n * @param options.startDate - Start date filter (YYYY-MM-DD format)\n * @param options.endDate - End date filter (YYYY-MM-DD format)\n * @param options.fastMode - Fast mode for quicker but shorter results (default: false)\n * @param options.streaming - Enable streaming mode (default: false)\n * @returns Promise resolving to answer response, or AsyncGenerator for streaming\n */\n async answer(\n query: string,\n options: AnswerOptions = {}\n ): Promise<AnswerResponse | AsyncGenerator<AnswerStreamChunk, void, unknown>> {\n // Validate inputs first\n const validationError = this.validateAnswerParams(query, options);\n if (validationError) {\n if (options.streaming) {\n return this.createErrorGenerator(validationError);\n }\n return { success: false, error: validationError };\n }\n\n const payload = this.buildAnswerPayload(query, options);\n\n if (options.streaming) {\n return this.streamAnswer(payload);\n } else {\n return this.fetchAnswer(payload);\n }\n }\n\n /**\n * Validate answer parameters\n */\n private validateAnswerParams(query: string, options: AnswerOptions): string | null {\n // Validate query\n if (!query || typeof query !== \"string\" || query.trim().length === 0) {\n return \"Query is required and must be a non-empty string\";\n }\n\n // Validate searchType\n const providedSearchTypeString = options.searchType?.toLowerCase();\n if (\n providedSearchTypeString !== undefined &&\n providedSearchTypeString !== \"web\" &&\n providedSearchTypeString !== \"proprietary\" &&\n providedSearchTypeString !== \"all\" &&\n providedSearchTypeString !== \"news\"\n ) {\n return \"Invalid searchType provided. Must be one of: all, web, proprietary, news\";\n }\n\n // Validate systemInstructions\n if (options.systemInstructions !== undefined) {\n if (typeof options.systemInstructions !== \"string\") {\n return \"systemInstructions must be a string\";\n }\n const trimmed = options.systemInstructions.trim();\n if (trimmed.length === 0) {\n return \"systemInstructions cannot be empty when provided\";\n }\n if (trimmed.length > 2000) {\n return \"systemInstructions must be 2000 characters or less\";\n }\n }\n\n // Validate dataMaxPrice\n if (options.dataMaxPrice !== undefined) {\n if (typeof options.dataMaxPrice !== \"number\" || options.dataMaxPrice <= 0) {\n return \"dataMaxPrice must be a positive number\";\n }\n }\n\n // Validate date formats\n if (options.startDate && !this.validateDateFormat(options.startDate)) {\n return \"Invalid startDate format. Must be YYYY-MM-DD\";\n }\n if (options.endDate && !this.validateDateFormat(options.endDate)) {\n return \"Invalid endDate format. Must be YYYY-MM-DD\";\n }\n if (options.startDate && options.endDate) {\n const startDate = new Date(options.startDate);\n const endDate = new Date(options.endDate);\n if (startDate > endDate) {\n return \"startDate must be before endDate\";\n }\n }\n\n // Validate sources\n if (options.includedSources !== undefined) {\n if (!Array.isArray(options.includedSources)) {\n return \"includedSources must be an array\";\n }\n const validation = this.validateSources(options.includedSources);\n if (!validation.valid) {\n return `Invalid includedSources format. Invalid sources: ${validation.invalidSources.join(\", \")}.`;\n }\n }\n if (options.excludedSources !== undefined) {\n if (!Array.isArray(options.excludedSources)) {\n return \"excludedSources must be an array\";\n }\n const validation = this.validateSources(options.excludedSources);\n if (!validation.valid) {\n return `Invalid excludedSources format. Invalid sources: ${validation.invalidSources.join(\", \")}.`;\n }\n }\n\n return null;\n }\n\n /**\n * Build payload for answer API\n */\n private buildAnswerPayload(query: string, options: AnswerOptions): Record<string, any> {\n const defaultSearchType: SearchType = \"all\";\n const providedSearchTypeString = options.searchType?.toLowerCase();\n let finalSearchType: SearchType = defaultSearchType;\n\n if (\n providedSearchTypeString === \"web\" ||\n providedSearchTypeString === \"proprietary\" ||\n providedSearchTypeString === \"all\" ||\n providedSearchTypeString === \"news\"\n ) {\n finalSearchType = providedSearchTypeString as SearchType;\n }\n\n const payload: Record<string, any> = {\n query: query.trim(),\n search_type: finalSearchType,\n };\n\n if (options.dataMaxPrice !== undefined) payload.data_max_price = options.dataMaxPrice;\n if (options.structuredOutput !== undefined) payload.structured_output = options.structuredOutput;\n if (options.systemInstructions !== undefined) payload.system_instructions = options.systemInstructions.trim();\n if (options.countryCode !== undefined) payload.country_code = options.countryCode;\n if (options.includedSources !== undefined) payload.included_sources = options.includedSources;\n if (options.excludedSources !== undefined) payload.excluded_sources = options.excludedSources;\n if (options.startDate !== undefined) payload.start_date = options.startDate;\n if (options.endDate !== undefined) payload.end_date = options.endDate;\n if (options.fastMode !== undefined) payload.fast_mode = options.fastMode;\n\n return payload;\n }\n\n /**\n * Fetch answer (non-streaming mode)\n */\n private async fetchAnswer(payload: Record<string, any>): Promise<AnswerResponse> {\n try {\n const response = await fetch(`${this.baseUrl}/answer`, {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Accept\": \"text/event-stream\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n return {\n success: false,\n error: errorData.error || `HTTP Error: ${response.status}`,\n };\n }\n\n // Collect streamed data into final response\n let fullContent = \"\";\n let searchResults: SearchResult[] = [];\n let finalMetadata: any = {};\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const dataStr = line.slice(6);\n\n if (dataStr === \"[DONE]\") continue;\n\n try {\n const parsed = JSON.parse(dataStr);\n\n // Handle search results\n if (parsed.search_results && !parsed.success) {\n searchResults = [...searchResults, ...parsed.search_results];\n }\n // Handle content chunks\n else if (parsed.choices) {\n const content = parsed.choices[0]?.delta?.content || \"\";\n if (content) fullContent += content;\n }\n // Handle final metadata\n else if (parsed.success !== undefined) {\n finalMetadata = parsed;\n }\n } catch {\n continue;\n }\n }\n }\n }\n\n // Build final response\n if (finalMetadata.success) {\n const finalSearchResults = finalMetadata.search_results || searchResults;\n return {\n success: true,\n ai_tx_id: finalMetadata.ai_tx_id || \"\",\n original_query: finalMetadata.original_query || payload.query,\n contents: fullContent || finalMetadata.contents || \"\",\n data_type: finalMetadata.data_type || \"unstructured\",\n search_results: finalSearchResults,\n search_metadata: finalMetadata.search_metadata || { tx_ids: [], number_of_results: 0, total_characters: 0 },\n ai_usage: finalMetadata.ai_usage || { input_tokens: 0, output_tokens: 0 },\n cost: finalMetadata.cost || { total_deduction_dollars: 0, search_deduction_dollars: 0, ai_deduction_dollars: 0 },\n } as AnswerSuccessResponse;\n }\n\n return {\n success: false,\n error: finalMetadata.error || \"Unknown error occurred\",\n };\n } catch (e: any) {\n return {\n success: false,\n error: e.message || \"Request failed\",\n };\n }\n }\n\n /**\n * Stream answer using SSE\n */\n private async *streamAnswer(payload: Record<string, any>): AsyncGenerator<AnswerStreamChunk, void, unknown> {\n try {\n const response = await fetch(`${this.baseUrl}/answer`, {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Accept\": \"text/event-stream\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n yield { type: \"error\", error: errorData.error || `HTTP Error: ${response.status}` };\n return;\n }\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n if (!reader) {\n yield { type: \"error\", error: \"No response body\" };\n return;\n }\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const dataStr = line.slice(6);\n\n if (dataStr === \"[DONE]\") {\n yield { type: \"done\" };\n continue;\n }\n\n try {\n const parsed = JSON.parse(dataStr);\n\n // Handle search results\n if (parsed.search_results && parsed.success === undefined) {\n yield { type: \"search_results\", search_results: parsed.search_results };\n }\n // Handle content chunks\n else if (parsed.choices) {\n const delta = parsed.choices[0]?.delta || {};\n const content = delta.content || \"\";\n const finishReason = parsed.choices[0]?.finish_reason;\n\n if (content || finishReason) {\n yield { type: \"content\", content, finish_reason: finishReason };\n }\n }\n // Handle final metadata\n else if (parsed.success !== undefined) {\n yield {\n type: \"metadata\",\n ai_tx_id: parsed.ai_tx_id,\n original_query: parsed.original_query,\n data_type: parsed.data_type,\n search_results: parsed.search_results,\n search_metadata: parsed.search_metadata,\n ai_usage: parsed.ai_usage,\n cost: parsed.cost,\n };\n }\n } catch {\n continue;\n }\n }\n }\n } catch (e: any) {\n yield { type: \"error\", error: e.message || \"Stream failed\" };\n }\n }\n\n /**\n * Create an error generator for streaming errors\n */\n private async *createErrorGenerator(error: string): AsyncGenerator<AnswerStreamChunk, void, unknown> {\n yield { type: \"error\", error };\n }\n}\n\nexport type {\n SearchResponse,\n SearchType,\n SearchResult,\n FeedbackSentiment,\n FeedbackResponse,\n SearchOptions,\n CountryCode,\n ResponseLength,\n ContentsOptions,\n ContentsResponse,\n ContentResult,\n ExtractEffort,\n ContentResponseLength,\n AnswerOptions,\n AnswerResponse,\n AnswerSuccessResponse,\n AnswerErrorResponse,\n AnswerStreamChunk,\n AnswerStreamChunkType,\n SearchMetadata,\n AIUsage,\n Cost,\n DeepResearchMode,\n DeepResearchStatus,\n DeepResearchOutputFormat,\n ImageType,\n ChartType,\n FileAttachment,\n MCPServerConfig,\n DeepResearchSearchConfig,\n DeepResearchCreateOptions,\n Progress,\n ChartDataPoint,\n ChartDataSeries,\n ImageMetadata,\n DeepResearchSource,\n DeepResearchUsage,\n DeepResearchCreateResponse,\n DeepResearchStatusResponse,\n DeepResearchTaskListItem,\n DeepResearchListResponse,\n DeepResearchUpdateResponse,\n DeepResearchCancelResponse,\n DeepResearchDeleteResponse,\n DeepResearchTogglePublicResponse,\n WaitOptions,\n StreamCallback,\n ListOptions,\n} from \"./types\";\n"],"mappings":"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","names":["axios"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios from \"axios\";\nimport {\n SearchResponse,\n SearchType,\n SearchOptions,\n ContentsOptions,\n ContentsResponse,\n AnswerOptions,\n AnswerResponse,\n AnswerSuccessResponse,\n AnswerStreamChunk,\n SearchResult,\n DeepResearchCreateOptions,\n DeepResearchCreateResponse,\n DeepResearchStatusResponse,\n DeepResearchListResponse,\n DeepResearchUpdateResponse,\n DeepResearchCancelResponse,\n DeepResearchDeleteResponse,\n DeepResearchTogglePublicResponse,\n WaitOptions,\n StreamCallback,\n ListOptions,\n} from \"./types\";\n\n\n// Valyu API client\nexport class Valyu {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n // DeepResearch namespace\n public deepresearch: {\n create: (options: DeepResearchCreateOptions) => Promise<DeepResearchCreateResponse>;\n status: (taskId: string) => Promise<DeepResearchStatusResponse>;\n wait: (taskId: string, options?: WaitOptions) => Promise<DeepResearchStatusResponse>;\n stream: (taskId: string, callback: StreamCallback) => Promise<void>;\n list: (options: ListOptions) => Promise<DeepResearchListResponse>;\n update: (taskId: string, instruction: string) => Promise<DeepResearchUpdateResponse>;\n cancel: (taskId: string) => Promise<DeepResearchCancelResponse>;\n delete: (taskId: string) => Promise<DeepResearchDeleteResponse>;\n togglePublic: (taskId: string, isPublic: boolean) => Promise<DeepResearchTogglePublicResponse>;\n };\n\n constructor(\n apiKey?: string,\n baseUrl: string = \"https://api.valyu.ai/v1\"\n ) {\n if (!apiKey) {\n apiKey = process.env.VALYU_API_KEY;\n if (!apiKey) {\n throw new Error(\"VALYU_API_KEY is not set\");\n }\n }\n this.baseUrl = baseUrl;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n };\n\n // Initialize DeepResearch namespace\n this.deepresearch = {\n create: this._deepresearchCreate.bind(this),\n status: this._deepresearchStatus.bind(this),\n wait: this._deepresearchWait.bind(this),\n stream: this._deepresearchStream.bind(this),\n list: this._deepresearchList.bind(this),\n update: this._deepresearchUpdate.bind(this),\n cancel: this._deepresearchCancel.bind(this),\n delete: this._deepresearchDelete.bind(this),\n togglePublic: this._deepresearchTogglePublic.bind(this),\n };\n }\n\n /**\n * Validates date format (YYYY-MM-DD)\n */\n private validateDateFormat(date: string): boolean {\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (!dateRegex.test(date)) {\n return false;\n }\n const parsedDate = new Date(date);\n return parsedDate instanceof Date && !isNaN(parsedDate.getTime());\n }\n\n /**\n * Validates if a string is a valid URL\n */\n private validateUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Validates if a string is a valid domain (with optional path)\n */\n private validateDomain(domain: string): boolean {\n // Domain must have at least one dot and valid structure\n // Supports: example.com, example.com/path, subdomain.example.com/path/to/resource\n const domainRegex =\n /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\\/.+)?$/;\n return domainRegex.test(domain);\n }\n\n /**\n * Validates if a string is a valid dataset identifier (provider/datasetname)\n */\n private validateDatasetId(datasetId: string): boolean {\n // Dataset format: provider/datasetname (exactly one slash)\n // Provider and dataset name can contain alphanumeric, hyphens, underscores\n const parts = datasetId.split(\"/\");\n if (parts.length !== 2) return false;\n\n const providerRegex = /^[a-zA-Z0-9_-]+$/;\n const datasetRegex = /^[a-zA-Z0-9_-]+$/;\n\n return (\n providerRegex.test(parts[0]) &&\n datasetRegex.test(parts[1]) &&\n parts[0].length > 0 &&\n parts[1].length > 0\n );\n }\n\n /**\n * Validates source strings (domains, URLs, or dataset IDs)\n */\n private validateSource(source: string): boolean {\n // Check if it's a valid URL\n if (this.validateUrl(source)) {\n return true;\n }\n\n // Check if it's a valid domain (with optional path)\n if (this.validateDomain(source)) {\n return true;\n }\n\n // Check if it's a valid dataset identifier\n if (this.validateDatasetId(source)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Validates an array of source strings\n */\n private validateSources(sources: string[]): {\n valid: boolean;\n invalidSources: string[];\n } {\n const invalidSources: string[] = [];\n\n for (const source of sources) {\n if (!this.validateSource(source)) {\n invalidSources.push(source);\n }\n }\n\n return {\n valid: invalidSources.length === 0,\n invalidSources,\n };\n }\n\n /**\n * Search for information using the Valyu DeepSearch API\n * @param query - The search query string\n * @param options - Search configuration options\n * @param options.searchType - Type of search: \"web\", \"proprietary\", \"all\", or \"news\"\n * @param options.maxNumResults - Maximum number of results (1-100)\n * @param options.maxPrice - Maximum price per thousand characters (CPM)\n * @param options.isToolCall - Whether this is a tool call\n * @param options.relevanceThreshold - Minimum relevance score (0-1)\n * @param options.includedSources - List of specific sources to include\n * @param options.excludeSources - List of URLs/domains to exclude from search results\n * @param options.category - Category filter for search results\n * @param options.startDate - Start date filter (YYYY-MM-DD format)\n * @param options.endDate - End date filter (YYYY-MM-DD format)\n * @param options.countryCode - Country code filter for search results\n * @param options.responseLength - Response content length: \"short\"/\"medium\"/\"large\"/\"max\" or integer character count\n * @param options.fastMode - Fast mode for quicker but shorter results (default: false)\n * @param options.urlOnly - Returns shortened snippets (default: false)\n * @returns Promise resolving to search results\n */\n async search(\n query: string,\n options: SearchOptions = {}\n ): Promise<SearchResponse> {\n try {\n // Default values\n const defaultSearchType: SearchType = \"all\";\n const defaultMaxNumResults = 10;\n const defaultIsToolCall = true;\n const defaultRelevanceThreshold = 0.5;\n\n // Validate searchType\n let finalSearchType: SearchType = defaultSearchType;\n const providedSearchTypeString = options.searchType?.toLowerCase();\n\n if (\n providedSearchTypeString === \"web\" ||\n providedSearchTypeString === \"proprietary\" ||\n providedSearchTypeString === \"all\" ||\n providedSearchTypeString === \"news\"\n ) {\n finalSearchType = providedSearchTypeString as SearchType;\n } else if (options.searchType !== undefined) {\n return {\n success: false,\n error:\n \"Invalid searchType provided. Must be one of: all, web, proprietary, news\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate date formats\n if (options.startDate && !this.validateDateFormat(options.startDate)) {\n return {\n success: false,\n error: \"Invalid startDate format. Must be YYYY-MM-DD\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n if (options.endDate && !this.validateDateFormat(options.endDate)) {\n return {\n success: false,\n error: \"Invalid endDate format. Must be YYYY-MM-DD\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate maxNumResults range\n const maxNumResults = options.maxNumResults ?? defaultMaxNumResults;\n if (maxNumResults < 1 || maxNumResults > 100) {\n return {\n success: false,\n error: \"maxNumResults must be between 1 and 100\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate includedSources format\n if (options.includedSources !== undefined) {\n if (!Array.isArray(options.includedSources)) {\n return {\n success: false,\n error: \"includedSources must be an array\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n const includedSourcesValidation = this.validateSources(\n options.includedSources\n );\n if (!includedSourcesValidation.valid) {\n return {\n success: false,\n error: `Invalid includedSources format. Invalid sources: ${includedSourcesValidation.invalidSources.join(\n \", \"\n )}. Sources must be valid URLs, domains (with optional paths), or dataset identifiers in 'provider/dataset' format.`,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n // Validate excludeSources format\n if (options.excludeSources !== undefined) {\n if (!Array.isArray(options.excludeSources)) {\n return {\n success: false,\n error: \"excludeSources must be an array\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n const excludeSourcesValidation = this.validateSources(\n options.excludeSources\n );\n if (!excludeSourcesValidation.valid) {\n return {\n success: false,\n error: `Invalid excludeSources format. Invalid sources: ${excludeSourcesValidation.invalidSources.join(\n \", \"\n )}. Sources must be valid URLs, domains (with optional paths), or dataset identifiers in 'provider/dataset' format.`,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n // Build payload with snake_case for API\n const payload: Record<string, any> = {\n query,\n search_type: finalSearchType,\n max_num_results: maxNumResults,\n is_tool_call: options.isToolCall ?? defaultIsToolCall,\n relevance_threshold:\n options.relevanceThreshold ?? defaultRelevanceThreshold,\n };\n\n // Add maxPrice only if explicitly provided\n if (options.maxPrice !== undefined) {\n payload.max_price = options.maxPrice;\n }\n\n // Add optional parameters only if provided\n if (options.includedSources !== undefined) {\n payload.included_sources = options.includedSources;\n }\n\n if (options.excludeSources !== undefined) {\n payload.exclude_sources = options.excludeSources;\n }\n\n if (options.category !== undefined) {\n payload.category = options.category;\n }\n\n if (options.startDate !== undefined) {\n payload.start_date = options.startDate;\n }\n\n if (options.endDate !== undefined) {\n payload.end_date = options.endDate;\n }\n\n if (options.countryCode !== undefined) {\n payload.country_code = options.countryCode;\n }\n\n if (options.responseLength !== undefined) {\n payload.response_length = options.responseLength;\n }\n\n if (options.fastMode !== undefined) {\n payload.fast_mode = options.fastMode;\n }\n\n if (options.urlOnly !== undefined) {\n payload.url_only = options.urlOnly;\n }\n\n const response = await axios.post(`${this.baseUrl}/deepsearch`, payload, {\n headers: this.headers,\n });\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n /**\n * Extract content from URLs with optional AI processing\n * @param urls - Array of URLs to process (max 10)\n * @param options - Content extraction configuration options\n * @param options.summary - AI summary configuration: false (raw), true (auto), string (custom), or JSON schema\n * @param options.extractEffort - Extraction thoroughness: \"normal\" or \"high\"\n * @param options.responseLength - Content length per URL\n * @param options.maxPriceDollars - Maximum cost limit in USD\n * @returns Promise resolving to content extraction results\n */\n async contents(\n urls: string[],\n options: ContentsOptions = {}\n ): Promise<ContentsResponse> {\n try {\n // Validate URLs array\n if (!urls || !Array.isArray(urls)) {\n return {\n success: false,\n error: \"urls must be an array\",\n urls_requested: 0,\n urls_processed: 0,\n urls_failed: 0,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n if (urls.length === 0) {\n return {\n success: false,\n error: \"urls array cannot be empty\",\n urls_requested: 0,\n urls_processed: 0,\n urls_failed: 0,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n if (urls.length > 10) {\n return {\n success: false,\n error: \"Maximum 10 URLs allowed per request\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n // Validate extractEffort if provided\n if (\n options.extractEffort &&\n ![\"normal\", \"high\", \"auto\"].includes(options.extractEffort)\n ) {\n return {\n success: false,\n error: \"extractEffort must be 'normal', 'high', or 'auto'\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n // Validate responseLength if provided\n if (options.responseLength !== undefined) {\n const validLengths = [\"short\", \"medium\", \"large\", \"max\"];\n if (\n typeof options.responseLength === \"string\" &&\n !validLengths.includes(options.responseLength)\n ) {\n return {\n success: false,\n error:\n \"responseLength must be 'short', 'medium', 'large', 'max', or a number\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n if (\n typeof options.responseLength === \"number\" &&\n options.responseLength <= 0\n ) {\n return {\n success: false,\n error: \"responseLength number must be positive\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n }\n\n // Build payload with snake_case for API\n const payload: Record<string, any> = {\n urls,\n };\n\n // Add optional parameters only if provided\n if (options.summary !== undefined) {\n payload.summary = options.summary;\n }\n\n if (options.extractEffort !== undefined) {\n payload.extract_effort = options.extractEffort;\n }\n\n if (options.responseLength !== undefined) {\n payload.response_length = options.responseLength;\n }\n\n if (options.maxPriceDollars !== undefined) {\n payload.max_price_dollars = options.maxPriceDollars;\n }\n\n const response = await axios.post(`${this.baseUrl}/contents`, payload, {\n headers: this.headers,\n });\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error || \"Request failed\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n }\n\n /**\n * DeepResearch: Create a new research task\n */\n private async _deepresearchCreate(\n options: DeepResearchCreateOptions\n ): Promise<DeepResearchCreateResponse> {\n try {\n // Validation\n if (!options.input?.trim()) {\n return {\n success: false,\n error: \"input is required and cannot be empty\",\n };\n }\n\n // Build payload with snake_case\n const payload: Record<string, any> = {\n input: options.input,\n model: options.model || \"lite\",\n output_formats: options.outputFormats || [\"markdown\"],\n code_execution: options.codeExecution !== false,\n };\n\n // Add optional fields\n if (options.strategy) payload.strategy = options.strategy;\n if (options.search) {\n payload.search = {\n search_type: options.search.searchType,\n included_sources: options.search.includedSources,\n };\n }\n if (options.urls) payload.urls = options.urls;\n if (options.files) payload.files = options.files;\n if (options.mcpServers) payload.mcp_servers = options.mcpServers;\n if (options.previousReports) {\n payload.previous_reports = options.previousReports;\n }\n if (options.webhookUrl) payload.webhook_url = options.webhookUrl;\n if (options.metadata) payload.metadata = options.metadata;\n\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks`,\n payload,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Get task status\n */\n private async _deepresearchStatus(\n taskId: string\n ): Promise<DeepResearchStatusResponse> {\n try {\n const response = await axios.get(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/status`,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Wait for task completion with polling\n */\n private async _deepresearchWait(\n taskId: string,\n options: WaitOptions = {}\n ): Promise<DeepResearchStatusResponse> {\n const pollInterval = options.pollInterval || 5000;\n const maxWaitTime = options.maxWaitTime || 3600000;\n const startTime = Date.now();\n\n while (true) {\n const status = await this._deepresearchStatus(taskId);\n\n if (!status.success) {\n throw new Error(status.error);\n }\n\n // Notify progress callback\n if (options.onProgress) {\n options.onProgress(status);\n }\n\n // Terminal states\n if (\n status.status === \"completed\" ||\n status.status === \"failed\" ||\n status.status === \"cancelled\"\n ) {\n return status;\n }\n\n // Check timeout\n if (Date.now() - startTime > maxWaitTime) {\n throw new Error(\"Maximum wait time exceeded\");\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n /**\n * DeepResearch: Stream real-time updates\n */\n private async _deepresearchStream(\n taskId: string,\n callback: StreamCallback\n ): Promise<void> {\n let isComplete = false;\n let lastMessageCount = 0;\n\n while (!isComplete) {\n try {\n const status = await this._deepresearchStatus(taskId);\n\n if (!status.success) {\n if (callback.onError) {\n callback.onError(new Error(status.error));\n }\n return;\n }\n\n // Progress updates\n if (status.progress && callback.onProgress) {\n callback.onProgress(\n status.progress.current_step,\n status.progress.total_steps\n );\n }\n\n // New messages\n if (status.messages && callback.onMessage) {\n const newMessages = status.messages.slice(lastMessageCount);\n newMessages.forEach((msg) => callback.onMessage!(msg));\n lastMessageCount = status.messages.length;\n }\n\n // Terminal states\n if (status.status === \"completed\") {\n if (callback.onComplete) {\n callback.onComplete(status);\n }\n isComplete = true;\n } else if (\n status.status === \"failed\" ||\n status.status === \"cancelled\"\n ) {\n if (callback.onError) {\n callback.onError(\n new Error(status.error || `Task ${status.status}`)\n );\n }\n isComplete = true;\n }\n\n if (!isComplete) {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n } catch (error: any) {\n if (callback.onError) {\n callback.onError(error);\n }\n throw error;\n }\n }\n }\n\n /**\n * DeepResearch: List all tasks\n */\n private async _deepresearchList(\n options: ListOptions\n ): Promise<DeepResearchListResponse> {\n try {\n const limit = options.limit || 10;\n const response = await axios.get(\n `${this.baseUrl}/deepresearch/listtasks?api_key_id=${options.apiKeyId}&limit=${limit}`,\n { headers: this.headers }\n );\n\n return { success: true, data: response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Add follow-up instruction\n */\n private async _deepresearchUpdate(\n taskId: string,\n instruction: string\n ): Promise<DeepResearchUpdateResponse> {\n try {\n if (!instruction?.trim()) {\n return {\n success: false,\n error: \"instruction is required and cannot be empty\",\n };\n }\n\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/update`,\n { instruction },\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Cancel task\n */\n private async _deepresearchCancel(\n taskId: string\n ): Promise<DeepResearchCancelResponse> {\n try {\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/cancel`,\n {},\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Delete task\n */\n private async _deepresearchDelete(\n taskId: string\n ): Promise<DeepResearchDeleteResponse> {\n try {\n const response = await axios.delete(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/delete`,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Toggle public flag\n */\n private async _deepresearchTogglePublic(\n taskId: string,\n isPublic: boolean\n ): Promise<DeepResearchTogglePublicResponse> {\n try {\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/public`,\n { public: isPublic },\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * Get AI-powered answers using the Valyu Answer API\n * @param query - The question or query string\n * @param options - Answer configuration options\n * @param options.structuredOutput - JSON Schema object for structured responses\n * @param options.systemInstructions - Custom system-level instructions (max 2000 chars)\n * @param options.searchType - Type of search: \"web\", \"proprietary\", \"all\", or \"news\"\n * @param options.dataMaxPrice - Maximum spend (USD) for data retrieval\n * @param options.countryCode - Country code filter for search results\n * @param options.includedSources - List of specific sources to include\n * @param options.excludedSources - List of URLs/domains to exclude from search results\n * @param options.startDate - Start date filter (YYYY-MM-DD format)\n * @param options.endDate - End date filter (YYYY-MM-DD format)\n * @param options.fastMode - Fast mode for quicker but shorter results (default: false)\n * @param options.streaming - Enable streaming mode (default: false)\n * @returns Promise resolving to answer response, or AsyncGenerator for streaming\n */\n async answer(\n query: string,\n options: AnswerOptions = {}\n ): Promise<AnswerResponse | AsyncGenerator<AnswerStreamChunk, void, unknown>> {\n // Validate inputs first\n const validationError = this.validateAnswerParams(query, options);\n if (validationError) {\n if (options.streaming) {\n return this.createErrorGenerator(validationError);\n }\n return { success: false, error: validationError };\n }\n\n const payload = this.buildAnswerPayload(query, options);\n\n if (options.streaming) {\n return this.streamAnswer(payload);\n } else {\n return this.fetchAnswer(payload);\n }\n }\n\n /**\n * Validate answer parameters\n */\n private validateAnswerParams(query: string, options: AnswerOptions): string | null {\n // Validate query\n if (!query || typeof query !== \"string\" || query.trim().length === 0) {\n return \"Query is required and must be a non-empty string\";\n }\n\n // Validate searchType\n const providedSearchTypeString = options.searchType?.toLowerCase();\n if (\n providedSearchTypeString !== undefined &&\n providedSearchTypeString !== \"web\" &&\n providedSearchTypeString !== \"proprietary\" &&\n providedSearchTypeString !== \"all\" &&\n providedSearchTypeString !== \"news\"\n ) {\n return \"Invalid searchType provided. Must be one of: all, web, proprietary, news\";\n }\n\n // Validate systemInstructions\n if (options.systemInstructions !== undefined) {\n if (typeof options.systemInstructions !== \"string\") {\n return \"systemInstructions must be a string\";\n }\n const trimmed = options.systemInstructions.trim();\n if (trimmed.length === 0) {\n return \"systemInstructions cannot be empty when provided\";\n }\n if (trimmed.length > 2000) {\n return \"systemInstructions must be 2000 characters or less\";\n }\n }\n\n // Validate dataMaxPrice\n if (options.dataMaxPrice !== undefined) {\n if (typeof options.dataMaxPrice !== \"number\" || options.dataMaxPrice <= 0) {\n return \"dataMaxPrice must be a positive number\";\n }\n }\n\n // Validate date formats\n if (options.startDate && !this.validateDateFormat(options.startDate)) {\n return \"Invalid startDate format. Must be YYYY-MM-DD\";\n }\n if (options.endDate && !this.validateDateFormat(options.endDate)) {\n return \"Invalid endDate format. Must be YYYY-MM-DD\";\n }\n if (options.startDate && options.endDate) {\n const startDate = new Date(options.startDate);\n const endDate = new Date(options.endDate);\n if (startDate > endDate) {\n return \"startDate must be before endDate\";\n }\n }\n\n // Validate sources\n if (options.includedSources !== undefined) {\n if (!Array.isArray(options.includedSources)) {\n return \"includedSources must be an array\";\n }\n const validation = this.validateSources(options.includedSources);\n if (!validation.valid) {\n return `Invalid includedSources format. Invalid sources: ${validation.invalidSources.join(\", \")}.`;\n }\n }\n if (options.excludedSources !== undefined) {\n if (!Array.isArray(options.excludedSources)) {\n return \"excludedSources must be an array\";\n }\n const validation = this.validateSources(options.excludedSources);\n if (!validation.valid) {\n return `Invalid excludedSources format. Invalid sources: ${validation.invalidSources.join(\", \")}.`;\n }\n }\n\n return null;\n }\n\n /**\n * Build payload for answer API\n */\n private buildAnswerPayload(query: string, options: AnswerOptions): Record<string, any> {\n const defaultSearchType: SearchType = \"all\";\n const providedSearchTypeString = options.searchType?.toLowerCase();\n let finalSearchType: SearchType = defaultSearchType;\n\n if (\n providedSearchTypeString === \"web\" ||\n providedSearchTypeString === \"proprietary\" ||\n providedSearchTypeString === \"all\" ||\n providedSearchTypeString === \"news\"\n ) {\n finalSearchType = providedSearchTypeString as SearchType;\n }\n\n const payload: Record<string, any> = {\n query: query.trim(),\n search_type: finalSearchType,\n };\n\n if (options.dataMaxPrice !== undefined) payload.data_max_price = options.dataMaxPrice;\n if (options.structuredOutput !== undefined) payload.structured_output = options.structuredOutput;\n if (options.systemInstructions !== undefined) payload.system_instructions = options.systemInstructions.trim();\n if (options.countryCode !== undefined) payload.country_code = options.countryCode;\n if (options.includedSources !== undefined) payload.included_sources = options.includedSources;\n if (options.excludedSources !== undefined) payload.excluded_sources = options.excludedSources;\n if (options.startDate !== undefined) payload.start_date = options.startDate;\n if (options.endDate !== undefined) payload.end_date = options.endDate;\n if (options.fastMode !== undefined) payload.fast_mode = options.fastMode;\n\n return payload;\n }\n\n /**\n * Fetch answer (non-streaming mode)\n */\n private async fetchAnswer(payload: Record<string, any>): Promise<AnswerResponse> {\n try {\n const response = await fetch(`${this.baseUrl}/answer`, {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Accept\": \"text/event-stream\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n return {\n success: false,\n error: errorData.error || `HTTP Error: ${response.status}`,\n };\n }\n\n // Collect streamed data into final response\n let fullContent = \"\";\n let searchResults: SearchResult[] = [];\n let finalMetadata: any = {};\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const dataStr = line.slice(6);\n\n if (dataStr === \"[DONE]\") continue;\n\n try {\n const parsed = JSON.parse(dataStr);\n\n // Handle search results\n if (parsed.search_results && !parsed.success) {\n searchResults = [...searchResults, ...parsed.search_results];\n }\n // Handle content chunks\n else if (parsed.choices) {\n const content = parsed.choices[0]?.delta?.content || \"\";\n if (content) fullContent += content;\n }\n // Handle final metadata\n else if (parsed.success !== undefined) {\n finalMetadata = parsed;\n }\n } catch {\n continue;\n }\n }\n }\n }\n\n // Build final response\n if (finalMetadata.success) {\n const finalSearchResults = finalMetadata.search_results || searchResults;\n const response: AnswerSuccessResponse = {\n success: true,\n tx_id: finalMetadata.tx_id || \"\",\n original_query: finalMetadata.original_query || payload.query,\n contents: fullContent || finalMetadata.contents || \"\",\n data_type: finalMetadata.data_type || \"unstructured\",\n search_results: finalSearchResults,\n search_metadata: finalMetadata.search_metadata || { tx_ids: [], number_of_results: 0, total_characters: 0 },\n ai_usage: finalMetadata.ai_usage || { input_tokens: 0, output_tokens: 0 },\n cost: finalMetadata.cost || { total_deduction_dollars: 0, search_deduction_dollars: 0, ai_deduction_dollars: 0 },\n };\n if (finalMetadata.extraction_metadata) {\n response.extraction_metadata = finalMetadata.extraction_metadata;\n }\n return response;\n }\n\n return {\n success: false,\n error: finalMetadata.error || \"Unknown error occurred\",\n };\n } catch (e: any) {\n return {\n success: false,\n error: e.message || \"Request failed\",\n };\n }\n }\n\n /**\n * Stream answer using SSE\n */\n private async *streamAnswer(payload: Record<string, any>): AsyncGenerator<AnswerStreamChunk, void, unknown> {\n try {\n const response = await fetch(`${this.baseUrl}/answer`, {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Accept\": \"text/event-stream\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n yield { type: \"error\", error: errorData.error || `HTTP Error: ${response.status}` };\n return;\n }\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n if (!reader) {\n yield { type: \"error\", error: \"No response body\" };\n return;\n }\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const dataStr = line.slice(6);\n\n if (dataStr === \"[DONE]\") {\n yield { type: \"done\" };\n continue;\n }\n\n try {\n const parsed = JSON.parse(dataStr);\n\n // Handle search results\n if (parsed.search_results && parsed.success === undefined) {\n yield { type: \"search_results\", search_results: parsed.search_results };\n }\n // Handle content chunks\n else if (parsed.choices) {\n const delta = parsed.choices[0]?.delta || {};\n const content = delta.content || \"\";\n const finishReason = parsed.choices[0]?.finish_reason;\n\n if (content || finishReason) {\n yield { type: \"content\", content, finish_reason: finishReason };\n }\n }\n // Handle final metadata\n else if (parsed.success !== undefined) {\n yield {\n type: \"metadata\",\n tx_id: parsed.tx_id,\n original_query: parsed.original_query,\n data_type: parsed.data_type,\n search_results: parsed.search_results,\n search_metadata: parsed.search_metadata,\n ai_usage: parsed.ai_usage,\n cost: parsed.cost,\n extraction_metadata: parsed.extraction_metadata,\n };\n }\n } catch {\n continue;\n }\n }\n }\n } catch (e: any) {\n yield { type: \"error\", error: e.message || \"Stream failed\" };\n }\n }\n\n /**\n * Create an error generator for streaming errors\n */\n private async *createErrorGenerator(error: string): AsyncGenerator<AnswerStreamChunk, void, unknown> {\n yield { type: \"error\", error };\n }\n}\n\nexport type {\n SearchResponse,\n SearchType,\n SearchResult,\n FeedbackSentiment,\n FeedbackResponse,\n SearchOptions,\n CountryCode,\n ResponseLength,\n ContentsOptions,\n ContentsResponse,\n ContentResult,\n ExtractEffort,\n ContentResponseLength,\n AnswerOptions,\n AnswerResponse,\n AnswerSuccessResponse,\n AnswerErrorResponse,\n AnswerStreamChunk,\n AnswerStreamChunkType,\n SearchMetadata,\n AIUsage,\n Cost,\n ExtractionMetadata,\n DeepResearchMode,\n DeepResearchStatus,\n DeepResearchOutputFormat,\n ImageType,\n ChartType,\n FileAttachment,\n MCPServerConfig,\n DeepResearchSearchConfig,\n DeepResearchCreateOptions,\n Progress,\n ChartDataPoint,\n ChartDataSeries,\n ImageMetadata,\n DeepResearchSource,\n DeepResearchUsage,\n DeepResearchCreateResponse,\n DeepResearchStatusResponse,\n DeepResearchTaskListItem,\n DeepResearchListResponse,\n DeepResearchUpdateResponse,\n DeepResearchCancelResponse,\n DeepResearchDeleteResponse,\n DeepResearchTogglePublicResponse,\n WaitOptions,\n StreamCallback,\n ListOptions,\n} from \"./types\";\n"],"mappings":"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","names":["axios","response"]}
package/dist/index.mjs CHANGED
@@ -846,9 +846,9 @@ var Valyu = class {
846
846
  }
847
847
  if (finalMetadata.success) {
848
848
  const finalSearchResults = finalMetadata.search_results || searchResults;
849
- return {
849
+ const response2 = {
850
850
  success: true,
851
- ai_tx_id: finalMetadata.ai_tx_id || "",
851
+ tx_id: finalMetadata.tx_id || "",
852
852
  original_query: finalMetadata.original_query || payload.query,
853
853
  contents: fullContent || finalMetadata.contents || "",
854
854
  data_type: finalMetadata.data_type || "unstructured",
@@ -857,6 +857,10 @@ var Valyu = class {
857
857
  ai_usage: finalMetadata.ai_usage || { input_tokens: 0, output_tokens: 0 },
858
858
  cost: finalMetadata.cost || { total_deduction_dollars: 0, search_deduction_dollars: 0, ai_deduction_dollars: 0 }
859
859
  };
860
+ if (finalMetadata.extraction_metadata) {
861
+ response2.extraction_metadata = finalMetadata.extraction_metadata;
862
+ }
863
+ return response2;
860
864
  }
861
865
  return {
862
866
  success: false,
@@ -921,13 +925,14 @@ var Valyu = class {
921
925
  } else if (parsed.success !== void 0) {
922
926
  yield {
923
927
  type: "metadata",
924
- ai_tx_id: parsed.ai_tx_id,
928
+ tx_id: parsed.tx_id,
925
929
  original_query: parsed.original_query,
926
930
  data_type: parsed.data_type,
927
931
  search_results: parsed.search_results,
928
932
  search_metadata: parsed.search_metadata,
929
933
  ai_usage: parsed.ai_usage,
930
- cost: parsed.cost
934
+ cost: parsed.cost,
935
+ extraction_metadata: parsed.extraction_metadata
931
936
  };
932
937
  }
933
938
  } catch {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios from \"axios\";\nimport {\n SearchResponse,\n SearchType,\n SearchOptions,\n ContentsOptions,\n ContentsResponse,\n AnswerOptions,\n AnswerResponse,\n AnswerSuccessResponse,\n AnswerStreamChunk,\n SearchResult,\n DeepResearchCreateOptions,\n DeepResearchCreateResponse,\n DeepResearchStatusResponse,\n DeepResearchListResponse,\n DeepResearchUpdateResponse,\n DeepResearchCancelResponse,\n DeepResearchDeleteResponse,\n DeepResearchTogglePublicResponse,\n WaitOptions,\n StreamCallback,\n ListOptions,\n} from \"./types\";\n\n\n// Valyu API client\nexport class Valyu {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n // DeepResearch namespace\n public deepresearch: {\n create: (options: DeepResearchCreateOptions) => Promise<DeepResearchCreateResponse>;\n status: (taskId: string) => Promise<DeepResearchStatusResponse>;\n wait: (taskId: string, options?: WaitOptions) => Promise<DeepResearchStatusResponse>;\n stream: (taskId: string, callback: StreamCallback) => Promise<void>;\n list: (options: ListOptions) => Promise<DeepResearchListResponse>;\n update: (taskId: string, instruction: string) => Promise<DeepResearchUpdateResponse>;\n cancel: (taskId: string) => Promise<DeepResearchCancelResponse>;\n delete: (taskId: string) => Promise<DeepResearchDeleteResponse>;\n togglePublic: (taskId: string, isPublic: boolean) => Promise<DeepResearchTogglePublicResponse>;\n };\n\n constructor(\n apiKey?: string,\n baseUrl: string = \"https://api.valyu.ai/v1\"\n ) {\n if (!apiKey) {\n apiKey = process.env.VALYU_API_KEY;\n if (!apiKey) {\n throw new Error(\"VALYU_API_KEY is not set\");\n }\n }\n this.baseUrl = baseUrl;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n };\n\n // Initialize DeepResearch namespace\n this.deepresearch = {\n create: this._deepresearchCreate.bind(this),\n status: this._deepresearchStatus.bind(this),\n wait: this._deepresearchWait.bind(this),\n stream: this._deepresearchStream.bind(this),\n list: this._deepresearchList.bind(this),\n update: this._deepresearchUpdate.bind(this),\n cancel: this._deepresearchCancel.bind(this),\n delete: this._deepresearchDelete.bind(this),\n togglePublic: this._deepresearchTogglePublic.bind(this),\n };\n }\n\n /**\n * Validates date format (YYYY-MM-DD)\n */\n private validateDateFormat(date: string): boolean {\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (!dateRegex.test(date)) {\n return false;\n }\n const parsedDate = new Date(date);\n return parsedDate instanceof Date && !isNaN(parsedDate.getTime());\n }\n\n /**\n * Validates if a string is a valid URL\n */\n private validateUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Validates if a string is a valid domain (with optional path)\n */\n private validateDomain(domain: string): boolean {\n // Domain must have at least one dot and valid structure\n // Supports: example.com, example.com/path, subdomain.example.com/path/to/resource\n const domainRegex =\n /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\\/.+)?$/;\n return domainRegex.test(domain);\n }\n\n /**\n * Validates if a string is a valid dataset identifier (provider/datasetname)\n */\n private validateDatasetId(datasetId: string): boolean {\n // Dataset format: provider/datasetname (exactly one slash)\n // Provider and dataset name can contain alphanumeric, hyphens, underscores\n const parts = datasetId.split(\"/\");\n if (parts.length !== 2) return false;\n\n const providerRegex = /^[a-zA-Z0-9_-]+$/;\n const datasetRegex = /^[a-zA-Z0-9_-]+$/;\n\n return (\n providerRegex.test(parts[0]) &&\n datasetRegex.test(parts[1]) &&\n parts[0].length > 0 &&\n parts[1].length > 0\n );\n }\n\n /**\n * Validates source strings (domains, URLs, or dataset IDs)\n */\n private validateSource(source: string): boolean {\n // Check if it's a valid URL\n if (this.validateUrl(source)) {\n return true;\n }\n\n // Check if it's a valid domain (with optional path)\n if (this.validateDomain(source)) {\n return true;\n }\n\n // Check if it's a valid dataset identifier\n if (this.validateDatasetId(source)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Validates an array of source strings\n */\n private validateSources(sources: string[]): {\n valid: boolean;\n invalidSources: string[];\n } {\n const invalidSources: string[] = [];\n\n for (const source of sources) {\n if (!this.validateSource(source)) {\n invalidSources.push(source);\n }\n }\n\n return {\n valid: invalidSources.length === 0,\n invalidSources,\n };\n }\n\n /**\n * Search for information using the Valyu DeepSearch API\n * @param query - The search query string\n * @param options - Search configuration options\n * @param options.searchType - Type of search: \"web\", \"proprietary\", \"all\", or \"news\"\n * @param options.maxNumResults - Maximum number of results (1-100)\n * @param options.maxPrice - Maximum price per thousand characters (CPM)\n * @param options.isToolCall - Whether this is a tool call\n * @param options.relevanceThreshold - Minimum relevance score (0-1)\n * @param options.includedSources - List of specific sources to include\n * @param options.excludeSources - List of URLs/domains to exclude from search results\n * @param options.category - Category filter for search results\n * @param options.startDate - Start date filter (YYYY-MM-DD format)\n * @param options.endDate - End date filter (YYYY-MM-DD format)\n * @param options.countryCode - Country code filter for search results\n * @param options.responseLength - Response content length: \"short\"/\"medium\"/\"large\"/\"max\" or integer character count\n * @param options.fastMode - Fast mode for quicker but shorter results (default: false)\n * @param options.urlOnly - Returns shortened snippets (default: false)\n * @returns Promise resolving to search results\n */\n async search(\n query: string,\n options: SearchOptions = {}\n ): Promise<SearchResponse> {\n try {\n // Default values\n const defaultSearchType: SearchType = \"all\";\n const defaultMaxNumResults = 10;\n const defaultIsToolCall = true;\n const defaultRelevanceThreshold = 0.5;\n\n // Validate searchType\n let finalSearchType: SearchType = defaultSearchType;\n const providedSearchTypeString = options.searchType?.toLowerCase();\n\n if (\n providedSearchTypeString === \"web\" ||\n providedSearchTypeString === \"proprietary\" ||\n providedSearchTypeString === \"all\" ||\n providedSearchTypeString === \"news\"\n ) {\n finalSearchType = providedSearchTypeString as SearchType;\n } else if (options.searchType !== undefined) {\n return {\n success: false,\n error:\n \"Invalid searchType provided. Must be one of: all, web, proprietary, news\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate date formats\n if (options.startDate && !this.validateDateFormat(options.startDate)) {\n return {\n success: false,\n error: \"Invalid startDate format. Must be YYYY-MM-DD\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n if (options.endDate && !this.validateDateFormat(options.endDate)) {\n return {\n success: false,\n error: \"Invalid endDate format. Must be YYYY-MM-DD\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate maxNumResults range\n const maxNumResults = options.maxNumResults ?? defaultMaxNumResults;\n if (maxNumResults < 1 || maxNumResults > 100) {\n return {\n success: false,\n error: \"maxNumResults must be between 1 and 100\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate includedSources format\n if (options.includedSources !== undefined) {\n if (!Array.isArray(options.includedSources)) {\n return {\n success: false,\n error: \"includedSources must be an array\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n const includedSourcesValidation = this.validateSources(\n options.includedSources\n );\n if (!includedSourcesValidation.valid) {\n return {\n success: false,\n error: `Invalid includedSources format. Invalid sources: ${includedSourcesValidation.invalidSources.join(\n \", \"\n )}. Sources must be valid URLs, domains (with optional paths), or dataset identifiers in 'provider/dataset' format.`,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n // Validate excludeSources format\n if (options.excludeSources !== undefined) {\n if (!Array.isArray(options.excludeSources)) {\n return {\n success: false,\n error: \"excludeSources must be an array\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n const excludeSourcesValidation = this.validateSources(\n options.excludeSources\n );\n if (!excludeSourcesValidation.valid) {\n return {\n success: false,\n error: `Invalid excludeSources format. Invalid sources: ${excludeSourcesValidation.invalidSources.join(\n \", \"\n )}. Sources must be valid URLs, domains (with optional paths), or dataset identifiers in 'provider/dataset' format.`,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n // Build payload with snake_case for API\n const payload: Record<string, any> = {\n query,\n search_type: finalSearchType,\n max_num_results: maxNumResults,\n is_tool_call: options.isToolCall ?? defaultIsToolCall,\n relevance_threshold:\n options.relevanceThreshold ?? defaultRelevanceThreshold,\n };\n\n // Add maxPrice only if explicitly provided\n if (options.maxPrice !== undefined) {\n payload.max_price = options.maxPrice;\n }\n\n // Add optional parameters only if provided\n if (options.includedSources !== undefined) {\n payload.included_sources = options.includedSources;\n }\n\n if (options.excludeSources !== undefined) {\n payload.exclude_sources = options.excludeSources;\n }\n\n if (options.category !== undefined) {\n payload.category = options.category;\n }\n\n if (options.startDate !== undefined) {\n payload.start_date = options.startDate;\n }\n\n if (options.endDate !== undefined) {\n payload.end_date = options.endDate;\n }\n\n if (options.countryCode !== undefined) {\n payload.country_code = options.countryCode;\n }\n\n if (options.responseLength !== undefined) {\n payload.response_length = options.responseLength;\n }\n\n if (options.fastMode !== undefined) {\n payload.fast_mode = options.fastMode;\n }\n\n if (options.urlOnly !== undefined) {\n payload.url_only = options.urlOnly;\n }\n\n const response = await axios.post(`${this.baseUrl}/deepsearch`, payload, {\n headers: this.headers,\n });\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n /**\n * Extract content from URLs with optional AI processing\n * @param urls - Array of URLs to process (max 10)\n * @param options - Content extraction configuration options\n * @param options.summary - AI summary configuration: false (raw), true (auto), string (custom), or JSON schema\n * @param options.extractEffort - Extraction thoroughness: \"normal\" or \"high\"\n * @param options.responseLength - Content length per URL\n * @param options.maxPriceDollars - Maximum cost limit in USD\n * @returns Promise resolving to content extraction results\n */\n async contents(\n urls: string[],\n options: ContentsOptions = {}\n ): Promise<ContentsResponse> {\n try {\n // Validate URLs array\n if (!urls || !Array.isArray(urls)) {\n return {\n success: false,\n error: \"urls must be an array\",\n urls_requested: 0,\n urls_processed: 0,\n urls_failed: 0,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n if (urls.length === 0) {\n return {\n success: false,\n error: \"urls array cannot be empty\",\n urls_requested: 0,\n urls_processed: 0,\n urls_failed: 0,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n if (urls.length > 10) {\n return {\n success: false,\n error: \"Maximum 10 URLs allowed per request\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n // Validate extractEffort if provided\n if (\n options.extractEffort &&\n ![\"normal\", \"high\", \"auto\"].includes(options.extractEffort)\n ) {\n return {\n success: false,\n error: \"extractEffort must be 'normal', 'high', or 'auto'\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n // Validate responseLength if provided\n if (options.responseLength !== undefined) {\n const validLengths = [\"short\", \"medium\", \"large\", \"max\"];\n if (\n typeof options.responseLength === \"string\" &&\n !validLengths.includes(options.responseLength)\n ) {\n return {\n success: false,\n error:\n \"responseLength must be 'short', 'medium', 'large', 'max', or a number\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n if (\n typeof options.responseLength === \"number\" &&\n options.responseLength <= 0\n ) {\n return {\n success: false,\n error: \"responseLength number must be positive\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n }\n\n // Build payload with snake_case for API\n const payload: Record<string, any> = {\n urls,\n };\n\n // Add optional parameters only if provided\n if (options.summary !== undefined) {\n payload.summary = options.summary;\n }\n\n if (options.extractEffort !== undefined) {\n payload.extract_effort = options.extractEffort;\n }\n\n if (options.responseLength !== undefined) {\n payload.response_length = options.responseLength;\n }\n\n if (options.maxPriceDollars !== undefined) {\n payload.max_price_dollars = options.maxPriceDollars;\n }\n\n const response = await axios.post(`${this.baseUrl}/contents`, payload, {\n headers: this.headers,\n });\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error || \"Request failed\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n }\n\n /**\n * DeepResearch: Create a new research task\n */\n private async _deepresearchCreate(\n options: DeepResearchCreateOptions\n ): Promise<DeepResearchCreateResponse> {\n try {\n // Validation\n if (!options.input?.trim()) {\n return {\n success: false,\n error: \"input is required and cannot be empty\",\n };\n }\n\n // Build payload with snake_case\n const payload: Record<string, any> = {\n input: options.input,\n model: options.model || \"lite\",\n output_formats: options.outputFormats || [\"markdown\"],\n code_execution: options.codeExecution !== false,\n };\n\n // Add optional fields\n if (options.strategy) payload.strategy = options.strategy;\n if (options.search) {\n payload.search = {\n search_type: options.search.searchType,\n included_sources: options.search.includedSources,\n };\n }\n if (options.urls) payload.urls = options.urls;\n if (options.files) payload.files = options.files;\n if (options.mcpServers) payload.mcp_servers = options.mcpServers;\n if (options.previousReports) {\n payload.previous_reports = options.previousReports;\n }\n if (options.webhookUrl) payload.webhook_url = options.webhookUrl;\n if (options.metadata) payload.metadata = options.metadata;\n\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks`,\n payload,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Get task status\n */\n private async _deepresearchStatus(\n taskId: string\n ): Promise<DeepResearchStatusResponse> {\n try {\n const response = await axios.get(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/status`,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Wait for task completion with polling\n */\n private async _deepresearchWait(\n taskId: string,\n options: WaitOptions = {}\n ): Promise<DeepResearchStatusResponse> {\n const pollInterval = options.pollInterval || 5000;\n const maxWaitTime = options.maxWaitTime || 3600000;\n const startTime = Date.now();\n\n while (true) {\n const status = await this._deepresearchStatus(taskId);\n\n if (!status.success) {\n throw new Error(status.error);\n }\n\n // Notify progress callback\n if (options.onProgress) {\n options.onProgress(status);\n }\n\n // Terminal states\n if (\n status.status === \"completed\" ||\n status.status === \"failed\" ||\n status.status === \"cancelled\"\n ) {\n return status;\n }\n\n // Check timeout\n if (Date.now() - startTime > maxWaitTime) {\n throw new Error(\"Maximum wait time exceeded\");\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n /**\n * DeepResearch: Stream real-time updates\n */\n private async _deepresearchStream(\n taskId: string,\n callback: StreamCallback\n ): Promise<void> {\n let isComplete = false;\n let lastMessageCount = 0;\n\n while (!isComplete) {\n try {\n const status = await this._deepresearchStatus(taskId);\n\n if (!status.success) {\n if (callback.onError) {\n callback.onError(new Error(status.error));\n }\n return;\n }\n\n // Progress updates\n if (status.progress && callback.onProgress) {\n callback.onProgress(\n status.progress.current_step,\n status.progress.total_steps\n );\n }\n\n // New messages\n if (status.messages && callback.onMessage) {\n const newMessages = status.messages.slice(lastMessageCount);\n newMessages.forEach((msg) => callback.onMessage!(msg));\n lastMessageCount = status.messages.length;\n }\n\n // Terminal states\n if (status.status === \"completed\") {\n if (callback.onComplete) {\n callback.onComplete(status);\n }\n isComplete = true;\n } else if (\n status.status === \"failed\" ||\n status.status === \"cancelled\"\n ) {\n if (callback.onError) {\n callback.onError(\n new Error(status.error || `Task ${status.status}`)\n );\n }\n isComplete = true;\n }\n\n if (!isComplete) {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n } catch (error: any) {\n if (callback.onError) {\n callback.onError(error);\n }\n throw error;\n }\n }\n }\n\n /**\n * DeepResearch: List all tasks\n */\n private async _deepresearchList(\n options: ListOptions\n ): Promise<DeepResearchListResponse> {\n try {\n const limit = options.limit || 10;\n const response = await axios.get(\n `${this.baseUrl}/deepresearch/listtasks?api_key_id=${options.apiKeyId}&limit=${limit}`,\n { headers: this.headers }\n );\n\n return { success: true, data: response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Add follow-up instruction\n */\n private async _deepresearchUpdate(\n taskId: string,\n instruction: string\n ): Promise<DeepResearchUpdateResponse> {\n try {\n if (!instruction?.trim()) {\n return {\n success: false,\n error: \"instruction is required and cannot be empty\",\n };\n }\n\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/update`,\n { instruction },\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Cancel task\n */\n private async _deepresearchCancel(\n taskId: string\n ): Promise<DeepResearchCancelResponse> {\n try {\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/cancel`,\n {},\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Delete task\n */\n private async _deepresearchDelete(\n taskId: string\n ): Promise<DeepResearchDeleteResponse> {\n try {\n const response = await axios.delete(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/delete`,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Toggle public flag\n */\n private async _deepresearchTogglePublic(\n taskId: string,\n isPublic: boolean\n ): Promise<DeepResearchTogglePublicResponse> {\n try {\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/public`,\n { public: isPublic },\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * Get AI-powered answers using the Valyu Answer API\n * @param query - The question or query string\n * @param options - Answer configuration options\n * @param options.structuredOutput - JSON Schema object for structured responses\n * @param options.systemInstructions - Custom system-level instructions (max 2000 chars)\n * @param options.searchType - Type of search: \"web\", \"proprietary\", \"all\", or \"news\"\n * @param options.dataMaxPrice - Maximum spend (USD) for data retrieval\n * @param options.countryCode - Country code filter for search results\n * @param options.includedSources - List of specific sources to include\n * @param options.excludedSources - List of URLs/domains to exclude from search results\n * @param options.startDate - Start date filter (YYYY-MM-DD format)\n * @param options.endDate - End date filter (YYYY-MM-DD format)\n * @param options.fastMode - Fast mode for quicker but shorter results (default: false)\n * @param options.streaming - Enable streaming mode (default: false)\n * @returns Promise resolving to answer response, or AsyncGenerator for streaming\n */\n async answer(\n query: string,\n options: AnswerOptions = {}\n ): Promise<AnswerResponse | AsyncGenerator<AnswerStreamChunk, void, unknown>> {\n // Validate inputs first\n const validationError = this.validateAnswerParams(query, options);\n if (validationError) {\n if (options.streaming) {\n return this.createErrorGenerator(validationError);\n }\n return { success: false, error: validationError };\n }\n\n const payload = this.buildAnswerPayload(query, options);\n\n if (options.streaming) {\n return this.streamAnswer(payload);\n } else {\n return this.fetchAnswer(payload);\n }\n }\n\n /**\n * Validate answer parameters\n */\n private validateAnswerParams(query: string, options: AnswerOptions): string | null {\n // Validate query\n if (!query || typeof query !== \"string\" || query.trim().length === 0) {\n return \"Query is required and must be a non-empty string\";\n }\n\n // Validate searchType\n const providedSearchTypeString = options.searchType?.toLowerCase();\n if (\n providedSearchTypeString !== undefined &&\n providedSearchTypeString !== \"web\" &&\n providedSearchTypeString !== \"proprietary\" &&\n providedSearchTypeString !== \"all\" &&\n providedSearchTypeString !== \"news\"\n ) {\n return \"Invalid searchType provided. Must be one of: all, web, proprietary, news\";\n }\n\n // Validate systemInstructions\n if (options.systemInstructions !== undefined) {\n if (typeof options.systemInstructions !== \"string\") {\n return \"systemInstructions must be a string\";\n }\n const trimmed = options.systemInstructions.trim();\n if (trimmed.length === 0) {\n return \"systemInstructions cannot be empty when provided\";\n }\n if (trimmed.length > 2000) {\n return \"systemInstructions must be 2000 characters or less\";\n }\n }\n\n // Validate dataMaxPrice\n if (options.dataMaxPrice !== undefined) {\n if (typeof options.dataMaxPrice !== \"number\" || options.dataMaxPrice <= 0) {\n return \"dataMaxPrice must be a positive number\";\n }\n }\n\n // Validate date formats\n if (options.startDate && !this.validateDateFormat(options.startDate)) {\n return \"Invalid startDate format. Must be YYYY-MM-DD\";\n }\n if (options.endDate && !this.validateDateFormat(options.endDate)) {\n return \"Invalid endDate format. Must be YYYY-MM-DD\";\n }\n if (options.startDate && options.endDate) {\n const startDate = new Date(options.startDate);\n const endDate = new Date(options.endDate);\n if (startDate > endDate) {\n return \"startDate must be before endDate\";\n }\n }\n\n // Validate sources\n if (options.includedSources !== undefined) {\n if (!Array.isArray(options.includedSources)) {\n return \"includedSources must be an array\";\n }\n const validation = this.validateSources(options.includedSources);\n if (!validation.valid) {\n return `Invalid includedSources format. Invalid sources: ${validation.invalidSources.join(\", \")}.`;\n }\n }\n if (options.excludedSources !== undefined) {\n if (!Array.isArray(options.excludedSources)) {\n return \"excludedSources must be an array\";\n }\n const validation = this.validateSources(options.excludedSources);\n if (!validation.valid) {\n return `Invalid excludedSources format. Invalid sources: ${validation.invalidSources.join(\", \")}.`;\n }\n }\n\n return null;\n }\n\n /**\n * Build payload for answer API\n */\n private buildAnswerPayload(query: string, options: AnswerOptions): Record<string, any> {\n const defaultSearchType: SearchType = \"all\";\n const providedSearchTypeString = options.searchType?.toLowerCase();\n let finalSearchType: SearchType = defaultSearchType;\n\n if (\n providedSearchTypeString === \"web\" ||\n providedSearchTypeString === \"proprietary\" ||\n providedSearchTypeString === \"all\" ||\n providedSearchTypeString === \"news\"\n ) {\n finalSearchType = providedSearchTypeString as SearchType;\n }\n\n const payload: Record<string, any> = {\n query: query.trim(),\n search_type: finalSearchType,\n };\n\n if (options.dataMaxPrice !== undefined) payload.data_max_price = options.dataMaxPrice;\n if (options.structuredOutput !== undefined) payload.structured_output = options.structuredOutput;\n if (options.systemInstructions !== undefined) payload.system_instructions = options.systemInstructions.trim();\n if (options.countryCode !== undefined) payload.country_code = options.countryCode;\n if (options.includedSources !== undefined) payload.included_sources = options.includedSources;\n if (options.excludedSources !== undefined) payload.excluded_sources = options.excludedSources;\n if (options.startDate !== undefined) payload.start_date = options.startDate;\n if (options.endDate !== undefined) payload.end_date = options.endDate;\n if (options.fastMode !== undefined) payload.fast_mode = options.fastMode;\n\n return payload;\n }\n\n /**\n * Fetch answer (non-streaming mode)\n */\n private async fetchAnswer(payload: Record<string, any>): Promise<AnswerResponse> {\n try {\n const response = await fetch(`${this.baseUrl}/answer`, {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Accept\": \"text/event-stream\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n return {\n success: false,\n error: errorData.error || `HTTP Error: ${response.status}`,\n };\n }\n\n // Collect streamed data into final response\n let fullContent = \"\";\n let searchResults: SearchResult[] = [];\n let finalMetadata: any = {};\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const dataStr = line.slice(6);\n\n if (dataStr === \"[DONE]\") continue;\n\n try {\n const parsed = JSON.parse(dataStr);\n\n // Handle search results\n if (parsed.search_results && !parsed.success) {\n searchResults = [...searchResults, ...parsed.search_results];\n }\n // Handle content chunks\n else if (parsed.choices) {\n const content = parsed.choices[0]?.delta?.content || \"\";\n if (content) fullContent += content;\n }\n // Handle final metadata\n else if (parsed.success !== undefined) {\n finalMetadata = parsed;\n }\n } catch {\n continue;\n }\n }\n }\n }\n\n // Build final response\n if (finalMetadata.success) {\n const finalSearchResults = finalMetadata.search_results || searchResults;\n return {\n success: true,\n ai_tx_id: finalMetadata.ai_tx_id || \"\",\n original_query: finalMetadata.original_query || payload.query,\n contents: fullContent || finalMetadata.contents || \"\",\n data_type: finalMetadata.data_type || \"unstructured\",\n search_results: finalSearchResults,\n search_metadata: finalMetadata.search_metadata || { tx_ids: [], number_of_results: 0, total_characters: 0 },\n ai_usage: finalMetadata.ai_usage || { input_tokens: 0, output_tokens: 0 },\n cost: finalMetadata.cost || { total_deduction_dollars: 0, search_deduction_dollars: 0, ai_deduction_dollars: 0 },\n } as AnswerSuccessResponse;\n }\n\n return {\n success: false,\n error: finalMetadata.error || \"Unknown error occurred\",\n };\n } catch (e: any) {\n return {\n success: false,\n error: e.message || \"Request failed\",\n };\n }\n }\n\n /**\n * Stream answer using SSE\n */\n private async *streamAnswer(payload: Record<string, any>): AsyncGenerator<AnswerStreamChunk, void, unknown> {\n try {\n const response = await fetch(`${this.baseUrl}/answer`, {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Accept\": \"text/event-stream\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n yield { type: \"error\", error: errorData.error || `HTTP Error: ${response.status}` };\n return;\n }\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n if (!reader) {\n yield { type: \"error\", error: \"No response body\" };\n return;\n }\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const dataStr = line.slice(6);\n\n if (dataStr === \"[DONE]\") {\n yield { type: \"done\" };\n continue;\n }\n\n try {\n const parsed = JSON.parse(dataStr);\n\n // Handle search results\n if (parsed.search_results && parsed.success === undefined) {\n yield { type: \"search_results\", search_results: parsed.search_results };\n }\n // Handle content chunks\n else if (parsed.choices) {\n const delta = parsed.choices[0]?.delta || {};\n const content = delta.content || \"\";\n const finishReason = parsed.choices[0]?.finish_reason;\n\n if (content || finishReason) {\n yield { type: \"content\", content, finish_reason: finishReason };\n }\n }\n // Handle final metadata\n else if (parsed.success !== undefined) {\n yield {\n type: \"metadata\",\n ai_tx_id: parsed.ai_tx_id,\n original_query: parsed.original_query,\n data_type: parsed.data_type,\n search_results: parsed.search_results,\n search_metadata: parsed.search_metadata,\n ai_usage: parsed.ai_usage,\n cost: parsed.cost,\n };\n }\n } catch {\n continue;\n }\n }\n }\n } catch (e: any) {\n yield { type: \"error\", error: e.message || \"Stream failed\" };\n }\n }\n\n /**\n * Create an error generator for streaming errors\n */\n private async *createErrorGenerator(error: string): AsyncGenerator<AnswerStreamChunk, void, unknown> {\n yield { type: \"error\", error };\n }\n}\n\nexport type {\n SearchResponse,\n SearchType,\n SearchResult,\n FeedbackSentiment,\n FeedbackResponse,\n SearchOptions,\n CountryCode,\n ResponseLength,\n ContentsOptions,\n ContentsResponse,\n ContentResult,\n ExtractEffort,\n ContentResponseLength,\n AnswerOptions,\n AnswerResponse,\n AnswerSuccessResponse,\n AnswerErrorResponse,\n AnswerStreamChunk,\n AnswerStreamChunkType,\n SearchMetadata,\n AIUsage,\n Cost,\n DeepResearchMode,\n DeepResearchStatus,\n DeepResearchOutputFormat,\n ImageType,\n ChartType,\n FileAttachment,\n MCPServerConfig,\n DeepResearchSearchConfig,\n DeepResearchCreateOptions,\n Progress,\n ChartDataPoint,\n ChartDataSeries,\n ImageMetadata,\n DeepResearchSource,\n DeepResearchUsage,\n DeepResearchCreateResponse,\n DeepResearchStatusResponse,\n DeepResearchTaskListItem,\n DeepResearchListResponse,\n DeepResearchUpdateResponse,\n DeepResearchCancelResponse,\n DeepResearchDeleteResponse,\n DeepResearchTogglePublicResponse,\n WaitOptions,\n StreamCallback,\n ListOptions,\n} from \"./types\";\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios from \"axios\";\nimport {\n SearchResponse,\n SearchType,\n SearchOptions,\n ContentsOptions,\n ContentsResponse,\n AnswerOptions,\n AnswerResponse,\n AnswerSuccessResponse,\n AnswerStreamChunk,\n SearchResult,\n DeepResearchCreateOptions,\n DeepResearchCreateResponse,\n DeepResearchStatusResponse,\n DeepResearchListResponse,\n DeepResearchUpdateResponse,\n DeepResearchCancelResponse,\n DeepResearchDeleteResponse,\n DeepResearchTogglePublicResponse,\n WaitOptions,\n StreamCallback,\n ListOptions,\n} from \"./types\";\n\n\n// Valyu API client\nexport class Valyu {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n // DeepResearch namespace\n public deepresearch: {\n create: (options: DeepResearchCreateOptions) => Promise<DeepResearchCreateResponse>;\n status: (taskId: string) => Promise<DeepResearchStatusResponse>;\n wait: (taskId: string, options?: WaitOptions) => Promise<DeepResearchStatusResponse>;\n stream: (taskId: string, callback: StreamCallback) => Promise<void>;\n list: (options: ListOptions) => Promise<DeepResearchListResponse>;\n update: (taskId: string, instruction: string) => Promise<DeepResearchUpdateResponse>;\n cancel: (taskId: string) => Promise<DeepResearchCancelResponse>;\n delete: (taskId: string) => Promise<DeepResearchDeleteResponse>;\n togglePublic: (taskId: string, isPublic: boolean) => Promise<DeepResearchTogglePublicResponse>;\n };\n\n constructor(\n apiKey?: string,\n baseUrl: string = \"https://api.valyu.ai/v1\"\n ) {\n if (!apiKey) {\n apiKey = process.env.VALYU_API_KEY;\n if (!apiKey) {\n throw new Error(\"VALYU_API_KEY is not set\");\n }\n }\n this.baseUrl = baseUrl;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n };\n\n // Initialize DeepResearch namespace\n this.deepresearch = {\n create: this._deepresearchCreate.bind(this),\n status: this._deepresearchStatus.bind(this),\n wait: this._deepresearchWait.bind(this),\n stream: this._deepresearchStream.bind(this),\n list: this._deepresearchList.bind(this),\n update: this._deepresearchUpdate.bind(this),\n cancel: this._deepresearchCancel.bind(this),\n delete: this._deepresearchDelete.bind(this),\n togglePublic: this._deepresearchTogglePublic.bind(this),\n };\n }\n\n /**\n * Validates date format (YYYY-MM-DD)\n */\n private validateDateFormat(date: string): boolean {\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (!dateRegex.test(date)) {\n return false;\n }\n const parsedDate = new Date(date);\n return parsedDate instanceof Date && !isNaN(parsedDate.getTime());\n }\n\n /**\n * Validates if a string is a valid URL\n */\n private validateUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Validates if a string is a valid domain (with optional path)\n */\n private validateDomain(domain: string): boolean {\n // Domain must have at least one dot and valid structure\n // Supports: example.com, example.com/path, subdomain.example.com/path/to/resource\n const domainRegex =\n /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\\/.+)?$/;\n return domainRegex.test(domain);\n }\n\n /**\n * Validates if a string is a valid dataset identifier (provider/datasetname)\n */\n private validateDatasetId(datasetId: string): boolean {\n // Dataset format: provider/datasetname (exactly one slash)\n // Provider and dataset name can contain alphanumeric, hyphens, underscores\n const parts = datasetId.split(\"/\");\n if (parts.length !== 2) return false;\n\n const providerRegex = /^[a-zA-Z0-9_-]+$/;\n const datasetRegex = /^[a-zA-Z0-9_-]+$/;\n\n return (\n providerRegex.test(parts[0]) &&\n datasetRegex.test(parts[1]) &&\n parts[0].length > 0 &&\n parts[1].length > 0\n );\n }\n\n /**\n * Validates source strings (domains, URLs, or dataset IDs)\n */\n private validateSource(source: string): boolean {\n // Check if it's a valid URL\n if (this.validateUrl(source)) {\n return true;\n }\n\n // Check if it's a valid domain (with optional path)\n if (this.validateDomain(source)) {\n return true;\n }\n\n // Check if it's a valid dataset identifier\n if (this.validateDatasetId(source)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Validates an array of source strings\n */\n private validateSources(sources: string[]): {\n valid: boolean;\n invalidSources: string[];\n } {\n const invalidSources: string[] = [];\n\n for (const source of sources) {\n if (!this.validateSource(source)) {\n invalidSources.push(source);\n }\n }\n\n return {\n valid: invalidSources.length === 0,\n invalidSources,\n };\n }\n\n /**\n * Search for information using the Valyu DeepSearch API\n * @param query - The search query string\n * @param options - Search configuration options\n * @param options.searchType - Type of search: \"web\", \"proprietary\", \"all\", or \"news\"\n * @param options.maxNumResults - Maximum number of results (1-100)\n * @param options.maxPrice - Maximum price per thousand characters (CPM)\n * @param options.isToolCall - Whether this is a tool call\n * @param options.relevanceThreshold - Minimum relevance score (0-1)\n * @param options.includedSources - List of specific sources to include\n * @param options.excludeSources - List of URLs/domains to exclude from search results\n * @param options.category - Category filter for search results\n * @param options.startDate - Start date filter (YYYY-MM-DD format)\n * @param options.endDate - End date filter (YYYY-MM-DD format)\n * @param options.countryCode - Country code filter for search results\n * @param options.responseLength - Response content length: \"short\"/\"medium\"/\"large\"/\"max\" or integer character count\n * @param options.fastMode - Fast mode for quicker but shorter results (default: false)\n * @param options.urlOnly - Returns shortened snippets (default: false)\n * @returns Promise resolving to search results\n */\n async search(\n query: string,\n options: SearchOptions = {}\n ): Promise<SearchResponse> {\n try {\n // Default values\n const defaultSearchType: SearchType = \"all\";\n const defaultMaxNumResults = 10;\n const defaultIsToolCall = true;\n const defaultRelevanceThreshold = 0.5;\n\n // Validate searchType\n let finalSearchType: SearchType = defaultSearchType;\n const providedSearchTypeString = options.searchType?.toLowerCase();\n\n if (\n providedSearchTypeString === \"web\" ||\n providedSearchTypeString === \"proprietary\" ||\n providedSearchTypeString === \"all\" ||\n providedSearchTypeString === \"news\"\n ) {\n finalSearchType = providedSearchTypeString as SearchType;\n } else if (options.searchType !== undefined) {\n return {\n success: false,\n error:\n \"Invalid searchType provided. Must be one of: all, web, proprietary, news\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate date formats\n if (options.startDate && !this.validateDateFormat(options.startDate)) {\n return {\n success: false,\n error: \"Invalid startDate format. Must be YYYY-MM-DD\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n if (options.endDate && !this.validateDateFormat(options.endDate)) {\n return {\n success: false,\n error: \"Invalid endDate format. Must be YYYY-MM-DD\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate maxNumResults range\n const maxNumResults = options.maxNumResults ?? defaultMaxNumResults;\n if (maxNumResults < 1 || maxNumResults > 100) {\n return {\n success: false,\n error: \"maxNumResults must be between 1 and 100\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n // Validate includedSources format\n if (options.includedSources !== undefined) {\n if (!Array.isArray(options.includedSources)) {\n return {\n success: false,\n error: \"includedSources must be an array\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n const includedSourcesValidation = this.validateSources(\n options.includedSources\n );\n if (!includedSourcesValidation.valid) {\n return {\n success: false,\n error: `Invalid includedSources format. Invalid sources: ${includedSourcesValidation.invalidSources.join(\n \", \"\n )}. Sources must be valid URLs, domains (with optional paths), or dataset identifiers in 'provider/dataset' format.`,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n // Validate excludeSources format\n if (options.excludeSources !== undefined) {\n if (!Array.isArray(options.excludeSources)) {\n return {\n success: false,\n error: \"excludeSources must be an array\",\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n const excludeSourcesValidation = this.validateSources(\n options.excludeSources\n );\n if (!excludeSourcesValidation.valid) {\n return {\n success: false,\n error: `Invalid excludeSources format. Invalid sources: ${excludeSourcesValidation.invalidSources.join(\n \", \"\n )}. Sources must be valid URLs, domains (with optional paths), or dataset identifiers in 'provider/dataset' format.`,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n // Build payload with snake_case for API\n const payload: Record<string, any> = {\n query,\n search_type: finalSearchType,\n max_num_results: maxNumResults,\n is_tool_call: options.isToolCall ?? defaultIsToolCall,\n relevance_threshold:\n options.relevanceThreshold ?? defaultRelevanceThreshold,\n };\n\n // Add maxPrice only if explicitly provided\n if (options.maxPrice !== undefined) {\n payload.max_price = options.maxPrice;\n }\n\n // Add optional parameters only if provided\n if (options.includedSources !== undefined) {\n payload.included_sources = options.includedSources;\n }\n\n if (options.excludeSources !== undefined) {\n payload.exclude_sources = options.excludeSources;\n }\n\n if (options.category !== undefined) {\n payload.category = options.category;\n }\n\n if (options.startDate !== undefined) {\n payload.start_date = options.startDate;\n }\n\n if (options.endDate !== undefined) {\n payload.end_date = options.endDate;\n }\n\n if (options.countryCode !== undefined) {\n payload.country_code = options.countryCode;\n }\n\n if (options.responseLength !== undefined) {\n payload.response_length = options.responseLength;\n }\n\n if (options.fastMode !== undefined) {\n payload.fast_mode = options.fastMode;\n }\n\n if (options.urlOnly !== undefined) {\n payload.url_only = options.urlOnly;\n }\n\n const response = await axios.post(`${this.baseUrl}/deepsearch`, payload, {\n headers: this.headers,\n });\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0,\n };\n }\n }\n\n /**\n * Extract content from URLs with optional AI processing\n * @param urls - Array of URLs to process (max 10)\n * @param options - Content extraction configuration options\n * @param options.summary - AI summary configuration: false (raw), true (auto), string (custom), or JSON schema\n * @param options.extractEffort - Extraction thoroughness: \"normal\" or \"high\"\n * @param options.responseLength - Content length per URL\n * @param options.maxPriceDollars - Maximum cost limit in USD\n * @returns Promise resolving to content extraction results\n */\n async contents(\n urls: string[],\n options: ContentsOptions = {}\n ): Promise<ContentsResponse> {\n try {\n // Validate URLs array\n if (!urls || !Array.isArray(urls)) {\n return {\n success: false,\n error: \"urls must be an array\",\n urls_requested: 0,\n urls_processed: 0,\n urls_failed: 0,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n if (urls.length === 0) {\n return {\n success: false,\n error: \"urls array cannot be empty\",\n urls_requested: 0,\n urls_processed: 0,\n urls_failed: 0,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n if (urls.length > 10) {\n return {\n success: false,\n error: \"Maximum 10 URLs allowed per request\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n // Validate extractEffort if provided\n if (\n options.extractEffort &&\n ![\"normal\", \"high\", \"auto\"].includes(options.extractEffort)\n ) {\n return {\n success: false,\n error: \"extractEffort must be 'normal', 'high', or 'auto'\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n // Validate responseLength if provided\n if (options.responseLength !== undefined) {\n const validLengths = [\"short\", \"medium\", \"large\", \"max\"];\n if (\n typeof options.responseLength === \"string\" &&\n !validLengths.includes(options.responseLength)\n ) {\n return {\n success: false,\n error:\n \"responseLength must be 'short', 'medium', 'large', 'max', or a number\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n if (\n typeof options.responseLength === \"number\" &&\n options.responseLength <= 0\n ) {\n return {\n success: false,\n error: \"responseLength number must be positive\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n }\n\n // Build payload with snake_case for API\n const payload: Record<string, any> = {\n urls,\n };\n\n // Add optional parameters only if provided\n if (options.summary !== undefined) {\n payload.summary = options.summary;\n }\n\n if (options.extractEffort !== undefined) {\n payload.extract_effort = options.extractEffort;\n }\n\n if (options.responseLength !== undefined) {\n payload.response_length = options.responseLength;\n }\n\n if (options.maxPriceDollars !== undefined) {\n payload.max_price_dollars = options.maxPriceDollars;\n }\n\n const response = await axios.post(`${this.baseUrl}/contents`, payload, {\n headers: this.headers,\n });\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error || \"Request failed\",\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n urls_requested: urls.length,\n urls_processed: 0,\n urls_failed: urls.length,\n results: [],\n total_cost_dollars: 0,\n total_characters: 0,\n };\n }\n }\n\n /**\n * DeepResearch: Create a new research task\n */\n private async _deepresearchCreate(\n options: DeepResearchCreateOptions\n ): Promise<DeepResearchCreateResponse> {\n try {\n // Validation\n if (!options.input?.trim()) {\n return {\n success: false,\n error: \"input is required and cannot be empty\",\n };\n }\n\n // Build payload with snake_case\n const payload: Record<string, any> = {\n input: options.input,\n model: options.model || \"lite\",\n output_formats: options.outputFormats || [\"markdown\"],\n code_execution: options.codeExecution !== false,\n };\n\n // Add optional fields\n if (options.strategy) payload.strategy = options.strategy;\n if (options.search) {\n payload.search = {\n search_type: options.search.searchType,\n included_sources: options.search.includedSources,\n };\n }\n if (options.urls) payload.urls = options.urls;\n if (options.files) payload.files = options.files;\n if (options.mcpServers) payload.mcp_servers = options.mcpServers;\n if (options.previousReports) {\n payload.previous_reports = options.previousReports;\n }\n if (options.webhookUrl) payload.webhook_url = options.webhookUrl;\n if (options.metadata) payload.metadata = options.metadata;\n\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks`,\n payload,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Get task status\n */\n private async _deepresearchStatus(\n taskId: string\n ): Promise<DeepResearchStatusResponse> {\n try {\n const response = await axios.get(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/status`,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Wait for task completion with polling\n */\n private async _deepresearchWait(\n taskId: string,\n options: WaitOptions = {}\n ): Promise<DeepResearchStatusResponse> {\n const pollInterval = options.pollInterval || 5000;\n const maxWaitTime = options.maxWaitTime || 3600000;\n const startTime = Date.now();\n\n while (true) {\n const status = await this._deepresearchStatus(taskId);\n\n if (!status.success) {\n throw new Error(status.error);\n }\n\n // Notify progress callback\n if (options.onProgress) {\n options.onProgress(status);\n }\n\n // Terminal states\n if (\n status.status === \"completed\" ||\n status.status === \"failed\" ||\n status.status === \"cancelled\"\n ) {\n return status;\n }\n\n // Check timeout\n if (Date.now() - startTime > maxWaitTime) {\n throw new Error(\"Maximum wait time exceeded\");\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n /**\n * DeepResearch: Stream real-time updates\n */\n private async _deepresearchStream(\n taskId: string,\n callback: StreamCallback\n ): Promise<void> {\n let isComplete = false;\n let lastMessageCount = 0;\n\n while (!isComplete) {\n try {\n const status = await this._deepresearchStatus(taskId);\n\n if (!status.success) {\n if (callback.onError) {\n callback.onError(new Error(status.error));\n }\n return;\n }\n\n // Progress updates\n if (status.progress && callback.onProgress) {\n callback.onProgress(\n status.progress.current_step,\n status.progress.total_steps\n );\n }\n\n // New messages\n if (status.messages && callback.onMessage) {\n const newMessages = status.messages.slice(lastMessageCount);\n newMessages.forEach((msg) => callback.onMessage!(msg));\n lastMessageCount = status.messages.length;\n }\n\n // Terminal states\n if (status.status === \"completed\") {\n if (callback.onComplete) {\n callback.onComplete(status);\n }\n isComplete = true;\n } else if (\n status.status === \"failed\" ||\n status.status === \"cancelled\"\n ) {\n if (callback.onError) {\n callback.onError(\n new Error(status.error || `Task ${status.status}`)\n );\n }\n isComplete = true;\n }\n\n if (!isComplete) {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n } catch (error: any) {\n if (callback.onError) {\n callback.onError(error);\n }\n throw error;\n }\n }\n }\n\n /**\n * DeepResearch: List all tasks\n */\n private async _deepresearchList(\n options: ListOptions\n ): Promise<DeepResearchListResponse> {\n try {\n const limit = options.limit || 10;\n const response = await axios.get(\n `${this.baseUrl}/deepresearch/listtasks?api_key_id=${options.apiKeyId}&limit=${limit}`,\n { headers: this.headers }\n );\n\n return { success: true, data: response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Add follow-up instruction\n */\n private async _deepresearchUpdate(\n taskId: string,\n instruction: string\n ): Promise<DeepResearchUpdateResponse> {\n try {\n if (!instruction?.trim()) {\n return {\n success: false,\n error: \"instruction is required and cannot be empty\",\n };\n }\n\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/update`,\n { instruction },\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Cancel task\n */\n private async _deepresearchCancel(\n taskId: string\n ): Promise<DeepResearchCancelResponse> {\n try {\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/cancel`,\n {},\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Delete task\n */\n private async _deepresearchDelete(\n taskId: string\n ): Promise<DeepResearchDeleteResponse> {\n try {\n const response = await axios.delete(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/delete`,\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * DeepResearch: Toggle public flag\n */\n private async _deepresearchTogglePublic(\n taskId: string,\n isPublic: boolean\n ): Promise<DeepResearchTogglePublicResponse> {\n try {\n const response = await axios.post(\n `${this.baseUrl}/deepresearch/tasks/${taskId}/public`,\n { public: isPublic },\n { headers: this.headers }\n );\n\n return { success: true, ...response.data };\n } catch (e: any) {\n return {\n success: false,\n error: e.response?.data?.error || e.message,\n };\n }\n }\n\n /**\n * Get AI-powered answers using the Valyu Answer API\n * @param query - The question or query string\n * @param options - Answer configuration options\n * @param options.structuredOutput - JSON Schema object for structured responses\n * @param options.systemInstructions - Custom system-level instructions (max 2000 chars)\n * @param options.searchType - Type of search: \"web\", \"proprietary\", \"all\", or \"news\"\n * @param options.dataMaxPrice - Maximum spend (USD) for data retrieval\n * @param options.countryCode - Country code filter for search results\n * @param options.includedSources - List of specific sources to include\n * @param options.excludedSources - List of URLs/domains to exclude from search results\n * @param options.startDate - Start date filter (YYYY-MM-DD format)\n * @param options.endDate - End date filter (YYYY-MM-DD format)\n * @param options.fastMode - Fast mode for quicker but shorter results (default: false)\n * @param options.streaming - Enable streaming mode (default: false)\n * @returns Promise resolving to answer response, or AsyncGenerator for streaming\n */\n async answer(\n query: string,\n options: AnswerOptions = {}\n ): Promise<AnswerResponse | AsyncGenerator<AnswerStreamChunk, void, unknown>> {\n // Validate inputs first\n const validationError = this.validateAnswerParams(query, options);\n if (validationError) {\n if (options.streaming) {\n return this.createErrorGenerator(validationError);\n }\n return { success: false, error: validationError };\n }\n\n const payload = this.buildAnswerPayload(query, options);\n\n if (options.streaming) {\n return this.streamAnswer(payload);\n } else {\n return this.fetchAnswer(payload);\n }\n }\n\n /**\n * Validate answer parameters\n */\n private validateAnswerParams(query: string, options: AnswerOptions): string | null {\n // Validate query\n if (!query || typeof query !== \"string\" || query.trim().length === 0) {\n return \"Query is required and must be a non-empty string\";\n }\n\n // Validate searchType\n const providedSearchTypeString = options.searchType?.toLowerCase();\n if (\n providedSearchTypeString !== undefined &&\n providedSearchTypeString !== \"web\" &&\n providedSearchTypeString !== \"proprietary\" &&\n providedSearchTypeString !== \"all\" &&\n providedSearchTypeString !== \"news\"\n ) {\n return \"Invalid searchType provided. Must be one of: all, web, proprietary, news\";\n }\n\n // Validate systemInstructions\n if (options.systemInstructions !== undefined) {\n if (typeof options.systemInstructions !== \"string\") {\n return \"systemInstructions must be a string\";\n }\n const trimmed = options.systemInstructions.trim();\n if (trimmed.length === 0) {\n return \"systemInstructions cannot be empty when provided\";\n }\n if (trimmed.length > 2000) {\n return \"systemInstructions must be 2000 characters or less\";\n }\n }\n\n // Validate dataMaxPrice\n if (options.dataMaxPrice !== undefined) {\n if (typeof options.dataMaxPrice !== \"number\" || options.dataMaxPrice <= 0) {\n return \"dataMaxPrice must be a positive number\";\n }\n }\n\n // Validate date formats\n if (options.startDate && !this.validateDateFormat(options.startDate)) {\n return \"Invalid startDate format. Must be YYYY-MM-DD\";\n }\n if (options.endDate && !this.validateDateFormat(options.endDate)) {\n return \"Invalid endDate format. Must be YYYY-MM-DD\";\n }\n if (options.startDate && options.endDate) {\n const startDate = new Date(options.startDate);\n const endDate = new Date(options.endDate);\n if (startDate > endDate) {\n return \"startDate must be before endDate\";\n }\n }\n\n // Validate sources\n if (options.includedSources !== undefined) {\n if (!Array.isArray(options.includedSources)) {\n return \"includedSources must be an array\";\n }\n const validation = this.validateSources(options.includedSources);\n if (!validation.valid) {\n return `Invalid includedSources format. Invalid sources: ${validation.invalidSources.join(\", \")}.`;\n }\n }\n if (options.excludedSources !== undefined) {\n if (!Array.isArray(options.excludedSources)) {\n return \"excludedSources must be an array\";\n }\n const validation = this.validateSources(options.excludedSources);\n if (!validation.valid) {\n return `Invalid excludedSources format. Invalid sources: ${validation.invalidSources.join(\", \")}.`;\n }\n }\n\n return null;\n }\n\n /**\n * Build payload for answer API\n */\n private buildAnswerPayload(query: string, options: AnswerOptions): Record<string, any> {\n const defaultSearchType: SearchType = \"all\";\n const providedSearchTypeString = options.searchType?.toLowerCase();\n let finalSearchType: SearchType = defaultSearchType;\n\n if (\n providedSearchTypeString === \"web\" ||\n providedSearchTypeString === \"proprietary\" ||\n providedSearchTypeString === \"all\" ||\n providedSearchTypeString === \"news\"\n ) {\n finalSearchType = providedSearchTypeString as SearchType;\n }\n\n const payload: Record<string, any> = {\n query: query.trim(),\n search_type: finalSearchType,\n };\n\n if (options.dataMaxPrice !== undefined) payload.data_max_price = options.dataMaxPrice;\n if (options.structuredOutput !== undefined) payload.structured_output = options.structuredOutput;\n if (options.systemInstructions !== undefined) payload.system_instructions = options.systemInstructions.trim();\n if (options.countryCode !== undefined) payload.country_code = options.countryCode;\n if (options.includedSources !== undefined) payload.included_sources = options.includedSources;\n if (options.excludedSources !== undefined) payload.excluded_sources = options.excludedSources;\n if (options.startDate !== undefined) payload.start_date = options.startDate;\n if (options.endDate !== undefined) payload.end_date = options.endDate;\n if (options.fastMode !== undefined) payload.fast_mode = options.fastMode;\n\n return payload;\n }\n\n /**\n * Fetch answer (non-streaming mode)\n */\n private async fetchAnswer(payload: Record<string, any>): Promise<AnswerResponse> {\n try {\n const response = await fetch(`${this.baseUrl}/answer`, {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Accept\": \"text/event-stream\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n return {\n success: false,\n error: errorData.error || `HTTP Error: ${response.status}`,\n };\n }\n\n // Collect streamed data into final response\n let fullContent = \"\";\n let searchResults: SearchResult[] = [];\n let finalMetadata: any = {};\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const dataStr = line.slice(6);\n\n if (dataStr === \"[DONE]\") continue;\n\n try {\n const parsed = JSON.parse(dataStr);\n\n // Handle search results\n if (parsed.search_results && !parsed.success) {\n searchResults = [...searchResults, ...parsed.search_results];\n }\n // Handle content chunks\n else if (parsed.choices) {\n const content = parsed.choices[0]?.delta?.content || \"\";\n if (content) fullContent += content;\n }\n // Handle final metadata\n else if (parsed.success !== undefined) {\n finalMetadata = parsed;\n }\n } catch {\n continue;\n }\n }\n }\n }\n\n // Build final response\n if (finalMetadata.success) {\n const finalSearchResults = finalMetadata.search_results || searchResults;\n const response: AnswerSuccessResponse = {\n success: true,\n tx_id: finalMetadata.tx_id || \"\",\n original_query: finalMetadata.original_query || payload.query,\n contents: fullContent || finalMetadata.contents || \"\",\n data_type: finalMetadata.data_type || \"unstructured\",\n search_results: finalSearchResults,\n search_metadata: finalMetadata.search_metadata || { tx_ids: [], number_of_results: 0, total_characters: 0 },\n ai_usage: finalMetadata.ai_usage || { input_tokens: 0, output_tokens: 0 },\n cost: finalMetadata.cost || { total_deduction_dollars: 0, search_deduction_dollars: 0, ai_deduction_dollars: 0 },\n };\n if (finalMetadata.extraction_metadata) {\n response.extraction_metadata = finalMetadata.extraction_metadata;\n }\n return response;\n }\n\n return {\n success: false,\n error: finalMetadata.error || \"Unknown error occurred\",\n };\n } catch (e: any) {\n return {\n success: false,\n error: e.message || \"Request failed\",\n };\n }\n }\n\n /**\n * Stream answer using SSE\n */\n private async *streamAnswer(payload: Record<string, any>): AsyncGenerator<AnswerStreamChunk, void, unknown> {\n try {\n const response = await fetch(`${this.baseUrl}/answer`, {\n method: \"POST\",\n headers: {\n ...this.headers,\n \"Accept\": \"text/event-stream\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n yield { type: \"error\", error: errorData.error || `HTTP Error: ${response.status}` };\n return;\n }\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n if (!reader) {\n yield { type: \"error\", error: \"No response body\" };\n return;\n }\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const dataStr = line.slice(6);\n\n if (dataStr === \"[DONE]\") {\n yield { type: \"done\" };\n continue;\n }\n\n try {\n const parsed = JSON.parse(dataStr);\n\n // Handle search results\n if (parsed.search_results && parsed.success === undefined) {\n yield { type: \"search_results\", search_results: parsed.search_results };\n }\n // Handle content chunks\n else if (parsed.choices) {\n const delta = parsed.choices[0]?.delta || {};\n const content = delta.content || \"\";\n const finishReason = parsed.choices[0]?.finish_reason;\n\n if (content || finishReason) {\n yield { type: \"content\", content, finish_reason: finishReason };\n }\n }\n // Handle final metadata\n else if (parsed.success !== undefined) {\n yield {\n type: \"metadata\",\n tx_id: parsed.tx_id,\n original_query: parsed.original_query,\n data_type: parsed.data_type,\n search_results: parsed.search_results,\n search_metadata: parsed.search_metadata,\n ai_usage: parsed.ai_usage,\n cost: parsed.cost,\n extraction_metadata: parsed.extraction_metadata,\n };\n }\n } catch {\n continue;\n }\n }\n }\n } catch (e: any) {\n yield { type: \"error\", error: e.message || \"Stream failed\" };\n }\n }\n\n /**\n * Create an error generator for streaming errors\n */\n private async *createErrorGenerator(error: string): AsyncGenerator<AnswerStreamChunk, void, unknown> {\n yield { type: \"error\", error };\n }\n}\n\nexport type {\n SearchResponse,\n SearchType,\n SearchResult,\n FeedbackSentiment,\n FeedbackResponse,\n SearchOptions,\n CountryCode,\n ResponseLength,\n ContentsOptions,\n ContentsResponse,\n ContentResult,\n ExtractEffort,\n ContentResponseLength,\n AnswerOptions,\n AnswerResponse,\n AnswerSuccessResponse,\n AnswerErrorResponse,\n AnswerStreamChunk,\n AnswerStreamChunkType,\n SearchMetadata,\n AIUsage,\n Cost,\n ExtractionMetadata,\n DeepResearchMode,\n DeepResearchStatus,\n DeepResearchOutputFormat,\n ImageType,\n ChartType,\n FileAttachment,\n MCPServerConfig,\n DeepResearchSearchConfig,\n DeepResearchCreateOptions,\n Progress,\n ChartDataPoint,\n ChartDataSeries,\n ImageMetadata,\n DeepResearchSource,\n DeepResearchUsage,\n DeepResearchCreateResponse,\n DeepResearchStatusResponse,\n DeepResearchTaskListItem,\n DeepResearchListResponse,\n DeepResearchUpdateResponse,\n DeepResearchCancelResponse,\n DeepResearchDeleteResponse,\n DeepResearchTogglePublicResponse,\n WaitOptions,\n StreamCallback,\n ListOptions,\n} from \"./types\";\n"],"mappings":"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","names":["response"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valyu-js",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
4
4
  "description": "Deepsearch API for AI.",
5
5
  "files": [
6
6
  "dist"