UNPKG

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
"use strict"; 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