UNPKG

ee-ts-util

Version:

typescript utilities and functions

227 lines 9.68 kB
"use strict"; 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