mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-16 01:24:05 -08:00
99 lines
2.3 KiB
TypeScript
99 lines
2.3 KiB
TypeScript
import {
|
|
type IPollFunctions,
|
|
type INodeExecutionData,
|
|
type INodeType,
|
|
type INodeTypeDescription,
|
|
NodeConnectionType,
|
|
} from 'n8n-workflow';
|
|
|
|
import { DateTime } from 'luxon';
|
|
|
|
import { properties as messageProperties } from './trigger/MessageDescription';
|
|
|
|
import { getPollResponse } from './trigger/GenericFunctions';
|
|
import { loadOptions } from './v2/methods';
|
|
|
|
export class MicrosoftOutlookTrigger implements INodeType {
|
|
description: INodeTypeDescription = {
|
|
displayName: 'Microsoft Outlook Trigger',
|
|
name: 'microsoftOutlookTrigger',
|
|
icon: 'file:outlook.svg',
|
|
group: ['trigger'],
|
|
version: 1,
|
|
description:
|
|
'Fetches emails from Microsoft Outlook and starts the workflow on specified polling intervals.',
|
|
subtitle: '={{"Microsoft Outlook Trigger"}}',
|
|
defaults: {
|
|
name: 'Microsoft Outlook Trigger',
|
|
},
|
|
credentials: [
|
|
{
|
|
name: 'microsoftOutlookOAuth2Api',
|
|
required: true,
|
|
},
|
|
],
|
|
polling: true,
|
|
inputs: [],
|
|
outputs: [NodeConnectionType.Main],
|
|
properties: [
|
|
{
|
|
displayName: 'Trigger On',
|
|
name: 'event',
|
|
type: 'options',
|
|
default: 'messageReceived',
|
|
options: [
|
|
{
|
|
name: 'Message Received',
|
|
value: 'messageReceived',
|
|
},
|
|
],
|
|
},
|
|
...messageProperties,
|
|
],
|
|
};
|
|
|
|
methods = { loadOptions };
|
|
|
|
async poll(this: IPollFunctions): Promise<INodeExecutionData[][] | null> {
|
|
const webhookData = this.getWorkflowStaticData('node');
|
|
let responseData;
|
|
|
|
const now = DateTime.now().toISO();
|
|
const startDate = (webhookData.lastTimeChecked as string) || now;
|
|
const endDate = now;
|
|
try {
|
|
const pollStartDate = startDate;
|
|
const pollEndDate = endDate;
|
|
|
|
responseData = await getPollResponse.call(this, pollStartDate, pollEndDate);
|
|
|
|
if (!responseData?.length) {
|
|
webhookData.lastTimeChecked = endDate;
|
|
return null;
|
|
}
|
|
} catch (error) {
|
|
if (this.getMode() === 'manual' || !webhookData.lastTimeChecked) {
|
|
throw error;
|
|
}
|
|
const workflow = this.getWorkflow();
|
|
const node = this.getNode();
|
|
this.logger.error(
|
|
`There was a problem in '${node.name}' node in workflow '${workflow.id}': '${error.description}'`,
|
|
{
|
|
node: node.name,
|
|
workflowId: workflow.id,
|
|
error,
|
|
},
|
|
);
|
|
}
|
|
|
|
webhookData.lastTimeChecked = endDate;
|
|
|
|
if (Array.isArray(responseData) && responseData.length) {
|
|
return [responseData];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|