Files
wehub-resource-sync d25d482dc2
Publish CLI Package / publish-npm (push) Waiting to run
Publish Python SDK / publish-pypi (push) Waiting to run
Publish TypeScript SDK / publish-npm (push) Waiting to run
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
chore: import upstream snapshot with attribution
2026-07-13 13:20:55 +08:00

145 lines
4.6 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { generateId } from '@sim/utils/id'
import { WebhookIcon } from '@/components/icons'
import type { TriggerConfig } from '@/triggers/types'
export const genericWebhookTrigger: TriggerConfig = {
id: 'generic_webhook',
name: 'Generic Webhook',
provider: 'generic',
description: 'Receive webhooks from any service or API',
version: '1.0.0',
icon: WebhookIcon,
subBlocks: [
{
id: 'webhookUrlDisplay',
title: 'Webhook URL',
type: 'short-input',
readOnly: true,
showCopyButton: true,
useWebhookUrl: true,
placeholder: 'Webhook URL will be generated',
mode: 'trigger',
},
{
id: 'requireAuth',
title: 'Require Authentication',
type: 'switch',
description: 'Require authentication for all webhook requests',
defaultValue: true,
mode: 'trigger',
},
{
id: 'token',
title: 'Authentication Token',
type: 'short-input',
placeholder: 'Enter an auth token',
description: 'Token used to authenticate webhook requests via Bearer token or custom header',
password: true,
required: false,
value: () => generateId(),
mode: 'trigger',
},
{
id: 'secretHeaderName',
title: 'Secret Header Name (Optional)',
type: 'short-input',
placeholder: 'X-Secret-Key',
description:
'Custom HTTP header name for the auth token. If blank, uses "Authorization: Bearer TOKEN"',
required: false,
mode: 'trigger',
},
{
id: 'idempotencyField',
title: 'Deduplication Field (Optional)',
type: 'short-input',
placeholder: 'e.g. event.id',
description:
'Dot-notation path to a unique field in the payload for deduplication. If the same value is seen within 7 days, the duplicate webhook will be skipped.',
required: false,
mode: 'trigger',
},
{
id: 'responseMode',
title: 'Acknowledgement',
type: 'dropdown',
options: [
{ label: 'Default', id: 'default' },
{ label: 'Custom', id: 'custom' },
],
defaultValue: 'default',
mode: 'trigger',
},
{
id: 'verifyTestEvents',
title: 'Verify Test Events',
type: 'switch',
description:
'Return a temporary 200 response for test or verification probes on this webhook URL during setup.',
defaultValue: false,
mode: 'trigger',
},
{
id: 'responseStatusCode',
title: 'Response Status Code',
type: 'short-input',
placeholder: '200 (default)',
description:
'HTTP status code (100599) to return to the webhook caller. Defaults to 200 if empty or invalid.',
required: false,
mode: 'trigger',
condition: { field: 'responseMode', value: 'custom' },
},
{
id: 'responseBody',
title: 'Response Body',
type: 'code',
language: 'json',
placeholder: '{"ok": true}',
description: 'JSON body to return to the webhook caller. Leave empty for no body.',
required: false,
mode: 'trigger',
condition: { field: 'responseMode', value: 'custom' },
},
{
id: 'inputFormat',
title: 'Input Format',
type: 'input-format',
description:
'Define the expected JSON input schema for this webhook (optional). Use type "file[]" for file uploads.',
mode: 'trigger',
},
{
id: 'triggerInstructions',
title: 'Setup Instructions',
hideFromPreview: true,
type: 'text',
defaultValue: [
'Copy the webhook URL and use it in your external service or API.',
'Configure your service to send webhooks to this URL.',
'The webhook will receive any HTTP method (GET, POST, PUT, DELETE, etc.).',
'All request data (headers, body, query parameters) will be available in your workflow.',
'If authentication is enabled, include the token in requests using either the custom header or "Authorization: Bearer TOKEN".',
'To deduplicate incoming events, set the Deduplication Field to the dot-notation path of a unique identifier in the payload (e.g. "event.id"). Duplicate values within 7 days will be skipped.',
'Enable "Verify Test Events" only if the sending service needs a temporary 200 response while validating the webhook URL.',
]
.map(
(instruction, index) =>
`<div class="mb-3"><strong>${index + 1}.</strong> ${instruction}</div>`
)
.join(''),
mode: 'trigger',
},
],
outputs: {},
webhook: {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
},
}