stack-analyze 1.2.4 → 1.2.5

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/index.cjs DELETED
@@ -1,487 +0,0 @@
1
- // modules
2
- const axios = require("axios").default;
3
- const {
4
- cpu,
5
- mem,
6
- osInfo,
7
- diskLayout,
8
- graphics,
9
- bios
10
- } = require("systeminformation");
11
- const Wappalyzer = require("wappalyzer");
12
- const cheerio = require("cheerio");
13
-
14
- const gigabyteConvert = (size, base=1073741824) => (size / base).toFixed(2);
15
-
16
- const wappalyzer = new Wappalyzer();
17
-
18
- const pagespeedApi = async (url, strategy) => await axios.get("https://www.googleapis.com/pagespeedonline/v5/runPagespeed", {
19
- params: {
20
- url,
21
- key: "AIzaSyBEDaW4FxSZ2s1vz5CdD5Ai6PGZGdAzij0",
22
- strategy
23
- }
24
- });
25
-
26
- const animeSearch = async ({ query, results, failed }) => {
27
- /* error manager */
28
- try {
29
- // call api
30
- const { data } = await axios.get("https://api.jikan.moe/v/anime", {
31
- params: { q: query }
32
- });
33
-
34
- results(data.results);
35
-
36
- } catch (err) { failed(err); }
37
- };
38
-
39
- const bitlyInfo = async ({ link, token, results, failed }) => {
40
- try {
41
- const { data } = await axios.post(
42
- "https://api-ssl.bitly.com/v4/expand",
43
- { bitlink_id: link },
44
- {
45
- headers: {
46
- Authorization: `Bearer ${token}`,
47
- "Content-Type": "application/json"
48
- }
49
- }
50
- );
51
-
52
- results(data);
53
- } catch (err) { failed(err); }
54
- };
55
-
56
- const cryptoMarket = async ({results, failed}) => {
57
- try {
58
- // start crypto
59
- const { data } = await axios.get(
60
- "https://api.coingecko.com/api/v3/coins/markets", {
61
- params: {
62
- vs_currency: "usd",
63
- per_page: 10
64
- }
65
- }
66
- );
67
-
68
- // map coinData
69
- results(data);
70
- } catch (err) { failed(err); }
71
- };
72
-
73
- async function githubInfo({ user, results, failed }) {
74
- try {
75
- const { data } = await axios.get(`https://api.github.com/users/${user}`);
76
-
77
- results(data);
78
- } catch (err) { failed(err); }
79
- }
80
-
81
- async function cpuInfo(callback) {
82
- try {
83
- const {
84
- manufacturer,
85
- brand,
86
- speed,
87
- cores,
88
- physicalCores,
89
- processors,
90
- vendor,
91
- family,
92
- model
93
- } = await cpu();
94
-
95
- // show results
96
- callback({
97
- manufacturer,
98
- brand,
99
- speed,
100
- cores,
101
- physicalCores,
102
- processors,
103
- vendor,
104
- family,
105
- model
106
- });
107
- } catch (err) { callback(err); }
108
- }
109
-
110
- async function ramMemInfo(callback) {
111
- try {
112
- const {
113
- total,
114
- free,
115
- used,
116
- active,
117
- available
118
- } = await mem();
119
-
120
- // show results
121
- callback({
122
- total_mem: `${gigabyteConvert(total)} GB`,
123
- free_mem: `${gigabyteConvert(free)} GB`,
124
- used_mem: `${gigabyteConvert(used)} GB`,
125
- active_mem: `${gigabyteConvert(active)} GB`,
126
- available_mem: `${gigabyteConvert(available)} GB`
127
- });
128
- } catch (err) { callback(err); }
129
- }
130
-
131
- async function osDetail(callback) {
132
- try {
133
- const {
134
- hostname,
135
- platform,
136
- distro,
137
- release,
138
- kernel,
139
- arch,
140
- serial,
141
- uefi
142
- } = await osInfo();
143
-
144
- // show results
145
- callback({
146
- hostname,
147
- platform,
148
- distro,
149
- release,
150
- kernel,
151
- arch,
152
- serial,
153
- uefi
154
- });
155
- } catch (err) { callback(err); }
156
- }
157
-
158
- async function diskInfo(callback) {
159
- try {
160
- const disks = await diskLayout();
161
-
162
- const disksList = disks.map(({
163
- type,
164
- name,
165
- vendor,
166
- size,
167
- interfaceType
168
- }) => ({
169
- type,
170
- name,
171
- vendor,
172
- diskSize: `${gigabyteConvert(size)} GB`,
173
- interfaceType
174
- }));
175
-
176
- callback(disksList);
177
-
178
- } catch (err) { callback(err); }
179
- }
180
-
181
- async function controllerInfo(callback) {
182
- try {
183
- const { controllers } = await graphics();
184
-
185
- const controllersList = controllers.map(({
186
- model,
187
- vendor,
188
- vram
189
- }) => ({
190
- model,
191
- vendor,
192
- vramSize: vram < 1024
193
- ? `${vram} MB`
194
- : `${gigabyteConvert(vram, 1024)} GB`
195
- }));
196
-
197
- callback(controllersList);
198
- } catch (err) { callback(err); }
199
- }
200
-
201
- async function displayInfo(callback) {
202
- try {
203
- const { displays } = await graphics();
204
-
205
- const displayList = displays.map(({
206
- model,
207
- main,
208
- connection,
209
- resolutionX,
210
- resolutionY
211
- }) => ({
212
- model,
213
- main,
214
- connection,
215
- resolutionX,
216
- resolutionY
217
- }));
218
-
219
- callback(displayList);
220
- } catch (err) { callback(err); }
221
- }
222
-
223
- async function biosInfo(callback) {
224
- try {
225
- const {
226
- releaseDate,
227
- vendor,
228
- revision,
229
- version
230
- } = await bios();
231
-
232
- callback({ releaseDate, vendor, revision, version });
233
- } catch (err) { callback(err); }
234
- }
235
-
236
- const movieDB = async ({ api_key, query, results, failed }) => {
237
- try {
238
- const { data } = await axios.get("https://api.themoviedb.org/3/search/movie", {
239
- params: { api_key, query }
240
- });
241
-
242
- const movieData = data.results
243
- .map(({
244
- title,
245
- original_language,
246
- popularity,
247
- vote_average,
248
- release_date
249
- }) => ({
250
- title,
251
- original_language,
252
- popularity,
253
- vote_average,
254
- release_date
255
- }))
256
- .sort((x, y) => {
257
- // date values
258
- const primaryDate = new Date(x.release_date);
259
- const secondaryDate = new Date(y.release_date);
260
-
261
- return primaryDate.getTime() - secondaryDate.getTime();
262
- })
263
- .filter((data) => data?.release_date);
264
-
265
- results(movieData);
266
- } catch (err) { failed(err); }
267
- };
268
-
269
- async function multipleStack({ urls, results, failed }) {
270
- let result;
271
- try {
272
- await wappalyzer.init();
273
- result = await Promise.all(
274
- urls.map(async (url) => {
275
- const { technologies } = await wappalyzer.open(url).analyze();
276
- return {
277
- url,
278
- technologies
279
- };
280
- })
281
- );
282
- results(result);
283
- } catch (err) { failed(err); }
284
- await wappalyzer.destroy();
285
- }
286
-
287
- const pageSpeed = async ({ url, results, failed }) => {
288
- try {
289
- const resMobile = await pagespeedApi(url, "mobile");
290
-
291
- const resDesktop = await pagespeedApi(url, "desktop");
292
-
293
- // extract results
294
- const mobile = Math.round(resMobile.data.lighthouseResult.categories.performance.score * 100);
295
- const desktop = Math.round(resDesktop.data.lighthouseResult.categories.performance.score * 100);
296
-
297
- results({ mobile, desktop });
298
- } catch (err) { failed(err); }
299
- };
300
-
301
- async function singleStack({ url, results, failed }) {
302
- let result;
303
-
304
- try {
305
- await wappalyzer.init();
306
-
307
- const { technologies } = await wappalyzer.open(url).analyze();
308
-
309
- result = technologies.map(({
310
- name,
311
- website,
312
- categories
313
- }) => ({
314
- techName: name,
315
- techWebsite: website,
316
- techCategories: categories.map(({ name }) => name).join(", ")
317
- }));
318
- results(result);
319
- } catch (err) { failed(err); }
320
-
321
- await wappalyzer.destroy();
322
- }
323
-
324
- async function twitchInfo({ query, token, clientID, results, failed }) {
325
- try {
326
- const { data: twitchData } = await axios.get("https://api.twitch.tv/helix/users",
327
- {
328
- params: { login: query },
329
- headers: {
330
- Authorization: `Bearer ${token}`,
331
- "Client-Id": clientID
332
- }
333
- });
334
-
335
- results(twitchData.data);
336
- } catch (err) { failed(err); }
337
- }
338
-
339
- async function scrape({url, options, results, failed}) {
340
- let scrapingResult;
341
-
342
- try {
343
- const { data } = await axios.get(url);
344
- const $ = cheerio.load(data);
345
-
346
- const scraping = {
347
- title() {
348
- results($("title").text());
349
- },
350
- images() {
351
- const imageList = $("img").map((i, el) => ({
352
- imagePath: $(el).attr("src"),
353
- imageTitle: $(el).attr("alt")
354
- })).toArray();
355
-
356
- scrapingResult = imageList.length === 0
357
- ? "no found images"
358
- : imageList;
359
-
360
- results(scrapingResult);
361
- },
362
- metadata() {
363
- const metadataList = $("meta").map((i, el) => ({
364
- metaInfo: $(el).attr("name"),
365
- metaContent: $(el).attr("content")
366
- })).toArray()
367
- .filter((data) => data?.metaInfo);
368
-
369
- results(metadataList);
370
- },
371
- headings() {
372
- const headingList = $("h1, h2, h3, h4, h5, h6").map((i, el) => ({
373
- headingTag: $(el).prop("tagName"),
374
- headingText: $(el).text()
375
- })).toArray();
376
-
377
- results(headingList);
378
- },
379
- tableHead() {
380
- const tableHeadList = $("th").map((i, el) => ({
381
- headingRow: i,
382
- text: $(el).text()
383
- })).toArray();
384
-
385
- scrapingResult = tableHeadList.length === 0
386
- ? "no found th tags" : tableHeadList;
387
-
388
- results(scrapingResult);
389
- },
390
- tableData() {
391
- const tableColumnList = $("td").map((i, el) => ({
392
- tableRow: i + 1,
393
- tableData: $(el).text(),
394
- })).toArray();
395
-
396
- scrapingResult = tableColumnList.length === 0
397
- ? "no found td tags" : tableColumnList;
398
-
399
- results(scrapingResult);
400
- },
401
- links() {
402
- const linkList = $("a").map((i, el) => ({
403
- url: $(el).attr("href"),
404
- text: $(el).text()
405
- })).toArray()
406
- .filter(({ url }) => url.indexOf("#") !== 0);
407
-
408
- results(linkList);
409
- },
410
- cites() {
411
- const citeList = $("q, blockquote").map((i, el) => ({
412
- citeTag: $(el).prop("tagName"),
413
- citeLink: $(el).attr("cite"),
414
- citeText: $(el).text()
415
- })).toArray();
416
-
417
- scrapingResult = citeList.length === 0
418
- ? "no found q and/or blockquote tags" : citeList;
419
-
420
- results(scrapingResult);
421
- }
422
- };
423
-
424
- scraping[options]();
425
- } catch (err) {
426
- failed(err.message);
427
- }
428
- }
429
-
430
- const password = () => {
431
- const chars = "0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ";
432
-
433
- // blank password var
434
- let password = "";
435
-
436
- // loop generate chars
437
- for(let i = 0; i < 12; i++) {
438
- const randomNumber = Math.floor(Math.random() * chars.length);
439
-
440
- password += chars.substring(randomNumber, randomNumber + 1);
441
- }
442
-
443
- return password;
444
- };
445
-
446
- const bundlephobia = async (pkg) {
447
- try {
448
- const { data } = await axios.get("https://bundlephobia.com/api/size", {
449
- params: { package: pkg }
450
- });
451
-
452
- console.table({
453
- module_name: data.name,
454
- module_version: data.version,
455
- module_repo: data.repository,
456
- module_size: kilobyteConvert(data.size),
457
- module_gzip: kilobyteConvert(data.gzip),
458
- });
459
-
460
- stackSave(`${pkg}-pkg-info.json`, JSON.stringify(data, null, 2));
461
- } catch (err) {
462
- console.error(colors.red(err.message));
463
- }
464
- };
465
-
466
- // exports
467
- module.exports = {
468
- animeSearch,
469
- bitlyInfo,
470
- cryptoMarket,
471
- githubInfo,
472
- controllerInfo,
473
- osDetail,
474
- diskInfo,
475
- displayInfo,
476
- biosInfo,
477
- cpuInfo,
478
- ramMemInfo,
479
- movieDB,
480
- multipleStack,
481
- pageSpeed,
482
- singleStack,
483
- twitchInfo,
484
- scrape,
485
- password,
486
- bundlephobia
487
- };