import { Module, UnauthorizedException } from '@nestjs/common'; import { PrismaModule } from './prisma/prisma.module'; import { GraphQLModule } from '@nestjs/graphql'; import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo'; import { ResolverModule } from './resolvers/resolver.module'; import { TelegramModule } from './telegram/telegram.module'; import { Context } from 'graphql-ws'; @Module({ imports: [ PrismaModule, GraphQLModule.forRoot<ApolloDriverConfig>({ 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', ); 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, }, }, }; }, }), ResolverModule, TelegramModule, ], }) export class AppModule {}