Проблема проявляется при попытке использовать transformSchema
и publicDirectiveTransformer
в конфигурации Apollo Gateway в приложении NestJS с использованием подхода code-first. В частности, функция transformSchema никогда не срабатывает, и не создаются журналы консоли, даже если они помещены непосредственно в функцию transformSchema.
Кроме того, эта проблема позволяет добавлять любое произвольное свойство (например, abc: true
) в конфигурацию шлюза без выдачи каких-либо ошибок, указывая на то, что конфигурация не проверяется или не обрабатывается должным образом пакетом @nestjs/graphql
.
Минимальный репозиторий для воспроизведения доступен здесь:
Вы можете воспроизвести это проблема со следующей настройкой codeа:
Подход:
12.2.0
10.0.0
18.17.0
Основная цель — добавить директиву в подграф (например, @public
), которая будет указывать суперграфу/шлюзу оставлять определенные запросы общедоступными, эффективно обходя аутентификацию для этих запросов. Шлюз должен соблюдать эту директиву, позволяя подграфу контролировать, какие запросы требуют аутентификации, а какие нет.
Однако из-за проблем, описанных выше, предполагаемое поведение не может быть достигнуто. Функция transformSchema
не вызывается, пользовательские директивы не обрабатываются правильно, а конфигурация не проверяется должным образом. Это блокирует реализацию гибкой системы аутентификации на основе директив в федеративной архитектуре GraphQL.
Эта проблема также создана в репозитории Nestjs graphql https://github.com/nestjs/graphql/issues/3296
"dependencies": {
"@apollo/gateway": "^2.8.1",
"@apollo/server": "^4.11.0",
"@apollo/subgraph": "^2.8.1",
"@nestjs/apollo": "^12.2.0",
"@nestjs/common": "^10.0.0",
"@nestjs/config": "^3.2.3",
"@nestjs/core": "^10.0.0",
"@nestjs/graphql": "^12.2.0",
"@nestjs/microservices": "^10.3.10",
"@nestjs/mongoose": "^10.0.10",
"@nestjs/platform-express": "^10.0.0",
"graphql": "^16.9.0",
"jsonwebtoken": "^9.0.2",
"mongoose": "^8.5.1",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1"
}