All files / server/gql/users/outputs User.ts

0% Statements 0/39
0% Branches 0/5
0% Functions 0/8
0% Lines 0/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98                                                                                                                                                                                                   
import {
  GraphQLBoolean,
  GraphQLID,
  GraphQLObjectType,
  GraphQLString,
} from 'graphql';
import { GraphQLDateTime } from 'graphql-iso-date';
import { Pool, UserPoolId } from '../../../index';
import GraphQLUserGroup from '../inputs/UserGroup';
import findEmailInAttributes from '../lib/findEmailInAttributes';
import findExpirationDateInAttributes from '../lib/findExpirationDateInAttributes';
import findSubInAttributes from '../lib/findSubInAttributes';
 
export default new GraphQLObjectType({
  name: 'User',
  fields: {
    id: {
      type: GraphQLID,
      resolve: ({ Attributes, UserAttributes }: any): string | null => {
        if (Attributes) {
          return findSubInAttributes(Attributes);
        }
 
        if (UserAttributes) {
          return findSubInAttributes(UserAttributes);
        }
 
        return null;
      },
    },
    username: {
      type: GraphQLString,
      resolve: ({ Username }: any): string => Username,
    },
    createdDateTime: {
      type: GraphQLDateTime,
      resolve: ({ UserCreateDate }: any): string => UserCreateDate,
    },
    modifiedDateTime: {
      type: GraphQLDateTime,
      resolve: ({ UserLastModifiedDate }: any): string | undefined =>
        UserLastModifiedDate,
    },
    expirationDateTime: {
      type: GraphQLDateTime,
      resolve: ({ Attributes, UserAttributes }: any): Date | null => {
        let expirationDateTime = null;
        if (Attributes) {
          expirationDateTime = findExpirationDateInAttributes(Attributes);
        }
 
        if (UserAttributes) {
          expirationDateTime = findExpirationDateInAttributes(UserAttributes);
        }
 
        return expirationDateTime ? new Date(expirationDateTime) : null;
      },
    },
    isActive: {
      type: GraphQLBoolean,
      resolve: ({ Enabled }: any): boolean => Enabled,
    },
    status: {
      type: GraphQLString,
      resolve: ({ UserStatus }: any): string => UserStatus,
    },
    email: {
      type: GraphQLString,
      resolve: ({ Attributes, UserAttributes }: any): string | null => {
        if (Attributes) {
          return findEmailInAttributes(Attributes);
        }
 
        if (UserAttributes) {
          return findEmailInAttributes(UserAttributes);
        }
 
        return null;
      },
    },
    role: {
      type: GraphQLUserGroup,
      resolve: async ({ Username }: any): Promise<string | undefined> => {
        const { Groups } = await Pool.adminListGroupsForUser({
          UserPoolId,
          Username,
        }).promise();
 
        if (Groups && Groups[0] && Groups[0].GroupName) {
          return Groups[0].GroupName;
        }
 
        return;
      },
    },
  },
});