mango-alerts-v3/src/utils.ts

72 lines
1.9 KiB
TypeScript
Raw Normal View History

2021-12-15 00:37:32 -08:00
import * as nodemailer from "nodemailer"
import * as EmailValidator from "email-validator"
import { MangoClient } from "@blockworks-foundation/mango-client"
import { PublicKey } from "@solana/web3.js"
import { UserError } from "./errors"
import config from "./environment"
const mailjetTransport = require("nodemailer-mailjet-transport")
export const validateMangoAccount = (client: MangoClient, alert: any) => {
return new Promise<void>(async (resolve, reject) => {
try {
const mangoGroupPk = new PublicKey(alert.mangoGroupPk)
2021-12-16 01:24:14 -08:00
const mangoAccountPk = new PublicKey(alert.mangoAccountPk)
2021-12-15 00:37:32 -08:00
const mangoGroup = await client.getMangoGroup(mangoGroupPk)
const mangoAccount = await client.getMangoAccount(
mangoAccountPk,
mangoGroup.dexProgramId
)
if (!mangoGroup || !mangoAccount) {
2021-12-16 01:24:14 -08:00
reject(new UserError("Invalid mango account or mango group"))
2021-12-15 00:37:32 -08:00
} else {
resolve()
}
} catch (e) {
2021-12-16 01:24:14 -08:00
reject(new UserError("Invalid mango account or mango group"))
2021-12-15 00:37:32 -08:00
}
})
}
export const validateEmail = (email: string) => {
if (!EmailValidator.validate(email)) {
2021-12-16 01:24:14 -08:00
throw new UserError("Enter a valid email")
2021-12-15 00:37:32 -08:00
}
return
}
const sendEmail = async (email: string, message: string) => {
const transport = nodemailer.createTransport(
mailjetTransport({
auth: {
apiKey: config.mailJetKey,
apiSecret: config.mailJetSecret,
},
})
)
const mailOptions = {
from: `${config.mailUser}@mango.markets`,
to: email,
subject: "Mango Alerts",
text: message,
}
try {
2021-12-16 01:24:14 -08:00
await transport.sendMail(mailOptions)
2021-12-15 00:37:32 -08:00
} catch (err) {
console.error(err)
}
transport.sendMail(mailOptions)
}
export const sendAlert = async (alert: any, message: string) => {
if (alert.alertProvider == "mail") {
const email = alert.email
sendEmail(email, message)
}
return true
}