@wmfs/tymly-cli-rest-client
Version:
CLI tool to launch Tymly State Machines over REST
72 lines (61 loc) • 2.06 kB
JavaScript
const auth = require('./auth')
const error = require('./error')
const checkEnv = require('./check-env')
const configs = require('../run-configurations')
const axios = require('axios')
const debug = require('debug')('tymly-cli')
const chalk = require('chalk')
module.exports = async function () {
const options = checkEnv()
const BASE_URL = options.TYMLY_API_URL
const EXECUTIONS_URL = `${BASE_URL}/executions`
const quietMode = process.argv.includes('quiet') || process.argv.includes('q')
const configKey = process.env.npm_config_command
if (!configKey) error('You must specify a command')
debug(`Starting ${configKey}`)
const config = configs[configKey]
if (!config) error(`Unknown config: '${configKey}'`)
if (config.required) {
for (const req of config.required) {
if (!process.env[`npm_config_${req}`]) error(`Missing input: ${req}`)
}
}
const input = {}
Object.keys(config.input).forEach(i => {
if (process.env[`npm_config_${i}`]) {
input[i] = Array.isArray(config.input[i])
? process.env[`npm_config_${i}`].split('_').join(' ').split(',')
: process.env[`npm_config_${i}`].split('_').join(' ')
}
})
const token = await auth(options)
debug(`Token: ${token}`)
executeStateMachine(
config.stateMachineName,
input,
config.options,
token,
config.timeout || 0,
quietMode,
EXECUTIONS_URL
)
}
function executeStateMachine (stateMachineName, input, options, token, timeout, quietMode, executionsUrl) {
if (!quietMode) console.log(chalk.green('Executing:\n'), { stateMachineName, input, options })
return axios
.post(
executionsUrl,
{ stateMachineName, input, options },
{
headers: {
Authorization: `Bearer ${token}`
},
timeout
}
)
.then(response => {
if (response.data.status === 'FAILED') error(`State machine fail: ${response.data.errorCode}`)
if (!quietMode) console.log(chalk.green('Response:\n'), response.data)
})
.catch(err => error(err))
}