@jameymcelveen/authup
v1.0.0
Published
Idempotent, config-driven auth runner for service CLIs — checks before it logs you in (npm, railway, vercel, stripe, gh, ...)
Downloads
127
Maintainers
Readme
authup
Validate, then log in to your service CLIs — in order, idempotently.
Every provider is checked first. If the check passes, nothing happens. Only a failing check triggers the login command, and the check is re-run afterwards to confirm it actually worked. Run it as often as you like; it only acts when something is actually logged out.
$ authup
authup · 6 providers · ~/.config/authup/config.json
✔ npm jameymcelveen
✔ Railway Logged in as Jamey McElveen ([email protected])
✔ Vercel jameymcelveen
! Stripe `stripe` is not installed
install: brew install stripe/stripe-cli/stripe
✔ GitHub github.com
✖ GoDaddy not authenticated
4 already · 0 logged in · 2 needs attentionInstall
npm install -g @jameymcelveen/authup
authup init # optional: copy config to ~/.config/authup/config.jsonOr from a clone:
cd authup && npm install -g .init gives you a config you can edit without touching the repo. Skip it and the
bundled config is used.
Usage
authup # check, then log in to whatever needs it
authup --check # validate only, never launch a login
authup --force # re-login even if already authenticated
authup --only vercel,gh # just these
authup --skip godaddy # all but these
authup --list # show configured providers
authup --json # machine-readable summary
authup --yes # non-interactive; skips manual stepsExit code is 0 when everything is authenticated, 1 otherwise — so it works in a
shell profile or CI gate:
authup --check --yes || echo "run authup"Config
Resolution order, first match wins:
--config <path>$AUTHUP_CONFIG./authup.config.json(project-local)~/.config/authup/config.json- the bundled default
Providers run in array order.
{
"providers": [
{
"id": "vercel", // required, unique
"name": "Vercel", // display name (defaults to id)
"bin": "vercel", // optional: reported as "not installed" if missing
"check": "vercel whoami", // required: exit 0 == logged in
"expect": "regex", // optional: stdout/stderr must also match
"login": "vercel login", // runs attached to your terminal
"installHint": "npm i -g vercel@latest",
"docs": "https://vercel.com/docs/cli",
"enabled": true // set false to keep but skip
}
]
}Instead of login, a provider can declare manual for things with no CLI login:
{
"id": "godaddy",
"check": "...",
"manual": {
"instructions": ["Create a key at…", "export GODADDY_API_KEY=…"],
"url": "https://developer.godaddy.com/keys"
}
}Manual steps print instructions and wait for Enter, then re-check. Under --yes or a
non-TTY they're skipped and reported.
Provider notes
| id | check | login |
| --------- | --------------------- | -------------- |
| npm | npm whoami | npm login |
| railway | railway whoami | railway login |
| vercel | vercel whoami | vercel login |
| stripe | stripe config --list + key match | stripe login |
| gh | gh auth status | gh auth login |
| godaddy | GoDaddy API ping with $GODADDY_API_KEY / $GODADDY_API_SECRET | manual — no official CLI exists |
Checks run with a 30s timeout and are treated as "logged out" if they hang.
