UNPKG

@ably/cli

Version:

Ably CLI for Pub/Sub, Chat and Spaces

122 lines (121 loc) 4.12 kB
import inquirer from "inquirer"; export class InteractiveHelper { configManager; logErrors; constructor(configManager, options = {}) { this.configManager = configManager; this.logErrors = options.logErrors !== false; // Default to true } /** * Confirm an action with the user */ async confirm(message) { const { confirmed } = await inquirer.prompt([ { default: false, message, name: "confirmed", type: "confirm", }, ]); return confirmed; } /** * Interactively select an account from the list of configured accounts */ async selectAccount() { try { const accounts = this.configManager.listAccounts(); const currentAlias = this.configManager.getCurrentAccountAlias(); if (accounts.length === 0) { console.log('No accounts configured. Use "ably accounts login" to add an account.'); return null; } const { selectedAccount } = await inquirer.prompt([ { choices: accounts.map((account) => { const isCurrent = account.alias === currentAlias; const accountInfo = account.account.accountName || account.account.accountId || "Unknown"; const userInfo = account.account.userEmail || "Unknown"; return { name: `${isCurrent ? "* " : " "}${account.alias} (${accountInfo}, ${userInfo})`, value: account, }; }), message: "Select an account:", name: "selectedAccount", type: "list", }, ]); return selectedAccount; } catch (error) { if (this.logErrors) { console.error("Error selecting account:", error); } return null; } } /** * Interactively select an app from the list of available apps */ async selectApp(controlApi) { try { const apps = await controlApi.listApps(); if (apps.length === 0) { console.log('No apps found. Create an app with "ably apps create" first.'); return null; } const { selectedApp } = await inquirer.prompt([ { choices: apps.map((app) => ({ name: `${app.name} (${app.id})`, value: app, })), message: "Select an app:", name: "selectedApp", type: "list", }, ]); return selectedApp; } catch (error) { if (this.logErrors) { console.error("Error fetching apps:", error); } return null; } } /** * Interactively select a key from the list of available keys for an app */ async selectKey(controlApi, appId) { try { const keys = await controlApi.listKeys(appId); if (keys.length === 0) { console.log("No keys found for this app."); return null; } const { selectedKey } = await inquirer.prompt([ { choices: keys.map((key) => ({ name: `${key.name || "Unnamed key"} (${key.id})`, value: key, })), message: "Select a key:", name: "selectedKey", type: "list", }, ]); return selectedKey; } catch (error) { if (this.logErrors) { console.error("Error fetching keys:", error); } return null; } } }