UNPKG

dtamind-components

Version:

DTAmindai Components

664 lines 23.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("../../../src/utils"); const core_1 = require("./core"); class GoogleDrive_Tools { constructor() { this.label = 'Google Drive'; this.name = 'googleDriveTool'; this.version = 1.0; this.type = 'GoogleDrive'; this.icon = 'google-drive.svg'; this.category = 'Tools'; this.description = 'Perform Google Drive operations such as managing files, folders, sharing, and searching'; this.baseClasses = ['Tool']; this.credential = { label: 'Connect Credential', name: 'credential', type: 'credential', credentialNames: ['googleDriveOAuth2'] }; this.inputs = [ { label: 'Type', name: 'driveType', type: 'options', description: 'Type of Google Drive operation', options: [ { label: 'File', name: 'file' }, { label: 'Folder', name: 'folder' }, { label: 'Search', name: 'search' }, { label: 'Share', name: 'share' } ] }, // File Actions { label: 'File Actions', name: 'fileActions', type: 'multiOptions', description: 'Actions to perform on files', options: [ { label: 'List Files', name: 'listFiles' }, { label: 'Get File', name: 'getFile' }, { label: 'Create File', name: 'createFile' }, { label: 'Update File', name: 'updateFile' }, { label: 'Delete File', name: 'deleteFile' }, { label: 'Copy File', name: 'copyFile' }, { label: 'Download File', name: 'downloadFile' } ], show: { driveType: ['file'] } }, // Folder Actions { label: 'Folder Actions', name: 'folderActions', type: 'multiOptions', description: 'Actions to perform on folders', options: [ { label: 'Create Folder', name: 'createFolder' }, { label: 'List Folder Contents', name: 'listFolderContents' }, { label: 'Delete Folder', name: 'deleteFolder' } ], show: { driveType: ['folder'] } }, // Search Actions { label: 'Search Actions', name: 'searchActions', type: 'multiOptions', description: 'Search operations', options: [ { label: 'Search Files', name: 'searchFiles' } ], show: { driveType: ['search'] } }, // Share Actions { label: 'Share Actions', name: 'shareActions', type: 'multiOptions', description: 'Sharing operations', options: [ { label: 'Share File', name: 'shareFile' }, { label: 'Get Permissions', name: 'getPermissions' }, { label: 'Remove Permission', name: 'removePermission' } ], show: { driveType: ['share'] } }, // File Parameters { label: 'File ID', name: 'fileId', type: 'string', description: 'File ID for file operations', show: { fileActions: ['getFile', 'updateFile', 'deleteFile', 'copyFile', 'downloadFile'] }, additionalParams: true, optional: true }, { label: 'File ID', name: 'fileId', type: 'string', description: 'File ID for sharing operations', show: { shareActions: ['shareFile', 'getPermissions', 'removePermission'] }, additionalParams: true, optional: true }, { label: 'Folder ID', name: 'folderId', type: 'string', description: 'Folder ID for folder operations', show: { folderActions: ['listFolderContents', 'deleteFolder'] }, additionalParams: true, optional: true }, { label: 'Permission ID', name: 'permissionId', type: 'string', description: 'Permission ID to remove', show: { shareActions: ['removePermission'] }, additionalParams: true, optional: true }, { label: 'File Name', name: 'fileName', type: 'string', description: 'Name of the file', show: { fileActions: ['createFile', 'copyFile'] }, additionalParams: true, optional: true }, { label: 'Folder Name', name: 'fileName', type: 'string', description: 'Name of the folder', show: { folderActions: ['createFolder'] }, additionalParams: true, optional: true }, { label: 'File Content', name: 'fileContent', type: 'string', description: 'Content of the file (for text files)', show: { fileActions: ['createFile'] }, additionalParams: true, optional: true }, { label: 'MIME Type', name: 'mimeType', type: 'string', description: 'MIME type of the file (e.g., text/plain, application/pdf)', show: { fileActions: ['createFile'] }, additionalParams: true, optional: true }, { label: 'Parent Folder ID', name: 'parentFolderId', type: 'string', description: 'ID of the parent folder (comma-separated for multiple parents)', show: { fileActions: ['createFile', 'copyFile'] }, additionalParams: true, optional: true }, { label: 'Parent Folder ID', name: 'parentFolderId', type: 'string', description: 'ID of the parent folder for the new folder', show: { folderActions: ['createFolder'] }, additionalParams: true, optional: true }, { label: 'File Description', name: 'description', type: 'string', description: 'File description', show: { fileActions: ['createFile', 'updateFile'] }, additionalParams: true, optional: true }, { label: 'Folder Description', name: 'description', type: 'string', description: 'Folder description', show: { folderActions: ['createFolder'] }, additionalParams: true, optional: true }, // Search Parameters { label: 'Search Query', name: 'searchQuery', type: 'string', description: 'Search query using Google Drive search syntax', show: { searchActions: ['searchFiles'] }, additionalParams: true, optional: true }, { label: 'Max Results', name: 'maxResults', type: 'number', description: 'Maximum number of results to return (1-1000)', default: 10, show: { fileActions: ['listFiles'] }, additionalParams: true, optional: true }, { label: 'Max Results', name: 'maxResults', type: 'number', description: 'Maximum number of results to return (1-1000)', default: 10, show: { searchActions: ['searchFiles'] }, additionalParams: true, optional: true }, { label: 'Order By', name: 'orderBy', type: 'options', description: 'Sort order for file results', options: [ { label: 'Name', name: 'name' }, { label: 'Created Time', name: 'createdTime' }, { label: 'Modified Time', name: 'modifiedTime' }, { label: 'Size', name: 'quotaBytesUsed' }, { label: 'Folder', name: 'folder' } ], show: { fileActions: ['listFiles'] }, additionalParams: true, optional: true }, { label: 'Order By', name: 'orderBy', type: 'options', description: 'Sort order for search results', options: [ { label: 'Name', name: 'name' }, { label: 'Created Time', name: 'createdTime' }, { label: 'Modified Time', name: 'modifiedTime' }, { label: 'Size', name: 'quotaBytesUsed' }, { label: 'Folder', name: 'folder' } ], show: { searchActions: ['searchFiles'] }, additionalParams: true, optional: true }, // Share Parameters { label: 'Share Role', name: 'shareRole', type: 'options', description: 'Permission role for sharing', options: [ { label: 'Reader', name: 'reader' }, { label: 'Writer', name: 'writer' }, { label: 'Commenter', name: 'commenter' }, { label: 'Owner', name: 'owner' } ], show: { shareActions: ['shareFile'] }, additionalParams: true, optional: true }, { label: 'Share Type', name: 'shareType', type: 'options', description: 'Type of permission', options: [ { label: 'User', name: 'user' }, { label: 'Group', name: 'group' }, { label: 'Domain', name: 'domain' }, { label: 'Anyone', name: 'anyone' } ], show: { shareActions: ['shareFile'] }, additionalParams: true, optional: true }, { label: 'Email Address', name: 'emailAddress', type: 'string', description: 'Email address for user/group sharing', show: { shareActions: ['shareFile'] }, additionalParams: true, optional: true }, { label: 'Domain Name', name: 'domainName', type: 'string', description: 'Domain name for domain sharing', show: { shareActions: ['shareFile'] }, additionalParams: true, optional: true }, { label: 'Send Notification Email', name: 'sendNotificationEmail', type: 'boolean', description: 'Whether to send notification emails when sharing', default: true, show: { shareActions: ['shareFile'] }, additionalParams: true, optional: true }, { label: 'Email Message', name: 'emailMessage', type: 'string', description: 'Custom message to include in notification email', show: { shareActions: ['shareFile'] }, additionalParams: true, optional: true }, // Advanced Parameters for File Actions { label: 'Include Items From All Drives', name: 'includeItemsFromAllDrives', type: 'boolean', description: 'Include items from all drives (shared drives)', show: { fileActions: ['listFiles'] }, additionalParams: true, optional: true }, { label: 'Include Items From All Drives', name: 'includeItemsFromAllDrives', type: 'boolean', description: 'Include items from all drives (shared drives)', show: { searchActions: ['searchFiles'] }, additionalParams: true, optional: true }, { label: 'Supports All Drives', name: 'supportsAllDrives', type: 'boolean', description: 'Whether the application supports both My Drives and shared drives', show: { fileActions: ['listFiles', 'getFile', 'createFile', 'updateFile', 'deleteFile', 'copyFile', 'downloadFile'] }, additionalParams: true, optional: true }, { label: 'Supports All Drives', name: 'supportsAllDrives', type: 'boolean', description: 'Whether the application supports both My Drives and shared drives', show: { folderActions: ['createFolder', 'listFolderContents', 'deleteFolder'] }, additionalParams: true, optional: true }, { label: 'Supports All Drives', name: 'supportsAllDrives', type: 'boolean', description: 'Whether the application supports both My Drives and shared drives', show: { searchActions: ['searchFiles'] }, additionalParams: true, optional: true }, { label: 'Supports All Drives', name: 'supportsAllDrives', type: 'boolean', description: 'Whether the application supports both My Drives and shared drives', show: { shareActions: ['shareFile', 'getPermissions', 'removePermission'] }, additionalParams: true, optional: true }, { label: 'Fields', name: 'fields', type: 'string', description: 'Specific fields to include in response (e.g., "files(id,name,mimeType)")', show: { fileActions: ['listFiles', 'getFile'] }, additionalParams: true, optional: true }, { label: 'Acknowledge Abuse', name: 'acknowledgeAbuse', type: 'boolean', description: 'Acknowledge the risk of downloading known malware or abusive files', show: { fileActions: ['getFile', 'downloadFile'] }, additionalParams: true, optional: true } ]; } async init(nodeData, _, options) { let credentialData = await (0, utils_1.getCredentialData)(nodeData.credential ?? '', options); credentialData = await (0, utils_1.refreshOAuth2Token)(nodeData.credential ?? '', credentialData, options); const accessToken = (0, utils_1.getCredentialParam)('access_token', credentialData, nodeData); if (!accessToken) { throw new Error('No access token found in credential'); } const driveType = nodeData.inputs?.driveType; const fileActions = (0, utils_1.convertMultiOptionsToStringArray)(nodeData.inputs?.fileActions); const folderActions = (0, utils_1.convertMultiOptionsToStringArray)(nodeData.inputs?.folderActions); const searchActions = (0, utils_1.convertMultiOptionsToStringArray)(nodeData.inputs?.searchActions); const shareActions = (0, utils_1.convertMultiOptionsToStringArray)(nodeData.inputs?.shareActions); // Combine all actions based on type let actions = []; if (driveType === 'file') { actions = fileActions; } else if (driveType === 'folder') { actions = folderActions; } else if (driveType === 'search') { actions = searchActions; } else if (driveType === 'share') { actions = shareActions; } const defaultParams = this.transformNodeInputsToToolArgs(nodeData); const tools = (0, core_1.createGoogleDriveTools)({ accessToken, actions, defaultParams }); return tools; } transformNodeInputsToToolArgs(nodeData) { // Collect default parameters from inputs const defaultParams = {}; // Add parameters based on the inputs provided if (nodeData.inputs?.fileId) defaultParams.fileId = nodeData.inputs.fileId; if (nodeData.inputs?.folderId) defaultParams.folderId = nodeData.inputs.folderId; if (nodeData.inputs?.permissionId) defaultParams.permissionId = nodeData.inputs.permissionId; if (nodeData.inputs?.fileName) defaultParams.name = nodeData.inputs.fileName; if (nodeData.inputs?.fileContent) defaultParams.content = nodeData.inputs.fileContent; if (nodeData.inputs?.mimeType) defaultParams.mimeType = nodeData.inputs.mimeType; if (nodeData.inputs?.parentFolderId) defaultParams.parents = nodeData.inputs.parentFolderId; if (nodeData.inputs?.description) defaultParams.description = nodeData.inputs.description; if (nodeData.inputs?.searchQuery) defaultParams.query = nodeData.inputs.searchQuery; if (nodeData.inputs?.maxResults) defaultParams.pageSize = nodeData.inputs.maxResults; if (nodeData.inputs?.orderBy) defaultParams.orderBy = nodeData.inputs.orderBy; if (nodeData.inputs?.shareRole) defaultParams.role = nodeData.inputs.shareRole; if (nodeData.inputs?.shareType) defaultParams.type = nodeData.inputs.shareType; if (nodeData.inputs?.emailAddress) defaultParams.emailAddress = nodeData.inputs.emailAddress; if (nodeData.inputs?.domainName) defaultParams.domain = nodeData.inputs.domainName; if (nodeData.inputs?.sendNotificationEmail !== undefined) defaultParams.sendNotificationEmail = nodeData.inputs.sendNotificationEmail; if (nodeData.inputs?.emailMessage) defaultParams.emailMessage = nodeData.inputs.emailMessage; if (nodeData.inputs?.includeItemsFromAllDrives !== undefined) defaultParams.includeItemsFromAllDrives = nodeData.inputs.includeItemsFromAllDrives; if (nodeData.inputs?.supportsAllDrives !== undefined) defaultParams.supportsAllDrives = nodeData.inputs.supportsAllDrives; if (nodeData.inputs?.fields) defaultParams.fields = nodeData.inputs.fields; if (nodeData.inputs?.acknowledgeAbuse !== undefined) defaultParams.acknowledgeAbuse = nodeData.inputs.acknowledgeAbuse; return defaultParams; } } module.exports = { nodeClass: GoogleDrive_Tools }; //# sourceMappingURL=GoogleDrive.js.map