dtamind-components
Version:
Apps integration for Dtamind. Contain Nodes and Credentials.
637 lines • 23.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../../../src/utils");
const core_1 = require("./core");
class Gmail_Tools {
constructor() {
this.label = 'Gmail';
this.name = 'gmail';
this.version = 1.0;
this.type = 'Gmail';
this.icon = 'gmail.svg';
this.category = 'Tools';
this.description = 'Perform Gmail operations for drafts, messages, labels, and threads';
this.baseClasses = [this.type, 'Tool'];
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['gmailOAuth2']
};
this.inputs = [
{
label: 'Type',
name: 'gmailType',
type: 'options',
options: [
{
label: 'Drafts',
name: 'drafts'
},
{
label: 'Messages',
name: 'messages'
},
{
label: 'Labels',
name: 'labels'
},
{
label: 'Threads',
name: 'threads'
}
]
},
// Draft Actions
{
label: 'Draft Actions',
name: 'draftActions',
type: 'multiOptions',
options: [
{
label: 'List Drafts',
name: 'listDrafts'
},
{
label: 'Create Draft',
name: 'createDraft'
},
{
label: 'Get Draft',
name: 'getDraft'
},
{
label: 'Update Draft',
name: 'updateDraft'
},
{
label: 'Send Draft',
name: 'sendDraft'
},
{
label: 'Delete Draft',
name: 'deleteDraft'
}
],
show: {
gmailType: ['drafts']
}
},
// Message Actions
{
label: 'Message Actions',
name: 'messageActions',
type: 'multiOptions',
options: [
{
label: 'List Messages',
name: 'listMessages'
},
{
label: 'Get Message',
name: 'getMessage'
},
{
label: 'Send Message',
name: 'sendMessage'
},
{
label: 'Modify Message',
name: 'modifyMessage'
},
{
label: 'Trash Message',
name: 'trashMessage'
},
{
label: 'Untrash Message',
name: 'untrashMessage'
},
{
label: 'Delete Message',
name: 'deleteMessage'
}
],
show: {
gmailType: ['messages']
}
},
// Label Actions
{
label: 'Label Actions',
name: 'labelActions',
type: 'multiOptions',
options: [
{
label: 'List Labels',
name: 'listLabels'
},
{
label: 'Get Label',
name: 'getLabel'
},
{
label: 'Create Label',
name: 'createLabel'
},
{
label: 'Update Label',
name: 'updateLabel'
},
{
label: 'Delete Label',
name: 'deleteLabel'
}
],
show: {
gmailType: ['labels']
}
},
// Thread Actions
{
label: 'Thread Actions',
name: 'threadActions',
type: 'multiOptions',
options: [
{
label: 'List Threads',
name: 'listThreads'
},
{
label: 'Get Thread',
name: 'getThread'
},
{
label: 'Modify Thread',
name: 'modifyThread'
},
{
label: 'Trash Thread',
name: 'trashThread'
},
{
label: 'Untrash Thread',
name: 'untrashThread'
},
{
label: 'Delete Thread',
name: 'deleteThread'
}
],
show: {
gmailType: ['threads']
}
},
// DRAFT PARAMETERS
// List Drafts Parameters
{
label: 'Max Results',
name: 'draftMaxResults',
type: 'number',
description: 'Maximum number of drafts to return',
default: 100,
show: {
draftActions: ['listDrafts']
},
additionalParams: true,
optional: true
},
// Create Draft Parameters
{
label: 'To',
name: 'draftTo',
type: 'string',
description: 'Recipient email address(es), comma-separated',
placeholder: 'user1@example.com,user2@example.com',
show: {
draftActions: ['createDraft']
},
additionalParams: true,
optional: true
},
{
label: 'Subject',
name: 'draftSubject',
type: 'string',
description: 'Email subject',
placeholder: 'Email Subject',
show: {
draftActions: ['createDraft']
},
additionalParams: true,
optional: true
},
{
label: 'Body',
name: 'draftBody',
type: 'string',
description: 'Email body content',
placeholder: 'Email content',
rows: 4,
show: {
draftActions: ['createDraft']
},
additionalParams: true,
optional: true
},
{
label: 'CC',
name: 'draftCc',
type: 'string',
description: 'CC email address(es), comma-separated',
placeholder: 'cc1@example.com,cc2@example.com',
show: {
draftActions: ['createDraft']
},
additionalParams: true,
optional: true
},
{
label: 'BCC',
name: 'draftBcc',
type: 'string',
description: 'BCC email address(es), comma-separated',
placeholder: 'bcc1@example.com,bcc2@example.com',
show: {
draftActions: ['createDraft']
},
additionalParams: true,
optional: true
},
// Draft ID for Get/Update/Send/Delete
{
label: 'Draft ID',
name: 'draftId',
type: 'string',
description: 'ID of the draft',
show: {
draftActions: ['getDraft', 'updateDraft', 'sendDraft', 'deleteDraft']
},
additionalParams: true,
optional: true
},
// Update Draft Parameters
{
label: 'To (Update)',
name: 'draftUpdateTo',
type: 'string',
description: 'Recipient email address(es), comma-separated',
placeholder: 'user1@example.com,user2@example.com',
show: {
draftActions: ['updateDraft']
},
additionalParams: true,
optional: true
},
{
label: 'Subject (Update)',
name: 'draftUpdateSubject',
type: 'string',
description: 'Email subject',
placeholder: 'Email Subject',
show: {
draftActions: ['updateDraft']
},
additionalParams: true,
optional: true
},
{
label: 'Body (Update)',
name: 'draftUpdateBody',
type: 'string',
description: 'Email body content',
placeholder: 'Email content',
rows: 4,
show: {
draftActions: ['updateDraft']
},
additionalParams: true,
optional: true
},
// MESSAGE PARAMETERS
// List Messages Parameters
{
label: 'Max Results',
name: 'messageMaxResults',
type: 'number',
description: 'Maximum number of messages to return',
default: 100,
show: {
messageActions: ['listMessages']
},
additionalParams: true,
optional: true
},
{
label: 'Query',
name: 'messageQuery',
type: 'string',
description: 'Query string for filtering results (Gmail search syntax)',
placeholder: 'is:unread from:example@gmail.com',
show: {
messageActions: ['listMessages']
},
additionalParams: true,
optional: true
},
// Send Message Parameters
{
label: 'To',
name: 'messageTo',
type: 'string',
description: 'Recipient email address(es), comma-separated',
placeholder: 'user1@example.com,user2@example.com',
show: {
messageActions: ['sendMessage']
},
additionalParams: true,
optional: true
},
{
label: 'Subject',
name: 'messageSubject',
type: 'string',
description: 'Email subject',
placeholder: 'Email Subject',
show: {
messageActions: ['sendMessage']
},
additionalParams: true,
optional: true
},
{
label: 'Body',
name: 'messageBody',
type: 'string',
description: 'Email body content',
placeholder: 'Email content',
rows: 4,
show: {
messageActions: ['sendMessage']
},
additionalParams: true,
optional: true
},
{
label: 'CC',
name: 'messageCc',
type: 'string',
description: 'CC email address(es), comma-separated',
placeholder: 'cc1@example.com,cc2@example.com',
show: {
messageActions: ['sendMessage']
},
additionalParams: true,
optional: true
},
{
label: 'BCC',
name: 'messageBcc',
type: 'string',
description: 'BCC email address(es), comma-separated',
placeholder: 'bcc1@example.com,bcc2@example.com',
show: {
messageActions: ['sendMessage']
},
additionalParams: true,
optional: true
},
// Message ID for Get/Modify/Trash/Untrash/Delete
{
label: 'Message ID',
name: 'messageId',
type: 'string',
description: 'ID of the message',
show: {
messageActions: ['getMessage', 'modifyMessage', 'trashMessage', 'untrashMessage', 'deleteMessage']
},
additionalParams: true,
optional: true
},
// Message Label Modification
{
label: 'Add Label IDs',
name: 'messageAddLabelIds',
type: 'string',
description: 'Comma-separated label IDs to add',
placeholder: 'INBOX,STARRED',
show: {
messageActions: ['modifyMessage']
},
additionalParams: true,
optional: true
},
{
label: 'Remove Label IDs',
name: 'messageRemoveLabelIds',
type: 'string',
description: 'Comma-separated label IDs to remove',
placeholder: 'UNREAD,SPAM',
show: {
messageActions: ['modifyMessage']
},
additionalParams: true,
optional: true
},
// LABEL PARAMETERS
// Create Label Parameters
{
label: 'Label Name',
name: 'labelName',
type: 'string',
description: 'Name of the label',
placeholder: 'Important',
show: {
labelActions: ['createLabel', 'updateLabel']
},
additionalParams: true,
optional: true
},
{
label: 'Label Color',
name: 'labelColor',
type: 'string',
description: 'Color of the label (hex color code)',
placeholder: '#ff0000',
show: {
labelActions: ['createLabel', 'updateLabel']
},
additionalParams: true,
optional: true
},
// Label ID for Get/Update/Delete
{
label: 'Label ID',
name: 'labelId',
type: 'string',
description: 'ID of the label',
show: {
labelActions: ['getLabel', 'updateLabel', 'deleteLabel']
},
additionalParams: true,
optional: true
},
// THREAD PARAMETERS
// List Threads Parameters
{
label: 'Max Results',
name: 'threadMaxResults',
type: 'number',
description: 'Maximum number of threads to return',
default: 100,
show: {
threadActions: ['listThreads']
},
additionalParams: true,
optional: true
},
{
label: 'Query',
name: 'threadQuery',
type: 'string',
description: 'Query string for filtering results (Gmail search syntax)',
placeholder: 'is:unread from:example@gmail.com',
show: {
threadActions: ['listThreads']
},
additionalParams: true,
optional: true
},
// Thread ID for Get/Modify/Trash/Untrash/Delete
{
label: 'Thread ID',
name: 'threadId',
type: 'string',
description: 'ID of the thread',
show: {
threadActions: ['getThread', 'modifyThread', 'trashThread', 'untrashThread', 'deleteThread']
},
additionalParams: true,
optional: true
},
// Thread Label Modification
{
label: 'Add Label IDs',
name: 'threadAddLabelIds',
type: 'string',
description: 'Comma-separated label IDs to add',
placeholder: 'INBOX,STARRED',
show: {
threadActions: ['modifyThread']
},
additionalParams: true,
optional: true
},
{
label: 'Remove Label IDs',
name: 'threadRemoveLabelIds',
type: 'string',
description: 'Comma-separated label IDs to remove',
placeholder: 'UNREAD,SPAM',
show: {
threadActions: ['modifyThread']
},
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');
}
// Get all actions based on type
const gmailType = nodeData.inputs?.gmailType;
let actions = [];
if (gmailType === 'drafts') {
actions = (0, utils_1.convertMultiOptionsToStringArray)(nodeData.inputs?.draftActions);
}
else if (gmailType === 'messages') {
actions = (0, utils_1.convertMultiOptionsToStringArray)(nodeData.inputs?.messageActions);
}
else if (gmailType === 'labels') {
actions = (0, utils_1.convertMultiOptionsToStringArray)(nodeData.inputs?.labelActions);
}
else if (gmailType === 'threads') {
actions = (0, utils_1.convertMultiOptionsToStringArray)(nodeData.inputs?.threadActions);
}
const defaultParams = this.transformNodeInputsToToolArgs(nodeData);
// Create and return tools based on selected actions
const tools = (0, core_1.createGmailTools)({
actions,
accessToken,
defaultParams
});
return tools;
}
transformNodeInputsToToolArgs(nodeData) {
// Collect default parameters from inputs
const defaultParams = {};
// Draft parameters
if (nodeData.inputs?.draftMaxResults)
defaultParams.draftMaxResults = nodeData.inputs.draftMaxResults;
if (nodeData.inputs?.draftTo)
defaultParams.draftTo = nodeData.inputs.draftTo;
if (nodeData.inputs?.draftSubject)
defaultParams.draftSubject = nodeData.inputs.draftSubject;
if (nodeData.inputs?.draftBody)
defaultParams.draftBody = nodeData.inputs.draftBody;
if (nodeData.inputs?.draftCc)
defaultParams.draftCc = nodeData.inputs.draftCc;
if (nodeData.inputs?.draftBcc)
defaultParams.draftBcc = nodeData.inputs.draftBcc;
if (nodeData.inputs?.draftId)
defaultParams.draftId = nodeData.inputs.draftId;
if (nodeData.inputs?.draftUpdateTo)
defaultParams.draftUpdateTo = nodeData.inputs.draftUpdateTo;
if (nodeData.inputs?.draftUpdateSubject)
defaultParams.draftUpdateSubject = nodeData.inputs.draftUpdateSubject;
if (nodeData.inputs?.draftUpdateBody)
defaultParams.draftUpdateBody = nodeData.inputs.draftUpdateBody;
// Message parameters
if (nodeData.inputs?.messageMaxResults)
defaultParams.messageMaxResults = nodeData.inputs.messageMaxResults;
if (nodeData.inputs?.messageQuery)
defaultParams.messageQuery = nodeData.inputs.messageQuery;
if (nodeData.inputs?.messageTo)
defaultParams.messageTo = nodeData.inputs.messageTo;
if (nodeData.inputs?.messageSubject)
defaultParams.messageSubject = nodeData.inputs.messageSubject;
if (nodeData.inputs?.messageBody)
defaultParams.messageBody = nodeData.inputs.messageBody;
if (nodeData.inputs?.messageCc)
defaultParams.messageCc = nodeData.inputs.messageCc;
if (nodeData.inputs?.messageBcc)
defaultParams.messageBcc = nodeData.inputs.messageBcc;
if (nodeData.inputs?.messageId)
defaultParams.messageId = nodeData.inputs.messageId;
if (nodeData.inputs?.messageAddLabelIds)
defaultParams.messageAddLabelIds = nodeData.inputs.messageAddLabelIds;
if (nodeData.inputs?.messageRemoveLabelIds)
defaultParams.messageRemoveLabelIds = nodeData.inputs.messageRemoveLabelIds;
// Label parameters
if (nodeData.inputs?.labelName)
defaultParams.labelName = nodeData.inputs.labelName;
if (nodeData.inputs?.labelColor)
defaultParams.labelColor = nodeData.inputs.labelColor;
if (nodeData.inputs?.labelId)
defaultParams.labelId = nodeData.inputs.labelId;
// Thread parameters
if (nodeData.inputs?.threadMaxResults)
defaultParams.threadMaxResults = nodeData.inputs.threadMaxResults;
if (nodeData.inputs?.threadQuery)
defaultParams.threadQuery = nodeData.inputs.threadQuery;
if (nodeData.inputs?.threadId)
defaultParams.threadId = nodeData.inputs.threadId;
if (nodeData.inputs?.threadAddLabelIds)
defaultParams.threadAddLabelIds = nodeData.inputs.threadAddLabelIds;
if (nodeData.inputs?.threadRemoveLabelIds)
defaultParams.threadRemoveLabelIds = nodeData.inputs.threadRemoveLabelIds;
return defaultParams;
}
}
module.exports = { nodeClass: Gmail_Tools };
//# sourceMappingURL=Gmail.js.map