UNPKG

vvc

Version:

Vivocha Command Line Tools

118 lines 4.05 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const program = require("commander"); const inquirer = require("inquirer"); const request = require("request"); const url_1 = require("url"); const config_1 = require("./lib/config"); const startup_1 = require("./lib/startup"); const ws_1 = require("./lib/ws"); program .version(config_1.meta.version) .option('-s, --server [FQDN]', 'Login on custom Vivocha world/server') .option('-v, --verbose', 'Verbose output') .parse(process.argv); (async () => { try { await startup_1.checkLoginAndVersion(); const config = await config_1.read(); await ws_1.ws(`clients/${config.user_id}`, { method: 'DELETE' }); await config_1.unlink(); } catch (e) { } try { const data = await inquirer.prompt([ { name: 'acct_id', message: 'Account ID', validate: v => !!v }, { name: 'user_id', message: 'Username', validate: v => !!v }, { name: 'password', type: 'password', message: 'Password', validate: v => !!v } ]); const server = program.server || (await new Promise((resolve, reject) => { request({ url: `https://www.vivocha.com/a/${data.acct_id}/api/vivocha.js`, method: 'HEAD', followRedirect: false }, function (err, res, data) { if (err) { reject(err); } else if ([301, 302, 307, 308].indexOf(res.statusCode) === -1 || !res.headers.location) { reject(new Error('invalid account')); } else { let u = new url_1.URL(Array.isArray(res.headers.location) ? res.headers.location[0] : res.headers.location); resolve(u.host); } }); })); const version = await new Promise(resolve => { request.head(`https://${server}/a/${data.acct_id}/api/v3/openapi.json`, function (err, res, data) { if (res.statusCode === 200) { resolve('3'); } else { resolve('2'); } }); }); const client = await new Promise((resolve, reject) => { request({ url: `https://${server}/a/${data.acct_id}/api/v${version}/clients`, method: 'POST', json: true, body: { scope: ['Widget.*', 'Asset.*', 'String.*', 'Reflect.cli', 'Client.remove'], user_id: data.user_id }, auth: { user: data.user_id, pass: data.password, sendImmediately: true } }, function (err, res, data) { if (err) { reject(err); } else if (res.statusCode !== 201) { reject(new Error('login failed')); } else { resolve(data); } }); }); const config = await config_1.read().catch(() => { return {}; }); config.acct_id = data.acct_id; config.user_id = client.id; config.secret = client.secret; config.server = server; config.version = version; await config_1.write(config); console.log('Logged in'); process.exit(0); } catch (e) { if (program.verbose) { console.error(e); } console.error('Login failed'); process.exit(1); } })(); //# sourceMappingURL=vvc-login.js.map