Files
routstr-core/pyproject.toml
T

112 lines
3.4 KiB
TOML

[project]
name = "routstr"
version = "0.4.7"
description = "Payment proxy for your LLM endpoint using cashu and nostr."
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"fastapi[standard-no-fastapi-cloud-cli]>=0.141",
"aiosqlite>=0.20",
"sqlmodel>=0.0.24",
"httpx[socks]>=0.25.2",
"h11>=0.16",
"greenlet>=3.2.1",
"alembic>=1.13",
"python-json-logger>=2.0.0",
"cashu>=0.20",
"marshmallow>=3.13,<4.0",
"websockets>=12.0",
"nostr>=0.0.2",
"mdurl==0.1.2",
"pillow>=10",
"openai>=1.98.0",
"litellm>=1.55.0",
]
[dependency-groups]
dev = [
"mypy>=1.15.0",
"ruff>=0.11.6",
"openai>=1.76.0",
"pytest>=8.0.0",
"pytest-asyncio>=0.24.0",
"pytest-cov>=6.1.1",
"httpx>=0.25.2",
"psutil>=5.9.0",
"aiohttp>=3.9.0",
"pytest-benchmark>=4.0.0",
"routstr",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = "test_*.py"
python_classes = "Test*"
python_functions = "test_*"
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
addopts = [
"-v",
"--tb=short",
"--strict-markers",
"--disable-warnings",
"-p",
"no:warnings",
]
markers = [
"asyncio: marks tests as async (deselect with '-m \"not asyncio\"')",
"integration: marks tests as integration tests (deselect with '-m \"not integration\"')",
"unit: marks tests as unit tests",
"slow: marks tests as slow running (deselect with '-m \"not slow\"')",
"requires_real_mint: marks tests that require a running Cashu mint instance",
"requires_docker: marks tests that require Docker services running (deselect with '-m \"not requires_docker\"')",
"performance: marks tests that measure performance metrics",
]
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
[tool.setuptools]
packages = ["routstr"]
[tool.ruff.lint]
select = ["E", "F", "I"]
ignore = ["E501"]
exclude = ["examples"]
[tool.mypy]
python_version = "3.11"
ignore_missing_imports = true
disallow_untyped_defs = true
check_untyped_defs = true
disallow_untyped_calls = true
disallow_incomplete_defs = true
disallow_untyped_decorators = true
[tool.uv.sources]
routstr = { workspace = true }
# Security overrides (2026-09): cashu 0.20.x pins conservative upper bounds
# (h11<0.15, fastapi<0.116, cryptography<44, setuptools<76, wheel<0.42) that
# conflict with the patched versions of these libraries. routstr only imports
# cashu's wallet-side modules, which never exercise the fastapi/starlette/h11
# server paths those caps were set for.
[tool.uv]
override-dependencies = [
"h11>=0.16.0", # CVE-2025-43859: chunked-encoding smuggling (critical)
"fastapi[standard-no-fastapi-cloud-cli]>=0.141", # gateway to the starlette>=1.3.1 line (cashu caps <0.116)
"cryptography>=49.0.0", # GHSA-jwv3-5hgf-82ww et al. (cashu caps <44)
"setuptools>=83.0.0", # CVE-2026-59890, CVE-2025-47273 (cashu caps <76)
"wheel>=0.46.2", # CVE-2026-24049 (cashu caps <0.42)
]
# Floors for transitive deps whose locked versions are still in-range for their
# dependents but below the patched versions. Constraints (unlike overrides)
# don't bypass any upstream pin — they only force the resolver to take the
# fixed versions.
constraint-dependencies = [
"starlette>=1.3.1", # CVE-2026-54283, CVE-2026-48818, CVE-2026-48817, CVE-2026-48710, CVE-2025-62727, CVE-2025-54121
]