n8n-nodes-feishu-fork
Version:
n8n custom nodes for n8n to interact with Feishu/Lark, including Lark Bot, Lark MCP, and Lark Trigger.
114 lines • 4.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const n8n_workflow_1 = require("n8n-workflow");
const GenericFunctions_1 = require("../../GenericFunctions");
const wording_1 = require("../../../help/wording");
const description_1 = require("../../../help/description");
exports.default = {
name: wording_1.WORDING.ParseMessageContent,
value: "parseContent",
order: 201,
options: [description_1.DESCRIPTIONS.RECEIVE_MESSAGE_TYPES, description_1.DESCRIPTIONS.DOWNLOAD_RESOURCE],
async call(index) {
const inputData = this.getInputData();
if (inputData.length === 0) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No input data found');
}
const item = inputData[index].json;
if (item.event_type !== "im.message.receive_v1") {
this.logger.debug('Unsupported event type for parse message content', {
eventType: item.event_type,
itemIndex: index,
});
return {
outputType: "none",
};
}
const messageTypes = this.getNodeParameter('messageTypes', index, []);
const downloadResource = this.getNodeParameter('downloadResource', index, false);
const returnData = Array.from({ length: messageTypes.length }, () => []);
const { message } = item;
message.content = JSON.parse(message.content || '{}');
if (downloadResource) {
switch (message.message_type) {
case "image":
const imageContent = message.content;
const imageData = await GenericFunctions_1.larkApiRequestMessageResourceData.call(this, {
type: 'image',
messageId: message.message_id,
key: imageContent.image_key,
});
message.content = { ...imageContent, data: imageData };
break;
case "file":
case "audio":
case "media":
const fileContent = message.content;
const fileData = await GenericFunctions_1.larkApiRequestMessageResourceData.call(this, {
type: 'file',
messageId: message.message_id,
key: fileContent.file_key,
});
message.content = { ...fileContent, data: fileData };
break;
case "post":
message.content = await handleRichTextContent.call(this, message);
break;
default:
}
}
const outputIndex = messageTypes.indexOf(message.message_type);
if (outputIndex === -1) {
this.logger.debug('Message type not selected for parsing', {
messageType: message.message_type,
itemIndex: index,
});
return {
outputType: "none",
};
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ ...item }), { itemData: { item: index } });
returnData[outputIndex].push(...executionData);
return {
outputType: "multiple",
outputData: returnData,
};
},
};
async function handleRichTextContent(message) {
const richTextContent = message.content;
if (Array.isArray(richTextContent.content)) {
const processedContent = await Promise.all(richTextContent.content
.filter((line) => line.length > 0)
.map(async (line) => {
return await Promise.all(line.map(async (element) => {
const { tag } = element;
if (tag !== 'img' && tag !== 'media') {
return element;
}
let type = '';
let key = '';
if (tag === 'img') {
type = 'image';
key = element.image_key;
}
else if (tag === 'media') {
type = 'file';
key = element.file_key;
}
const data = await GenericFunctions_1.larkApiRequestMessageResourceData.call(this, {
type,
messageId: message.message_id,
key,
});
return {
...element,
data,
};
}));
}));
return { ...richTextContent, content: processedContent };
}
return richTextContent;
}
//# sourceMappingURL=ContentParse.operation.js.map