UNPKG

2.64 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const 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
15let gateway;
16const spinner = ora({ text: 'Sending data', stream: process.stdout, spinner: 'bouncingBar' });
17const tmpFileName = './tmp/data-imported.json';
18PARTNER_PORTAL_HOST = process.env.PARTNER_PORTAL_HOST || 'https://partners.platform-os.com';
19
20const 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
26const 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
56program
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
74program.parse(process.argv);