import express from 'express';
const app = express();
app.use(express.json());
app.post('/webhooks/paygate', async (req, res) => {
const event = req.body;
// Log for debugging
console.log('Webhook received:', event.type);
switch (event.type) {
case 'payment.completed':
await handlePaymentCompleted(event);
break;
case 'feature.unlocked':
await handleFeatureUnlocked(event);
break;
case 'product.created':
case 'product.updated':
case 'product.deleted':
await handleProductEvent(event);
break;
default:
console.log('Unknown event type:', event.type);
}
// Always respond 200 to acknowledge
res.json({ received: true });
});
async function handlePaymentCompleted(event) {
// Grant access in your system
await db.access.create({
data: {
productId: event.productId,
walletAddress: event.walletAddress,
txHash: event.txHash,
amount: parseFloat(event.amount),
createdAt: new Date(event.timestamp)
}
});
}
async function handleFeatureUnlocked(event) {
// Store access token for user
await db.users.upsert({
where: { wallet: event.walletAddress },
update: {
accessToken: event.accessToken,
features: event.featureIds
},
create: {
wallet: event.walletAddress,
accessToken: event.accessToken,
features: event.featureIds
}
});
}
async function handleProductEvent(event) {
console.log(`Product ${event.productId}: ${event.type}`);
}