domain-search-mcp 1.1.1 → 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/README.md CHANGED
@@ -67,6 +67,7 @@ vibecoding.dev - Available - $10.18/year (Porkbun)
67
67
  | **bulk_search** | Check up to 100 domains at once |
68
68
  | **compare_registrars** | Find the best price across registrars |
69
69
  | **suggest_domains** | Get available variations when your name is taken |
70
+ | **suggest_domains_smart** | AI-powered suggestions from keywords or descriptions |
70
71
  | **tld_info** | Learn about TLDs, restrictions, and typical pricing |
71
72
  | **check_socials** | Verify if usernames are available on GitHub, Twitter, Instagram |
72
73
 
@@ -209,6 +210,59 @@ Get variations when your preferred name is taken:
209
210
  }
210
211
  ```
211
212
 
213
+ ### suggest_domains_smart
214
+
215
+ AI-powered domain suggestions using semantic analysis:
216
+
217
+ ```typescript
218
+ // Input - natural language query
219
+ {
220
+ "query": "ai customer service chatbot",
221
+ "tld": "io",
222
+ "industry": "tech", // optional - auto-detected
223
+ "style": "brandable", // brandable, descriptive, short, creative
224
+ "max_suggestions": 10
225
+ }
226
+
227
+ // Output
228
+ {
229
+ "query": "ai customer service chatbot",
230
+ "detected_words": ["ai", "customer", "service", "chat", "bot"],
231
+ "detected_industry": "tech",
232
+ "results": {
233
+ "available": [
234
+ {
235
+ "domain": "servicebotai.io",
236
+ "price_first_year": 32.98,
237
+ "premium": false,
238
+ "score": 72
239
+ },
240
+ {
241
+ "domain": "chatservicehub.io",
242
+ "price_first_year": 32.98,
243
+ "premium": false,
244
+ "score": 68
245
+ }
246
+ ],
247
+ "premium": [],
248
+ "unavailable_count": 15
249
+ },
250
+ "insights": [
251
+ "🎯 Detected industry: tech",
252
+ "✅ Found 8 available domains",
253
+ "⭐ Top pick: servicebotai.io ($32.98/yr)"
254
+ ],
255
+ "related_terms": ["neural", "cognitive", "assist", "connect"]
256
+ }
257
+ ```
258
+
259
+ **Features:**
260
+ - Understands natural language queries ("coffee shop in seattle")
261
+ - Auto-detects industry for contextual suggestions
262
+ - Generates portmanteau/blended names
263
+ - Multiple style modes (brandable, short, creative)
264
+ - Premium domain detection
265
+
212
266
  ### tld_info
213
267
 
214
268
  Learn about a TLD:
@@ -344,6 +398,7 @@ domain-search-mcp/
344
398
  │ │ ├── bulk_search.ts
345
399
  │ │ ├── compare_registrars.ts
346
400
  │ │ ├── suggest_domains.ts
401
+ │ │ ├── suggest_domains_smart.ts # AI-powered suggestions
347
402
  │ │ ├── tld_info.ts
348
403
  │ │ └── check_socials.ts
349
404
  │ ├── registrars/ # Registrar adapters
@@ -359,7 +414,8 @@ domain-search-mcp/
359
414
  │ ├── logger.ts
360
415
  │ ├── cache.ts
361
416
  │ ├── errors.ts
362
- └── validators.ts
417
+ ├── validators.ts
418
+ │ └── semantic-engine.ts # Word segmentation & suggestions
363
419
  ├── tests/
364
420
  │ ├── unit/
365
421
  │ └── integration/
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAoCzC;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAiDnC;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAM9C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAoCzC;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAiDnC;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAO9C"}
package/dist/config.js CHANGED
@@ -111,6 +111,7 @@ function getAvailableSources() {
111
111
  sources.push('porkbun');
112
112
  if (exports.config.namecheap.enabled)
113
113
  sources.push('namecheap');
114
+ sources.push('godaddy'); // GoDaddy MCP - always available (no auth needed)
114
115
  sources.push('rdap', 'whois'); // Always available as fallbacks
115
116
  return sources;
116
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * GoDaddy MCP Adapter.
3
+ *
4
+ * Uses GoDaddy's public MCP endpoint for domain availability checks.
5
+ * No API key or reseller account required!
6
+ *
7
+ * Endpoint: https://api.godaddy.com/v1/domains/mcp
8
+ * Protocol: JSON-RPC 2.0 over HTTP (Streamable HTTP transport)
9
+ *
10
+ * Features:
11
+ * - Free availability checking (no auth)
12
+ * - Bulk checking up to 1000 domains
13
+ * - Premium/auction domain detection
14
+ *
15
+ * Limitations:
16
+ * - No pricing information
17
+ * - Rate limits not documented (be conservative)
18
+ */
19
+ import { RegistrarAdapter } from './base.js';
20
+ import type { DomainResult, TLDInfo } from '../types.js';
21
+ /**
22
+ * Parse availability from GoDaddy MCP text response.
23
+ * The response is markdown-formatted text with different formats for single vs bulk queries.
24
+ */
25
+ interface ParsedAvailability {
26
+ available: boolean;
27
+ premium: boolean;
28
+ auction: boolean;
29
+ }
30
+ /**
31
+ * GoDaddy MCP Adapter.
32
+ *
33
+ * Uses GoDaddy's public MCP endpoint - no authentication required!
34
+ */
35
+ export declare class GodaddyMcpAdapter extends RegistrarAdapter {
36
+ readonly name = "GoDaddy";
37
+ readonly id = "godaddy";
38
+ constructor();
39
+ /**
40
+ * Check if GoDaddy MCP is enabled.
41
+ * Always enabled since no API key needed!
42
+ */
43
+ isEnabled(): boolean;
44
+ /**
45
+ * Search for domain availability using GoDaddy MCP.
46
+ */
47
+ search(domain: string, tld: string): Promise<DomainResult>;
48
+ /**
49
+ * Bulk check multiple domains at once.
50
+ * GoDaddy MCP supports up to 1000 domains per request!
51
+ */
52
+ bulkSearch(domains: string[]): Promise<Map<string, ParsedAvailability>>;
53
+ /**
54
+ * Get TLD info - not supported by GoDaddy MCP.
55
+ */
56
+ getTldInfo(_tld: string): Promise<TLDInfo | null>;
57
+ /**
58
+ * Call a GoDaddy MCP tool via JSON-RPC.
59
+ */
60
+ private callMcpTool;
61
+ }
62
+ /**
63
+ * Singleton instance.
64
+ */
65
+ export declare const godaddyMcpAdapter: GodaddyMcpAdapter;
66
+ export {};
67
+ //# sourceMappingURL=godaddy-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"godaddy-mcp.d.ts","sourceRoot":"","sources":["../../src/registrars/godaddy-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,gBAAgB,EAAe,MAAM,WAAW,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAiCzD;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AA0HD;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,EAAE,aAAa;;IAQxB;;;OAGG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0BhE;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAmB7E;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAIvD;;OAEG;YACW,WAAW;CAyG1B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ /**
3
+ * GoDaddy MCP Adapter.
4
+ *
5
+ * Uses GoDaddy's public MCP endpoint for domain availability checks.
6
+ * No API key or reseller account required!
7
+ *
8
+ * Endpoint: https://api.godaddy.com/v1/domains/mcp
9
+ * Protocol: JSON-RPC 2.0 over HTTP (Streamable HTTP transport)
10
+ *
11
+ * Features:
12
+ * - Free availability checking (no auth)
13
+ * - Bulk checking up to 1000 domains
14
+ * - Premium/auction domain detection
15
+ *
16
+ * Limitations:
17
+ * - No pricing information
18
+ * - Rate limits not documented (be conservative)
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.godaddyMcpAdapter = exports.GodaddyMcpAdapter = void 0;
22
+ const zod_1 = require("zod");
23
+ const base_js_1 = require("./base.js");
24
+ const logger_js_1 = require("../utils/logger.js");
25
+ const errors_js_1 = require("../utils/errors.js");
26
+ /**
27
+ * GoDaddy MCP endpoint.
28
+ */
29
+ const GODADDY_MCP_ENDPOINT = 'https://api.godaddy.com/v1/domains/mcp';
30
+ /**
31
+ * JSON-RPC request ID counter.
32
+ */
33
+ let jsonRpcId = 1;
34
+ /**
35
+ * Response schema for MCP tool call.
36
+ */
37
+ const McpResponseSchema = zod_1.z.object({
38
+ jsonrpc: zod_1.z.literal('2.0'),
39
+ id: zod_1.z.number(),
40
+ result: zod_1.z.object({
41
+ content: zod_1.z.array(zod_1.z.object({
42
+ type: zod_1.z.string(),
43
+ text: zod_1.z.string(),
44
+ })),
45
+ isError: zod_1.z.boolean().optional(),
46
+ }).optional(),
47
+ error: zod_1.z.object({
48
+ code: zod_1.z.number(),
49
+ message: zod_1.z.string(),
50
+ }).optional(),
51
+ });
52
+ function parseAvailabilityResponse(text, domain) {
53
+ const normalizedDomain = domain.toLowerCase();
54
+ const normalizedText = text.toLowerCase();
55
+ // Default: unavailable
56
+ const result = {
57
+ available: false,
58
+ premium: false,
59
+ auction: false,
60
+ };
61
+ // ==== SINGLE DOMAIN FORMAT ====
62
+ // Format: "STATUS: ✅ AVAILABLE" or "AVAILABILITY: Standard registration available"
63
+ if (normalizedText.includes('status:') || normalizedText.includes('availability:')) {
64
+ // Check for explicit availability indicators
65
+ if (normalizedText.includes('status: ✅ available') ||
66
+ normalizedText.includes('✅ available') ||
67
+ normalizedText.includes('standard registration available') ||
68
+ normalizedText.includes('purchasable: yes')) {
69
+ result.available = true;
70
+ // Check if premium
71
+ if (normalizedText.includes('type: premium') || normalizedText.includes('premium domain')) {
72
+ result.premium = true;
73
+ }
74
+ // Check if auction
75
+ if (normalizedText.includes('type: auction') || normalizedText.includes('auction domain')) {
76
+ result.auction = true;
77
+ }
78
+ return result;
79
+ }
80
+ // Explicit unavailable
81
+ if (normalizedText.includes('status: ❌') ||
82
+ normalizedText.includes('not available') ||
83
+ normalizedText.includes('already registered') ||
84
+ normalizedText.includes('purchasable: no')) {
85
+ result.available = false;
86
+ return result;
87
+ }
88
+ }
89
+ // ==== BULK DOMAIN FORMAT ====
90
+ // Check if domain appears in available section
91
+ // GoDaddy formats: "✅ **AVAILABLE DOMAINS" or "✅ **STANDARD SUGGESTIONS"
92
+ const availableMatch = text.match(/✅\s*\*\*(?:AVAILABLE|STANDARD)[^]*?(?=(?:💎|⚠️|❌|\*\*[A-Z])|$)/i);
93
+ if (availableMatch && availableMatch[0].toLowerCase().includes(normalizedDomain)) {
94
+ result.available = true;
95
+ return result;
96
+ }
97
+ // Check premium section
98
+ // GoDaddy format: "💎 **PREMIUM DOMAINS"
99
+ const premiumMatch = text.match(/💎\s*\*\*PREMIUM[^]*?(?=(?:⚠️|❌|\*\*[A-Z])|$)/i);
100
+ if (premiumMatch && premiumMatch[0].toLowerCase().includes(normalizedDomain)) {
101
+ result.available = true;
102
+ result.premium = true;
103
+ return result;
104
+ }
105
+ // Check auction section
106
+ // GoDaddy format: "🔨 **AUCTION DOMAINS" or similar
107
+ const auctionMatch = text.match(/🔨\s*\*\*AUCTION[^]*?(?=(?:💎|⚠️|❌|\*\*[A-Z])|$)/i);
108
+ if (auctionMatch && auctionMatch[0].toLowerCase().includes(normalizedDomain)) {
109
+ result.available = true;
110
+ result.auction = true;
111
+ return result;
112
+ }
113
+ // Check unavailable section
114
+ // GoDaddy format: "❌ **UNAVAILABLE DOMAINS"
115
+ const unavailableMatch = text.match(/❌\s*\*\*UNAVAILABLE[^]*?(?=(?:💎|⚠️|\*\*[A-Z])|$)/i);
116
+ if (unavailableMatch && unavailableMatch[0].toLowerCase().includes(normalizedDomain)) {
117
+ result.available = false;
118
+ return result;
119
+ }
120
+ // ==== FALLBACK: LINE-BY-LINE ANALYSIS ====
121
+ const lines = text.split('\n');
122
+ for (const line of lines) {
123
+ const lowerLine = line.toLowerCase();
124
+ // Check for domain-specific lines or general status
125
+ if (lowerLine.includes(normalizedDomain) || lowerLine.includes('status') || lowerLine.includes('available')) {
126
+ // Premium indicators
127
+ if (lowerLine.includes('premium')) {
128
+ result.available = true;
129
+ result.premium = true;
130
+ return result;
131
+ }
132
+ // Auction indicators
133
+ if (lowerLine.includes('auction')) {
134
+ result.available = true;
135
+ result.auction = true;
136
+ return result;
137
+ }
138
+ // Available indicators (must check before unavailable since "unavailable" contains "available")
139
+ if ((lowerLine.includes('✅') && lowerLine.includes('available')) ||
140
+ lowerLine.includes('register at') ||
141
+ lowerLine.includes('can be registered')) {
142
+ result.available = true;
143
+ return result;
144
+ }
145
+ // Unavailable indicators
146
+ if (lowerLine.includes('❌') || lowerLine.includes('unavailable') || lowerLine.includes('not available')) {
147
+ result.available = false;
148
+ return result;
149
+ }
150
+ }
151
+ }
152
+ return result;
153
+ }
154
+ /**
155
+ * GoDaddy MCP Adapter.
156
+ *
157
+ * Uses GoDaddy's public MCP endpoint - no authentication required!
158
+ */
159
+ class GodaddyMcpAdapter extends base_js_1.RegistrarAdapter {
160
+ name = 'GoDaddy';
161
+ id = 'godaddy';
162
+ constructor() {
163
+ // Conservative rate limit - GoDaddy doesn't document their limits
164
+ // Using 30/min to be safe (they say "excessive requests may be throttled")
165
+ super(30);
166
+ }
167
+ /**
168
+ * Check if GoDaddy MCP is enabled.
169
+ * Always enabled since no API key needed!
170
+ */
171
+ isEnabled() {
172
+ return true;
173
+ }
174
+ /**
175
+ * Search for domain availability using GoDaddy MCP.
176
+ */
177
+ async search(domain, tld) {
178
+ const fullDomain = `${domain}.${tld}`;
179
+ return this.retryWithBackoff(async () => {
180
+ const text = await this.callMcpTool('domains_check_availability', {
181
+ domains: fullDomain,
182
+ });
183
+ const parsed = parseAvailabilityResponse(text, fullDomain);
184
+ return this.createResult(domain, tld, {
185
+ available: parsed.available,
186
+ premium: parsed.premium,
187
+ price_first_year: null, // GoDaddy MCP doesn't provide pricing
188
+ price_renewal: null,
189
+ privacy_included: false, // Unknown
190
+ source: 'godaddy_api',
191
+ premium_reason: parsed.premium
192
+ ? 'Premium domain (GoDaddy)'
193
+ : parsed.auction
194
+ ? 'Auction domain (GoDaddy)'
195
+ : undefined,
196
+ });
197
+ }, `check ${fullDomain}`);
198
+ }
199
+ /**
200
+ * Bulk check multiple domains at once.
201
+ * GoDaddy MCP supports up to 1000 domains per request!
202
+ */
203
+ async bulkSearch(domains) {
204
+ const results = new Map();
205
+ // GoDaddy accepts comma-separated domains
206
+ const domainList = domains.join(', ');
207
+ const text = await this.callMcpTool('domains_check_availability', {
208
+ domains: domainList,
209
+ });
210
+ // Parse results for each domain
211
+ for (const domain of domains) {
212
+ const parsed = parseAvailabilityResponse(text, domain);
213
+ results.set(domain.toLowerCase(), parsed);
214
+ }
215
+ return results;
216
+ }
217
+ /**
218
+ * Get TLD info - not supported by GoDaddy MCP.
219
+ */
220
+ async getTldInfo(_tld) {
221
+ return null;
222
+ }
223
+ /**
224
+ * Call a GoDaddy MCP tool via JSON-RPC.
225
+ */
226
+ async callMcpTool(toolName, args) {
227
+ const requestId = jsonRpcId++;
228
+ const payload = {
229
+ jsonrpc: '2.0',
230
+ method: 'tools/call',
231
+ params: {
232
+ name: toolName,
233
+ arguments: args,
234
+ },
235
+ id: requestId,
236
+ };
237
+ logger_js_1.logger.debug('GoDaddy MCP request', {
238
+ tool: toolName,
239
+ args,
240
+ request_id: requestId,
241
+ });
242
+ try {
243
+ const response = await this.withTimeout(fetch(GODADDY_MCP_ENDPOINT, {
244
+ method: 'POST',
245
+ headers: {
246
+ 'Content-Type': 'application/json',
247
+ 'Accept': 'application/json, text/event-stream',
248
+ },
249
+ body: JSON.stringify(payload),
250
+ }), `GoDaddy MCP ${toolName}`, 15000);
251
+ if (!response.ok) {
252
+ throw new errors_js_1.RegistrarApiError('GoDaddy MCP', `HTTP ${response.status}: ${response.statusText}`);
253
+ }
254
+ // Response is SSE format: "event: message\ndata: {...}"
255
+ const rawText = await response.text();
256
+ // Extract JSON from SSE format
257
+ const dataMatch = rawText.match(/data:\s*(\{.*\})/s);
258
+ if (!dataMatch) {
259
+ throw new errors_js_1.RegistrarApiError('GoDaddy MCP', 'Invalid response format - expected SSE');
260
+ }
261
+ const jsonStr = dataMatch[1];
262
+ const parsed = JSON.parse(jsonStr);
263
+ // Validate response
264
+ const validated = McpResponseSchema.parse(parsed);
265
+ if (validated.error) {
266
+ throw new errors_js_1.RegistrarApiError('GoDaddy MCP', `RPC Error ${validated.error.code}: ${validated.error.message}`);
267
+ }
268
+ if (!validated.result || validated.result.isError) {
269
+ throw new errors_js_1.RegistrarApiError('GoDaddy MCP', 'Tool call returned error');
270
+ }
271
+ // Extract text content
272
+ const textContent = validated.result.content.find(c => c.type === 'text');
273
+ if (!textContent) {
274
+ throw new errors_js_1.RegistrarApiError('GoDaddy MCP', 'No text content in response');
275
+ }
276
+ logger_js_1.logger.debug('GoDaddy MCP response', {
277
+ request_id: requestId,
278
+ text_length: textContent.text.length,
279
+ });
280
+ return textContent.text;
281
+ }
282
+ catch (error) {
283
+ if (error instanceof errors_js_1.RegistrarApiError) {
284
+ throw error;
285
+ }
286
+ if (error instanceof Error) {
287
+ if (error.name === 'AbortError' || error.message.includes('timeout')) {
288
+ throw error;
289
+ }
290
+ throw new errors_js_1.RegistrarApiError('GoDaddy MCP', error.message);
291
+ }
292
+ throw new errors_js_1.RegistrarApiError('GoDaddy MCP', 'Unknown network error');
293
+ }
294
+ }
295
+ }
296
+ exports.GodaddyMcpAdapter = GodaddyMcpAdapter;
297
+ /**
298
+ * Singleton instance.
299
+ */
300
+ exports.godaddyMcpAdapter = new GodaddyMcpAdapter();
301
+ //# sourceMappingURL=godaddy-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"godaddy-mcp.js","sourceRoot":"","sources":["../../src/registrars/godaddy-mcp.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,5 @@
4
4
  export { RegistrarAdapter } from './base.js';
5
5
  export { PorkbunAdapter, porkbunAdapter } from './porkbun.js';
6
6
  export { NamecheapAdapter, namecheapAdapter } from './namecheap.js';
7
+ export { GodaddyMcpAdapter, godaddyMcpAdapter } from './godaddy-mcp.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registrars/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registrars/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  * Registrar Exports.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.namecheapAdapter = exports.NamecheapAdapter = exports.porkbunAdapter = exports.PorkbunAdapter = exports.RegistrarAdapter = void 0;
6
+ exports.godaddyMcpAdapter = exports.GodaddyMcpAdapter = exports.namecheapAdapter = exports.NamecheapAdapter = exports.porkbunAdapter = exports.PorkbunAdapter = exports.RegistrarAdapter = void 0;
7
7
  var base_js_1 = require("./base.js");
8
8
  Object.defineProperty(exports, "RegistrarAdapter", { enumerable: true, get: function () { return base_js_1.RegistrarAdapter; } });
9
9
  var porkbun_js_1 = require("./porkbun.js");
@@ -12,4 +12,7 @@ Object.defineProperty(exports, "porkbunAdapter", { enumerable: true, get: functi
12
12
  var namecheap_js_1 = require("./namecheap.js");
13
13
  Object.defineProperty(exports, "NamecheapAdapter", { enumerable: true, get: function () { return namecheap_js_1.NamecheapAdapter; } });
14
14
  Object.defineProperty(exports, "namecheapAdapter", { enumerable: true, get: function () { return namecheap_js_1.namecheapAdapter; } });
15
+ var godaddy_mcp_js_1 = require("./godaddy-mcp.js");
16
+ Object.defineProperty(exports, "GodaddyMcpAdapter", { enumerable: true, get: function () { return godaddy_mcp_js_1.GodaddyMcpAdapter; } });
17
+ Object.defineProperty(exports, "godaddyMcpAdapter", { enumerable: true, get: function () { return godaddy_mcp_js_1.godaddyMcpAdapter; } });
15
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registrars/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AACzB,2CAA8D;AAArD,4GAAA,cAAc,OAAA;AAAE,4GAAA,cAAc,OAAA;AACvC,+CAAoE;AAA3D,gHAAA,gBAAgB,OAAA;AAAE,gHAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registrars/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AACzB,2CAA8D;AAArD,4GAAA,cAAc,OAAA;AAAE,4GAAA,cAAc,OAAA;AACvC,+CAAoE;AAA3D,gHAAA,gBAAgB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAC3C,mDAAwE;AAA/D,mHAAA,iBAAiB,OAAA;AAAE,mHAAA,iBAAiB,OAAA"}
@@ -2,10 +2,11 @@
2
2
  * Domain Search Service.
3
3
  *
4
4
  * Orchestrates domain availability checks across multiple sources:
5
- * 1. Porkbun (primary, if configured)
6
- * 2. Namecheap (secondary, if configured)
7
- * 3. RDAP (fallback, always available)
8
- * 4. WHOIS (last resort, always available)
5
+ * 1. Porkbun (primary, if configured - has pricing)
6
+ * 2. Namecheap (secondary, if configured - has pricing)
7
+ * 3. GoDaddy MCP (always available - no auth, no pricing, great availability data)
8
+ * 4. RDAP (fallback, always available)
9
+ * 5. WHOIS (last resort, always available)
9
10
  *
10
11
  * Handles:
11
12
  * - Smart source selection based on availability and configuration
@@ -1 +1 @@
1
- {"version":3,"file":"domain-search.d.ts","sourceRoot":"","sources":["../../src/services/domain-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAc,MAAM,aAAa,CAAC;AAyB5E;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAM,EAAyB,EACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,cAAc,CAAC,CAiEzB;AAuUD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,GAAE,MAAc,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,YAAY,EAAE,CAAC,CA4CzB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,MAAM,EAA6B,GAC9C,OAAO,CAAC;IACT,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,eAAe,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CA4DD"}
1
+ {"version":3,"file":"domain-search.d.ts","sourceRoot":"","sources":["../../src/services/domain-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAc,MAAM,aAAa,CAAC;AAyB5E;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAM,EAAyB,EACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,cAAc,CAAC,CAiEzB;AAsVD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,GAAE,MAAc,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,YAAY,EAAE,CAAC,CA4CzB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,MAAM,EAA6B,GAC9C,OAAO,CAAC;IACT,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,eAAe,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CA4DD"}
@@ -3,10 +3,11 @@
3
3
  * Domain Search Service.
4
4
  *
5
5
  * Orchestrates domain availability checks across multiple sources:
6
- * 1. Porkbun (primary, if configured)
7
- * 2. Namecheap (secondary, if configured)
8
- * 3. RDAP (fallback, always available)
9
- * 4. WHOIS (last resort, always available)
6
+ * 1. Porkbun (primary, if configured - has pricing)
7
+ * 2. Namecheap (secondary, if configured - has pricing)
8
+ * 3. GoDaddy MCP (always available - no auth, no pricing, great availability data)
9
+ * 4. RDAP (fallback, always available)
10
+ * 5. WHOIS (last resort, always available)
10
11
  *
11
12
  * Handles:
12
13
  * - Smart source selection based on availability and configuration
@@ -94,7 +95,7 @@ async function searchSingleDomain(domain, tld, preferredRegistrars) {
94
95
  const fullDomain = (0, validators_js_1.buildDomain)(domain, tld);
95
96
  const triedSources = [];
96
97
  // Check cache first
97
- for (const source of ['porkbun', 'namecheap', 'rdap', 'whois']) {
98
+ for (const source of ['porkbun', 'namecheap', 'godaddy', 'rdap', 'whois']) {
98
99
  const cacheKey = (0, cache_js_1.domainCacheKey)(fullDomain, source);
99
100
  const cached = cache_js_1.domainCache.get(cacheKey);
100
101
  if (cached) {
@@ -144,6 +145,14 @@ async function searchSingleDomain(domain, tld, preferredRegistrars) {
144
145
  }
145
146
  /**
146
147
  * Build the priority list of sources to try.
148
+ *
149
+ * Priority order:
150
+ * 1. Preferred registrars (if specified)
151
+ * 2. Porkbun (has pricing, best API)
152
+ * 3. Namecheap (has pricing)
153
+ * 4. GoDaddy MCP (free, no pricing but good availability data)
154
+ * 5. RDAP (free, no pricing)
155
+ * 6. WHOIS (slowest fallback)
147
156
  */
148
157
  function buildSourcePriority(tld, preferredRegistrars) {
149
158
  const sources = [];
@@ -156,23 +165,28 @@ function buildSourcePriority(tld, preferredRegistrars) {
156
165
  else if (registrar === 'namecheap' && config_js_1.config.namecheap.enabled) {
157
166
  sources.push('namecheap');
158
167
  }
168
+ else if (registrar === 'godaddy') {
169
+ sources.push('godaddy');
170
+ }
159
171
  }
160
172
  }
161
173
  else {
162
- // Default priority: Porkbun first (better API), then Namecheap
174
+ // Default priority: Porkbun first (best API with pricing), then Namecheap, then GoDaddy
163
175
  if (config_js_1.config.porkbun.enabled)
164
176
  sources.push('porkbun');
165
177
  if (config_js_1.config.namecheap.enabled)
166
178
  sources.push('namecheap');
179
+ // GoDaddy MCP is always available (no auth needed)
180
+ sources.push('godaddy');
167
181
  }
168
182
  // Always add fallbacks
169
183
  if ((0, rdap_js_1.isRdapAvailable)(tld))
170
184
  sources.push('rdap');
171
185
  if ((0, whois_js_1.isWhoisAvailable)(tld))
172
186
  sources.push('whois');
173
- // If no registrar APIs, RDAP should be first
187
+ // If no registrar APIs, GoDaddy MCP and RDAP should be first
174
188
  if (sources.length === 0) {
175
- sources.push('rdap', 'whois');
189
+ sources.push('godaddy', 'rdap', 'whois');
176
190
  }
177
191
  return sources;
178
192
  }
@@ -185,6 +199,8 @@ async function trySource(domain, tld, source) {
185
199
  return index_js_1.porkbunAdapter.search(domain, tld);
186
200
  case 'namecheap':
187
201
  return index_js_1.namecheapAdapter.search(domain, tld);
202
+ case 'godaddy':
203
+ return index_js_1.godaddyMcpAdapter.search(domain, tld);
188
204
  case 'rdap':
189
205
  return (0, rdap_js_1.checkRdap)(domain, tld);
190
206
  case 'whois':