nosible 0.2.13 → 0.2.14

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/README.md CHANGED
@@ -30,7 +30,7 @@ bun add nosible
30
30
 
31
31
  **Requirements**:
32
32
 
33
- - Node.js 18+
33
+ - Node.js 20+
34
34
  - TypeScript 5+ (for TypeScript projects)
35
35
 
36
36
  **Dependencies**:
package/dist/index.cjs CHANGED
@@ -42,6 +42,10 @@ var __export = (target, all) => {
42
42
  // src/index.ts
43
43
  var exports_src = {};
44
44
  __export(exports_src, {
45
+ userSearchParamsSchema: () => userSearchParamsSchema,
46
+ snippetSchema: () => snippetSchema,
47
+ scrapeResponseSchema: () => scrapeResponseSchema,
48
+ scrapeFullResSchema: () => scrapeFullResSchema,
45
49
  WebPageData: () => WebPageData,
46
50
  TopicTrend: () => TopicTrend,
47
51
  SearchSet: () => SearchSet,
@@ -176,16 +180,16 @@ var snippetStatisticsSchema = import_zod2.z.object({
176
180
  images: import_zod2.z.number().optional()
177
181
  });
178
182
  var snippetSchema = import_zod2.z.object({
179
- url_hash: import_zod2.z.string(),
180
- snippet_hash: import_zod2.z.string(),
181
- prev_snippet_hash: import_zod2.z.string().nullable(),
182
- next_snippet_hash: import_zod2.z.string().nullable(),
183
- content: import_zod2.z.string(),
184
- words: import_zod2.z.string().optional(),
185
- language: import_zod2.z.string(),
186
- statistics: snippetStatisticsSchema.optional(),
187
- links: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional(),
188
- images: import_zod2.z.array(import_zod2.z.string()).optional()
183
+ url_hash: import_zod2.z.string().describe("Hash of the URL from which the snippet was extracted"),
184
+ snippet_hash: import_zod2.z.string().describe("A unique hash for the snippet"),
185
+ prev_snippet_hash: import_zod2.z.string().nullable().describe("Hash of the previous snippet in sequence"),
186
+ next_snippet_hash: import_zod2.z.string().nullable().describe("Hash of the next snippet in sequence"),
187
+ content: import_zod2.z.string().describe("The text content of the snippet"),
188
+ words: import_zod2.z.string().optional().describe("The words in the snippet"),
189
+ language: import_zod2.z.string().describe("The language of the snippet"),
190
+ statistics: snippetStatisticsSchema.optional().describe("Statistical information about the snippet"),
191
+ links: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional().describe("List of links associated with the snippet"),
192
+ images: import_zod2.z.array(import_zod2.z.string()).optional().describe("List of image URLs associated with the snippet")
189
193
  });
190
194
  var scrapeStatisticsSchema = import_zod2.z.object({
191
195
  snippets: import_zod2.z.number(),
@@ -252,20 +256,20 @@ var structuredSchema = import_zod2.z.object({
252
256
  });
253
257
  var urlTreeSchema = import_zod2.z.record(import_zod2.z.string(), import_zod2.z.any());
254
258
  var scrapeResponseSchema = import_zod2.z.object({
255
- request: scrapeRequestSchema,
256
- page: scrapePageSchema,
257
- statistics: scrapeStatisticsSchema,
258
- languages: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.number()),
259
- snippets: import_zod2.z.record(import_zod2.z.string(), snippetSchema),
260
- full_text: import_zod2.z.string(),
261
- metadata: metadataSchema,
262
- structured: import_zod2.z.array(structuredSchema),
263
- url_tree: urlTreeSchema
259
+ request: scrapeRequestSchema.describe("Details of the original scrape request including URL components and proxy settings"),
260
+ page: scrapePageSchema.describe("Basic page metadata like title, description, author, and dates"),
261
+ statistics: scrapeStatisticsSchema.describe("Content statistics including counts of snippets, words, characters, images, and other media"),
262
+ languages: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.number()).describe("Language detection results with language codes and confidence scores"),
263
+ snippets: import_zod2.z.record(import_zod2.z.string(), snippetSchema).describe("Page content broken into manageable snippets with metadata"),
264
+ full_text: import_zod2.z.string().describe("Complete extracted text content from the page"),
265
+ metadata: metadataSchema.describe("Additional metadata extracted from the page as key-value pairs"),
266
+ structured: import_zod2.z.array(structuredSchema).describe("Structured data extracted from the page (JSON-LD, microdata, etc.)"),
267
+ url_tree: urlTreeSchema.describe("Hierarchical structure of URLs found on the page")
264
268
  });
265
269
  var scrapeFullResSchema = import_zod2.z.object({
266
- message: import_zod2.z.string(),
267
- added_to_batch: import_zod2.z.boolean(),
268
- response: scrapeResponseSchema
270
+ message: import_zod2.z.string().describe("Status message describing the scrape operation result"),
271
+ added_to_batch: import_zod2.z.boolean().describe("Indicates if this scrape was added to a batch for processing"),
272
+ response: scrapeResponseSchema.describe("The complete scrape response containing all extracted data")
269
273
  });
270
274
 
271
275
  // src/api/schemas.ts
@@ -911,8 +915,11 @@ class WebPageData {
911
915
  }
912
916
  static async fromJson(client, inputPath) {
913
917
  const data = await importJson({ filePath: inputPath });
914
- const validData = scrapeResponseSchema.parse(data);
915
- return new WebPageData(client, validData);
918
+ const validData = scrapeResponseSchema.safeParse(data);
919
+ if (!validData.success) {
920
+ throw new Error("Provided JSON is not a valid scrape response");
921
+ }
922
+ return new WebPageData(client, validData.data);
916
923
  }
917
924
  async writeJson(outputPath) {
918
925
  return await exportJson(this.data, outputPath);
@@ -1862,4 +1869,4 @@ class NosibleClient {
1862
1869
  }
1863
1870
  }
1864
1871
 
1865
- //# debugId=88064A0B7CBC67C664756E2164756E21
1872
+ //# debugId=A7861032A0192DD264756E2164756E21
@@ -5,14 +5,14 @@
5
5
  "import z from \"zod\";\n\nexport const sqlFilterSchema = z.object({\n publishStart: z.date().optional(),\n publishEnd: z.date().optional(),\n visitedStart: z.date().optional(),\n visitedEnd: z.date().optional(),\n certain: z.boolean().optional(),\n includeNetlocs: z.array(z.string()).max(50).optional(),\n excludeNetlocs: z.array(z.string()).max(50).optional(),\n includeCompanies: z.array(z.string()).max(50).optional(),\n excludeCompanies: z.array(z.string()).max(50).optional(),\n includeDocs: z.array(z.string()).max(50).optional(),\n excludeDocs: z.array(z.string()).max(50).optional(),\n});\n\nexport type SqlFilter = z.infer<typeof sqlFilterSchema>;\n\nexport function generateSqlFilter(input: SqlFilter): string | null {\n const validatedInput = sqlFilterSchema.parse(input);\n const {\n publishStart,\n publishEnd,\n visitedStart,\n visitedEnd,\n certain,\n includeNetlocs,\n excludeNetlocs,\n includeCompanies,\n excludeCompanies,\n includeDocs,\n excludeDocs,\n } = validatedInput;\n const sql: string[] = [\"SELECT loc FROM engine\"];\n const clauses: string[] = [];\n\n // Published date range\n if (publishStart || publishEnd) {\n if (publishStart && publishEnd) {\n clauses.push(\n `published >= '${publishStart.toISOString()}' AND published <= '${publishEnd.toISOString()}'`\n );\n } else if (publishStart) {\n clauses.push(`published >= '${publishStart.toISOString()}'`);\n } else if (publishEnd) {\n clauses.push(`published <= '${publishEnd.toISOString()}'`);\n }\n }\n\n // Visited date range\n if (visitedStart || visitedEnd) {\n if (visitedStart && visitedEnd) {\n clauses.push(\n `visited >= '${visitedStart.toISOString()}' AND visited <= '${visitedEnd.toISOString()}'`\n );\n } else if (visitedStart) {\n clauses.push(`visited >= '${visitedStart.toISOString()}'`);\n } else if (visitedEnd) {\n clauses.push(`visited <= '${visitedEnd.toISOString()}'`);\n }\n }\n\n // Date certainty filter\n if (certain === true) {\n clauses.push(\"certain = TRUE\");\n } else if (certain === false) {\n clauses.push(\"certain = FALSE\");\n }\n\n // Include netlocs with both www/non-www variants\n if (includeNetlocs) {\n const variants = new Set<string>();\n for (const n of includeNetlocs) {\n variants.add(n);\n if (n.startsWith(\"www.\")) {\n variants.add(n.slice(4));\n } else {\n variants.add(\"www.\" + n);\n }\n }\n const inList = Array.from(variants)\n .sort()\n .map((v) => `'${v}'`)\n .join(\", \");\n clauses.push(`netloc IN (${inList})`);\n }\n\n // Exclude netlocs with both www/non-www variants\n if (excludeNetlocs) {\n const variants = new Set<string>();\n for (const n of excludeNetlocs) {\n variants.add(n);\n if (n.startsWith(\"www.\")) {\n variants.add(n.slice(4));\n } else {\n variants.add(\"www.\" + n);\n }\n }\n const exList = Array.from(variants)\n .sort()\n .map((v) => `'${v}'`)\n .join(\", \");\n clauses.push(`netloc NOT IN (${exList})`);\n }\n\n // Include companies\n if (includeCompanies) {\n const companyList = includeCompanies\n .map((c) => `ARRAY_CONTAINS(companies, '${c}')`)\n .join(\" OR \");\n clauses.push(`(companies IS NOT NULL AND (${companyList}))`);\n }\n\n // Exclude companies\n if (excludeCompanies) {\n const companyList = excludeCompanies\n .map((c) => `ARRAY_CONTAINS(companies, '${c}')`)\n .join(\" OR \");\n clauses.push(`(companies IS NULL OR NOT (${companyList}))`);\n }\n\n // Include docs\n if (includeDocs) {\n const docHashes = includeDocs.map((doc) => `'${doc}'`).join(\", \");\n clauses.push(`doc_hash IN (${docHashes})`);\n }\n\n // Exclude docs\n if (excludeDocs) {\n const docHashes = excludeDocs.map((doc) => `'${doc}'`).join(\", \");\n clauses.push(`doc_hash NOT IN (${docHashes})`);\n }\n\n // Join everything\n if (clauses.length > 0) {\n sql.push(\"WHERE \" + clauses.join(\" AND \"));\n }\n\n if (sql.length === 1) {\n return null;\n }\n\n const sqlFilter = sql.join(\" \");\n return sqlFilter;\n}\n",
6
6
  "import {generateSqlFilter, sqlFilterSchema} from \"./sqlFilter\";\nimport {z} from \"zod\";\nimport {\n algorithmEnum,\n brandSafetyEnum,\n continentEnum,\n regionEnum,\n type AlgorithmEnum,\n type BrandSafetyEnum,\n type ContinentEnum,\n type RegionEnum,\n} from \"../api/schemas\";\nimport type {NosibleClient} from \"../client\";\nimport {generateExpansions} from \"../utils/llm\";\nimport {aiSearchParamsSchema, type StdSearchParamsType} from \"../api/index\";\n\n/**\n * Represents a single search query with all its parameters and filters.\n *\n * The Search class encapsulates all the parameters needed to execute a search,\n * including the question, result limits, filtering options, and algorithm settings.\n * It provides methods to generate the API request body and handle search-specific\n * logic like expansion generation and SQL filter creation.\n *\n * @example\n * ```typescript\n * // Basic search\n * const basicSearch = new Search({\n * question: \"artificial intelligence trends\",\n * nResults: 10\n * });\n *\n * // Advanced search with filters\n * const advancedSearch = new Search({\n * question: \"renewable energy investments\",\n * nResults: 20,\n * language: \"en\",\n * region: \"us\",\n * publishStart: new Date(\"2023-01-01\"),\n * minSimilarity: 0.7,\n * algorithm: \"cosine\",\n * autoGenerateExpansions: true\n * });\n * ```\n */\n// User AI Search Params\nexport const userAiSearchParamsSchema = aiSearchParamsSchema;\nexport type UserAiSearchParamsType = z.infer<typeof userAiSearchParamsSchema>;\n\n// User Fast Search Params\nexport const userSearchParamsSchema = sqlFilterSchema.extend({\n // Standard search params for fast and bulk search only\n question: z.string().optional(),\n autoGenerateExpansions: z.boolean().optional(),\n expansions: z.array(z.string()).optional(),\n sqlFilter: z.string().optional(),\n algorithm: algorithmEnum.optional(),\n nResults: z.number().optional(),\n nProbes: z.number().min(1).max(10).optional(),\n nContextify: z.number().min(64).max(1024).optional(),\n minSimilarity: z.number().min(0).max(1).optional(),\n mustInclude: z.array(z.string()).max(100).optional(),\n mustExclude: z.array(z.string()).max(100).optional(),\n brandSafety: brandSafetyEnum.optional(),\n language: z.string().min(2).max(2).optional(),\n continent: continentEnum.optional(),\n region: regionEnum.optional(),\n country: z.string().optional(),\n sector: z.string().optional(),\n industryGroup: z.string().optional(),\n industry: z.string().optional(),\n subIndustry: z.string().optional(),\n iabTier1: z.string().optional(),\n iabTier2: z.string().optional(),\n iabTier3: z.string().optional(),\n iabTier4: z.string().optional(),\n companies: z.array(z.string()).max(30).optional(),\n});\nexport type UserSearchParamsType = z.infer<typeof userSearchParamsSchema>;\n\nexport const clientDefaultSearchParamsSchema = userSearchParamsSchema.omit({\n question: true,\n});\n\nexport type ClientDefaultSearchParamsType = z.infer<\n typeof clientDefaultSearchParamsSchema\n>;\n\nexport type ClientSearchParamsSchema =\n | (UserSearchParamsType & {search?: never})\n | {search: Search};\n\n// Similar Search User Params\nexport const similarUserSearchParams = userSearchParamsSchema.omit({\n question: true,\n});\n\nexport type SimilarUserSearchParamsType = z.infer<\n typeof similarUserSearchParams\n>;\n\nexport class Search {\n question!: string;\n nResults!: number;\n expansions?: string[];\n autoGenerateExpansions?: boolean;\n nProbes?: number;\n nContextify?: number;\n algorithm?: AlgorithmEnum;\n sqlFilter?: string;\n minSimilarity?: number;\n mustInclude?: string[];\n mustExclude?: string[];\n brandSafety?: BrandSafetyEnum;\n language?: string;\n continent?: ContinentEnum;\n region?: RegionEnum;\n country?: string;\n sector?: string;\n industryGroup?: string;\n industry?: string;\n subIndustry?: string;\n iabTier1?: string;\n iabTier2?: string;\n iabTier3?: string;\n iabTier4?: string;\n companies?: string[];\n // SQL Filter\n publishStart?: Date;\n publishEnd?: Date;\n visitedStart?: Date;\n visitedEnd?: Date;\n certain?: boolean;\n includeNetlocs?: string[];\n excludeNetlocs?: string[];\n includeCompanies?: string[];\n excludeCompanies?: string[];\n includeDocs?: string[];\n excludeDocs?: string[];\n\n /**\n * Creates a new Search instance with the specified parameters.\n *\n * The constructor accepts all search parameters including filters, algorithm settings,\n * and result options. All parameters are optional except for the question when\n * used in certain contexts.\n *\n * @param params - Search parameters including question, filters, and options\n *\n * @example\n * ```typescript\n * // Simple search with just a question\n * const search = new Search({\n * question: \"machine learning applications\",\n * nResults: 15\n * });\n *\n * // Search with geographic and temporal filters\n * const filteredSearch = new Search({\n * question: \"climate change policy\",\n * nResults: 25,\n * country: \"United States\",\n * publishStart: new Date(\"2022-01-01\"),\n * publishEnd: new Date(\"2023-12-31\"),\n * language: \"en\"\n * });\n * ```\n */\n\n constructor(params: UserSearchParamsType) {\n Object.assign(this, params);\n }\n\n /**\n * Generates the API request body for this search.\n *\n * This method prepares the search parameters for the API call by:\n * - Generating automatic expansions if enabled\n * - Converting date and filter parameters to SQL filter format\n * - Mapping parameter names to API format\n * - Removing undefined values\n *\n * @param options - Options containing the NosibleClient instance\n * @param options.client - The NosibleClient to use for expansion generation\n * @returns Promise that resolves to the standardized API search parameters\n *\n * @example\n * ```typescript\n * const search = new Search({\n * question: \"blockchain technology\",\n * autoGenerateExpansions: true,\n * nResults: 10\n * });\n *\n * const apiBody = await search.searchBody({ client });\n * console.log(apiBody.question); // \"blockchain technology\"\n * console.log(apiBody.expansions); // Array of generated expansions\n * ```\n */\n public searchBody = async ({\n client,\n }: {\n client: NosibleClient;\n }): Promise<StdSearchParamsType> => {\n let expansions: string[] | undefined = this.expansions;\n\n if (this.autoGenerateExpansions) {\n expansions = await generateExpansions({\n question: this.question,\n model: client.expansionsModel,\n llmClient: client.llmClient,\n });\n }\n\n let sqlFilter = generateSqlFilter({\n publishStart: this.publishStart || undefined,\n publishEnd: this.publishEnd || undefined,\n visitedStart: this.visitedStart || undefined,\n visitedEnd: this.visitedEnd || undefined,\n certain: this.certain || undefined,\n includeNetlocs: this.includeNetlocs || undefined,\n excludeNetlocs: this.excludeNetlocs || undefined,\n includeCompanies: this.includeCompanies || undefined,\n excludeCompanies: this.excludeCompanies || undefined,\n includeDocs: this.includeDocs || undefined,\n excludeDocs: this.excludeDocs || undefined,\n });\n\n const output: StdSearchParamsType = {\n question: this.question,\n expansions: expansions,\n sql_filter: sqlFilter || undefined,\n algorithm: this.algorithm,\n n_probes: this.nProbes,\n n_results: this.nResults,\n n_contextify: this.nContextify,\n min_similarity: this.minSimilarity,\n must_include: this.mustInclude,\n must_exclude: this.mustExclude,\n brand_safety: this.brandSafety,\n language: this.language,\n continent: this.continent,\n region: this.region,\n country: this.country,\n sector: this.sector,\n industry_group: this.industryGroup,\n industry: this.industry,\n sub_industry: this.subIndustry,\n iab_tier_1: this.iabTier1,\n iab_tier_2: this.iabTier2,\n iab_tier_3: this.iabTier3,\n iab_tier_4: this.iabTier4,\n companies: this.companies,\n };\n\n // remove undefined values\n const outputWithoutUndefined = Object.fromEntries(\n Object.entries(output).filter(([, value]) => value !== undefined)\n ) as StdSearchParamsType;\n\n return outputWithoutUndefined;\n };\n}\n",
7
7
  "import z from \"zod\";\n\nexport const queryTypeEnum = z.enum([\"fast-search\", \"search\", \"bulk-search\"]);\ntype QueryType = z.infer<typeof queryTypeEnum>;\n\nexport const algorithmEnum = z.enum([\n \"string\",\n \"lexical\",\n \"baseline\",\n \"hamming\",\n \"hybrid-1\",\n \"hybrid-2\",\n \"hybrid-3\",\n \"company\",\n]);\nexport type AlgorithmEnum = z.infer<typeof algorithmEnum>;\n\nexport const brandSafetyEnum = z.enum([\"safe\", \"sensitive\", \"unsafe\"]);\nexport type BrandSafetyEnum = z.infer<typeof brandSafetyEnum>;\n\nexport const continentEnum = z.enum([\n \"Africa\",\n \"Asia\",\n \"Europe\",\n \"North America\",\n \"Oceania\",\n \"South America\",\n \"Worldwide\",\n]);\nexport type ContinentEnum = z.infer<typeof continentEnum>;\n\nexport const regionEnum = z.enum([\n \"Caribbean\",\n \"Central Africa\",\n \"Central America\",\n \"Central Asia\",\n \"Central Europe\",\n \"East Africa\",\n \"East Asia\",\n \"Eastern Europe\",\n \"Middle East\",\n \"North Africa\",\n \"North America\",\n \"Northern Europe\",\n \"Oceania\",\n \"South America\",\n \"South Asia\",\n \"Southeast Asia\",\n \"Southern Africa\",\n \"Southern Europe\",\n \"Sub-Saharan Africa\",\n \"The Amazon Basin\",\n \"The Andes\",\n \"The Arctic Region\",\n \"The Balkans\",\n \"The Caucasus\",\n \"The Horn of Africa\",\n \"The Levant\",\n \"The Middle East\",\n \"The Sahel\",\n \"West Africa\",\n \"Western Europe\",\n \"Worldwide\",\n]);\n\nexport type RegionEnum = z.infer<typeof regionEnum>;\n\nexport interface SearchResType {\n message: string;\n query: SearchQuery;\n response: SearchResponse[];\n}\n\nexport const searchQuerySchema = z.object({\n instruction: z.string(),\n question: z.string(),\n expansions: z.array(z.string()),\n brand_safety: z.null(),\n language: z.string().nullable(),\n continent: z.string().nullable(),\n region: z.string().nullable(),\n country: z.string().nullable(),\n sector: z.string().nullable(),\n industry_group: z.string().nullable(),\n industry: z.string().nullable(),\n sub_industry: z.string().nullable(),\n iab_tier_1: z.string().nullable(),\n iab_tier_2: z.string().nullable(),\n iab_tier_3: z.string().nullable(),\n iab_tier_4: z.string().nullable(),\n algorithm: z.string(),\n n_results: z.number(),\n n_contextify: z.number(),\n n_probes: z.number(),\n min_similarity: z.number(),\n pass_similarity: z.number(),\n must_exclude: z.array(z.string()),\n must_include: z.array(z.string()),\n shard_selector: z.string(),\n shard_reranker: z.string(),\n search_lang: z.string(),\n search_words: z.record(z.string(), z.number()),\n search_intents: z.record(z.string(), z.any()), // Empty object type\n companies: z.array(z.any()),\n});\n\nexport type SearchQuery = z.infer<typeof searchQuerySchema>;\n\n// SearchIntents is an empty object type\nexport type SearchIntents = Record<string, any>;\n\nconst searchResultSemanticsSchema = z.object({\n origin_shard: z.number(),\n chunks_total: z.number(),\n chunks_matched: z.number(),\n chunks_kept: z.number(),\n similarity: z.number(),\n bitstring: z.string(),\n});\nexport type SearchResultSemantics = z.infer<typeof searchResultSemanticsSchema>;\n\nexport const searchResponseSchema = z.object({\n url_hash: z.string(),\n url: z.string(),\n netloc: z.string(),\n published: z.string(),\n visited: z.string(),\n language: z.string(),\n author: z.string(),\n title: z.string(),\n description: z.string(),\n content: z.string(),\n best_chunk: z.string(),\n semantics: searchResultSemanticsSchema,\n});\nexport type SearchResponse = z.infer<typeof searchResponseSchema>;\n\n// Bulk Search Response\nconst bulkResSchema = z.object({\n message: z.string(),\n decrypt_using: z.string(),\n download_from: z.string(),\n});\nexport type BulkResType = z.infer<typeof bulkResSchema>;\n\n// Re-export scrape types from scrape.ts\nexport {\n scrapeResponseSchema,\n scrapeFullResSchema,\n type ScrapeResponse,\n type ScrapeFullRes,\n} from \"../scrape/types\";\n",
8
- "import {z} from \"zod\";\n\nconst snippetStatisticsSchema = z.object({\n sentences: z.number(),\n words: z.number(),\n characters: z.number(),\n links: z.number().optional(),\n images: z.number().optional(),\n});\n\nconst snippetSchema = z.object({\n url_hash: z.string(),\n snippet_hash: z.string(),\n prev_snippet_hash: z.string().nullable(),\n next_snippet_hash: z.string().nullable(),\n content: z.string(),\n words: z.string().optional(),\n language: z.string(),\n statistics: snippetStatisticsSchema.optional(),\n links: z.record(z.string(), z.string()).optional(),\n images: z.array(z.string()).optional(),\n});\nexport interface Snippet extends z.infer<typeof snippetSchema> {}\n\nconst scrapeStatisticsSchema = z.object({\n snippets: z.number(),\n sentences: z.number(),\n words: z.number(),\n characters: z.number(),\n images: z.number(),\n videos: z.number(),\n audio: z.number(),\n tables: z.number(),\n lists: z.number(),\n blocks: z.number(),\n links: z.number(),\n files: z.number(),\n});\nexport type ScrapeStatistics = z.infer<typeof scrapeStatisticsSchema>;\n\nconst scrapePageSchema = z.object({\n title: z.string(),\n description: z.string(),\n author: z.string(),\n published: z.coerce.date(),\n visited: z.coerce.date(),\n certain: z.boolean().optional(),\n});\nexport type ScrapePage = z.infer<typeof scrapePageSchema>;\n\nconst querySchema = z.object({});\n\nconst scrapeRequestSchema = z.object({\n raw_url: z.string(),\n url: z.string(),\n hash: z.string(),\n geo: z.string(),\n proxy: z.string(),\n scheme: z.string(),\n netloc: z.string(),\n prefix: z.string(),\n domain: z.string(),\n suffix: z.string(),\n path: z.string(),\n query: z.string(),\n fragment: z.string(),\n query_allowed: querySchema,\n query_blocked: querySchema,\n});\n\nconst metadataSchema = z.record(z.string(), z.any());\n\nconst logoSchema = z.object({\n \"@type\": z.string().optional(),\n \"@id\": z.string().optional(),\n caption: z.string().optional(),\n inLanguage: z.string().optional(),\n url: z.string(),\n width: z.union([z.string(), z.number()]).optional(),\n height: z.union([z.string(), z.number()]).optional(),\n});\n\nconst publisherSchema = z.object({\n \"@type\": z.string(),\n name: z.string().optional(),\n url: z.string().optional(),\n logo: z.union([logoSchema, z.string()]).optional(),\n sameAs: z.union([z.array(z.string()), z.string()]).optional(),\n});\nconst structuredSchema = z.object({\n \"@context\": z.string().optional(),\n \"@type\": z.string().optional(),\n headline: z.string().optional(),\n publisher: publisherSchema.optional(),\n});\n\nconst urlTreeSchema = z.record(z.string(), z.any());\n\nexport const scrapeResponseSchema = z.object({\n request: scrapeRequestSchema,\n page: scrapePageSchema,\n statistics: scrapeStatisticsSchema,\n languages: z.record(z.string(), z.number()),\n snippets: z.record(z.string(), snippetSchema),\n full_text: z.string(),\n metadata: metadataSchema,\n structured: z.array(structuredSchema),\n url_tree: urlTreeSchema,\n});\n\nexport const scrapeFullResSchema = z.object({\n message: z.string(),\n added_to_batch: z.boolean(),\n response: scrapeResponseSchema,\n});\n\nexport type ScrapeFullRes = z.infer<typeof scrapeFullResSchema>;\n\nexport type ScrapeResponse = z.infer<typeof scrapeResponseSchema>;\n",
8
+ "import {z} from \"zod\";\n\nconst snippetStatisticsSchema = z.object({\n sentences: z.number(),\n words: z.number(),\n characters: z.number(),\n links: z.number().optional(),\n images: z.number().optional(),\n});\n\nexport const snippetSchema = z.object({\n url_hash: z\n .string()\n .describe(\"Hash of the URL from which the snippet was extracted\"),\n snippet_hash: z.string().describe(\"A unique hash for the snippet\"),\n prev_snippet_hash: z\n .string()\n .nullable()\n .describe(\"Hash of the previous snippet in sequence\"),\n next_snippet_hash: z\n .string()\n .nullable()\n .describe(\"Hash of the next snippet in sequence\"),\n content: z.string().describe(\"The text content of the snippet\"),\n words: z.string().optional().describe(\"The words in the snippet\"),\n language: z.string().describe(\"The language of the snippet\"),\n statistics: snippetStatisticsSchema\n .optional()\n .describe(\"Statistical information about the snippet\"),\n links: z\n .record(z.string(), z.string())\n .optional()\n .describe(\"List of links associated with the snippet\"),\n images: z\n .array(z.string())\n .optional()\n .describe(\"List of image URLs associated with the snippet\"),\n});\n/**\n * A snippet of text, typically extracted from a web page\n */\nexport interface Snippet extends z.infer<typeof snippetSchema> {\n /**\n * Hash of the URL from which the snippet was extracted\n */\n url_hash: string;\n /**\n * A unique hash for the snippet\n */\n snippet_hash: string;\n /**\n * Hash of the previous snippet in sequence\n */\n prev_snippet_hash: string | null;\n /**\n * Hash of the next snippet in sequence\n */\n next_snippet_hash: string | null;\n /**\n * The text content of the snippet\n */\n content: string;\n /**\n * The words in the snippet\n */\n words?: string;\n /**\n * The language of the snippet\n */\n language: string;\n /**\n * Statistical information about the snippet\n */\n statistics?: {\n sentences: number;\n words: number;\n characters: number;\n links?: number;\n images?: number;\n };\n /**\n * List of links associated with the snippet\n */\n links?: Record<string, string>;\n /**\n * List of image URLs associated with the snippet\n */\n images?: string[];\n}\n\nconst scrapeStatisticsSchema = z.object({\n snippets: z.number(),\n sentences: z.number(),\n words: z.number(),\n characters: z.number(),\n images: z.number(),\n videos: z.number(),\n audio: z.number(),\n tables: z.number(),\n lists: z.number(),\n blocks: z.number(),\n links: z.number(),\n files: z.number(),\n});\nexport type ScrapeStatistics = z.infer<typeof scrapeStatisticsSchema>;\n\nconst scrapePageSchema = z.object({\n title: z.string(),\n description: z.string(),\n author: z.string(),\n published: z.coerce.date(),\n visited: z.coerce.date(),\n certain: z.boolean().optional(),\n});\nexport type ScrapePage = z.infer<typeof scrapePageSchema>;\n\nconst querySchema = z.object({});\n\nconst scrapeRequestSchema = z.object({\n raw_url: z.string(),\n url: z.string(),\n hash: z.string(),\n geo: z.string(),\n proxy: z.string(),\n scheme: z.string(),\n netloc: z.string(),\n prefix: z.string(),\n domain: z.string(),\n suffix: z.string(),\n path: z.string(),\n query: z.string(),\n fragment: z.string(),\n query_allowed: querySchema,\n query_blocked: querySchema,\n});\n\nconst metadataSchema = z.record(z.string(), z.any());\n\nconst logoSchema = z.object({\n \"@type\": z.string().optional(),\n \"@id\": z.string().optional(),\n caption: z.string().optional(),\n inLanguage: z.string().optional(),\n url: z.string(),\n width: z.union([z.string(), z.number()]).optional(),\n height: z.union([z.string(), z.number()]).optional(),\n});\n\nconst publisherSchema = z.object({\n \"@type\": z.string(),\n name: z.string().optional(),\n url: z.string().optional(),\n logo: z.union([logoSchema, z.string()]).optional(),\n sameAs: z.union([z.array(z.string()), z.string()]).optional(),\n});\nconst structuredSchema = z.object({\n \"@context\": z.string().optional(),\n \"@type\": z.string().optional(),\n headline: z.string().optional(),\n publisher: publisherSchema.optional(),\n});\n\nconst urlTreeSchema = z.record(z.string(), z.any());\n\nexport const scrapeResponseSchema = z.object({\n request: scrapeRequestSchema.describe(\n \"Details of the original scrape request including URL components and proxy settings\"\n ),\n page: scrapePageSchema.describe(\n \"Basic page metadata like title, description, author, and dates\"\n ),\n statistics: scrapeStatisticsSchema.describe(\n \"Content statistics including counts of snippets, words, characters, images, and other media\"\n ),\n languages: z\n .record(z.string(), z.number())\n .describe(\n \"Language detection results with language codes and confidence scores\"\n ),\n snippets: z\n .record(z.string(), snippetSchema)\n .describe(\"Page content broken into manageable snippets with metadata\"),\n full_text: z\n .string()\n .describe(\"Complete extracted text content from the page\"),\n metadata: metadataSchema.describe(\n \"Additional metadata extracted from the page as key-value pairs\"\n ),\n structured: z\n .array(structuredSchema)\n .describe(\n \"Structured data extracted from the page (JSON-LD, microdata, etc.)\"\n ),\n url_tree: urlTreeSchema.describe(\n \"Hierarchical structure of URLs found on the page\"\n ),\n});\n\nexport const scrapeFullResSchema = z.object({\n message: z\n .string()\n .describe(\"Status message describing the scrape operation result\"),\n added_to_batch: z\n .boolean()\n .describe(\"Indicates if this scrape was added to a batch for processing\"),\n response: scrapeResponseSchema.describe(\n \"The complete scrape response containing all extracted data\"\n ),\n});\n\nexport type ScrapeFullRes = z.infer<typeof scrapeFullResSchema>;\n\nexport type ScrapeResponse = z.infer<typeof scrapeResponseSchema>;\n",
9
9
  "import OpenAI from \"openai\";\n\n/**\n * Default LLM model used for sentiment analysis and query expansion.\n * Uses Google's Gemini 2.0 Flash model via OpenAI-compatible API.\n */\nconst defaultModel = \"google/gemini-2.0-flash-001\";\n\n/**\n * Analyzes the sentiment of a given text using an LLM.\n * \n * Returns a numeric score between -1.0 (very negative) and 1.0 (very positive).\n * The function uses a structured prompt to ensure consistent numeric output.\n * \n * @param options - Configuration options for sentiment analysis\n * @param options.text - The text to analyze for sentiment. Must not be empty or whitespace.\n * @param options.model - The LLM model to use. Defaults to \"google/gemini-2.0-flash-001\".\n * @param options.llmClient - OpenAI client instance for making API calls. Must be provided.\n * \n * @returns `Promise<number>` - A sentiment score between -1.0 and 1.0\n * \n * @throws {Error} When llmClient is not provided\n * @throws {Error} When text is empty or contains only whitespace\n * @throws {Error} When the LLM response is not a valid float\n * @throws {Error} When the sentiment score is outside the valid range [-1.0, 1.0]\n * \n * @example\n * ```typescript\n * import OpenAI from \"openai\";\n * import { getSentiment } from \"./llm\";\n * \n * const client = new OpenAI({ apiKey: \"your-api-key\" });\n * const score = await getSentiment({\n * text: \"I love this product!\",\n * llmClient: client\n * });\n * console.log(score); // Output: 0.8 (approximately)\n * ```\n */\nexport const getSentiment = async ({\n text,\n model = defaultModel,\n llmClient,\n}: {\n /** The text to analyze for sentiment */\n text: string;\n /** The LLM model to use for analysis */\n model?: string;\n /** OpenAI client instance for API calls */\n llmClient: OpenAI | undefined;\n}): Promise<number> => {\n if (!llmClient) {\n throw new Error(\n \"A OpenAI client instance must be provided as 'llmClient'.\"\n );\n }\n\n if (!text || text.trim() === \"\") {\n throw new Error(\"Text must not be empty or whitespace.\");\n }\n\n const prompt = `\n # TASK DESCRIPTION\n On a scale from -1.0 (very negative) to 1.0 (very positive),\n please rate the sentiment of the following text and return _only_ the numeric score:\n ${text.trim()}\n\n # RESPONSE FORMAT\n\n The response must be a float in [-1.0, 1.0]. No other text must be returned.\n `;\n\n try {\n const completion = await llmClient.chat.completions.create({\n model: model,\n messages: [{role: \"user\", content: prompt.trim()}],\n temperature: 0.7,\n });\n const raw = completion.choices[0]?.message?.content as string;\n\n const score = parseFloat(raw);\n if (Number.isNaN(score)) {\n throw new Error(\n `Sentiment response is not a float: ${JSON.stringify(raw)}`\n );\n }\n if (score < -1.0 || score > 1.0) {\n throw new Error(`Sentiment ${score} outside valid range [-1.0, 1.0]`);\n }\n\n return score;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Generates semantic query expansions to improve search recall.\n * \n * Creates 10 semantically equivalent but lexically different questions\n * that maintain the same intent while using different wording and entities.\n * This helps search engines find more relevant documents through query variation.\n * \n * The generated expansions follow specific guidelines:\n * - Include specific named entities (people, places, organizations)\n * - Are highly targeted and semantically unambiguous\n * - Use between 10-15 words per question\n * - Leverage semantic and contextual expansion techniques\n * \n * @param options - Configuration options for query expansion\n * @param options.question - The original search question to expand. Must not be empty or whitespace.\n * @param options.model - The LLM model to use. Defaults to \"google/gemini-2.0-flash-001\".\n * @param options.llmClient - OpenAI client instance for making API calls. Must be provided.\n * \n * @returns `Promise<string[]>` - An array of 10 expanded query strings\n * \n * @throws {Error} When llmClient is not provided\n * @throws {Error} When question is empty or contains only whitespace\n * @throws {Error} When the LLM response is not valid JSON\n * @throws {Error} When the response doesn't contain exactly 10 string items\n * \n * @example\n * ```typescript\n * import OpenAI from \"openai\";\n * import { generateExpansions } from \"./llm\";\n * \n * const client = new OpenAI({ apiKey: \"your-api-key\" });\n * const expansions = await generateExpansions({\n * question: \"best restaurants in New York\",\n * llmClient: client\n * });\n * console.log(expansions);\n * // Output: [\n * // \"top dining establishments Manhattan NYC\",\n * // \"fine eating places New York City\",\n * // \"recommended food venues NYC boroughs\",\n * // ...\n * // ]\n * ```\n */\nexport const generateExpansions = async ({\n question,\n model = defaultModel,\n llmClient,\n}: {\n /** The original search question to expand */\n question: string;\n /** The LLM model to use for expansion */\n model?: string;\n /** OpenAI client instance for API calls */\n llmClient: OpenAI | undefined;\n}): Promise<string[]> => {\n if (!llmClient) {\n throw new Error(\n \"A OpenAI client instance must be provided as 'llmClient'.\"\n );\n }\n\n if (!question || question.trim() === \"\") {\n throw new Error(\"Question must not be empty or whitespace.\");\n }\n\n const prompt = `\n # TASK DESCRIPTION\n\n\n Given a search question you must generate a list of 10 similar questions that have the same exact\n semantic meaning but are contextually and lexically different to improve search recall.\n\n\n ## Question\n\n Here is the question you must generate expansions for:\n\n Question: ${question.trim()}\n\n # RESPONSE FORMAT\n\n Your response must be a JSON object structured as follows: a list of ten strings. Each string must\n be a grammatically correct question that expands on the original question to improve recall.\n\n [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string\n ]\n\n # EXPANSION GUIDELINES\n\n 1. **Use specific named entities** - To improve the quality of your search results you must mention\n specific named entities (people, locations, organizations, products, places) in expansions.\n 2. **Expansions must be highly targeted** - To improve the quality of search results each expansion\n must be semantically unambiguous. Questions must be use between ten and fifteen words.\n 3. **Expansions must improve recall** - When expanding the question leverage semantic and contextual\n expansion to maximize the ability of the search engine to find semantically relevant documents:\n - Semantic Example: Swap \"climate change\" with \"global warming\" or \"environmental change\".\n - Contextual Example: Swap \"diabetes treatment\" with \"insulin therapy\" or \"blood sugar management\".\n `;\n\n try {\n const completion = await llmClient.chat.completions.create({\n model: model,\n messages: [{role: \"user\", content: prompt.trim()}],\n temperature: 0.7,\n });\n\n let raw = (completion.choices[0]?.message?.content as string) ?? \"\";\n let toParse = raw.trim();\n\n if (toParse.startsWith(\"```\")) {\n toParse = toParse.replace(/^```+/, \"\").trim();\n if (toParse.toLowerCase().startsWith(\"json\")) {\n toParse = toParse.slice(4).trim();\n }\n toParse = toParse.replace(/```+$/, \"\").trim();\n }\n\n let expansions: unknown;\n try {\n expansions = JSON.parse(toParse);\n } catch (decodeErr) {\n throw new Error(`OpenRouter response was not valid JSON: '${toParse}'`);\n }\n\n if (\n !Array.isArray(expansions) ||\n expansions.length !== 10 ||\n !expansions.every((q) => typeof q === \"string\")\n ) {\n throw new Error(\"Invalid response: 'choices' missing or empty\");\n }\n console.debug(\"Expansions: \", expansions);\n return expansions as string[];\n } catch (error) {\n throw error;\n }\n};\n",
10
10
  "import {\n algorithmEnum,\n brandSafetyEnum,\n continentEnum,\n regionEnum,\n} from \"./schemas\";\nimport {z} from \"zod\";\n\n/* ------------------ SEARCH ------------------ */\n\n// Number of results\nexport const fastNResults = z.number().min(10).max(100).optional().default(100);\nexport const searchNResults = z\n .number()\n .min(100)\n .max(1000)\n .optional()\n .default(100);\nexport const bulkNResults = z\n .number()\n .min(1000)\n .max(10000)\n .optional()\n .default(1000);\n\n// AI search params for search only\nexport const aiSearchParamsSchema = z.object({\n prompt: z.string().min(25).max(2500),\n agent: z.string().optional(),\n});\nexport type SearchParamsType = z.infer<typeof aiSearchParamsSchema>;\n\n// Standard search params for fast and bulk search only\nexport const stdSearchParams = z.object({\n question: z.string(),\n expansions: z.array(z.string()).optional(),\n sql_filter: z.string().optional(),\n algorithm: algorithmEnum.optional(),\n n_results: z.number(),\n n_probes: z.number().min(1).max(10).optional(),\n n_contextify: z.number().min(64).max(1024).optional(),\n min_similarity: z.number().min(0).max(1).optional(),\n must_include: z.array(z.string()).max(100).optional(),\n must_exclude: z.array(z.string()).max(100).optional(),\n brand_safety: brandSafetyEnum.optional(),\n language: z.string().min(2).max(2).optional(),\n continent: continentEnum.optional(),\n region: regionEnum.optional(),\n country: z.string().optional(),\n sector: z.string().optional(),\n industry_group: z.string().optional(),\n industry: z.string().optional(),\n sub_industry: z.string().optional(),\n iab_tier_1: z.string().optional(),\n iab_tier_2: z.string().optional(),\n iab_tier_3: z.string().optional(),\n iab_tier_4: z.string().optional(),\n companies: z.array(z.string()).max(30).optional(),\n});\nexport type StdSearchParamsType = z.infer<typeof stdSearchParams>;\n\n// Fast search params\nconst fastSearchParamsSchema = z.object({\n ...stdSearchParams.shape,\n n_results: fastNResults, // Overrides stdSearchParams\n});\nexport type FastSearchParamsType = z.infer<typeof fastSearchParamsSchema>;\n\n// Bulk search params\nconst bulkSearchParamsSchema = z.object({\n ...stdSearchParams.shape,\n n_results: bulkNResults, // Overrides stdSearchParams\n});\ntype BulkSearchParamsType = z.infer<typeof bulkSearchParamsSchema>;\n\n// Validation Functions\nexport const validateAiSearchParams = (params: StdSearchParamsType) => {\n const validatedParams = aiSearchParamsSchema.parse(params);\n};\n\nexport const validateFastSearchParams = (params: FastSearchParamsType) => {\n const validatedParams = fastSearchParamsSchema.parse(params);\n return validatedParams;\n};\n\nexport const validateBulkSearchParams = (params: BulkSearchParamsType) => {\n const validatedParams = bulkSearchParamsSchema.parse(params);\n return validatedParams;\n};\n\n/* --------------- SCRAPE URL --------------- */\nconst scapeUrlBody = z.object({\n url: z.string(),\n});\ntype ScrapeUrlBodyType = z.infer<typeof scapeUrlBody>;\n\n/* ------------------ TOPIC TREND ------------------ */\nconst topicTrendBody = z.object({\n query: z.string(),\n sql_filter: z.string().optional(),\n});\ntype TopicTrendBodyType = z.infer<typeof topicTrendBody>;\n\n/* ------------------ API CALL ------------------ */\n\n// Call API\n\nexport const callNosibleApi = async ({\n baseUrl = \"https://www.nosible.ai/search/v2\",\n endpoint,\n body,\n apiKey,\n}: {\n baseUrl?: string;\n endpoint: string;\n body: any;\n apiKey: string;\n}): Promise<any> => {\n const now = Date.now();\n /** Make authenticated POST request to the API */\n console.debug(\"Body: \", JSON.stringify(body, null, 2));\n console.time(`Request-${endpoint}(${now})`);\n const response = await fetch(`${baseUrl}/${endpoint}`, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Api-Key\": `${apiKey}`,\n },\n body: JSON.stringify(body),\n });\n console.timeEnd(`Request-${endpoint}(${now})`);\n\n /** Handle error responses with detailed logging */\n if (!response.ok) {\n console.error(\"Status: \" + response.status);\n\n if (response.status === 401) {\n throw new Error(\"Your API key is not valid.\");\n }\n\n if (response.status === 422) {\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (contentType.startsWith(\"application/json\")) {\n const body = await response.json();\n const errorBody = Array.isArray(body) ? body[0] : body;\n console.error(errorBody);\n if (errorBody?.type === \"string_too_short\") {\n throw new Error(\"Your API key is not valid: Too Short.\");\n }\n }\n throw new Error(\"You made a bad request.\");\n }\n\n if (response.status === 429) {\n throw new Error(\"You have hit your rate limit.\");\n }\n\n if (response.status === 409) {\n throw new Error(\"Too many concurrent searches.\");\n }\n\n if (response.status === 500) {\n throw new Error(\"An unexpected error occurred.\");\n }\n\n if (response.status === 502) {\n throw new Error(\"NOSIBLE is currently restarting.\");\n }\n\n if (response.status === 504) {\n throw new Error(\"NOSIBLE is currently overloaded.\");\n }\n\n // Fallback for other status codes\n console.error(await response.text());\n throw new Error(`HTTP error! status: ${response.status}`);\n } else {\n /** Log successful response and return parsed data */\n const data = await response.json();\n return data;\n }\n};\n",
11
11
  "/**\n * Checks if the code is running in a browser environment\n * @returns {boolean} True if running in a browser, false otherwise\n */\nexport const isBrowser = () => {\n return typeof window !== \"undefined\";\n};\n",
12
12
  "/**\n * Downloads a blob in the browser by creating a temporary link and triggering a download\n * @param data - The data string to download\n * @param mimeType - The MIME type of the file (e.g., 'application/json', 'text/csv')\n * @param fileName - The name of the file to download\n */\nexport const downloadBlob = (\n data: string,\n mimeType: string,\n fileName: string\n): void => {\n const blob = new Blob([data], {type: mimeType});\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n};\n",
13
13
  "import {isBrowser} from \".\";\nimport {downloadBlob} from \"./browser\";\nimport Papa from \"papaparse\";\n\n/**\n * Exports data to a JSON file\n * @param data - The data to export\n * @param outputPath - Path to write the JSON file (or filename for browser)\n */\nexport const exportJson = async (\n data: any,\n outputPath: string\n): Promise<void> => {\n try {\n if (isBrowser()) {\n // Extract filename from outputPath or use default\n const filename = outputPath.split(\"/\").pop() || \"export.json\";\n const jsonString = JSON.stringify(data);\n const finalFilename = filename.endsWith(\".json\")\n ? filename\n : `${filename}.json`;\n\n downloadBlob(jsonString, \"application/json\", finalFilename);\n } else {\n const {writeFile} = await import(\"node:fs/promises\");\n await writeFile(outputPath, JSON.stringify(data));\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to write JSON: ${errorMessage}`);\n }\n};\n\n/**\n * Imports JSON data from a file\n * @param options - Either {filePath: string} for server-side or {file: File} for browser-side\n * @returns Parsed JSON data\n */\nexport const importJson = async (\n options: {filePath: string} | {file: File}\n): Promise<any> => {\n try {\n if (\"file\" in options) {\n // Browser-side: read from File object\n const text = await options.file.text();\n return JSON.parse(text);\n } else {\n // Server-side: read from file path\n if (isBrowser()) {\n throw new Error(\n \"File path import is not supported in browser. Use {file: File} instead.\"\n );\n }\n const {readFile} = await import(\"node:fs/promises\");\n const data = await readFile(options.filePath, \"utf-8\");\n return JSON.parse(data);\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to read JSON: ${errorMessage}`);\n }\n};\n\n/**\n * Imports CSV data from a file\n * @param options - Either {filePath: string} for server-side or {file: File} for browser-side\n * @returns Parsed CSV data as an array of objects\n */\nexport const importCsv = async (\n options: {filePath: string} | {file: File}\n): Promise<any[]> => {\n try {\n let csvText: string;\n\n if (\"file\" in options) {\n // Browser-side: read from File object\n csvText = await options.file.text();\n } else {\n // Server-side: read from file path\n if (isBrowser()) {\n throw new Error(\n \"File path import is not supported in browser. Use {file: File} instead.\"\n );\n }\n const {readFile} = await import(\"node:fs/promises\");\n csvText = await readFile(options.filePath, \"utf-8\");\n }\n\n // Handle empty CSV\n if (!csvText.trim()) {\n return [];\n }\n\n // Parse CSV using papaparse\n const result = Papa.parse(csvText, {\n header: true,\n skipEmptyLines: true,\n dynamicTyping: true,\n });\n\n // Filter out delimiter detection errors for empty/whitespace-only content\n const significantErrors = result.errors.filter(\n (error) =>\n !error.message.includes(\"Unable to auto-detect delimiting character\")\n );\n\n if (significantErrors.length > 0) {\n const errorMessages = significantErrors\n .map((err) => err.message)\n .join(\", \");\n throw new Error(`CSV parsing errors: ${errorMessages}`);\n }\n\n return result.data as any[];\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to read CSV: ${errorMessage}`);\n }\n};\n\n/**\n * Exports data to an NDJSON file (newline-delimited JSON)\n * @param data - Array of objects to export\n * @param outputPath - Path to write the NDJSON file (or filename for browser)\n */\nexport const exportNdjson = async (\n data: any[],\n outputPath: string\n): Promise<void> => {\n try {\n if (isBrowser()) {\n // Extract filename from outputPath or use default\n const filename = outputPath.split(\"/\").pop() || \"export.ndjson\";\n\n // Create NDJSON string (one JSON object per line)\n const ndjsonString = data.map((item) => JSON.stringify(item)).join(\"\\n\");\n\n const finalFilename = filename.endsWith(\".ndjson\")\n ? filename\n : `${filename}.ndjson`;\n\n downloadBlob(ndjsonString, \"application/x-ndjson\", finalFilename);\n } else {\n const pl = await import(\"nodejs-polars\");\n const df = pl.DataFrame(data);\n await df.writeJSON(outputPath, {format: \"lines\"});\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to write NDJSON: ${errorMessage}`);\n }\n};\n\n/**\n * Exports data to a CSV file\n * @param data - Array of objects to export\n * @param outputPath - Path to write the CSV file (or filename for browser)\n */\nexport const exportCsv = async (\n data: any[],\n outputPath: string\n): Promise<void> => {\n try {\n // Validate input\n if (!Array.isArray(data) || data.length === 0) {\n throw new Error(\"Data must be a non-empty array\");\n }\n\n if (!outputPath || typeof outputPath !== \"string\") {\n throw new Error(\"Output path must be a non-empty string\");\n }\n\n // Use papaparse to convert data to CSV\n const csvString = Papa.unparse(data, {\n header: true,\n newline: \"\\n\",\n });\n\n if (isBrowser()) {\n // Extract filename from outputPath or use default\n const filename = outputPath.split(\"/\").pop() || \"export.csv\";\n const finalFilename = filename.endsWith(\".csv\")\n ? filename\n : `${filename}.csv`;\n\n downloadBlob(csvString, \"text/csv\", finalFilename);\n } else {\n const {writeFile} = await import(\"node:fs/promises\");\n await writeFile(outputPath, csvString);\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to write CSV: ${errorMessage}`);\n }\n};\n",
14
- "import z from \"zod\";\nimport type {\n ScrapePage,\n ScrapeResponse,\n ScrapeStatistics,\n Snippet,\n} from \"./types\";\nimport {scrapeResponseSchema} from \"./types\";\nimport type {NosibleClient} from \"../client\";\nimport {exportJson, importJson} from \"../utils/file\";\n\nexport class WebPageData {\n private client: NosibleClient;\n public data: ScrapeResponse;\n private snippets: Snippet[];\n public page: ScrapePage;\n public fullText: string;\n public metadata: Record<string, any>;\n public structured: any[];\n public urlTree: Record<string, any>;\n public statistics: ScrapeStatistics;\n constructor(client: NosibleClient, res: ScrapeResponse) {\n this.client = client;\n this.data = res;\n this.snippets = mapSnippetToArray(res);\n this.page = this.data.page;\n this.fullText = this.data.full_text;\n this.metadata = this.data.metadata;\n this.structured = this.data.structured;\n this.urlTree = this.data.url_tree;\n this.statistics = this.data.statistics;\n }\n\n static async fromJson(\n client: NosibleClient,\n inputPath: string\n ): Promise<WebPageData> {\n const data = await importJson({filePath: inputPath});\n const validData = scrapeResponseSchema.parse(data) as ScrapeResponse;\n return new WebPageData(client, validData);\n }\n\n public async writeJson(outputPath: string): Promise<void> {\n return await exportJson(this.data, outputPath);\n }\n\n /*\n * Returns an ordered array of snippets\n * @returns {Snippet[]} An ordered array of snippets\n */\n public getSnippets(): Snippet[] {\n return this.snippets;\n }\n\n /*\n * Returns a snippet by hash key\n * @param {string} hashKey - The hash key of the snippet\n * @returns {Snippet | undefined} The snippet with the specified hash key\n */\n public getSnippet(hashKey: string): Snippet | undefined {\n return this.snippets.find((snippet) => snippet.url_hash === hashKey);\n }\n}\n\nexport const mapSnippetToArray = (data: ScrapeResponse) => {\n const snippets: Snippet[] = [];\n const snippetKeys = Object.keys(data.snippets);\n\n if (snippetKeys.length === 0) {\n return snippets; // Return empty array if no snippets\n }\n\n // Unsorted snippets\n const unsortedSnippets: Snippet[] = [];\n snippetKeys.forEach((key) => {\n unsortedSnippets.push(data.snippets[key] as Snippet);\n });\n\n // Find first snippet\n const first = unsortedSnippets.find(\n (snippet) => snippet.prev_snippet_hash === null\n );\n if (!first) {\n throw new Error(\"No first snippet found\");\n }\n\n // Add first snippet to array\n snippets.push(first);\n\n // Add remaining snippets to array\n let current = first;\n while (current.next_snippet_hash) {\n const next = unsortedSnippets.find(\n (snippet) => snippet.snippet_hash === current.next_snippet_hash\n );\n if (!next) {\n throw new Error(\"No next snippet found\");\n }\n snippets.push(next);\n current = next;\n }\n return snippets;\n};\n",
15
- "export interface TopicTrendRes {\n message: string;\n query: Query;\n response: {[key: string]: number};\n}\n\nexport interface Query {\n query: string;\n brand_safety: null;\n language: null;\n continent: null;\n region: null;\n country: null;\n sector: null;\n industry_group: null;\n industry: null;\n sub_industry: null;\n iab_tier_1: null;\n iab_tier_2: null;\n iab_tier_3: null;\n iab_tier_4: null;\n n_probes: number;\n shard_selector: string;\n shard_reranker: string;\n search_lang: string;\n search_words: SearchWords;\n}\n\nexport interface SearchWords {\n [key: string]: number;\n}\n\n// TODO: How to handle when API return 500 error\n\n// TODO: Add logic to allow user to pass in start and end date and then remove these from the response\nexport class TopicTrend {\n data: TopicTrendRes;\n\n constructor(data: TopicTrendRes) {\n this.data = data;\n }\n\n peakDate(): Date {\n const maxValue = Math.max(...Object.values(this.data.response));\n const date = Object.keys(this.data.response).find(\n (key) => this.data.response[key] === maxValue || undefined\n );\n if (!date) {\n throw new Error(\"No peak date found\");\n }\n return new Date(date);\n }\n}\n",
14
+ "import z from \"zod\";\nimport type {\n ScrapePage,\n ScrapeResponse,\n ScrapeStatistics,\n Snippet,\n} from \"./types\";\nimport {scrapeResponseSchema} from \"./types\";\nimport type {NosibleClient} from \"../client\";\nimport {exportJson, importJson} from \"../utils/file\";\n\n/**\n * Represents scraped data for a single web page and provides helpers\n * to work with ordered snippets and serialization.\n */\nexport class WebPageData {\n private client: NosibleClient;\n public data: ScrapeResponse;\n private snippets: Snippet[];\n public page: ScrapePage;\n public fullText: string;\n public metadata: Record<string, any>;\n public structured: any[];\n public urlTree: Record<string, any>;\n public statistics: ScrapeStatistics;\n /**\n * Creates a new `WebPageData` instance from a validated scrape response.\n *\n * @param client - Nosible client used by the consumer of this instance\n * @param res - Validated scrape response payload\n */\n constructor(client: NosibleClient, res: ScrapeResponse) {\n this.client = client;\n this.data = res;\n this.snippets = mapSnippetToArray(res);\n this.page = this.data.page;\n this.fullText = this.data.full_text;\n this.metadata = this.data.metadata;\n this.structured = this.data.structured;\n this.urlTree = this.data.url_tree;\n this.statistics = this.data.statistics;\n }\n\n /**\n * Hydrates a `WebPageData` instance from a JSON file on disk.\n * The file contents are validated with `scrapeResponseSchema`.\n *\n * @param client - Nosible client used by the consumer of this instance\n * @param inputPath - Absolute or relative path to the input JSON file\n * @returns A `WebPageData` instance built from the validated JSON\n */\n static async fromJson(\n client: NosibleClient,\n inputPath: string\n ): Promise<WebPageData> {\n const data = await importJson({filePath: inputPath});\n const validData = scrapeResponseSchema.safeParse(data);\n if (!validData.success) {\n throw new Error(\"Provided JSON is not a valid scrape response\");\n }\n return new WebPageData(client, validData.data);\n }\n\n /**\n * Writes the underlying scrape response to a JSON file.\n *\n * @param outputPath - Output file path for the JSON export\n * @returns A promise that resolves when the file is written\n */\n public async writeJson(outputPath: string): Promise<void> {\n return await exportJson(this.data, outputPath);\n }\n\n /**\n * Returns an ordered array of snippets\n * @returns {Snippet[]} An ordered array of snippets\n */\n public getSnippets(): Snippet[] {\n return this.snippets;\n }\n\n /**\n * Returns a snippet by hash key\n * @param {string} hashKey - The hash key of the snippet\n * @returns {Snippet | undefined} The snippet with the specified hash key\n */\n public getSnippet(hashKey: string): Snippet | undefined {\n return this.snippets.find((snippet) => snippet.url_hash === hashKey);\n }\n}\n\n/**\n * Maps the `snippets` object within a `ScrapeResponse` to an ordered array\n * by following the `prev_snippet_hash`/`next_snippet_hash` linked-list.\n *\n * @param data - The scrape response containing snippet entries\n * @returns {Snippet[]} An ordered array of snippets\n * @throws If the first or next snippet in the chain cannot be found\n */\nexport const mapSnippetToArray = (data: ScrapeResponse) => {\n const snippets: Snippet[] = [];\n const snippetKeys = Object.keys(data.snippets);\n\n if (snippetKeys.length === 0) {\n return snippets; // Return empty array if no snippets\n }\n\n // Unsorted snippets\n const unsortedSnippets: Snippet[] = [];\n snippetKeys.forEach((key) => {\n unsortedSnippets.push(data.snippets[key] as Snippet);\n });\n\n // Find first snippet\n const first = unsortedSnippets.find(\n (snippet) => snippet.prev_snippet_hash === null\n );\n if (!first) {\n throw new Error(\"No first snippet found\");\n }\n\n // Add first snippet to array\n snippets.push(first);\n\n // Add remaining snippets to array\n let current = first;\n while (current.next_snippet_hash) {\n const next = unsortedSnippets.find(\n (snippet) => snippet.snippet_hash === current.next_snippet_hash\n );\n if (!next) {\n throw new Error(\"No next snippet found\");\n }\n snippets.push(next);\n current = next;\n }\n return snippets;\n};\n",
15
+ "export interface TopicTrendRes {\n message: string;\n query: Query;\n response: {[key: string]: number};\n}\n\nexport interface Query {\n query: string;\n brand_safety: null;\n language: null;\n continent: null;\n region: null;\n country: null;\n sector: null;\n industry_group: null;\n industry: null;\n sub_industry: null;\n iab_tier_1: null;\n iab_tier_2: null;\n iab_tier_3: null;\n iab_tier_4: null;\n n_probes: number;\n shard_selector: string;\n shard_reranker: string;\n search_lang: string;\n search_words: {\n [key: string]: number;\n };\n}\n\n// TODO: How to handle when API return 500 error\n\n// TODO: Add logic to allow user to pass in start and end date and then remove these from the response\nexport class TopicTrend {\n data: TopicTrendRes;\n\n constructor(data: TopicTrendRes) {\n this.data = data;\n }\n\n peakDate(): Date {\n const maxValue = Math.max(...Object.values(this.data.response));\n const date = Object.keys(this.data.response).find(\n (key) => this.data.response[key] === maxValue || undefined\n );\n if (!date) {\n throw new Error(\"No peak date found\");\n }\n return new Date(date);\n }\n}\n",
16
16
  "import Bottleneck from \"bottleneck\";\n\ntype Limit = {\n minute: number;\n month: number;\n};\n\nexport type Plan = {\n key: string;\n name: string;\n rateLimits: {\n scrapeUrl: Limit;\n bulk: Limit;\n fast: Limit;\n };\n};\n\nconst planLimits: Plan[] = [\n // Legacy Plans\n {\n key: \"basic\",\n name: \"Legacy\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 1400},\n bulk: {minute: 60, month: 1400},\n fast: {minute: 60, month: 14_000},\n },\n },\n {\n key: \"pro\",\n name: \"Legacy\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 6700},\n bulk: {minute: 60, month: 6700},\n fast: {minute: 60, month: 67_000},\n },\n },\n {\n key: \"pro+\",\n name: \"Legacy\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 32_000},\n bulk: {minute: 60, month: 32_000},\n fast: {minute: 60, month: 320_000},\n },\n },\n {\n key: \"bus\",\n name: \"Legacy\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 200_000},\n bulk: {minute: 60, month: 200_000},\n fast: {minute: 60, month: 2_000_000},\n },\n },\n {\n key: \"bus+\",\n name: \"Legacy\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 500_000},\n bulk: {minute: 60, month: 500_000},\n fast: {minute: 120, month: 5_000_000},\n },\n },\n {\n key: \"prod\",\n name: \"Legacy\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 1_500_000},\n bulk: {minute: 60, month: 1_500_000},\n fast: {minute: 360, month: 15_000_000},\n },\n },\n {\n key: \"chat\",\n name: \"Legacy\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 1_500_000},\n bulk: {minute: 60, month: 1_500_000},\n fast: {minute: 360, month: 15_000_000},\n },\n },\n {\n key: \"self\",\n name: \"Legacy\",\n rateLimits: {\n scrapeUrl: {minute: 6000, month: 1_500_000},\n bulk: {minute: 6000, month: 1_500_000},\n fast: {minute: 36_000, month: 15_000_000},\n },\n },\n // Current Plans\n {\n key: \"test\",\n name: \"Free\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 300},\n bulk: {minute: 60, month: 300},\n fast: {minute: 60, month: 3000},\n },\n },\n {\n key: \"cons\",\n name: \"Consumer\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 3000},\n bulk: {minute: 60, month: 3000},\n fast: {minute: 120, month: 30_000},\n },\n },\n {\n key: \"stup\",\n name: \"Startup\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 30_000},\n bulk: {minute: 60, month: 30_000},\n fast: {minute: 360, month: 300_000},\n },\n },\n {\n key: \"busn\",\n name: \"Business\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 300_000},\n bulk: {minute: 60, month: 300_000},\n fast: {minute: 360, month: 3_000_000},\n },\n },\n {\n key: \"ent\",\n name: \"Enterprise\",\n rateLimits: {\n scrapeUrl: {minute: 60, month: 1_500_000},\n bulk: {minute: 60, month: 1_500_000},\n fast: {minute: 360, month: 15_000_000},\n },\n },\n];\n\nexport const getUserPlan = (apiKey: string): Plan => {\n // More than one pipe character is invalid\n if (apiKey.split(\"|\").length > 2) {\n throw new Error(\"Invalid API key\");\n }\n const planKey = apiKey.split(\"|\")[0];\n const plan = planLimits.find((p) => p.key === planKey);\n if (!plan) {\n throw new Error(\"Invalid API key\");\n }\n return plan;\n};\n\nconst minMs = 60 * 1000;\nconst monthMs = 60 * 60 * 24 * 30 * 1000;\n\nexport const getLimiters = (\n planKey: string\n): {\n scrapeUrl: Bottleneck;\n bulk: Bottleneck;\n fast: Bottleneck;\n} => {\n const plan = getUserPlan(planKey);\n\n // TODO: Add max delay\n\n // Create limiter for scrape-url method\n const scrapeUrlMinLimiter = new Bottleneck({\n reservoir: plan.rateLimits.scrapeUrl.minute, // Initial number of requests\n reservoirRefreshAmount: plan.rateLimits.scrapeUrl.minute, // Refill amount\n reservoirRefreshInterval: minMs, // Refill every minute (in ms)\n });\n\n const scrapeUrlMonthLimiter = new Bottleneck({\n reservoir: plan.rateLimits.scrapeUrl.month,\n reservoirRefreshAmount: plan.rateLimits.scrapeUrl.month,\n reservoirRefreshInterval: monthMs,\n });\n\n const scrapeUrlLimiter = scrapeUrlMinLimiter.chain(scrapeUrlMonthLimiter);\n\n // Create limiter for bulk method\n const bulkMinLimiter = new Bottleneck({\n reservoir: plan.rateLimits.bulk.minute,\n reservoirRefreshAmount: plan.rateLimits.bulk.minute,\n reservoirRefreshInterval: minMs,\n });\n\n const bulkMonthLimiter = new Bottleneck({\n reservoir: plan.rateLimits.bulk.month,\n reservoirRefreshAmount: plan.rateLimits.bulk.month,\n reservoirRefreshInterval: monthMs,\n });\n\n const bulkLimiter = bulkMinLimiter.chain(bulkMonthLimiter);\n\n // Create limiter for fast method\n const fastMinLimiter = new Bottleneck({\n reservoir: plan.rateLimits.fast.minute,\n reservoirRefreshAmount: plan.rateLimits.fast.minute,\n reservoirRefreshInterval: minMs,\n });\n\n const fastMonthLimiter = new Bottleneck({\n reservoir: plan.rateLimits.fast.month,\n reservoirRefreshAmount: plan.rateLimits.fast.month,\n reservoirRefreshInterval: monthMs,\n });\n\n const fastLimiter = fastMinLimiter.chain(fastMonthLimiter);\n\n return {\n scrapeUrl: scrapeUrlLimiter,\n bulk: bulkLimiter,\n fast: fastLimiter,\n };\n};\n",
17
17
  "/**\n * Nosible AI Search API Client\n *\n * A comprehensive TypeScript client for interacting with the Nosible AI-powered search engine.\n * This client provides fast, comprehensive, and bulk search capabilities across web-scale data,\n * along with URL scraping and topic trend analysis features.\n *\n * @packageDocumentation\n *\n * @example\n * ```typescript\n * import { NosibleClient } from 'nosible-js';\n *\n * // Initialize with API key\n * const client = new NosibleClient('your-api-key');\n *\n * // Or use environment variable NOSIBLE_API_KEY\n * const client = new NosibleClient();\n *\n * // Perform a fast search\n * const results = await client.fastSearch({\n * question: 'Who has invested in Nosible?',\n * nResults: 15\n * });\n *\n * // Perform AI-powered search\n * const aiResults = await client.aiSearch({\n * question: 'What are the latest trends in AI technology?',\n * instruction: 'Focus on recent developments and breakthrough innovations'\n * });\n *\n * // Scrape a URL\n * const webpage = await client.scrapeUrl('https://example.com');\n *\n * // Analyze topic trends\n * const trends = await client.topicTrend('artificial intelligence');\n * ```\n */\n\nimport {type SqlFilter} from \"./search/sqlFilter\";\nimport {\n Search,\n userSearchParamsSchema,\n clientDefaultSearchParamsSchema,\n type ClientDefaultSearchParamsType,\n type ClientSearchParamsSchema,\n type UserAiSearchParamsType,\n type UserSearchParamsType,\n} from \"./search/search\";\nimport {WebPageData} from \"./scrape/webPageData\";\nimport {TopicTrend} from \"./topicTrend/topicTrend\";\nimport type {BulkResType, ScrapeFullRes, SearchResType} from \"./api/schemas\";\nimport {getLimiters, getUserPlan, type Plan} from \"./utils/userPlan\";\nimport type Bottleneck from \"bottleneck\";\nimport {OpenAI} from \"openai\";\nimport z from \"zod\";\nimport {createResultSet} from \"./search/resultFactory\";\nimport {createResult} from \"./search/resultFactory\";\nimport type {ResultSet} from \"./search/resultSet\";\nimport {bulkSearchDownload} from \"./search/bulkSearch\";\nimport {\n callNosibleApi,\n validateFastSearchParams,\n validateBulkSearchParams,\n} from \"./api/index\";\nimport {SearchSet} from \"./search/searchSet\";\n\nconst fastSearchesParamsSchema = z.union([\n userSearchParamsSchema.omit({question: true}).extend({\n questions: z.array(z.string()),\n }),\n z.instanceof(SearchSet),\n]);\n\nexport type FastSearchesParamsType = z.infer<typeof fastSearchesParamsSchema>;\n\n/**\n * Nosible API Client\n *\n * Main client class for interacting with the Nosible AI Search API.\n * Provides methods for fast search, standard search, and bulk search operations.\n *\n * @example\n * ```typescript\n * // Initialize with API key\n * const client = new Nosible('your-api-key');\n *\n * // Or use environment variable NOSIBLE_API_KEY\n * const client = new Nosible();\n *\n * // Perform a fast search\n * const results = await client.fastSearch({\n * question: 'Who has invested in Nosible?',\n * nResults: 15\n * });\n * ```\n */\nconst nosibleClientParams = z.union([\n z.string(),\n z.object({\n apiKey: z.string().optional(),\n llmApiKey: z.string().optional(),\n openAiBaseURL: z.string().optional(),\n sentimentModel: z.string().optional(),\n expansionsModel: z.string().optional(),\n searchDefaults: clientDefaultSearchParamsSchema.optional(),\n }),\n]);\n\n/**\n * Configuration options for initializing the NosibleClient.\n *\n * Can be provided as a string (API key only) or as an object with detailed configuration.\n *\n * @example\n * ```typescript\n * // Simple string API key\n * const client = new NosibleClient('your-api-key');\n *\n * // Object with both API keys\n * const client = new NosibleClient({\n * apiKey: 'your-nosible-api-key',\n * llmApiKey: 'your-openrouter-api-key' // Optional, for LLM features\n * });\n *\n * // Provide search defaults\n * const client = new NosibleClient({\n * searchDefaults: {\n * nResults: 20,\n * algorithm: 'hybrid-2',\n * continent: 'North America'\n * }\n * });\n * ```\n */\nexport type NosibleClientParams = z.infer<typeof nosibleClientParams>;\n/**\n * Nosible API Client\n *\n * The main client class for interacting with the Nosible AI Search API. This class provides\n * a comprehensive interface for performing various types of searches, scraping web content,\n * and analyzing topic trends.\n *\n * Features:\n * - **Fast Search**: Quick, optimized searches with configurable result limits (10-100 results)\n * - **AI Search**: Advanced AI-powered searches with custom instructions\n * - **Bulk Search**: Large-scale searches for extensive data collection (1000-10000 results)\n * - **URL Scraping**: Extract structured content from web pages\n * - **Topic Trends**: Analyze trending topics and their popularity over time\n *\n * The client automatically handles rate limiting, request validation, and response parsing.\n * It also supports optional OpenRouter integration for enhanced LLM capabilities.\n *\n * @example\n * ```typescript\n * // Initialize with API key\n * const client = new NosibleClient('your-api-key');\n *\n * // Or use environment variable NOSIBLE_API_KEY\n * const client = new NosibleClient();\n *\n * // Initialize with default search parameters\n * const clientWithDefaults = new NosibleClient({\n * apiKey: 'your-api-key',\n * searchDefaults: {\n * nResults: 20,\n * algorithm: 'hybrid-2',\n * continent: 'North America'\n * }\n * });\n *\n * // Perform a fast search (will use defaults from client)\n * const results = await clientWithDefaults.fastSearch({\n * question: 'Who has invested in Nosible?'\n * // nResults, algorithm, and continent will use defaults\n * });\n *\n * // Perform a fast search\n * const results = await client.fastSearch({\n * question: 'Who has invested in Nosible?',\n * nResults: 15\n * });\n *\n * // Access search results\n * console.log(`Found ${results.length} results`);\n * results.forEach(result => {\n * console.log(`Title: ${result.title}`);\n * console.log(`URL: ${result.url}`);\n * console.log(`Content: ${result.content.substring(0, 200)}...`);\n * });\n * ```\n */\nexport class NosibleClient {\n /** Base URL for the Nosible API */\n private baseUrl: string = \"https://www.nosible.ai/search/v2\";\n /** Your Nosible API key for authentication */\n private apiKey: string;\n /** Optional OpenAI client for LLM integration via OpenRouter */\n public llmClient: OpenAI | undefined;\n /** LLM model to use for expansions */\n public expansionsModel: string = \"openai/gpt-4o\";\n /** Default search parameters to apply to all searches */\n private searchDefaults: ClientDefaultSearchParamsType | undefined;\n /** User plan information determining rate limits and quotas */\n private plan: Plan;\n /** Rate limiters for different API endpoints to prevent quota exceeded errors */\n private limiters: {\n /** Rate limiter for URL scraping operations */\n scrapeUrl: Bottleneck;\n /** Rate limiter for bulk search operations */\n bulk: Bottleneck;\n /** Rate limiter for fast search operations */\n fast: Bottleneck;\n };\n\n /**\n * Creates a new NosibleClient instance.\n *\n * The client can be initialized in several ways:\n * - With a string API key\n * - With an object containing API keys\n * - With no parameters (uses environment variables)\n *\n * Environment variables:\n * - `NOSIBLE_API_KEY`: Your Nosible API key (required if no params provided)\n * - `LLM_API_KEY`: Optional OpenRouter API key for LLM features\n *\n * @param params - Configuration options. Can be a string API key or an object with detailed configuration.\n *\n * @throws {Error} When no valid API key is provided\n *\n * @example\n * ```typescript\n * // Initialize with string API key\n * const client = new NosibleClient('your-api-key');\n *\n * // Initialize with object configuration\n * const client = new NosibleClient({\n * apiKey: 'your-nosible-api-key',\n * llmApiKey: 'your-openrouter-api-key'\n * });\n *\n * // Initialize with default search parameters\n * const client = new NosibleClient({\n * apiKey: 'your-nosible-api-key',\n * searchDefaults: {\n * nResults: 20,\n * algorithm: 'hybrid-2',\n * continent: 'North America'\n * }\n * });\n *\n * // Initialize using environment variables\n * const client = new NosibleClient();\n * ```\n */\n constructor(params?: NosibleClientParams) {\n /** Extract API key from string parameter */\n let apiKeyToUse: string | undefined;\n /** Extract OpenRouter API key for optional LLM integration */\n let llmApiKeyToUse: string | undefined;\n let openAiBaseURL: string | undefined;\n let searchDefaultsToUse: ClientDefaultSearchParamsType | undefined;\n\n if (typeof params === \"string\") {\n // string param provided\n apiKeyToUse = params;\n } else if (params) {\n // object params provided\n apiKeyToUse = params.apiKey || process.env.NOSIBLE_API_KEY;\n llmApiKeyToUse = params.llmApiKey || process.env.LLM_API_KEY;\n openAiBaseURL = params.openAiBaseURL;\n searchDefaultsToUse = params.searchDefaults;\n } else {\n // no params provided - use environment variables\n apiKeyToUse = process.env.NOSIBLE_API_KEY;\n llmApiKeyToUse = process.env.LLM_API_KEY;\n }\n\n /** Validate and set the Nosible API key */\n if (!apiKeyToUse) {\n throw new Error(\"API key is required\");\n } else {\n this.verifyAndSetApiKey(apiKeyToUse);\n }\n\n /** Initialize OpenAI client for LLM integration if OpenRouter API key is provided */\n if (llmApiKeyToUse) {\n this.llmClient = new OpenAI({\n apiKey: llmApiKeyToUse,\n baseURL: openAiBaseURL,\n });\n }\n\n /** Store API key, default search params, and initialize rate limiters based on user plan */\n this.apiKey = apiKeyToUse;\n this.searchDefaults = searchDefaultsToUse;\n this.plan = getUserPlan(this.apiKey);\n this.limiters = getLimiters(this.apiKey);\n }\n\n /**\n * Merges default search parameters with provided search parameters.\n *\n * Provided parameters take precedence over default parameters.\n *\n * @param params - The search parameters provided by the user\n * @returns Merged search parameters with defaults applied\n * @private\n */\n private mergeWithDefaultSearch(\n params: UserSearchParamsType\n ): UserSearchParamsType {\n if (!this.searchDefaults) {\n return params;\n }\n\n // Merge default search params with provided params\n // Provided params take precedence over defaults\n return {\n ...this.searchDefaults,\n ...params,\n };\n }\n\n /**\n * Validates and sets the API key for the client.\n *\n * The API key must be in the format \"key_id|secret_key\" with exactly one pipe separator.\n * This format allows for key identification and authentication.\n *\n * @param apiKey - The API key to validate and set\n * @throws {Error} When the API key is missing or has invalid format\n * @private\n */\n private verifyAndSetApiKey(apiKey: string | undefined) {\n if (!apiKey) {\n throw new Error(\"API key is required\");\n }\n /** Split API key to validate format (should be \"key_id|secret_key\") */\n const splits = apiKey.split(\"|\");\n if (splits.length !== 2) {\n throw new Error(\n \"API key is invalid - expected format 'key_id|secret_key'\"\n );\n }\n this.apiKey = apiKey;\n }\n\n /**\n * Makes an authenticated HTTP request to the Nosible API.\n *\n * This private method handles all HTTP communication with the API, including\n * authentication headers, request body serialization, and error handling.\n *\n * @param endpoint - The API endpoint to call (relative to baseUrl)\n * @param body - The request body to send as JSON\n * @returns The parsed JSON response from the API\n * @throws {Error} When the HTTP request fails or returns an error status\n * @private\n */\n private async _request(endpoint: string, body: any): Promise<any> {\n return callNosibleApi({\n endpoint,\n body,\n apiKey: this.apiKey,\n });\n }\n\n /**\n * Performs a fast search query with optimized performance.\n *\n * Fast search is designed for quick, efficient queries with smaller result sets.\n * It's ideal for real-time applications, autocomplete features, or when you need\n * rapid responses with a limited number of highly relevant results.\n *\n * Features:\n * - Optimized for speed (10-100 results)\n * - Supports advanced filtering and search algorithms\n * - Rate limited to prevent quota exceeded errors\n * - Returns structured ResultSet with metadata\n *\n * @param params - Search parameters including question, filters, and result count\n * @returns Promise resolving to a ResultSet containing search results and metadata\n *\n * @example\n * ```typescript\n * // Basic fast search\n * const results = await client.fastSearch({\n * question: 'latest AI technology trends',\n * nResults: 20\n * });\n *\n * // Advanced fast search with filters\n * const filteredResults = await client.fastSearch({\n * question: 'machine learning startups',\n * nResults: 50,\n * algorithm: 'hybrid-2',\n * minSimilarity: 0.7,\n * mustInclude: ['artificial intelligence', 'funding'],\n * mustExclude: ['cryptocurrency'],\n * continent: 'North America'\n * });\n *\n * // Process results\n * console.log(`Found ${results.length} results`);\n * for (const result of results) {\n * console.log(`Title: ${result.title}`);\n * console.log(`URL: ${result.url}`);\n * console.log(`Similarity: ${result.similarity}`);\n * }\n * ```\n */\n public async fastSearch(\n params: ClientSearchParamsSchema\n ): Promise<ResultSet> {\n let search: Search;\n\n // Type guard to check if we have a Search instance\n const hasSearchInstance = (\n params: ClientSearchParamsSchema\n ): params is {search: Search} => {\n return \"search\" in params;\n };\n\n if (hasSearchInstance(params)) {\n // Use provided Search instance\n if (params.search instanceof Search) {\n search = params.search;\n } else {\n throw new Error(\"Invalid search parameter provided.\");\n }\n } else {\n // Create new Search instance from params\n // Merge with default search parameters before creating Search instance\n const mergedParams = this.mergeWithDefaultSearch(params);\n search = new Search(mergedParams);\n }\n\n /** Generate search body from Search instance */\n const body = await search.searchBody({client: this});\n\n /** Validate search body */\n const validatedBody = validateFastSearchParams(body);\n\n /** Make API request and parse response */\n const {message, query, response} = (await this._request(\n \"fast-search\",\n validatedBody\n )) as SearchResType;\n\n const results = response.map((result) => {\n const fullResult = {...query, ...result};\n return fullResult;\n });\n /** Wrap response in ResultSet for enhanced functionality */\n const resultSet = createResultSet(this, results);\n return resultSet;\n }\n\n /**\n * Executes multiple searches in parallel using fast search.\n *\n * This method allows you to run multiple searches simultaneously, which is significantly\n * faster than executing them sequentially. It accepts either a SearchSet instance or\n * an object containing an array of questions with shared search parameters.\n *\n * @param params - Either a SearchSet instance or an object with questions and shared parameters\n * @param params.questions - Array of search questions (when not using SearchSet)\n * @param params.searches - Array of Search instances (when using SearchSet)\n * @param params.sharedParams - Shared search parameters applied to all questions\n * @returns Promise that resolves to an array of ResultSet objects, one for each search\n *\n * @example\n * ```typescript\n * // Using SearchSet instance\n * const search1 = new Search({ question: \"machine learning\", nResults: 10 });\n * const search2 = new Search({ question: \"artificial intelligence\", nResults: 10 });\n * const searchSet = new SearchSet([search1, search2]);\n *\n * const results = await client.fastSearches(searchSet);\n * // results[0] contains results for \"machine learning\"\n * // results[1] contains results for \"artificial intelligence\"\n * ```\n *\n * @example\n * ```typescript\n * // Using questions array with shared parameters\n * const params = {\n * questions: [\n * \"renewable energy trends\",\n * \"solar power developments\",\n * \"wind energy innovations\"\n * ],\n * nResults: 15,\n * language: \"en\",\n * region: \"us\",\n * publishStart: new Date(\"2023-01-01\")\n * };\n *\n * const results = await client.fastSearches(params);\n * // All searches use the same shared parameters but different questions\n * ```\n *\n * @example\n * ```typescript\n * // Advanced usage with mixed parameters\n * const searches = [\n * new Search({\n * question: \"blockchain technology\",\n * nResults: 20,\n * algorithm: \"cosine\"\n * }),\n * new Search({\n * question: \"cryptocurrency markets\",\n * nResults: 15,\n * minSimilarity: 0.8\n * })\n * ];\n *\n * const searchSet = new SearchSet(searches);\n * const results = await client.fastSearches(searchSet);\n * ```\n */\n public async fastSearches(\n params: FastSearchesParamsType\n ): Promise<ResultSet[]> {\n let searchSet: SearchSet;\n\n // Handle SearchSet input\n if (params instanceof SearchSet) {\n searchSet = params;\n } else {\n // Handle questions array with shared search parameters\n const {questions, ...sharedParams} = params;\n\n // Merge shared parameters with default search parameters\n const mergedSharedParams = this.mergeWithDefaultSearch(sharedParams);\n\n // Create Search instances for each question using merged shared parameters\n const searches = questions.map(\n (question) => new Search({question, ...mergedSharedParams})\n );\n\n searchSet = new SearchSet(searches);\n }\n\n // Execute fastSearch for all searches in parallel\n const results = await Promise.all(\n searchSet.searches.map((search) => this.fastSearch({search}))\n );\n\n return results;\n }\n\n /**\n * Performs an AI-powered search with custom instructions.\n *\n * AI search leverages advanced language models to understand complex queries\n * and custom instructions, providing more contextually relevant results.\n * This method is ideal for nuanced searches that require understanding intent,\n * context, or specific analytical requirements.\n *\n * Features:\n * - Natural language understanding of complex queries\n * - Custom instructions for specialized search behavior\n * - Context-aware result ranking and filtering\n * - Rate limited for optimal performance\n *\n * @param params - AI search parameters including question and custom instructions\n * @returns Promise resolving to a ResultSet containing AI-enhanced search results\n *\n * @example\n * ```typescript\n * // Basic AI search\n * const results = await client.aiSearch({\n * question: 'What are the environmental impacts of renewable energy?',\n * instruction: 'Focus on recent studies and quantitative data'\n * });\n *\n * // AI search with specific analytical focus\n * const analysisResults = await client.aiSearch({\n * question: 'company financial performance',\n * instruction: 'Compare revenue growth and profit margins across quarters',\n * nResults: 25,\n * algorithm: 'hybrid-3'\n * });\n *\n * // AI search for competitive analysis\n * const competitiveResults = await client.aiSearch({\n * question: 'competitors in the cloud computing market',\n * instruction: 'Identify key players, market share, and competitive advantages'\n * });\n * ```\n */\n public async aiSearch(params: UserAiSearchParamsType): Promise<ResultSet> {\n /** Execute AI search within rate limiter */\n /** Make direct API request with AI search parameters */\n const json = (await this._request(\"search\", params)) as SearchResType;\n /** Wrap response in ResultSet for enhanced functionality */\n\n const results = json.response.map((result) => {\n const fullResult = {...json.query, ...result};\n return fullResult;\n });\n const resultSet = createResultSet(this, results);\n return resultSet;\n }\n\n /**\n * Performs a bulk search for large-scale data collection.\n *\n * Bulk search is designed for comprehensive data gathering and analysis tasks.\n * It supports large result sets (1000-10000 results) and provides efficient\n * download mechanisms for extensive datasets. Results are encrypted and\n * downloaded asynchronously for optimal performance.\n *\n * Features:\n * - Large-scale data collection (1000-10000 results)\n * - Encrypted result delivery for security\n * - Asynchronous download processing\n * - Comprehensive filtering and search options\n * - Rate limited for optimal server performance\n * - Supports both raw parameters and Search instances\n *\n * @param params - Bulk search parameters including question or search instance, with comprehensive filtering options\n * @returns Promise resolving to a ResultSet containing bulk search results\n *\n * @example\n * ```typescript\n * // Basic bulk search\n * const results = await client.bulkSearch({\n * question: 'all articles about artificial intelligence',\n * nResults: 5000\n * });\n *\n * // Bulk search with comprehensive filtering\n * const filteredResults = await client.bulkSearch({\n * question: 'technology company funding rounds',\n * nResults: 10000,\n * algorithm: 'hybrid-3',\n * minSimilarity: 0.6,\n * continent: 'North America',\n * region: 'Silicon Valley',\n * mustInclude: ['venture capital', 'funding', 'investment'],\n * mustExclude: ['cryptocurrency', 'NFT'],\n * nProbes: 8,\n * nContextify: 512\n * });\n *\n * // Bulk search using a Search instance\n * const search = new Search({\n * question: 'renewable energy developments',\n * nResults: 7500,\n * algorithm: 'hybrid-2'\n * });\n * const searchResults = await client.bulkSearch({ search });\n *\n * // Process bulk results\n * console.log(`Retrieved ${results.length} results`);\n * const data = results.toJSON(); // Convert to JSON for analysis\n * ```\n */\n public async bulkSearch(\n params: ClientSearchParamsSchema\n ): Promise<ResultSet> {\n let search: Search;\n\n // Type guard to check if we have a Search instance\n const hasSearchInstance = (\n params: ClientSearchParamsSchema\n ): params is {search: Search} => {\n return \"search\" in params;\n };\n\n if (hasSearchInstance(params)) {\n // Use provided Search instance\n if (params.search instanceof Search) {\n search = params.search;\n } else {\n throw new Error(\"Invalid search parameter provided.\");\n }\n } else {\n // Create new Search instance from params\n // Merge with default search parameters before creating Search instance\n const mergedParams = this.mergeWithDefaultSearch(params);\n search = new Search(mergedParams);\n }\n\n /** Generate search body from Search instance */\n const body = await search.searchBody({client: this});\n\n /** Validate search body for bulk search */\n const validatedBody = validateBulkSearchParams(body);\n\n /** Request bulk search and get encrypted file location */\n const fileLocation = (await this._request(\n \"bulk-search\",\n validatedBody\n )) as BulkResType;\n\n /** Download and decrypt the bulk search results */\n const json = (await bulkSearchDownload({\n downloadFrom: fileLocation.download_from,\n decryptUsing: fileLocation.decrypt_using,\n })) as SearchResType;\n const results = json.response.map((result) => {\n const fullResult = {...json.query, ...result};\n return fullResult;\n });\n /** Wrap response in ResultSet for enhanced functionality */\n const resultSet = createResultSet(this, results);\n return resultSet;\n }\n\n /**\n * Scrapes and extracts structured content from a web URL.\n *\n * This method fetches the content of a web page and extracts structured information\n * including title, description, main content, metadata, and other relevant details.\n * The scraping is optimized for clean content extraction and handles various\n * website structures and formats.\n *\n * Features:\n * - Clean content extraction from web pages\n * - Structured data including metadata and content\n * - Handles various website formats and structures\n * - Rate limited to respect website policies\n * - Returns WebPage object with enhanced functionality\n *\n * @param url - The URL to scrape and extract content from\n * @returns Promise resolving to a WebPage object containing structured content\n *\n * @example\n * ```typescript\n * // Basic URL scraping\n * const webpage = await client.scrapeUrl('https://example.com/article');\n *\n * // Access scraped content\n * console.log(`Title: ${webpage.title}`);\n * console.log(`Description: ${webpage.description}`);\n * console.log(`Author: ${webpage.author}`);\n * console.log(`Published: ${webpage.published}`);\n * console.log(`Content length: ${webpage.content.length} characters`);\n *\n * // Extract specific content sections\n * const mainContent = webpage.content;\n * const bestChunk = webpage.bestChunk; // Most relevant content chunk\n *\n * // Use in combination with search\n * const searchResults = await client.fastSearch({\n * question: 'artificial intelligence news',\n * nResults: 10\n * });\n *\n * // Scrape the top result\n * if (searchResults.length > 0) {\n * const topArticle = await client.scrapeUrl(searchResults[0].url);\n * console.log(`Full article: ${topArticle.content}`);\n * }\n * ```\n */\n public async scrapeUrl(url: string): Promise<WebPageData> {\n /** Execute URL scraping within rate limiter */\n return this.limiters.scrapeUrl.schedule(async () => {\n /** Make API request to scrape the URL */\n const json = (await this._request(\"scrape-url\", {url})) as ScrapeFullRes;\n /** Wrap response in WebPage object for enhanced functionality */\n const webPage = new WebPageData(this, json.response);\n return webPage;\n });\n }\n\n /**\n * Analyzes topic trends and popularity over time.\n *\n * This method provides insights into how a topic's popularity and relevance\n * changes over time. It's useful for market research, content strategy,\n * trend analysis, and understanding topic momentum.\n *\n * Features:\n * - Historical trend analysis for any topic\n * - Popularity metrics and temporal patterns\n * - Optional SQL filtering for refined analysis\n * - Returns TopicTrend object with analytical data\n *\n * @param query - The topic or query to analyze trends for\n * @param sqlFilter - Optional SQL filter to refine the trend analysis\n * @returns Promise resolving to a TopicTrend object containing trend analysis data\n *\n * @example\n * ```typescript\n * // Basic trend analysis\n * const trends = await client.topicTrend('artificial intelligence');\n *\n * // Access trend data\n * console.log(`Topic: ${trends.query}`);\n * console.log(`Data points: ${trends.data.length}`);\n * trends.data.forEach(point => {\n * console.log(`Date: ${point.date}, Popularity: ${point.popularity}`);\n * });\n *\n * // Trend analysis with filtering\n * const filteredTrends = await client.topicTrend(\n * 'machine learning',\n * 'continent = \"North America\" AND published >= \"2023-01-01\"'\n * );\n *\n * // Analyze multiple related topics\n * const topics = ['AI', 'machine learning', 'deep learning', 'neural networks'];\n * for (const topic of topics) {\n * const trend = await client.topicTrend(topic);\n * console.log(`${topic} trend analysis complete`);\n * }\n *\n * // Use trend data for content strategy\n * const trendingTopics = ['blockchain', 'quantum computing', 'renewable energy'];\n * const trendAnalyses = await Promise.all(\n * trendingTopics.map(topic => client.topicTrend(topic))\n * );\n * ```\n */\n public async topicTrend(\n query: string,\n sqlFilter?: SqlFilter\n ): Promise<TopicTrend> {\n /** Prepare request body with query and optional SQL filter */\n const body = {query, sql_filter: sqlFilter};\n /** Make API request for trend analysis */\n const json = await this._request(\"topic-trend\", body);\n /** Wrap response in TopicTrend object for enhanced functionality */\n const topicTrend = new TopicTrend(json);\n return topicTrend;\n }\n}\n",
18
18
  "import {type SearchResultSemantics} from \"../api/schemas\";\nimport {NosibleClient} from \"../client\";\nimport {getSentiment} from \"../utils/llm\";\nimport {type SimilarUserSearchParamsType} from \"./search\";\nimport type {WebPageData} from \"../scrape/webPageData\";\nimport type {FlattenResult} from \"./result.types\";\nimport type {ResultSet} from \"./resultSet\";\n\n/**\n * Parameters for creating a Result instance\n */\nexport type ResultParams = {\n /** The Nosible client instance */\n client: NosibleClient;\n /** The raw search result data from the API */\n result: any;\n};\n\n/**\n * Represents a single search result from the Nosible search API.\n *\n * This class encapsulates all the data and functionality associated with a search result,\n * including metadata, content, semantic information, and methods for further operations\n * like sentiment analysis, finding similar results, and URL scraping.\n *\n * @example\n * ```typescript\n * const result = new Result({\n * client: nosibleClient,\n * result: apiResponseData\n * });\n *\n * // Get sentiment analysis\n * const sentiment = await result.getSentiment();\n *\n * // Find similar results\n * const similarResults = await result.getSimilar({ limit: 5 });\n * ```\n */\nexport class Result {\n // === Core Result Properties ===\n /**\n * Unique hash identifier for the URL\n */\n public url_hash!: string;\n\n /**\n * The full URL of the web page\n */\n public url!: string;\n\n /**\n * Network location (domain) of the URL\n */\n public netloc!: string;\n\n /**\n * Publication date of the content (ISO 8601 format)\n */\n public published!: string;\n\n /**\n * Date when the page was last visited/crawled (ISO 8601 format)\n */\n public visited!: string;\n\n /**\n * Language code of the content (e.g., 'en', 'es', 'fr')\n */\n public language!: string;\n\n /**\n * Author of the content, if available\n */\n public author!: string;\n\n /**\n * Title of the web page\n */\n public title!: string;\n\n /**\n * Meta description or summary of the content\n */\n public description!: string;\n\n /**\n * Full text content of the web page\n */\n public content!: string;\n\n /**\n * The most relevant content chunk for the search query\n */\n public best_chunk!: string;\n\n /**\n * Semantic search metadata including similarity scores and chunk information\n */\n public semantics!: SearchResultSemantics;\n\n // === Geographic and Industry Classification ===\n /**\n * Brand safety classification\n */\n public brand_safety!: string | null;\n\n /**\n * Continent classification\n */\n public continent!: string | null;\n\n /**\n * Geographic region classification\n */\n public region!: string | null;\n\n /**\n * Country classification (ISO 3166-1 alpha-2 code)\n */\n public country!: string | null;\n\n /**\n * Economic sector classification\n */\n public sector!: string | null;\n\n /**\n * Industry group classification\n */\n public industry_group!: string | null;\n\n /**\n * Industry classification\n */\n public industry!: string | null;\n\n /**\n * Sub-industry classification\n */\n public sub_industry!: string | null;\n\n // === IAB Content Categories ===\n /**\n * IAB Tier 1 content category\n */\n public iab_tier_1!: string | null;\n\n /**\n * IAB Tier 2 content category\n */\n public iab_tier_2!: string | null;\n\n /**\n * IAB Tier 3 content category\n */\n public iab_tier_3!: string | null;\n\n /**\n * IAB Tier 4 content category\n */\n public iab_tier_4!: string | null;\n\n /**\n * The Nosible client instance used for API operations\n */\n public client: NosibleClient;\n\n /**\n * Creates a new Result instance from raw API response data\n *\n * @param params - The result parameters containing client and raw data\n */\n constructor(params: ResultParams) {\n this.client = params.client;\n\n Object.assign(this, params.result);\n }\n\n /**\n * Creates a Result instance from a flattened result structure\n *\n * This method reconstructs the nested semantics object from flattened properties\n * and creates a new Result instance.\n *\n * @param client - The Nosible client instance\n * @param flatten - The flattened result data\n * @returns A new Result instance\n */\n static fromFlatten = (\n client: NosibleClient,\n flatten: FlattenResult\n ): Result => {\n const unflattened = {\n ...flatten,\n semantics: {\n origin_shard: flatten.origin_shard,\n chunks_total: flatten.chunks_total,\n chunks_matched: flatten.chunks_matched,\n chunks_kept: flatten.chunks_kept,\n similarity: flatten.similarity,\n },\n };\n\n return new Result({\n client: client,\n result: unflattened,\n });\n };\n\n /**\n * Analyzes the sentiment of the result content using an LLM\n *\n * This method requires the Nosible client to be configured with an OpenRouter API key.\n * The sentiment analysis returns a numerical score (typically ranging from -1 to 1)\n * where negative values indicate negative sentiment and positive values indicate positive sentiment.\n *\n * @param model - Optional model name for sentiment analysis (uses default if not specified)\n * @returns A promise that resolves to the sentiment score\n * @throws Error if the client is not configured with an OpenRouter API key\n *\n * @example\n * ```typescript\n * const sentiment = await result.getSentiment('gpt-4');\n * console.log(`Sentiment score: ${sentiment}`);\n * ```\n */\n public getSentiment = async (model?: string): Promise<number> => {\n if (!this.client.llmClient) {\n throw new Error(\n \"A Nosible client instance must be provided with a OpenRouter API key.\"\n );\n }\n return getSentiment({\n text: this.content,\n model: model,\n llmClient: this.client.llmClient,\n });\n };\n\n /**\n * Finds search results similar to this one based on content and metadata\n *\n * This method performs a new search using the title of this result as the query,\n * excluding the current result from the returned results. It's useful for discovering\n * related content or alternative sources on the same topic.\n *\n * @param params - Search parameters for finding similar results\n * @returns A promise that resolves to a ResultSet containing similar results\n *\n * @example\n * ```typescript\n * // Find 5 similar results\n * const similar = await result.getSimilar({ limit: 5 });\n *\n * // Find similar results with specific filters\n * const filteredSimilar = await result.getSimilar({\n * limit: 10,\n * country: 'US',\n * language: 'en'\n * });\n * ```\n */\n public getSimilar = async (\n params: SimilarUserSearchParamsType\n ): Promise<ResultSet> => {\n return this.client.fastSearch({\n question: this.title,\n excludeDocs: [this.url_hash],\n ...params,\n });\n };\n\n /**\n * Scrapes the full web page content from the result's URL\n *\n * This method uses the client's scraping functionality to retrieve the complete\n * web page content, which may include additional information not present in the\n * search result snippet.\n *\n * @returns A promise that resolves to WebPageData containing the scraped content\n *\n * @example\n * ```typescript\n * const pageData = await result.scrapeUrl();\n * console.log('Full page title:', pageData.title);\n * console.log('Full page content:', pageData.text);\n * ```\n */\n public scrapeUrl = async (): Promise<WebPageData> => {\n return this.client.scrapeUrl(this.url);\n };\n\n /**\n * Converts the Result to a flattened structure\n *\n * This method transforms the nested Result object into a flat structure where\n * semantic properties are top-level fields. This is useful for serialization,\n * storage, or when working with systems that prefer flat data structures.\n *\n * @returns A FlattenResult object with all properties flattened to top level\n *\n * @example\n * ```typescript\n * const flattened = result.flatten();\n * console.log('Similarity score:', flattened.similarity);\n * console.log('Chunks matched:', flattened.chunks_matched);\n * ```\n */\n public flatten = (): FlattenResult => {\n return {\n url_hash: this.url_hash,\n url: this.url,\n netloc: this.netloc,\n published: this.published,\n visited: this.visited,\n language: this.language,\n author: this.author,\n title: this.title,\n description: this.description,\n content: this.content,\n best_chunk: this.best_chunk,\n origin_shard: this.semantics.origin_shard,\n chunks_total: this.semantics.chunks_total,\n chunks_matched: this.semantics.chunks_matched,\n chunks_kept: this.semantics.chunks_kept,\n similarity: this.semantics.similarity,\n brand_safety: this.brand_safety,\n continent: this.continent,\n region: this.region,\n country: this.country,\n sector: this.sector,\n industry_group: this.industry_group,\n industry: this.industry,\n sub_industry: this.sub_industry,\n iab_tier_1: this.iab_tier_1,\n iab_tier_2: this.iab_tier_2,\n iab_tier_3: this.iab_tier_3,\n iab_tier_4: this.iab_tier_4,\n };\n };\n\n /**\n * Returns a plain object representation of the Result data\n *\n * This method provides a clean object with all the result properties,\n * maintaining the nested structure for semantic data. It's useful for\n * serialization, logging, or when you need to work with the raw data\n * without the class methods.\n *\n * @returns A plain object containing all result properties\n *\n * @example\n * ```typescript\n * const rawData = result.data();\n * console.log('Result metadata:', rawData.semantics);\n *\n * // Serialize to JSON\n * const json = JSON.stringify(rawData, null, 2);\n * ```\n */\n public data = () => {\n return {\n url_hash: this.url_hash,\n url: this.url,\n netloc: this.netloc,\n published: this.published,\n visited: this.visited,\n language: this.language,\n author: this.author,\n title: this.title,\n description: this.description,\n content: this.content,\n best_chunk: this.best_chunk,\n brand_safety: this.brand_safety,\n continent: this.continent,\n region: this.region,\n country: this.country,\n sector: this.sector,\n industry_group: this.industry_group,\n industry: this.industry,\n sub_industry: this.sub_industry,\n iab_tier_1: this.iab_tier_1,\n iab_tier_2: this.iab_tier_2,\n iab_tier_3: this.iab_tier_3,\n iab_tier_4: this.iab_tier_4,\n semantics: this.semantics,\n };\n };\n}\n",
@@ -23,7 +23,7 @@
23
23
  "import {createDecipheriv, createHmac, timingSafeEqual} from \"crypto\";\n\n/**\n * Decrypt data using Fernet-compatible decryption\n * Fernet uses: version (1 byte) | timestamp (8 bytes) | iv (16 bytes) | ciphertext | hmac (32 bytes)\n */\nexport const fernetDecrypt = (token: Buffer, key: string): Buffer => {\n try {\n // Decode the base64 key and derive encryption and signing keys\n const keyBuffer = Buffer.from(key, \"base64\");\n const signingKey = keyBuffer.subarray(0, 16);\n const encryptionKey = keyBuffer.subarray(16, 32);\n\n // Verify HMAC (last 32 bytes)\n const hmac = token.subarray(token.length - 32);\n const payload = token.subarray(0, token.length - 32);\n\n const expectedHmac = createHmac(\"sha256\", signingKey)\n .update(payload)\n .digest();\n\n if (!timingSafeEqual(hmac, expectedHmac)) {\n throw new Error(\"HMAC verification failed\");\n }\n\n // Extract components\n const version = payload[0];\n if (version !== 0x80) {\n throw new Error(`Unsupported Fernet version: ${version}`);\n }\n\n const iv = payload.subarray(9, 25); // Skip version (1) + timestamp (8)\n const ciphertext = payload.subarray(25);\n\n // Decrypt using AES-128-CBC\n const decipher = createDecipheriv(\"aes-128-cbc\", encryptionKey, iv);\n const decrypted = Buffer.concat([\n decipher.update(ciphertext),\n decipher.final(),\n ]);\n\n return decrypted;\n } catch (error) {\n console.error(\"Error decrypting data:\", error);\n throw error;\n }\n};\n",
24
24
  "import {\n exportJson,\n exportCsv,\n exportNdjson,\n importCsv,\n importJson,\n} from \"../utils/file\";\nimport {Search} from \"./search\";\nimport {z} from \"zod\";\nimport {isBrowser} from \"../utils\";\n\n/**\n * A collection of Search objects that can be executed together or managed as a batch.\n * \n * SearchSet provides convenient methods for creating, managing, and executing multiple searches.\n * It's particularly useful when you need to run multiple related searches with shared parameters\n * or when working with search results in bulk.\n * \n * @example\n * ```typescript\n * // Create individual searches\n * const search1 = new Search({ question: \"machine learning trends\", nResults: 10 });\n * const search2 = new Search({ question: \"AI developments\", nResults: 10 });\n * \n * // Create a SearchSet from an array of searches\n * const searchSet = new SearchSet([search1, search2]);\n * \n * // Or create from object format\n * const searchSetFromObj = new SearchSet({ searches: [search1, search2] });\n * \n * // Use with fastSearches\n * const results = await client.fastSearches(searchSet);\n * ```\n * \n * @example\n * ```typescript\n * // Create from questions array with shared parameters\n * const params = {\n * questions: [\"renewable energy\", \"solar power\", \"wind energy\"],\n * nResults: 15,\n * language: \"en\",\n * region: \"us\"\n * };\n * const results = await client.fastSearches(params);\n * ```\n */\n\nconst searchSetParams = z.union([\n z.object({\n searches: z.array(z.instanceof(Search)),\n }),\n z.array(z.instanceof(Search)),\n]);\n\nexport type SearchSetParams = z.infer<typeof searchSetParams>;\n\nexport class SearchSet {\n public searches: Search[] = [];\n public index: number;\n\n constructor(params: SearchSetParams) {\n // Handle both object and array forms\n if (Array.isArray(params)) {\n this.searches = params;\n } else {\n this.searches = params.searches;\n }\n\n this.index = 0;\n }\n\n /**\n * Creates a SearchSet from a JSON or CSV file asynchronously.\n * \n * The file should contain an array of search objects that conform to the Search parameter schema.\n * JSON files should contain the raw search objects, while CSV files should have columns\n * matching the Search parameter names.\n * \n * @param filePath - Path to the JSON or CSV file containing search definitions\n * @returns Promise that resolves to a new SearchSet instance\n * \n * @example\n * ```typescript\n * // Load searches from a JSON file\n * const searchSet = await SearchSet.fromFilePath(\"./searches.json\");\n * \n * // Load searches from a CSV file\n * const searchSetFromCsv = await SearchSet.fromFilePath(\"./searches.csv\");\n * ```\n * \n * @throws Error if the file type is not supported (must be .json or .csv)\n */\n static async fromFilePath(filePath: string): Promise<SearchSet> {\n if (filePath.endsWith(\".json\")) {\n const searches = await importJson({filePath: filePath});\n return new SearchSet(searches.map((search: any) => new Search(search)));\n } else if (filePath.endsWith(\".csv\")) {\n const searches = await importCsv({filePath: filePath});\n return new SearchSet(searches.map((search: any) => new Search(search)));\n } else throw new Error(\"Unsupported file type\");\n }\n\n /**\n * Creates a SearchSet from a File object asynchronously.\n * \n * This method is useful in browser environments when working with file uploads\n * or drag-and-drop functionality. The file should contain search definitions\n * in JSON or CSV format.\n * \n * @param file - File object to read from (must be JSON or CSV)\n * @returns Promise that resolves to a new SearchSet instance\n * \n * @example\n * ```typescript\n * // Handle file upload in a browser\n * const fileInput = document.getElementById('file-input') as HTMLInputElement;\n * const file = fileInput.files[0];\n * \n * if (file) {\n * const searchSet = await SearchSet.fromFile(file);\n * const results = await client.fastSearches(searchSet);\n * }\n * ```\n * \n * @throws Error if the file type is not supported (must be .json or .csv)\n */\n\n static async fromFile(file: File): Promise<SearchSet> {\n if (file.name.endsWith(\".json\")) {\n const searches = await importJson({file: file});\n return new SearchSet(searches.map((search: any) => new Search(search)));\n } else if (file.name.endsWith(\".csv\")) {\n const searches = await importCsv({file: file});\n return new SearchSet(searches.map((search: any) => new Search(search)));\n } else throw new Error(\"Unsupported file type\");\n }\n\n /**\n * Returns the next search in the set and advances the internal iterator.\n * \n * This method allows sequential iteration through the search set.\n * The index starts at -1 and increments with each call.\n * \n * @returns The next Search object in the set, or null if there are no more searches\n * \n * @example\n * ```typescript\n * const searchSet = new SearchSet([search1, search2, search3]);\n * \n * let search = searchSet.next(); // Returns search1\n * search = searchSet.next(); // Returns search2\n * search = searchSet.next(); // Returns search3\n * search = searchSet.next(); // Returns null (end of set)\n * ```\n */\n public next = (): Search | null => {\n this.index++;\n const search = this.searches[this.index];\n if (!search) {\n return null;\n }\n return search;\n };\n\n /**\n * Adds a new search to the end of the search set.\n * \n * @param search - The Search object to add to the set\n * \n * @example\n * ```typescript\n * const searchSet = new SearchSet([search1, search2]);\n * const newSearch = new Search({ question: \"blockchain technology\", nResults: 10 });\n * \n * searchSet.add(newSearch);\n * console.log(searchSet.searches.length); // 3\n * ```\n */\n public add = (search: Search) => {\n this.searches.push(search);\n };\n\n /**\n * Removes a search from the set at the specified index.\n * \n * @param index - The zero-based index of the search to remove\n * \n * @example\n * ```typescript\n * const searchSet = new SearchSet([search1, search2, search3]);\n * \n * searchSet.remove(1); // Removes search2\n * console.log(searchSet.searches.length); // 2\n * ```\n * \n * @throws Error if the index is out of bounds\n */\n public remove = (index: number) => {\n this.searches.splice(index, 1);\n };\n\n /**\n * Converts the search set to a Polars DataFrame.\n * \n * This method is only available in Node.js environments and requires the\n * 'nodejs-polars' package to be installed. Each search becomes a row in the DataFrame.\n * \n * @returns Promise that resolves to a Polars DataFrame\n * \n * @example\n * ```typescript\n * // Only works in Node.js environment\n * const df = await searchSet.toPolars();\n * console.log(df.shape); // [n_searches, n_columns]\n * ```\n * \n * @throws Error if called in a browser environment\n */\n public toPolars = async () => {\n if (isBrowser()) {\n throw new Error(\"toPolars is not supported in the browser\");\n } else {\n const pl = await import(\"nodejs-polars\");\n const df = pl.DataFrame(this.searches);\n return df;\n }\n };\n\n /**\n * Exports the search set to a CSV file.\n * \n * Each search in the set becomes a row in the CSV file with columns\n * corresponding to the search parameters.\n * \n * @param fileName - The name of the CSV file to create\n * \n * @example\n * ```typescript\n * await searchSet.writeToCsv(\"my-searches.csv\");\n * ```\n */\n public writeToCsv = async (fileName: string) => {\n await exportCsv(this.searches, fileName);\n };\n\n /**\n * Exports the search set to a JSON file.\n * \n * The entire search set is serialized as a JSON array, with each search\n * object containing all its parameters.\n * \n * @param fileName - The name of the JSON file to create\n * \n * @example\n * ```typescript\n * await searchSet.writeToJson(\"my-searches.json\");\n * ```\n */\n public writeToJson = async (fileName: string) => {\n await exportJson(this.searches, fileName);\n };\n\n /**\n * Exports the search set to a Newline Delimited JSON (NDJSON) file.\n * \n * Each search is written as a separate JSON object on its own line,\n * which is useful for streaming large datasets or incremental processing.\n * \n * @param fileName - The name of the NDJSON file to create\n * \n * @example\n * ```typescript\n * await searchSet.writeToNdjson(\"my-searches.ndjson\");\n * ```\n */\n public writeToNdjson = async (fileName: string) => {\n await exportNdjson(this.searches, fileName);\n };\n}\n"
25
25
  ],
26
- "mappings": "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",
27
- "debugId": "88064A0B7CBC67C664756E2164756E21",
26
+ "mappings": "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",
27
+ "debugId": "A7861032A0192DD264756E2164756E21",
28
28
  "names": []
29
29
  }