require('dotenv').config(); const bcrypt = require('bcryptjs'); const { closeDbPool, getDb } = require('../config/db'); const { logger } = require('../utils/logger'); function requireEnv(name) { const value = process.env[name]; if (!value) { throw new Error(`${name} is required`); } return value; } async function main() { const username = requireEnv('ADMIN_USERNAME'); const email = requireEnv('ADMIN_EMAIL').toLowerCase(); const password = requireEnv('ADMIN_PASSWORD'); if (password.length < 8) { throw new Error('ADMIN_PASSWORD must be at least 8 characters'); } const db = getDb(); const existing = await db('users').where({ email }).orWhere({ username }).first(); const passwordHash = await bcrypt.hash(password, 12); if (existing) { await db('users').where({ id: existing.id }).update({ username, email, password_hash: passwordHash, role: 'admin', status: 'active' }); logger.info({ id: existing.id, email }, 'Admin user updated'); return; } const [id] = await db('users').insert({ username, email, password_hash: passwordHash, balance: '0.0000', role: 'admin', status: 'active' }); logger.info({ id, email }, 'Admin user created'); } main() .catch((error) => { logger.error({ message: error.message, stack: error.stack }, 'Failed to create admin user'); process.exitCode = 1; }) .finally(() => closeDbPool());