Untitled
unknown
javascript
3 years ago
1.9 kB
6
Indexable
import { createPubSub, createSchema, createYoga } from 'graphql-yoga'; import { createServer } from 'node:http'; import { WebSocketServer } from 'ws'; import { useServer } from 'graphql-ws/lib/use/ws'; import * as fs from 'fs'; import { ChatBoxModel } from './models/chatbox'; import Query from './resolvers/Query'; import Mutation from './resolvers/Mutation'; import Subscription from './resolvers/Subscription'; import ChatBox from './resolvers/ChatBox'; const pubsub = createPubSub(); const yoga = createYoga({ schema: createSchema({ typeDefs: fs.readFileSync('./src/schema.graphql', 'utf-8'), resolvers: { Query, Mutation, Subscription, ChatBox, }, }), context: { ChatBoxModel, pubsub, }, graphiql: { subscriptionsProtocol: 'WS', } }); const httpServer = createServer(yoga); const wsServer = new WebSocketServer({ server: httpServer, path: yoga.graphqlEndpoint, }) useServer( { execute: (args) => args.rootValue.execute(args), subscribe: (args) => args.rootValue.subscribe(args), onSubscribe: async (ctx, msg) => { const { schema, execute, subscribe, contextFactory, parse, validate } = yoga.getEnveloped({ ...ctx, req: ctx.extra.request, socket: ctx.extra.socket, params: msg.payload }); const args = { schema, operationName: msg.payload.operationName, document: parse(msg.payload.query), variableValues: msg.payload.variables, contextValue: await contextFactory(), rootValue: { execute, subscribe } }; const errors = validate(args.schema, args.document); if(errors.length) return errors; return args; }, }, wsServer ); export default httpServer;
Editor is loading...