UNPKG

2.23 kBJavaScriptView Raw
1const fs = require('fs');
2const fetch = require('node-fetch');
3const jwt = require('jsonwebtoken');
4const program = require('commander');
5const colors = require('colors');
6const crypto = require('crypto');
7const path = require('path');
8const { Spinner } = require('cli-spinner');
9
10const generateKey = (bits) => crypto.randomBytes(Math.ceil(bits / 8)).toString('base64');
11const keySize = 512;
12
13function environmentFile(environment) {
14 return `./config/${environment}.json`;
15}
16
17program
18 .command('call <api>')
19 .alias('c')
20 .option('--env [environment]', 'The environment to run, defaults to development', 'development')
21 .option('-V --verbose', 'Run in verbose mode')
22 .action(async (api, {env, verbose}) => {
23 const {
24 host,
25 systemSecret
26 } = JSON.parse(fs.readFileSync(environmentFile(env)).toString());
27
28 console.log(`Triggering api ${colors.cyan(host)}${colors.cyan(api)} in environment ${colors.green(env)}`);
29
30 const key = Buffer.from(systemSecret, 'base64');
31
32 try {
33 const spinner = new Spinner('processing.. %s');
34 spinner.setSpinnerString(18);
35 spinner.start();
36
37 const result = await fetch(`${host}${api}`, {
38 method: 'POST',
39 headers: {
40 authorization: `jwt ${jwt.sign({}, key, { algorithm: 'HS256', expiresIn: '5 min' })}`
41 }
42 });
43
44 spinner.stop(true);
45
46 if (!result.ok) {
47 console.error(colors.red(`[${result.status}]`), await result.text());
48 } else {
49 console.log(colors.green(`[${result.status}]`), await result.text());
50 }
51 } catch (ex) {
52 if (verbose) {
53 console.error(colors.red(ex.message), ex);
54 } else {
55 console.error(colors.red(ex.message));
56 }
57 }
58 });
59
60program
61 .command('generate')
62 .alias('g')
63 .option('--env [environment]', 'The environment to run, defaults to development', 'development')
64 .action(({ env }) => {
65 console.log(`Generating new secret for environment ${colors.green(env)}`)
66
67 const config = JSON.parse(fs.readFileSync(environmentFile(env)).toString());
68
69 config.systemSecret = generateKey(keySize);
70
71 fs.writeFileSync(environmentFile(env), JSON.stringify(config, null, 4));
72 });
73
74program.parse(process.argv);