UNPKG

payloadcms_otp_plugin

Version:

A comprehensive One-Time Password (OTP) authentication plugin for Payload CMS that enables secure passwordless authentication via SMS and email

92 lines (91 loc) 3.46 kB
import { OTPService } from '../services/index.js'; import { createTranslationHelper } from '../utilities/translation.js'; // Helper function to create standardized responses const createResponse = (data, message, success)=>({ data: success ? data : null, message, code: success ? 200 : 400, error: !success }); // Helper function to handle errors const handleError = (error, operation, headers)=>{ // console.error(`${operation} Error:`, error); const { t } = createTranslationHelper(headers || new Headers()); const response = createResponse(null, t("api.internal_server_error"), false); return Response.json(response, { status: 500 }); }; // Helper function to initialize OTP service const initOTPService = (req)=>{ const afterSetOtpHook = req.payload.otpPluginHooks?.afterSetOtp; return new OTPService(req, 'users', afterSetOtpHook); }; export const sendOtpEndpointHandler = async (req)=>{ try { const { t } = createTranslationHelper(req.headers); const body = req.json ? await req.json() : {}; const { mobile, email } = body; if (!mobile && !email) { const response = createResponse(null, t("api.mobile_or_email_required"), false); return Response.json(response, { status: 400 }); } const otpService = initOTPService(req); const result = await otpService.sendOTP({ email, mobile }, req.headers); const response = createResponse(null, result.message, result.success); return Response.json(response, { status: result.success ? 200 : 400 }); } catch (error) { return handleError(error, 'Send OTP', req.headers); } }; export const loginWithMobileEndpointHandler = async (req)=>{ try { const { t } = createTranslationHelper(req.headers); const body = req.json ? await req.json() : {}; const { mobile, otp, email } = body; if (!mobile && !email || !otp) { const response = createResponse(null, t("api.mobile_email_and_otp_required"), false); return Response.json(response, { status: 400 }); } const otpService = initOTPService(req); const result = await otpService.loginWithOTP({ mobile, email, otp }, req.headers); const responseData = result.success ? result.data : null; const response = createResponse(responseData, result.message, result.success); return Response.json(response, { status: result.success ? 200 : 400 }); } catch (error) { return handleError(error, 'Login with OTP', req.headers); } }; export const getOtpConfigEndpointHandler = async (req)=>{ try { const { t } = createTranslationHelper(req.headers); const config = req.payload.otpPluginConfig; const otpLength = config?.otpLength || 6; const expiredTime = config?.expiredTime || 300000; // Default 5 minutes const response = createResponse({ otpLength, expiredTime }, t("api.otp_config_retrieved"), true); return Response.json(response, { status: 200 }); } catch (error) { return handleError(error, 'Get OTP Config', req.headers); } }; //# sourceMappingURL=customEndpointHandler.js.map