import { Types } from "mongoose"; import { createTokenHelper, validateTokenHelper } from "../helpers/token"; /** * Class to handle token actions * TODO: elaborate more on this class */ class TokenService { /** * Create a token [token] for type [type] with associated details * @param {Object} obj * @param {String} obj.type - type or context of token (e.g. emailConfirmation) * @param {String} obj.email - email associated with the token * @param {String} obj.phoneNumber - phone number associated with the token * @param {Types.ObjectId} obj.organizationId - id of organization associated with the token * @returns {String} token - the token to create */ static async createToken({ type, email, phoneNumber, organizationId, }: { type: "emailConfirmation" | "emailMfa" | "organizationInvitation" | "passwordReset"; email?: string; phoneNumber?: string; organizationId?: Types.ObjectId; }) { return await createTokenHelper({ type, email, phoneNumber, organizationId, }); } /** * Validate whether or not token [token] and its associated details match a token in the DB * @param {Object} obj * @param {String} obj.type - type or context of token (e.g. emailConfirmation) * @param {String} obj.email - email associated with the token * @param {String} obj.phoneNumber - phone number associated with the token * @param {Types.ObjectId} obj.organizationId - id of organization associated with the token * @param {String} obj.token - the token to validate */ static async validateToken({ type, email, phoneNumber, organizationId, token, }: { type: "emailConfirmation" | "emailMfa" | "organizationInvitation" | "passwordReset"; email?: string; phoneNumber?: string; organizationId?: Types.ObjectId; token: string; }) { return await validateTokenHelper({ type, email, phoneNumber, organizationId, token, }); } } export default TokenService;