n8n-nodes-feishu-lark
Version:
n8n custom nodes for n8n to interact with Feishu/Lark, including Lark Bot, Lark MCP, and Lark Trigger.
134 lines • 5.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LarkTrigger = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const wsclient_1 = require("../wsclient");
const dispatcher_1 = require("../wsclient/dispatcher");
class LarkTrigger {
constructor() {
this.description = {
displayName: 'Lark Trigger',
name: 'larkTrigger',
icon: 'file:lark_icon.svg',
group: ['trigger'],
version: [1],
defaultVersion: 1,
subtitle: '=Events: {{$parameter["events"].join(", ")}}',
description: 'Starts the workflow on Lark events',
defaults: {
name: 'Lark Trigger',
},
inputs: [],
outputs: ["main"],
credentials: [
{
name: "larkApi",
required: true,
},
],
properties: [
{
displayName: 'Due to Lark API limitations, you can use just one Lark trigger for each lark bot at a time',
name: 'LarkTriggerNotice',
type: 'notice',
default: '',
},
{
displayName: 'Trigger On',
name: 'events',
type: 'multiOptions',
required: true,
options: [
{
name: 'Add Reaction for Message(新增消息表情回复)',
value: 'im.message.reaction.created_v1',
description: 'This event will be triggered when a reaction is added to a message',
},
{
name: 'Any Event(所有事件)',
value: 'any_event',
description: 'Triggers on any event',
},
{
name: 'Base App Field Changed(多维表格字段变更)',
value: 'drive.file.bitable_field_changed_v1',
description: 'This event is triggered when a subscribed Base app field changes',
},
{
name: 'Base App Record Changed(多维表格记录变更)',
value: 'drive.file.bitable_record_changed_v1',
description: 'This event is triggered when a subscribed multi-dimensional table record changes',
},
{
name: 'Card Postback Interaction(卡片回传交互)',
value: 'card.action.trigger',
description: 'This callback is triggered when the user clicks on the component configured with postback interaction on the card',
},
{
name: 'Delete Reaction for Message(删除消息表情回复)',
value: 'im.message.reaction.deleted_v1',
description: 'This event will be triggered when the message reaction is deleted',
},
{
name: 'Receive Message(接收消息)',
value: "im.message.receive_v1",
description: 'This event is triggered when the bot receives a message sent by a user',
},
],
default: [],
},
],
};
}
async trigger() {
const credentials = await this.getCredentials("larkApi");
if (!(credentials.appid && credentials.appsecret)) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Missing required Lark credentials');
}
const appId = credentials['appid'];
const appSecret = credentials['appsecret'];
const baseUrl = credentials['baseUrl'];
const wsClient = new wsclient_1.WSClient({
appId,
appSecret,
domain: `${baseUrl}`,
logger: this.logger,
helpers: this.helpers,
});
const closeFunction = async () => {
await wsClient.stop();
};
const startWsClient = async () => {
const events = this.getNodeParameter('events', []);
const isAnyEvent = events.includes('any_event');
const handlers = {};
for (const event of events) {
handlers[event] = async (data) => {
let donePromise = undefined;
donePromise = this.helpers.createDeferredPromise();
this.emit([this.helpers.returnJsonArray(data)], undefined, donePromise);
this.logger.info(`Handled event: ${event}`);
};
}
const eventDispatcher = new dispatcher_1.EventDispatcher({ logger: this.logger, isAnyEvent }).register(handlers);
await wsClient.start({ eventDispatcher });
};
if (this.getMode() !== 'manual') {
await startWsClient();
return {
closeFunction,
};
}
else {
const manualTriggerFunction = async () => {
await startWsClient();
};
return {
closeFunction,
manualTriggerFunction,
};
}
}
}
exports.LarkTrigger = LarkTrigger;
//# sourceMappingURL=LarkTrigger.node.js.map