stack-analyze 1.2.4 → 1.2.6

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