ee-ts-util
Version:
typescript utilities and functions
227 lines • 9.68 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const os = require("os");
const fs = require("fs");
const client_1 = require("./client");
const googleapis_1 = require("googleapis");
const path = require("path");
exports.GDRIVE_SCOPES_READ = ["https://www.googleapis.com/auth/drive.readonly"];
exports.GDRIVE_SCOPES_WRITE = ["https://www.googleapis.com/auth/drive"];
exports.GDRIVE_VERSION = "v3";
exports.GDRIVE_FINDFILESINFOLDER_PAGELIMIT = 1000;
exports.GDRIVE_LIST_ORDERBY = "createdTime desc";
exports.GDRIVE_FILE_FIELDS = "id, mimeType, name, fileExtension, size, trashed, createdTime, modifiedTime, parents, owners";
exports.buildGetGDriveFilesInFolderAdapter = (gSuiteConfig) => {
const gsuiteClient = client_1.buildGSuiteClient(gSuiteConfig, exports.GDRIVE_SCOPES_READ);
return (targetFolderId) => __awaiter(this, void 0, void 0, function* () {
yield client_1.authorize(gsuiteClient);
return getGDriveFilesInFolder(gsuiteClient, targetFolderId);
});
};
exports.buildListGDriveFilesInFoldersAdapter = (gSuiteConfig) => {
const gsuiteClient = client_1.buildGSuiteClient(gSuiteConfig, exports.GDRIVE_SCOPES_READ);
return (folderIds) => __awaiter(this, void 0, void 0, function* () {
yield client_1.authorize(gsuiteClient);
return listGDriveFilesInFolders(gsuiteClient, folderIds);
});
};
exports.buildUpdateGDriveFileParentFolderAdapter = (gSuiteConfig) => {
const gsuiteClient = client_1.buildGSuiteClient(gSuiteConfig, exports.GDRIVE_SCOPES_WRITE);
return (fileId, currentParentIds, targetFolderId) => __awaiter(this, void 0, void 0, function* () {
yield client_1.authorize(gsuiteClient);
return updateGDriveFileParentFolder(gsuiteClient, fileId, currentParentIds, targetFolderId);
});
};
exports.buildListGDriveFilePermissionsAdapter = (gSuiteConfig) => {
const gsuiteClient = client_1.buildGSuiteClient(gSuiteConfig, exports.GDRIVE_SCOPES_READ);
return (fileId) => __awaiter(this, void 0, void 0, function* () {
yield client_1.authorize(gsuiteClient);
return listGDriveFilePermissions(gsuiteClient, fileId);
});
};
exports.buildRemoveGDriveFilePermissionsAdapter = (gSuiteConfig) => {
return (fileId, permissionIds, impersonationEmail) => __awaiter(this, void 0, void 0, function* () {
const gsuiteClient = client_1.buildGSuiteClient(gSuiteConfig, exports.GDRIVE_SCOPES_WRITE, impersonationEmail);
yield client_1.authorize(gsuiteClient);
return removeGDriveFilePermissions(gsuiteClient, fileId, permissionIds);
});
};
exports.buildAddGDriveFilePermissionsAdapter = (gSuiteConfig) => {
return (fileId, permissions, impersonationEmail) => __awaiter(this, void 0, void 0, function* () {
const gsuiteClient = client_1.buildGSuiteClient(gSuiteConfig, exports.GDRIVE_SCOPES_WRITE, impersonationEmail);
yield client_1.authorize(gsuiteClient);
return addGDriveFilePermissions(gsuiteClient, fileId, permissions);
});
};
const getGDriveFilesInFolder = (gSuiteClient, targetFolderId) => __awaiter(this, void 0, void 0, function* () {
const gdrive = googleapis_1.google.drive({
version: exports.GDRIVE_VERSION,
auth: gSuiteClient
});
const getMaybeFiles = yield new Promise((resolve, reject) => {
gdrive.files.list({
pageSize: exports.GDRIVE_FINDFILESINFOLDER_PAGELIMIT,
q: `parents in '${targetFolderId}' and trashed != true`,
fields: "files(id, name, trashed)"
}, (err, response) => {
if (err) {
reject("GSuite Get Files and Folders Error - " + err + " " + JSON.stringify(err));
}
const files = response.data.files;
if (!files || files.length === 0) {
resolve([]);
}
const maybeFiles = files.map((f) => {
return readGDriveFileAsync(gdrive, f.id, f.name);
});
resolve(maybeFiles);
});
});
return Promise.all(getMaybeFiles);
});
const readGDriveFileAsync = (gdriveClient, fileId, fileName) => {
return new Promise((resolve, reject) => {
const fileGet = gdriveClient.files.get({ fileId: `${fileId}`, alt: "media" }, { responseType: "stream" }, (fgetError, fgetResp) => {
if (fgetError) {
reject("GSuite Read File Error -" + fgetError + " " + JSON.stringify(fgetError));
}
const relativePath = path.join(os.tmpdir(), fileName);
const dest = fs.createWriteStream(relativePath)
.on("finish", () => resolve(path.resolve(relativePath)))
.on("error", reject);
fgetResp.data
.on("error", reject)
.pipe(dest);
});
});
};
const listGDriveFilesInFolders = (gSuiteClient, folderIds) => {
const gdrive = googleapis_1.google.drive({
version: exports.GDRIVE_VERSION,
auth: gSuiteClient
});
const parentsQuery = folderIds.map((folderId) => `'${folderId}' in parents`).join(" or ");
const query = `(${parentsQuery}) and trashed != true`;
return new Promise((resolve, reject) => {
gdrive.files.list({
pageSize: exports.GDRIVE_FINDFILESINFOLDER_PAGELIMIT,
q: query,
fields: "files(" + exports.GDRIVE_FILE_FIELDS + ")",
orderBy: exports.GDRIVE_LIST_ORDERBY
}, (err, response) => {
if (err) {
reject("GSuite List Files Error -" + err + " " + JSON.stringify(err));
}
resolve(response.data.files);
});
});
};
const getGDriveFile = (gSuiteClient, fileId) => {
const gdrive = googleapis_1.google.drive({
version: exports.GDRIVE_VERSION,
auth: gSuiteClient
});
return new Promise((resolve, reject) => {
gdrive.files.get({
fileId,
fields: exports.GDRIVE_FILE_FIELDS,
}, (err, result) => {
if (err) {
return reject("GSuite Get GDrive Files Error -" + err + " " + JSON.stringify(err));
}
resolve(result.data);
});
});
};
const updateGDriveFileParentFolder = (gSuiteClient, fileId, currentParentIds, targetFolderId) => {
const gdrive = googleapis_1.google.drive({
version: exports.GDRIVE_VERSION,
auth: gSuiteClient
});
return new Promise((resolve, reject) => {
const previousParents = currentParentIds.join(",");
gdrive.files.update({
fileId,
addParents: targetFolderId,
removeParents: previousParents,
fields: "id, parents"
}, (err) => {
if (err) {
return reject("GSuite move folder Error -" + err + " " + JSON.stringify(err));
}
resolve(true);
});
});
};
const listGDriveFilePermissions = (gSuiteClient, fileId) => {
const gdrive = googleapis_1.google.drive({
version: exports.GDRIVE_VERSION,
auth: gSuiteClient,
});
return new Promise((resolve, reject) => {
gdrive.permissions.list({
fileId,
fields: "*",
}, (err, result) => {
if (err) {
return reject("GSuite List GDrive File Permission -" + err + " " + JSON.stringify(err));
}
resolve(result.data.permissions);
});
});
};
const removeGDriveFilePermissions = (gSuiteClient, fileId, permissionIds) => {
const gdrive = googleapis_1.google.drive({
version: exports.GDRIVE_VERSION,
auth: gSuiteClient,
});
const promises = permissionIds.map((permissionId) => new Promise((resolve, reject) => {
gdrive.permissions.delete({
fileId,
permissionId,
}, (err, result) => {
if (err) {
return reject("GSuite Remove GDrive File Permission -" + err + " " + JSON.stringify(err));
}
resolve({
fileId,
permissionId,
removed: (result.data === "")
});
});
}));
return Promise.all(promises);
};
const addGDriveFilePermissions = (gSuiteClient, fileId, permissions) => {
const gdrive = googleapis_1.google.drive({
version: exports.GDRIVE_VERSION,
auth: gSuiteClient,
});
const promises = permissions.map((permission) => new Promise((resolve, reject) => {
const resource = {
role: permission.role,
type: permission.type,
emailAddress: permission.emailAddress
};
gdrive.permissions.create({
fileId,
transferOwnership: (resource.role === "owner"),
resource,
}, (err, result) => {
if (err) {
return reject("GSuite Add GDrive File Permission -" + err + " " + JSON.stringify(err));
}
resolve(result.data);
});
}));
return Promise.all(promises);
};
//# sourceMappingURL=driveAdapter.js.map