Skip to content
Snippets Groups Projects
app.module.ts 1.21 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';
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    
    @Module({
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    	imports: [
    		PrismaModule,
    		GraphQLModule.forRoot<ApolloDriverConfig>({
    			driver: ApolloDriver,
    			autoSchemaFile: true,
    			playground: true,
    			subscriptions: {
    
    				'graphql-ws': {
    					onConnect: (context: Context<any, any>) => {
    						const { connectionParams, extra } = context;
    
    xcf-t's avatar
    xcf-t committed
    						const token = connectionParams.authorization;
    
    
    						if (!token)
    							throw new UnauthorizedException(
    								'Missing token in websocket auth',
    							);
    
    						extra.token = token;
    					},
    				},
    			},
    			context: (ctx) => {
    				if (ctx.req) return { req: ctx.req };
    				if (ctx.request) return { req: ctx.request };
    				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 {}