apollo-router 1.25.0-alpha.1

A configurable, high-performance routing runtime for Apollo Federation 🚀
[package]
name = "apollo-router"
version = "1.25.0-alpha.1"
authors = ["Apollo Graph, Inc. <packages@apollographql.com>"]
repository = "https://github.com/apollographql/router/"
documentation = "https://docs.rs/apollo-router"
description = "A configurable, high-performance routing runtime for Apollo Federation 🚀"
license = "Elastic-2.0"

# renovate-automation: rustc version
rust-version = "1.70.0"
edition = "2021"
build = "build/main.rs"

[[bin]]
name = "router"
path = "src/main.rs"

[features]
default = ["global-allocator"]

# Set the Rust global allocator on some platforms
# https://doc.rust-lang.org/std/alloc/index.html#the-global_allocator-attribute
# Enabled by default. Disable default features in library crates or to set it yourself:
# ```
# [dependencies]
# apollo-router = {version = "1.20", default-features = false}
# ```
global-allocator = []

# if you are doing heap profiling
dhat-heap = ["dhat"]
dhat-ad-hoc = ["dhat"]

# Prevents the query execution to continue if any error occurs while fetching
# the data of a subgraph. This is useful in development as you want to be
# alerted early when something is wrong instead of receiving an invalid result.
failfast = []

# Enables usage of tokio-console with the router
# tokio-console also requires at build time the environment variable
# RUSTFLAGS="--cfg tokio_unstable"
console = ["tokio/tracing", "console-subscriber"]

# "fake" feature to disable V8 usage when building on docs.rs
# See https://github.com/apollographql/federation-rs/pull/185
docs_rs = ["router-bridge/docs_rs"]

[package.metadata.docs.rs]
features = ["docs_rs"]

[dependencies]
askama = "0.11.1"
access-json = "0.1.0"
anyhow = "1.0.72"
apollo-compiler = "0.10.0"
apollo-encoder = "0.5.1"
apollo-parser = "0.5.3"
arc-swap = "1.6.0"
async-compression = { version = "0.3.15", features = [
    "tokio",
    "brotli",
    "gzip",
    "deflate",
] }
async-trait = "0.1.71"
atty = "0.2.14"
axum = { version = "0.6.18", features = ["headers", "json", "original-uri"] }
base64 = "0.20.0"
buildstructor = "0.5.3"
bytes = "1.4.0"
clap = { version = "4.3.15", default-features = false, features = [
    "env",
    "derive",
    "std",
    "help",
] }
console-subscriber = { version = "0.1.10", optional = true }
ci_info = {version="0.14.10", features=["serde-1"] }
dashmap = { version = "5.5.0", features = ["serde"] }
derivative = "2.2.0"
derive_more = { version = "0.99.17", default-features = false, features = [
    "from",
    "display",
] }
dhat = { version = "0.3.2", optional = true }
diff = "0.1.13"
directories = "4.0.1"
displaydoc = "0.2"
flate2 = "1.0.24" # TODO: bump the flate2 dependency once deno updates it. Also, be sure to update Renovate configuration.
fred = { version = "6.3.0", features = ["enable-rustls", "no-client-setname"] }
futures = { version = "0.3.28", features = ["thread-pool"] }
graphql_client = "0.11.0"
hex = "0.4.3"
http = "0.2.9"
http-body = "0.4.5"
heck = "0.4.1"
humantime = "2.1.0"
humantime-serde = "1.1.1"
hyper = { version = "0.14.27", features = ["server", "client"] }
hyper-rustls = { version = "0.23.2", features = ["http1", "http2"] }
indexmap = { version = "1.9.3", features = ["serde-1"] }
itertools = "0.10.5"
jsonpath_lib = "0.3.0"
jsonschema = { version = "0.16.1", default-features = false }
jsonwebtoken = "8.3.0"
lazy_static = "1.4.0"
libc = "0.2.147"
linkme = "0.3.12"
lru = "0.8.1"
maplit = "1.0.2"
mediatype = "0.19.15"
mockall = "0.11.4"
mime = "0.3.17"
multer = "2.1.0"
multimap = "0.8.3"
# To avoid tokio issues
notify = { version = "5.2.0", default-features = false, features=["macos_kqueue"] }
nu-ansi-term = "0.47"
once_cell = "1.18.0"

