chore: import upstream snapshot with attribution
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
Publish CLI Package / publish-npm (push) Has been cancelled
Publish Python SDK / publish-pypi (push) Has been cancelled
Publish TypeScript SDK / publish-npm (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 13:20:55 +08:00
commit d25d482dc2
13754 changed files with 4996608 additions and 0 deletions
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonEmailAccountAddedOutputs,
buildEmailBisonExtraFields,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonEmailAccountAddedTrigger: TriggerConfig = {
id: 'emailbison_email_account_added',
name: 'Email Bison Email Account Added',
provider: 'emailbison',
description: 'Trigger when a sender email account is added to Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_email_account_added',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Email Account Added'),
extraFields: buildEmailBisonExtraFields('emailbison_email_account_added'),
}),
outputs: buildEmailBisonEmailAccountAddedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonEmailAccountDisconnectedOutputs,
buildEmailBisonExtraFields,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonEmailAccountDisconnectedTrigger: TriggerConfig = {
id: 'emailbison_email_account_disconnected',
name: 'Email Bison Email Account Disconnected',
provider: 'emailbison',
description: 'Trigger when a sender email account disconnects in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_email_account_disconnected',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Email Account Disconnected'),
extraFields: buildEmailBisonExtraFields('emailbison_email_account_disconnected'),
}),
outputs: buildEmailBisonEmailAccountDisconnectedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonEmailAccountReconnectedOutputs,
buildEmailBisonExtraFields,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonEmailAccountReconnectedTrigger: TriggerConfig = {
id: 'emailbison_email_account_reconnected',
name: 'Email Bison Email Account Reconnected',
provider: 'emailbison',
description: 'Trigger when a sender email account reconnects in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_email_account_reconnected',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Email Account Reconnected'),
extraFields: buildEmailBisonExtraFields('emailbison_email_account_reconnected'),
}),
outputs: buildEmailBisonEmailAccountReconnectedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonEmailAccountRemovedOutputs,
buildEmailBisonExtraFields,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonEmailAccountRemovedTrigger: TriggerConfig = {
id: 'emailbison_email_account_removed',
name: 'Email Bison Email Account Removed',
provider: 'emailbison',
description: 'Trigger when a sender email account is removed from Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_email_account_removed',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Email Account Removed'),
extraFields: buildEmailBisonExtraFields('emailbison_email_account_removed'),
}),
outputs: buildEmailBisonEmailAccountRemovedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonEmailBouncedOutputs,
buildEmailBisonExtraFields,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonEmailBouncedTrigger: TriggerConfig = {
id: 'emailbison_email_bounced',
name: 'Email Bison Email Bounced',
provider: 'emailbison',
description: 'Trigger when an Email Bison campaign email bounces',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_email_bounced',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Email Bounced'),
extraFields: buildEmailBisonExtraFields('emailbison_email_bounced'),
}),
outputs: buildEmailBisonEmailBouncedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonEmailOpenedOutputs,
buildEmailBisonExtraFields,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonEmailOpenedTrigger: TriggerConfig = {
id: 'emailbison_email_opened',
name: 'Email Bison Email Opened',
provider: 'emailbison',
description: 'Trigger when an Email Bison campaign email is opened',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_email_opened',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Email Opened'),
extraFields: buildEmailBisonExtraFields('emailbison_email_opened'),
}),
outputs: buildEmailBisonEmailOpenedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,27 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonEmailSentOutputs,
buildEmailBisonExtraFields,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonEmailSentTrigger: TriggerConfig = {
id: 'emailbison_email_sent',
name: 'Email Bison Email Sent',
provider: 'emailbison',
description: 'Trigger when a campaign email is sent in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_email_sent',
triggerOptions: emailBisonTriggerOptions,
includeDropdown: true,
setupInstructions: emailBisonSetupInstructions('Email Sent'),
extraFields: buildEmailBisonExtraFields('emailbison_email_sent'),
}),
outputs: buildEmailBisonEmailSentOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
+17
View File
@@ -0,0 +1,17 @@
export { emailBisonEmailAccountAddedTrigger } from '@/triggers/emailbison/email_account_added'
export { emailBisonEmailAccountDisconnectedTrigger } from '@/triggers/emailbison/email_account_disconnected'
export { emailBisonEmailAccountReconnectedTrigger } from '@/triggers/emailbison/email_account_reconnected'
export { emailBisonEmailAccountRemovedTrigger } from '@/triggers/emailbison/email_account_removed'
export { emailBisonEmailBouncedTrigger } from '@/triggers/emailbison/email_bounced'
export { emailBisonEmailOpenedTrigger } from '@/triggers/emailbison/email_opened'
export { emailBisonEmailSentTrigger } from '@/triggers/emailbison/email_sent'
export { emailBisonLeadFirstContactedTrigger } from '@/triggers/emailbison/lead_first_contacted'
export { emailBisonLeadInterestedTrigger } from '@/triggers/emailbison/lead_interested'
export { emailBisonLeadRepliedTrigger } from '@/triggers/emailbison/lead_replied'
export { emailBisonLeadUnsubscribedTrigger } from '@/triggers/emailbison/lead_unsubscribed'
export { emailBisonManualEmailSentTrigger } from '@/triggers/emailbison/manual_email_sent'
export { emailBisonTagAttachedTrigger } from '@/triggers/emailbison/tag_attached'
export { emailBisonTagRemovedTrigger } from '@/triggers/emailbison/tag_removed'
export { emailBisonUntrackedReplyReceivedTrigger } from '@/triggers/emailbison/untracked_reply_received'
export { emailBisonWarmupDisabledCausingBouncesTrigger } from '@/triggers/emailbison/warmup_disabled_causing_bounces'
export { emailBisonWarmupDisabledReceivingBouncesTrigger } from '@/triggers/emailbison/warmup_disabled_receiving_bounces'
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonLeadFirstContactedOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonLeadFirstContactedTrigger: TriggerConfig = {
id: 'emailbison_lead_first_contacted',
name: 'Email Bison Contact First Emailed',
provider: 'emailbison',
description: 'Trigger when a contact receives their first campaign email in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_lead_first_contacted',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Contact First Emailed'),
extraFields: buildEmailBisonExtraFields('emailbison_lead_first_contacted'),
}),
outputs: buildEmailBisonLeadFirstContactedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonLeadInterestedOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonLeadInterestedTrigger: TriggerConfig = {
id: 'emailbison_lead_interested',
name: 'Email Bison Contact Interested',
provider: 'emailbison',
description: 'Trigger when a reply is marked interested in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_lead_interested',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Contact Interested'),
extraFields: buildEmailBisonExtraFields('emailbison_lead_interested'),
}),
outputs: buildEmailBisonLeadInterestedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonLeadRepliedOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonLeadRepliedTrigger: TriggerConfig = {
id: 'emailbison_lead_replied',
name: 'Email Bison Contact Replied',
provider: 'emailbison',
description: 'Trigger when a campaign lead replies in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_lead_replied',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Contact Replied'),
extraFields: buildEmailBisonExtraFields('emailbison_lead_replied'),
}),
outputs: buildEmailBisonLeadRepliedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonLeadUnsubscribedOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonLeadUnsubscribedTrigger: TriggerConfig = {
id: 'emailbison_lead_unsubscribed',
name: 'Email Bison Contact Unsubscribed',
provider: 'emailbison',
description: 'Trigger when a contact unsubscribes in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_lead_unsubscribed',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Contact Unsubscribed'),
extraFields: buildEmailBisonExtraFields('emailbison_lead_unsubscribed'),
}),
outputs: buildEmailBisonLeadUnsubscribedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonManualEmailSentOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonManualEmailSentTrigger: TriggerConfig = {
id: 'emailbison_manual_email_sent',
name: 'Email Bison Manual Email Sent',
provider: 'emailbison',
description: 'Trigger when a manual email is sent in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_manual_email_sent',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Manual Email Sent'),
extraFields: buildEmailBisonExtraFields('emailbison_manual_email_sent'),
}),
outputs: buildEmailBisonManualEmailSentOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonTagAttachedOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonTagAttachedTrigger: TriggerConfig = {
id: 'emailbison_tag_attached',
name: 'Email Bison Tag Attached',
provider: 'emailbison',
description: 'Trigger when a custom tag is attached to a taggable in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_tag_attached',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Tag Attached'),
extraFields: buildEmailBisonExtraFields('emailbison_tag_attached'),
}),
outputs: buildEmailBisonTagAttachedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonTagRemovedOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonTagRemovedTrigger: TriggerConfig = {
id: 'emailbison_tag_removed',
name: 'Email Bison Tag Removed',
provider: 'emailbison',
description: 'Trigger when a custom tag is removed from a taggable in Email Bison',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_tag_removed',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Tag Removed'),
extraFields: buildEmailBisonExtraFields('emailbison_tag_removed'),
}),
outputs: buildEmailBisonTagRemovedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonUntrackedReplyReceivedOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonUntrackedReplyReceivedTrigger: TriggerConfig = {
id: 'emailbison_untracked_reply_received',
name: 'Email Bison Untracked Reply Received',
provider: 'emailbison',
description: 'Trigger when Email Bison receives a reply not tied to a scheduled campaign email',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_untracked_reply_received',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Untracked Reply Received'),
extraFields: buildEmailBisonExtraFields('emailbison_untracked_reply_received'),
}),
outputs: buildEmailBisonUntrackedReplyReceivedOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
+507
View File
@@ -0,0 +1,507 @@
import { isRecordLike } from '@sim/utils/object'
import type { SubBlockConfig } from '@/blocks/types'
import type { TriggerOutput } from '@/triggers/types'
export const EMAILBISON_TRIGGER_TO_EVENT_TYPE = {
emailbison_email_sent: 'email_sent',
emailbison_lead_first_contacted: 'lead_first_contacted',
emailbison_lead_replied: 'lead_replied',
emailbison_lead_interested: 'lead_interested',
emailbison_lead_unsubscribed: 'lead_unsubscribed',
emailbison_untracked_reply_received: 'untracked_reply_received',
emailbison_email_opened: 'email_opened',
emailbison_email_bounced: 'email_bounced',
emailbison_email_account_added: 'email_account_added',
emailbison_email_account_removed: 'email_account_removed',
emailbison_email_account_disconnected: 'email_account_disconnected',
emailbison_email_account_reconnected: 'email_account_reconnected',
emailbison_manual_email_sent: 'manual_email_sent',
emailbison_tag_attached: 'tag_attached',
emailbison_tag_removed: 'tag_removed',
emailbison_warmup_disabled_receiving_bounces: 'warmup_disabled_receiving_bounces',
emailbison_warmup_disabled_causing_bounces: 'warmup_disabled_causing_bounces',
} as const
export const emailBisonTriggerOptions = [
{ label: 'Email Sent', id: 'emailbison_email_sent' },
{ label: 'Contact First Emailed', id: 'emailbison_lead_first_contacted' },
{ label: 'Contact Replied', id: 'emailbison_lead_replied' },
{ label: 'Contact Interested', id: 'emailbison_lead_interested' },
{ label: 'Contact Unsubscribed', id: 'emailbison_lead_unsubscribed' },
{ label: 'Untracked Reply Received', id: 'emailbison_untracked_reply_received' },
{ label: 'Email Opened', id: 'emailbison_email_opened' },
{ label: 'Email Bounced', id: 'emailbison_email_bounced' },
{ label: 'Email Account Added', id: 'emailbison_email_account_added' },
{ label: 'Email Account Removed', id: 'emailbison_email_account_removed' },
{ label: 'Email Account Disconnected', id: 'emailbison_email_account_disconnected' },
{ label: 'Email Account Reconnected', id: 'emailbison_email_account_reconnected' },
{ label: 'Manual Email Sent', id: 'emailbison_manual_email_sent' },
{ label: 'Tag Attached', id: 'emailbison_tag_attached' },
{ label: 'Tag Removed', id: 'emailbison_tag_removed' },
{
label: 'Warmup Disabled Receiving Bounces',
id: 'emailbison_warmup_disabled_receiving_bounces',
},
{
label: 'Warmup Disabled Causing Bounces',
id: 'emailbison_warmup_disabled_causing_bounces',
},
]
export function emailBisonSetupInstructions(eventType: string): string {
const instructions = [
'Create an Email Bison API token in <strong>Settings &gt; Developer API</strong>.',
'Enter the <strong>Instance URL</strong> from Email Bison&rsquo;s webhook payload, Full API Reference, or exported Postman collection.',
`Click <strong>Save Configuration</strong> to automatically create an Email Bison webhook for <strong>${eventType}</strong>.`,
'The webhook will be automatically deleted from Email Bison when this trigger is removed.',
]
return instructions
.map(
(instruction, index) =>
`<div class="mb-3"><strong>${index + 1}.</strong> ${instruction}</div>`
)
.join('')
}
export function buildEmailBisonExtraFields(triggerId: string): SubBlockConfig[] {
return [
{
id: 'apiKey',
title: 'API Key',
type: 'short-input',
placeholder: 'Enter your Email Bison API token',
password: true,
required: true,
paramVisibility: 'user-only',
mode: 'trigger',
condition: { field: 'selectedTriggerId', value: triggerId },
},
{
id: 'apiBaseUrl',
title: 'Instance URL',
type: 'short-input',
placeholder: 'https://your-emailbison-workspace.com',
required: true,
paramVisibility: 'user-only',
mode: 'trigger',
condition: { field: 'selectedTriggerId', value: triggerId },
},
]
}
export function buildEmailBisonOutputs(): Record<string, TriggerOutput> {
return {
eventType: { type: 'string', description: 'Email Bison webhook event type' },
eventName: { type: 'string', description: 'Human-readable Email Bison event name' },
instanceUrl: { type: 'string', description: 'Email Bison instance URL' },
workspaceId: { type: 'number', description: 'Email Bison workspace ID' },
workspaceName: { type: 'string', description: 'Email Bison workspace name' },
event: { type: 'json', description: 'Raw Email Bison event metadata object' },
data: { type: 'json', description: 'Raw Email Bison event data object' },
}
}
export function buildEmailBisonEmailSentOutputs(): Record<string, TriggerOutput> {
return {
...buildEmailBisonOutputs(),
scheduledEmail: {
id: { type: 'number', description: 'Scheduled email ID' },
lead_id: { type: 'number', description: 'Lead ID' },
sequence_step_id: { type: 'number', description: 'Sequence step ID' },
sequence_step_order: { type: 'number', description: 'Sequence step order' },
sequence_step_variant: { type: 'number', description: 'Sequence step variant' },
email_subject: { type: 'string', description: 'Email subject' },
email_body: { type: 'string', description: 'Email body HTML' },
status: { type: 'string', description: 'Scheduled email status' },
scheduled_date_est: { type: 'string', description: 'Scheduled date in EST' },
scheduled_date_local: { type: 'string', description: 'Scheduled date in local timezone' },
local_timezone: { type: 'string', description: 'Scheduled email local timezone' },
sent_at: { type: 'string', description: 'Email sent timestamp' },
opens: { type: 'number', description: 'Open count' },
replies: { type: 'number', description: 'Reply count' },
unique_opens: { type: 'number', description: 'Unique open count' },
unique_replies: { type: 'number', description: 'Unique reply count' },
interested: { type: 'string', description: 'Interested status' },
raw_message_id: { type: 'string', description: 'Raw email message ID' },
},
campaignEvent: {
id: { type: 'number', description: 'Campaign event ID' },
event_type: { type: 'string', description: 'Campaign event type' },
created_at_local: { type: 'string', description: 'Campaign event local creation timestamp' },
local_timezone: { type: 'string', description: 'Campaign event local timezone' },
created_at: { type: 'string', description: 'Campaign event creation timestamp' },
},
lead: {
id: { type: 'number', description: 'Lead ID' },
email: { type: 'string', description: 'Lead email address' },
first_name: { type: 'string', description: 'Lead first name' },
last_name: { type: 'string', description: 'Lead last name' },
status: { type: 'string', description: 'Lead status' },
title: { type: 'string', description: 'Lead title' },
company: { type: 'string', description: 'Lead company' },
custom_variables: { type: 'json', description: 'Lead custom variables' },
emails_sent: { type: 'number', description: 'Lead emails sent count' },
opens: { type: 'number', description: 'Lead open count' },
unique_opens: { type: 'number', description: 'Lead unique open count' },
replies: { type: 'number', description: 'Lead reply count' },
unique_replies: { type: 'number', description: 'Lead unique reply count' },
bounces: { type: 'number', description: 'Lead bounce count' },
},
campaign: {
id: { type: 'number', description: 'Campaign ID' },
name: { type: 'string', description: 'Campaign name' },
},
senderEmail: {
id: { type: 'number', description: 'Sender email ID' },
name: { type: 'string', description: 'Sender email name' },
email: { type: 'string', description: 'Sender email address' },
status: { type: 'string', description: 'Sender email status' },
account_type: { type: 'string', description: 'Sender email connection type' },
daily_limit: { type: 'number', description: 'Sender email daily limit' },
emails_sent: { type: 'number', description: 'Sender email sent count' },
replied: { type: 'number', description: 'Sender email replied count' },
opened: { type: 'number', description: 'Sender email opened count' },
unsubscribed: { type: 'number', description: 'Sender email unsubscribed count' },
bounced: { type: 'number', description: 'Sender email bounced count' },
unique_replies: { type: 'number', description: 'Sender email unique reply count' },
unique_opens: { type: 'number', description: 'Sender email unique open count' },
total_leads_contacted: { type: 'number', description: 'Sender email total leads contacted' },
interested: { type: 'number', description: 'Sender email interested count' },
created_at: { type: 'string', description: 'Sender email creation timestamp' },
updated_at: { type: 'string', description: 'Sender email update timestamp' },
},
}
}
export function buildEmailBisonLeadFirstContactedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonEmailSentOutputs()
}
export function buildEmailBisonLeadUnsubscribedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonEmailSentOutputs()
}
export function buildEmailBisonEmailOpenedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonEmailSentOutputs()
}
export function buildEmailBisonLeadRepliedOutputs(): Record<string, TriggerOutput> {
return {
...buildEmailBisonOutputs(),
reply: {
id: { type: 'number', description: 'Reply ID' },
uuid: { type: 'string', description: 'Reply UUID' },
email_subject: { type: 'string', description: 'Reply email subject' },
interested: { type: 'boolean', description: 'Whether the reply is marked interested' },
automated_reply: { type: 'boolean', description: 'Whether the reply is automated' },
html_body: { type: 'string', description: 'Reply HTML body' },
text_body: { type: 'string', description: 'Reply plain text body' },
raw_body: { type: 'string', description: 'Raw MIME reply body' },
headers: { type: 'string', description: 'Encoded raw email headers' },
date_received: { type: 'string', description: 'Reply received timestamp' },
from_name: { type: 'string', description: 'Reply sender name' },
from_email_address: { type: 'string', description: 'Reply sender email address' },
primary_to_email_address: { type: 'string', description: 'Primary recipient email address' },
to: { type: 'json', description: 'Reply To recipients' },
cc: { type: 'json', description: 'Reply CC recipients' },
bcc: { type: 'json', description: 'Reply BCC recipients' },
parent_id: { type: 'number', description: 'Parent reply ID' },
reply_type: { type: 'string', description: 'Reply type' },
folder: { type: 'string', description: 'Reply folder' },
raw_message_id: { type: 'string', description: 'Raw email message ID' },
created_at: { type: 'string', description: 'Reply creation timestamp' },
updated_at: { type: 'string', description: 'Reply update timestamp' },
attachments: { type: 'json', description: 'Reply attachments' },
},
campaignEvent: {
id: { type: 'number', description: 'Campaign event ID' },
event_type: { type: 'string', description: 'Campaign event type' },
created_at_local: { type: 'string', description: 'Campaign event local creation timestamp' },
local_timezone: { type: 'string', description: 'Campaign event local timezone' },
created_at: { type: 'string', description: 'Campaign event creation timestamp' },
},
lead: {
id: { type: 'number', description: 'Lead ID' },
email: { type: 'string', description: 'Lead email address' },
first_name: { type: 'string', description: 'Lead first name' },
last_name: { type: 'string', description: 'Lead last name' },
status: { type: 'string', description: 'Lead status' },
title: { type: 'string', description: 'Lead title' },
company: { type: 'string', description: 'Lead company' },
custom_variables: { type: 'json', description: 'Lead custom variables' },
emails_sent: { type: 'number', description: 'Lead emails sent count' },
opens: { type: 'number', description: 'Lead open count' },
unique_opens: { type: 'number', description: 'Lead unique open count' },
replies: { type: 'number', description: 'Lead reply count' },
unique_replies: { type: 'number', description: 'Lead unique reply count' },
bounces: { type: 'number', description: 'Lead bounce count' },
},
campaign: {
id: { type: 'number', description: 'Campaign ID' },
name: { type: 'string', description: 'Campaign name' },
},
scheduledEmail: {
id: { type: 'number', description: 'Scheduled email ID' },
sequence_step_id: { type: 'number', description: 'Sequence step ID' },
sequence_step_order: { type: 'number', description: 'Sequence step order' },
sequence_step_variant: { type: 'number', description: 'Sequence step variant' },
status: { type: 'string', description: 'Scheduled email status' },
scheduled_date_est: { type: 'string', description: 'Scheduled date in EST' },
scheduled_date_local: { type: 'string', description: 'Scheduled date in local timezone' },
local_timezone: { type: 'string', description: 'Scheduled email local timezone' },
sent_at: { type: 'string', description: 'Email sent timestamp' },
opens: { type: 'number', description: 'Open count' },
replies: { type: 'number', description: 'Reply count' },
unique_opens: { type: 'number', description: 'Unique open count' },
unique_replies: { type: 'number', description: 'Unique reply count' },
interested: { type: 'string', description: 'Interested status' },
raw_message_id: { type: 'string', description: 'Raw email message ID' },
},
senderEmail: {
id: { type: 'number', description: 'Sender email ID' },
name: { type: 'string', description: 'Sender email name' },
email: { type: 'string', description: 'Sender email address' },
status: { type: 'string', description: 'Sender email status' },
account_type: { type: 'string', description: 'Sender email connection type' },
daily_limit: { type: 'number', description: 'Sender email daily limit' },
emails_sent: { type: 'number', description: 'Sender email sent count' },
replied: { type: 'number', description: 'Sender email replied count' },
opened: { type: 'number', description: 'Sender email opened count' },
unsubscribed: { type: 'number', description: 'Sender email unsubscribed count' },
bounced: { type: 'number', description: 'Sender email bounced count' },
unique_replies: { type: 'number', description: 'Sender email unique reply count' },
unique_opens: { type: 'number', description: 'Sender email unique open count' },
total_leads_contacted: { type: 'number', description: 'Sender email total leads contacted' },
interested: { type: 'number', description: 'Sender email interested count' },
created_at: { type: 'string', description: 'Sender email creation timestamp' },
updated_at: { type: 'string', description: 'Sender email update timestamp' },
},
}
}
export function buildEmailBisonLeadInterestedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonLeadRepliedOutputs()
}
export function buildEmailBisonEmailBouncedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonLeadRepliedOutputs()
}
export function buildEmailBisonManualEmailSentOutputs(): Record<string, TriggerOutput> {
return {
...buildEmailBisonOutputs(),
reply: {
id: { type: 'number', description: 'Reply ID' },
email_subject: { type: 'string', description: 'Reply email subject' },
interested: { type: 'boolean', description: 'Whether the reply is marked interested' },
automated_reply: { type: 'boolean', description: 'Whether the reply is automated' },
html_body: { type: 'string', description: 'Reply HTML body' },
text_body: { type: 'string', description: 'Reply plain text body' },
raw_body: { type: 'string', description: 'Raw MIME reply body' },
headers: { type: 'string', description: 'Encoded raw email headers' },
date_received: { type: 'string', description: 'Reply received timestamp' },
reply_type: { type: 'string', description: 'Reply type' },
from_name: { type: 'string', description: 'Reply sender name' },
from_email_address: { type: 'string', description: 'Reply sender email address' },
primary_to_email_address: { type: 'string', description: 'Primary recipient email address' },
to: { type: 'json', description: 'Reply To recipients' },
cc: { type: 'json', description: 'Reply CC recipients' },
bcc: { type: 'json', description: 'Reply BCC recipients' },
parent_id: { type: 'json', description: 'Parent reply ID' },
folder: { type: 'string', description: 'Reply folder' },
raw_message_id: { type: 'string', description: 'Raw email message ID' },
created_at: { type: 'string', description: 'Reply creation timestamp' },
updated_at: { type: 'string', description: 'Reply update timestamp' },
attachments: { type: 'json', description: 'Reply attachments' },
},
lead: {
id: { type: 'number', description: 'Lead ID' },
email: { type: 'string', description: 'Lead email address' },
first_name: { type: 'string', description: 'Lead first name' },
last_name: { type: 'string', description: 'Lead last name' },
status: { type: 'string', description: 'Lead status' },
title: { type: 'string', description: 'Lead title' },
company: { type: 'string', description: 'Lead company' },
custom_variables: { type: 'json', description: 'Lead custom variables' },
emails_sent: { type: 'number', description: 'Lead emails sent count' },
opens: { type: 'number', description: 'Lead open count' },
unique_opens: { type: 'number', description: 'Lead unique open count' },
replies: { type: 'number', description: 'Lead reply count' },
unique_replies: { type: 'number', description: 'Lead unique reply count' },
bounces: { type: 'number', description: 'Lead bounce count' },
},
campaign: {
id: { type: 'number', description: 'Campaign ID' },
name: { type: 'string', description: 'Campaign name' },
},
scheduledEmail: {
id: { type: 'number', description: 'Scheduled email ID' },
sequence_step_id: { type: 'number', description: 'Sequence step ID' },
sequence_step_order: { type: 'number', description: 'Sequence step order' },
sequence_step_variant: { type: 'number', description: 'Sequence step variant' },
status: { type: 'string', description: 'Scheduled email status' },
scheduled_date_est: { type: 'string', description: 'Scheduled date in EST' },
scheduled_date_local: { type: 'string', description: 'Scheduled date in local timezone' },
local_timezone: { type: 'string', description: 'Scheduled email local timezone' },
sent_at: { type: 'string', description: 'Email sent timestamp' },
opens: { type: 'number', description: 'Open count' },
replies: { type: 'number', description: 'Reply count' },
unique_opens: { type: 'number', description: 'Unique open count' },
unique_replies: { type: 'number', description: 'Unique reply count' },
interested: { type: 'json', description: 'Interested status' },
raw_message_id: { type: 'string', description: 'Raw email message ID' },
},
senderEmail: {
id: { type: 'number', description: 'Sender email ID' },
name: { type: 'string', description: 'Sender email name' },
email: { type: 'string', description: 'Sender email address' },
status: { type: 'string', description: 'Sender email status' },
account_type: { type: 'string', description: 'Sender email connection type' },
daily_limit: { type: 'number', description: 'Sender email daily limit' },
emails_sent: { type: 'number', description: 'Sender email sent count' },
replied: { type: 'number', description: 'Sender email replied count' },
opened: { type: 'number', description: 'Sender email opened count' },
unsubscribed: { type: 'number', description: 'Sender email unsubscribed count' },
bounced: { type: 'number', description: 'Sender email bounced count' },
unique_replies: { type: 'number', description: 'Sender email unique reply count' },
unique_opens: { type: 'number', description: 'Sender email unique open count' },
total_leads_contacted: { type: 'number', description: 'Sender email total leads contacted' },
interested: { type: 'number', description: 'Sender email interested count' },
created_at: { type: 'string', description: 'Sender email creation timestamp' },
updated_at: { type: 'string', description: 'Sender email update timestamp' },
},
}
}
export function buildEmailBisonTagAttachedOutputs(): Record<string, TriggerOutput> {
return {
...buildEmailBisonOutputs(),
tagId: { type: 'number', description: 'Email Bison tag ID' },
tagName: { type: 'string', description: 'Email Bison tag name' },
taggableId: { type: 'number', description: 'ID of the tagged resource' },
taggableType: { type: 'string', description: 'Type of the tagged resource' },
}
}
export function buildEmailBisonTagRemovedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonTagAttachedOutputs()
}
export function buildEmailBisonEmailAccountAddedOutputs(): Record<string, TriggerOutput> {
return {
...buildEmailBisonOutputs(),
senderEmail: {
id: { type: 'number', description: 'Sender email ID' },
name: { type: 'string', description: 'Sender email name' },
email: { type: 'string', description: 'Sender email address' },
status: { type: 'string', description: 'Sender email status' },
account_type: { type: 'string', description: 'Sender email connection type' },
daily_limit: { type: 'number', description: 'Sender email daily limit' },
emails_sent: { type: 'number', description: 'Sender email sent count' },
replied: { type: 'number', description: 'Sender email replied count' },
opened: { type: 'number', description: 'Sender email opened count' },
unsubscribed: { type: 'number', description: 'Sender email unsubscribed count' },
bounced: { type: 'number', description: 'Sender email bounced count' },
unique_replies: { type: 'number', description: 'Sender email unique reply count' },
unique_opens: { type: 'number', description: 'Sender email unique open count' },
total_leads_contacted: { type: 'number', description: 'Sender email total leads contacted' },
interested: { type: 'number', description: 'Sender email interested count' },
created_at: { type: 'string', description: 'Sender email creation timestamp' },
updated_at: { type: 'string', description: 'Sender email update timestamp' },
},
}
}
export function buildEmailBisonEmailAccountRemovedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonEmailAccountAddedOutputs()
}
export function buildEmailBisonEmailAccountDisconnectedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonEmailAccountAddedOutputs()
}
export function buildEmailBisonEmailAccountReconnectedOutputs(): Record<string, TriggerOutput> {
return buildEmailBisonEmailAccountAddedOutputs()
}
export function buildEmailBisonWarmupDisabledReceivingBouncesOutputs(): Record<
string,
TriggerOutput
> {
return buildEmailBisonEmailAccountAddedOutputs()
}
export function buildEmailBisonWarmupDisabledCausingBouncesOutputs(): Record<
string,
TriggerOutput
> {
return buildEmailBisonEmailAccountAddedOutputs()
}
export function buildEmailBisonUntrackedReplyReceivedOutputs(): Record<string, TriggerOutput> {
return {
...buildEmailBisonOutputs(),
reply: {
id: { type: 'number', description: 'Reply ID' },
uuid: { type: 'string', description: 'Reply UUID' },
email_subject: { type: 'string', description: 'Reply email subject' },
interested: { type: 'boolean', description: 'Whether the reply is marked interested' },
automated_reply: { type: 'boolean', description: 'Whether the reply is automated' },
html_body: { type: 'string', description: 'Reply HTML body' },
text_body: { type: 'string', description: 'Reply plain text body' },
raw_body: { type: 'string', description: 'Raw MIME reply body' },
headers: { type: 'string', description: 'Encoded raw email headers' },
date_received: { type: 'string', description: 'Reply received timestamp' },
from_name: { type: 'string', description: 'Reply sender name' },
from_email_address: { type: 'string', description: 'Reply sender email address' },
primary_to_email_address: { type: 'string', description: 'Primary recipient email address' },
to: { type: 'json', description: 'Reply To recipients' },
cc: { type: 'json', description: 'Reply CC recipients' },
bcc: { type: 'json', description: 'Reply BCC recipients' },
parent_id: { type: 'number', description: 'Parent reply ID' },
reply_type: { type: 'string', description: 'Reply type' },
folder: { type: 'string', description: 'Reply folder' },
raw_message_id: { type: 'string', description: 'Raw email message ID' },
created_at: { type: 'string', description: 'Reply creation timestamp' },
updated_at: { type: 'string', description: 'Reply update timestamp' },
attachments: { type: 'json', description: 'Reply attachments' },
},
senderEmail: {
id: { type: 'number', description: 'Sender email ID' },
name: { type: 'string', description: 'Sender email name' },
email: { type: 'string', description: 'Sender email address' },
status: { type: 'string', description: 'Sender email status' },
account_type: { type: 'string', description: 'Sender email connection type' },
daily_limit: { type: 'number', description: 'Sender email daily limit' },
emails_sent: { type: 'number', description: 'Sender email sent count' },
replied: { type: 'number', description: 'Sender email replied count' },
opened: { type: 'number', description: 'Sender email opened count' },
unsubscribed: { type: 'number', description: 'Sender email unsubscribed count' },
bounced: { type: 'number', description: 'Sender email bounced count' },
unique_replies: { type: 'number', description: 'Sender email unique reply count' },
unique_opens: { type: 'number', description: 'Sender email unique open count' },
total_leads_contacted: { type: 'number', description: 'Sender email total leads contacted' },
interested: { type: 'number', description: 'Sender email interested count' },
created_at: { type: 'string', description: 'Sender email creation timestamp' },
updated_at: { type: 'string', description: 'Sender email update timestamp' },
},
}
}
export function getEmailBisonEventTypeForTrigger(triggerId: string): string | undefined {
return EMAILBISON_TRIGGER_TO_EVENT_TYPE[
triggerId as keyof typeof EMAILBISON_TRIGGER_TO_EVENT_TYPE
]
}
export function isEmailBisonEventMatch(triggerId: string, body: Record<string, unknown>): boolean {
const expectedEventType = getEmailBisonEventTypeForTrigger(triggerId)
if (!expectedEventType) return false
const event = body.event
if (!isRecordLike(event)) return false
const actualEventType = event.type
return typeof actualEventType === 'string' && actualEventType.toLowerCase() === expectedEventType
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonWarmupDisabledCausingBouncesOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonWarmupDisabledCausingBouncesTrigger: TriggerConfig = {
id: 'emailbison_warmup_disabled_causing_bounces',
name: 'Email Bison Warmup Disabled Causing Bounces',
provider: 'emailbison',
description: 'Trigger when warmup is disabled for a sender email causing too many bounces',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_warmup_disabled_causing_bounces',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Warmup Disabled Causing Bounces'),
extraFields: buildEmailBisonExtraFields('emailbison_warmup_disabled_causing_bounces'),
}),
outputs: buildEmailBisonWarmupDisabledCausingBouncesOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}
@@ -0,0 +1,26 @@
import { EmailBisonIcon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
buildEmailBisonExtraFields,
buildEmailBisonWarmupDisabledReceivingBouncesOutputs,
emailBisonSetupInstructions,
emailBisonTriggerOptions,
} from '@/triggers/emailbison/utils'
import type { TriggerConfig } from '@/triggers/types'
export const emailBisonWarmupDisabledReceivingBouncesTrigger: TriggerConfig = {
id: 'emailbison_warmup_disabled_receiving_bounces',
name: 'Email Bison Warmup Disabled Receiving Bounces',
provider: 'emailbison',
description: 'Trigger when warmup is disabled for a sender email receiving too many bounces',
version: '1.0.0',
icon: EmailBisonIcon,
subBlocks: buildTriggerSubBlocks({
triggerId: 'emailbison_warmup_disabled_receiving_bounces',
triggerOptions: emailBisonTriggerOptions,
setupInstructions: emailBisonSetupInstructions('Warmup Disabled Receiving Bounces'),
extraFields: buildEmailBisonExtraFields('emailbison_warmup_disabled_receiving_bounces'),
}),
outputs: buildEmailBisonWarmupDisabledReceivingBouncesOutputs(),
webhook: { method: 'POST', headers: { 'Content-Type': 'application/json' } },
}