stack-analyze 1.1.6 → 1.1.9

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.
@@ -1,6 +1,5 @@
1
1
  // modules
2
2
  const axios = require("axios").default;
3
- const CoinGecko = require("coingecko-api");
4
3
  const {
5
4
  cpu,
6
5
  mem,
@@ -10,13 +9,9 @@ const {
10
9
  bios
11
10
  } = require("systeminformation");
12
11
  const Wappalyzer = require("wappalyzer");
12
+ const { load } = require("cheerio");
13
13
 
14
- // init coingecko api
15
- const CoinGeckoClient = new CoinGecko();
16
-
17
- // functions
18
-
19
- const animeSearch = async (query) => {
14
+ const animeSearch = async ({ query, results }) => {
20
15
  /* error manager */
21
16
  try {
22
17
  // call api
@@ -27,12 +22,12 @@ const animeSearch = async (query) => {
27
22
  }
28
23
  });
29
24
 
30
- return data.results;
25
+ results(data.results);
31
26
 
32
- } catch (err) { return err; }
27
+ } catch (err) { results(err); }
33
28
  };
34
29
 
35
- const bitlyInfo = async (link, token) => {
30
+ const bitlyInfo = async ({ link, token, results }) => {
36
31
  try {
37
32
  const { data } = await axios.post(
38
33
  "https://api-ssl.bitly.com/v4/expand",
@@ -47,37 +42,42 @@ const bitlyInfo = async (link, token) => {
47
42
  }
48
43
  );
49
44
 
50
- return data;
51
- } catch (err) { return err; }
45
+ results(data);
46
+ } catch (err) { results(err); }
52
47
  };
53
48
 
54
- /*
49
+ /**
55
50
  *
56
51
  * @descripiton call the crypto market list
52
+ * @param {function(any): void} callback
57
53
  * @returns { Promise<void> } - return results search
58
- *
59
54
  */
60
- const cryptoMarket = async () => {
55
+ const cryptoMarket = async (callback) => {
61
56
  try {
62
57
  // start crypto
63
- const coinData = await CoinGeckoClient.coins.markets({
64
- per_page: 10
65
- });
58
+ const { data } = await axios.get(
59
+ "https://api.coingecko.com/api/v3/coins/markets", {
60
+ params: {
61
+ vs_currency: "usd",
62
+ per_page: 10
63
+ }
64
+ }
65
+ );
66
66
 
67
67
  // map coinData
68
- return coinData.data;
69
- } catch (err) { return err; }
68
+ callback(data);
69
+ } catch (err) { callback(err); }
70
70
  };
71
71
 
72
- async function githubInfo(user) {
72
+ async function githubInfo({ user, results }) {
73
73
  try {
74
74
  const { data } = await axios.get(`https://api.github.com/users/${user}`);
75
75
 
76
- return data;
77
- } catch (err) { return err; }
76
+ results(data);
77
+ } catch (err) { results(err); }
78
78
  }
79
79
 
80
- async function cpuInfo() {
80
+ async function cpuInfo(callback) {
81
81
  try {
82
82
  const {
83
83
  manufacturer,
@@ -92,7 +92,7 @@ async function cpuInfo() {
92
92
  } = await cpu();
93
93
 
94
94
  // show results
95
- return {
95
+ callback({
96
96
  manufacturer,
97
97
  brand,
98
98
  speed,
@@ -102,11 +102,11 @@ async function cpuInfo() {
102
102
  vendor,
103
103
  family,
104
104
  model
105
- };
106
- } catch (err) { return err; }
105
+ });
106
+ } catch (err) { callback(err); }
107
107
  }
108
108
 
109
- async function ramMemInfo() {
109
+ async function ramMemInfo(callback) {
110
110
  try {
111
111
  const {
112
112
  total,
@@ -117,17 +117,17 @@ async function ramMemInfo() {
117
117
  } = await mem();
118
118
 
119
119
  // show results
120
- return {
120
+ callback({
121
121
  total_mem: `${(total / 1073741824).toFixed(2)} GB`,
122
122
  free_mem: `${(free / 1073741824).toFixed(2)} GB`,
123
123
  used_mem: `${(used / 1073741824).toFixed(2)} GB`,
124
124
  active_mem: `${(active / 1073741824).toFixed(2)} GB`,
125
125
  available_mem: `${(available / 1073741824).toFixed(2)} GB`
126
- };
127
- } catch (err) { return err; }
126
+ });
127
+ } catch (err) { callback(err); }
128
128
  }
129
129
 
130
- async function osDetail() {
130
+ async function osDetail(callback) {
131
131
  try {
132
132
  const {
133
133
  hostname,
@@ -141,7 +141,7 @@ async function osDetail() {
141
141
  } = await osInfo();
142
142
 
143
143
  // show results
144
- return {
144
+ callback({
145
145
  hostname,
146
146
  platform,
147
147
  distro,
@@ -150,11 +150,11 @@ async function osDetail() {
150
150
  arch,
151
151
  serial,
152
152
  uefi
153
- };
154
- } catch (err) { return err; }
153
+ });
154
+ } catch (err) { callback(err); }
155
155
  }
156
156
 
157
- async function diskInfo() {
157
+ async function diskInfo(callback) {
158
158
  try {
159
159
  const disks = await diskLayout();
160
160
 
@@ -172,12 +172,12 @@ async function diskInfo() {
172
172
  interfaceType
173
173
  }));
174
174
 
175
- return disksList;
175
+ callback(disksList);
176
176
 
177
- } catch (err) { return err; }
177
+ } catch (err) { callback(err); }
178
178
  }
179
179
 
180
- async function controllerInfo() {
180
+ async function controllerInfo(callback) {
181
181
  try {
182
182
  const { controllers } = await graphics();
183
183
 
@@ -193,11 +193,11 @@ async function controllerInfo() {
193
193
  : `${(vram / 1024).toFixed(2)} GB`
194
194
  }));
195
195
 
196
- return controllersList;
197
- } catch (err) { return err; }
196
+ callback(controllersList);
197
+ } catch (err) { callback(err); }
198
198
  }
199
199
 
200
- async function displayInfo() {
200
+ async function displayInfo(callback) {
201
201
  try {
202
202
  const { displays } = await graphics();
203
203
 
@@ -215,11 +215,11 @@ async function displayInfo() {
215
215
  resolutionY
216
216
  }));
217
217
 
218
- return displayList;
219
- } catch (err) { return err; }
218
+ callback(displayList);
219
+ } catch (err) { callback(err); }
220
220
  }
