Files
sim/apps/sim/triggers/registry.ts
Waleed 4cb0f4a2b0 feat(ashby): add webhook triggers with automatic lifecycle management (#3548)
* feat(ashby): add webhook triggers with automatic lifecycle management

* fix(ashby): address PR review comments

- Restore mode: 'advanced' on updateName sub-block
- Move action after spread in formatWebhookInput to prevent override
- Remove generic webhook trigger (Ashby requires webhookType)

* fix(ashby): throw on unknown triggerId, always include webhookType

* fix(ashby): address PR review feedback - paramVisibility, stageType, json catch

- Add paramVisibility: 'user-only' to apiKey extra field
- Remove stageType from candidateStageChange/candidateHire outputs (TriggerOutput type conflict with 'type' field)
- Add .catch() fallback to .json() parse in createAshbyWebhookSubscription
- Fix candidateStageChange outputs to match actual Ashby application payload structure

* fix(ashby): add missing applicationSubmit outputs, fix delete log branches

- Add candidate, currentInterviewStage, job to applicationSubmit outputs
- Split delete webhook log into ok/404/error branches for accurate logging

* fix(ashby): drain response body on delete, clarify decidedAt description

- Cancel unconsumed response body in ok/404 delete branches to free connections
- Update decidedAt description to note it's typically null at offer creation

* fix(ashby): eliminate double-logging, fix hiringTeam JSDoc

- Remove pre-throw warn/error logs; catch block is single logging point
- Remove hiringTeam from candidateHire JSDoc (TriggerOutput doesn't support arrays)
2026-03-12 15:43:56 -07:00

320 lines
13 KiB
TypeScript

import { airtableWebhookTrigger } from '@/triggers/airtable'
import {
ashbyApplicationSubmitTrigger,
ashbyCandidateDeleteTrigger,
ashbyCandidateHireTrigger,
ashbyCandidateStageChangeTrigger,
ashbyJobCreateTrigger,
ashbyOfferCreateTrigger,
} from '@/triggers/ashby'
import {
attioCommentCreatedTrigger,
attioCommentDeletedTrigger,
attioCommentResolvedTrigger,
attioCommentUnresolvedTrigger,
attioListEntryCreatedTrigger,
attioListEntryDeletedTrigger,
attioListEntryUpdatedTrigger,
attioNoteCreatedTrigger,
attioNoteDeletedTrigger,
attioNoteUpdatedTrigger,
attioRecordCreatedTrigger,
attioRecordDeletedTrigger,
attioRecordMergedTrigger,
attioRecordUpdatedTrigger,
attioTaskCreatedTrigger,
attioTaskDeletedTrigger,
attioTaskUpdatedTrigger,
attioWebhookTrigger,
} from '@/triggers/attio'
import {
calcomBookingCancelledTrigger,
calcomBookingCreatedTrigger,
calcomBookingPaidTrigger,
calcomBookingRejectedTrigger,
calcomBookingRequestedTrigger,
calcomBookingRescheduledTrigger,
calcomMeetingEndedTrigger,
calcomRecordingReadyTrigger,
calcomWebhookTrigger,
} from '@/triggers/calcom'
import {
calendlyInviteeCanceledTrigger,
calendlyInviteeCreatedTrigger,
calendlyRoutingFormSubmittedTrigger,
calendlyWebhookTrigger,
} from '@/triggers/calendly'
import {
circlebackMeetingCompletedTrigger,
circlebackMeetingNotesTrigger,
circlebackWebhookTrigger,
} from '@/triggers/circleback'
import {
confluenceAttachmentCreatedTrigger,
confluenceAttachmentRemovedTrigger,
confluenceBlogCreatedTrigger,
confluenceBlogRemovedTrigger,
confluenceBlogUpdatedTrigger,
confluenceCommentCreatedTrigger,
confluenceCommentRemovedTrigger,
confluenceLabelAddedTrigger,
confluenceLabelRemovedTrigger,
confluencePageCreatedTrigger,
confluencePageMovedTrigger,
confluencePageRemovedTrigger,
confluencePageUpdatedTrigger,
confluenceSpaceCreatedTrigger,
confluenceSpaceUpdatedTrigger,
confluenceWebhookTrigger,
} from '@/triggers/confluence'
import { fathomNewMeetingTrigger, fathomWebhookTrigger } from '@/triggers/fathom'
import { firefliesTranscriptionCompleteTrigger } from '@/triggers/fireflies'
import { genericWebhookTrigger } from '@/triggers/generic'
import {
githubIssueClosedTrigger,
githubIssueCommentTrigger,
githubIssueOpenedTrigger,
githubPRClosedTrigger,
githubPRCommentTrigger,
githubPRMergedTrigger,
githubPROpenedTrigger,
githubPRReviewedTrigger,
githubPushTrigger,
githubReleasePublishedTrigger,
githubWebhookTrigger,
githubWorkflowRunTrigger,
} from '@/triggers/github'
import { gmailPollingTrigger } from '@/triggers/gmail'
import { googleFormsWebhookTrigger } from '@/triggers/googleforms'
import {
grainHighlightCreatedTrigger,
grainHighlightUpdatedTrigger,
grainRecordingCreatedTrigger,
grainRecordingUpdatedTrigger,
grainStoryCreatedTrigger,
grainWebhookTrigger,
} from '@/triggers/grain'
import {
hubspotCompanyCreatedTrigger,
hubspotCompanyDeletedTrigger,
hubspotCompanyPropertyChangedTrigger,
hubspotContactCreatedTrigger,
hubspotContactDeletedTrigger,
hubspotContactPrivacyDeletedTrigger,
hubspotContactPropertyChangedTrigger,
hubspotConversationCreationTrigger,
hubspotConversationDeletionTrigger,
hubspotConversationNewMessageTrigger,
hubspotConversationPrivacyDeletionTrigger,
hubspotConversationPropertyChangedTrigger,
hubspotDealCreatedTrigger,
hubspotDealDeletedTrigger,
hubspotDealPropertyChangedTrigger,
hubspotTicketCreatedTrigger,
hubspotTicketDeletedTrigger,
hubspotTicketPropertyChangedTrigger,
} from '@/triggers/hubspot'
import { imapPollingTrigger } from '@/triggers/imap'
import {
jiraIssueCommentedTrigger,
jiraIssueCreatedTrigger,
jiraIssueDeletedTrigger,
jiraIssueUpdatedTrigger,
jiraWebhookTrigger,
jiraWorklogCreatedTrigger,
} from '@/triggers/jira'
import {
lemlistEmailBouncedTrigger,
lemlistEmailClickedTrigger,
lemlistEmailOpenedTrigger,
lemlistEmailRepliedTrigger,
lemlistEmailSentTrigger,
lemlistInterestedTrigger,
lemlistLinkedInRepliedTrigger,
lemlistNotInterestedTrigger,
lemlistWebhookTrigger,
} from '@/triggers/lemlist'
import {
linearCommentCreatedTrigger,
linearCommentUpdatedTrigger,
linearCustomerRequestCreatedTrigger,
linearCustomerRequestUpdatedTrigger,
linearCycleCreatedTrigger,
linearCycleUpdatedTrigger,
linearIssueCreatedTrigger,
linearIssueRemovedTrigger,
linearIssueUpdatedTrigger,
linearLabelCreatedTrigger,
linearLabelUpdatedTrigger,
linearProjectCreatedTrigger,
linearProjectUpdateCreatedTrigger,
linearProjectUpdatedTrigger,
linearWebhookTrigger,
} from '@/triggers/linear'
import {
microsoftTeamsChatSubscriptionTrigger,
microsoftTeamsWebhookTrigger,
} from '@/triggers/microsoftteams'
import { outlookPollingTrigger } from '@/triggers/outlook'
import { rssPollingTrigger } from '@/triggers/rss'
import { slackWebhookTrigger } from '@/triggers/slack'
import { stripeWebhookTrigger } from '@/triggers/stripe'
import { telegramWebhookTrigger } from '@/triggers/telegram'
import { twilioVoiceWebhookTrigger } from '@/triggers/twilio_voice'
import { typeformWebhookTrigger } from '@/triggers/typeform'
import type { TriggerRegistry } from '@/triggers/types'
import {
webflowCollectionItemChangedTrigger,
webflowCollectionItemCreatedTrigger,
webflowCollectionItemDeletedTrigger,
webflowFormSubmissionTrigger,
} from '@/triggers/webflow'
import { whatsappWebhookTrigger } from '@/triggers/whatsapp'
export const TRIGGER_REGISTRY: TriggerRegistry = {
slack_webhook: slackWebhookTrigger,
airtable_webhook: airtableWebhookTrigger,
ashby_application_submit: ashbyApplicationSubmitTrigger,
ashby_candidate_stage_change: ashbyCandidateStageChangeTrigger,
ashby_candidate_hire: ashbyCandidateHireTrigger,
ashby_candidate_delete: ashbyCandidateDeleteTrigger,
ashby_job_create: ashbyJobCreateTrigger,
ashby_offer_create: ashbyOfferCreateTrigger,
attio_webhook: attioWebhookTrigger,
attio_record_created: attioRecordCreatedTrigger,
attio_record_updated: attioRecordUpdatedTrigger,
attio_record_deleted: attioRecordDeletedTrigger,
attio_record_merged: attioRecordMergedTrigger,
attio_note_created: attioNoteCreatedTrigger,
attio_note_updated: attioNoteUpdatedTrigger,
attio_note_deleted: attioNoteDeletedTrigger,
attio_task_created: attioTaskCreatedTrigger,
attio_task_updated: attioTaskUpdatedTrigger,
attio_task_deleted: attioTaskDeletedTrigger,
attio_comment_created: attioCommentCreatedTrigger,
attio_comment_resolved: attioCommentResolvedTrigger,
attio_comment_unresolved: attioCommentUnresolvedTrigger,
attio_comment_deleted: attioCommentDeletedTrigger,
attio_list_entry_created: attioListEntryCreatedTrigger,
attio_list_entry_updated: attioListEntryUpdatedTrigger,
attio_list_entry_deleted: attioListEntryDeletedTrigger,
calendly_webhook: calendlyWebhookTrigger,
calendly_invitee_created: calendlyInviteeCreatedTrigger,
calendly_invitee_canceled: calendlyInviteeCanceledTrigger,
calendly_routing_form_submitted: calendlyRoutingFormSubmittedTrigger,
calcom_booking_created: calcomBookingCreatedTrigger,
calcom_booking_cancelled: calcomBookingCancelledTrigger,
calcom_booking_rescheduled: calcomBookingRescheduledTrigger,
calcom_booking_requested: calcomBookingRequestedTrigger,
calcom_booking_rejected: calcomBookingRejectedTrigger,
calcom_booking_paid: calcomBookingPaidTrigger,
calcom_meeting_ended: calcomMeetingEndedTrigger,
calcom_recording_ready: calcomRecordingReadyTrigger,
calcom_webhook: calcomWebhookTrigger,
confluence_webhook: confluenceWebhookTrigger,
confluence_page_created: confluencePageCreatedTrigger,
confluence_page_updated: confluencePageUpdatedTrigger,
confluence_page_removed: confluencePageRemovedTrigger,
confluence_page_moved: confluencePageMovedTrigger,
confluence_comment_created: confluenceCommentCreatedTrigger,
confluence_comment_removed: confluenceCommentRemovedTrigger,
confluence_blog_created: confluenceBlogCreatedTrigger,
confluence_blog_updated: confluenceBlogUpdatedTrigger,
confluence_blog_removed: confluenceBlogRemovedTrigger,
confluence_attachment_created: confluenceAttachmentCreatedTrigger,
confluence_attachment_removed: confluenceAttachmentRemovedTrigger,
confluence_space_created: confluenceSpaceCreatedTrigger,
confluence_space_updated: confluenceSpaceUpdatedTrigger,
confluence_label_added: confluenceLabelAddedTrigger,
confluence_label_removed: confluenceLabelRemovedTrigger,
generic_webhook: genericWebhookTrigger,
github_webhook: githubWebhookTrigger,
github_issue_opened: githubIssueOpenedTrigger,
github_issue_closed: githubIssueClosedTrigger,
github_issue_comment: githubIssueCommentTrigger,
github_pr_opened: githubPROpenedTrigger,
github_pr_closed: githubPRClosedTrigger,
github_pr_merged: githubPRMergedTrigger,
github_pr_comment: githubPRCommentTrigger,
github_pr_reviewed: githubPRReviewedTrigger,
github_push: githubPushTrigger,
github_release_published: githubReleasePublishedTrigger,
github_workflow_run: githubWorkflowRunTrigger,
fireflies_transcription_complete: firefliesTranscriptionCompleteTrigger,
fathom_new_meeting: fathomNewMeetingTrigger,
fathom_webhook: fathomWebhookTrigger,
gmail_poller: gmailPollingTrigger,
grain_webhook: grainWebhookTrigger,
grain_recording_created: grainRecordingCreatedTrigger,
grain_recording_updated: grainRecordingUpdatedTrigger,
grain_highlight_created: grainHighlightCreatedTrigger,
grain_highlight_updated: grainHighlightUpdatedTrigger,
grain_story_created: grainStoryCreatedTrigger,
circleback_meeting_completed: circlebackMeetingCompletedTrigger,
circleback_meeting_notes: circlebackMeetingNotesTrigger,
circleback_webhook: circlebackWebhookTrigger,
jira_webhook: jiraWebhookTrigger,
jira_issue_created: jiraIssueCreatedTrigger,
jira_issue_updated: jiraIssueUpdatedTrigger,
jira_issue_deleted: jiraIssueDeletedTrigger,
jira_issue_commented: jiraIssueCommentedTrigger,
jira_worklog_created: jiraWorklogCreatedTrigger,
lemlist_webhook: lemlistWebhookTrigger,
lemlist_email_replied: lemlistEmailRepliedTrigger,
lemlist_email_opened: lemlistEmailOpenedTrigger,
lemlist_email_clicked: lemlistEmailClickedTrigger,
lemlist_email_sent: lemlistEmailSentTrigger,
lemlist_email_bounced: lemlistEmailBouncedTrigger,
lemlist_linkedin_replied: lemlistLinkedInRepliedTrigger,
lemlist_interested: lemlistInterestedTrigger,
lemlist_not_interested: lemlistNotInterestedTrigger,
linear_webhook: linearWebhookTrigger,
linear_issue_created: linearIssueCreatedTrigger,
linear_issue_updated: linearIssueUpdatedTrigger,
linear_issue_removed: linearIssueRemovedTrigger,
linear_comment_created: linearCommentCreatedTrigger,
linear_comment_updated: linearCommentUpdatedTrigger,
linear_project_created: linearProjectCreatedTrigger,
linear_project_updated: linearProjectUpdatedTrigger,
linear_cycle_created: linearCycleCreatedTrigger,
linear_cycle_updated: linearCycleUpdatedTrigger,
linear_label_created: linearLabelCreatedTrigger,
linear_label_updated: linearLabelUpdatedTrigger,
linear_project_update_created: linearProjectUpdateCreatedTrigger,
linear_customer_request_created: linearCustomerRequestCreatedTrigger,
linear_customer_request_updated: linearCustomerRequestUpdatedTrigger,
microsoftteams_webhook: microsoftTeamsWebhookTrigger,
microsoftteams_chat_subscription: microsoftTeamsChatSubscriptionTrigger,
outlook_poller: outlookPollingTrigger,
rss_poller: rssPollingTrigger,
stripe_webhook: stripeWebhookTrigger,
telegram_webhook: telegramWebhookTrigger,
typeform_webhook: typeformWebhookTrigger,
whatsapp_webhook: whatsappWebhookTrigger,
google_forms_webhook: googleFormsWebhookTrigger,
twilio_voice_webhook: twilioVoiceWebhookTrigger,
webflow_collection_item_created: webflowCollectionItemCreatedTrigger,
webflow_collection_item_changed: webflowCollectionItemChangedTrigger,
webflow_collection_item_deleted: webflowCollectionItemDeletedTrigger,
webflow_form_submission: webflowFormSubmissionTrigger,
hubspot_contact_created: hubspotContactCreatedTrigger,
hubspot_contact_deleted: hubspotContactDeletedTrigger,
hubspot_contact_privacy_deleted: hubspotContactPrivacyDeletedTrigger,
hubspot_contact_property_changed: hubspotContactPropertyChangedTrigger,
hubspot_company_created: hubspotCompanyCreatedTrigger,
hubspot_company_deleted: hubspotCompanyDeletedTrigger,
hubspot_company_property_changed: hubspotCompanyPropertyChangedTrigger,
hubspot_conversation_creation: hubspotConversationCreationTrigger,
hubspot_conversation_deletion: hubspotConversationDeletionTrigger,
hubspot_conversation_new_message: hubspotConversationNewMessageTrigger,
hubspot_conversation_privacy_deletion: hubspotConversationPrivacyDeletionTrigger,
hubspot_conversation_property_changed: hubspotConversationPropertyChangedTrigger,
hubspot_deal_created: hubspotDealCreatedTrigger,
hubspot_deal_deleted: hubspotDealDeletedTrigger,
hubspot_deal_property_changed: hubspotDealPropertyChangedTrigger,
hubspot_ticket_created: hubspotTicketCreatedTrigger,
hubspot_ticket_deleted: hubspotTicketDeletedTrigger,
hubspot_ticket_property_changed: hubspotTicketPropertyChangedTrigger,
imap_poller: imapPollingTrigger,
}