guardvibe 0.6.4 → 0.7.0

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 (58) hide show
  1. package/build/data/rules/auth.d.ts +3 -0
  2. package/build/data/rules/auth.d.ts.map +1 -0
  3. package/build/data/rules/auth.js +100 -0
  4. package/build/data/rules/auth.js.map +1 -0
  5. package/build/data/rules/database.d.ts +3 -0
  6. package/build/data/rules/database.d.ts.map +1 -0
  7. package/build/data/rules/database.js +100 -0
  8. package/build/data/rules/database.js.map +1 -0
  9. package/build/data/rules/deployment.d.ts +3 -0
  10. package/build/data/rules/deployment.d.ts.map +1 -0
  11. package/build/data/rules/deployment.js +192 -0
  12. package/build/data/rules/deployment.js.map +1 -0
  13. package/build/data/rules/index.d.ts.map +1 -1
  14. package/build/data/rules/index.js +8 -0
  15. package/build/data/rules/index.js.map +1 -1
  16. package/build/data/rules/nextjs.d.ts +3 -0
  17. package/build/data/rules/nextjs.d.ts.map +1 -0
  18. package/build/data/rules/nextjs.js +148 -0
  19. package/build/data/rules/nextjs.js.map +1 -0
  20. package/build/index.js +32 -15
  21. package/build/index.js.map +1 -1
  22. package/build/tools/check-code.d.ts +2 -1
  23. package/build/tools/check-code.d.ts.map +1 -1
  24. package/build/tools/check-code.js +22 -1
  25. package/build/tools/check-code.js.map +1 -1
  26. package/build/tools/check-package-health.d.ts +29 -0
  27. package/build/tools/check-package-health.d.ts.map +1 -0
  28. package/build/tools/check-package-health.js +142 -0
  29. package/build/tools/check-package-health.js.map +1 -0
  30. package/build/tools/check-project.d.ts +1 -1
  31. package/build/tools/check-project.d.ts.map +1 -1
  32. package/build/tools/check-project.js +20 -2
  33. package/build/tools/check-project.js.map +1 -1
  34. package/build/tools/compliance-report.d.ts +1 -1
  35. package/build/tools/compliance-report.d.ts.map +1 -1
  36. package/build/tools/compliance-report.js +26 -2
  37. package/build/tools/compliance-report.js.map +1 -1
  38. package/build/tools/scan-dependencies.d.ts +1 -1
  39. package/build/tools/scan-dependencies.d.ts.map +1 -1
  40. package/build/tools/scan-dependencies.js +25 -2
  41. package/build/tools/scan-dependencies.js.map +1 -1
  42. package/build/tools/scan-directory.d.ts +1 -1
  43. package/build/tools/scan-directory.d.ts.map +1 -1
  44. package/build/tools/scan-directory.js +26 -3
  45. package/build/tools/scan-directory.js.map +1 -1
  46. package/build/tools/scan-secrets.d.ts +1 -1
  47. package/build/tools/scan-secrets.d.ts.map +1 -1
  48. package/build/tools/scan-secrets.js +10 -1
  49. package/build/tools/scan-secrets.js.map +1 -1
  50. package/build/tools/scan-staged.d.ts +1 -1
  51. package/build/tools/scan-staged.d.ts.map +1 -1
  52. package/build/tools/scan-staged.js +20 -2
  53. package/build/tools/scan-staged.js.map +1 -1
  54. package/build/utils/typosquat.d.ts +9 -0
  55. package/build/utils/typosquat.d.ts.map +1 -0
  56. package/build/utils/typosquat.js +101 -0
  57. package/build/utils/typosquat.js.map +1 -0
  58. package/package.json +3 -3
