vvc
Version:
Vivocha Command Line Tools
118 lines • 4.05 kB
JavaScript
;
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