const crypto = require('crypto');
// This is the part that should be called by your `grant` route handler
async function grant(req, res) {
const amount = req.body['amount'];
const originFundId = req.body['fundId'];
const destinationOrgId = req.body['orgId'];
const purpose = req.body['purpose'];
if (!amount || !originFundId || !destinationOrgId || !purpose) {
// Return an error response if any of the required fields are missing
res.status(400);
res.end();
return;
}
// Get the Endaoment access token for the user
// This is a placeholder function, you should replace it with your own implementation
const token = getAccessToken(req);
// Generate a unique key for the donation request
// This can be generated by anything that is unique to the donation request
const idempotencyKey = crypto.randomUUID();
// Convert the amount to microdollars
// 1 dollar = 1,000,000 microdollars
// The actual formula for the conversion will depend on how you handle currency and data types in your application
const requestedAmount = (BigInt(amount) * 1000000n).toString();
// Make a request to the Endaoment API to create the donation request
const grantRequest = await fetch(
'https://api.dev.endaoment.org/v1/transfers/async-grants',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
// Pass the user's token in the Authorization header
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
originFundId,
destinationOrgId,
requestedAmount,
purpose,
idempotencyKey,
}),
}
);
// We can now return the response to the frontend
res.status(200);
res.json(await grantRequest.json());
res.end();
}