# Any package that starts with `opentelemetry` needs to be updated with care
# because it is tightly intertwined with the `tracing` packages on account of
# the `opentelemetry-tracing` package.
#
# We are constrained in our ability to update the `tracing` packages and that is
# tracked in https://github.com/apollographql/router/issues/1407.
#
# To codify this with code, a rule in our Renovate configuration constraints and
# groups `^tracing` and `^opentelemetry*` dependencies together as of
# https://github.com/apollographql/router/pull/1509.  A comment which exists
# there (and on `tracing` packages below) should be updated should this change.
opentelemetry = { version = "0.19.0", features = [
    "rt-tokio",
    "metrics",
] }
opentelemetry-datadog = { version = "0.7.0", features = ["reqwest-client"] }
opentelemetry-http = "0.8.0"
opentelemetry-jaeger = { version = "0.18.0", features = [
    "collector_client",
    "reqwest_collector_client",
    "rt-tokio",
] }
opentelemetry-otlp = { version = "0.12.0", default-features = false, features = [
    "grpc-tonic",
    "tonic",
    "tls",
    "http-proto",
    "metrics",
    "reqwest-client",
] }
opentelemetry-semantic-conventions = "0.11.0"
opentelemetry-zipkin = { version = "0.17.0", default-features = false, features = [
    "reqwest-client",
    "reqwest-rustls",
] }
opentelemetry-prometheus = "0.12.0"
paste = "1.0.14"
pin-project-lite = "0.2.10"
prometheus = "0.13"
prost = "0.11.9"
prost-types = "0.11.9"
proteus = "0.5.0"
rand = "0.8.5"
rhai = { version = "1.15.1", features = ["sync", "serde", "internals"] }
regex = "1.9.1"
reqwest = { version = "0.11.18", default-features = false, features = [
    "rustls-tls",
    "rustls-native-certs",
    "json",
    "stream",
] }
# note: this dependency should _always_ be pinned, prefix the version with an `=`
router-bridge = "=0.4.0+v2.4.10"
rust-embed="6.8.1"
rustls = "0.20.8"
rustls-pemfile = "1.0.3"
schemars = { version = "0.8.12", features = ["url"] }
shellexpand = "3.1.0"
sha2 = "0.10.7"
serde = { version = "1.0.171", features = ["derive", "rc"] }
serde_json_bytes = { version = "0.2.1", features = ["preserve_order"] }
serde_json = { version = "1.0.103", features = ["preserve_order", "float_roundtrip"] }
serde_urlencoded = "0.7.1"
serde_yaml = "0.8.26"
static_assertions = "1.1.0"
strum_macros = "0.24.3"
sys-info = "0.9.1"
thiserror = "1.0.43"
tokio = { version = "1.29.1", features = ["full"] }
tokio-stream = { version = "0.1.14", features = ["sync", "net"] }
tokio-util = { version = "0.7.8", features = ["net", "codec", "time"] }
tonic = { version = "0.8.3", features = ["transport", "tls", "tls-roots", "gzip"] }
tower = { version = "0.4.13", features = ["full"] }
tower-http = { version = "0.3.5", features = [
    "add-extension",
    "trace",
    "cors",
    "compression-br",
    "compression-deflate",
    "compression-gzip",
    "decompression-br",
    "decompression-deflate",
    "decompression-gzip",
    "timeout",
] }
tower-service = "0.3.2"
tracing = "0.1.37"
tracing-core = "0.1.30"
tracing-futures = { version = "0.2.5", features = ["futures-03"] }
tracing-opentelemetry = "0.19.0"
tracing-subscriber = { version = "0.3.11", features = ["env-filter", "json"] }
url = { version = "2.4.0", features = ["serde"] }
urlencoding = "2.1.2"
uuid = { version = "1.4.1", features = ["serde", "v4"] }
yaml-rust = "0.4.5"
wiremock = "0.5.19"
wsl = "0.1.0"
tokio-tungstenite = { version = "0.18.0", features = ["rustls-tls-native-roots"] }
tokio-rustls = "0.23.4"
http-serde = "1.1.2"
hmac = "0.12.1"
parking_lot = "0.12.1"
memchr = "2.5.0"
brotli = "3.3.4"
zstd = "0.12.3"
zstd-safe = "6.0.5"
rand_core = "0.6.4"

[target.'cfg(macos)'.dependencies]
uname = "0.1.1"

[target.'cfg(unix)'.dependencies]
uname = "0.1.1"

[target.'cfg(target_os = "linux")'.dependencies]
tikv-jemallocator = "0.5"

[dev-dependencies]
axum = { version = "0.6.18", features = ["headers", "json", "original-uri", "ws"] }
ecdsa = { version = "0.15.1", features = ["signing", "pem", "pkcs8"] }
fred = { version = "6.3.0", features = ["enable-rustls", "no-client-setname"] }
futures-test = "0.3.28"
insta = { version = "1.31.0", features = ["json", "redactions", "yaml"] }
introspector-gadget = "0.2.2"
maplit = "1.0.2"
memchr = { version = "2.5.0", default-features = false }
mockall = "0.11.4"
once_cell = "1.18.0"
p256 = "0.12.0"
rand_core = "0.6.4"
redis = { version = "0.21.7", features = ["tokio-comp"] }
reqwest = { version = "0.11.18", default-features = false, features = [
    "json",
    "stream",
] }
rhai = { version = "1.15.1", features = ["sync", "serde", "internals", "testing-environ"] }
similar-asserts = "1.4.2"
tempfile = "3.6.0"
test-log = { version = "0.2.12", default-features = false, features = [
    "trace",
] }
test-span = "0.7"
toml = "0.7"
tower-test = "0.4.0"

# See note above in this file about `^tracing` packages which also applies to
# these dev dependencies.
tracing-subscriber = { version = "0.3", default-features = false, features = [
    "env-filter",
    "fmt",
] }
tracing-test = "0.2.2"
walkdir = "2.3.3"
wiremock = "0.5.19"

[target.'cfg(target_os = "linux")'.dev-dependencies]
rstack = { version = "0.3.3", features = ["dw"], default-features = false }


[build-dependencies]
tonic-build = "0.8.4"


[[test]]
name = "integration_tests"
path = "tests/integration_tests.rs"

[[bench]]
name = "huge_requests"
harness = false