@framers/agentos-ext-web-search 1.1.0

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.
Files changed (41) hide show
  1. package/.eslintrc.json +21 -0
  2. package/CHANGELOG.md +16 -0
  3. package/LICENSE +21 -0
  4. package/README.md +218 -0
  5. package/dist/index.d.ts +58 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +100 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/services/searchProvider.d.ts +160 -0
  10. package/dist/services/searchProvider.d.ts.map +1 -0
  11. package/dist/services/searchProvider.js +342 -0
  12. package/dist/services/searchProvider.js.map +1 -0
  13. package/dist/tools/factCheck.d.ts +99 -0
  14. package/dist/tools/factCheck.d.ts.map +1 -0
  15. package/dist/tools/factCheck.js +287 -0
  16. package/dist/tools/factCheck.js.map +1 -0
  17. package/dist/tools/researchAggregator.d.ts +101 -0
  18. package/dist/tools/researchAggregator.d.ts.map +1 -0
  19. package/dist/tools/researchAggregator.js +275 -0
  20. package/dist/tools/researchAggregator.js.map +1 -0
  21. package/dist/tools/webSearch.d.ts +66 -0
  22. package/dist/tools/webSearch.d.ts.map +1 -0
  23. package/dist/tools/webSearch.js +122 -0
  24. package/dist/tools/webSearch.js.map +1 -0
  25. package/dist/types.d.ts +38 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +6 -0
  28. package/dist/types.js.map +1 -0
  29. package/manifest.json +65 -0
  30. package/package.json +73 -0
  31. package/src/index.ts +123 -0
  32. package/src/services/searchProvider.ts +416 -0
  33. package/src/tools/factCheck.ts +318 -0
  34. package/src/tools/researchAggregator.ts +297 -0
  35. package/src/tools/webSearch.ts +128 -0
  36. package/src/types.ts +41 -0
  37. package/test/integration.spec.ts +173 -0
  38. package/test/searchProvider.spec.ts +153 -0
  39. package/test/webSearch.spec.ts +128 -0
  40. package/tsconfig.json +21 -0
  41. package/vitest.config.ts +32 -0
