mercurius-js / mercurius

Implement GraphQL servers and gateways with Fastify
https://mercurius.dev/
MIT License
2.33k stars 234 forks source link

Federation/Gateway related error occured after upgrading from 11.5.0 to 12.0.0, but federation feature isn't used. #957

Closed lity closed 1 year ago

lity commented 1 year ago

I met following issue after upgrading mercurius 11.5.0 to 12.0.0.

[13:21:32.046] ERROR: onGatewayReplaceSchema hook not supported!
    err: {
      "type": "FastifyError",
      "message": "onGatewayReplaceSchema hook not supported!",
      "stack":
          FastifyError: onGatewayReplaceSchema hook not supported!
              at Hooks.validate (/home/lty/web3-betting/web3-betting-backend/node_modules/.pnpm/mercurius@12.0.0_graphql@16.6.0/node_modules/mercurius/lib/hooks.js:33:11)
              at Hooks.add (/home/lty/web3-betting/web3-betting-backend/node_modules/.pnpm/mercurius@12.0.0_graphql@16.6.0/node_modules/mercurius/lib/hooks.js:38:8)
              at fastifyGraphQl.addHook (/home/lty/web3-betting/web3-betting-backend/node_modules/.pnpm/mercurius@12.0.0_graphql@16.6.0/node_modules/mercurius/index.js:383:18)
              at fp.name (/home/lty/web3-betting/web3-betting-backend/node_modules/.pnpm/mercurius-validation@3.0.0/node_modules/mercurius-validation/index.js:19:17)
              at Plugin.exec (/home/lty/web3-betting/web3-betting-backend/node_modules/.pnpm/avvio@8.2.0/node_modules/avvio/plugin.js:130:19)
              at Boot.loadPlugin (/home/lty/web3-betting/web3-betting-backend/node_modules/.pnpm/avvio@8.2.0/node_modules/avvio/plugin.js:272:10)
              at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
      "name": "FastifyError",
      "code": "MER_ERR_HOOK_UNSUPPORTED_HOOK",
      "statusCode": 500
    }

Plugin I used:

import mercurius from 'mercurius'
import mercuriusLogging from 'mercurius-logging'
import mercuriusCache from 'mercurius-cache'
import mercuriusValidation from 'mercurius-validation'
import mercuriusAuth from 'mercurius-auth'
import MercuriusGQLUpload from 'mercurius-upload'

Initialization:

        await app.register(MercuriusGQLUpload, {
            maxFileSize: config['upload-max-file-size'],
        })

        fs.writeFileSync(`./schema/mercurius-validation.gql`, mercuriusValidation.graphQLTypeDefs)
        const schema = await loadSchema('./schema/*.gql', { loaders: [new GraphQLFileLoader()] })
        await app.register(mercurius, {
            allowBatchedQueries: true,
            schema,
            resolvers,
            loaders,
            schemaTransforms,
            graphiql: false,
        })

        if (process.env.NODE_ENV !== 'production') {
            await app.register(mercuriusLogging, {
                logVariables: true
            })
        }

        await app.register(mercuriusValidation)

        await app.register(mercuriusAuth, {
            authContext(context) {
            ...
            },
            async applyPolicy(authDirectiveAST, parent, args, context, info) {
                return context.auth.user != undefined
            },
            authDirective: 'auth'
        })

        await app.register(mercuriusCache, {
            storage: {
                type: 'redis',
                options: {
                    client: redis1,
                    invalidation: true,
                }
            },
            logInterval: process.env.NODE_ENV === 'production' ? undefined : 10,
            logReport: process.env.NODE_ENV === 'production' ? undefined : report => console.table(report),
            ttl: 60 * 2,
            policy: {
                Query: {
                   ...
                },
                Mutation: {
                   ...
                }
            }
        })

Federation feature isn't used, why federation/gateway related error occured? How to fix it, thx.

mcollina commented 1 year ago

This is a duplicate of https://github.com/mercurius-js/cache/issues/126