@@ -0,0 +1,101 @@
1
+ // Popular npm packages for typosquat detection
2
+ export const POPULAR_PACKAGES = [
3
+ // React ecosystem
4
+ "react", "react-dom", "react-router", "react-router-dom", "react-hook-form",
5
+ "@tanstack/react-query", "react-icons", "react-select",
6
+ // Next.js
7
+ "next", "@next/font", "@next/mdx",
8
+ // Vue / Svelte / Angular
9
+ "vue", "svelte", "nuxt", "@angular/core",
10
+ // State management
11
+ "zustand", "jotai", "redux", "@reduxjs/toolkit", "mobx", "valtio",
12
+ // Styling
13
+ "tailwindcss", "postcss", "autoprefixer", "sass", "styled-components",
14
+ "@emotion/react", "@emotion/styled", "clsx", "tailwind-merge",
15
+ // UI frameworks
16
+ "@radix-ui/react-dialog", "@radix-ui/react-popover", "@radix-ui/react-select",
17
+ "@radix-ui/react-tooltip", "@radix-ui/react-dropdown-menu",
18
+ "class-variance-authority", "lucide-react",
19
+ // Build tools
20
+ "typescript", "vite", "esbuild", "webpack", "turbo", "tsup", "tsx",
21
+ // Testing
22
+ "vitest", "jest", "@testing-library/react", "playwright", "cypress",
23
+ // HTTP / API
24
+ "axios", "ky", "got", "node-fetch", "undici",
25
+ // Validation
26
+ "zod", "yup", "joi", "valibot", "ajv",
27
+ // Database / ORM
28
+ "prisma", "@prisma/client", "drizzle-orm", "drizzle-kit",
29
+ "mongoose", "typeorm", "knex", "pg", "mysql2", "better-sqlite3",
30
+ // Auth
31
+ "@clerk/nextjs", "@clerk/clerk-sdk-node", "next-auth", "@auth/core",
32
+ "passport", "jsonwebtoken", "bcrypt", "bcryptjs",
33
+ // Supabase
34
+ "@supabase/supabase-js", "@supabase/ssr",
35
+ // Payments
36
+ "stripe", "@stripe/stripe-js",
37
+ // Email
38
+ "resend", "nodemailer", "@sendgrid/mail",
39
+ // AI
40
+ "ai", "@ai-sdk/react", "@ai-sdk/openai", "@ai-sdk/anthropic", "@ai-sdk/google",
41
+ "openai", "@anthropic-ai/sdk",
42
+ // Server frameworks
43
+ "express", "fastify", "hono", "koa",
44
+ // Utilities
45
+ "lodash", "lodash-es", "date-fns", "dayjs", "uuid", "nanoid",
46
+ "dotenv", "chalk", "commander", "inquirer", "ora", "execa",
47
+ "fs-extra", "glob", "minimatch", "semver", "debug",
48
+ // File handling
49
+ "sharp", "multer", "formidable",
50
+ // Logging / monitoring
51
+ "winston", "pino", "@sentry/nextjs",
52
+ // MCP
53
+ "@modelcontextprotocol/sdk",
54
+ ];
55
+ export function levenshtein(a, b) {
56
+ const m = a.length;
57
+ const n = b.length;
58
+ const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
59
+ for (let i = 0; i <= m; i++)
60
+ dp[i][0] = i;
61
+ for (let j = 0; j <= n; j++)
62
+ dp[0][j] = j;
63
+ for (let i = 1; i <= m; i++) {
64
+ for (let j = 1; j <= n; j++) {
65
+ if (a[i - 1] === b[j - 1]) {
66
+ dp[i][j] = dp[i - 1][j - 1];
67
+ }
68
+ else {
69
+ dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
70
+ }
71
+ }
72
+ }
73
+ return dp[m][n];
74
+ }
75
+ export function detectTyposquat(name) {
76
+ const lower = name.toLowerCase();
77
+ // Exact match = not a typosquat
78
+ if (POPULAR_PACKAGES.includes(lower))
79
+ return null;
80
+ // Strip scope for comparison
81
+ const bareName = lower.startsWith("@") ? lower.split("/").pop() ?? lower : lower;
82
+ let bestMatch = null;
83
+ let bestDistance = Infinity;
84
+ for (const popular of POPULAR_PACKAGES) {
85
+ const popularBare = popular.startsWith("@") ? popular.split("/").pop() ?? popular : popular;
86
+ // Only compare if lengths are within 2 chars
87
+ if (Math.abs(bareName.length - popularBare.length) > 2)
88
+ continue;
89
+ const dist = levenshtein(bareName, popularBare);
90
+ if (dist > 0 && dist <= 2 && dist < bestDistance) {
91
+ bestDistance = dist;
92
+ bestMatch = popular;
93
+ }
94
+ }
95
+ if (!bestMatch)
96
+ return null;
97
+ // Confidence: distance 1 = 0.9, distance 2 = 0.7
98
+ const confidence = bestDistance === 1 ? 0.9 : 0.7;
99
+ return { similarTo: bestMatch, confidence };
100
+ }
101
+ //# sourceMappingURL=typosquat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typosquat.js","sourceRoot":"","sources":["../../src/utils/typosquat.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "guardvibe",
3
- "version": "0.6.4",
3
+ "version": "0.7.0",
4
4
  "description": "Local-first security MCP for vibe coding. Focused on TypeScript, JavaScript, Python, Go, Dockerfile, YAML, and Terraform.",
5
5
  "type": "module",
6
6
  "bin": {
7
- "guardvibe": "./build/index.js",
8
- "guardvibe-init": "./build/cli.js"
7
+ "guardvibe": "build/index.js",
8
+ "guardvibe-init": "build/cli.js"
9
9
  },
10
10
  "files": [
11
11
  "build"