import { BaseCommand, args, flags } from '@adonisjs/core/ace' import { CommandOptions } from '@adonisjs/core/types/ace' import db from '@adonisjs/lucid/services/db' import SeedOrchestrator from '#services/SeedOrchestrator' /** * Creates a seeding node, or gives it a new token (the old one stops * working), and prints the token once (CONCEPT.md D38). * * node ace seed:token hetzner-1 * node ace seed:token hetzner-1 --disable */ export default class SeedToken extends BaseCommand { public static commandName = 'seed:token' public static description = 'Creates a seeding node or replaces its token; prints the token once.' public static options: CommandOptions = { startApp: true, } @args.string({ description: 'Node name' }) declare name: string @flags.boolean({ description: 'Disable the node instead (its leases pass to others after they expire)' }) declare disable: boolean public async run() { if (this.disable) { const n = await db.from('seed_nodes').where('name', this.name).update({ disabled: true }) this.logger.info(n ? `${this.name}: disabled.` : `${this.name}: no such node.`) return } const token = await SeedOrchestrator.issueToken(this.name) this.logger.info(`${this.name}: token (shown once, keep it on the node only):`) console.log(token) } }