user-serializer.ts 873 B

123456789101112131415161718192021222324252627282930
  1. import { isPopulated, type Ref } from '../../interfaces/common';
  2. import type { IUser } from '../../interfaces/user';
  3. export type IUserSerializedSecurely = Omit<IUser, 'password' | 'apiToken' | 'email'> & { email?: string };
  4. export const omitInsecureAttributes = (user: IUser): IUserSerializedSecurely => {
  5. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  6. const { password, apiToken, ...rest } = user;
  7. const secureUser: IUserSerializedSecurely = rest;
  8. // omit email
  9. if (!secureUser.isEmailPublished) {
  10. delete secureUser.email;
  11. }
  12. return secureUser;
  13. };
  14. export const serializeUserSecurely = (user?: Ref<IUser>): Ref<IUserSerializedSecurely> | undefined => {
  15. // return when it is not a user object
  16. if (user == null || !isPopulated(user)) {
  17. return user;
  18. }
  19. return {
  20. _id: user._id,
  21. ...omitInsecureAttributes(user),
  22. };
  23. };