2025-03-08 21:12:47 +01:00

80 lines
1.8 KiB
JavaScript

const http = require('node:http')
const { ApolloServer, PubSub } = require('apollo-server-express')
const cors = require('cors')
const express = require('express')
const context = require('./apollo-server/context')
const schemaDirectives = require('./apollo-server/directives')
const resolvers = require('./apollo-server/resolvers')
const typeDefs = require('./apollo-server/type-defs')
const pubsub = new PubSub()
const app = express()
app.use(cors('*'))
app.get('/_reset', (req, res) => {
require('./apollo-server/reset.js').reset()
res.status(200).send('OK')
})
const server = new ApolloServer({
typeDefs,
resolvers,
schemaDirectives,
context: async ({ req, connection }) => {
let contextData
try {
if (connection) {
contextData = await context({ connection })
}
else {
contextData = await context({ req })
}
}
catch (e) {
console.error(e)
throw e
}
contextData = Object.assign({}, contextData, { pubsub })
return contextData
},
subscriptions: {
onConnect: async (connection, websocket) => {
let contextData = {}
try {
contextData = await context({
connection,
websocket,
})
contextData = Object.assign({}, contextData, { pubsub })
}
catch (e) {
console.error(e)
throw e
}
return contextData
},
},
formatError: (error) => {
if (error.extensions.code !== 'unauthorized') {
console.error(error.extensions?.exception?.stacktrace.join('\n') ?? error)
}
return error
},
playground: true,
introspection: true,
})
server.applyMiddleware({ app })
const httpServer = http.createServer(app)
server.installSubscriptionHandlers(httpServer)
httpServer.listen({
port: 4042,
}, () => {
console.log('🚀 Server ready at http://localhost:4042')
})