Compare commits

...

2 Commits

Author SHA1 Message Date
Corey Haines 9698318a30 fix: harden CLI tools against credential leakage
Move Supermetrics API key from query string to x-api-key header.
Mask ZoomInfo JWT by default in auth command (use --show-token to reveal).

Cherry-picked from #201.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 13:32:33 -07:00
Corey Haines c8e2d11556 Merge pull request #252 from coreyhaines31/fix/merge-competitor-profiling
feat: add competitor-profiling skill (from PR #225)
2026-04-21 13:28:23 -07:00
2 changed files with 17 additions and 9 deletions
+8 -7
View File
@@ -9,17 +9,18 @@ if (!API_KEY) {
}
async function api(method, path, body) {
const separator = path.includes('?') ? '&' : '?'
const url = `${BASE_URL}${path}${separator}api_key=${API_KEY}`
const url = `${BASE_URL}${path}`
const headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'x-api-key': API_KEY,
}
if (args['dry-run']) {
return { _dry_run: true, method, url: url.replace(API_KEY, '***'), headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: body || undefined }
return { _dry_run: true, method, url, headers: { ...headers, 'x-api-key': '***' }, body: body || undefined }
}
const res = await fetch(url, {
method,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
headers,
body: body ? JSON.stringify(body) : undefined,
})
const text = await res.text()
+9 -2
View File
@@ -92,7 +92,14 @@ async function main() {
break
}
const token = await authenticate()
result = { jwt: token }
if (args['show-token']) {
result = { jwt: token }
} else {
const masked = token.length > 12
? token.slice(0, 6) + '…' + token.slice(-6)
: '***'
result = { jwt: masked, hint: 'Use --show-token to reveal full JWT' }
}
break
}
@@ -188,7 +195,7 @@ async function main() {
result = {
error: 'Unknown command',
usage: {
auth: 'auth — authenticate and get JWT token',
auth: 'auth [--show-token] — authenticate and get JWT token (masked by default)',
contacts: {
search: 'contacts search [--job-title <t>] [--company <c>] [--location <l>] [--seniority <s>] [--department <d>] [--page <n>]',
enrich: 'contacts enrich --email <email> | --person-id <id>',