@elshaer/homebridge-lg-thinq
Version:
A Homebridge plugin for controlling/monitoring LG ThinQ device via LG ThinQ platform.
119 lines • 4.96 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const API_1 = require("./lib/API");
const Auth_1 = require("./lib/Auth");
const url_1 = require("url");
const readline = __importStar(require("readline"));
const input = (question) => new Promise((resolve) => {
const rl = readline.createInterface(process.stdin, process.stdout);
rl.question(question, (answer) => resolve(answer));
});
const program = new commander_1.Command();
const options = {
country: 'US',
language: 'en-US',
};
program
.option('-c, --country <type>', 'Country code for account', options.country)
.on('option:country', (value) => options.country = value)
.option('-l, --language <type>', 'Language code for account', options.language)
.on('option:language', (value) => options.language = value);
program
.command('login')
.description('Obtain refresh_token from LG account')
.argument('<username>', 'LG username')
.argument('<password>', 'LG password')
.action(async (username, password) => {
// eslint-disable-next-line max-len,no-console
console.info('Start login: username =', username, ', password =', password, ', country =', options.country, ', language =', options.language);
try {
const api = new API_1.API(options.country, options.language);
const gateway = await api.gateway();
const auth = new Auth_1.Auth(gateway);
const session = await auth.login(username, password);
// eslint-disable-next-line no-console
console.info('Your refresh_token:', session.refreshToken);
}
catch (err) {
// eslint-disable-next-line no-console
console.error(err);
}
process.exit(0);
});
program
.command('auth')
.description('Obtain refresh_token from account logged by Google Account, Apple ID')
.action(async () => {
const api = new API_1.API(options.country, options.language);
const gateway = await api.gateway();
const auth = new Auth_1.Auth(gateway);
const loginUrl = new url_1.URL(await auth.getLoginUrl());
const origin = loginUrl.origin;
loginUrl.host = 'us.m.lgaccount.com';
loginUrl.searchParams.set('division', 'ha'); // enable Apple ID
loginUrl.searchParams.set('redirect_uri', origin + '/login/iabClose');
loginUrl.searchParams.set('callback_url', origin + '/login/iabClose');
// eslint-disable-next-line no-console
console.info('Log in here:', loginUrl.href);
const callbackUrl = await input('Then paste the URL where the browser is redirected: ');
const url = new url_1.URL(callbackUrl);
const refresh_token = url.searchParams.get('refresh_token');
if (refresh_token) {
// eslint-disable-next-line no-console
console.info('Your refresh_token:', refresh_token);
process.exit(0);
return;
}
const username = url.searchParams.get('user_id'), thirdparty_token = url.searchParams.get('user_thirdparty_token'), id_type = url.searchParams.get('user_id_type') || '';
const thirdparty = {
APPL: 'apple',
FBK: 'facebook',
GGL: 'google',
AMZ: 'amazon',
};
if (!username || !thirdparty_token || typeof thirdparty[id_type] === 'undefined') {
// eslint-disable-next-line no-console
console.error('redirected url not valid, please try again or use LG account method');
process.exit(0);
return;
}
try {
const session = await auth.loginStep2(username, thirdparty_token, {
third_party: thirdparty[id_type],
});
// eslint-disable-next-line no-console
console.info('Your refresh_token:', session.refreshToken);
}
catch (err) {
// eslint-disable-next-line no-console
console.error(err);
}
process.exit(0);
});
program.parse(process.argv);
//# sourceMappingURL=cli.js.map