Skip to content
Snippets Groups Projects
app.module.ts 1.39 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';
xcf-t's avatar
xcf-t committed
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],
xcf-t's avatar
xcf-t committed
			driver: ApolloDriver,
			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 {}