2023-01-27 03:22:44 -08:00
import type {
2023-03-09 09:13:15 -08:00
IWebhookFunctions ,
2020-12-02 02:24:25 -08:00
IDataObject ,
2020-12-02 02:54:10 -08:00
IHookFunctions ,
2020-12-02 02:24:25 -08:00
INodeType ,
2020-12-02 02:54:10 -08:00
INodeTypeDescription ,
2020-12-02 02:24:25 -08:00
IWebhookResponseData ,
} from 'n8n-workflow' ;
2022-10-21 09:46:31 -07:00
import { eventsDescription } from './descriptions/EventsDescription' ;
2020-12-02 02:24:25 -08:00
export class TheHiveTrigger implements INodeType {
description : INodeTypeDescription = {
displayName : 'TheHive Trigger' ,
name : 'theHiveTrigger' ,
2021-03-18 05:06:51 -07:00
icon : 'file:thehive.svg' ,
2020-12-02 02:24:25 -08:00
group : [ 'trigger' ] ,
2022-10-21 09:46:31 -07:00
version : [ 1 , 2 ] ,
2021-07-03 05:40:16 -07:00
description : 'Starts the workflow when TheHive events occur' ,
2020-12-02 02:24:25 -08:00
defaults : {
name : 'TheHive Trigger' ,
} ,
inputs : [ ] ,
outputs : [ 'main' ] ,
webhooks : [
{
name : 'default' ,
httpMethod : 'POST' ,
2023-03-03 09:49:19 -08:00
responseMode : 'onReceived' ,
2020-12-02 02:24:25 -08:00
path : 'webhook' ,
} ,
] ,
2023-12-21 00:40:37 -08:00
properties : [
{
displayName :
'You must set up the webhook in TheHive — instructions <a href="https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.thehivetrigger/#configure-a-webhook-in-thehive" target="_blank">here</a>' ,
name : 'notice' ,
type : 'notice' ,
default : '' ,
} ,
. . . eventsDescription ,
] ,
2020-12-02 02:24:25 -08:00
} ;
2022-12-02 12:54:28 -08:00
2020-12-02 02:24:25 -08:00
webhookMethods = {
default : {
async checkExists ( this : IHookFunctions ) : Promise < boolean > {
return true ;
} ,
async create ( this : IHookFunctions ) : Promise < boolean > {
return true ;
} ,
async delete ( this : IHookFunctions ) : Promise < boolean > {
return true ;
} ,
} ,
} ;
async webhook ( this : IWebhookFunctions ) : Promise < IWebhookResponseData > {
// Get the request body
const bodyData = this . getBodyData ( ) ;
const events = this . getNodeParameter ( 'events' , [ ] ) as string [ ] ;
2020-12-02 02:54:10 -08:00
if ( ! bodyData . operation || ! bodyData . objectType ) {
2020-12-02 02:24:25 -08:00
// Don't start the workflow if mandatory fields are not specified
return { } ;
}
// Don't start the workflow if the event is not fired
2020-12-19 09:19:12 -08:00
// Replace Creation with Create for TheHive 3 support
const operation = ( bodyData . operation as string ) . replace ( 'Creation' , 'Create' ) ;
const event = ` ${ ( bodyData . objectType as string ) . toLowerCase ( ) } _ ${ operation . toLowerCase ( ) } ` ;
2022-10-21 09:46:31 -07:00
2020-12-02 02:54:10 -08:00
if ( events . indexOf ( '*' ) === - 1 && events . indexOf ( event ) === - 1 ) {
2020-12-02 02:24:25 -08:00
return { } ;
}
// The data to return and so start the workflow with
const returnData : IDataObject [ ] = [ ] ;
2022-08-17 08:50:24 -07:00
returnData . push ( {
event ,
body : this.getBodyData ( ) ,
headers : this.getHeaderData ( ) ,
query : this.getQueryData ( ) ,
} ) ;
2020-12-02 02:24:25 -08:00
return {
2022-08-17 08:50:24 -07:00
workflowData : [ this . helpers . returnJsonArray ( returnData ) ] ,
2020-12-02 02:24:25 -08:00
} ;
}
}