@pipedream/whoisfreaks 0.0.1 → 0.1.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 +11 -0
- package/actions/bulk-dns-domain-lookup/bulk-dns-domain-lookup.mjs +68 -0
- package/actions/bulk-ip-geolocation-lookup/bulk-ip-geolocation-lookup.mjs +40 -0
- package/actions/bulk-ip-reputation-lookup/bulk-ip-reputation-lookup.mjs +40 -0
- package/actions/bulk-whois-lookup/bulk-whois-lookup.mjs +39 -0
- package/actions/domain-availability-lookup/domain-availability-lookup.mjs +37 -0
- package/actions/domain-lookup/domain-lookup.mjs +50 -0
- package/actions/domain-reputation-lookup/domain-reputation-lookup.mjs +31 -0
- package/actions/ip-geolocation-lookup/ip-geolocation-lookup.mjs +32 -0
- package/actions/ip-lookup/ip-lookup.mjs +37 -0
- package/actions/ip-reputation-lookup/ip-reputation-lookup.mjs +32 -0
- package/actions/reverse-lookup/reverse-lookup.mjs +94 -0
- package/actions/ssl-lookup/ssl-lookup.mjs +41 -0
- package/actions/sub-domain-lookup/sub-domain-lookup.mjs +46 -0
- package/common/utils.mjs +27 -0
- package/package.json +4 -1
- package/whoisfreaks.app.mjs +131 -5
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
The WhoisFreaks API offers a way to dig into the riches of domain registration data. With this API, you can retrieve extensive WHOIS records, including registrar details, domain status, creation and expiration dates, and registrant information, among other data. When integrated with Pipedream's serverless platform, you unlock the potential to automate domain research, track domain registrations, monitor changes, and connect insights with other apps for a multitude of purposes.
|
|
4
|
+
|
|
5
|
+
# Example Workflows
|
|
6
|
+
|
|
7
|
+
- **Domain Registration Monitoring**: Build a workflow on Pipedream that tracks domain registrations for specific keywords. When a new domain containing the keyword is registered, use WhoisFreaks to fetch WHOIS data and send alerts via Slack or email to the interested parties.
|
|
8
|
+
|
|
9
|
+
- **Trademark Protection**: Set up a Pipedream workflow to monitor the registration of domains similar to your trademarks. WhoisFreaks can be used to identify potential trademark infringements, and you can connect to a CRM like Salesforce to initiate a follow-up action or legal response.
|
|
10
|
+
|
|
11
|
+
- **Competitive Intelligence Gathering**: Create a Pipedream workflow to perform regular searches for domains registered by your competitors. Utilize WhoisFreaks API to extract relevant data and compile it into a report, which can be periodically sent to Google Sheets for analysis and shared with your team.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
import { ConfigurationError } from "@pipedream/platform";
|
|
4
|
+
import { parseObject } from "../../common/utils.mjs";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
key: "whoisfreaks-bulk-dns-domain-lookup",
|
|
8
|
+
name: "Bulk DNS Domain Lookup",
|
|
9
|
+
description: "Retrieve DNS records (A, AAAA, MX, NS, CNAME, TXT, PTR, SPF, DKIM, DMARC, SRV, SOA) for up to 100 domains or IP addresses in a single request. Use this action for bulk DNS auditing, infrastructure mapping, or automated monitoring. Accepts domain names and/or IP addresses; returns JSON or XML output. [See the documentation](https://whoisfreaks.com/documentation/dns-checker-api#bulk-domain-lookup)",
|
|
10
|
+
version: "0.0.1",
|
|
11
|
+
annotations: {
|
|
12
|
+
destructiveHint: false,
|
|
13
|
+
openWorldHint: true,
|
|
14
|
+
readOnlyHint: true,
|
|
15
|
+
},
|
|
16
|
+
type: "action",
|
|
17
|
+
props: {
|
|
18
|
+
whoisfreaks,
|
|
19
|
+
domainNames: {
|
|
20
|
+
propDefinition: [whoisfreaks, "domainNames"],
|
|
21
|
+
optional: true,
|
|
22
|
+
},
|
|
23
|
+
ipAddresses: {
|
|
24
|
+
propDefinition: [whoisfreaks, "ipAddresses"],
|
|
25
|
+
optional: true,
|
|
26
|
+
},
|
|
27
|
+
format: {
|
|
28
|
+
propDefinition: [whoisfreaks, "format"],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
async run({ $ }) {
|
|
33
|
+
const domainNames = this.domainNames
|
|
34
|
+
? parseObject(this.domainNames)
|
|
35
|
+
: [];
|
|
36
|
+
|
|
37
|
+
const ipAddresses = this.ipAddresses
|
|
38
|
+
? parseObject(this.ipAddresses)
|
|
39
|
+
: [];
|
|
40
|
+
|
|
41
|
+
if (!domainNames.length && !ipAddresses.length) {
|
|
42
|
+
throw new ConfigurationError(
|
|
43
|
+
"Please provide at least one domain name or IP address."
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const response = await this.whoisfreaks.lookupBulkDnsDomain({
|
|
48
|
+
$,
|
|
49
|
+
params: {
|
|
50
|
+
format: this.format,
|
|
51
|
+
type: "all",
|
|
52
|
+
},
|
|
53
|
+
body: {
|
|
54
|
+
...(domainNames.length && { domainNames }),
|
|
55
|
+
...(ipAddresses.length && { ipAddresses }),
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
$.export(
|
|
60
|
+
"$summary",
|
|
61
|
+
`Successfully fetched bulk DNS data for ${
|
|
62
|
+
domainNames.length + ipAddresses.length
|
|
63
|
+
} input(s)`
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
return response;
|
|
67
|
+
},
|
|
68
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
import { parseObject } from "../../common/utils.mjs";
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
key: "whoisfreaks-bulk-ip-geolocation-lookup",
|
|
7
|
+
name: "Bulk IP Geolocation Lookup",
|
|
8
|
+
description: "Retrieve geolocation details (country, city, ASN, ISP, coordinates) for up to 100 IP addresses in a single request. Accepts comma-separated IPv4 or IPv6 addresses and returns JSON or XML output. Use this action for bulk network analysis, fraud detection, or audience geo-enrichment. [See the documentation](https://whoisfreaks.com/documentation/ip-geolocation-api#bulk-geo-lookup)",
|
|
9
|
+
version: "0.0.1",
|
|
10
|
+
annotations: {
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
readOnlyHint: true,
|
|
14
|
+
},
|
|
15
|
+
type: "action",
|
|
16
|
+
props: {
|
|
17
|
+
whoisfreaks,
|
|
18
|
+
ipAddresses: {
|
|
19
|
+
propDefinition: [whoisfreaks, "ipAddresses"],
|
|
20
|
+
optional: false,
|
|
21
|
+
},
|
|
22
|
+
format: {
|
|
23
|
+
propDefinition: [whoisfreaks, "format"],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
async run({ $ }) {
|
|
27
|
+
const ipAddresses = parseObject(this.ipAddresses);
|
|
28
|
+
const response = await this.whoisfreaks.lookupBulkIpGeolocation({
|
|
29
|
+
$,
|
|
30
|
+
params: {
|
|
31
|
+
format: this.format,
|
|
32
|
+
},
|
|
33
|
+
body: {
|
|
34
|
+
ips: ipAddresses,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
$.export("$summary", `Successfully fetched bulk IP geolocation data for ${ipAddresses.length} IP(s)`);
|
|
38
|
+
return response;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
import { parseObject } from "../../common/utils.mjs";
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
key: "whoisfreaks-bulk-ip-reputation-lookup",
|
|
7
|
+
name: "Bulk IP Reputation Lookup",
|
|
8
|
+
description: "Score up to 100 IPv4 or IPv6 addresses against real-time threat data in a single request. Returns composite threat score, VPN/proxy/Tor/bot classification, blacklist status, and ASN/ISP details for each IP. Accepts comma-separated IP addresses; returns JSON or XML output. [See the documentation](https://whoisfreaks.com/documentation/ip-security-api#bulk-security-lookup)",
|
|
9
|
+
version: "0.0.1",
|
|
10
|
+
annotations: {
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
readOnlyHint: true,
|
|
14
|
+
},
|
|
15
|
+
type: "action",
|
|
16
|
+
props: {
|
|
17
|
+
whoisfreaks,
|
|
18
|
+
ipAddresses: {
|
|
19
|
+
propDefinition: [whoisfreaks, "ipAddresses"],
|
|
20
|
+
optional: false,
|
|
21
|
+
},
|
|
22
|
+
format: {
|
|
23
|
+
propDefinition: [whoisfreaks, "format"],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
async run({ $ }) {
|
|
27
|
+
const ipAddresses = parseObject(this.ipAddresses);
|
|
28
|
+
const response = await this.whoisfreaks.lookupBulkIpReputation({
|
|
29
|
+
$,
|
|
30
|
+
params: {
|
|
31
|
+
format: this.format,
|
|
32
|
+
},
|
|
33
|
+
body: {
|
|
34
|
+
ips: ipAddresses,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
$.export("$summary", `Successfully fetched bulk IP reputation data for ${ipAddresses.length} IP(s)`);
|
|
38
|
+
return response;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
import { parseObject } from "../../common/utils.mjs";
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
key: "whoisfreaks-bulk-whois-lookup",
|
|
7
|
+
name: "Bulk Whois Lookup",
|
|
8
|
+
description: "Retrieve WHOIS registration data (registrant, registrar, name servers, email, phone, address, ASN, history) for up to 100 domains in a single request. Accepts comma-separated domain names across 1000+ TLDs; returns JSON or XML output. Use this action for bulk domain research, lead enrichment, or portfolio audits. [See the documentation](https://whoisfreaks.com/documentation/bulk-whois-api)",
|
|
9
|
+
version: "0.0.1",
|
|
10
|
+
annotations: {
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
readOnlyHint: true,
|
|
14
|
+
},
|
|
15
|
+
type: "action",
|
|
16
|
+
props: {
|
|
17
|
+
whoisfreaks,
|
|
18
|
+
domainNames: {
|
|
19
|
+
propDefinition: [whoisfreaks, "domainNames"],
|
|
20
|
+
},
|
|
21
|
+
format: {
|
|
22
|
+
propDefinition: [whoisfreaks, "format"],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
async run({ $ }) {
|
|
26
|
+
const domainNames = parseObject(this.domainNames);
|
|
27
|
+
const response = await this.whoisfreaks.lookupBulkWhois({
|
|
28
|
+
$,
|
|
29
|
+
params: {
|
|
30
|
+
format: this.format,
|
|
31
|
+
},
|
|
32
|
+
body: {
|
|
33
|
+
domainNames,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
$.export("$summary", `Successfully fetched bulk WHOIS data for ${domainNames.length} domain(s)`);
|
|
37
|
+
return response;
|
|
38
|
+
},
|
|
39
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
key: "whoisfreaks-domain-availability-lookup",
|
|
6
|
+
name: "Domain Availability Lookup",
|
|
7
|
+
description:
|
|
8
|
+
"Check if a domain name is available for registration. For example you can check whoisfreaks.com. This action supports responses in both JSON and XML format. Always use sug=false to get the response. [See the documentation](https://whoisfreaks.com/documentation/domain-availability-api#lookup)",
|
|
9
|
+
version: "0.0.1",
|
|
10
|
+
annotations: {
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
readOnlyHint: true,
|
|
14
|
+
},
|
|
15
|
+
type: "action",
|
|
16
|
+
props: {
|
|
17
|
+
whoisfreaks,
|
|
18
|
+
domainName: {
|
|
19
|
+
propDefinition: [whoisfreaks, "domainName"],
|
|
20
|
+
},
|
|
21
|
+
format: {
|
|
22
|
+
propDefinition: [whoisfreaks, "format"],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
async run({ $ }) {
|
|
26
|
+
const response = await this.whoisfreaks.lookupDomainAvailability({
|
|
27
|
+
$,
|
|
28
|
+
params: {
|
|
29
|
+
domain: this.domainName,
|
|
30
|
+
format: this.format,
|
|
31
|
+
sug: false,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
$.export("$summary", `Successfully performed domain availability lookup for ${this.domainName}`);
|
|
35
|
+
return response;
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "whoisfreaks-domain-lookup",
|
|
5
|
+
name: "Domain Lookup",
|
|
6
|
+
description: "Retrieve details about a domain name. [See the documentation](https://whoisfreaks.com/documentation/whois-api)",
|
|
7
|
+
version: "0.0.3",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: true,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
props: {
|
|
15
|
+
whoisfreaks,
|
|
16
|
+
domainName: {
|
|
17
|
+
propDefinition: [
|
|
18
|
+
whoisfreaks,
|
|
19
|
+
"domainName",
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
lookupType: {
|
|
23
|
+
type: "string",
|
|
24
|
+
label: "Lookup Type",
|
|
25
|
+
description: "Whether to perform a `live` or `historical` lookup",
|
|
26
|
+
options: [
|
|
27
|
+
"live",
|
|
28
|
+
"historical",
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
format: {
|
|
32
|
+
propDefinition: [
|
|
33
|
+
whoisfreaks,
|
|
34
|
+
"format",
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
async run({ $ }) {
|
|
39
|
+
const response = await this.whoisfreaks.domainLookup({
|
|
40
|
+
$,
|
|
41
|
+
params: {
|
|
42
|
+
domainName: this.domainName,
|
|
43
|
+
whois: this.lookupType,
|
|
44
|
+
format: this.format,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
$.export("$summary", `Successfully performed lookup for domain ${this.domainName}`);
|
|
48
|
+
return response;
|
|
49
|
+
},
|
|
50
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
key: "whoisfreaks-domain-reputation-lookup",
|
|
6
|
+
name: "Domain Reputation Lookup",
|
|
7
|
+
description: "Check the reputation and security status of a domain — including whether it is associated with malware, phishing campaigns, or other malicious activity. Use this action for threat intelligence workflows, email security checks, or domain risk scoring. Returns JSON output. [See the documentation](https://whoisfreaks.com/documentation/domain-reputation-api)",
|
|
8
|
+
version: "0.0.1",
|
|
9
|
+
annotations: {
|
|
10
|
+
destructiveHint: false,
|
|
11
|
+
openWorldHint: true,
|
|
12
|
+
readOnlyHint: true,
|
|
13
|
+
},
|
|
14
|
+
type: "action",
|
|
15
|
+
props: {
|
|
16
|
+
whoisfreaks,
|
|
17
|
+
domainName: {
|
|
18
|
+
propDefinition: [whoisfreaks, "domainName"],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
async run({ $ }) {
|
|
22
|
+
const response = await this.whoisfreaks.lookupDomainReputation({
|
|
23
|
+
$,
|
|
24
|
+
params: {
|
|
25
|
+
domainName: this.domainName,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
$.export("$summary", `Successfully fetched domain reputation data for ${this.domainName}`);
|
|
29
|
+
return response;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
key: "whoisfreaks-ip-geolocation-lookup",
|
|
6
|
+
name: "IP Geolocation Lookup",
|
|
7
|
+
description:
|
|
8
|
+
"Retrieve geolocation details (country, city, region, ASN, ISP, coordinates) for a single IP address. Supports both IPv4 and IPv6 addresses. Use this action to enrich events with location data, perform fraud detection, or geo-target users. [See the documentation](https://whoisfreaks.com/documentation/ip-geolocation-api#geo-lookup)",
|
|
9
|
+
version: "0.0.1",
|
|
10
|
+
annotations: {
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
readOnlyHint: true,
|
|
14
|
+
},
|
|
15
|
+
type: "action",
|
|
16
|
+
props: {
|
|
17
|
+
whoisfreaks,
|
|
18
|
+
ip: {
|
|
19
|
+
propDefinition: [whoisfreaks, "ip"],
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
async run({ $ }) {
|
|
23
|
+
const response = await this.whoisfreaks.lookupIpGeolocation({
|
|
24
|
+
$,
|
|
25
|
+
params: {
|
|
26
|
+
ip: this.ip,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
$.export("$summary", `Successfully fetched geolocation data for IP ${this.ip}`);
|
|
30
|
+
return response;
|
|
31
|
+
},
|
|
32
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "whoisfreaks-ip-lookup",
|
|
5
|
+
name: "IP Lookup",
|
|
6
|
+
description: "Retrieve information about an IP address. [See the documentation](https://whoisfreaks.com/documentation/ip-whois-api)",
|
|
7
|
+
version: "0.0.3",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: true,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
props: {
|
|
15
|
+
whoisfreaks,
|
|
16
|
+
ip: {
|
|
17
|
+
propDefinition: [whoisfreaks, "ip"],
|
|
18
|
+
},
|
|
19
|
+
format: {
|
|
20
|
+
propDefinition: [
|
|
21
|
+
whoisfreaks,
|
|
22
|
+
"format",
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
async run({ $ }) {
|
|
27
|
+
const response = await this.whoisfreaks.ipLookup({
|
|
28
|
+
$,
|
|
29
|
+
params: {
|
|
30
|
+
ip: this.ip,
|
|
31
|
+
format: this.format,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
$.export("$summary", `Successfully performed lookup for IP ${this.ip}`);
|
|
35
|
+
return response;
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
key: "whoisfreaks-ip-reputation-lookup",
|
|
6
|
+
name: "IP Reputation Lookup",
|
|
7
|
+
description: "Score a single IPv4 or IPv6 address against real-time threat data. Returns a composite threat score (0-100), VPN/proxy/Tor/bot classification, provider names with confidence scores, district-level geolocation, and ASN/ISP details. Use this action for threat intelligence, access control, or fraud prevention workflows. Accepts JSON or XML output. [See the documentation](https://whoisfreaks.com/documentation/ip-security-api#security-lookup)",
|
|
8
|
+
version: "0.0.1",
|
|
9
|
+
annotations: {
|
|
10
|
+
destructiveHint: false,
|
|
11
|
+
openWorldHint: true,
|
|
12
|
+
readOnlyHint: true,
|
|
13
|
+
},
|
|
14
|
+
type: "action",
|
|
15
|
+
props: {
|
|
16
|
+
whoisfreaks,
|
|
17
|
+
ipAddress: {
|
|
18
|
+
propDefinition: [whoisfreaks, "ip"],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
async run({ $ }) {
|
|
22
|
+
const response = await this.whoisfreaks.lookupIpReputation({
|
|
23
|
+
$,
|
|
24
|
+
params: {
|
|
25
|
+
ip: this.ipAddress,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
$.export("$summary", `Successfully fetched IP reputation data for ${this.ipAddress}`);
|
|
29
|
+
return response;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
2
|
+
import { ConfigurationError } from "@pipedream/platform";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
key: "whoisfreaks-reverse-lookup",
|
|
6
|
+
name: "Reverse Lookup",
|
|
7
|
+
description:
|
|
8
|
+
"Retrieve details about a domain by keyword, email, registrant name or company. Must enter one and only one of keyword, email, owner, or company. [See the documentation](https://whoisfreaks.com/documentation/whois-api#reverse-lookup)",
|
|
9
|
+
version: "0.0.3",
|
|
10
|
+
annotations: {
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
readOnlyHint: true,
|
|
14
|
+
},
|
|
15
|
+
type: "action",
|
|
16
|
+
props: {
|
|
17
|
+
whoisfreaks,
|
|
18
|
+
keyword: {
|
|
19
|
+
type: "string",
|
|
20
|
+
label: "Keyword",
|
|
21
|
+
description:
|
|
22
|
+
"Keyword search utilizes case-insensitive Pattern Matching search technique to search in our historical database. For example, `whoisfreaks` matches with any keyword that have the searched pattern like `mywhoisfreaks` and `whoisfreakscom`.",
|
|
23
|
+
optional: true,
|
|
24
|
+
},
|
|
25
|
+
email: {
|
|
26
|
+
type: "string",
|
|
27
|
+
label: "Email",
|
|
28
|
+
description:
|
|
29
|
+
"Email search uses case-insensitive exact matching technique to search in our historical database. For example, `support@whoisfreaks.com` matches only with `support@whoisfreaks.com`.",
|
|
30
|
+
optional: true,
|
|
31
|
+
},
|
|
32
|
+
owner: {
|
|
33
|
+
type: "string",
|
|
34
|
+
label: "Owner",
|
|
35
|
+
description: "The owner name for requested whois",
|
|
36
|
+
optional: true,
|
|
37
|
+
},
|
|
38
|
+
company: {
|
|
39
|
+
type: "string",
|
|
40
|
+
label: "Company",
|
|
41
|
+
description:
|
|
42
|
+
"Registrant name or Company search use full-text search technique to search in our historical database. For example, `whoisfreaks` matched with `whoisfreaks`, `whoisfreak`, `whois`, `mywhoisfreaks` and `whoisfreakscom`.",
|
|
43
|
+
optional: true,
|
|
44
|
+
},
|
|
45
|
+
format: {
|
|
46
|
+
propDefinition: [whoisfreaks, "format"],
|
|
47
|
+
},
|
|
48
|
+
page: {
|
|
49
|
+
type: "integer",
|
|
50
|
+
label: "Page",
|
|
51
|
+
description:
|
|
52
|
+
"For getting next or desired page of whois info. Default: `1`",
|
|
53
|
+
default: 1,
|
|
54
|
+
optional: true,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
async run({ $ }) {
|
|
58
|
+
const normalize = (v) =>
|
|
59
|
+
typeof v === "string" && v.trim() === ""
|
|
60
|
+
? undefined
|
|
61
|
+
: v;
|
|
62
|
+
|
|
63
|
+
const keyword = normalize(this.keyword);
|
|
64
|
+
const email = normalize(this.email);
|
|
65
|
+
const owner = normalize(this.owner);
|
|
66
|
+
const company = normalize(this.company);
|
|
67
|
+
|
|
68
|
+
const activeCount = [
|
|
69
|
+
keyword, email, owner, company,
|
|
70
|
+
].filter((v) => v !== undefined && v !== null).length;
|
|
71
|
+
|
|
72
|
+
if (activeCount !== 1) {
|
|
73
|
+
throw new ConfigurationError(
|
|
74
|
+
"Must enter one and only one of keyword, email, owner, or company"
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const response = await this.whoisfreaks.domainLookup({
|
|
79
|
+
$,
|
|
80
|
+
params: {
|
|
81
|
+
keyword,
|
|
82
|
+
email,
|
|
83
|
+
owner,
|
|
84
|
+
company,
|
|
85
|
+
whois: "reverse",
|
|
86
|
+
format: this.format,
|
|
87
|
+
page: this.page || 1,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
$.export("$summary", "Successfully performed reverse lookup");
|
|
92
|
+
return response;
|
|
93
|
+
},
|
|
94
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
key: "whoisfreaks-ssl-lookup",
|
|
6
|
+
name: "SSL Lookup",
|
|
7
|
+
description:
|
|
8
|
+
"Retrieve details about a domain's SSL certificate (e.g. google.com). Note that this action accepts JSON or XML format values, always requests the full certificate chain (chain=true), and suppresses the raw OpenSSL response (sslRaw=false) for cleaner outputs. [See the documentation](https://whoisfreaks.com/documentation/ssl-certificate-api)",
|
|
9
|
+
version: "0.0.1",
|
|
10
|
+
annotations: {
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
readOnlyHint: true,
|
|
14
|
+
},
|
|
15
|
+
type: "action",
|
|
16
|
+
props: {
|
|
17
|
+
whoisfreaks,
|
|
18
|
+
domainName: {
|
|
19
|
+
propDefinition: [whoisfreaks, "domainName"],
|
|
20
|
+
},
|
|
21
|
+
format: {
|
|
22
|
+
propDefinition: [whoisfreaks, "format"],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
async run({ $ }) {
|
|
26
|
+
const response = await this.whoisfreaks.lookupSsl({
|
|
27
|
+
$,
|
|
28
|
+
params: {
|
|
29
|
+
domainName: this.domainName,
|
|
30
|
+
format: this.format,
|
|
31
|
+
chain: true,
|
|
32
|
+
sslRaw: false,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
$.export(
|
|
36
|
+
"$summary",
|
|
37
|
+
`Successfully performed SSL lookup for ${this.domainName}`,
|
|
38
|
+
);
|
|
39
|
+
return response;
|
|
40
|
+
},
|
|
41
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// x-pd-ai: optimized
|
|
2
|
+
import whoisfreaks from "../../whoisfreaks.app.mjs";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
key: "whoisfreaks-sub-domain-lookup",
|
|
6
|
+
name: "Subdomain Lookup",
|
|
7
|
+
description:
|
|
8
|
+
"Discover subdomains for a given domain using passive DNS data from 6.3B+ indexed hostnames. Returns active, inactive, and historical subdomain records. Use this action for attack surface mapping, security audits, or competitor research. Returns JSON or XML output. [See the documentation](https://whoisfreaks.com/documentation/subdomains-api)",
|
|
9
|
+
version: "0.0.1",
|
|
10
|
+
annotations: {
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
readOnlyHint: true,
|
|
13
|
+
openWorldHint: true,
|
|
14
|
+
},
|
|
15
|
+
type: "action",
|
|
16
|
+
props: {
|
|
17
|
+
whoisfreaks,
|
|
18
|
+
domainName: {
|
|
19
|
+
propDefinition: [whoisfreaks, "domainName"],
|
|
20
|
+
},
|
|
21
|
+
format: {
|
|
22
|
+
propDefinition: [whoisfreaks, "format"],
|
|
23
|
+
},
|
|
24
|
+
page: {
|
|
25
|
+
type: "integer",
|
|
26
|
+
label: "Page",
|
|
27
|
+
description:
|
|
28
|
+
"For getting next or desired page of whois info. Default: `1`",
|
|
29
|
+
default: 1,
|
|
30
|
+
min: 1,
|
|
31
|
+
optional: true,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
async run({ $ }) {
|
|
35
|
+
const response = await this.whoisfreaks.lookupSubDomain({
|
|
36
|
+
$,
|
|
37
|
+
params: {
|
|
38
|
+
domain: this.domainName,
|
|
39
|
+
format: this.format,
|
|
40
|
+
page: this.page || 1,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
$.export("$summary", `Successfully fetched subdomain data for ${this.domainName}`);
|
|
44
|
+
return response;
|
|
45
|
+
},
|
|
46
|
+
};
|
package/common/utils.mjs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const splitCommaSeparated = (value) =>
|
|
2
|
+
value.split(",").map((v) => v.trim()).filter(Boolean);
|
|
3
|
+
|
|
4
|
+
export const parseObject = (obj) => {
|
|
5
|
+
if (!obj) return undefined;
|
|
6
|
+
|
|
7
|
+
if (Array.isArray(obj)) {
|
|
8
|
+
return obj.flatMap((item) => {
|
|
9
|
+
if (typeof item === "string") {
|
|
10
|
+
try {
|
|
11
|
+
return JSON.parse(item);
|
|
12
|
+
} catch (e) {
|
|
13
|
+
return splitCommaSeparated(item);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return item;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
if (typeof obj === "string") {
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(obj);
|
|
22
|
+
} catch (e) {
|
|
23
|
+
return splitCommaSeparated(obj);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return obj;
|
|
27
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pipedream/whoisfreaks",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Pipedream WhoisFreaks Components",
|
|
5
5
|
"main": "whoisfreaks.app.mjs",
|
|
6
6
|
"keywords": [
|
|
@@ -11,5 +11,8 @@
|
|
|
11
11
|
"author": "Pipedream <support@pipedream.com> (https://pipedream.com/)",
|
|
12
12
|
"publishConfig": {
|
|
13
13
|
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@pipedream/platform": "^3.1.1"
|
|
14
17
|
}
|
|
15
18
|
}
|
package/whoisfreaks.app.mjs
CHANGED
|
@@ -1,11 +1,137 @@
|
|
|
1
|
+
import { axios } from "@pipedream/platform";
|
|
2
|
+
|
|
1
3
|
export default {
|
|
2
4
|
type: "app",
|
|
3
5
|
app: "whoisfreaks",
|
|
4
|
-
propDefinitions: {
|
|
6
|
+
propDefinitions: {
|
|
7
|
+
domainName: {
|
|
8
|
+
type: "string",
|
|
9
|
+
label: "Domain Name",
|
|
10
|
+
description: "The domain name to lookup (e.g. `example.com`)",
|
|
11
|
+
},
|
|
12
|
+
domainNames: {
|
|
13
|
+
type: "string[]",
|
|
14
|
+
label: "Domain Names",
|
|
15
|
+
description: "Domain names to look up (e.g. `example.com`, `google.com`). Add one or more values. Supports up to 100 domains per request."
|
|
16
|
+
},
|
|
17
|
+
ipAddresses: {
|
|
18
|
+
type: "string[]",
|
|
19
|
+
label: "IP Addresses",
|
|
20
|
+
description: "IP addresses to look up. Must be valid IPv4 or IPv6 addresses (e.g. `8.8.8.8`, `1.1.1.1`). Add one or more values. Supports up to 100 IPs per request.",
|
|
21
|
+
optional: true,
|
|
22
|
+
},
|
|
23
|
+
ip: {
|
|
24
|
+
type: "string",
|
|
25
|
+
label: "IP Address",
|
|
26
|
+
description: "The IP address to look up. Must be a valid IPv4 (e.g. `8.8.8.8`) or IPv6 (e.g. `2001:4860:4860::8888`) address.",
|
|
27
|
+
},
|
|
28
|
+
format: {
|
|
29
|
+
type: "string",
|
|
30
|
+
label: "Format",
|
|
31
|
+
description:
|
|
32
|
+
"Two formats are available JSON, XML. If you don't specify the 'format' parameter, the default format will be JSON.",
|
|
33
|
+
options: ["JSON", "XML"],
|
|
34
|
+
default: "JSON",
|
|
35
|
+
optional: true,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
5
38
|
methods: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
39
|
+
_baseUrl() {
|
|
40
|
+
return "https://api.whoisfreaks.com";
|
|
41
|
+
},
|
|
42
|
+
_makeRequest({ $ = this, path, params, ...opts }) {
|
|
43
|
+
return axios($, {
|
|
44
|
+
url: `${this._baseUrl()}${path}`,
|
|
45
|
+
params: {
|
|
46
|
+
...params,
|
|
47
|
+
apiKey: this.$auth.api_key,
|
|
48
|
+
},
|
|
49
|
+
...opts,
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
_makePostRequest({ $ = this, path, params, body, ...opts }) {
|
|
53
|
+
return axios($, {
|
|
54
|
+
url: `${this._baseUrl()}${path}`,
|
|
55
|
+
method: "POST",
|
|
56
|
+
data: body,
|
|
57
|
+
params: {
|
|
58
|
+
...params,
|
|
59
|
+
apiKey: this.$auth.api_key,
|
|
60
|
+
},
|
|
61
|
+
...opts,
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
domainLookup(opts = {}) {
|
|
65
|
+
return this._makeRequest({
|
|
66
|
+
path: "/v1.0/whois",
|
|
67
|
+
...opts,
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
ipLookup(opts = {}) {
|
|
71
|
+
return this._makeRequest({
|
|
72
|
+
path: "/v1.0/ip-whois",
|
|
73
|
+
...opts,
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
lookupDomainAvailability(opts = {}) {
|
|
77
|
+
return this._makeRequest({
|
|
78
|
+
path: "/v1.0/domain/availability",
|
|
79
|
+
...opts,
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
lookupSsl(opts = {}) {
|
|
83
|
+
return this._makeRequest({
|
|
84
|
+
path: "/v1.0/ssl/live",
|
|
85
|
+
...opts,
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
lookupIpGeolocation(opts = {}) {
|
|
89
|
+
return this._makeRequest({
|
|
90
|
+
path: "/v1.0/geolocation",
|
|
91
|
+
...opts,
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
lookupSubDomain(opts = {}) {
|
|
95
|
+
return this._makeRequest({
|
|
96
|
+
path: "/v1.0/subdomains",
|
|
97
|
+
...opts,
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
lookupDomainReputation(opts = {}) {
|
|
101
|
+
return this._makeRequest({
|
|
102
|
+
path: "/v1/domain/security",
|
|
103
|
+
...opts,
|
|
104
|
+
});
|
|
105
|
+
},
|
|
106
|
+
lookupIpReputation(opts = {}) {
|
|
107
|
+
return this._makeRequest({
|
|
108
|
+
path: "/v1.0/security",
|
|
109
|
+
...opts,
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
lookupBulkWhois(opts = {}) {
|
|
113
|
+
return this._makePostRequest({
|
|
114
|
+
path: "/v2.0/bulkwhois/live",
|
|
115
|
+
...opts
|
|
116
|
+
});
|
|
117
|
+
},
|
|
118
|
+
lookupBulkDnsDomain(opts = {}) {
|
|
119
|
+
return this._makePostRequest({
|
|
120
|
+
path: "/v2.0/dns/bulk/live",
|
|
121
|
+
...opts
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
lookupBulkIpGeolocation(opts = {}) {
|
|
125
|
+
return this._makePostRequest({
|
|
126
|
+
path: "/v1.0/geolocation",
|
|
127
|
+
...opts
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
lookupBulkIpReputation(opts = {}) {
|
|
131
|
+
return this._makePostRequest({
|
|
132
|
+
path: "/v1.0/security",
|
|
133
|
+
...opts
|
|
134
|
+
});
|
|
9
135
|
},
|
|
10
136
|
},
|
|
11
|
-
};
|
|
137
|
+
};
|