64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
import { ApolloServer } from 'apollo-server-micro'
|
|
import resolvers from '../../api/resolvers'
|
|
import models from '../../api/models'
|
|
import lnd from '../../api/lnd'
|
|
import typeDefs from '../../api/typeDefs'
|
|
import { getSession } from 'next-auth/client'
|
|
import search from '../../api/search'
|
|
import slashtags from '../../api/slashtags'
|
|
|
|
const apolloServer = new ApolloServer({
|
|
typeDefs,
|
|
resolvers,
|
|
plugins: [{
|
|
requestDidStart (initialRequestContext) {
|
|
return {
|
|
executionDidStart (executionRequestContext) {
|
|
return {
|
|
willResolveField ({ source, args, context, info }) {
|
|
const start = process.hrtime.bigint()
|
|
return (error, result) => {
|
|
const end = process.hrtime.bigint()
|
|
const ms = (end - start) / 1000000n
|
|
if (ms > 20 && info.parentType.name !== 'User') {
|
|
console.log(`Field ${info.parentType.name}.${info.fieldName} took ${ms}ms`)
|
|
}
|
|
if (error) {
|
|
console.log(`It failed with ${error}`)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}],
|
|
context: async ({ req }) => {
|
|
const session = await getSession({ req })
|
|
return {
|
|
models,
|
|
lnd,
|
|
me: session
|
|
? session.user
|
|
: null,
|
|
search,
|
|
slashtags
|
|
}
|
|
}
|
|
})
|
|
|
|
export const config = {
|
|
api: {
|
|
bodyParser: false
|
|
}
|
|
}
|
|
|
|
const startServer = apolloServer.start()
|
|
|
|
export default async function handler (req, res) {
|
|
await startServer
|
|
await apolloServer.createHandler({
|
|
path: '/api/graphql'
|
|
})(req, res)
|
|
}
|