UNPKG

@cosmstack/repoeject

Version:

Interactive CLI tool to safely find and delete old or inactive GitHub repositories. Clean up your GitHub profile by removing abandoned projects, old experiments, and unused forks.

95 lines 3.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.readConfig = readConfig; exports.writeConfig = writeConfig; exports.saveGitHubToken = saveGitHubToken; exports.getGitHubToken = getGitHubToken; exports.clearTokens = clearTokens; const node_fs_1 = __importDefault(require("node:fs")); const security_1 = require("./security"); const config_1 = require("../config"); const CONFIG_DIR = config_1.config.store.configDir; const CONFIG_FILE = config_1.config.store.configFile; function ensureConfigDir() { if (!node_fs_1.default.existsSync(CONFIG_DIR)) { node_fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 }); } } function readConfig() { ensureConfigDir(); try { if (node_fs_1.default.existsSync(CONFIG_FILE)) { const data = node_fs_1.default.readFileSync(CONFIG_FILE, "utf-8"); return JSON.parse(data); } } catch (error) { console.warn("Failed to read config file:", error); } return {}; } function writeConfig(config) { ensureConfigDir(); try { node_fs_1.default.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600, }); } catch (error) { console.warn("Failed to write config file:", error); } } function saveGitHubToken(tokenData) { const config = readConfig(); if (!config.tokens) config.tokens = {}; config.tokens.github = { encrypted: (0, security_1.encrypt)(tokenData), lastUsed: Date.now(), }; writeConfig(config); } async function getGitHubToken() { const config = readConfig(); if (!config.tokens?.github) return undefined; try { const tokenData = (0, security_1.decrypt)(config.tokens.github.encrypted); if ((0, security_1.isTokenExpired)(tokenData)) { if (tokenData.refreshToken) { // TODO: Implement refresh token logic // const newTokenData = await refreshGitHubToken(tokenData.refreshToken); // saveGitHubToken(newTokenData); // return newTokenData.accessToken; return undefined; } return undefined; } config.tokens.github.lastUsed = Date.now(); writeConfig(config); return tokenData.accessToken; } catch (error) { console.warn("Failed to decrypt token:", error); return undefined; } } // TODO: Implement refresh token logic // export async function refreshGitHubToken( // refreshToken: string, // ): Promise<TokenData> { // return { // accessToken: "new-access-token", // refreshToken, // tokenType: "oauth", // }; // } function clearTokens() { const config = readConfig(); config.tokens = undefined; writeConfig(config); } //# sourceMappingURL=config-store.js.map