imprint-mcp 0.2.1 → 0.3.1
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 +193 -189
- package/examples/discoverandgo/README.md +1 -1
- package/examples/echo/README.md +1 -1
- package/examples/google-flights/README.md +28 -0
- package/examples/google-flights/_shared/batchexecute.ts +63 -0
- package/examples/google-flights/_shared/flights_request.ts +95 -0
- package/examples/google-flights/_shared/package.json +9 -0
- package/examples/google-flights/get_flight_booking_details/index.ts +159 -0
- package/examples/google-flights/get_flight_booking_details/package.json +9 -0
- package/examples/google-flights/get_flight_booking_details/parser.ts +182 -0
- package/examples/google-flights/get_flight_booking_details/playbook.yaml +138 -0
- package/examples/google-flights/get_flight_booking_details/request-transform.ts +86 -0
- package/examples/google-flights/get_flight_booking_details/workflow.json +98 -0
- package/examples/google-flights/get_flight_calendar_prices/index.ts +131 -0
- package/examples/google-flights/get_flight_calendar_prices/package.json +9 -0
- package/examples/google-flights/get_flight_calendar_prices/parser.ts +86 -0
- package/examples/google-flights/get_flight_calendar_prices/playbook.yaml +97 -0
- package/examples/google-flights/get_flight_calendar_prices/request-transform.ts +31 -0
- package/examples/google-flights/get_flight_calendar_prices/workflow.json +78 -0
- package/examples/google-flights/lookup_airport/index.ts +101 -0
- package/examples/google-flights/lookup_airport/package.json +9 -0
- package/examples/google-flights/lookup_airport/parser.ts +66 -0
- package/examples/google-flights/lookup_airport/playbook.yaml +47 -0
- package/examples/google-flights/lookup_airport/request-transform.ts +20 -0
- package/examples/google-flights/lookup_airport/workflow.json +57 -0
- package/examples/google-flights/search_flights/index.ts +219 -0
- package/examples/google-flights/search_flights/package.json +9 -0
- package/examples/google-flights/search_flights/parser.ts +169 -0
- package/examples/google-flights/search_flights/playbook.yaml +184 -0
- package/examples/google-flights/search_flights/request-transform.ts +119 -0
- package/examples/google-flights/search_flights/workflow.json +143 -0
- package/examples/google-hotels/README.md +29 -0
- package/examples/google-hotels/_shared/batchexecute.ts +73 -0
- package/examples/google-hotels/_shared/freq.ts +158 -0
- package/examples/google-hotels/_shared/package.json +9 -0
- package/examples/google-hotels/autocomplete_hotel_location/index.ts +80 -0
- package/examples/google-hotels/autocomplete_hotel_location/package.json +9 -0
- package/examples/google-hotels/autocomplete_hotel_location/parser.ts +71 -0
- package/examples/google-hotels/autocomplete_hotel_location/playbook.yaml +36 -0
- package/examples/google-hotels/autocomplete_hotel_location/request-transform.ts +37 -0
- package/examples/google-hotels/autocomplete_hotel_location/workflow.json +36 -0
- package/examples/google-hotels/get_hotel_booking_options/index.ts +143 -0
- package/examples/google-hotels/get_hotel_booking_options/package.json +9 -0
- package/examples/google-hotels/get_hotel_booking_options/parser.ts +271 -0
- package/examples/google-hotels/get_hotel_booking_options/playbook.yaml +154 -0
- package/examples/google-hotels/get_hotel_booking_options/request-transform.ts +154 -0
- package/examples/google-hotels/get_hotel_booking_options/workflow.json +84 -0
- package/examples/google-hotels/get_hotel_reviews/index.ts +81 -0
- package/examples/google-hotels/get_hotel_reviews/package.json +9 -0
- package/examples/google-hotels/get_hotel_reviews/parser.ts +128 -0
- package/examples/google-hotels/get_hotel_reviews/playbook.yaml +64 -0
- package/examples/google-hotels/get_hotel_reviews/request-transform.ts +42 -0
- package/examples/google-hotels/get_hotel_reviews/workflow.json +37 -0
- package/examples/google-hotels/search_hotels/index.ts +207 -0
- package/examples/google-hotels/search_hotels/package.json +9 -0
- package/examples/google-hotels/search_hotels/parser.ts +260 -0
- package/examples/google-hotels/search_hotels/playbook.yaml +87 -0
- package/examples/google-hotels/search_hotels/request-transform.ts +197 -0
- package/examples/google-hotels/search_hotels/workflow.json +127 -0
- package/examples/southwest/README.md +3 -2
- package/examples/southwest/search_southwest_flights/index.ts +18 -1
- package/examples/southwest/search_southwest_flights/workflow.json +18 -1
- package/package.json +3 -2
- package/prompts/audit-agent.md +71 -0
- package/prompts/build-planning.md +74 -0
- package/prompts/compile-agent.md +131 -27
- package/prompts/prereq-builder.md +64 -0
- package/prompts/prereq-planner.md +34 -0
- package/prompts/tool-planning.md +39 -0
- package/src/cli.ts +116 -3
- package/src/imprint/agent.ts +5 -0
- package/src/imprint/audit.ts +996 -0
- package/src/imprint/backend-ladder.ts +1214 -184
- package/src/imprint/build-plan.ts +1051 -0
- package/src/imprint/cdp-browser-fetch.ts +592 -0
- package/src/imprint/cdp-jar-cache.ts +320 -0
- package/src/imprint/chromium.ts +414 -8
- package/src/imprint/claude-cli-compile.ts +125 -25
- package/src/imprint/codex-cli-compile.ts +26 -23
- package/src/imprint/compile-agent-types.ts +38 -0
- package/src/imprint/compile-agent.ts +63 -25
- package/src/imprint/compile-tools.ts +1666 -66
- package/src/imprint/compile.ts +13 -1
- package/src/imprint/concurrency.ts +87 -0
- package/src/imprint/cron.ts +4 -0
- package/src/imprint/doctor.ts +48 -3
- package/src/imprint/freeform-redact.ts +5 -4
- package/src/imprint/install.ts +79 -4
- package/src/imprint/integrations.ts +3 -3
- package/src/imprint/llm.ts +56 -8
- package/src/imprint/mcp-compile-server.ts +43 -10
- package/src/imprint/mcp-maintenance.ts +18 -102
- package/src/imprint/mcp-server.ts +73 -7
- package/src/imprint/multi-progress.ts +7 -2
- package/src/imprint/param-grounding.ts +367 -0
- package/src/imprint/paths.ts +29 -0
- package/src/imprint/playbook-runner.ts +101 -40
- package/src/imprint/prereq-builder.ts +651 -0
- package/src/imprint/probe-backends.ts +6 -3
- package/src/imprint/record.ts +10 -1
- package/src/imprint/redact.ts +30 -2
- package/src/imprint/replay-capture.ts +19 -18
- package/src/imprint/runtime.ts +19 -10
- package/src/imprint/session-diff.ts +79 -2
- package/src/imprint/session-merge.ts +9 -5
- package/src/imprint/stealth-chromium.ts +79 -0
- package/src/imprint/stealth-fetch.ts +309 -29
- package/src/imprint/stealth-token-cache.ts +88 -0
- package/src/imprint/teach-plan.ts +251 -0
- package/src/imprint/teach-state.ts +10 -0
- package/src/imprint/teach.ts +456 -142
- package/src/imprint/tool-candidates.ts +72 -14
- package/src/imprint/tool-plan.ts +313 -0
- package/src/imprint/tracing.ts +135 -6
- package/src/imprint/types.ts +61 -3
- package/examples/google-flights/search_google_flights/index.ts +0 -101
- package/examples/google-flights/search_google_flights/parser.test.ts +0 -140
- package/examples/google-flights/search_google_flights/parser.ts +0 -189
- package/examples/google-flights/search_google_flights/playbook.yaml +0 -130
- package/examples/google-flights/search_google_flights/workflow.json +0 -48
- package/examples/google-hotels/search_google_hotels/index.ts +0 -194
- package/examples/google-hotels/search_google_hotels/parser.test.ts +0 -168
- package/examples/google-hotels/search_google_hotels/parser.ts +0 -330
- package/examples/google-hotels/search_google_hotels/playbook.yaml +0 -125
- package/examples/google-hotels/search_google_hotels/workflow.json +0 -111
- package/examples/namecheap-domains/search_namecheap_domains/index.ts +0 -144
- package/examples/namecheap-domains/search_namecheap_domains/parser.ts +0 -380
- package/examples/namecheap-domains/search_namecheap_domains/playbook.yaml +0 -50
- package/examples/namecheap-domains/search_namecheap_domains/request-transform.ts +0 -136
- package/examples/namecheap-domains/search_namecheap_domains/workflow.json +0 -97
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Request transform for Namecheap RTB endpoints.
|
|
3
|
-
*
|
|
4
|
-
* The namecheap.com domain-search UI signs every request to its real-time
|
|
5
|
-
* bidding APIs (rtb.namecheapapi.com, etc.) with an `rcs` query param
|
|
6
|
-
* computed by client-side JavaScript. The signature is:
|
|
7
|
-
* 1. Build a canonical string:
|
|
8
|
-
* "<secret> <nonce32hex> <METHOD> <pathname> <key1>=<encodedValue1>&<key2>=..."
|
|
9
|
-
* where query pairs come from the URL's raw search string (encoded values),
|
|
10
|
-
* excluding any existing `rcs` key, sorted alphabetically by key. The
|
|
11
|
-
* values are then re-encoded with encodeURIComponent (potentially
|
|
12
|
-
* double-encoding), per the original JS implementation.
|
|
13
|
-
* 2. Compute CRC32 (signed 32-bit) of that string.
|
|
14
|
-
* 3. JSON.stringify({val: <crc>, n: <nonce>}).
|
|
15
|
-
* 4. XOR each character of the JSON with 73, then base64 the resulting
|
|
16
|
-
* binary string. That value, URL-encoded, becomes the rcs param.
|
|
17
|
-
*
|
|
18
|
-
* The two static "secrets" (one for *.namecheapapi.com, one for *.revved.com)
|
|
19
|
-
* are app-level constants embedded in the public domain-search bundle — not
|
|
20
|
-
* per-user secrets — and gate access to real availability/pricing data.
|
|
21
|
-
* Without a valid rcs the API returns sentinel "domain.com" mock data.
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
const NC_SECRET = '815e7ef93be85bebe5959f6f72d7e542';
|
|
25
|
-
const REVVED_SECRET = '8f6c7d5691eebd3b5090dc6b06755d58';
|
|
26
|
-
|
|
27
|
-
const NC_HOST_RE =
|
|
28
|
-
/(sb[.-])?(rtb|aftermarket|premiums|pricerequest|business-lookup|domain-suggestion)?\.namecheapapi\.com$/;
|
|
29
|
-
const REVVED_HOST_RE = /(sb-)?domains?\.revved\.com$/;
|
|
30
|
-
|
|
31
|
-
// CRC32 lookup table (matching the `crc-32` npm module v1.2.2 used by the site).
|
|
32
|
-
const CRC32_TABLE: Int32Array = (() => {
|
|
33
|
-
const t = new Int32Array(256);
|
|
34
|
-
for (let n = 0; n < 256; n++) {
|
|
35
|
-
let e = n;
|
|
36
|
-
for (let k = 0; k < 8; k++) {
|
|
37
|
-
e = e & 1 ? -306674912 ^ (e >>> 1) : e >>> 1;
|
|
38
|
-
}
|
|
39
|
-
t[n] = e;
|
|
40
|
-
}
|
|
41
|
-
return t;
|
|
42
|
-
})();
|
|
43
|
-
|
|
44
|
-
function crc32Str(str: string, seed = 0): number {
|
|
45
|
-
let r = ~seed;
|
|
46
|
-
for (let a = 0; a < str.length; a++) {
|
|
47
|
-
let i = str.charCodeAt(a);
|
|
48
|
-
if (i < 128) {
|
|
49
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ i) & 255]!;
|
|
50
|
-
} else if (i < 2048) {
|
|
51
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (192 | ((i >> 6) & 31))) & 255]!;
|
|
52
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (128 | (63 & i))) & 255]!;
|
|
53
|
-
} else if (i >= 55296 && i < 57344) {
|
|
54
|
-
i = 64 + (1023 & i);
|
|
55
|
-
const s = 1023 & str.charCodeAt(++a);
|
|
56
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (240 | ((i >> 8) & 7))) & 255]!;
|
|
57
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (128 | ((i >> 2) & 63))) & 255]!;
|
|
58
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (128 | ((s >> 6) & 15) | ((3 & i) << 4))) & 255]!;
|
|
59
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (128 | (63 & s))) & 255]!;
|
|
60
|
-
} else {
|
|
61
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (224 | ((i >> 12) & 15))) & 255]!;
|
|
62
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (128 | ((i >> 6) & 63))) & 255]!;
|
|
63
|
-
r = (r >>> 8) ^ CRC32_TABLE[(r ^ (128 | (63 & i))) & 255]!;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return ~r;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function randomNonce32Hex(): string {
|
|
70
|
-
let s = '';
|
|
71
|
-
for (let i = 0; i < 32; i++) s += Math.floor(Math.random() * 16).toString(16);
|
|
72
|
-
return s;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function chooseSecret(host: string): string | null {
|
|
76
|
-
if (REVVED_HOST_RE.test(host)) return REVVED_SECRET;
|
|
77
|
-
if (NC_HOST_RE.test(host)) return NC_SECRET;
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export function transform(method: string, urlStr: string, responses?: unknown[]): string {
|
|
82
|
-
let url: URL;
|
|
83
|
-
try {
|
|
84
|
-
url = new URL(urlStr);
|
|
85
|
-
} catch {
|
|
86
|
-
return urlStr;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// domainStatus placeholder: replace __PLACEHOLDER__ with actual domain
|
|
90
|
-
// names extracted from the search response (responses[1]).
|
|
91
|
-
// Use string replacement instead of searchParams.set to avoid encoding commas.
|
|
92
|
-
if (url.pathname === '/v1/domainStatus' && urlStr.includes('__PLACEHOLDER__') && responses) {
|
|
93
|
-
const search = responses[1] as { picks?: Array<{ domain?: string }>; ranks?: Array<{ domain?: string }>; exact_match?: { domain?: string } } | undefined;
|
|
94
|
-
const domains = new Set<string>();
|
|
95
|
-
if (search?.exact_match?.domain) domains.add(search.exact_match.domain);
|
|
96
|
-
for (const p of search?.picks ?? []) { if (p?.domain) domains.add(p.domain); }
|
|
97
|
-
for (const r of search?.ranks ?? []) { if (r?.domain) domains.add(r.domain); }
|
|
98
|
-
urlStr = urlStr.replace('__PLACEHOLDER__', [...domains].join(','));
|
|
99
|
-
try { url = new URL(urlStr); } catch { return urlStr; }
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const secret = chooseSecret(url.host);
|
|
103
|
-
if (!secret) return urlStr;
|
|
104
|
-
|
|
105
|
-
const nonce = randomNonce32Hex();
|
|
106
|
-
let canonical = `${secret} ${nonce} ${method.toUpperCase()} ${url.pathname} `;
|
|
107
|
-
|
|
108
|
-
const pairs: Array<[string, string]> = [];
|
|
109
|
-
if (url.search && url.search.startsWith('?')) {
|
|
110
|
-
for (const part of url.search.slice(1).split('&')) {
|
|
111
|
-
const idx = part.indexOf('=');
|
|
112
|
-
if (idx === -1) continue;
|
|
113
|
-
const k = part.slice(0, idx);
|
|
114
|
-
const v = part.slice(idx + 1);
|
|
115
|
-
if (k !== 'rcs') pairs.push([k, v]);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
pairs.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
|
|
119
|
-
canonical += pairs.map(([k, v]) => `${k}=${encodeURIComponent(v)}`).join('&');
|
|
120
|
-
|
|
121
|
-
const val = crc32Str(canonical, 0);
|
|
122
|
-
const payload = JSON.stringify({ val, n: nonce });
|
|
123
|
-
|
|
124
|
-
let xored = '';
|
|
125
|
-
for (let i = 0; i < payload.length; i++) {
|
|
126
|
-
xored += String.fromCharCode(73 ^ payload.charCodeAt(i));
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Buffer is available in Bun/Node; encode the XOR'd binary string as base64.
|
|
130
|
-
const rcs = Buffer.from(xored, 'binary').toString('base64');
|
|
131
|
-
|
|
132
|
-
// Strip any pre-existing rcs param the caller may have placed in the URL.
|
|
133
|
-
const filtered = pairs.map(([k, v]) => `${k}=${v}`).join('&');
|
|
134
|
-
const newSearch = filtered ? `?${filtered}&rcs=${encodeURIComponent(rcs)}` : `?rcs=${encodeURIComponent(rcs)}`;
|
|
135
|
-
return `${url.origin}${url.pathname}${newSearch}${url.hash}`;
|
|
136
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"toolName": "search_namecheap_domains",
|
|
3
|
-
"intent": {
|
|
4
|
-
"description": "Search Namecheap for available domains matching a query, returning the exact-match availability + pricing, suggested domain picks across many TLDs, the TLD catalog, and Spaceship/brandstore aftermarket marketplace listings.",
|
|
5
|
-
"userSaid": "i searched for imprint on namecheap. njow there are a lot of filters, by default i am on \"Popular\". there were about 30 filters. i cycled through all of them"
|
|
6
|
-
},
|
|
7
|
-
"parameters": [
|
|
8
|
-
{
|
|
9
|
-
"name": "query",
|
|
10
|
-
"type": "string",
|
|
11
|
-
"description": "The SLD (second-level-domain) or search term to look up (e.g. 'imprint').",
|
|
12
|
-
"default": "imprint"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"name": "category",
|
|
16
|
-
"type": "string",
|
|
17
|
-
"description": "Optional TLD category filter to narrow returned suggestions. One of the CategoryName values exposed by the TLD catalog: 'popular', 'international', 'new', '088domains'. Leave empty for unfiltered results.",
|
|
18
|
-
"default": ""
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"site": "namecheap-domains",
|
|
22
|
-
"requests": [
|
|
23
|
-
{
|
|
24
|
-
"method": "GET",
|
|
25
|
-
"url": "https://www.namecheap.com/domains/tlds.ashx",
|
|
26
|
-
"headers": {
|
|
27
|
-
"Accept": "application/json, text/plain, */*",
|
|
28
|
-
"Accept-Language": "en-US,en;q=0.9",
|
|
29
|
-
"Referer": "https://www.namecheap.com/domains/registration/results/?domain=${param.query}",
|
|
30
|
-
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
|
|
31
|
-
"sec-ch-ua": "\"Chromium\";v=\"147\", \"Not.A/Brand\";v=\"8\"",
|
|
32
|
-
"sec-ch-ua-mobile": "?0",
|
|
33
|
-
"sec-ch-ua-platform": "\"macOS\""
|
|
34
|
-
},
|
|
35
|
-
"effect": "safe"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"method": "GET",
|
|
39
|
-
"url": "https://rtb.namecheapapi.com/api/search/${param.query}?session_id=1000000000000&search=false",
|
|
40
|
-
"headers": {
|
|
41
|
-
"Accept": "application/json, text/plain, */*",
|
|
42
|
-
"Accept-Language": "en-US,en;q=0.9",
|
|
43
|
-
"Origin": "https://www.namecheap.com",
|
|
44
|
-
"Referer": "https://www.namecheap.com/",
|
|
45
|
-
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
|
|
46
|
-
"sec-ch-ua": "\"Chromium\";v=\"147\", \"Not.A/Brand\";v=\"8\"",
|
|
47
|
-
"sec-ch-ua-mobile": "?0",
|
|
48
|
-
"sec-ch-ua-platform": "\"macOS\""
|
|
49
|
-
},
|
|
50
|
-
"effect": "safe"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"method": "GET",
|
|
54
|
-
"url": "https://rtb.namecheapapi.com/api/picks/${param.query}?session_id=1000000000000",
|
|
55
|
-
"headers": {
|
|
56
|
-
"Accept": "application/json, text/plain, */*",
|
|
57
|
-
"Accept-Language": "en-US,en;q=0.9",
|
|
58
|
-
"Origin": "https://www.namecheap.com",
|
|
59
|
-
"Referer": "https://www.namecheap.com/",
|
|
60
|
-
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
|
|
61
|
-
"sec-ch-ua": "\"Chromium\";v=\"147\", \"Not.A/Brand\";v=\"8\"",
|
|
62
|
-
"sec-ch-ua-mobile": "?0",
|
|
63
|
-
"sec-ch-ua-platform": "\"macOS\""
|
|
64
|
-
},
|
|
65
|
-
"effect": "safe"
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
"method": "POST",
|
|
69
|
-
"url": "https://www.namecheap.com/api/v1/ncpl/domainsearchgateway/domain/readBySld",
|
|
70
|
-
"headers": {
|
|
71
|
-
"Accept": "application/json, text/plain, */*",
|
|
72
|
-
"Accept-Language": "en-US,en;q=0.9",
|
|
73
|
-
"Content-Type": "application/json; charset=UTF-8",
|
|
74
|
-
"Origin": "https://www.namecheap.com",
|
|
75
|
-
"Referer": "https://www.namecheap.com/domains/registration/results/?domain=${param.query}",
|
|
76
|
-
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
|
|
77
|
-
"X-Requested-With": "XMLHttpRequest",
|
|
78
|
-
"sec-ch-ua": "\"Chromium\";v=\"147\", \"Not.A/Brand\";v=\"8\"",
|
|
79
|
-
"sec-ch-ua-mobile": "?0",
|
|
80
|
-
"sec-ch-ua-platform": "\"macOS\""
|
|
81
|
-
},
|
|
82
|
-
"body": "{\"request\":{\"sld\":\"${param.query}\",\"sources\":[\"sellerhub\",\"brandstore\"]}}",
|
|
83
|
-
"effect": "safe"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"method": "GET",
|
|
87
|
-
"url": "https://domains.revved.com/v1/domainStatus?whois=true&domains=__PLACEHOLDER__",
|
|
88
|
-
"headers": {
|
|
89
|
-
"Accept": "application/json, text/plain, */*",
|
|
90
|
-
"Referer": "https://www.namecheap.com/"
|
|
91
|
-
},
|
|
92
|
-
"effect": "safe"
|
|
93
|
-
}
|
|
94
|
-
],
|
|
95
|
-
"parserModule": "./parser.ts",
|
|
96
|
-
"requestTransformModule": "./request-transform.ts"
|
|
97
|
-
}
|