const { parse, visit } = require('graphql'); import { Config } from './app'; import { logger } from './logger'; export const isAllowed = (config: Config, query: string) => { let allowed = true; if (!query) { process.env.TEST !== 'true' && logger.info(`EMPTY QUERY NOT ALLOWED: ${query}`); return false; } try { const ast = parse(query); visit(ast, { OperationDefinition(operation) { operation.selectionSet.selections.forEach((node) => { const name = (node as any).name?.value as string; if (!config.allowedQueriesAndMutations || !config.allowedQueriesAndMutations.includes(name)) { process.env.TEST !== 'true' && logger.info(`QUERY NOT ALLOWED: ${name}, ${query}`); allowed = false; } }); }, }); } catch (e) { allowed = false; } return allowed; };