chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 13:34:48 +08:00
commit 77bb5bf71f
3762 changed files with 353249 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
import { webhookPayloadSchema } from 'src/schemas'
import { recordCreated, recordUpdated, recordDeleted } from '../events'
import * as bp from '.botpress'
export function safeJsonParse(x: any) {
try {
return { data: JSON.parse(x), success: true }
} catch {
return { data: x, success: false }
}
}
export const handler: bp.IntegrationProps['handler'] = async ({ req, logger, client }) => {
if (!req.body) {
const errorMsg = 'Webhook processing failed: empty body'
logger.forBot().error(errorMsg)
return {
status: 400,
body: JSON.stringify({ error: errorMsg }),
}
}
// Parse and validate the webhook payload
const webhookData = safeJsonParse(req.body)
if (!webhookData.success) {
const errorMsg = 'Webhook processing failed: invalid JSON'
logger.forBot().error(errorMsg)
return { status: 400, body: JSON.stringify({ error: errorMsg }) }
}
const parseResult = webhookPayloadSchema.safeParse(webhookData.data)
if (!parseResult.success) {
const errorMsg = `Webhook processing failed: ${parseResult.error.message}`
logger.forBot().error(errorMsg)
return { status: 400, body: JSON.stringify({ error: errorMsg }) }
}
const { webhook_id, events } = parseResult.data
logger.forBot().info(`Processing webhook ${webhook_id} with ${events.length} events`)
// Process each event
for (const attioEvent of events) {
const event = attioEvent.event_type
switch (event) {
case 'record.created':
await recordCreated({ payload: attioEvent, client, logger })
break
case 'record.updated':
await recordUpdated({ payload: attioEvent, client, logger })
break
case 'record.deleted':
await recordDeleted({ payload: attioEvent, client, logger })
break
default:
logger.forBot().warn(`Unsupported event type: ${event}`)
}
}
return { status: 200 }
}