@secr/cli 0.1.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 (105) hide show
  1. package/README.md +64 -0
  2. package/dist/commands/completion.d.ts +3 -0
  3. package/dist/commands/completion.d.ts.map +1 -0
  4. package/dist/commands/completion.js +51 -0
  5. package/dist/commands/completion.js.map +1 -0
  6. package/dist/commands/config.d.ts +3 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +66 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/delete.d.ts +3 -0
  11. package/dist/commands/delete.d.ts.map +1 -0
  12. package/dist/commands/delete.js +58 -0
  13. package/dist/commands/delete.js.map +1 -0
  14. package/dist/commands/diff.d.ts +3 -0
  15. package/dist/commands/diff.d.ts.map +1 -0
  16. package/dist/commands/diff.js +68 -0
  17. package/dist/commands/diff.js.map +1 -0
  18. package/dist/commands/env.d.ts +3 -0
  19. package/dist/commands/env.d.ts.map +1 -0
  20. package/dist/commands/env.js +59 -0
  21. package/dist/commands/env.js.map +1 -0
  22. package/dist/commands/guard.d.ts +3 -0
  23. package/dist/commands/guard.d.ts.map +1 -0
  24. package/dist/commands/guard.js +108 -0
  25. package/dist/commands/guard.js.map +1 -0
  26. package/dist/commands/init.d.ts +3 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +107 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/link.d.ts +3 -0
  31. package/dist/commands/link.d.ts.map +1 -0
  32. package/dist/commands/link.js +34 -0
  33. package/dist/commands/link.js.map +1 -0
  34. package/dist/commands/log.d.ts +3 -0
  35. package/dist/commands/log.d.ts.map +1 -0
  36. package/dist/commands/log.js +42 -0
  37. package/dist/commands/log.js.map +1 -0
  38. package/dist/commands/login.d.ts +3 -0
  39. package/dist/commands/login.d.ts.map +1 -0
  40. package/dist/commands/login.js +101 -0
  41. package/dist/commands/login.js.map +1 -0
  42. package/dist/commands/logout.d.ts +3 -0
  43. package/dist/commands/logout.d.ts.map +1 -0
  44. package/dist/commands/logout.js +10 -0
  45. package/dist/commands/logout.js.map +1 -0
  46. package/dist/commands/ls.d.ts +3 -0
  47. package/dist/commands/ls.d.ts.map +1 -0
  48. package/dist/commands/ls.js +43 -0
  49. package/dist/commands/ls.js.map +1 -0
  50. package/dist/commands/org.d.ts +3 -0
  51. package/dist/commands/org.d.ts.map +1 -0
  52. package/dist/commands/org.js +67 -0
  53. package/dist/commands/org.js.map +1 -0
  54. package/dist/commands/promote.d.ts +3 -0
  55. package/dist/commands/promote.d.ts.map +1 -0
  56. package/dist/commands/promote.js +75 -0
  57. package/dist/commands/promote.js.map +1 -0
  58. package/dist/commands/pull.d.ts +3 -0
  59. package/dist/commands/pull.d.ts.map +1 -0
  60. package/dist/commands/pull.js +48 -0
  61. package/dist/commands/pull.js.map +1 -0
  62. package/dist/commands/rotate-key.d.ts +3 -0
  63. package/dist/commands/rotate-key.d.ts.map +1 -0
  64. package/dist/commands/rotate-key.js +39 -0
  65. package/dist/commands/rotate-key.js.map +1 -0
  66. package/dist/commands/run.d.ts +3 -0
  67. package/dist/commands/run.d.ts.map +1 -0
  68. package/dist/commands/run.js +47 -0
  69. package/dist/commands/run.js.map +1 -0
  70. package/dist/commands/scan.d.ts +3 -0
  71. package/dist/commands/scan.d.ts.map +1 -0
  72. package/dist/commands/scan.js +83 -0
  73. package/dist/commands/scan.js.map +1 -0
  74. package/dist/commands/set.d.ts +3 -0
  75. package/dist/commands/set.d.ts.map +1 -0
  76. package/dist/commands/set.js +54 -0
  77. package/dist/commands/set.js.map +1 -0
  78. package/dist/commands/template.d.ts +3 -0
  79. package/dist/commands/template.d.ts.map +1 -0
  80. package/dist/commands/template.js +109 -0
  81. package/dist/commands/template.js.map +1 -0
  82. package/dist/commands/whoami.d.ts +3 -0
  83. package/dist/commands/whoami.d.ts.map +1 -0
  84. package/dist/commands/whoami.js +32 -0
  85. package/dist/commands/whoami.js.map +1 -0
  86. package/dist/completions/bash.sh +49 -0
  87. package/dist/completions/fish.fish +62 -0
  88. package/dist/completions/zsh.sh +106 -0
  89. package/dist/index.d.ts +3 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +62 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/lib/api.d.ts +94 -0
  94. package/dist/lib/api.d.ts.map +1 -0
  95. package/dist/lib/api.js +185 -0
  96. package/dist/lib/api.js.map +1 -0
  97. package/dist/lib/config.d.ts +18 -0
  98. package/dist/lib/config.d.ts.map +1 -0
  99. package/dist/lib/config.js +81 -0
  100. package/dist/lib/config.js.map +1 -0
  101. package/dist/lib/scanner.d.ts +29 -0
  102. package/dist/lib/scanner.d.ts.map +1 -0
  103. package/dist/lib/scanner.js +211 -0
  104. package/dist/lib/scanner.js.map +1 -0
  105. package/package.json +45 -0
