grpc_graphql_gateway 0.3.7

A Rust implementation of gRPC-GraphQL gateway - generates GraphQL execution code from gRPC services
warning: file `/Users/raezil/Desktop/grpc_graphql_gateway/examples/federation/main.rs` found to be present in multiple build targets:
  * `bin` target `federation`
  * `example` target `federation`
warning: file `/Users/raezil/Desktop/grpc_graphql_gateway/examples/greeter/main.rs` found to be present in multiple build targets:
  * `bin` target `greeter`
  * `example` target `greeter`
   Compiling grpc_graphql_gateway v0.3.6 (/Users/raezil/Desktop/grpc_graphql_gateway)
warning: field `config` is never read
   --> src/analytics.rs:299:5
    |
298 | struct AnalyticsState {
    |        -------------- field in this struct
299 |     config: AnalyticsConfig,
    |     ^^^^^^
    |
    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: `grpc_graphql_gateway` (lib) generated 1 warning
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.76s
     Running `target/debug/greeter`
GraphQL endpoint: http://127.0.0.1:8888/graphql
WebSocket endpoint: ws://127.0.0.1:8888/graphql/ws
Try these operations once the servers are up:

=== gRPC Backend (via GraphQL) ===
  query { hello(name:"GraphQL") { message meta { correlationId from { id displayName trusted } } } }
  mutation { updateGreeting(input:{ name:"GraphQL", salutation:"Howdy" }) { message } }
  subscription { streamHello(name:"GraphQL") { message meta { correlationId } } }
  query { user(id:"demo") { id displayName trusted } }

=== REST Connector (JSONPlaceholder API) ===
The gateway includes a REST connector for https://jsonplaceholder.typicode.com
You can execute REST endpoints programmatically via the connector:

  // In your resolver or middleware:
  let connector = gateway.rest_connectors().get("jsonplaceholder").unwrap();
  let result = connector.execute("getPost", args).await?;

Test the REST connector directly with curl:
  curl https://jsonplaceholder.typicode.com/posts/1
  curl https://jsonplaceholder.typicode.com/users/1

=== File Uploads ===
  # Upload (multipart): see README for the curl example
  # Multi-upload (multipart): see README for the curl example

NOTE: Query whitelisting is enabled in WARN mode.
      Non-whitelisted queries will log warnings but still execute.
      Set WhitelistMode::Enforce in production for strict security!

NOTE: REST connector is configured for JSONPlaceholder API demo.
      Use add_rest_connector() to integrate your own REST APIs!

=== Query Analytics Dashboard ===
  Dashboard UI: http://127.0.0.1:8888/analytics
  JSON API:     http://127.0.0.1:8888/analytics/api
  Reset:        curl -X POST http://127.0.0.1:8888/analytics/reset
2025-12-16T07:53:03.140672Z  INFO greeter: gRPC Greeter listening on 127.0.0.1:50051
2025-12-16T07:53:03.140704Z  INFO greeter: GraphQL gateway listening on http://127.0.0.1:8888/graphql (ws://127.0.0.1:8888/graphql/ws for subscriptions)
2025-12-16T07:53:03.149426Z  INFO grpc_graphql_gateway::rest_connector: REST connector configured with 5 endpoints at https://jsonplaceholder.typicode.com
2025-12-16T07:53:03.149560Z  INFO greeter: REST connector configured from OpenAPI spec (jsonplaceholder.yaml)
2025-12-16T07:53:03.149577Z  INFO greeter: Available operations:
2025-12-16T07:53:03.149589Z  INFO greeter:   - jp_listPosts: GET /posts
2025-12-16T07:53:03.149601Z  INFO greeter:   - jp_getPost: GET /posts/{id}
2025-12-16T07:53:03.149611Z  INFO greeter:   - jp_createPost: POST /posts
2025-12-16T07:53:03.149622Z  INFO greeter:   - jp_getUser: GET /users/{id}
2025-12-16T07:53:03.149631Z  INFO greeter:   - jp_listUsers: GET /users
2025-12-16T07:53:03.357718Z  INFO grpc_graphql_gateway::schema: Added 4 REST query fields and 1 REST mutation fields to schema
2025-12-16T07:53:03.359495Z  INFO grpc_graphql_gateway::gateway: Gateway server listening on 127.0.0.1:8888
2025-12-16T07:53:03.815623Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: c894d6dbf7b1694a
2025-12-16T07:53:03.815660Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: c894d6dbf7b1694a
2025-12-16T07:53:03.823284Z  INFO grpc_graphql_gateway::middleware: GraphQL request received request_id=877e5c3d-74c0-4104-9564-2bdad19b872b client_ip=None
2025-12-16T07:53:04.230532Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 39f35789c54f8db8
2025-12-16T07:53:04.230567Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 39f35789c54f8db8
2025-12-16T07:53:04.240152Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 6598cef6b15fd618
2025-12-16T07:53:04.240192Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 6598cef6b15fd618
2025-12-16T07:53:04.282330Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 8d1d82847405fe68
2025-12-16T07:53:04.282367Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 8d1d82847405fe68
2025-12-16T07:53:04.302823Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 9c48f9a014aa502f
2025-12-16T07:53:04.302858Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 9c48f9a014aa502f
2025-12-16T07:53:04.309467Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 46e8bce118eb50db
2025-12-16T07:53:04.309499Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 46e8bce118eb50db
2025-12-16T07:53:04.330804Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 8b5d7e0dd17d937a
2025-12-16T07:53:04.330838Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 8b5d7e0dd17d937a
2025-12-16T07:53:04.338062Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 8b5d7e0dd17d937a
2025-12-16T07:53:04.338092Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 8b5d7e0dd17d937a
2025-12-16T07:53:04.346395Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 743e76a3e37affde
2025-12-16T07:53:04.346425Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 743e76a3e37affde
2025-12-16T07:53:04.352757Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 7f9411da0792b766
2025-12-16T07:53:04.352778Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 7f9411da0792b766
2025-12-16T07:53:04.359077Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 9c48f9a014aa502f
2025-12-16T07:53:04.359100Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 9c48f9a014aa502f
2025-12-16T07:53:04.365418Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 26c619256b902cd3
2025-12-16T07:53:04.365439Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 26c619256b902cd3
2025-12-16T07:53:04.371897Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 26c619256b902cd3
2025-12-16T07:53:04.371918Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 26c619256b902cd3
2025-12-16T07:53:04.386997Z  WARN grpc_graphql_gateway::query_whitelist: Query rejected by whitelist: Query hash: 9c48f9a014aa502f
2025-12-16T07:53:04.387024Z  WARN grpc_graphql_gateway::runtime: Query whitelist validation failed: Query not in whitelist: Query hash: 9c48f9a014aa502f