node-gdrive
Advanced tools
Comparing version 0.0.17 to 0.0.18
@@ -5,3 +5,3 @@ { | ||
"homepage": "https://github.com/khoazero123/node-gdrive", | ||
"version": "0.0.17", | ||
"version": "0.0.18", | ||
"main": "./src/index.js", | ||
@@ -38,19 +38,16 @@ "bin": { | ||
"dependencies": { | ||
"async": "~3.1.1", | ||
"async-foreach": "~0.1.3", | ||
"axios": "^0.19.2", | ||
"async": "~3.2.2", | ||
"chalk": "~3.0.0", | ||
"debug": "~4.1.1", | ||
"debug": "^4.3.4", | ||
"express": "^4.17.1", | ||
"filesize": "~6.0.1", | ||
"googleapis": "^47.0.0", | ||
"googleapis": "^108.0.0", | ||
"lodash": "~4.17.15", | ||
"md5": "^2.2.1", | ||
"moment": "~2.24.0", | ||
"nconf": "^0.10.0", | ||
"moment": "~2.29.4", | ||
"open": "~7.0.2", | ||
"request": "~2.88.0", | ||
"p-map": "^4", | ||
"server-destroy": "^1.0.1", | ||
"streamify": "~1.0.0", | ||
"yargs": "~15.1.0" | ||
"yargs": "^17.6.0" | ||
}, | ||
@@ -57,0 +54,0 @@ "scripts": { |
@@ -205,2 +205,3 @@ const chalk = require("chalk"); | ||
} | ||
writeStdErr(data, options = {update: false}) { | ||
@@ -217,3 +218,2 @@ if (this.options.stdout) { | ||
// module.exports = new Client(); | ||
module.exports = Client; |
@@ -1,10 +0,10 @@ | ||
const async = require("async"); | ||
const fs = require("fs"); | ||
const async = require('async'); | ||
const fs = require('fs'); | ||
const path = require("path"); | ||
const {throttle} = require("lodash"); | ||
const forEach = require("async-foreach").forEach; | ||
const filesize = require("filesize"); | ||
const uuid = require("uuid"); | ||
const Client = require("./Client"); | ||
const util = require("./util"); | ||
const pMap = require('p-map'); | ||
const filesize = require('filesize'); | ||
const uuid = require('uuid'); | ||
const Client = require('./Client'); | ||
const util = require('./util'); | ||
@@ -16,3 +16,3 @@ class Drive extends Client { | ||
this.drive = this.google.drive({ | ||
version: "v3", | ||
version: 'v3', | ||
auth: this.client.oAuth2Client | ||
@@ -22,12 +22,16 @@ }); | ||
list(folderId, options = {}) { | ||
async list(folderId, options = {}) { | ||
const self = this; | ||
const query = { | ||
pageSize: 10, | ||
fields: 'nextPageToken, files(id, name)', | ||
}; | ||
if (folderId) { | ||
query.q = `'${folderId}' in parents` | ||
} | ||
return new Promise((resolve, reject) => { | ||
self.drive.files.list({ | ||
pageSize: 10, | ||
fields: 'nextPageToken, files(id, name)', | ||
}, (err, res) => { | ||
self.drive.files.list(query, (err, res) => { | ||
if (err) return console.log('The API returned an error: ' + err); | ||
const files = res.data.files; | ||
resolve(files); | ||
resolve(files); | ||
}); | ||
@@ -37,34 +41,18 @@ }); | ||
upload(distPath, options = {}) { | ||
var self = this; | ||
return new Promise((resolve, reject) => { | ||
async upload(distPath, options = {}) { | ||
const self = this; | ||
return new Promise(async (resolve, reject) => { | ||
if (!fs.existsSync(distPath)) { | ||
let message = "Path not found: " + distPath; | ||
let message = 'Path not found: ' + distPath; | ||
self.writeStdErr(message + "\n"); | ||
if (!this.options.cli) { | ||
self.emit("error", message); | ||
self.emit('error', message); | ||
} | ||
return !this.options.cli && reject(new Error(message)); | ||
} else if(fs.lstatSync(distPath).isDirectory()) { // upload folder | ||
util.getFiles(distPath).then(files => { | ||
// console.log('Files:',files); | ||
forEach(files, function(filePath) { | ||
var done = this.async(); | ||
// const filePath = path.join(distPath, fileName); | ||
console.log("filePath:", filePath); | ||
var promise = self.uploadFile(filePath, self.options).then(result => { | ||
console.error(result); | ||
}).catch(err => { | ||
console.error(err); | ||
process.exit(1); | ||
}); | ||
Promise.all([promise.catch(error => {return error;})]).then(function(values) { | ||
console.log("Promise.all: self.uploadFile:", values); | ||
done(); | ||
}); | ||
}, function (notAborted, files) { | ||
}); | ||
// TODO: create folder | ||
util.getFiles(distPath).then(async (files) => { | ||
pMap(files, async (filePath) => { | ||
return await self.uploadFile(filePath, self.options); | ||
}, {concurrency: 2}); | ||
}).catch(err => { | ||
@@ -82,8 +70,7 @@ console.error(err); | ||
this.options = Object.assign({}, this.options, options); | ||
var self = this; | ||
// console.log(this.options);process.exit(1); | ||
var promise = new Promise((resolve, reject) => { | ||
const self = this; | ||
const promise = new Promise((resolve, reject) => { | ||
const fileSize = fs.statSync(filePath).size; | ||
var requestBody = { | ||
const requestBody = { | ||
name: this.options.name || path.basename(filePath) | ||
@@ -115,3 +102,3 @@ }; | ||
const percent = ((evt.bytesRead / fileSize) * 100).toFixed(2); | ||
self.emit("progress", { | ||
self.emit('progress', { | ||
progress: percent, | ||
@@ -122,7 +109,7 @@ bytesRead: evt.bytesRead, | ||
self.handlePrintProgress( | ||
"Uploading " + | ||
'Uploading ' + | ||
Math.round(percent) + | ||
"% " + | ||
'% ' + | ||
(filesize(evt.bytesRead, { base: 10, round: 2 }) + | ||
"/" + | ||
'/' + | ||
filesize(fileSize, { base: 10 })) | ||
@@ -133,3 +120,3 @@ ); | ||
if (err) { | ||
self.emit("error", err); | ||
self.emit('error', err); | ||
self.write("\n"+err.message+"\n"); | ||
@@ -139,3 +126,3 @@ return reject(err); | ||
let file = data.data; | ||
self.emit("done", file); | ||
self.emit('done', file); | ||
self.write(`\nUploaded ${file.id}\n`); | ||
@@ -166,3 +153,3 @@ var promises = []; | ||
} | ||
self.write("Deleted file " + filePath+ "\n"); | ||
self.write('Deleted file ' + filePath+ '\n'); | ||
}); | ||
@@ -179,20 +166,20 @@ }); | ||
share(fileId, permissions = [{ type: "anyone", role: "reader" }]) { | ||
share(fileId, permissions = [{ type: 'anyone', role: 'reader' }]) { | ||
const self = this; | ||
return new Promise((resolve, reject) => { | ||
/* var permissions = [{ | ||
type: "user", | ||
role: "writer", | ||
emailAddress: "user@example.com" | ||
type: 'user', | ||
role: 'writer', | ||
emailAddress: 'user@example.com' | ||
}, { | ||
type: "domain", | ||
role: "writer", | ||
domain: "example.com" | ||
type: 'domain', | ||
role: 'writer', | ||
domain: 'example.com' | ||
}]; */ | ||
if(!permissions || permissions === true) { | ||
permissions = [{ type: "anyone", role: "reader" }]; | ||
permissions = [{ type: 'anyone', role: 'reader' }]; | ||
} else if(typeof permissions == 'string') { | ||
permissions = [{ | ||
type: "user", | ||
role: "reader", | ||
type: 'user', | ||
role: 'reader', | ||
emailAddress: permissions // is email address | ||
@@ -209,3 +196,3 @@ }]; | ||
fileId: fileId, | ||
fields: "id" | ||
fields: 'id' | ||
}, | ||
@@ -237,3 +224,3 @@ function(err, res) { | ||
self.drive.files.get( | ||
{ fileId, fields: "*" }, async (err, res) => { | ||
{ fileId, fields: '*' }, async (err, res) => { | ||
if(err) { | ||
@@ -245,3 +232,3 @@ return reject(err); | ||
if(options.randomFileName) { | ||
filePath = path.join(process.cwd(), uuid()+".bin"); | ||
filePath = path.join(process.cwd(), uuid()+'.bin'); | ||
} | ||
@@ -259,3 +246,3 @@ if(options.output) { | ||
let parameters = { responseType: "stream" }; | ||
let parameters = { responseType: 'stream' }; | ||
let stats = {size: 0}; | ||
@@ -265,5 +252,5 @@ if (fs.existsSync(filePath)) { | ||
if(stats.size == file.size) { | ||
self.write('File '+filePath+ ' exists!'+"\n"); | ||
self.write(`File ${filePath} exists!\n`); | ||
if(!options.force) { | ||
self.emit("done", filePath); | ||
self.emit('done', filePath); | ||
return resolve(filePath); | ||
@@ -273,5 +260,5 @@ } | ||
parameters.headers = { | ||
Range: "bytes=" + stats.size + "-" + file.size | ||
Range: 'bytes=' + stats.size + '-' + file.size | ||
}; | ||
self.write("Resume at bytes " + filesize(stats.size)+"\n"); | ||
self.write(`Resume at bytes ${filesize(stats.size)}\n`); | ||
} | ||
@@ -288,17 +275,17 @@ } | ||
res = await self.drive.files.get( | ||
{ fileId, alt: "media" }, | ||
parameters ? parameters : { responseType: "stream" } | ||
{ fileId, alt: 'media' }, | ||
parameters ? parameters : { responseType: 'stream' } | ||
); | ||
res.data | ||
.on("end", () => { | ||
.on('end', () => { | ||
self.write("\nDone downloading file.\n"); | ||
self.emit("done", filePath); | ||
self.emit('done', filePath); | ||
resolve(filePath); | ||
}) | ||
.on("error", err => { | ||
.on('error', err => { | ||
self.write("\nError downloading file.\n"); | ||
self.emit("error", err); | ||
self.emit('error', err); | ||
reject(err); | ||
}) | ||
.on("data", /* throttle( */d => { | ||
.on('data', /* throttle( */d => { | ||
progress += d.length; | ||
@@ -309,3 +296,3 @@ const percent = ((progress / file.size) * 100).toFixed(2); | ||
self.handlePrintProgress(message); | ||
self.emit("progress", { | ||
self.emit('progress', { | ||
progress: percent, | ||
@@ -312,0 +299,0 @@ bytesRead: progress, |
@@ -6,3 +6,2 @@ const { promisify } = require("util"); | ||
const readdir = promisify(fs.readdir); | ||
const rename = promisify(fs.rename); | ||
const stat = promisify(fs.stat); | ||
@@ -9,0 +8,0 @@ |
Sorry, the diff of this file is not supported yet
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
14
29658
577
+ Addedp-map@^4
+ Addedaggregate-error@3.1.0(transitive)
+ Addedasync@3.2.5(transitive)
+ Addedclean-stack@2.2.0(transitive)
+ Addedcliui@8.0.1(transitive)
+ Addeddebug@4.3.4(transitive)
+ Addedescalade@3.1.2(transitive)
+ Addedgaxios@5.1.3(transitive)
+ Addedgcp-metadata@5.3.0(transitive)
+ Addedgoogle-auth-library@8.9.0(transitive)
+ Addedgoogle-p12-pem@4.0.1(transitive)
+ Addedgoogleapis@108.0.1(transitive)
+ Addedgoogleapis-common@6.0.4(transitive)
+ Addedgtoken@6.1.2(transitive)
+ Addedindent-string@4.0.0(transitive)
+ Addedjson-bigint@1.0.0(transitive)
+ Addedlru-cache@6.0.0(transitive)
+ Addedmoment@2.29.4(transitive)
+ Addedms@2.1.2(transitive)
+ Addednode-forge@1.3.1(transitive)
+ Addedp-map@4.0.0(transitive)
+ Addeduuid@9.0.1(transitive)
+ Addedwrap-ansi@7.0.0(transitive)
+ Addedy18n@5.0.8(transitive)
+ Addedyallist@4.0.0(transitive)
+ Addedyargs@17.7.2(transitive)
+ Addedyargs-parser@21.1.1(transitive)
- Removedasync-foreach@~0.1.3
- Removedaxios@^0.19.2
- Removednconf@^0.10.0
- Removedrequest@~2.88.0
- Removedabort-controller@3.0.0(transitive)
- Removedajv@6.12.6(transitive)
- Removedansi-regex@2.1.1(transitive)
- Removedasn1@0.2.6(transitive)
- Removedassert-plus@1.0.0(transitive)
- Removedasync@1.5.23.1.1(transitive)
- Removedasync-foreach@0.1.3(transitive)
- Removedasynckit@0.4.0(transitive)
- Removedaws-sign2@0.7.0(transitive)
- Removedaws4@1.12.0(transitive)
- Removedaxios@0.19.2(transitive)
- Removedbcrypt-pbkdf@1.0.2(transitive)
- Removedcamelcase@2.1.15.3.1(transitive)
- Removedcaseless@0.12.0(transitive)
- Removedcliui@3.2.06.0.0(transitive)
- Removedcode-point-at@1.1.0(transitive)
- Removedcombined-stream@1.0.8(transitive)
- Removedcore-util-is@1.0.2(transitive)
- Removeddashdash@1.14.1(transitive)
- Removeddebug@4.1.1(transitive)
- Removeddecamelize@1.2.0(transitive)
- Removeddelayed-stream@1.0.0(transitive)
- Removedecc-jsbn@0.1.2(transitive)
- Removedevent-target-shim@5.0.1(transitive)
- Removedextsprintf@1.3.0(transitive)
- Removedfast-deep-equal@3.1.3(transitive)
- Removedfast-json-stable-stringify@2.1.0(transitive)
- Removedfind-up@4.1.0(transitive)
- Removedfollow-redirects@1.5.10(transitive)
- Removedforever-agent@0.6.1(transitive)
- Removedform-data@2.3.3(transitive)
- Removedgaxios@2.3.4(transitive)
- Removedgcp-metadata@3.5.0(transitive)
- Removedgetpass@0.1.7(transitive)
- Removedgoogle-auth-library@5.10.1(transitive)
- Removedgoogle-p12-pem@2.0.5(transitive)
- Removedgoogleapis@47.0.0(transitive)
- Removedgoogleapis-common@3.2.2(transitive)
- Removedgtoken@4.1.4(transitive)
- Removedhar-schema@2.0.0(transitive)
- Removedhar-validator@5.1.5(transitive)
- Removedhttp-signature@1.2.0(transitive)
- Removedini@1.3.8(transitive)
- Removedinvert-kv@1.0.0(transitive)
- Removedis-fullwidth-code-point@1.0.0(transitive)
- Removedis-typedarray@1.0.0(transitive)
- Removedisstream@0.1.2(transitive)
- Removedjsbn@0.1.1(transitive)
- Removedjson-bigint@0.3.1(transitive)
- Removedjson-schema@0.4.0(transitive)
- Removedjson-schema-traverse@0.4.1(transitive)
- Removedjson-stringify-safe@5.0.1(transitive)
- Removedjsprim@1.4.2(transitive)
- Removedlcid@1.0.0(transitive)
- Removedlocate-path@5.0.0(transitive)
- Removedlru-cache@5.1.1(transitive)
- Removedmime@2.6.0(transitive)
- Removedmoment@2.24.0(transitive)
- Removednconf@0.10.0(transitive)
- Removednode-forge@0.10.0(transitive)
- Removednumber-is-nan@1.0.1(transitive)
- Removedoauth-sign@0.9.0(transitive)
- Removedos-locale@1.4.0(transitive)
- Removedp-limit@2.3.0(transitive)
- Removedp-locate@4.1.0(transitive)
- Removedp-try@2.2.0(transitive)
- Removedpath-exists@4.0.0(transitive)
- Removedperformance-now@2.1.0(transitive)
- Removedpsl@1.9.0(transitive)
- Removedpunycode@2.3.1(transitive)
- Removedqs@6.5.3(transitive)
- Removedrequest@2.88.2(transitive)
- Removedrequire-main-filename@2.0.0(transitive)
- Removedsecure-keys@1.0.0(transitive)
- Removedset-blocking@2.0.0(transitive)
- Removedsshpk@1.18.0(transitive)
- Removedstring-width@1.0.2(transitive)
- Removedstrip-ansi@3.0.1(transitive)
- Removedtough-cookie@2.5.0(transitive)
- Removedtunnel-agent@0.6.0(transitive)
- Removedtweetnacl@0.14.5(transitive)
- Removeduri-js@4.4.1(transitive)
- Removeduuid@3.4.07.0.3(transitive)
- Removedverror@1.10.0(transitive)
- Removedwhich-module@2.0.1(transitive)
- Removedwindow-size@0.1.4(transitive)
- Removedwrap-ansi@2.1.06.2.0(transitive)
- Removedy18n@3.2.24.0.3(transitive)
- Removedyallist@3.1.1(transitive)
- Removedyargs@15.1.03.32.0(transitive)
- Removedyargs-parser@16.1.0(transitive)
Updatedasync@~3.2.2
Updateddebug@^4.3.4
Updatedgoogleapis@^108.0.0
Updatedmoment@~2.29.4
Updatedyargs@^17.6.0