@hasna/search 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +82 -0
  3. package/dist/cli/components/ProviderStatus.d.ts +8 -0
  4. package/dist/cli/components/ProviderStatus.d.ts.map +1 -0
  5. package/dist/cli/components/ResultsList.d.ts +9 -0
  6. package/dist/cli/components/ResultsList.d.ts.map +1 -0
  7. package/dist/cli/index.d.ts +3 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +7972 -0
  10. package/dist/db/database.d.ts +5 -0
  11. package/dist/db/database.d.ts.map +1 -0
  12. package/dist/db/migrations.d.ts +3 -0
  13. package/dist/db/migrations.d.ts.map +1 -0
  14. package/dist/db/profiles.d.ts +13 -0
  15. package/dist/db/profiles.d.ts.map +1 -0
  16. package/dist/db/providers.d.ts +14 -0
  17. package/dist/db/providers.d.ts.map +1 -0
  18. package/dist/db/results.d.ts +38 -0
  19. package/dist/db/results.d.ts.map +1 -0
  20. package/dist/db/saved-searches.d.ts +14 -0
  21. package/dist/db/saved-searches.d.ts.map +1 -0
  22. package/dist/db/searches.d.ts +26 -0
  23. package/dist/db/searches.d.ts.map +1 -0
  24. package/dist/index.d.ts +9 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +4686 -0
  27. package/dist/lib/config.d.ts +7 -0
  28. package/dist/lib/config.d.ts.map +1 -0
  29. package/dist/lib/dedup.d.ts +4 -0
  30. package/dist/lib/dedup.d.ts.map +1 -0
  31. package/dist/lib/export.d.ts +4 -0
  32. package/dist/lib/export.d.ts.map +1 -0
  33. package/dist/lib/providers/arxiv.d.ts +11 -0
  34. package/dist/lib/providers/arxiv.d.ts.map +1 -0
  35. package/dist/lib/providers/bing.d.ts +9 -0
  36. package/dist/lib/providers/bing.d.ts.map +1 -0
  37. package/dist/lib/providers/brave.d.ts +9 -0
  38. package/dist/lib/providers/brave.d.ts.map +1 -0
  39. package/dist/lib/providers/exa.d.ts +9 -0
  40. package/dist/lib/providers/exa.d.ts.map +1 -0
  41. package/dist/lib/providers/github.d.ts +11 -0
  42. package/dist/lib/providers/github.d.ts.map +1 -0
  43. package/dist/lib/providers/google.d.ts +9 -0
  44. package/dist/lib/providers/google.d.ts.map +1 -0
  45. package/dist/lib/providers/hackernews.d.ts +9 -0
  46. package/dist/lib/providers/hackernews.d.ts.map +1 -0
  47. package/dist/lib/providers/index.d.ts +8 -0
  48. package/dist/lib/providers/index.d.ts.map +1 -0
  49. package/dist/lib/providers/perplexity.d.ts +9 -0
  50. package/dist/lib/providers/perplexity.d.ts.map +1 -0
  51. package/dist/lib/providers/reddit.d.ts +9 -0
  52. package/dist/lib/providers/reddit.d.ts.map +1 -0
  53. package/dist/lib/providers/serpapi.d.ts +11 -0
  54. package/dist/lib/providers/serpapi.d.ts.map +1 -0
  55. package/dist/lib/providers/transcriber.d.ts +27 -0
  56. package/dist/lib/providers/transcriber.d.ts.map +1 -0
  57. package/dist/lib/providers/twitter.d.ts +9 -0
  58. package/dist/lib/providers/twitter.d.ts.map +1 -0
  59. package/dist/lib/providers/types.d.ts +17 -0
  60. package/dist/lib/providers/types.d.ts.map +1 -0
  61. package/dist/lib/providers/youtube.d.ts +9 -0
  62. package/dist/lib/providers/youtube.d.ts.map +1 -0
  63. package/dist/lib/search.d.ts +11 -0
  64. package/dist/lib/search.d.ts.map +1 -0
  65. package/dist/lib/youtube-deep.d.ts +21 -0
  66. package/dist/lib/youtube-deep.d.ts.map +1 -0
  67. package/dist/mcp/index.d.ts +3 -0
  68. package/dist/mcp/index.d.ts.map +1 -0
  69. package/dist/mcp/index.js +21350 -0
  70. package/dist/server/index.d.ts +3 -0
  71. package/dist/server/index.d.ts.map +1 -0
  72. package/dist/server/index.js +5746 -0
  73. package/dist/server/serve.d.ts +2 -0
  74. package/dist/server/serve.d.ts.map +1 -0
  75. package/dist/types/index.d.ts +142 -0
  76. package/dist/types/index.d.ts.map +1 -0
  77. package/package.json +85 -0