@@ -0,0 +1,211 @@
1
+ import { readFileSync, readdirSync, statSync, existsSync } from "node:fs";
2
+ import { execSync } from "node:child_process";
3
+ import { join, extname, relative } from "node:path";
4
+ // ─── Detection Patterns ─────────────────────────────────────────────────────
5
+ export const SECRET_PATTERNS = [
6
+ // AWS
7
+ { name: "AWS Access Key ID", regex: /AKIA[0-9A-Z]{16}/g, description: "AWS access key ID", severity: "high" },
8
+ { name: "AWS Secret Key", regex: /(?:aws_secret_access_key|AWS_SECRET_ACCESS_KEY)\s*[=:]\s*["']?([A-Za-z0-9/+=]{40})["']?/g, description: "AWS secret access key assignment", severity: "high" },
9
+ // Stripe
10
+ { name: "Stripe Live Secret Key", regex: /sk_live_[a-zA-Z0-9]{24,}/g, description: "Stripe live secret key", severity: "high" },
11
+ { name: "Stripe Live Restricted Key", regex: /rk_live_[a-zA-Z0-9]{24,}/g, description: "Stripe live restricted key", severity: "high" },
12
+ // GitHub
13
+ { name: "GitHub PAT (classic)", regex: /ghp_[A-Za-z0-9_]{36,}/g, description: "GitHub personal access token (classic)", severity: "high" },
14
+ { name: "GitHub OAuth Token", regex: /gho_[A-Za-z0-9_]{36,}/g, description: "GitHub OAuth access token", severity: "high" },
15
+ { name: "GitHub User Token", regex: /ghu_[A-Za-z0-9_]{36,}/g, description: "GitHub user-to-server token", severity: "high" },
16
+ { name: "GitHub Server Token", regex: /ghs_[A-Za-z0-9_]{36,}/g, description: "GitHub server-to-server token", severity: "high" },
17
+ { name: "GitHub Fine-Grained PAT", regex: /github_pat_[A-Za-z0-9_]{22,}/g, description: "GitHub fine-grained PAT", severity: "high" },
18
+ // OpenAI
19
+ { name: "OpenAI API Key", regex: /sk-proj-[A-Za-z0-9_-]{40,}/g, description: "OpenAI project API key", severity: "high" },
20
+ // Anthropic
21
+ { name: "Anthropic API Key", regex: /sk-ant-[A-Za-z0-9_-]{40,}/g, description: "Anthropic API key", severity: "high" },
22
+ // Google
23
+ { name: "Google API Key", regex: /AIza[0-9A-Za-z_-]{35}/g, description: "Google API key", severity: "high" },
24
+ // Slack
25
+ { name: "Slack Bot Token", regex: /xoxb-[0-9]{10,}-[0-9A-Za-z-]{24,}/g, description: "Slack bot token", severity: "high" },
26
+ { name: "Slack Webhook", regex: /https:\/\/hooks\.slack\.com\/services\/T[A-Z0-9]+\/B[A-Z0-9]+\/[A-Za-z0-9]+/g, description: "Slack incoming webhook URL", severity: "medium" },
27
+ // Database URLs with credentials
28
+ { name: "Database URL with Password", regex: /(?:postgres|mysql|mongodb|redis):\/\/[^:]+:[^@\s]+@[^\s]+/g, description: "Database connection string with credentials", severity: "high" },
29
+ // Private Keys
30
+ { name: "Private Key", regex: /-----BEGIN\s(?:RSA|DSA|EC|OPENSSH|PGP)?\s?PRIVATE KEY-----/g, description: "Private key file", severity: "high" },
31
+ // SendGrid
32
+ { name: "SendGrid API Key", regex: /SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}/g, description: "SendGrid API key", severity: "high" },
33
+ // Twilio
34
+ { name: "Twilio API Key", regex: /SK[0-9a-fA-F]{32}/g, description: "Twilio API key", severity: "medium" },
35
+ // npm
36
+ { name: "npm Token", regex: /npm_[A-Za-z0-9]{36,}/g, description: "npm access token", severity: "high" },
37
+ // Vercel
38
+ { name: "Vercel Token", regex: /vercel_[A-Za-z0-9_-]{24,}/g, description: "Vercel API token", severity: "high" },
39
+ // Generic patterns — lower severity due to higher false positive rate
40
+ { name: "Generic Secret Assignment", regex: /(?:secret|password|token|api_key|apikey|auth_token)\s*[=:]\s*["'][A-Za-z0-9_+/=.!@#$%^&*-]{8,}["']/gi, description: "Generic secret assignment in code", severity: "low" },
41
+ ];
42
+ // ─── File Filtering ─────────────────────────────────────────────────────────
43
+ const BINARY_EXTENSIONS = new Set([
44
+ ".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg", ".ico", ".bmp", ".tiff",
45
+ ".woff", ".woff2", ".ttf", ".eot", ".otf",
46
+ ".zip", ".tar", ".gz", ".bz2", ".7z", ".rar",
47
+ ".pdf", ".doc", ".docx", ".xls", ".xlsx",
48
+ ".mp3", ".mp4", ".avi", ".mov", ".flv", ".wav",
49
+ ".exe", ".dll", ".so", ".dylib", ".o",
50
+ ".pyc", ".class", ".jar",
51
+ ".min.js", ".min.css",
52
+ ]);
53
+ const IGNORED_DIRS = new Set([
54
+ "node_modules", ".git", "dist", "build", ".next", "__pycache__",
55
+ ".venv", "venv", "vendor", "coverage", ".turbo", ".cache",
56
+ ]);
57
+ const IGNORED_FILES = new Set([
58
+ "package-lock.json", "yarn.lock", "pnpm-lock.yaml", "bun.lockb",
59
+ "composer.lock", "Gemfile.lock", "Pipfile.lock", "poetry.lock",
60
+ ]);
61
+ function shouldSkipFile(filePath) {
62
+ const ext = extname(filePath).toLowerCase();
63
+ const base = filePath.split("/").pop() || "";
64
+ return BINARY_EXTENSIONS.has(ext) || IGNORED_FILES.has(base);
65
+ }
66
+ function shouldSkipDir(dirName) {
67
+ return IGNORED_DIRS.has(dirName) || dirName.startsWith(".");
68
+ }
69
+ // ─── Redaction ──────────────────────────────────────────────────────────────
70
+ export function redactMatch(match) {
71
+ if (match.length <= 8)
72
+ return "****";
73
+ const head = match.slice(0, 4);
74
+ const tail = match.slice(-4);
75
+ return `${head}${"*".repeat(Math.min(match.length - 8, 20))}${tail}`;
76
+ }
77
+ // ─── Scanning ───────────────────────────────────────────────────────────────
78
+ function scanContent(content, filePath) {
79
+ const findings = [];
80
+ const lines = content.split("\n");
81
+ for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
82
+ const line = lines[lineIdx];
83
+ for (const pattern of SECRET_PATTERNS) {
84
+ // Reset regex lastIndex for each line
85
+ pattern.regex.lastIndex = 0;
86
+ let regexMatch;
87
+ while ((regexMatch = pattern.regex.exec(line)) !== null) {
88
+ findings.push({
89
+ file: filePath,
90
+ line: lineIdx + 1,
91
+ column: regexMatch.index + 1,
92
+ patternName: pattern.name,
93
+ redactedMatch: redactMatch(regexMatch[0]),
94
+ severity: pattern.severity,
95
+ });
96
+ }
97
+ }
98
+ }
99
+ return findings;
100
+ }
101
+ export function scanDirectory(opts) {
102
+ const dir = opts?.directory || ".";
103
+ const excludeSet = new Set(opts?.exclude || []);
104
+ const start = Date.now();
105
+ let filesScanned = 0;
106
+ const findings = [];
107
+ function walk(currentDir) {
108
+ let entries;
109
+ try {
110
+ entries = readdirSync(currentDir, { withFileTypes: true });
111
+ }
112
+ catch {
113
+ return;
114
+ }
115
+ for (const entry of entries) {
116
+ const fullPath = join(currentDir, entry.name);
117
+ const relativePath = relative(dir, fullPath);
118
+ if (excludeSet.has(relativePath) || excludeSet.has(entry.name))
119
+ continue;
120
+ if (entry.isDirectory()) {
121
+ if (!shouldSkipDir(entry.name)) {
122
+ walk(fullPath);
123
+ }
124
+ }
125
+ else if (entry.isFile() && !shouldSkipFile(entry.name)) {
126
+ try {
127
+ const stat = statSync(fullPath);
128
+ // Skip files > 1MB
129
+ if (stat.size > 1_048_576)
130
+ continue;
131
+ const content = readFileSync(fullPath, "utf-8");
132
+ filesScanned++;
133
+ findings.push(...scanContent(content, relativePath));
134
+ }
135
+ catch {
136
+ // Skip unreadable files
137
+ }
138
+ }
139
+ }
140
+ }
141
+ walk(dir);
142
+ return {
143
+ findings,
144
+ filesScanned,
145
+ duration: Date.now() - start,
146
+ };
147
+ }
148
+ export function scanStagedFiles() {
149
+ const start = Date.now();
150
+ let filesScanned = 0;
151
+ const findings = [];
152
+ let stagedOutput;
153
+ try {
154
+ stagedOutput = execSync("git diff --cached --name-only --diff-filter=ACMR", { encoding: "utf-8" }).trim();
155
+ }
156
+ catch {
157
+ return { findings: [], filesScanned: 0, duration: Date.now() - start };
158
+ }
159
+ if (!stagedOutput) {
160
+ return { findings: [], filesScanned: 0, duration: Date.now() - start };
161
+ }
162
+ const files = stagedOutput.split("\n").filter(Boolean);
163
+ for (const file of files) {
164
+ if (shouldSkipFile(file))
165
+ continue;
166
+ try {
167
+ // Get the staged version of the file
168
+ const content = execSync(`git show :${file}`, { encoding: "utf-8" });
169
+ filesScanned++;
170
+ findings.push(...scanContent(content, file));
171
+ }
172
+ catch {
173
+ // Skip files we can't read
174
+ }
175
+ }
176
+ return {
177
+ findings,
178
+ filesScanned,
179
+ duration: Date.now() - start,
180
+ };
181
+ }
182
+ export function checkGitignoreForEnv(dir = ".") {
183
+ const gitignorePath = join(dir, ".gitignore");
184
+ const findings = [];
185
+ if (!existsSync(gitignorePath)) {
186
+ findings.push({
187
+ file: ".gitignore",
188
+ line: 0,
189
+ column: 0,
190
+ patternName: "Missing .gitignore",
191
+ redactedMatch: "No .gitignore file found — .env files may be committed",
192
+ severity: "medium",
193
+ });
194
+ return findings;
195
+ }
196
+ const content = readFileSync(gitignorePath, "utf-8");
197
+ const lines = content.split("\n").map((l) => l.trim());
198
+ const hasEnvIgnore = lines.some((l) => l === ".env" || l === ".env*" || l === ".env.*" || l === "*.env" || l === ".env.local");
199
+ if (!hasEnvIgnore) {
200
+ findings.push({
201
+ file: ".gitignore",
202
+ line: 0,
203
+ column: 0,
204
+ patternName: ".env not gitignored",
205
+ redactedMatch: ".env files are not in .gitignore — secrets may be committed",
206
+ severity: "medium",
207
+ });
208
+ }
209
+ return findings;
210
+ }
211
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/lib/scanner.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@secr/cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI for secr — secrets management for teams",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "bin": {
8
+ "secr": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "dev": "tsc --watch",
15
+ "build": "tsc",
16
+ "postbuild": "cp -r src/completions dist/",
17
+ "start": "node dist/index.js",
18
+ "test": "vitest run"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/secr-dev/secr",
23
+ "directory": "apps/cli"
24
+ },
25
+ "keywords": [
26
+ "secr",
27
+ "secrets",
28
+ "env",
29
+ "cli",
30
+ "dotenv",
31
+ "configuration"
32
+ ],
33
+ "dependencies": {
34
+ "@secr/shared": "^0.1.0",
35
+ "chalk": "^5.3.0",
36
+ "commander": "^12.1.0",
37
+ "dotenv": "^16.4.0",
38
+ "ora": "^8.1.0",
39
+ "open": "^10.1.0"
40
+ },
41
+ "devDependencies": {
42
+ "tsx": "^4.19.0",
43
+ "typescript": "^5.7.0"
44
+ }
45
+ }