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
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:
@@ -0,0 +1,146 @@
|
||||
import { createLogger } from '@sim/logger'
|
||||
import { NextResponse } from 'next/server'
|
||||
import { airtableHandler } from '@/lib/webhooks/providers/airtable'
|
||||
import { ashbyHandler } from '@/lib/webhooks/providers/ashby'
|
||||
import { attioHandler } from '@/lib/webhooks/providers/attio'
|
||||
import { azureDevOpsHandler } from '@/lib/webhooks/providers/azure-devops'
|
||||
import { calcomHandler } from '@/lib/webhooks/providers/calcom'
|
||||
import { calendlyHandler } from '@/lib/webhooks/providers/calendly'
|
||||
import { circlebackHandler } from '@/lib/webhooks/providers/circleback'
|
||||
import { clerkHandler } from '@/lib/webhooks/providers/clerk'
|
||||
import { confluenceHandler } from '@/lib/webhooks/providers/confluence'
|
||||
import { emailBisonHandler } from '@/lib/webhooks/providers/emailbison'
|
||||
import { fathomHandler } from '@/lib/webhooks/providers/fathom'
|
||||
import { firefliesHandler } from '@/lib/webhooks/providers/fireflies'
|
||||
import { genericHandler } from '@/lib/webhooks/providers/generic'
|
||||
import { githubHandler } from '@/lib/webhooks/providers/github'
|
||||
import { gitlabHandler } from '@/lib/webhooks/providers/gitlab'
|
||||
import { gmailHandler } from '@/lib/webhooks/providers/gmail'
|
||||
import { gongHandler } from '@/lib/webhooks/providers/gong'
|
||||
import { googleFormsHandler } from '@/lib/webhooks/providers/google-forms'
|
||||
import { grainHandler } from '@/lib/webhooks/providers/grain'
|
||||
import { greenhouseHandler } from '@/lib/webhooks/providers/greenhouse'
|
||||
import { imapHandler } from '@/lib/webhooks/providers/imap'
|
||||
import { incidentioHandler } from '@/lib/webhooks/providers/incidentio'
|
||||
import { instantlyHandler } from '@/lib/webhooks/providers/instantly'
|
||||
import { intercomHandler } from '@/lib/webhooks/providers/intercom'
|
||||
import { jiraHandler } from '@/lib/webhooks/providers/jira'
|
||||
import { jsmHandler } from '@/lib/webhooks/providers/jsm'
|
||||
import { lemlistHandler } from '@/lib/webhooks/providers/lemlist'
|
||||
import { linearHandler } from '@/lib/webhooks/providers/linear'
|
||||
import { linqHandler } from '@/lib/webhooks/providers/linq'
|
||||
import { loopsHandler } from '@/lib/webhooks/providers/loops'
|
||||
import { microsoftTeamsHandler } from '@/lib/webhooks/providers/microsoft-teams'
|
||||
import { mondayHandler } from '@/lib/webhooks/providers/monday'
|
||||
import { notionHandler } from '@/lib/webhooks/providers/notion'
|
||||
import { outlookHandler } from '@/lib/webhooks/providers/outlook'
|
||||
import { pagerdutyHandler } from '@/lib/webhooks/providers/pagerduty'
|
||||
import { resendHandler } from '@/lib/webhooks/providers/resend'
|
||||
import { revenueCatHandler } from '@/lib/webhooks/providers/revenuecat'
|
||||
import { rootlyHandler } from '@/lib/webhooks/providers/rootly'
|
||||
import { rssHandler } from '@/lib/webhooks/providers/rss'
|
||||
import { salesforceHandler } from '@/lib/webhooks/providers/salesforce'
|
||||
import { sendblueHandler } from '@/lib/webhooks/providers/sendblue'
|
||||
import { sentryHandler } from '@/lib/webhooks/providers/sentry'
|
||||
import { servicenowHandler } from '@/lib/webhooks/providers/servicenow'
|
||||
import { slackHandler } from '@/lib/webhooks/providers/slack'
|
||||
import { stripeHandler } from '@/lib/webhooks/providers/stripe'
|
||||
import { tableProviderHandler } from '@/lib/webhooks/providers/table'
|
||||
import { telegramHandler } from '@/lib/webhooks/providers/telegram'
|
||||
import { tiktokHandler } from '@/lib/webhooks/providers/tiktok'
|
||||
import { twilioHandler } from '@/lib/webhooks/providers/twilio'
|
||||
import { twilioVoiceHandler } from '@/lib/webhooks/providers/twilio-voice'
|
||||
import { typeformHandler } from '@/lib/webhooks/providers/typeform'
|
||||
import type { WebhookProviderHandler } from '@/lib/webhooks/providers/types'
|
||||
import { verifyTokenAuth } from '@/lib/webhooks/providers/utils'
|
||||
import { vercelHandler } from '@/lib/webhooks/providers/vercel'
|
||||
import { webflowHandler } from '@/lib/webhooks/providers/webflow'
|
||||
import { whatsappHandler } from '@/lib/webhooks/providers/whatsapp'
|
||||
import { zendeskHandler } from '@/lib/webhooks/providers/zendesk'
|
||||
import { zoomHandler } from '@/lib/webhooks/providers/zoom'
|
||||
|
||||
const logger = createLogger('WebhookProviderRegistry')
|
||||
|
||||
const PROVIDER_HANDLERS: Record<string, WebhookProviderHandler> = {
|
||||
airtable: airtableHandler,
|
||||
ashby: ashbyHandler,
|
||||
attio: attioHandler,
|
||||
azure_devops: azureDevOpsHandler,
|
||||
calendly: calendlyHandler,
|
||||
calcom: calcomHandler,
|
||||
circleback: circlebackHandler,
|
||||
clerk: clerkHandler,
|
||||
confluence: confluenceHandler,
|
||||
emailbison: emailBisonHandler,
|
||||
fireflies: firefliesHandler,
|
||||
generic: genericHandler,
|
||||
gmail: gmailHandler,
|
||||
github: githubHandler,
|
||||
gitlab: gitlabHandler,
|
||||
gong: gongHandler,
|
||||
google_forms: googleFormsHandler,
|
||||
fathom: fathomHandler,
|
||||
grain: grainHandler,
|
||||
greenhouse: greenhouseHandler,
|
||||
imap: imapHandler,
|
||||
incidentio: incidentioHandler,
|
||||
intercom: intercomHandler,
|
||||
instantly: instantlyHandler,
|
||||
jira: jiraHandler,
|
||||
jsm: jsmHandler,
|
||||
lemlist: lemlistHandler,
|
||||
linear: linearHandler,
|
||||
linq: linqHandler,
|
||||
loops: loopsHandler,
|
||||
monday: mondayHandler,
|
||||
resend: resendHandler,
|
||||
revenuecat: revenueCatHandler,
|
||||
rootly: rootlyHandler,
|
||||
sentry: sentryHandler,
|
||||
'microsoft-teams': microsoftTeamsHandler,
|
||||
notion: notionHandler,
|
||||
outlook: outlookHandler,
|
||||
pagerduty: pagerdutyHandler,
|
||||
rss: rssHandler,
|
||||
salesforce: salesforceHandler,
|
||||
sendblue: sendblueHandler,
|
||||
servicenow: servicenowHandler,
|
||||
slack: slackHandler,
|
||||
// Native OAuth Slack trigger — inbound events are verified in the shared
|
||||
// /api/webhooks/slack route; the handler reuses Slack payload normalization.
|
||||
slack_app: slackHandler,
|
||||
stripe: stripeHandler,
|
||||
table: tableProviderHandler,
|
||||
telegram: telegramHandler,
|
||||
tiktok: tiktokHandler,
|
||||
twilio: twilioHandler,
|
||||
twilio_voice: twilioVoiceHandler,
|
||||
typeform: typeformHandler,
|
||||
vercel: vercelHandler,
|
||||
webflow: webflowHandler,
|
||||
whatsapp: whatsappHandler,
|
||||
zendesk: zendeskHandler,
|
||||
zoom: zoomHandler,
|
||||
}
|
||||
|
||||
/**
|
||||
* Default handler for unknown/future providers.
|
||||
* Uses timing-safe comparison for bearer token validation.
|
||||
*/
|
||||
const defaultHandler: WebhookProviderHandler = {
|
||||
verifyAuth({ request, requestId, providerConfig }) {
|
||||
const token = providerConfig.token
|
||||
if (typeof token === 'string') {
|
||||
if (!verifyTokenAuth(request, token)) {
|
||||
logger.warn(`[${requestId}] Unauthorized webhook access attempt - invalid token`)
|
||||
return new NextResponse('Unauthorized', { status: 401 })
|
||||
}
|
||||
}
|
||||
return null
|
||||
},
|
||||
}
|
||||
|
||||
/** Look up the provider handler, falling back to the default bearer token handler. */
|
||||
export function getProviderHandler(provider: string): WebhookProviderHandler {
|
||||
return PROVIDER_HANDLERS[provider] ?? defaultHandler
|
||||
}
|
||||
Reference in New Issue
Block a user