#!/usr/bin/env node const assert = require("assert"); const cp = require("child_process"); const path = require("path"); const repo = path.resolve(__dirname, ".."); const coordinator = "https://coord.example.test"; const defaultOperatorEndpoint = "https://disasmer.michelpaulissen.com:9443"; function disasmer(args) { return JSON.parse( cp.execFileSync( "cargo", ["run", "-q", "-p", "disasmer-cli", "--bin", "disasmer", "--", ...args], { cwd: repo, encoding: "utf8" } ) ); } const device = disasmer(["login", "--coordinator", coordinator, "--json"]); assert.strictEqual(device.coordinator, coordinator); assert(device.human_flow.Device, "default human login should use device flow"); assert.strictEqual(device.human_flow.Device.verification_url, `${coordinator}/auth/device`); assert.match(device.human_flow.Device.user_code, /^DISASMER-[A-F0-9]{4}-[A-F0-9]{4}$/); assert.match(device.human_flow.Device.device_code, /^sha256:[a-f0-9]{64}$/); assert.strictEqual(device.human_flow.Device.expires_in_seconds, 900); assert.strictEqual(device.human_flow.Device.yields_long_lived_secret_directly, false); const defaultDevice = disasmer(["login", "--json"]); assert.strictEqual(defaultDevice.coordinator, defaultOperatorEndpoint); assert.strictEqual( defaultDevice.human_flow.Device.verification_url, `${defaultOperatorEndpoint}/auth/device` ); const browser = disasmer(["login", "--browser", "--plan", "--coordinator", coordinator, "--json"]); assert.strictEqual(browser.coordinator, coordinator); assert(browser.human_flow.Browser, "browser login should be available for human users"); assert.match( browser.human_flow.Browser.authorization_url, new RegExp(`^${coordinator.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}/auth/browser/start\\?`) ); assert.match(browser.human_flow.Browser.callback_path, /^http:\/\/127\.0\.0\.1:\d+\/callback$/); assert.match(browser.human_flow.Browser.state, /^sha256:[a-f0-9]{64}$/); console.log("CLI login smoke passed");