Webhooks
Although you can poll eligibility requests and connections, we recommend registering webhooks, to monitor completion or status of requests.
Create a webhook
mutation {
createWebhookConfig(
input: { name: "Test", endpoint: "https://mywebsite/webhook" }
) {
id
endpoint
publicKey
}
}
enum WebhookEventType {
datasource_connected
datasource_disconnected
datasource_waiting_2fa
eligibility_requested
eligibility_failed
eligibility_ok
}
Sample webhook server
const express = require('express');
const { readFileSync } = require('fs');
const crypto = require('crypto');
const app = express();
app.use(express.json());
const port = 3002;
const publicKey = readFileSync(__dirname + '/../public.pem', 'utf8');
app.post('/webhook', (req, res) => {
const sign = req.header('x-tuuthfairy-signature');
if (!sign) {
return res.status(403).send('x-tuuthfairy-signature header is missing');
}
const body = req.body;
if (!body) {
return res.status(403).send('body is missing');
}
const rawBody = JSON.stringify(body);
try {
const isValid = crypto.verify(
'SHA256',
Buffer.from(rawBody),
publicKey,
Buffer.from(sign, 'base64')
);
if (!isValid) {
return res.status(403).send('x-tuuthfairy-signature is invalid');
}
} catch (error) {
console.log(error);
return res.status(403).send('x-tuuthfairy-signature is invalid []');
}
// Handle webhook here
console.log('webhook received');
console.info(body);
return res.send('ok');
});
app.listen(port, () => {
console.log(`Listening on port ${port}`);
});