package/.eslintrc.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "root": true,
3
+ "parser": "@typescript-eslint/parser",
4
+ "plugins": ["@typescript-eslint"],
5
+ "extends": [
6
+ "eslint:recommended",
7
+ "plugin:@typescript-eslint/recommended"
8
+ ],
9
+ "parserOptions": {
10
+ "ecmaVersion": 2022,
11
+ "sourceType": "module",
12
+ "project": "./tsconfig.json"
13
+ },
14
+ "rules": {
15
+ "@typescript-eslint/explicit-function-return-type": "off",
16
+ "@typescript-eslint/no-explicit-any": "warn",
17
+ "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
18
+ "no-console": ["warn", { "allow": ["warn", "error"] }]
19
+ },
20
+ "ignorePatterns": ["dist", "node_modules", "coverage", "*.js"]
21
+ }
package/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # @framers/agentos-ext-web-search
2
+
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`e6a2eb6`](https://github.com/framersai/agentos-extensions/commit/e6a2eb61145c5715df63668b795fe90720a3c7c1) Thanks [@jddunn](https://github.com/jddunn)! - Initial release of AgentOS extension packages.
8
+
9
+ - Auth: JWT authentication and subscription management
10
+ - Anchor Providers: Solana on-chain provenance anchoring
11
+ - Wunderland Tip Ingestion: Tip content processing pipeline
12
+ - Web Search: Search, research aggregation, and fact-checking
13
+ - Web Browser: Browser automation and content extraction
14
+ - Telegram Integration: Telegram Bot API integration
15
+ - Telegram Bot: Telegram bot communications handler
16
+ - CLI Executor: Shell command execution and file management
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Frame.dev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,218 @@
1
+ # Web Search Extension for AgentOS
2
+
3
+ Enable powerful web search capabilities for your AgentOS agents.
4
+
5
+ ## Features
6
+
7
+ - 🔍 **Web Search** - Search the web with multiple providers
8
+ - 📚 **Research Aggregator** - Compile research from multiple searches
9
+ - ✅ **Fact Checker** - Verify claims across sources
10
+ - 🌍 **Multi-provider Support** - Serper, SerpAPI, Brave, DuckDuckGo
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install @framers/agentos-ext-search
16
+ ```
17
+
18
+ ## Quick Start
19
+
20
+ ```typescript
21
+ import { AgentOS } from '@framers/agentos';
22
+ import searchExtension from '@framers/agentos-ext-search';
23
+
24
+ const agentos = new AgentOS();
25
+
26
+ await agentos.initialize({
27
+ // ... other config
28
+ extensionManifest: {
29
+ packs: [
30
+ {
31
+ factory: () => searchExtension({
32
+ manifestEntry: {} as any,
33
+ source: { sourceName: '@framers/agentos-ext-search' },
34
+ options: {
35
+ search: {
36
+ provider: 'serper',
37
+ apiKey: process.env.SERPER_API_KEY
38
+ }
39
+ }
40
+ })
41
+ }
42
+ ]
43
+ }
44
+ });
45
+ ```
46
+
47
+ ## Configuration
48
+
49
+ ### Environment Variables
50
+
51
+ ```bash
52
+ # Option 1: Serper (2,500 free queries)
53
+ SERPER_API_KEY=your_serper_api_key
54
+
55
+ # Option 2: SerpAPI (100 free/month)
56
+ SERPAPI_API_KEY=your_serpapi_key
57
+
58
+ # Option 3: Brave (2,000 free/month)
59
+ BRAVE_SEARCH_API_KEY=your_brave_api_key
60
+
61
+ # Optional: Override provider
62
+ SEARCH_PROVIDER=serper # or serpapi, brave, duckduckgo
63
+ ```
64
+
65
+ ### Programmatic Configuration
66
+
67
+ ```typescript
68
+ {
69
+ search: {
70
+ provider: 'serper', // 'serper' | 'serpapi' | 'brave' | 'duckduckgo'
71
+ apiKey: 'your-api-key',
72
+ rateLimit: 5 // requests per second
73
+ }
74
+ }
75
+ ```
76
+
77
+ ## Available Tools
78
+
79
+ ### 1. Web Search
80
+
81
+ Search the web for information.
82
+
83
+ **Input:**
84
+ ```typescript
85
+ {
86
+ query: string; // Search query
87
+ numResults?: number; // Results to return (1-10, default: 5)
88
+ searchType?: string; // 'web' | 'news' | 'images' | 'videos'
89
+ timeRange?: string; // 'any' | 'day' | 'week' | 'month' | 'year'
90
+ region?: string; // Country code: 'us', 'uk', 'fr', etc.
91
+ }
92
+ ```
93
+
94
+ **Example:**
95
+ ```typescript
96
+ const result = await tool.execute({
97
+ query: "latest AI developments",
98
+ numResults: 5,
99
+ timeRange: "week"
100
+ });
101
+ ```
102
+
103
+ ### 2. Research Aggregator
104
+
105
+ Perform comprehensive research on a topic.
106
+
107
+ **Input:**
108
+ ```typescript
109
+ {
110
+ topic: string; // Research topic
111
+ searchQueries?: string[]; // Specific queries to run
112
+ sources?: string[]; // 'web' | 'academic' | 'news'
113
+ maxResultsPerQuery?: number; // Results per query (default: 3)
114
+ }
115
+ ```
116
+
117
+ ### 3. Fact Checker
118
+
119
+ Verify claims across multiple sources.
120
+
121
+ **Input:**
122
+ ```typescript
123
+ {
124
+ claim: string; // Claim to verify
125
+ context?: string; // Additional context
126
+ sources?: string[]; // Specific sources to check
127
+ }
128
+ ```
129
+
130
+ ## Provider Setup
131
+
132
+ ### Serper.dev (Recommended)
133
+ 1. Sign up: https://serper.dev/signup
134
+ 2. Get API key from dashboard
135
+ 3. 2,500 free queries
136
+
137
+ ### SerpAPI
138
+ 1. Sign up: https://serpapi.com/users/sign_up
139
+ 2. Copy API key from account page
140
+ 3. 100 free searches/month
141
+
142
+ ### Brave Search
143
+ 1. Register: https://brave.com/search/api/
144
+ 2. Get API key
145
+ 3. 2,000 free queries/month
146
+
147
+ ### DuckDuckGo (Fallback)
148
+ - No API key required
149
+ - Limited functionality
150
+ - Rate limited
151
+
152
+ ## Usage with Agents
153
+
154
+ Once installed, agents can use search tools:
155
+
156
+ ```typescript
157
+ // Agent conversation
158
+ User: "Search for information about quantum computing"
159
+ Agent: [Uses webSearch tool] Here's what I found about quantum computing...
160
+
161
+ User: "Research the latest renewable energy developments"
162
+ Agent: [Uses researchAggregator tool] I've compiled research from multiple sources...
163
+
164
+ User: "Fact check: Is coffee the second most traded commodity?"
165
+ Agent: [Uses factCheck tool] After checking multiple sources...
166
+ ```
167
+
168
+ ## Error Handling
169
+
170
+ The extension handles various error scenarios:
171
+
172
+ ```typescript
173
+ // Missing API key
174
+ {
175
+ success: false,
176
+ error: "Search provider not configured",
177
+ details: {
178
+ message: "Please configure a search API key",
179
+ providers: [/* signup links */]
180
+ }
181
+ }
182
+
183
+ // Rate limiting
184
+ // Automatically enforced based on provider limits
185
+
186
+ // Network errors
187
+ {
188
+ success: false,
189
+ error: "Search failed: Network error",
190
+ details: { provider: "serper", timestamp: "..." }
191
+ }
192
+ ```
193
+
194
+ ## Development
195
+
196
+ ```bash
197
+ # Install dependencies
198
+ npm install
199
+
200
+ # Build
201
+ npm run build
202
+
203
+ # Run tests
204
+ npm test
205
+
206
+ # Watch mode
207
+ npm run dev
208
+ ```
209
+
210
+ ## License
211
+
212
+ MIT © Frame.dev
213
+
214
+ ## Support
215
+
216
+ - Issues: https://github.com/framersai/agentos-extensions/issues
217
+ - Documentation: https://agentos.sh/docs/extensions
218
+ - Discord: https://discord.gg/agentos
@@ -0,0 +1,58 @@
1
+ /**
2
+ * AgentOS Web Search Extension
3
+ *
4
+ * Provides web search capabilities through multiple providers with automatic fallback.
5
+ *
6
+ * @module @framers/agentos-ext-web-search
7
+ * @version 1.0.0
8
+ * @license MIT
9
+ */
10
+ import { ExtensionContext, ExtensionPack } from '@framers/agentos';
11
+ import { WebSearchTool } from './tools/webSearch';
12
+ import { ResearchAggregatorTool } from './tools/researchAggregator';
13
+ import { FactCheckTool } from './tools/factCheck';
14
+ /**
15
+ * Extension configuration options
16
+ */
17
+ export interface WebSearchExtensionOptions {
18
+ /** Serper.dev API key */
19
+ serperApiKey?: string;
20
+ /** SerpAPI API key */
21
+ serpApiKey?: string;
22
+ /** Brave Search API key */
23
+ braveApiKey?: string;
24
+ /** Default maximum results for searches */
25
+ defaultMaxResults?: number;
26
+ /** Rate limiting configuration */
27
+ rateLimit?: {
28
+ maxRequests: number;
29
+ windowMs: number;
30
+ };
31
+ /** Extension priority in the stack */
32
+ priority?: number;
33
+ }
34
+ /**
35
+ * Creates the web search extension pack
36
+ *
37
+ * @param {ExtensionContext} context - The extension context
38
+ * @returns {ExtensionPack} The configured extension pack
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * import { createExtensionPack } from '@framers/agentos-ext-web-search';
43
+ *
44
+ * const pack = createExtensionPack({
45
+ * options: {
46
+ * serperApiKey: process.env.SERPER_API_KEY,
47
+ * defaultMaxResults: 10
48
+ * },
49
+ * logger: console
50
+ * });
51
+ * ```
52
+ */
53
+ export declare function createExtensionPack(context: ExtensionContext): ExtensionPack;
54
+ export { WebSearchTool, ResearchAggregatorTool, FactCheckTool };
55
+ export { SearchProviderService, SearchResult, ProviderResponse } from './services/searchProvider';
56
+ export type { SearchProviderConfig } from './services/searchProvider';
57
+ export default createExtensionPack;
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kCAAkC;IAClC,SAAS,CAAC,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CA0D5E;AAGD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,aAAa,EAAE,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClG,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,eAAe,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /**
3
+ * AgentOS Web Search Extension
4
+ *
5
+ * Provides web search capabilities through multiple providers with automatic fallback.
6
+ *
7
+ * @module @framers/agentos-ext-web-search
8
+ * @version 1.0.0
9
+ * @license MIT
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SearchProviderService = exports.FactCheckTool = exports.ResearchAggregatorTool = exports.WebSearchTool = void 0;
13
+ exports.createExtensionPack = createExtensionPack;
14
+ const webSearch_1 = require("./tools/webSearch");
15
+ Object.defineProperty(exports, "WebSearchTool", { enumerable: true, get: function () { return webSearch_1.WebSearchTool; } });
16
+ const researchAggregator_1 = require("./tools/researchAggregator");
17
+ Object.defineProperty(exports, "ResearchAggregatorTool", { enumerable: true, get: function () { return researchAggregator_1.ResearchAggregatorTool; } });
18
+ const factCheck_1 = require("./tools/factCheck");
19
+ Object.defineProperty(exports, "FactCheckTool", { enumerable: true, get: function () { return factCheck_1.FactCheckTool; } });
20
+ const searchProvider_1 = require("./services/searchProvider");
21
+ /**
22
+ * Creates the web search extension pack
23
+ *
24
+ * @param {ExtensionContext} context - The extension context
25
+ * @returns {ExtensionPack} The configured extension pack
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { createExtensionPack } from '@framers/agentos-ext-web-search';
30
+ *
31
+ * const pack = createExtensionPack({
32
+ * options: {
33
+ * serperApiKey: process.env.SERPER_API_KEY,
34
+ * defaultMaxResults: 10
35
+ * },
36
+ * logger: console
37
+ * });
38
+ * ```
39
+ */
40
+ function createExtensionPack(context) {
41
+ const options = context.options || {};
42
+ // Initialize search service with configuration
43
+ const searchService = new searchProvider_1.SearchProviderService({
44
+ serperApiKey: options.serperApiKey,
45
+ serpApiKey: options.serpApiKey,
46
+ braveApiKey: options.braveApiKey,
47
+ rateLimit: options.rateLimit
48
+ });
49
+ // Create tool instances
50
+ const webSearchTool = new webSearch_1.WebSearchTool(searchService);
51
+ const researchAggregator = new researchAggregator_1.ResearchAggregatorTool(searchService);
52
+ const factCheckTool = new factCheck_1.FactCheckTool(searchService);
53
+ return {
54
+ name: '@framers/agentos-ext-web-search',
55
+ version: '1.0.0',
56
+ descriptors: [
57
+ {
58
+ id: 'webSearch',
59
+ kind: 'tool',
60
+ priority: options.priority || 50,
61
+ payload: webSearchTool
62
+ },
63
+ {
64
+ id: 'researchAggregator',
65
+ kind: 'tool',
66
+ priority: options.priority || 50,
67
+ payload: researchAggregator
68
+ },
69
+ {
70
+ id: 'factCheck',
71
+ kind: 'tool',
72
+ priority: options.priority || 50,
73
+ payload: factCheckTool
74
+ }
75
+ ],
76
+ /**
77
+ * Called when extension is activated
78
+ */
79
+ onActivate: async () => {
80
+ if (context.onActivate) {
81
+ await context.onActivate();
82
+ }
83
+ context.logger?.info('Web Search Extension activated');
84
+ },
85
+ /**
86
+ * Called when extension is deactivated
87
+ */
88
+ onDeactivate: async () => {
89
+ if (context.onDeactivate) {
90
+ await context.onDeactivate();
91
+ }
92
+ context.logger?.info('Web Search Extension deactivated');
93
+ }
94
+ };
95
+ }
96
+ var searchProvider_2 = require("./services/searchProvider");
97
+ Object.defineProperty(exports, "SearchProviderService", { enumerable: true, get: function () { return searchProvider_2.SearchProviderService; } });
98
+ // Default export for convenience
99
+ exports.default = createExtensionPack;
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAgDH,kDA0DC;AAvGD,iDAAkD;AA0GzC,8FA1GA,yBAAa,OA0GA;AAzGtB,mEAAoE;AAyG5C,uGAzGf,2CAAsB,OAyGe;AAxG9C,iDAAkD;AAwGF,8FAxGvC,yBAAa,OAwGuC;AAvG7D,8DAAkE;AAuBlE;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,mBAAmB,CAAC,OAAyB;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAoC,IAAI,EAAE,CAAC;IAEnE,+CAA+C;IAC/C,MAAM,aAAa,GAAG,IAAI,sCAAqB,CAAC;QAC9C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,aAAa,GAAG,IAAI,yBAAa,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,IAAI,2CAAsB,CAAC,aAAa,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,IAAI,yBAAa,CAAC,aAAa,CAAC,CAAC;IAEvD,OAAO;QACL,IAAI,EAAE,iCAAiC;QACvC,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE;YACX;gBACE,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;gBAChC,OAAO,EAAE,aAAa;aACvB;YACD;gBACE,EAAE,EAAE,oBAAoB;gBACxB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;gBAChC,OAAO,EAAE,kBAAkB;aAC5B;YACD;gBACE,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;gBAChC,OAAO,EAAE,aAAa;aACvB;SACF;QACD;;WAEG;QACH,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;YAC7B,CAAC;YACD,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACzD,CAAC;QACD;;WAEG;QACH,YAAY,EAAE,KAAK,IAAI,EAAE;YACvB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;YAC/B,CAAC;YACD,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;AACJ,CAAC;AAID,4DAAkG;AAAzF,uHAAA,qBAAqB,OAAA;AAG9B,iCAAiC;AACjC,kBAAe,mBAAmB,CAAC"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Configuration for search providers
3
+ */
4
+ export interface SearchProviderConfig {
5
+ serperApiKey?: string;
6
+ serpApiKey?: string;
7
+ braveApiKey?: string;
8
+ maxRetries?: number;
9
+ rateLimit?: {
10
+ maxRequests: number;
11
+ windowMs: number;
12
+ };
13
+ }
14
+ /**
15
+ * Search result structure
16
+ */
17
+ export interface SearchResult {
18
+ title: string;
19
+ url: string;
20
+ snippet: string;
21
+ position?: number;
22
+ }
23
+ /**
24
+ * Provider-specific response
25
+ */
26
+ export interface ProviderResponse {
27
+ provider: string;
28
+ results: SearchResult[];
29
+ metadata: {
30
+ query: string;
31
+ timestamp: string;
32
+ responseTime?: number;
33
+ fallback?: boolean;
34
+ };
35
+ }
36
+ /**
37
+ * Service for managing multiple search providers with fallback support
38
+ *
39
+ * @class SearchProviderService
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const service = new SearchProviderService({
44
+ * serperApiKey: 'your-key',
45
+ * rateLimit: { maxRequests: 10, windowMs: 60000 }
46
+ * });
47
+ *
48
+ * const results = await service.search('query');
49
+ * ```
50
+ */
51
+ export declare class SearchProviderService {
52
+ private config;
53
+ private rateLimitState;
54
+ /**
55
+ * Creates an instance of SearchProviderService
56
+ *
57
+ * @param {SearchProviderConfig} config - Configuration for the service
58
+ */
59
+ constructor(config: SearchProviderConfig);
60
+ /**
61
+ * Performs a search across available providers with automatic fallback
62
+ *
63
+ * @param {string} query - The search query
64
+ * @param {Object} options - Search options
65
+ * @param {number} [options.maxResults=10] - Maximum results to return
66
+ * @param {string} [options.provider] - Specific provider to use
67
+ * @returns {Promise<ProviderResponse>} Search results with metadata
68
+ *
69
+ * @throws {Error} If all providers fail and no fallback is available
70
+ */
71
+ search(query: string, options?: {
72
+ maxResults?: number;
73
+ provider?: string;
74
+ }): Promise<ProviderResponse>;
75
+ /**
76
+ * Searches using a specific provider
77
+ *
78
+ * @private
79
+ * @param {string} query - Search query
80
+ * @param {string} provider - Provider name
81
+ * @param {number} maxResults - Maximum results
82
+ * @param {number} startTime - Request start timestamp
83
+ * @returns {Promise<ProviderResponse>} Search results
84
+ */
85
+ private searchWithProvider;
86
+ /**
87
+ * Gets list of available providers based on configured API keys
88
+ *
89
+ * @private
90
+ * @returns {string[]} Array of available provider names
91
+ */
92
+ private getAvailableProviders;
93
+ /**
94
+ * Checks if a provider is within rate limits
95
+ *
96
+ * @private
97
+ * @param {string} provider - Provider name
98
+ * @returns {Promise<boolean>} True if within limits
99
+ */
100
+ private checkRateLimit;
101
+ /**
102
+ * Search using Serper.dev API
103
+ *
104
+ * @private
105
+ * @param {string} query - Search query
106
+ * @param {number} maxResults - Maximum results
107
+ * @returns {Promise<SearchResult[]>} Search results
108
+ */
109
+ private searchSerper;
110
+ /**
111
+ * Search using SerpAPI
112
+ *
113
+ * @private
114
+ * @param {string} query - Search query
115
+ * @param {number} maxResults - Maximum results
116
+ * @returns {Promise<SearchResult[]>} Search results
117
+ */
118
+ private searchSerpApi;
119
+ /**
120
+ * Search using Brave Search API
121
+ *
122
+ * @private
123
+ * @param {string} query - Search query
124
+ * @param {number} maxResults - Maximum results
125
+ * @returns {Promise<SearchResult[]>} Search results
126
+ */
127
+ private searchBrave;
128
+ /**
129
+ * Search using DuckDuckGo (HTML scraping fallback)
130
+ *
131
+ * @private
132
+ * @param {string} query - Search query
133
+ * @param {number} maxResults - Maximum results
134
+ * @param {number} startTime - Request start timestamp
135
+ * @returns {Promise<ProviderResponse>} Search results
136
+ */
137
+ private searchDuckDuckGo;
138
+ /**
139
+ * Search using DuckDuckGo instant answer API
140
+ *
141
+ * @private
142
+ * @param {string} query - Search query
143
+ * @param {number} maxResults - Maximum results
144
+ * @returns {Promise<SearchResult[]>} Search results
145
+ */
146
+ private searchDuckDuckGoAPI;
147
+ /**
148
+ * Gets recommended search providers with signup information
149
+ *
150
+ * @static
151
+ * @returns {Array} Array of provider recommendations
152
+ */
153
+ static getRecommendedProviders(): {
154
+ name: string;
155
+ signupUrl: string;
156
+ freeQuota: string;
157
+ description: string;
158
+ }[];
159
+ }
160
+ //# sourceMappingURL=searchProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchProvider.d.ts","sourceRoot":"","sources":["../../src/services/searchProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,cAAc,CAAoD;IAE1E;;;;OAIG;gBACS,MAAM,EAAE,oBAAoB;IAYxC;;;;;;;;;;OAUG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;KACb,GACL,OAAO,CAAC,gBAAgB,CAAC;IA2B5B;;;;;;;;;OASG;YACW,kBAAkB;IAmChC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;;;;;OAMG;YACW,cAAc;IAoB5B;;;;;;;OAOG;YACW,YAAY;IAqB1B;;;;;;;OAOG;YACW,aAAa;IAmB3B;;;;;;;OAOG;YACW,WAAW;IAuBzB;;;;;;;;OAQG;YACW,gBAAgB;IAgC9B;;;;;;;OAOG;YACW,mBAAmB;IAuCjC;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB;;;;;;CA4B/B"}