@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
JavaScript
;
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