@pipedream/wappalyzer 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/get-technologies/get-technologies.mjs +86 -0
- package/package.json +4 -1
- package/wappalyzer.app.mjs +27 -4
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
The Wappalyzer API lets you uncover the technology stack of any website. On Pipedream, you can integrate this capability into workflows to automate tech stack detection. Here's what you can do: identify the software used by your competitors, track technology adoption, and get insights into your target market's tech preferences. By leveraging Pipedream's robust platform, you can connect Wappalyzer with other services to create custom workflows that trigger actions based on the tech stack data you collect.
|
|
4
|
+
|
|
5
|
+
# Example Use Cases
|
|
6
|
+
|
|
7
|
+
- **Lead Generation for Web Development Services**: Detect tech stacks of potential leads' websites. If a site uses outdated frameworks, trigger an email through the SendGrid app, offering your services to modernize their web presence.
|
|
8
|
+
|
|
9
|
+
- **Market Research Automation**: Schedule daily checks on top industry websites, capture their tech stacks, and save the data in a Google Sheets spreadsheet for trend analysis and report generation.
|
|
10
|
+
|
|
11
|
+
- **Competitor Monitoring Alert System**: Monitor competitor websites for tech stack changes. Use Pipedream's built-in Cron Scheduler to run the workflow weekly, and if new technologies are detected, post a notification in a Slack channel to keep your team informed.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import wappalyzer from "../../wappalyzer.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "wappalyzer-get-technologies",
|
|
5
|
+
name: "Get Technologies",
|
|
6
|
+
description: "Returns the details of technologies used on a specific URL. [See the documentation](https://www.wappalyzer.com/docs/api/v2/lookup/)",
|
|
7
|
+
version: "0.0.3",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: true,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
ai: "optimized",
|
|
15
|
+
props: {
|
|
16
|
+
wappalyzer,
|
|
17
|
+
urls: {
|
|
18
|
+
type: "string[]",
|
|
19
|
+
label: "URLs",
|
|
20
|
+
description: "Between one and ten website URLs. Example: `https://example.com,https://example.org`. Multiple URLs are not supported with `recursive=false`.",
|
|
21
|
+
},
|
|
22
|
+
live: {
|
|
23
|
+
type: "boolean",
|
|
24
|
+
label: "Live",
|
|
25
|
+
description: "Scan websites in real-time. Defaults to `false` to return cached results from our database (faster and more complete). If no record is found, `live=true` is automatically used instead. Use `recursive=false` to get live results in the same request.",
|
|
26
|
+
optional: true,
|
|
27
|
+
},
|
|
28
|
+
recursive: {
|
|
29
|
+
type: "boolean",
|
|
30
|
+
label: "Recursive",
|
|
31
|
+
description: "Index multiple pages (follows internal website links for increased coverage). Defaults to `true` for best results. If no record is found or `live=true` is used, using `recursive=true` causes the request to be completed asynchronously, meaning technologies will not be included in the initial response and the website is being crawled. To get the results when they become available, use `callback_url` or repeat the request at a later time (free for up to one hour). A crawl can take up to 15 minutes. We recommend using `callback_url` or repeating the request up to three times every five minutes. When using both `live=true` and `recursive=true`, `callback_url` is required and requests cost two credits instead of one.",
|
|
32
|
+
optional: true,
|
|
33
|
+
},
|
|
34
|
+
callbackUrl: {
|
|
35
|
+
type: "string",
|
|
36
|
+
label: "Callback URL",
|
|
37
|
+
description: "When an asynchronous request completes, a POST request is made to the callback URL with the results. A callback URL is an public endpoint hosted on your own server. Example: `https://yourdomain.com/wappalyzer`. Required when using both `live=true` and `recursive=true`.",
|
|
38
|
+
optional: true,
|
|
39
|
+
},
|
|
40
|
+
denoise: {
|
|
41
|
+
type: "boolean",
|
|
42
|
+
label: "Denoise",
|
|
43
|
+
description: "Exclude low confidence results. Defaults to `true`. Setting this to `false` yields more results but is more likely to include false positives.",
|
|
44
|
+
optional: true,
|
|
45
|
+
},
|
|
46
|
+
minAge: {
|
|
47
|
+
type: "integer",
|
|
48
|
+
label: "Min Age",
|
|
49
|
+
description: "Return results that have been verified at least once before `min_age` months ago. Defaults to 0 for most recent results. Use a higher value in combination with `squash=false` and `max_age` for historic results grouped by month (up to 12 months per request).",
|
|
50
|
+
optional: true,
|
|
51
|
+
},
|
|
52
|
+
maxAge: {
|
|
53
|
+
type: "integer",
|
|
54
|
+
label: "Max Age",
|
|
55
|
+
description: "Return results that have been verified at least once in the last `max_age` months. Defaults to 2 for best results. To get the most up-to-date but fewer results, use `max_age=1`. For real-time results, use `live=true` instead. Use a higher value to get more but less recently verified results. These results are more likely to include websites that no longer use the technology. Use a higher value in combination with `squash=false` and optionally `min_age` for historic results grouped by month (up to 12 months per request).",
|
|
56
|
+
optional: true,
|
|
57
|
+
},
|
|
58
|
+
squash: {
|
|
59
|
+
type: "boolean",
|
|
60
|
+
label: "Squash",
|
|
61
|
+
description: "Merge monthly results into a single set. Defaults to `true`. Set to `false` to group results by month.",
|
|
62
|
+
optional: true,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
async run({ $ }) {
|
|
66
|
+
const response = await this.wappalyzer.getTechnologies({
|
|
67
|
+
$,
|
|
68
|
+
params: {
|
|
69
|
+
urls: this.urls.join(),
|
|
70
|
+
live: this.live,
|
|
71
|
+
recursive: this.recursive,
|
|
72
|
+
callback_url: this.callbackUrl,
|
|
73
|
+
denoise: this.denoise,
|
|
74
|
+
min_age: this.minAge,
|
|
75
|
+
max_age: this.maxAge,
|
|
76
|
+
squash: this.squash,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
$.export("$summary", `Successfully retrieved technologies for ${this.urls.length} URL${this.urls.length === 1
|
|
81
|
+
? ""
|
|
82
|
+
: "s"}.`);
|
|
83
|
+
|
|
84
|
+
return response;
|
|
85
|
+
},
|
|
86
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pipedream/wappalyzer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Pipedream Wappalyzer Components",
|
|
5
5
|
"main": "wappalyzer.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": "^1.6.8"
|
|
14
17
|
}
|
|
15
18
|
}
|
package/wappalyzer.app.mjs
CHANGED
|
@@ -1,11 +1,34 @@
|
|
|
1
|
+
import { axios } from "@pipedream/platform";
|
|
2
|
+
|
|
1
3
|
export default {
|
|
2
4
|
type: "app",
|
|
3
5
|
app: "wappalyzer",
|
|
4
6
|
propDefinitions: {},
|
|
5
7
|
methods: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
_baseUrl() {
|
|
9
|
+
return "https://api.wappalyzer.com/v2";
|
|
10
|
+
},
|
|
11
|
+
_headers() {
|
|
12
|
+
return {
|
|
13
|
+
"x-api-key": `${this.$auth.api_key}`,
|
|
14
|
+
};
|
|
15
|
+
},
|
|
16
|
+
_makeRequest({
|
|
17
|
+
$ = this,
|
|
18
|
+
path,
|
|
19
|
+
...args
|
|
20
|
+
}) {
|
|
21
|
+
return axios($, {
|
|
22
|
+
url: `${this._baseUrl()}${path}`,
|
|
23
|
+
headers: this._headers(),
|
|
24
|
+
...args,
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
getTechnologies(args = {}) {
|
|
28
|
+
return this._makeRequest({
|
|
29
|
+
path: "/lookup",
|
|
30
|
+
...args,
|
|
31
|
+
});
|
|
9
32
|
},
|
|
10
33
|
},
|
|
11
|
-
};
|
|
34
|
+
};
|