@@ -0,0 +1,2 @@
1
+ export declare function startServer(port: number): void;
2
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AA4EA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA+N9C"}
@@ -0,0 +1,142 @@
1
+ import { z } from "zod";
2
+ export declare const PROVIDER_NAMES: readonly ["google", "serpapi", "exa", "perplexity", "brave", "bing", "twitter", "reddit", "youtube", "hackernews", "github", "arxiv"];
3
+ export type SearchProviderName = (typeof PROVIDER_NAMES)[number];
4
+ export declare const SearchProviderNameSchema: z.ZodEnum<["google", "serpapi", "exa", "perplexity", "brave", "bing", "twitter", "reddit", "youtube", "hackernews", "github", "arxiv"]>;
5
+ export declare const EXPORT_FORMATS: readonly ["json", "csv", "md"];
6
+ export type ExportFormat = (typeof EXPORT_FORMATS)[number];
7
+ export declare const ExportFormatSchema: z.ZodEnum<["json", "csv", "md"]>;
8
+ export interface SearchOptions {
9
+ limit?: number;
10
+ offset?: number;
11
+ dateRange?: {
12
+ from?: string;
13
+ to?: string;
14
+ };
15
+ language?: string;
16
+ region?: string;
17
+ safeSearch?: boolean;
18
+ }
19
+ export declare const SearchOptionsSchema: z.ZodObject<{
20
+ limit: z.ZodOptional<z.ZodNumber>;
21
+ offset: z.ZodOptional<z.ZodNumber>;
22
+ dateRange: z.ZodOptional<z.ZodObject<{
23
+ from: z.ZodOptional<z.ZodString>;
24
+ to: z.ZodOptional<z.ZodString>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ from?: string | undefined;
27
+ to?: string | undefined;
28
+ }, {
29
+ from?: string | undefined;
30
+ to?: string | undefined;
31
+ }>>;
32
+ language: z.ZodOptional<z.ZodString>;
33
+ region: z.ZodOptional<z.ZodString>;
34
+ safeSearch: z.ZodOptional<z.ZodBoolean>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ limit?: number | undefined;
37
+ offset?: number | undefined;
38
+ dateRange?: {
39
+ from?: string | undefined;
40
+ to?: string | undefined;
41
+ } | undefined;
42
+ language?: string | undefined;
43
+ region?: string | undefined;
44
+ safeSearch?: boolean | undefined;
45
+ }, {
46
+ limit?: number | undefined;
47
+ offset?: number | undefined;
48
+ dateRange?: {
49
+ from?: string | undefined;
50
+ to?: string | undefined;
51
+ } | undefined;
52
+ language?: string | undefined;
53
+ region?: string | undefined;
54
+ safeSearch?: boolean | undefined;
55
+ }>;
56
+ export interface SearchResult {
57
+ id: string;
58
+ searchId: string;
59
+ title: string;
60
+ url: string;
61
+ snippet: string;
62
+ source: SearchProviderName;
63
+ provider: string;
64
+ rank: number;
65
+ score: number | null;
66
+ publishedAt: string | null;
67
+ thumbnail: string | null;
68
+ metadata: Record<string, unknown>;
69
+ createdAt: string;
70
+ }
71
+ export interface Search {
72
+ id: string;
73
+ query: string;
74
+ providers: SearchProviderName[];
75
+ profileId: string | null;
76
+ resultCount: number;
77
+ duration: number;
78
+ createdAt: string;
79
+ }
80
+ export interface SavedSearch {
81
+ id: string;
82
+ name: string;
83
+ query: string;
84
+ providers: SearchProviderName[];
85
+ profileId: string | null;
86
+ options: SearchOptions;
87
+ createdAt: string;
88
+ lastRunAt: string | null;
89
+ }
90
+ export interface ProviderConfig {
91
+ name: SearchProviderName;
92
+ enabled: boolean;
93
+ apiKeyEnv: string;
94
+ rateLimit: number;
95
+ lastUsedAt: string | null;
96
+ metadata: Record<string, unknown>;
97
+ }
98
+ export interface SearchProfile {
99
+ id: string;
100
+ name: string;
101
+ description: string | null;
102
+ providers: SearchProviderName[];
103
+ options: SearchOptions;
104
+ createdAt: string;
105
+ }
106
+ export interface SearchConfig {
107
+ defaultLimit: number;
108
+ defaultProviders: SearchProviderName[];
109
+ defaultProfile: string | null;
110
+ transcriber: {
111
+ baseUrl: string;
112
+ fallbackCli: string;
113
+ };
114
+ dedup: boolean;
115
+ maxConcurrent: number;
116
+ }
117
+ export declare const DEFAULT_CONFIG: SearchConfig;
118
+ export interface UnifiedSearchResponse {
119
+ search: Search;
120
+ results: SearchResult[];
121
+ errors: Array<{
122
+ provider: SearchProviderName;
123
+ error: string;
124
+ }>;
125
+ }
126
+ export declare function generateId(): string;
127
+ export declare class SearchError extends Error {
128
+ code: string;
129
+ statusCode: number;
130
+ constructor(message: string, code: string, statusCode?: number);
131
+ }
132
+ export declare class ProviderError extends SearchError {
133
+ provider: SearchProviderName;
134
+ constructor(provider: SearchProviderName, message: string);
135
+ }
136
+ export declare class NotFoundError extends SearchError {
137
+ constructor(resource: string, id: string);
138
+ }
139
+ export declare class ValidationError extends SearchError {
140
+ constructor(message: string);
141
+ }
142
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@hasna/search",
3
+ "version": "0.0.2",
4
+ "description": "Unified search aggregator — 12 providers (Google, SerpAPI, Exa, Perplexity, Twitter, Reddit, YouTube, Brave, Bing, Hacker News, GitHub, arXiv) + YouTube transcription. CLI + MCP + REST API + Dashboard.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "search": "dist/cli/index.js",
10
+ "search-mcp": "dist/mcp/index.js",
11
+ "search-serve": "dist/server/index.js"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "LICENSE",
22
+ "README.md"
23
+ ],
24
+ "scripts": {
25
+ "build": "cd dashboard && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk && bun build src/mcp/index.ts --outdir dist/mcp --target bun && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/index.ts --outdir dist --target bun && tsc --emitDeclarationOnly --outDir dist",
26
+ "build:no-dashboard": "bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk && bun build src/mcp/index.ts --outdir dist/mcp --target bun && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/index.ts --outdir dist --target bun && tsc --emitDeclarationOnly --outDir dist",
27
+ "typecheck": "tsc --noEmit",
28
+ "test": "bun test",
29
+ "dev:cli": "bun run src/cli/index.tsx",
30
+ "dev:mcp": "bun run src/mcp/index.ts",
31
+ "dev:serve": "bun run src/server/index.ts",
32
+ "prepublishOnly": "bun run build"
33
+ },
34
+ "keywords": [
35
+ "search",
36
+ "meta-search",
37
+ "aggregator",
38
+ "google",
39
+ "exa",
40
+ "perplexity",
41
+ "brave",
42
+ "bing",
43
+ "twitter",
44
+ "reddit",
45
+ "youtube",
46
+ "hackernews",
47
+ "github",
48
+ "arxiv",
49
+ "mcp",
50
+ "ai",
51
+ "coding-agent",
52
+ "claude",
53
+ "cli",
54
+ "dashboard"
55
+ ],
56
+ "publishConfig": {
57
+ "registry": "https://registry.npmjs.org",
58
+ "access": "public"
59
+ },
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "https://github.com/hasna/search.git"
63
+ },
64
+ "bugs": {
65
+ "url": "https://github.com/hasna/search/issues"
66
+ },
67
+ "engines": {
68
+ "bun": ">=1.0.0"
69
+ },
70
+ "author": "Andrei Hasna <andrei@hasna.com>",
71
+ "license": "Apache-2.0",
72
+ "dependencies": {
73
+ "@modelcontextprotocol/sdk": "^1.12.1",
74
+ "chalk": "^5.4.1",
75
+ "commander": "^13.1.0",
76
+ "ink": "^5.2.0",
77
+ "react": "^18.3.1",
78
+ "zod": "^3.24.2"
79
+ },
80
+ "devDependencies": {
81
+ "@types/bun": "^1.2.4",
82
+ "@types/react": "^18.3.18",
83
+ "typescript": "^5.7.3"
84
+ }
85
+ }