UNPKG

@krypton-org/krypton-auth

Version:

Express authentication middleware, using GraphQL and JSON Web Tokens.

191 lines 7.76 kB
"use strict"; /** * Module returning the GraphQL schema for the user management API. * @module graphql/Schema */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const graphql_compose_1 = require("graphql-compose"); const graphql_compose_mongoose_1 = require("graphql-compose-mongoose"); const mongoose_1 = __importDefault(require("mongoose")); const config_1 = __importDefault(require("../config")); const UserController = __importStar(require("../controller/UserController")); const UserModel_1 = __importDefault(require("../model/UserModel")); const UserSchema_1 = require("../model/UserSchema"); const MongooseSchema = mongoose_1.default.Schema; // Getting converted GraphQL public user fields from Mongoose schema const UserPublicInfoTC = graphql_compose_mongoose_1.composeWithMongoose(UserModel_1.default, { fields: { remove: [...UserSchema_1.internalFields, ...UserSchema_1.privateFields], }, name: 'UserPublicInfo', }); // Adding public queries - accessible publicly graphql_compose_1.schemaComposer.Query.addFields({ userById: UserPublicInfoTC.getResolver('findById'), userByIds: UserPublicInfoTC.getResolver('findByIds'), userCount: UserPublicInfoTC.getResolver('count'), userMany: UserPublicInfoTC.getResolver('findMany'), userOne: UserPublicInfoTC.getResolver('findOne'), userPagination: UserPublicInfoTC.getResolver('pagination'), }); // Getting converted GraphQL public user fields without the internal ones from Mongoose schema const convertedPrivateFields = graphql_compose_mongoose_1.composeWithMongoose(mongoose_1.default.model('mock', new MongooseSchema(UserSchema_1.UserSchema)), { fields: { remove: [...UserSchema_1.internalFields], }, }).getFields(); // User GraphQL Type with public and private fields - accessible by logged in user. const UserTC = UserPublicInfoTC.clone('User'); UserTC.addFields(convertedPrivateFields); /***** Types for queries and mutation *****/ const UserRegisterInputTC = graphql_compose_1.schemaComposer.createInputTC('UserRegisterInput'); // @ts-ignore UserRegisterInputTC.addFields(UserTC.getFields()); UserRegisterInputTC.addFields({ password: 'String!', }); UserRegisterInputTC.removeField([...UserSchema_1.uneditableFields, '_id']); const UserUpdateInputTC = graphql_compose_1.schemaComposer.createInputTC('UserUpdateInput'); // @ts-ignore UserUpdateInputTC.addFields(UserTC.getFields()); UserUpdateInputTC.addFields({ password: 'String', previousPassword: 'String', }); UserUpdateInputTC.removeField([...UserSchema_1.uneditableFields, '_id']); const UserAndTokenTC = graphql_compose_1.schemaComposer.createObjectTC({ fields: { expiryDate: 'Date!', token: 'String!', user: UserTC, }, name: 'UserAndToken', }); const TokenTC = graphql_compose_1.schemaComposer.createObjectTC({ fields: { expiryDate: 'Date!', token: 'String!', }, name: 'Token', }); const NotificationTypeTC = graphql_compose_1.schemaComposer.createEnumTC({ name: 'NotificationType', values: { ERROR: { value: 'error' }, INFO: { value: 'info' }, SUCCESS: { value: 'success' }, WARNING: { value: 'warning' }, }, }); const NotificationTC = graphql_compose_1.schemaComposer.createObjectTC({ fields: { message: 'String!', type: 'NotificationType!', }, name: 'Notification', }); const NotificationsTC = graphql_compose_1.schemaComposer.createObjectTC({ fields: { notifications: '[Notification]', }, name: 'Notifications', }); // Composing GraphQL Schema graphql_compose_1.schemaComposer.Query.addFields({ emailAvailable: { args: { email: 'String!', }, resolve: (_, { email }) => __awaiter(void 0, void 0, void 0, function* () { return yield UserController.checkEmailAvailable(email); }), type: 'Boolean', }, me: { resolve: (_, {}, { req, res }) => __awaiter(void 0, void 0, void 0, function* () { return yield UserController.getUser(req, res); }), type: UserTC, }, publicKey: { resolve: () => { return config_1.default.publicKey; }, type: 'String', }, sendPasswordRecoveryEmail: { args: { email: 'String!', }, resolve: (_, { email }, { req }) => UserController.sendPasswordRecoveryEmail(email, req), type: 'Boolean', }, sendVerificationEmail: { resolve: (_, {}, { req }) => __awaiter(void 0, void 0, void 0, function* () { return UserController.resendConfirmationEmail(req); }), type: 'Boolean', }, }); graphql_compose_1.schemaComposer.Mutation.addFields({ deleteMe: { args: { password: 'String!', }, resolve: (_, { password }, { req }) => __awaiter(void 0, void 0, void 0, function* () { return UserController.deleteUser(password, req); }), type: 'Boolean', }, login: { args: { email: 'String!', password: 'String!', }, resolve: (_, { email, password }, { req, res }) => __awaiter(void 0, void 0, void 0, function* () { return yield UserController.login(email, password, req, res); }), type: UserAndTokenTC, }, logout: { resolve: (_, {}, { req }) => __awaiter(void 0, void 0, void 0, function* () { return yield UserController.logout(req); }), type: 'Boolean', }, refreshToken: { resolve: (_, {}, { req, res }) => __awaiter(void 0, void 0, void 0, function* () { return yield UserController.refreshTokens(req, res); }), type: TokenTC, }, register: { args: { fields: 'UserRegisterInput!', }, resolve: (_, { fields }, { req }) => __awaiter(void 0, void 0, void 0, function* () { return yield UserController.createUser(fields, req); }), type: 'Boolean', }, resetMyPassword: { args: { password: 'String!', passwordRecoveryToken: 'String!', }, resolve: (_, { password, passwordRecoveryToken }) => __awaiter(void 0, void 0, void 0, function* () { return UserController.recoverPassword(password, passwordRecoveryToken); }), type: NotificationsTC, }, updateMe: { args: { fields: 'UserUpdateInput!', }, resolve: (_, { fields }, { req, res }) => __awaiter(void 0, void 0, void 0, function* () { return UserController.updateUser(fields, req, res); }), type: UserAndTokenTC, }, }); exports.default = graphql_compose_1.schemaComposer.buildSchema(); //# sourceMappingURL=Schema.js.map