UNPKG

@pradyumn-el/pollycli

Version:

pollycli lets users access the functionalities of Polly over a command line interface

215 lines (164 loc) 5.66 kB
import { spawn } from 'child_process'; import { stdin, stdout, stderr } from 'process'; import { EventEmitter } from 'events'; const path = require('path'); const os = require('os'); const pollyEnv = require('./env.json'); class CopyHelper extends EventEmitter {} const copyHelper = new CopyHelper(); const CLI_DIRS = { 'linux': os.homedir() + path.sep + ".local" + path.sep + "bin" + path.sep + "polly-cli", 'darwin': os.homedir() + path.sep + ".local" + path.sep + "bin" + path.sep + "polly-cli" } function getAWSPath() { if(os.platform() === 'linux') { return CLI_DIRS['linux'] + path.sep + 'aws'; } // On windows, aws cli is installed in user's home directory if(os.platform() === 'win32') { const homeDir = os.homedir(); const filePath = homeDir + '\\' + 'awscli' + '\\' + 'Amazon' + '\\' + 'AWSCLIV2' + '\\' + 'aws'; return filePath } if(os.platform() === 'darwin') { return CLI_DIRS['darwin'] + path.sep + 'aws-cli' + path.sep + 'aws'; } } export function downloadFromS3(params) { /* params = { localFile: localPath, s3Params: { Bucket: projectCreds.bucket, Key: s3Key, }, creds: projectCreds }; */ const creds = { AWS_ACCESS_KEY_ID: params.creds.AccessKeyId, AWS_SECRET_ACCESS_KEY: params.creds.SecretAccessKey, AWS_SESSION_TOKEN: params.creds.SessionToken, AWS_REGION: process.env.POLLY_ENV ? pollyEnv.region[process.env.POLLY_ENV] : pollyEnv.region["prod"] }; const allEnvs = {...process.env, ...creds}; const s3Uri = `s3://${params.s3Params.Bucket}` + "/" + `${params.s3Params.Key}`; const awsPath = getAWSPath() const child = spawn(awsPath, ['s3', 'cp', s3Uri, params.localFile], { env: allEnvs }); child.on('error', (err) => { copyHelper.emit('error', err); }) child.stdout.on('data', (data) => { stdout.clearLine(0); stdout.cursorTo(0); if(data.includes("s3://")) { stdout.write('Download Complete!\n') } else { stdout.write(`${data}`) } }); child.stderr.on('data', (data) => { copyHelper.emit('stdError', data) }); } export function uploadToS3(params) { /* params = { localFile: localPath, s3Params: { Bucket: projectCreds.bucket, Key: s3Key, }, creds: projectCreds }; */ var creds = { AWS_ACCESS_KEY_ID: params.creds.AccessKeyId, AWS_SECRET_ACCESS_KEY: params.creds.SecretAccessKey, AWS_SESSION_TOKEN: params.creds.SessionToken, AWS_REGION: process.env.POLLY_ENV ? pollyEnv.region[process.env.POLLY_ENV] : pollyEnv.region["prod"] } const allEnvs = {...process.env, ...creds}; const s3Uri = `s3://${params.s3Params.Bucket}` + "/" + `${params.s3Params.Key}`; const awsPath = getAWSPath(); const child = spawn(awsPath, ['s3', 'cp', params.localFile, s3Uri, '--metadata', JSON.stringify(params.s3Params.Metadata)], { env: allEnvs }); child.on('error', (err) => { copyHelper.emit('error', err); }) child.stdout.on('data', data => { stdout.clearLine(0); stdout.cursorTo(0); // TODO: Refine this with better success message if(data.includes("s3://")) { stdout.write('Upload Complete!\n') } else { stdout.write(`${data}`) } }); child.stderr.on('data', data => { copyHelper.emit('stdError', data); }); } export function syncS3(params) { var creds = { AWS_ACCESS_KEY_ID: params.creds.AccessKeyId, AWS_SECRET_ACCESS_KEY: params.creds.SecretAccessKey, AWS_SESSION_TOKEN: params.creds.SessionToken, AWS_REGION: process.env.POLLY_ENV ? pollyEnv.region[process.env.POLLY_ENV] : pollyEnv.region["prod"] } const allEnvs = {...process.env, ...creds}; const s3Uri = `s3://${params.s3Params.Bucket}` + "/" + `${params.s3Params.Prefix}`; const awsPath = getAWSPath(); const child = spawn(awsPath, ['s3', 'sync', params.localDir, s3Uri, '--metadata', JSON.stringify(params.s3Params.Metadata)], { env: allEnvs }); child.on('error', (err) => { copyHelper.emit('error', err); }) child.stdout.on('data', data => { stdout.clearLine(0); stdout.cursorTo(0); if(!data.includes("s3://")) { stdout.write(`${data}`) } }); child.stderr.on('data', data => { copyHelper.emit('stdError', data); }); child.on('exit', (code) => { if(code === 0) { console.log('Sync complete!') } }) } export function syncLocal(params) { var creds = { AWS_ACCESS_KEY_ID: params.creds.AccessKeyId, AWS_SECRET_ACCESS_KEY: params.creds.SecretAccessKey, AWS_SESSION_TOKEN: params.creds.SessionToken, AWS_REGION: process.env.POLLY_ENV ? pollyEnv.region[process.env.POLLY_ENV] : pollyEnv.region["prod"] } const allEnvs = {...process.env, ...creds}; const s3Uri = `s3://${params.s3Params.Bucket}` + "/" + `${params.s3Params.Prefix}`; const awsPath = getAWSPath(); const child = spawn(awsPath, ['s3', 'sync', s3Uri, params.localDir], { env: allEnvs }); child.on('error', (err) => { copyHelper.emit('error', err); }) child.stdout.on('data', data => { stdout.clearLine(0); stdout.cursorTo(0); if(!data.includes("s3://")) { stdout.write(`${data}`) } }); child.stderr.on('data', data => { copyHelper.emit('stdError', data); }); child.on('exit', (code) => { if(code === 0 ) { console.log('Sync complete!'); } }) } export { copyHelper }