@ayga/mcp-client 2.0.1 → 2.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.
- package/dist/index.js +22 -10
- package/dist/index.js.map +1 -1
- package/dist/parser-registry.d.ts +99 -0
- package/dist/parser-registry.d.ts.map +1 -0
- package/dist/parser-registry.js +262 -0
- package/dist/parser-registry.js.map +1 -0
- package/dist/tests/parser-registry.test.d.ts +7 -0
- package/dist/tests/parser-registry.test.d.ts.map +1 -0
- package/dist/tests/parser-registry.test.js +152 -0
- package/dist/tests/parser-registry.test.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2,23 +2,31 @@
|
|
|
2
2
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getRegistry } from "./parser-registry.js";
|
|
6
6
|
// Configuration
|
|
7
7
|
const API_URL = process.env.API_URL || "https://redis.ayga.tech";
|
|
8
8
|
const API_KEY = process.env.REDIS_API_KEY;
|
|
9
|
+
// Dynamic parser loading (set DYNAMIC_PARSERS=false to disable)
|
|
10
|
+
const ENABLE_DYNAMIC = process.env.DYNAMIC_PARSERS !== "false";
|
|
9
11
|
class AygaMCPServer {
|
|
10
12
|
server;
|
|
11
13
|
jwtToken;
|
|
12
14
|
tokenExpiry;
|
|
15
|
+
registry;
|
|
13
16
|
constructor() {
|
|
14
17
|
this.server = new Server({
|
|
15
18
|
name: "ayga-mcp-client",
|
|
16
|
-
version: "2.
|
|
19
|
+
version: "2.1.0",
|
|
17
20
|
}, {
|
|
18
21
|
capabilities: {
|
|
19
22
|
tools: {},
|
|
20
23
|
},
|
|
21
24
|
});
|
|
25
|
+
this.registry = getRegistry({
|
|
26
|
+
apiUrl: API_URL,
|
|
27
|
+
apiKey: API_KEY,
|
|
28
|
+
enableDynamic: ENABLE_DYNAMIC,
|
|
29
|
+
});
|
|
22
30
|
this.setupHandlers();
|
|
23
31
|
this.setupErrorHandlers();
|
|
24
32
|
}
|
|
@@ -60,7 +68,7 @@ class AygaMCPServer {
|
|
|
60
68
|
}
|
|
61
69
|
}
|
|
62
70
|
async submitParserTask(parserId, query, timeout = 60) {
|
|
63
|
-
const parser = getParserById(parserId);
|
|
71
|
+
const parser = await this.registry.getParserById(parserId);
|
|
64
72
|
if (!parser) {
|
|
65
73
|
throw new Error(`Unknown parser: ${parserId}`);
|
|
66
74
|
}
|
|
@@ -135,9 +143,10 @@ class AygaMCPServer {
|
|
|
135
143
|
throw new Error(`Timeout waiting for result after ${timeout}s (${attempts} attempts)`);
|
|
136
144
|
}
|
|
137
145
|
setupHandlers() {
|
|
138
|
-
// List available tools
|
|
146
|
+
// List available tools (dynamic)
|
|
139
147
|
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
140
|
-
const
|
|
148
|
+
const parsers = await this.registry.getParsers();
|
|
149
|
+
const tools = parsers.map((parser) => ({
|
|
141
150
|
name: `search_${parser.id}`,
|
|
142
151
|
description: `${parser.description} (Category: ${parser.category})`,
|
|
143
152
|
inputSchema: {
|
|
@@ -176,11 +185,11 @@ class AygaMCPServer {
|
|
|
176
185
|
// Handle list_parsers tool
|
|
177
186
|
if (name === "list_parsers") {
|
|
178
187
|
const category = args?.category;
|
|
179
|
-
let parsers =
|
|
188
|
+
let parsers = await this.registry.getParsers();
|
|
180
189
|
if (category) {
|
|
181
|
-
parsers =
|
|
190
|
+
parsers = parsers.filter((p) => p.category === category);
|
|
182
191
|
}
|
|
183
|
-
const categories =
|
|
192
|
+
const categories = await this.registry.getCategories();
|
|
184
193
|
const result = {
|
|
185
194
|
total: parsers.length,
|
|
186
195
|
categories: categories,
|
|
@@ -257,9 +266,12 @@ class AygaMCPServer {
|
|
|
257
266
|
async run() {
|
|
258
267
|
const transport = new StdioServerTransport();
|
|
259
268
|
await this.server.connect(transport);
|
|
260
|
-
|
|
269
|
+
// Pre-fetch parsers
|
|
270
|
+
const parsers = await this.registry.getParsers();
|
|
271
|
+
this.log("Ayga MCP Server v2.1.0 started");
|
|
261
272
|
this.log(`API URL: ${API_URL}`);
|
|
262
|
-
this.log(`
|
|
273
|
+
this.log(`Dynamic loading: ${ENABLE_DYNAMIC ? "enabled" : "disabled"}`);
|
|
274
|
+
this.log(`Total parsers: ${parsers.length}`);
|
|
263
275
|
this.log("Server ready on stdio transport");
|
|
264
276
|
}
|
|
265
277
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACH,qBAAqB,EACrB,sBAAsB,GACzB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Parser Registry
|
|
3
|
+
*
|
|
4
|
+
* Fetches parser configurations from the Python API and caches them.
|
|
5
|
+
* Falls back to static parsers on failure.
|
|
6
|
+
*/
|
|
7
|
+
import { ParserConfig } from "./parsers.js";
|
|
8
|
+
export interface ParserOptions {
|
|
9
|
+
parser_id: string;
|
|
10
|
+
timeout: number;
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
proxy?: string;
|
|
13
|
+
user_agent?: string;
|
|
14
|
+
custom_params?: Record<string, any>;
|
|
15
|
+
}
|
|
16
|
+
export interface RegistryConfig {
|
|
17
|
+
apiUrl: string;
|
|
18
|
+
apiKey?: string;
|
|
19
|
+
cacheTtlMs: number;
|
|
20
|
+
enableDynamic: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare class ParserRegistry {
|
|
23
|
+
private parsers;
|
|
24
|
+
private parserOptions;
|
|
25
|
+
private defaultOptions;
|
|
26
|
+
private lastFetch;
|
|
27
|
+
private lastOptionsFetch;
|
|
28
|
+
private fetchPromise;
|
|
29
|
+
private optionsFetchPromise;
|
|
30
|
+
private config;
|
|
31
|
+
private initialized;
|
|
32
|
+
constructor(config?: Partial<RegistryConfig>);
|
|
33
|
+
/**
|
|
34
|
+
* Get all parsers, fetching from API if cache is stale
|
|
35
|
+
*/
|
|
36
|
+
getParsers(): Promise<ParserConfig[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Get a parser by ID
|
|
39
|
+
*/
|
|
40
|
+
getParserById(id: string): Promise<ParserConfig | undefined>;
|
|
41
|
+
/**
|
|
42
|
+
* Get a parser by A-Parser name
|
|
43
|
+
*/
|
|
44
|
+
getParserByAParserName(name: string): Promise<ParserConfig | undefined>;
|
|
45
|
+
/**
|
|
46
|
+
* Get parsers by category
|
|
47
|
+
*/
|
|
48
|
+
getParsersByCategory(category: string): Promise<ParserConfig[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Get all categories
|
|
51
|
+
*/
|
|
52
|
+
getCategories(): Promise<string[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Force refresh of parser cache
|
|
55
|
+
*/
|
|
56
|
+
refresh(): Promise<ParserConfig[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Get static parsers (no API call)
|
|
59
|
+
*/
|
|
60
|
+
getStaticParsers(): ParserConfig[];
|
|
61
|
+
/**
|
|
62
|
+
* Get options for a specific parser
|
|
63
|
+
*/
|
|
64
|
+
getParserOptions(parserId: string): Promise<ParserOptions>;
|
|
65
|
+
/**
|
|
66
|
+
* Get timeout for a parser
|
|
67
|
+
*/
|
|
68
|
+
getParserTimeout(parserId: string): Promise<number>;
|
|
69
|
+
/**
|
|
70
|
+
* Check if parser is enabled
|
|
71
|
+
*/
|
|
72
|
+
isParserEnabled(parserId: string): Promise<boolean>;
|
|
73
|
+
/**
|
|
74
|
+
* Ensure options are fetched
|
|
75
|
+
*/
|
|
76
|
+
private ensureOptionsFetched;
|
|
77
|
+
/**
|
|
78
|
+
* Fetch parser options from API
|
|
79
|
+
*/
|
|
80
|
+
private fetchOptions;
|
|
81
|
+
/**
|
|
82
|
+
* Fetch parsers from API
|
|
83
|
+
*/
|
|
84
|
+
private fetchParsers;
|
|
85
|
+
/**
|
|
86
|
+
* Transform API parser response to ParserConfig
|
|
87
|
+
*/
|
|
88
|
+
private transformParser;
|
|
89
|
+
private log;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the global parser registry instance
|
|
93
|
+
*/
|
|
94
|
+
export declare function getRegistry(config?: Partial<RegistryConfig>): ParserRegistry;
|
|
95
|
+
/**
|
|
96
|
+
* Reset the global registry (for testing)
|
|
97
|
+
*/
|
|
98
|
+
export declare function resetRegistry(): void;
|
|
99
|
+
//# sourceMappingURL=parser-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-registry.d.ts","sourceRoot":"","sources":["../src/parser-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAA6B,MAAM,cAAc,CAAC;AA2BvE,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CAC1B;AASD,qBAAa,cAAc;IACvB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,cAAc,CAIpB;IACF,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAIhD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA2B3C;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAKlE;;OAEG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAK7E;;OAEG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKrE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKxC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAMxC;;OAEG;IACH,gBAAgB,IAAI,YAAY,EAAE;IAIlC;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAQhE;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzD;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzD;;OAEG;YACW,oBAAoB;IAyBlC;;OAEG;YACW,YAAY;IA8C1B;;OAEG;YACW,YAAY;IA4C1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,GAAG;CAMd;AAKD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAK5E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Parser Registry
|
|
3
|
+
*
|
|
4
|
+
* Fetches parser configurations from the Python API and caches them.
|
|
5
|
+
* Falls back to static parsers on failure.
|
|
6
|
+
*/
|
|
7
|
+
import { PARSERS as STATIC_PARSERS } from "./parsers.js";
|
|
8
|
+
const DEFAULT_CONFIG = {
|
|
9
|
+
apiUrl: process.env.API_URL || "https://redis.ayga.tech",
|
|
10
|
+
apiKey: process.env.REDIS_API_KEY,
|
|
11
|
+
cacheTtlMs: 5 * 60 * 1000, // 5 minutes
|
|
12
|
+
enableDynamic: process.env.DYNAMIC_PARSERS !== "false",
|
|
13
|
+
};
|
|
14
|
+
export class ParserRegistry {
|
|
15
|
+
parsers = [];
|
|
16
|
+
parserOptions = new Map();
|
|
17
|
+
defaultOptions = {
|
|
18
|
+
parser_id: "default",
|
|
19
|
+
timeout: 60,
|
|
20
|
+
enabled: true,
|
|
21
|
+
};
|
|
22
|
+
lastFetch = 0;
|
|
23
|
+
lastOptionsFetch = 0;
|
|
24
|
+
fetchPromise = null;
|
|
25
|
+
optionsFetchPromise = null;
|
|
26
|
+
config;
|
|
27
|
+
initialized = false;
|
|
28
|
+
constructor(config = {}) {
|
|
29
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get all parsers, fetching from API if cache is stale
|
|
33
|
+
*/
|
|
34
|
+
async getParsers() {
|
|
35
|
+
if (!this.config.enableDynamic) {
|
|
36
|
+
return STATIC_PARSERS;
|
|
37
|
+
}
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
const cacheValid = this.initialized && (now - this.lastFetch) < this.config.cacheTtlMs;
|
|
40
|
+
if (cacheValid) {
|
|
41
|
+
return this.parsers;
|
|
42
|
+
}
|
|
43
|
+
// Deduplicate concurrent fetch requests
|
|
44
|
+
if (this.fetchPromise) {
|
|
45
|
+
return this.fetchPromise;
|
|
46
|
+
}
|
|
47
|
+
this.fetchPromise = this.fetchParsers();
|
|
48
|
+
try {
|
|
49
|
+
const result = await this.fetchPromise;
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
this.fetchPromise = null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get a parser by ID
|
|
58
|
+
*/
|
|
59
|
+
async getParserById(id) {
|
|
60
|
+
const parsers = await this.getParsers();
|
|
61
|
+
return parsers.find(p => p.id === id);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get a parser by A-Parser name
|
|
65
|
+
*/
|
|
66
|
+
async getParserByAParserName(name) {
|
|
67
|
+
const parsers = await this.getParsers();
|
|
68
|
+
return parsers.find(p => p.aparserName === name);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get parsers by category
|
|
72
|
+
*/
|
|
73
|
+
async getParsersByCategory(category) {
|
|
74
|
+
const parsers = await this.getParsers();
|
|
75
|
+
return parsers.filter(p => p.category === category);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get all categories
|
|
79
|
+
*/
|
|
80
|
+
async getCategories() {
|
|
81
|
+
const parsers = await this.getParsers();
|
|
82
|
+
return [...new Set(parsers.map(p => p.category))];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Force refresh of parser cache
|
|
86
|
+
*/
|
|
87
|
+
async refresh() {
|
|
88
|
+
this.lastFetch = 0;
|
|
89
|
+
this.fetchPromise = null;
|
|
90
|
+
return this.getParsers();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get static parsers (no API call)
|
|
94
|
+
*/
|
|
95
|
+
getStaticParsers() {
|
|
96
|
+
return STATIC_PARSERS;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get options for a specific parser
|
|
100
|
+
*/
|
|
101
|
+
async getParserOptions(parserId) {
|
|
102
|
+
await this.ensureOptionsFetched();
|
|
103
|
+
return this.parserOptions.get(parserId.toLowerCase()) || {
|
|
104
|
+
...this.defaultOptions,
|
|
105
|
+
parser_id: parserId,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get timeout for a parser
|
|
110
|
+
*/
|
|
111
|
+
async getParserTimeout(parserId) {
|
|
112
|
+
const options = await this.getParserOptions(parserId);
|
|
113
|
+
return options.timeout;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if parser is enabled
|
|
117
|
+
*/
|
|
118
|
+
async isParserEnabled(parserId) {
|
|
119
|
+
const options = await this.getParserOptions(parserId);
|
|
120
|
+
return options.enabled;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Ensure options are fetched
|
|
124
|
+
*/
|
|
125
|
+
async ensureOptionsFetched() {
|
|
126
|
+
if (!this.config.enableDynamic) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const now = Date.now();
|
|
130
|
+
const cacheValid = (now - this.lastOptionsFetch) < this.config.cacheTtlMs;
|
|
131
|
+
if (cacheValid && this.parserOptions.size > 0) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (this.optionsFetchPromise) {
|
|
135
|
+
await this.optionsFetchPromise;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
this.optionsFetchPromise = this.fetchOptions();
|
|
139
|
+
try {
|
|
140
|
+
await this.optionsFetchPromise;
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
this.optionsFetchPromise = null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Fetch parser options from API
|
|
148
|
+
*/
|
|
149
|
+
async fetchOptions() {
|
|
150
|
+
try {
|
|
151
|
+
this.log("Fetching parser options from API...");
|
|
152
|
+
const response = await fetch(`${this.config.apiUrl}/parsers/options`, {
|
|
153
|
+
method: "GET",
|
|
154
|
+
headers: {
|
|
155
|
+
"Content-Type": "application/json",
|
|
156
|
+
...(this.config.apiKey ? { "X-API-Key": this.config.apiKey } : {}),
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
if (!response.ok) {
|
|
160
|
+
this.log(`Options API returned ${response.status}`, "debug");
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const data = await response.json();
|
|
164
|
+
// Update default options
|
|
165
|
+
if (data.defaults) {
|
|
166
|
+
this.defaultOptions = {
|
|
167
|
+
parser_id: "default",
|
|
168
|
+
timeout: data.defaults.timeout || 60,
|
|
169
|
+
enabled: true,
|
|
170
|
+
proxy: data.defaults.proxy || undefined,
|
|
171
|
+
user_agent: data.defaults.user_agent || undefined,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// Update per-parser options
|
|
175
|
+
if (data.overrides) {
|
|
176
|
+
for (const [parserId, options] of Object.entries(data.overrides)) {
|
|
177
|
+
this.parserOptions.set(parserId.toLowerCase(), options);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
this.lastOptionsFetch = Date.now();
|
|
181
|
+
this.log(`Loaded options for ${this.parserOptions.size} parsers`);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
this.log(`Failed to fetch parser options: ${error}`, "debug");
|
|
185
|
+
// Options are optional, use defaults
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Fetch parsers from API
|
|
190
|
+
*/
|
|
191
|
+
async fetchParsers() {
|
|
192
|
+
try {
|
|
193
|
+
this.log("Fetching parsers from API...");
|
|
194
|
+
const response = await fetch(`${this.config.apiUrl}/parsers`, {
|
|
195
|
+
method: "GET",
|
|
196
|
+
headers: {
|
|
197
|
+
"Content-Type": "application/json",
|
|
198
|
+
...(this.config.apiKey ? { "X-API-Key": this.config.apiKey } : {}),
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
if (!response.ok) {
|
|
202
|
+
throw new Error(`API returned ${response.status}: ${response.statusText}`);
|
|
203
|
+
}
|
|
204
|
+
const data = await response.json();
|
|
205
|
+
// Transform API response to ParserConfig format
|
|
206
|
+
const parsers = data.parsers
|
|
207
|
+
.filter(p => p.enabled !== false)
|
|
208
|
+
.map(p => this.transformParser(p));
|
|
209
|
+
this.parsers = parsers;
|
|
210
|
+
this.lastFetch = Date.now();
|
|
211
|
+
this.initialized = true;
|
|
212
|
+
this.log(`Loaded ${parsers.length} parsers from API`);
|
|
213
|
+
return parsers;
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
this.log(`Failed to fetch parsers: ${error}`, "error");
|
|
217
|
+
// Fall back to static parsers
|
|
218
|
+
if (!this.initialized) {
|
|
219
|
+
this.parsers = STATIC_PARSERS;
|
|
220
|
+
this.initialized = true;
|
|
221
|
+
this.log(`Falling back to ${STATIC_PARSERS.length} static parsers`);
|
|
222
|
+
}
|
|
223
|
+
return this.parsers;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Transform API parser response to ParserConfig
|
|
228
|
+
*/
|
|
229
|
+
transformParser(apiParser) {
|
|
230
|
+
return {
|
|
231
|
+
id: apiParser.id,
|
|
232
|
+
name: apiParser.name,
|
|
233
|
+
description: apiParser.description,
|
|
234
|
+
category: apiParser.category,
|
|
235
|
+
aparserName: apiParser.aparser_name,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
log(message, level = "info") {
|
|
239
|
+
if (process.env.DEBUG || level === "error") {
|
|
240
|
+
const timestamp = new Date().toISOString();
|
|
241
|
+
console.error(`[${timestamp}] [ParserRegistry] [${level.toUpperCase()}] ${message}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Singleton instance
|
|
246
|
+
let registryInstance = null;
|
|
247
|
+
/**
|
|
248
|
+
* Get the global parser registry instance
|
|
249
|
+
*/
|
|
250
|
+
export function getRegistry(config) {
|
|
251
|
+
if (!registryInstance || config) {
|
|
252
|
+
registryInstance = new ParserRegistry(config);
|
|
253
|
+
}
|
|
254
|
+
return registryInstance;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Reset the global registry (for testing)
|
|
258
|
+
*/
|
|
259
|
+
export function resetRegistry() {
|
|
260
|
+
registryInstance = null;
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=parser-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-registry.js","sourceRoot":"","sources":["../src/parser-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-registry.test.d.ts","sourceRoot":"","sources":["../../src/tests/parser-registry.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for parser-registry.ts
|
|
3
|
+
*
|
|
4
|
+
* Run with: npx tsx src/tests/parser-registry.test.ts
|
|
5
|
+
*/
|
|
6
|
+
import { ParserRegistry, getRegistry, resetRegistry } from "../parser-registry.js";
|
|
7
|
+
import { PARSERS } from "../parsers.js";
|
|
8
|
+
// Simple test framework
|
|
9
|
+
let passed = 0;
|
|
10
|
+
let failed = 0;
|
|
11
|
+
function test(name, fn) {
|
|
12
|
+
try {
|
|
13
|
+
const result = fn();
|
|
14
|
+
if (result instanceof Promise) {
|
|
15
|
+
result
|
|
16
|
+
.then(() => {
|
|
17
|
+
console.log(`✅ ${name}`);
|
|
18
|
+
passed++;
|
|
19
|
+
})
|
|
20
|
+
.catch((err) => {
|
|
21
|
+
console.log(`❌ ${name}: ${err}`);
|
|
22
|
+
failed++;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log(`✅ ${name}`);
|
|
27
|
+
passed++;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
console.log(`❌ ${name}: ${err}`);
|
|
32
|
+
failed++;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function assert(condition, message) {
|
|
36
|
+
if (!condition) {
|
|
37
|
+
throw new Error(message || "Assertion failed");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function assertEqual(actual, expected, message) {
|
|
41
|
+
if (actual !== expected) {
|
|
42
|
+
throw new Error(message || `Expected ${expected}, got ${actual}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Tests
|
|
46
|
+
test("ParserRegistry constructor creates instance", () => {
|
|
47
|
+
const registry = new ParserRegistry();
|
|
48
|
+
assert(registry !== null);
|
|
49
|
+
});
|
|
50
|
+
test("ParserRegistry with custom config", () => {
|
|
51
|
+
const registry = new ParserRegistry({
|
|
52
|
+
apiUrl: "http://localhost:8111",
|
|
53
|
+
cacheTtlMs: 1000,
|
|
54
|
+
enableDynamic: false,
|
|
55
|
+
});
|
|
56
|
+
assert(registry !== null);
|
|
57
|
+
});
|
|
58
|
+
test("getStaticParsers returns parsers", () => {
|
|
59
|
+
const registry = new ParserRegistry();
|
|
60
|
+
const parsers = registry.getStaticParsers();
|
|
61
|
+
assert(parsers.length > 0, "Should have parsers");
|
|
62
|
+
assertEqual(parsers.length, PARSERS.length);
|
|
63
|
+
});
|
|
64
|
+
test("getParsers returns parsers (static mode)", async () => {
|
|
65
|
+
resetRegistry();
|
|
66
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
67
|
+
const parsers = await registry.getParsers();
|
|
68
|
+
assert(parsers.length > 0, "Should have parsers");
|
|
69
|
+
assertEqual(parsers.length, PARSERS.length);
|
|
70
|
+
});
|
|
71
|
+
test("getParserById finds parser", async () => {
|
|
72
|
+
resetRegistry();
|
|
73
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
74
|
+
const parser = await registry.getParserById("perplexity");
|
|
75
|
+
assert(parser !== undefined, "Should find perplexity");
|
|
76
|
+
assertEqual(parser?.id, "perplexity");
|
|
77
|
+
assertEqual(parser?.aparserName, "FreeAI::Perplexity");
|
|
78
|
+
});
|
|
79
|
+
test("getParserById returns undefined for unknown", async () => {
|
|
80
|
+
resetRegistry();
|
|
81
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
82
|
+
const parser = await registry.getParserById("unknown_parser");
|
|
83
|
+
assert(parser === undefined, "Should not find unknown parser");
|
|
84
|
+
});
|
|
85
|
+
test("getParserByAParserName finds parser", async () => {
|
|
86
|
+
resetRegistry();
|
|
87
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
88
|
+
const parser = await registry.getParserByAParserName("FreeAI::ChatGPT");
|
|
89
|
+
assert(parser !== undefined, "Should find ChatGPT");
|
|
90
|
+
assertEqual(parser?.id, "chatgpt");
|
|
91
|
+
});
|
|
92
|
+
test("getParsersByCategory filters correctly", async () => {
|
|
93
|
+
resetRegistry();
|
|
94
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
95
|
+
const aiParsers = await registry.getParsersByCategory("AI Chat");
|
|
96
|
+
assert(aiParsers.length > 0, "Should have AI Chat parsers");
|
|
97
|
+
assert(aiParsers.every(p => p.category === "AI Chat"), "All should be AI Chat");
|
|
98
|
+
});
|
|
99
|
+
test("getCategories returns unique categories", async () => {
|
|
100
|
+
resetRegistry();
|
|
101
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
102
|
+
const categories = await registry.getCategories();
|
|
103
|
+
assert(categories.length > 0, "Should have categories");
|
|
104
|
+
assert(categories.includes("AI Chat"), "Should include AI Chat");
|
|
105
|
+
assert(categories.includes("Search Engines"), "Should include Search Engines");
|
|
106
|
+
// Check uniqueness
|
|
107
|
+
const unique = new Set(categories);
|
|
108
|
+
assertEqual(categories.length, unique.size, "Categories should be unique");
|
|
109
|
+
});
|
|
110
|
+
test("getRegistry returns singleton", () => {
|
|
111
|
+
resetRegistry();
|
|
112
|
+
const r1 = getRegistry({ enableDynamic: false });
|
|
113
|
+
const r2 = getRegistry();
|
|
114
|
+
assert(r1 === r2, "Should return same instance");
|
|
115
|
+
});
|
|
116
|
+
test("resetRegistry clears singleton", () => {
|
|
117
|
+
const r1 = getRegistry({ enableDynamic: false });
|
|
118
|
+
resetRegistry();
|
|
119
|
+
const r2 = getRegistry({ enableDynamic: false });
|
|
120
|
+
assert(r1 !== r2, "Should be different instances after reset");
|
|
121
|
+
});
|
|
122
|
+
test("getParserOptions returns default options", async () => {
|
|
123
|
+
resetRegistry();
|
|
124
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
125
|
+
const options = await registry.getParserOptions("perplexity");
|
|
126
|
+
assert(options !== undefined, "Should return options");
|
|
127
|
+
assertEqual(options.parser_id, "perplexity");
|
|
128
|
+
assertEqual(options.timeout, 60);
|
|
129
|
+
assertEqual(options.enabled, true);
|
|
130
|
+
});
|
|
131
|
+
test("getParserTimeout returns timeout", async () => {
|
|
132
|
+
resetRegistry();
|
|
133
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
134
|
+
const timeout = await registry.getParserTimeout("chatgpt");
|
|
135
|
+
assertEqual(timeout, 60);
|
|
136
|
+
});
|
|
137
|
+
test("isParserEnabled returns true by default", async () => {
|
|
138
|
+
resetRegistry();
|
|
139
|
+
const registry = getRegistry({ enableDynamic: false });
|
|
140
|
+
const enabled = await registry.isParserEnabled("gemini");
|
|
141
|
+
assertEqual(enabled, true);
|
|
142
|
+
});
|
|
143
|
+
// Run summary after async tests complete
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
console.log(`\n--- Results ---`);
|
|
146
|
+
console.log(`Passed: ${passed}`);
|
|
147
|
+
console.log(`Failed: ${failed}`);
|
|
148
|
+
if (failed > 0) {
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
}, 1000);
|
|
152
|
+
//# sourceMappingURL=parser-registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-registry.test.js","sourceRoot":"","sources":["../../src/tests/parser-registry.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ayga/mcp-client",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "MCP client for Redis API with 40 AI parsers across 9 categories (Perplexity, ChatGPT, Instagram, TikTok, Google Trends, Pinterest, Link Extractor, YouTube, Translation, Search Engines)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|