UNPKG

longcelot-sheet-db

Version:

Google Sheets-backed staging database adapter for Node.js with schema-first design

114 lines โ€ข 4.41 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.mockUsersCommand = mockUsersCommand; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const chalk_1 = __importDefault(require("chalk")); const sheetAdapter_1 = require("../../adapter/sheetAdapter"); const actorConfig_1 = require("../../utils/actorConfig"); const cliFiles_1 = require("../../utils/cliFiles"); function makeEmail(userId, role) { return `${role}.${userId}@example.local`; } async function mockUsersCommand(countArg) { const count = Number(countArg) || 3; console.log(chalk_1.default.blue.bold(` ๐Ÿงช Creating ${count} mock users (development)... `)); require('dotenv').config(); const requiredEnvVars = [ 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET', 'GOOGLE_REDIRECT_URI', 'ADMIN_SHEET_ID', 'SUPER_ADMIN_EMAIL', ]; for (const envVar of requiredEnvVars) { if (!process.env[envVar]) { console.error(chalk_1.default.red(`โŒ Missing environment variable: ${envVar}`)); process.exit(1); } } const tokensPath = (0, cliFiles_1.resolveTokensPath)(); if (!fs_1.default.existsSync(tokensPath)) { console.error(chalk_1.default.red('โŒ No OAuth tokens found. Run: lsdb sync')); process.exit(1); } let tokens; try { tokens = JSON.parse(fs_1.default.readFileSync(tokensPath, 'utf-8')); } catch { console.error(chalk_1.default.red('โŒ Failed to read tokens file.')); process.exit(1); } let config; try { config = require((0, cliFiles_1.resolveConfigPath)()).default; } catch { console.error(chalk_1.default.red('โŒ lsdb.config.ts not found. Run: lsdb init')); process.exit(1); } const adminSheetId = process.env.ADMIN_SHEET_ID; const adapter = (0, sheetAdapter_1.createSheetAdapter)({ adminSheetId, credentials: { clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, redirectUri: process.env.GOOGLE_REDIRECT_URI, }, tokens, }); // Load and register all schemas const schemasRoot = config.schemasDir ? path_1.default.resolve(process.cwd(), config.schemasDir) : path_1.default.join(process.cwd(), 'schemas'); for (const actorEntry of config.actors) { const actor = (0, actorConfig_1.resolveActorName)(actorEntry); const actorDir = path_1.default.join(schemasRoot, actor); if (!fs_1.default.existsSync(actorDir)) continue; const files = fs_1.default.readdirSync(actorDir).filter((f) => f.endsWith('.ts')); for (const file of files) { try { const schema = require(path_1.default.join(actorDir, file)).default; adapter.registerSchema(schema); } catch { // ignore failures to require optional schemas } } } // createUserSheet is an admin operation โ€” requires admin context const adminAdapter = adapter.withContext({ userId: 'mock-cli', actor: 'admin', actorSheetId: adminSheetId, }); let created = 0; for (let i = 0; i < count; i++) { const userId = `mock-${Date.now().toString(36)}-${i}`; // Rotate roles among configured actors (skip admin) const actors = config.actors .map((a) => (0, actorConfig_1.resolveActorName)(a)) .filter((r) => r !== 'admin'); const role = actors[i % actors.length] || 'student'; const email = makeEmail(userId, role); try { const sheetId = await adminAdapter.createUserSheet(userId, role, email); console.log(chalk_1.default.green(` โœ“ Created ${role} user ${userId} โ†’ sheet ${sheetId}`)); created++; } catch (err) { console.error(chalk_1.default.red(` โœ– Failed to create user ${userId}: ${err}`)); } } console.log(); console.log(chalk_1.default.bold(`Done. ${created}/${count} mock users created.`)); } exports.default = mockUsersCommand; //# sourceMappingURL=mock-users.js.map