googledrive
Version:
Google drive fs for node.js
93 lines (66 loc) • 2.05 kB
JavaScript
;
const EventEmitter = require("events");
const {google} = require("googleapis");
const googleDriveFs = require("./fs");
class GoogleDrive extends EventEmitter {
constructor({client, token = {}, params = {}}) {
super();
this._oauth2 = new google.auth.OAuth2(
client.installed.client_id,
client.installed.client_secret,
client.installed.redirect_uris[0]
);
Object.defineProperty(this._oauth2, "credentials", {
get: () => {
return token;
},
set: value => {
token = value;
this.emit("token", value);
}
});
this._drive = google.drive({
version: "v3",
auth: this._oauth2
});
this._params = params;
}
generateAuthUrl() {
return this._oauth2.generateAuthUrl({
access_type: "offline",
scope: ["https://www.googleapis.com/auth/drive"]
});
}
async getToken(code) {
const res = await this._oauth2.getToken(code);
this._oauth2.setCredentials(res.tokens);
return res.tokens;
}
async getFileById(id, params = {}) {
const file = new googleDriveFs.File({
context: this,
id: id
});
await file.get(params);
return file;
}
async getFolderById(id, params = {}) {
const folder = new googleDriveFs.Folder({
context: this,
id: id
});
await folder.get(params);
return folder;
}
createFile(options = {}) {
options.context = this;
const file = new googleDriveFs.File(options);
return file;
}
createFolder(options = {}) {
options.context = this;
const folder = new googleDriveFs.Folder(options);
return folder;
}
}
module.exports = GoogleDrive;