2.6 KiB
2.6 KiB
GitHub Module Documentation
Purpose
This module provides GitHub authentication, OAuth device flow, Octokit client factory, and repository URL parsing utilities for the web server runtime.
Entrypoints and structure
packages/web/server/lib/github/index.js: public entrypoint imported bypackages/web/server/index.js.packages/web/server/lib/github/auth.js: auth storage, multi-account support, and client ID/scope configuration.packages/web/server/lib/github/device-flow.js: OAuth device code flow implementation for browserless auth.packages/web/server/lib/github/octokit.js: Octokit client factory backed by current auth.packages/web/server/lib/github/repo/index.js: GitHub remote URL parser and directory-to-repo resolver.
Public exports (from index.js)
Auth (auth.js)
getGitHubAuth(): Returns current auth entry (accessToken, user, scope, accountId).getGitHubAuthAccounts(): Returns list of all configured accounts.setGitHubAuth({ accessToken, scope, tokenType, user, accountId }): Stores or updates auth entry.activateGitHubAuth(accountId): Sets specified account as current.clearGitHubAuth(): Removes current account or deletes storage file if last account.getGitHubClientId(): Resolves client ID from env var, settings.json, or default.getGitHubScopes(): Resolves scopes from env var, settings.json, or default.GITHUB_AUTH_FILE: Storage file path constant.
Device flow (device-flow.js)
startDeviceFlow({ clientId, scope }): Requests device code from GitHub.exchangeDeviceCode({ clientId, deviceCode }): Polls for access token.
Octokit (octokit.js)
getOctokitOrNull(): Returns configured Octokit instance or null if no auth.
Repo (repo/index.js)
parseGitHubRemoteUrl(raw): Parses SSH/HTTPS URLs into{ owner, repo, url }.resolveGitHubRepoFromDirectory(directory, remoteName): Resolves GitHub repo from git remote.
Storage and configuration
- Auth storage:
~/.config/openchamber/github-auth.json(atomic writes, mode 0o600). - Client ID:
OPENCHAMBER_GITHUB_CLIENT_IDenv var →settings.json→ default. - Scopes:
OPENCHAMBER_GITHUB_SCOPESenv var →settings.json→ default.
Account resolution
Account IDs are resolved in priority order: explicit accountId → user login → user ID → token prefix.
Notes for contributors
- All auth operations use atomic file writes for safe multi-instance sharing.
- Device flow handles GitHub's
authorization_pendingresponses at caller level. - Repo parser supports
git@github.com:,ssh://git@github.com/, andhttps://github.com/URL formats.