@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.
- package/README.md +64 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +51 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +66 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/delete.d.ts +3 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +58 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +68 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/env.d.ts +3 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +59 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/guard.d.ts +3 -0
- package/dist/commands/guard.d.ts.map +1 -0
- package/dist/commands/guard.js +108 -0
- package/dist/commands/guard.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +107 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +3 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +34 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +42 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +101 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +10 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/ls.d.ts +3 -0
- package/dist/commands/ls.d.ts.map +1 -0
- package/dist/commands/ls.js +43 -0
- package/dist/commands/ls.js.map +1 -0
- package/dist/commands/org.d.ts +3 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +67 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/promote.d.ts +3 -0
- package/dist/commands/promote.d.ts.map +1 -0
- package/dist/commands/promote.js +75 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/pull.d.ts +3 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +48 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/rotate-key.d.ts +3 -0
- package/dist/commands/rotate-key.d.ts.map +1 -0
- package/dist/commands/rotate-key.js +39 -0
- package/dist/commands/rotate-key.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +47 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +83 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/set.d.ts +3 -0
- package/dist/commands/set.d.ts.map +1 -0
- package/dist/commands/set.js +54 -0
- package/dist/commands/set.js.map +1 -0
- package/dist/commands/template.d.ts +3 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +109 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +32 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/completions/bash.sh +49 -0
- package/dist/completions/fish.fish +62 -0
- package/dist/completions/zsh.sh +106 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +94 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +185 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +18 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +81 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/scanner.d.ts +29 -0
- package/dist/lib/scanner.d.ts.map +1 -0
- package/dist/lib/scanner.js +211 -0
- package/dist/lib/scanner.js.map +1 -0
- 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
|
+
}
|