line-api-cli
Version:
LINE API CLIs for Node.js
156 lines (121 loc) • 5.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _os = require("os");
var _imageHelper = _interopRequireDefault(require("../image-helper"));
var _oauthIssueTokenRequest = _interopRequireDefault(require("../apis/oauth-issue-token-request"));
var _oauthRevokeTokenRequest = _interopRequireDefault(require("../apis/oauth-revoke-token-request"));
var _operation = _interopRequireDefault(require("./operation"));
var _commandLineUsage = require("command-line-usage");
var _fs = _interopRequireDefault(require("fs"));
var _jsYaml = _interopRequireDefault(require("js-yaml"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class LINETokenOperation extends _operation.default {
static get usage() {
/** @type {Section[]} */
const sections = [{
header: 'Issue/Revoke access token '.help,
content: `After channel ID and secret are configured. Issue a channel access token and save it.` + _os.EOL + _os.EOL + `line token --issue`.code + _os.EOL + _os.EOL + `In case you want to revoke an access token, you can run with --revoke option.` + _os.EOL + _os.EOL + `line token --revoke`.code
}, {
header: 'Options',
optionList: [{
name: 'issue'.code,
description: 'Issue a channel access token from pre-configured channel ID and secret'
}, {
name: 'revoke'.code,
typeLabel: '{underline accessToken}'.input,
description: 'Revoke a channel access token.'
}]
}];
return sections;
}
static async run(options) {
if (!options || options.issue !== true && options.revoke !== true) {
await _imageHelper.default.draw('chick-helps');
console.log(require('command-line-usage')(this.usage));
return false;
}
if (!this.config.channel.id) {
console.log(`Channel ID not found`.warn);
console.log(`Setup channel ID at ${this.configFileName.info} and re-run again`.help);
return false;
}
if (!this.config.channel.secret) {
console.log(`Channel secret not found`.warn);
console.log(`Setup channel secret at ${this.configFileName.info} and re-run again`.help);
return false;
}
if (options.issue === true) {
return this.issue();
} else {
// `options.revoke` will be true due to the first if-condition in this `run` method
return this.revoke();
}
}
static async issue() {
let accessToken;
let expiryDate = new Date();
try {
const response = await this.issueRequest.send(this.config.channel.id, this.config.channel.secret);
accessToken = response.data.access_token;
expiryDate.setSeconds(response.data.expires_in);
console.log(`Access token: ${accessToken.info}`.help);
console.log(`Expiry date: ${expiryDate.toLocaleString().info}`.help);
} catch (error) {
console.error(error);
return false;
}
const prompts = require('prompts');
const {
save
} = await prompts({
type: 'toggle',
name: 'save',
message: 'Overwrite short-lived access token to configuration file?',
initial: false,
active: 'Yes',
inactive: 'No'
});
if (save) {
const config = _objectSpread({}, this.config);
config.channel.accessToken = accessToken;
_fs.default.writeFileSync(`./${this.configFileName}`, _jsYaml.default.dump(config));
}
return true;
}
static async revoke() {
const prompts = require('prompts');
const {
accessToken
} = await prompts({
type: 'text',
name: 'accessToken',
message: 'Paste access token you want to revoke here'
});
if (!accessToken) {
return false;
}
try {
const response = await this.revokeRequest.send(accessToken);
if (response.status === 200) {
console.log('Revoked'.success);
return true;
} else {
console.log(`Response with status ${response.status}`.warn);
return false;
}
} catch (error) {
console.error(`${error.response.statusText} or invalid token`.error);
return false;
}
}
}
exports.default = LINETokenOperation;
_defineProperty(LINETokenOperation, "issueRequest", new _oauthIssueTokenRequest.default());
_defineProperty(LINETokenOperation, "revokeRequest", new _oauthRevokeTokenRequest.default());
//# sourceMappingURL=line-token-operation.js.map