UNPKG

2.67 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const program = require('commander'),
4 fs = require('fs'),
5 ora = require('ora'),
6 Gateway = require('./lib/proxy'),
7 logger = require('./lib/logger'),
8 fetchAuthData = require('./lib/settings').fetchSettings,
9 fetchFiles = require('./lib/data/fetchFiles'),
10 version = require('./package.json').version;
11
12let gateway;
13const spinner = ora({ text: 'Exporting', stream: process.stdout, spinner: 'bouncingBar' });
14const transform = ({ users = { results: [] }, transactables = { results: [] }, models = { results: [] } }) => {
15 return {
16 users: users.results,
17 transactables: transactables.results,
18 models: models.results
19 };
20};
21
22async function fetchFilesForData(data) {
23 // TODO: user profiles
24 // TODO: user properties
25 data.transactables = await Promise.all(data.transactables.map(model => fetchFiles(model)));
26 data.models = await Promise.all(data.models.map(model => fetchFiles(model)));
27
28 return data;
29};
30
31const getExportStatus = id => {
32 return new Promise((resolve, reject) => {
33 (getStatus = () => {
34 gateway.dataExportStatus(id).then(response => {
35 if (response.status === 'pending') {
36 setTimeout(getStatus, 1500);
37 } else if (response.status === 'done') {
38 resolve(response);
39 } else {
40 spinner.fail('Export failed');
41 }
42 });
43 })();
44 });
45};
46
47program
48 .version(version)
49 .arguments('[environment]', 'name of the environment. Example: staging')
50 .option('-p --path <export-file-path>', 'output for exported data', 'data.json')
51 .option('-c --config-file <config-file>', 'config file path', '.marketplace-kit')
52 .action((environment, params) => {
53 process.env.CONFIG_FILE_PATH = params.configFile;
54 const filename = params.path;
55 const authData = fetchAuthData(environment, program, program);
56 gateway = new Gateway(authData);
57
58 spinner.start();
59 gateway
60 .dataExportStart()
61 .then(exportTask => {
62 getExportStatus(exportTask.id).then(exportTask => {
63 let data = transform(exportTask.data);
64 spinner.succeed('Downloading files');
65 fetchFilesForData(data).then(data => {
66 fs.writeFileSync(filename, JSON.stringify(data));
67 spinner.stopAndPersist().succeed(`Done. Exported to: ${filename}`);
68 });
69 });
70 })
71 .catch(
72 { statusCode: 404 },
73 () => {
74 spinner.fail('Export failed');
75 logger.Error('[404] Data export is not supported by the server');
76 }
77 )
78 .catch(e => {
79 spinner.fail('Export failed');
80 logger.Error(e.message);
81 });
82 });
83
84program.parse(process.argv);