open source is social v-it.org
at main 48 lines 1.3 kB view raw
1// SPDX-License-Identifier: MIT 2// Copyright (c) 2026 sol pbc 3 4import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs'; 5import { join } from 'node:path'; 6import { configDir, configPath } from './paths.js'; 7 8const vitJsonPath = configPath('vit.json'); 9 10export function loadConfig() { 11 if (!existsSync(vitJsonPath)) return {}; 12 try { 13 return JSON.parse(readFileSync(vitJsonPath, 'utf-8')); 14 } catch { 15 return {}; 16 } 17} 18 19export function saveConfig(obj) { 20 const now = Math.floor(Date.now() / 1000); 21 if (!obj.created_at) obj.created_at = now; 22 obj.updated_at = now; 23 mkdirSync(configDir, { recursive: true }); 24 writeFileSync(vitJsonPath, JSON.stringify(obj, null, 2) + '\n'); 25} 26 27export function requireDid(opts) { 28 if (opts?.did) return opts.did; 29 try { 30 const localLogin = join(process.cwd(), '.vit', 'login.json'); 31 if (existsSync(localLogin)) { 32 const local = JSON.parse(readFileSync(localLogin, 'utf-8')); 33 if (local.did) return local.did; 34 } 35 } catch {} 36 const did = loadConfig().did; 37 if (!did) { 38 console.error("no DID configured. run 'vit login <handle>' first or pass --did."); 39 process.exitCode = 1; 40 } 41 return did; 42} 43 44export function getScalars(obj) { 45 return Object.entries(obj).filter( 46 ([, v]) => typeof v !== 'object' || v === null 47 ); 48}