domain-search-mcp 1.1.2 → 1.1.4
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/tools/check_socials.d.ts.map +1 -1
- package/dist/tools/check_socials.js +35 -3
- package/dist/tools/check_socials.js.map +1 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +2 -0
- package/dist/utils/cache.js.map +1 -1
- package/package.json +1 -1
- package/src/tools/check_socials.ts +43 -3
- package/src/utils/cache.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_socials.d.ts","sourceRoot":"","sources":["../../src/tools/check_socials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"check_socials.d.ts","sourceRoot":"","sources":["../../src/tools/check_socials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA6MtE;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;EAY7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;CAiC5B,CAAC;AAsIF;;GAEG;AACH,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,oBAAoB,CAAC,CA2F/B"}
|
|
@@ -20,6 +20,20 @@ const zod_1 = require("zod");
|
|
|
20
20
|
const axios_1 = __importDefault(require("axios"));
|
|
21
21
|
const errors_js_1 = require("../utils/errors.js");
|
|
22
22
|
const logger_js_1 = require("../utils/logger.js");
|
|
23
|
+
const cache_js_1 = require("../utils/cache.js");
|
|
24
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
25
|
+
// Cache Configuration
|
|
26
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
27
|
+
/**
|
|
28
|
+
* Cache for social handle results.
|
|
29
|
+
* - Taken usernames: cached 24 hours (rarely become available)
|
|
30
|
+
* - Available usernames: cached 1 hour (might be taken soon)
|
|
31
|
+
* - Errors: cached 5 minutes (retry soon)
|
|
32
|
+
*/
|
|
33
|
+
const CACHE_TTL_TAKEN = 86400; // 24 hours
|
|
34
|
+
const CACHE_TTL_AVAILABLE = 3600; // 1 hour
|
|
35
|
+
const CACHE_TTL_ERROR = 300; // 5 minutes
|
|
36
|
+
const socialCache = new cache_js_1.TtlCache(CACHE_TTL_TAKEN, 5000);
|
|
23
37
|
/**
|
|
24
38
|
* Platform configurations using Sherlock-style detection.
|
|
25
39
|
* HIGH confidence = public API or reliable status codes
|
|
@@ -219,6 +233,13 @@ async function checkPlatform(username, platform) {
|
|
|
219
233
|
const config = PLATFORM_CONFIGS[platform];
|
|
220
234
|
const url = config.url.replace('{}', username);
|
|
221
235
|
const profileUrl = config.profileUrl.replace('{}', username);
|
|
236
|
+
const cacheKey = `${platform}:${username.toLowerCase()}`;
|
|
237
|
+
// Check cache first to reduce API calls
|
|
238
|
+
const cached = socialCache.get(cacheKey);
|
|
239
|
+
if (cached) {
|
|
240
|
+
logger_js_1.logger.debug(`Cache hit for ${platform}:${username}`);
|
|
241
|
+
return { ...cached, checked_at: cached.checked_at + ' (cached)' };
|
|
242
|
+
}
|
|
222
243
|
// Validate username format if regex provided
|
|
223
244
|
if (config.regexCheck && !config.regexCheck.test(username)) {
|
|
224
245
|
return {
|
|
@@ -244,7 +265,7 @@ async function checkPlatform(username, platform) {
|
|
|
244
265
|
// Handle rate limiting (429) - return uncertain instead of false negative
|
|
245
266
|
if (response.status === 429) {
|
|
246
267
|
logger_js_1.logger.debug(`Rate limited on ${platform}`, { username });
|
|
247
|
-
|
|
268
|
+
const rateLimitResult = {
|
|
248
269
|
platform,
|
|
249
270
|
handle: username,
|
|
250
271
|
available: false,
|
|
@@ -253,6 +274,9 @@ async function checkPlatform(username, platform) {
|
|
|
253
274
|
confidence: 'low', // Can't be sure due to rate limit
|
|
254
275
|
error: 'Rate limited - please try again later',
|
|
255
276
|
};
|
|
277
|
+
// Cache rate limit errors briefly
|
|
278
|
+
socialCache.set(cacheKey, rateLimitResult, CACHE_TTL_ERROR);
|
|
279
|
+
return rateLimitResult;
|
|
256
280
|
}
|
|
257
281
|
let available = false;
|
|
258
282
|
// Determine availability based on errorType
|
|
@@ -274,7 +298,7 @@ async function checkPlatform(username, platform) {
|
|
|
274
298
|
available = response.status === 404;
|
|
275
299
|
break;
|
|
276
300
|
}
|
|
277
|
-
|
|
301
|
+
const result = {
|
|
278
302
|
platform,
|
|
279
303
|
handle: username,
|
|
280
304
|
available,
|
|
@@ -282,6 +306,11 @@ async function checkPlatform(username, platform) {
|
|
|
282
306
|
checked_at: new Date().toISOString(),
|
|
283
307
|
confidence: config.confidence,
|
|
284
308
|
};
|
|
309
|
+
// Cache result with appropriate TTL
|
|
310
|
+
const ttl = available ? CACHE_TTL_AVAILABLE : CACHE_TTL_TAKEN;
|
|
311
|
+
socialCache.set(cacheKey, result, ttl);
|
|
312
|
+
logger_js_1.logger.debug(`Cached ${platform}:${username} for ${ttl}s`);
|
|
313
|
+
return result;
|
|
285
314
|
}
|
|
286
315
|
catch (error) {
|
|
287
316
|
logger_js_1.logger.debug(`Failed to check ${platform}`, {
|
|
@@ -289,7 +318,7 @@ async function checkPlatform(username, platform) {
|
|
|
289
318
|
error: error instanceof Error ? error.message : String(error),
|
|
290
319
|
});
|
|
291
320
|
// Return uncertain result on error
|
|
292
|
-
|
|
321
|
+
const errorResult = {
|
|
293
322
|
platform,
|
|
294
323
|
handle: username,
|
|
295
324
|
available: false, // Assume taken if we can't check
|
|
@@ -298,6 +327,9 @@ async function checkPlatform(username, platform) {
|
|
|
298
327
|
confidence: 'low',
|
|
299
328
|
error: error instanceof Error ? error.message : 'Unknown error',
|
|
300
329
|
};
|
|
330
|
+
// Cache errors briefly to avoid hammering failing endpoints
|
|
331
|
+
socialCache.set(cacheKey, errorResult, CACHE_TTL_ERROR);
|
|
332
|
+
return errorResult;
|
|
301
333
|
}
|
|
302
334
|
}
|
|
303
335
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_socials.js","sourceRoot":"","sources":["../../src/tools/check_socials.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;
|
|
1
|
+
{"version":3,"file":"check_socials.js","sourceRoot":"","sources":["../../src/tools/check_socials.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,eAAe,CAA+C;gBAE1D,iBAAiB,GAAE,MAAY,EAAE,OAAO,GAAE,MAA+B;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,eAAe,CAA+C;gBAE1D,iBAAiB,GAAE,MAAY,EAAE,OAAO,GAAE,MAA+B;IAUrF;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAsB/B;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAkChD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAiBhB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,OAAO,CAAC,OAAO;IAgBf;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB;AAMD,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,wBAEvB,CAAC;AAEF,eAAO,MAAM,YAAY,0BAAwD,CAAC;AAElF,eAAO,MAAM,QAAQ,mBAA+B,CAAC;AAErD;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAS3C"}
|
package/dist/utils/cache.js
CHANGED
|
@@ -32,7 +32,9 @@ class TtlCache {
|
|
|
32
32
|
this.defaultTtlMs = defaultTtlSeconds * 1000;
|
|
33
33
|
this.maxSize = maxSize;
|
|
34
34
|
// Clean up expired entries every minute
|
|
35
|
+
// .unref() prevents this interval from keeping the process alive
|
|
35
36
|
this.cleanupInterval = setInterval(() => this.cleanup(), 60000);
|
|
37
|
+
this.cleanupInterval.unref();
|
|
36
38
|
}
|
|
37
39
|
/**
|
|
38
40
|
* Get a value from cache if it exists and hasn't expired.
|
package/dist/utils/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "domain-search-mcp",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Fast domain availability aggregator MCP server. Check availability across Porkbun, Namecheap, RDAP, and WHOIS. Compare pricing. Get suggestions.",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"types": "dist/server.d.ts",
|
|
@@ -15,6 +15,23 @@ import axios from 'axios';
|
|
|
15
15
|
import type { SocialPlatform, SocialHandleResult } from '../types.js';
|
|
16
16
|
import { wrapError } from '../utils/errors.js';
|
|
17
17
|
import { logger } from '../utils/logger.js';
|
|
18
|
+
import { TtlCache } from '../utils/cache.js';
|
|
19
|
+
|
|
20
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
21
|
+
// Cache Configuration
|
|
22
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Cache for social handle results.
|
|
26
|
+
* - Taken usernames: cached 24 hours (rarely become available)
|
|
27
|
+
* - Available usernames: cached 1 hour (might be taken soon)
|
|
28
|
+
* - Errors: cached 5 minutes (retry soon)
|
|
29
|
+
*/
|
|
30
|
+
const CACHE_TTL_TAKEN = 86400; // 24 hours
|
|
31
|
+
const CACHE_TTL_AVAILABLE = 3600; // 1 hour
|
|
32
|
+
const CACHE_TTL_ERROR = 300; // 5 minutes
|
|
33
|
+
|
|
34
|
+
const socialCache = new TtlCache<SocialHandleResult>(CACHE_TTL_TAKEN, 5000);
|
|
18
35
|
|
|
19
36
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
20
37
|
// Platform Configuration (Sherlock-style)
|
|
@@ -271,6 +288,14 @@ async function checkPlatform(
|
|
|
271
288
|
const config = PLATFORM_CONFIGS[platform];
|
|
272
289
|
const url = config.url.replace('{}', username);
|
|
273
290
|
const profileUrl = config.profileUrl.replace('{}', username);
|
|
291
|
+
const cacheKey = `${platform}:${username.toLowerCase()}`;
|
|
292
|
+
|
|
293
|
+
// Check cache first to reduce API calls
|
|
294
|
+
const cached = socialCache.get(cacheKey);
|
|
295
|
+
if (cached) {
|
|
296
|
+
logger.debug(`Cache hit for ${platform}:${username}`);
|
|
297
|
+
return { ...cached, checked_at: cached.checked_at + ' (cached)' };
|
|
298
|
+
}
|
|
274
299
|
|
|
275
300
|
// Validate username format if regex provided
|
|
276
301
|
if (config.regexCheck && !config.regexCheck.test(username)) {
|
|
@@ -299,7 +324,7 @@ async function checkPlatform(
|
|
|
299
324
|
// Handle rate limiting (429) - return uncertain instead of false negative
|
|
300
325
|
if (response.status === 429) {
|
|
301
326
|
logger.debug(`Rate limited on ${platform}`, { username });
|
|
302
|
-
|
|
327
|
+
const rateLimitResult: SocialHandleResult = {
|
|
303
328
|
platform,
|
|
304
329
|
handle: username,
|
|
305
330
|
available: false,
|
|
@@ -308,6 +333,9 @@ async function checkPlatform(
|
|
|
308
333
|
confidence: 'low', // Can't be sure due to rate limit
|
|
309
334
|
error: 'Rate limited - please try again later',
|
|
310
335
|
};
|
|
336
|
+
// Cache rate limit errors briefly
|
|
337
|
+
socialCache.set(cacheKey, rateLimitResult, CACHE_TTL_ERROR);
|
|
338
|
+
return rateLimitResult;
|
|
311
339
|
}
|
|
312
340
|
|
|
313
341
|
let available = false;
|
|
@@ -335,7 +363,7 @@ async function checkPlatform(
|
|
|
335
363
|
break;
|
|
336
364
|
}
|
|
337
365
|
|
|
338
|
-
|
|
366
|
+
const result: SocialHandleResult = {
|
|
339
367
|
platform,
|
|
340
368
|
handle: username,
|
|
341
369
|
available,
|
|
@@ -343,6 +371,13 @@ async function checkPlatform(
|
|
|
343
371
|
checked_at: new Date().toISOString(),
|
|
344
372
|
confidence: config.confidence,
|
|
345
373
|
};
|
|
374
|
+
|
|
375
|
+
// Cache result with appropriate TTL
|
|
376
|
+
const ttl = available ? CACHE_TTL_AVAILABLE : CACHE_TTL_TAKEN;
|
|
377
|
+
socialCache.set(cacheKey, result, ttl);
|
|
378
|
+
logger.debug(`Cached ${platform}:${username} for ${ttl}s`);
|
|
379
|
+
|
|
380
|
+
return result;
|
|
346
381
|
} catch (error) {
|
|
347
382
|
logger.debug(`Failed to check ${platform}`, {
|
|
348
383
|
username,
|
|
@@ -350,7 +385,7 @@ async function checkPlatform(
|
|
|
350
385
|
});
|
|
351
386
|
|
|
352
387
|
// Return uncertain result on error
|
|
353
|
-
|
|
388
|
+
const errorResult: SocialHandleResult = {
|
|
354
389
|
platform,
|
|
355
390
|
handle: username,
|
|
356
391
|
available: false, // Assume taken if we can't check
|
|
@@ -359,6 +394,11 @@ async function checkPlatform(
|
|
|
359
394
|
confidence: 'low',
|
|
360
395
|
error: error instanceof Error ? error.message : 'Unknown error',
|
|
361
396
|
};
|
|
397
|
+
|
|
398
|
+
// Cache errors briefly to avoid hammering failing endpoints
|
|
399
|
+
socialCache.set(cacheKey, errorResult, CACHE_TTL_ERROR);
|
|
400
|
+
|
|
401
|
+
return errorResult;
|
|
362
402
|
}
|
|
363
403
|
}
|
|
364
404
|
|
package/src/utils/cache.ts
CHANGED
|
@@ -38,7 +38,9 @@ export class TtlCache<T> {
|
|
|
38
38
|
this.maxSize = maxSize;
|
|
39
39
|
|
|
40
40
|
// Clean up expired entries every minute
|
|
41
|
+
// .unref() prevents this interval from keeping the process alive
|
|
41
42
|
this.cleanupInterval = setInterval(() => this.cleanup(), 60000);
|
|
43
|
+
this.cleanupInterval.unref();
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
/**
|