UNPKG

msbot

Version:

MSBot command line tool for manipulating Microsoft Bot Framework .bot files

107 lines 4.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * Copyright(c) Microsoft Corporation.All rights reserved. * Licensed under the MIT License. */ // tslint:disable:no-console // tslint:disable:no-object-literal-type-assertion const botframework_config_1 = require("botframework-config"); const chalk = require("chalk"); const program = require("commander"); const fsx = require("fs-extra"); const readline = require("readline-sync"); const validurl = require("valid-url"); program.Command.prototype.unknownOption = (flag) => { console.error(chalk.default.redBright(`Unknown arguments: ${flag}`)); program.help(); }; program .name('msbot init') .option('-n, --name <name>', 'name of the bot') .option('-a, --appId <appid>', 'Microsoft AppId used for auth with the endpoint') .option('-p, --appPassword <password>', 'Microsoft app password used for auth with the endpoint') .option('-e, --endpoint <endpoint>', 'local endpoint for the bot') .option('-q, --quiet', 'do not prompt') .option('--secret', 'generate a secret and encrypt service keys with it') .option('--prefix', 'Append [msbot] prefix to all messages'); const command = program.parse(process.argv); const args = {}; Object.assign(args, command); if (!args.quiet) { let exists = fsx.existsSync(`${args.name}.bot`); while (((!args.hasOwnProperty('name') || args.name.length === 0)) || exists) { if (exists) { console.log(`${args.name}.bot already exists`); } args.name = readline.question(`What name would you like for your bot? `); exists = fsx.existsSync(`${args.name}.bot`); } while (!args.endpoint || args.endpoint.length === 0) { // tslint:disable-next-line:max-line-length args.endpoint = readline.question(`What localhost endpoint does your bot use for debugging? ` + `[Example: http://localhost:3978/api/messages] `, { defaultInput: ' ' }); } if (validurl.isHttpUri(args.endpoint) || validurl.isHttpsUri(args.endpoint)) { if (!args.appId || args.appId.length === 0) { const answer = readline.question(`Do you have an appId for endpoint? [no] `, { defaultInput: 'no' }); if (answer === 'y' || answer === 'yes') { args.appId = readline.question(`What is your appId for ${args.endpoint}? [none] `, { defaultInput: '' }); } } while (args.appId && args.appId.length > 0 && (!args.appPassword || args.appPassword.length === 0)) { args.appPassword = readline.question(`What is your appPassword for ${args.endpoint}? `, { defaultInput: '' }); } } if (!args.secret) { // tslint:disable-next-line:max-line-length const answer = readline.question(`=== Your bot file contains service keys and we strongly recommend you encrypt them to keep them safe. ===\nWould you like to encrypt your keys with a secret? [yes] `, { defaultInput: 'yes' }); args.secret = answer === 'y' || answer === 'yes'; } } let secret; if (args.secret) { secret = botframework_config_1.BotConfiguration.generateKey(); } if (!args.name) { console.error('missing --name argument'); } else { const bot = new botframework_config_1.BotConfiguration(); bot.name = args.name; bot.description = args.description; if (validurl.isHttpUri(args.endpoint) || validurl.isHttpsUri(args.endpoint)) { bot.connectService(new botframework_config_1.EndpointService({ name: args.name, endpoint: args.endpoint, appId: args.appId || '', appPassword: args.appPassword || '' })); } const filename = `${bot.name}.bot`; bot.saveAs(filename, secret); const result = { status: 'OK', file: filename, secret: secret }; if (args.quiet) { console.log(JSON.stringify(result, null, 2)); } else { console.log(`created ${filename}`); if (secret) { // tslint:disable-next-line:max-line-length console.log(`Your bot is encrypted with secret:\n${secret}\n\nPlease save this secret in a secure place to keep your keys safe.`); } } } //# sourceMappingURL=msbot-init.js.map