221
221
 
222
- async function biosInfo() {
222
+ async function biosInfo(callback) {
223
223
  try {
224
224
  const {
225
225
  releaseDate,
@@ -228,11 +228,11 @@ async function biosInfo() {
228
228
  version
229
229
  } = await bios();
230
230
 
231
- return { releaseDate, vendor, revision, version };
232
- } catch (err) { return err; }
231
+ callback({ releaseDate, vendor, revision, version });
232
+ } catch (err) { callback(err); }
233
233
  }
234
234
 
235
- const movieDB = async (api_key, query) => {
235
+ const movieDB = async ({ api_key, query, results }) => {
236
236
  try {
237
237
  const { data } = await axios.get("https://api.themoviedb.org/3/search/movie", {
238
238
  params: {
@@ -265,11 +265,11 @@ const movieDB = async (api_key, query) => {
265
265
  })
266
266
  .filter(({ release_date }) => release_date !== undefined && release_date !== "");
267
267
 
268
- return movieData;
269
- } catch (err) { return err; }
268
+ results(movieData);
269
+ } catch (err) { results(err); }
270
270
  };
271
271
 
272
- async function multipleStack(urls) {
272
+ async function multipleStack({ urls, results }) {
273
273
  let result;
274
274
  const wappalyzer = new Wappalyzer();
275
275
  try {
@@ -285,10 +285,10 @@ async function multipleStack(urls) {
285
285
  );
286
286
  } catch (err) { result = err; }
287
287
  await wappalyzer.destroy();
288
- return result;
288
+ results(result);
289
289
  }
290
290
 
291
- const pageSpeed = async (url) => {
291
+ const pageSpeed = async ({ url, results }) => {
292
292
  try {
293
293
  const resMobile = await axios.get("https://www.googleapis.com/pagespeedonline/v5/runPagespeed", {
294
294
  params: {
@@ -310,11 +310,11 @@ const pageSpeed = async (url) => {
310
310
  const mobile = Math.round(resMobile.data.lighthouseResult.categories.performance.score * 100);
311
311
  const desktop = Math.round(resDesktop.data.lighthouseResult.categories.performance.score * 100);
312
312
 
313
- return {mobile, desktop};
314
- } catch (err) { return err; }
313
+ results({ mobile, desktop });
314
+ } catch (err) { results(err); }
315
315
  };
316
316
 
317
- async function singleStack(url) {
317
+ async function singleStack({ url, results }) {
318
318
  const wappalyzer = await new Wappalyzer;
319
319
 
320
320
  let result;
@@ -332,15 +332,155 @@ async function singleStack(url) {
332
332
  techWebsite: website,
333
333
  techCategories: categories.map(({ name }) => name).join(", ")
334
334
  }));
335
- } catch (err) { result = err; }
335
+ } catch (err) { results(err); }
336
336
 
337
337
  await wappalyzer.destroy();
338
- return result;
338
+ results(result);
339
+ }
340
+
341
+ async function twitchInfo({ query, token, clientID, results }) {
342
+ try {
343
+ const { data: twitchData } = await axios.get(`https://api.twitch.tv/helix/users?login=${query}`,
344
+ {
345
+ headers: {
346
+ Authorization: `Bearer ${token}`,
347
+ "Client-Id": clientID
348
+ }
349
+ });
350
+
351
+ results(twitchData.data);
352
+ } catch (err) { results(err); }
339
353
  }
340
354
 
355
+ function scrape(url) {
356
+ let $;
357
+
358
+ const scraping = axios.create({
359
+ baseURL: url
360
+ });
361
+
362
+ const title = async (callback) => {
363
+ try {
364
+ const { data } = await scraping.get("");
365
+ $ = load(data);
366
+
367
+ callback($("title").text());
368
+ } catch (err) { console.error(colors.red(err.message)); }
369
+ };
370
+
371
+ const images = async (callback) => {
372
+ try {
373
+ const { data } = await scraping.get("");
374
+ $ = load(data);
375
+
376
+ const imgs = $("img").map((i, el) => ({
377
+ imagePath: $(el).attr("src"),
378
+ imageTitle: $(el).attr("alt")
379
+ })).toArray();
380
+
381
+ callback(imgs);
382
+ } catch (err) { console.error(colors.red(err.message)); }
383
+ };
384
+
385
+ const metadata = async (callback) => {
386
+ try {
387
+ const { data } = await scraping.get("");
388
+ $ = load(data);
389
+
390
+ const metadataList = $("meta").map((i, el) => ({
391
+ metaInfo: $(el).attr("name"),
392
+ metaContent: $(el).attr("content")
393
+ })).toArray()
394
+ .filter(({ metaInfo }) => metaInfo !== undefined);
395
+
396
+ callback(metadataList);
397
+ } catch (err) { console.error(colors.red(err.message)); }
398
+ };
399
+
400
+ const headings = async (callback) => {
401
+ try {
402
+ const { data } = await scraping.get("");
403
+ $ = load(data);
404
+
405
+ const headingList = $("h1, h2, h3, h4, h5, h6").map((i, el) => ({
406
+ headingTag: $(el).prop("tagName"),
407
+ headingText: $(el).text()
408
+ })).toArray();
409
+
410
+ callback(headingList);
411
+ } catch (err) { console.error(colors.red(err.message)); }
412
+ };
413
+
414
+ const table_heading = async (callback) => {
415
+ try {
416
+ const { data } = await scraping.get("");
417
+ $ = load(data);
418
+
419
+ const tableHeadList = $("th").map((i, el) => ({
420
+ headingRow: i,
421
+ text: $(el).text()
422
+ })).toArray();
423
+
424
+ callback(tableHeadList);
425
+ } catch (err) { console.error(colors.red(err.message)); }
426
+ };
427
+
428
+ const table_data = async (callback) => {
429
+ try {
430
+ const { data } = await scraping.get("");
431
+ $ = load(data);
432
+
433
+ const tableColumnList = $("td").map((i, el) => $(el).text()).toArray();
434
+
435
+ callback(tableColumnList);
436
+ } catch (err) { console.error(colors.red(err.message)); }
437
+ };
438
+
439
+
440
+ const links = async (callback) => {
441
+ try {
442
+ const { data } = await scraping.get("");
443
+ $ = load(data);
444
+
445
+ const linkList = $("a").map((i, el) => ({
446
+ url: $(el).attr("href"),
447
+ text: $(el).text()
448
+ })).toArray()
449
+ .filter(({ url }) => url.indexOf("#") !== 0);
450
+
451
+ callback(linkList);
452
+ } catch (err) { console.error(colors.red(err.message)); }
453
+ };
454
+
455
+ const cites = async (callback) => {
456
+ try {
457
+ const { data } = await scraping.get("");
458
+ $ = load(data);
459
+
460
+ const citeList = $("q, blockquote").map((i, el) => ({
461
+ citeTag: $(el).prop("tagName"),
462
+ citeLink: $(el).attr("cite"),
463
+ citeText: $(el).text()
464
+ })).toArray();
465
+
466
+ callback(citeList);
467
+ } catch (err) { console.error(colors.red(err.message)); }
468
+ };
469
+
470
+ return {
471
+ title,
472
+ images,
473
+ metadata,
474
+ headings,
475
+ table_heading,
476
+ table_data,
477
+ links,
478
+ cites
479
+ };
480
+ }
341
481
 
342
482
  // exports
343
- exports = {
483
+ module.exports = {
344
484
  animeSearch,
345
485
  bitlyInfo,
346
486
  cryptoMarket,
@@ -355,5 +495,7 @@ exports = {
355
495
  movieDB,
356
496
  multipleStack,
357
497
  pageSpeed,
358
- singleStack
498
+ singleStack,
499
+ twitchInfo,
500
+ scrape
359
501
  };