node-prisma-structure
Version:
A Node.js API structure using Prisma ORM for scalable and modular development. This package includes a complete authentication API (signup, login, logout, password reset, and token-based authentication) and provides a well-organized directory structure fo
79 lines (65 loc) • 2.4 kB
JavaScript
const jwt = require('jsonwebtoken');
const nodemailer = require("nodemailer");
const { EMAIL_SERVICE, EMAIL_PORT, EMAIL_SECURE, EMAIL, PASSWORD } = require('../config/node_prisma.constants');
const common = {
jwt_validate: async (token) => {
try {
const verified = jwt.verify(token, process.env.JWT_SECRET_KEY);
if (verified) {
return verified;
} else {
throw new Error("token_invalid");
}
} catch (error) {
// Access Denied
throw new Error("token_invalid");
}
},
jwt_sign: (user_id, user_type, expiresIn = "30days") => {
const enc_data = {
expiresIn,
data: { user_id, user_type }
}
const token = jwt.sign(enc_data, process.env.JWT_SECRET_KEY);
// console.log('token', token)
return token;
},
sendEmail: (to_mail, subject, message) => {
return new Promise((resolve, reject) => {
var transporter = nodemailer.createTransport({
service: EMAIL_SERVICE,
port: EMAIL_PORT,
secure: EMAIL_SECURE,
auth: {
user: EMAIL,
pass: PASSWORD,
},
});
let mailOptions = {
from: EMAIL,
to: to_mail,
subject: subject,
html: message
};
transporter.sendMail(mailOptions, function (error, info) {
console.log('Mail Send info :---->> ', { accepted: info?.accepted, rejected: info?.rejected, response: info?.response, envelope: info?.envelope });
if (!error) {
resolve(true);
} else {
console.log('error In mail send -=-=-=---->>> ', error);
resolve(false);
}
});
});
},
generateRandomNumericString: async (length) => {
let result = '';
const characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
},
}
module.exports = common