Невозможность использования transformSchema и пользовательских директив в конфигурации шлюза Apollo с @nestjs/graphql #3296

1
7

Проблема проявляется при попытке использовать transformSchema и publicDirectiveTransformer в конфигурации Apollo Gateway в приложении NestJS с использованием подхода code-first. В частности, функция transformSchema никогда не срабатывает, и не создаются журналы консоли, даже если они помещены непосредственно в функцию transformSchema.

Кроме того, эта проблема позволяет добавлять любое произвольное свойство (например, abc: true) в конфигурацию шлюза без выдачи каких-либо ошибок, указывая на то, что конфигурация не проверяется или не обрабатывается должным образом пакетом @nestjs/graphql.

Минимальный репозиторий для воспроизведения доступен здесь:

https://github.com/ahmad-punch/nestjs-gateway-federation2-transformSchema-issue-reproduction-code.git

Вы можете воспроизвести это проблема со следующей настройкой 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"
                           }
Артем
Вопрос задан5 апреля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.