1 | #!/usr/bin/env node
|
2 |
|
3 | const program = require('commander'),
|
4 | fs = require('fs'),
|
5 | ora = require('ora'),
|
6 | shell = require('shelljs'),
|
7 | Gateway = require('./lib/proxy'),
|
8 | logger = require('./lib/logger'),
|
9 | fetchAuthData = require('./lib/settings').fetchSettings,
|
10 | transform = require('./lib/data/uploadFiles'),
|
11 | isValidJSON = require('./lib/data/isValidJSON'),
|
12 | waitForStatus = require('./lib/data/waitForStatus'),
|
13 | version = require('./package.json').version;
|
14 |
|
15 | let gateway;
|
16 | const spinner = ora({ text: 'Sending data', stream: process.stdout, spinner: 'bouncingBar' });
|
17 | const tmpFileName = './tmp/data-imported.json';
|
18 | PARTNER_PORTAL_HOST = process.env.PARTNER_PORTAL_HOST || 'https://partners.platform-os.com';
|
19 |
|
20 | const logInvalidFile = (filename) => {
|
21 | return logger.Error(
|
22 | `Invalid format of ${filename}. Must be a valid json file. Check file using one of JSON validators online: https://jsonlint.com`
|
23 | );
|
24 | };
|
25 |
|
26 | const dataImport = async(filename) => {
|
27 | const data = fs.readFileSync(filename, 'utf8');
|
28 | if (!isValidJSON(data)) return logInvalidFile(filename);
|
29 |
|
30 | spinner.start();
|
31 | const transformedData = await transform(JSON.parse(data));
|
32 | shell.mkdir('-p', './tmp');
|
33 | fs.writeFileSync(tmpFileName, JSON.stringify(transformedData));
|
34 | const formData = { 'import[data]': fs.createReadStream(tmpFileName) };
|
35 | gateway
|
36 | .dataImportStart(formData)
|
37 | .then((importTask) => {
|
38 | spinner.stopAndPersist().succeed('Data sent').start('Importing data');
|
39 | waitForStatus(() => gateway.dataImportStatus(importTask.id)).then(() => {
|
40 | spinner.stopAndPersist().succeed('Import done.');
|
41 | }).catch(error => {
|
42 | logger.Debug(error);
|
43 | spinner.fail('Import failed');
|
44 | });
|
45 | })
|
46 | .catch({ statusCode: 404 }, () => {
|
47 | spinner.fail('Import failed');
|
48 | logger.Error('[404] Data import is not supported by the server');
|
49 | })
|
50 | .catch(e => {
|
51 | spinner.fail('Import failed');
|
52 | logger.Error(e.message);
|
53 | });
|
54 | };
|
55 |
|
56 | program
|
57 | .version(version)
|
58 | .arguments('[environment]', 'name of the environment. Example: staging')
|
59 | .option('-p --path <import-file-path>', 'path of import .json file', 'data.json')
|
60 | .option('-c --config-file <config-file>', 'config file path', '.marketplace-kit')
|
61 | .action((environment, params) => {
|
62 | process.env.CONFIG_FILE_PATH = params.configFile;
|
63 | const filename = params.path;
|
64 | const authData = fetchAuthData(environment, program);
|
65 | Object.assign(process.env, {
|
66 | MARKETPLACE_TOKEN: authData.token,
|
67 | MARKETPLACE_URL: authData.url
|
68 | });
|
69 |
|
70 | gateway = new Gateway(authData);
|
71 | dataImport(filename);
|
72 | });
|
73 |
|
74 | program.parse(process.argv);
|