Skip to content
Snippets Groups Projects
app.module.ts 1.21 KiB
Newer Older
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 {}