|
const { google } = require('googleapis'); |
|
const drive = google.drive("v3"); |
|
|
|
const config = require('./sa.json'); |
|
|
|
async function auth() { |
|
var jwtClient = new google.auth.JWT( |
|
config['client_email'], |
|
undefined, |
|
config['private_key'], |
|
['https://www.googleapis.com/auth/drive'] |
|
); |
|
|
|
return new Promise((resolve, reject) => { |
|
jwtClient.authorize(err => { |
|
if (err) { |
|
reject(err); |
|
} |
|
resolve(jwtClient); |
|
}); |
|
}); |
|
} |
|
|
|
async function getStorageQuota(client) { |
|
return new Promise((resolve, reject) => { |
|
// https://developers.google.com/drive/api/reference/rest/v3/about |
|
drive.about.get({ |
|
auth: client, |
|
fields: "*" |
|
}, (err, res) => { |
|
if (err) { |
|
return reject(err); |
|
} |
|
|
|
// convert to Gb |
|
const limit = (res.data.storageQuota.limit / 1_000_000_000).toFixed(2); |
|
const usage = (res.data.storageQuota.usage / 1_000_000_000).toFixed(2); |
|
return resolve({ |
|
limit: `${limit} Gb`, |
|
usage: `${usage} Gb` |
|
}) |
|
}); |
|
}); |
|
} |
|
|
|
async function getFiles(client, nextPageToken = '', q = null, pageSize = 10) { |
|
return new Promise((resolve, reject) => { |
|
let params = { |
|
pageSize: pageSize |
|
}; |
|
|
|
// https://developers.google.com/drive/api/guides/search-files#node.js |
|
if (q != null) { |
|
params.q = `${q.key} contains '${q.value}'` |
|
} |
|
|
|
if (nextPageToken != "") { |
|
params.pageToken = nextPageToken |
|
} |
|
|
|
// https://developers.google.com/drive/api/reference/rest/v3/files/list |
|
drive.files.list(params, { |
|
auth: client, |
|
fields: "files(id, name, mimeType, thumbnailLink)", |
|
|
|
}, (err, res) => { |
|
if (err) { |
|
return reject(err); |
|
} |
|
return resolve({nextPageToken: res.data.nextPageToken, files: res.data.files}); |
|
}); |
|
}); |
|
} |
|
|
|
async function deleteFile(client, fileId) { |
|
|
|
if (!fileId){ |
|
return 'file id is not defined.'; |
|
} |
|
|
|
return new Promise((resolve, reject) => { |
|
drive.files.delete({ |
|
fileId: fileId, |
|
auth: client, |
|
}, (err, res) => { |
|
if (err) { |
|
return reject(err); |
|
} |
|
return resolve(res.data); |
|
}); |
|
}); |
|
} |
|
|
|
async function main() { |
|
try { |
|
const client = await auth(); |
|
const storageQuota = await getStorageQuota(client); |
|
console.log('storage quota: ', storageQuota); |
|
|
|
// delete file |
|
// const deleteResult = await deleteFile(client, '1eegeeMNdage-xxxxxxxxxxxxxxxxxxxxxxxx'); |
|
// console.log(deleteResult); |
|
|
|
const {nextPageToken, files} = await getFiles(client, '', {key:'name', value:'myfile-1734489450847'}, 5); |
|
console.log('next page token: ', nextPageToken); |
|
|
|
for(let i = 0; i < files.length; i++) { |
|
const file = files[i]; |
|
console.log(file) |
|
} |
|
} catch(e) { |
|
console.log(e); |
|
} |
|
} |
|
|
|
main().catch(e => console.log(e)); |