@sap/cds-dk
Version:
Command line client and development toolkit for the SAP Cloud Application Programming Model
44 lines (32 loc) • 1.6 kB
JavaScript
const fs = require('fs');
const { join } = require('path');
const { login } = require('./auth_manager');
const { mtxFetch } = require('./util/request');
const DOWNLOAD_FILE_NAME = 'migrated_projects.tgz'; // TODO try to add tenant later, if possible
module.exports = class Download {
static async run(paramValues) {
const params = await login(paramValues);
const projectFolder = params.get('projectFolder');
const downloadPath = join(projectFolder, DOWNLOAD_FILE_NAME);
if (fs.existsSync(downloadPath) && !(await require('./util/question').askBooleanQuestion(`File ${DOWNLOAD_FILE_NAME} already exists. Continue (yN)? `, false, false))) {
console.log('Download cancelled');
return;
}
console.log(`Downloading migrated @sap/mtx extension project(s)`);
const downloadedTgz = await this.pullTgz(params);
await fs.promises.writeFile(downloadPath, downloadedTgz);
console.log(`Finished.`);
}
static async pullTgz(params) {
const tagRule = params.get('tagRule');
const defaultTag = params.get('defaultTag');
const downloadUrl = `${(params.get('appUrl'))}/-/cds/extensibility/getMigratedProjects`;
const reqAuth = params.get('reqAuth') || {};
const headers = { 'content-type': 'application/json', ...reqAuth.headers };
const response = await mtxFetch('POST', downloadUrl, {
headers,
body: JSON.stringify({ tagRule, defaultTag })
}, params);
return Buffer.from(await response.arrayBuffer());
}
}