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
|
|
|
|
}
|