import { stripe } from '../context/stripe' import { prisma } from '../context/prisma' import { ses } from '../context/aws' import { updateUserAttributes } from '../utils/cognito' exports.handler = async (event, context, callback) => { console.log(event); const { request: { userAttributes } } = event if (userAttributes.email) { try { await sendEmail(event.request.userAttributes.email, "Congratulations " + event.userName + ", you have been confirmed: "); console.log("===EMAIL SENT==="); } catch (error) { console.log(error); } try { await createAccount(event) } catch (error) { console.log(error); } callback(null, event); } else { // Nothing to do, the user's email ID is unknown callback(null, event); } }; const sendEmail= async (to, body) =>{ var eParams = { Destination: { ToAddresses: [to] }, Message: { Body: { Text: { Data: body } }, Subject: { Data: "Cognito Identity Provider registration completed" } }, // Replace source_email with your SES validated email address Source: process.env.SOURCE_EMAIL }; await ses.sendEmail(eParams).promise(); }; const createAccount = async (event) => { const { request: { userAttributes: { uid, email, username, name, phone, }, UserPoolId }, } = event const customer = await stripe.customers.create({ metadata: { uid }, email: email, name, phone, }); const stripeId = customer.id await updateUserAttributes({ username, attributes: { stripeId } }) return prisma.user.create({ data: { email: email, id: uid, name, username, stripeId } }) } // export const updateUsage = () => { // const userRef = db.doc(`users/${snap.data().userId}`); // const userDoc = await userRef.get(); // const user = userDoc.data(); // await (stripe as any).usageRecords.create( // user.itemId, // { // quantity: 1, // timestamp: (Date.parse(snap.createTime) / 1000) | 0, // action: 'increment' // }, // { // idempotency_key: snap.id // } // ); // return userRef.update({ currentUsage: user.currentUsage + 1 }); // }