π File detail
utils/github/ghAuthStatus.ts
π§© .tsπ 30 linesπΎ 942 bytesπ text
β Back to All Filesπ― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes GhAuthStatus and getGhAuthStatus β mainly functions, hooks, or classes. Dependencies touch child processes. It composes internal code from which (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { execa } from 'execa' import { which } from '../which.js' export type GhAuthStatus = | 'authenticated'
π€ Exports (heuristic)
GhAuthStatusgetGhAuthStatus
π External import roots
Package roots from from "β¦" (relative paths omitted).
execa
π₯οΈ Source preview
import { execa } from 'execa'
import { which } from '../which.js'
export type GhAuthStatus =
| 'authenticated'
| 'not_authenticated'
| 'not_installed'
/**
* Returns gh CLI install + auth status for telemetry.
* Uses which() first (Bun.which β no subprocess) to detect install, then
* exit code of `gh auth token` to detect auth. Uses `auth token` instead of
* `auth status` because the latter makes a network request to GitHub's API,
* while `auth token` only reads local config/keyring. Spawns with
* stdout: 'ignore' so the token never enters this process.
*/
export async function getGhAuthStatus(): Promise<GhAuthStatus> {
const ghPath = await which('gh')
if (!ghPath) {
return 'not_installed'
}
const { exitCode } = await execa('gh', ['auth', 'token'], {
stdout: 'ignore',
stderr: 'ignore',
timeout: 5000,
reject: false,
})
return exitCode === 0 ? 'authenticated' : 'not_authenticated'
}