Skip to content
Snippets Groups Projects
app.module.ts 1.37 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Module, UnauthorizedException } from '@nestjs/common';
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    import { PrismaModule } from './prisma/prisma.module';
    import { GraphQLModule } from '@nestjs/graphql';
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    import { ResolverModule } from './resolvers/resolver.module';
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    import { TelegramModule } from './telegram/telegram.module';
    
    import { Context } from 'graphql-ws';
    
    import { ModuleRef } from "@nestjs/core";
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    
    @Module({
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    	imports: [
    		PrismaModule,
    
    		GraphQLModule.forRootAsync<ApolloDriverConfig>({
    			inject: [ModuleRef],
    			useFactory: (ref: ModuleRef) => ({
    				driver: ApolloDriver,
    				autoSchemaFile: true,
    				playground: true,
    				subscriptions: {
    					'graphql-ws': {
    						onConnect: (context: Context<any, any>) => {
    							const { connectionParams, extra } = context;
    							const token = connectionParams.authorization;
    
    							if (!token)
    								throw new UnauthorizedException(
    									'Missing token in websocket auth',
    								);
    
    				context: (ctx) => {
    					if (ctx.req) return { req: ctx.req, ref };
    					if (ctx.request) return { req: ctx.request, ref };
    					const token = ctx?.extra?.token;
    
    					return {
    						req: {
    							headers: {
    								authorization: token,
    							},
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    		}),
    		ResolverModule,
    		TelegramModule,
    	],
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    })
    export class AppModule {}