mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-25 23:01:12 +03:00
2387a06ce4
* add teams, gmail, outlook tools * update docs link * update credentials for oauth2 * add jira tool * add google drive, google calendar, google sheets tools, powerpoint, excel, word doc loader * update jira logo * Refactor Gmail and Outlook tools to remove maxOutputLength parameter and enhance request handling. Update response formatting to include parameters in the output. Adjust Google Drive tools to simplify success messages by removing unnecessary parameter details. * Update pnpm-lock.yaml * add google docs
369 lines
13 KiB
TypeScript
369 lines
13 KiB
TypeScript
import { convertMultiOptionsToStringArray, getCredentialData, getCredentialParam, refreshOAuth2Token } from '../../../src/utils'
|
|
import { createGoogleSheetsTools } from './core'
|
|
import type { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
|
|
|
|
class GoogleSheets_Tools implements INode {
|
|
label: string
|
|
name: string
|
|
version: number
|
|
type: string
|
|
icon: string
|
|
category: string
|
|
description: string
|
|
baseClasses: string[]
|
|
credential: INodeParams
|
|
inputs: INodeParams[]
|
|
|
|
constructor() {
|
|
this.label = 'Google Sheets'
|
|
this.name = 'googleSheetsTool'
|
|
this.version = 1.0
|
|
this.type = 'GoogleSheets'
|
|
this.icon = 'google-sheets.svg'
|
|
this.category = 'Tools'
|
|
this.description = 'Perform Google Sheets operations such as managing spreadsheets, reading and writing values'
|
|
this.baseClasses = ['Tool']
|
|
this.credential = {
|
|
label: 'Connect Credential',
|
|
name: 'credential',
|
|
type: 'credential',
|
|
credentialNames: ['googleSheetsOAuth2']
|
|
}
|
|
this.inputs = [
|
|
{
|
|
label: 'Type',
|
|
name: 'sheetsType',
|
|
type: 'options',
|
|
description: 'Type of Google Sheets operation',
|
|
options: [
|
|
{
|
|
label: 'Spreadsheet',
|
|
name: 'spreadsheet'
|
|
},
|
|
{
|
|
label: 'Values',
|
|
name: 'values'
|
|
}
|
|
]
|
|
},
|
|
// Spreadsheet Actions
|
|
{
|
|
label: 'Spreadsheet Actions',
|
|
name: 'spreadsheetActions',
|
|
type: 'multiOptions',
|
|
description: 'Actions to perform on spreadsheets',
|
|
options: [
|
|
{
|
|
label: 'Create Spreadsheet',
|
|
name: 'createSpreadsheet'
|
|
},
|
|
{
|
|
label: 'Get Spreadsheet',
|
|
name: 'getSpreadsheet'
|
|
},
|
|
{
|
|
label: 'Update Spreadsheet',
|
|
name: 'updateSpreadsheet'
|
|
}
|
|
],
|
|
show: {
|
|
sheetsType: ['spreadsheet']
|
|
}
|
|
},
|
|
// Values Actions
|
|
{
|
|
label: 'Values Actions',
|
|
name: 'valuesActions',
|
|
type: 'multiOptions',
|
|
description: 'Actions to perform on sheet values',
|
|
options: [
|
|
{
|
|
label: 'Get Values',
|
|
name: 'getValues'
|
|
},
|
|
{
|
|
label: 'Update Values',
|
|
name: 'updateValues'
|
|
},
|
|
{
|
|
label: 'Append Values',
|
|
name: 'appendValues'
|
|
},
|
|
{
|
|
label: 'Clear Values',
|
|
name: 'clearValues'
|
|
},
|
|
{
|
|
label: 'Batch Get Values',
|
|
name: 'batchGetValues'
|
|
},
|
|
{
|
|
label: 'Batch Update Values',
|
|
name: 'batchUpdateValues'
|
|
},
|
|
{
|
|
label: 'Batch Clear Values',
|
|
name: 'batchClearValues'
|
|
}
|
|
],
|
|
show: {
|
|
sheetsType: ['values']
|
|
}
|
|
},
|
|
// Spreadsheet Parameters
|
|
{
|
|
label: 'Spreadsheet ID',
|
|
name: 'spreadsheetId',
|
|
type: 'string',
|
|
description: 'The ID of the spreadsheet',
|
|
show: {
|
|
sheetsType: ['spreadsheet', 'values']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Title',
|
|
name: 'title',
|
|
type: 'string',
|
|
description: 'The title of the spreadsheet',
|
|
show: {
|
|
spreadsheetActions: ['createSpreadsheet', 'updateSpreadsheet']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Sheet Count',
|
|
name: 'sheetCount',
|
|
type: 'number',
|
|
description: 'Number of sheets to create',
|
|
default: 1,
|
|
show: {
|
|
spreadsheetActions: ['createSpreadsheet']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
// Values Parameters
|
|
{
|
|
label: 'Range',
|
|
name: 'range',
|
|
type: 'string',
|
|
description: 'The range to read/write (e.g., A1:B2, Sheet1!A1:C10)',
|
|
show: {
|
|
valuesActions: ['getValues', 'updateValues', 'clearValues']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Ranges',
|
|
name: 'ranges',
|
|
type: 'string',
|
|
description: 'Comma-separated list of ranges for batch operations',
|
|
show: {
|
|
valuesActions: ['batchGetValues', 'batchClearValues']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Values',
|
|
name: 'values',
|
|
type: 'string',
|
|
description: 'JSON array of values to write (e.g., [["A1", "B1"], ["A2", "B2"]])',
|
|
show: {
|
|
valuesActions: ['updateValues', 'appendValues', 'batchUpdateValues']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Value Input Option',
|
|
name: 'valueInputOption',
|
|
type: 'options',
|
|
description: 'How input data should be interpreted',
|
|
options: [
|
|
{
|
|
label: 'Raw',
|
|
name: 'RAW'
|
|
},
|
|
{
|
|
label: 'User Entered',
|
|
name: 'USER_ENTERED'
|
|
}
|
|
],
|
|
default: 'USER_ENTERED',
|
|
show: {
|
|
valuesActions: ['updateValues', 'appendValues', 'batchUpdateValues']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Value Render Option',
|
|
name: 'valueRenderOption',
|
|
type: 'options',
|
|
description: 'How values should be represented in the output',
|
|
options: [
|
|
{
|
|
label: 'Formatted Value',
|
|
name: 'FORMATTED_VALUE'
|
|
},
|
|
{
|
|
label: 'Unformatted Value',
|
|
name: 'UNFORMATTED_VALUE'
|
|
},
|
|
{
|
|
label: 'Formula',
|
|
name: 'FORMULA'
|
|
}
|
|
],
|
|
default: 'FORMATTED_VALUE',
|
|
show: {
|
|
valuesActions: ['getValues', 'batchGetValues']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Date Time Render Option',
|
|
name: 'dateTimeRenderOption',
|
|
type: 'options',
|
|
description: 'How dates, times, and durations should be represented',
|
|
options: [
|
|
{
|
|
label: 'Serial Number',
|
|
name: 'SERIAL_NUMBER'
|
|
},
|
|
{
|
|
label: 'Formatted String',
|
|
name: 'FORMATTED_STRING'
|
|
}
|
|
],
|
|
default: 'FORMATTED_STRING',
|
|
show: {
|
|
valuesActions: ['getValues', 'batchGetValues']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Insert Data Option',
|
|
name: 'insertDataOption',
|
|
type: 'options',
|
|
description: 'How data should be inserted',
|
|
options: [
|
|
{
|
|
label: 'Overwrite',
|
|
name: 'OVERWRITE'
|
|
},
|
|
{
|
|
label: 'Insert Rows',
|
|
name: 'INSERT_ROWS'
|
|
}
|
|
],
|
|
default: 'OVERWRITE',
|
|
show: {
|
|
valuesActions: ['appendValues']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Include Grid Data',
|
|
name: 'includeGridData',
|
|
type: 'boolean',
|
|
description: 'True if grid data should be returned',
|
|
default: false,
|
|
show: {
|
|
spreadsheetActions: ['getSpreadsheet']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
},
|
|
{
|
|
label: 'Major Dimension',
|
|
name: 'majorDimension',
|
|
type: 'options',
|
|
description: 'The major dimension that results should use',
|
|
options: [
|
|
{
|
|
label: 'Rows',
|
|
name: 'ROWS'
|
|
},
|
|
{
|
|
label: 'Columns',
|
|
name: 'COLUMNS'
|
|
}
|
|
],
|
|
default: 'ROWS',
|
|
show: {
|
|
valuesActions: ['getValues', 'updateValues', 'appendValues', 'batchGetValues', 'batchUpdateValues']
|
|
},
|
|
additionalParams: true,
|
|
optional: true
|
|
}
|
|
]
|
|
}
|
|
|
|
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
|
|
const sheetsType = nodeData.inputs?.sheetsType as string
|
|
|
|
let credentialData = await getCredentialData(nodeData.credential ?? '', options)
|
|
credentialData = await refreshOAuth2Token(nodeData.credential ?? '', credentialData, options)
|
|
const accessToken = getCredentialParam('access_token', credentialData, nodeData)
|
|
|
|
if (!accessToken) {
|
|
throw new Error('No access token found in credential')
|
|
}
|
|
|
|
// Get all actions based on type
|
|
let actions: string[] = []
|
|
|
|
if (sheetsType === 'spreadsheet') {
|
|
actions = convertMultiOptionsToStringArray(nodeData.inputs?.spreadsheetActions)
|
|
} else if (sheetsType === 'values') {
|
|
actions = convertMultiOptionsToStringArray(nodeData.inputs?.valuesActions)
|
|
}
|
|
|
|
const defaultParams = this.transformNodeInputsToToolArgs(nodeData)
|
|
|
|
const tools = createGoogleSheetsTools({
|
|
accessToken,
|
|
actions,
|
|
defaultParams
|
|
})
|
|
|
|
return tools
|
|
}
|
|
|
|
transformNodeInputsToToolArgs(nodeData: INodeData): Record<string, any> {
|
|
// Collect default parameters from inputs
|
|
const defaultParams: Record<string, any> = {}
|
|
|
|
// Common parameters
|
|
if (nodeData.inputs?.spreadsheetId) defaultParams.spreadsheetId = nodeData.inputs.spreadsheetId
|
|
|
|
// Spreadsheet parameters
|
|
if (nodeData.inputs?.title) defaultParams.title = nodeData.inputs.title
|
|
if (nodeData.inputs?.sheetCount) defaultParams.sheetCount = nodeData.inputs.sheetCount
|
|
if (nodeData.inputs?.includeGridData !== undefined) defaultParams.includeGridData = nodeData.inputs.includeGridData
|
|
|
|
// Values parameters
|
|
if (nodeData.inputs?.range) defaultParams.range = nodeData.inputs.range
|
|
if (nodeData.inputs?.ranges) defaultParams.ranges = nodeData.inputs.ranges
|
|
if (nodeData.inputs?.values) defaultParams.values = nodeData.inputs.values
|
|
if (nodeData.inputs?.valueInputOption) defaultParams.valueInputOption = nodeData.inputs.valueInputOption
|
|
if (nodeData.inputs?.valueRenderOption) defaultParams.valueRenderOption = nodeData.inputs.valueRenderOption
|
|
if (nodeData.inputs?.dateTimeRenderOption) defaultParams.dateTimeRenderOption = nodeData.inputs.dateTimeRenderOption
|
|
if (nodeData.inputs?.insertDataOption) defaultParams.insertDataOption = nodeData.inputs.insertDataOption
|
|
if (nodeData.inputs?.majorDimension) defaultParams.majorDimension = nodeData.inputs.majorDimension
|
|
|
|
return defaultParams
|
|
}
|
|
}
|
|
|
|
module.exports = { nodeClass: GoogleSheets_Tools }
|