cconnect 1.8.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cconnect might be problematic. Click here for more details.
- cconnect-1.8.8/PKG-INFO +44 -0
- cconnect-1.8.8/cconnect.egg-info/PKG-INFO +44 -0
- cconnect-1.8.8/cconnect.egg-info/SOURCES.txt +100 -0
- cconnect-1.8.8/cconnect.egg-info/dependency_links.txt +1 -0
- cconnect-1.8.8/cconnect.egg-info/entry_points.txt +2 -0
- cconnect-1.8.8/cconnect.egg-info/requires.txt +27 -0
- cconnect-1.8.8/cconnect.egg-info/top_level.txt +6 -0
- cconnect-1.8.8/core/__init__.py +0 -0
- cconnect-1.8.8/core/access.py +17 -0
- cconnect-1.8.8/core/app.py +97 -0
- cconnect-1.8.8/core/cli.py +584 -0
- cconnect-1.8.8/core/cli_manager.py +169 -0
- cconnect-1.8.8/core/config.py +131 -0
- cconnect-1.8.8/core/data_migration.py +116 -0
- cconnect-1.8.8/core/db.py +66 -0
- cconnect-1.8.8/core/models.py +110 -0
- cconnect-1.8.8/core/paths.py +68 -0
- cconnect-1.8.8/core/prompts/BLOCKS.md +17 -0
- cconnect-1.8.8/core/prompts/BROWSER.md +10 -0
- cconnect-1.8.8/core/prompts/CCONNECT.md +28 -0
- cconnect-1.8.8/core/prompts/COMMIT.md +13 -0
- cconnect-1.8.8/core/prompts/SUGGESTIONS.md +20 -0
- cconnect-1.8.8/core/rate_limit.py +10 -0
- cconnect-1.8.8/core/release.py +5 -0
- cconnect-1.8.8/core/responses.py +65 -0
- cconnect-1.8.8/core/sdk.py +63 -0
- cconnect-1.8.8/core/settings_defs.py +49 -0
- cconnect-1.8.8/core/ws.py +11 -0
- cconnect-1.8.8/mcps/__init__.py +79 -0
- cconnect-1.8.8/mcps/browser.py +122 -0
- cconnect-1.8.8/mcps/check_progress.py +196 -0
- cconnect-1.8.8/mcps/components.py +339 -0
- cconnect-1.8.8/mcps/media.py +67 -0
- cconnect-1.8.8/mcps/session.py +89 -0
- cconnect-1.8.8/mcps/terminal.py +139 -0
- cconnect-1.8.8/middleware/__init__.py +0 -0
- cconnect-1.8.8/middleware/error_handler.py +27 -0
- cconnect-1.8.8/middleware/public_auth.py +54 -0
- cconnect-1.8.8/middleware/security.py +40 -0
- cconnect-1.8.8/pyproject.toml +72 -0
- cconnect-1.8.8/routers/__init__.py +0 -0
- cconnect-1.8.8/routers/accounts.py +142 -0
- cconnect-1.8.8/routers/browser.py +114 -0
- cconnect-1.8.8/routers/capabilities.py +61 -0
- cconnect-1.8.8/routers/chat.py +527 -0
- cconnect-1.8.8/routers/claude.py +184 -0
- cconnect-1.8.8/routers/cli.py +52 -0
- cconnect-1.8.8/routers/git.py +111 -0
- cconnect-1.8.8/routers/health.py +28 -0
- cconnect-1.8.8/routers/list.py +44 -0
- cconnect-1.8.8/routers/network.py +105 -0
- cconnect-1.8.8/routers/projects.py +95 -0
- cconnect-1.8.8/routers/sessions.py +358 -0
- cconnect-1.8.8/routers/settings.py +39 -0
- cconnect-1.8.8/routers/shared.py +229 -0
- cconnect-1.8.8/routers/system.py +89 -0
- cconnect-1.8.8/routers/terminal.py +105 -0
- cconnect-1.8.8/schemas/__init__.py +0 -0
- cconnect-1.8.8/schemas/accounts.py +40 -0
- cconnect-1.8.8/schemas/chat.py +60 -0
- cconnect-1.8.8/schemas/network.py +23 -0
- cconnect-1.8.8/services/__init__.py +0 -0
- cconnect-1.8.8/services/account_login.py +158 -0
- cconnect-1.8.8/services/accounts.py +496 -0
- cconnect-1.8.8/services/attachments.py +59 -0
- cconnect-1.8.8/services/blocks.py +54 -0
- cconnect-1.8.8/services/browser.py +831 -0
- cconnect-1.8.8/services/categories.py +213 -0
- cconnect-1.8.8/services/chat_list.py +297 -0
- cconnect-1.8.8/services/claude_assets.py +337 -0
- cconnect-1.8.8/services/claude_manage.py +136 -0
- cconnect-1.8.8/services/claude_runtime.py +1217 -0
- cconnect-1.8.8/services/claude_status.py +70 -0
- cconnect-1.8.8/services/cli_info.py +296 -0
- cconnect-1.8.8/services/cli_settings.py +160 -0
- cconnect-1.8.8/services/diffs.py +44 -0
- cconnect-1.8.8/services/directories.py +38 -0
- cconnect-1.8.8/services/files.py +29 -0
- cconnect-1.8.8/services/git.py +26 -0
- cconnect-1.8.8/services/git_ops.py +263 -0
- cconnect-1.8.8/services/live_sessions.py +560 -0
- cconnect-1.8.8/services/network.py +522 -0
- cconnect-1.8.8/services/project_files.py +326 -0
- cconnect-1.8.8/services/project_watch.py +172 -0
- cconnect-1.8.8/services/projects.py +62 -0
- cconnect-1.8.8/services/providers.py +165 -0
- cconnect-1.8.8/services/questions.py +93 -0
- cconnect-1.8.8/services/repo.py +82 -0
- cconnect-1.8.8/services/rewind.py +94 -0
- cconnect-1.8.8/services/sessions.py +1593 -0
- cconnect-1.8.8/services/settings_store.py +117 -0
- cconnect-1.8.8/services/shared.py +525 -0
- cconnect-1.8.8/services/shared_watch.py +132 -0
- cconnect-1.8.8/services/speedtest.py +104 -0
- cconnect-1.8.8/services/system_monitor.py +285 -0
- cconnect-1.8.8/services/system_watch.py +99 -0
- cconnect-1.8.8/services/terminal.py +256 -0
- cconnect-1.8.8/services/todos.py +63 -0
- cconnect-1.8.8/services/trash.py +127 -0
- cconnect-1.8.8/services/usage.py +236 -0
- cconnect-1.8.8/services/visibility.py +157 -0
- cconnect-1.8.8/setup.cfg +4 -0
cconnect-1.8.8/PKG-INFO
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cconnect
|
|
3
|
+
Version: 1.8.8
|
|
4
|
+
Summary: Remote bridge between the CConnect client and Claude Code
|
|
5
|
+
Author: jahirtrap
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://cconnect.dev
|
|
8
|
+
Project-URL: Repository, https://github.com/jahirxtrap/cconnect
|
|
9
|
+
Keywords: claude,claude-code,anthropic,remote,mobile
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Software Development
|
|
15
|
+
Requires-Python: >=3.11
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: fastapi>=0.136.0
|
|
18
|
+
Requires-Dist: uvicorn[standard]>=0.45.0
|
|
19
|
+
Requires-Dist: pydantic>=2.13.3
|
|
20
|
+
Requires-Dist: loguru>=0.7.3
|
|
21
|
+
Requires-Dist: orjson>=3.12.0
|
|
22
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
23
|
+
Requires-Dist: slowapi>=0.1.9
|
|
24
|
+
Requires-Dist: httpx>=0.28.0
|
|
25
|
+
Requires-Dist: claude-agent-sdk>=0.2.148
|
|
26
|
+
Requires-Dist: qrcode>=7.4.2
|
|
27
|
+
Requires-Dist: sqlalchemy>=2.0.0
|
|
28
|
+
Requires-Dist: pillow>=10.0.0
|
|
29
|
+
Requires-Dist: psutil>=5.9.0
|
|
30
|
+
Requires-Dist: nvidia-ml-py>=12.0.0
|
|
31
|
+
Requires-Dist: py7zr>=1.0.0
|
|
32
|
+
Requires-Dist: rarfile>=4.2
|
|
33
|
+
Requires-Dist: watchdog>=4.0.0
|
|
34
|
+
Requires-Dist: pywinpty>=2.0.13; sys_platform == "win32"
|
|
35
|
+
Requires-Dist: ptyprocess>=0.7.0; sys_platform != "win32"
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: pytest>=9.0.3; extra == "dev"
|
|
38
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == "dev"
|
|
39
|
+
|
|
40
|
+
CConnect drives Claude Code running on your PC from an Android app, a desktop app
|
|
41
|
+
for Windows, Linux and macOS, or any browser.
|
|
42
|
+
|
|
43
|
+
This is the backend: install it and run `cconnect`. The apps, the docs and the
|
|
44
|
+
install one-liners are at https://cconnect.dev
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cconnect
|
|
3
|
+
Version: 1.8.8
|
|
4
|
+
Summary: Remote bridge between the CConnect client and Claude Code
|
|
5
|
+
Author: jahirtrap
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://cconnect.dev
|
|
8
|
+
Project-URL: Repository, https://github.com/jahirxtrap/cconnect
|
|
9
|
+
Keywords: claude,claude-code,anthropic,remote,mobile
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Software Development
|
|
15
|
+
Requires-Python: >=3.11
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: fastapi>=0.136.0
|
|
18
|
+
Requires-Dist: uvicorn[standard]>=0.45.0
|
|
19
|
+
Requires-Dist: pydantic>=2.13.3
|
|
20
|
+
Requires-Dist: loguru>=0.7.3
|
|
21
|
+
Requires-Dist: orjson>=3.12.0
|
|
22
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
23
|
+
Requires-Dist: slowapi>=0.1.9
|
|
24
|
+
Requires-Dist: httpx>=0.28.0
|
|
25
|
+
Requires-Dist: claude-agent-sdk>=0.2.148
|
|
26
|
+
Requires-Dist: qrcode>=7.4.2
|
|
27
|
+
Requires-Dist: sqlalchemy>=2.0.0
|
|
28
|
+
Requires-Dist: pillow>=10.0.0
|
|
29
|
+
Requires-Dist: psutil>=5.9.0
|
|
30
|
+
Requires-Dist: nvidia-ml-py>=12.0.0
|
|
31
|
+
Requires-Dist: py7zr>=1.0.0
|
|
32
|
+
Requires-Dist: rarfile>=4.2
|
|
33
|
+
Requires-Dist: watchdog>=4.0.0
|
|
34
|
+
Requires-Dist: pywinpty>=2.0.13; sys_platform == "win32"
|
|
35
|
+
Requires-Dist: ptyprocess>=0.7.0; sys_platform != "win32"
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: pytest>=9.0.3; extra == "dev"
|
|
38
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == "dev"
|
|
39
|
+
|
|
40
|
+
CConnect drives Claude Code running on your PC from an Android app, a desktop app
|
|
41
|
+
for Windows, Linux and macOS, or any browser.
|
|
42
|
+
|
|
43
|
+
This is the backend: install it and run `cconnect`. The apps, the docs and the
|
|
44
|
+
install one-liners are at https://cconnect.dev
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
pyproject.toml
|
|
2
|
+
cconnect.egg-info/PKG-INFO
|
|
3
|
+
cconnect.egg-info/SOURCES.txt
|
|
4
|
+
cconnect.egg-info/dependency_links.txt
|
|
5
|
+
cconnect.egg-info/entry_points.txt
|
|
6
|
+
cconnect.egg-info/requires.txt
|
|
7
|
+
cconnect.egg-info/top_level.txt
|
|
8
|
+
core/__init__.py
|
|
9
|
+
core/access.py
|
|
10
|
+
core/app.py
|
|
11
|
+
core/cli.py
|
|
12
|
+
core/cli_manager.py
|
|
13
|
+
core/config.py
|
|
14
|
+
core/data_migration.py
|
|
15
|
+
core/db.py
|
|
16
|
+
core/models.py
|
|
17
|
+
core/paths.py
|
|
18
|
+
core/rate_limit.py
|
|
19
|
+
core/release.py
|
|
20
|
+
core/responses.py
|
|
21
|
+
core/sdk.py
|
|
22
|
+
core/settings_defs.py
|
|
23
|
+
core/ws.py
|
|
24
|
+
core/prompts/BLOCKS.md
|
|
25
|
+
core/prompts/BROWSER.md
|
|
26
|
+
core/prompts/CCONNECT.md
|
|
27
|
+
core/prompts/COMMIT.md
|
|
28
|
+
core/prompts/SUGGESTIONS.md
|
|
29
|
+
mcps/__init__.py
|
|
30
|
+
mcps/browser.py
|
|
31
|
+
mcps/check_progress.py
|
|
32
|
+
mcps/components.py
|
|
33
|
+
mcps/media.py
|
|
34
|
+
mcps/session.py
|
|
35
|
+
mcps/terminal.py
|
|
36
|
+
middleware/__init__.py
|
|
37
|
+
middleware/error_handler.py
|
|
38
|
+
middleware/public_auth.py
|
|
39
|
+
middleware/security.py
|
|
40
|
+
routers/__init__.py
|
|
41
|
+
routers/accounts.py
|
|
42
|
+
routers/browser.py
|
|
43
|
+
routers/capabilities.py
|
|
44
|
+
routers/chat.py
|
|
45
|
+
routers/claude.py
|
|
46
|
+
routers/cli.py
|
|
47
|
+
routers/git.py
|
|
48
|
+
routers/health.py
|
|
49
|
+
routers/list.py
|
|
50
|
+
routers/network.py
|
|
51
|
+
routers/projects.py
|
|
52
|
+
routers/sessions.py
|
|
53
|
+
routers/settings.py
|
|
54
|
+
routers/shared.py
|
|
55
|
+
routers/system.py
|
|
56
|
+
routers/terminal.py
|
|
57
|
+
schemas/__init__.py
|
|
58
|
+
schemas/accounts.py
|
|
59
|
+
schemas/chat.py
|
|
60
|
+
schemas/network.py
|
|
61
|
+
services/__init__.py
|
|
62
|
+
services/account_login.py
|
|
63
|
+
services/accounts.py
|
|
64
|
+
services/attachments.py
|
|
65
|
+
services/blocks.py
|
|
66
|
+
services/browser.py
|
|
67
|
+
services/categories.py
|
|
68
|
+
services/chat_list.py
|
|
69
|
+
services/claude_assets.py
|
|
70
|
+
services/claude_manage.py
|
|
71
|
+
services/claude_runtime.py
|
|
72
|
+
services/claude_status.py
|
|
73
|
+
services/cli_info.py
|
|
74
|
+
services/cli_settings.py
|
|
75
|
+
services/diffs.py
|
|
76
|
+
services/directories.py
|
|
77
|
+
services/files.py
|
|
78
|
+
services/git.py
|
|
79
|
+
services/git_ops.py
|
|
80
|
+
services/live_sessions.py
|
|
81
|
+
services/network.py
|
|
82
|
+
services/project_files.py
|
|
83
|
+
services/project_watch.py
|
|
84
|
+
services/projects.py
|
|
85
|
+
services/providers.py
|
|
86
|
+
services/questions.py
|
|
87
|
+
services/repo.py
|
|
88
|
+
services/rewind.py
|
|
89
|
+
services/sessions.py
|
|
90
|
+
services/settings_store.py
|
|
91
|
+
services/shared.py
|
|
92
|
+
services/shared_watch.py
|
|
93
|
+
services/speedtest.py
|
|
94
|
+
services/system_monitor.py
|
|
95
|
+
services/system_watch.py
|
|
96
|
+
services/terminal.py
|
|
97
|
+
services/todos.py
|
|
98
|
+
services/trash.py
|
|
99
|
+
services/usage.py
|
|
100
|
+
services/visibility.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
fastapi>=0.136.0
|
|
2
|
+
uvicorn[standard]>=0.45.0
|
|
3
|
+
pydantic>=2.13.3
|
|
4
|
+
loguru>=0.7.3
|
|
5
|
+
orjson>=3.12.0
|
|
6
|
+
python-dotenv>=1.0.0
|
|
7
|
+
slowapi>=0.1.9
|
|
8
|
+
httpx>=0.28.0
|
|
9
|
+
claude-agent-sdk>=0.2.148
|
|
10
|
+
qrcode>=7.4.2
|
|
11
|
+
sqlalchemy>=2.0.0
|
|
12
|
+
pillow>=10.0.0
|
|
13
|
+
psutil>=5.9.0
|
|
14
|
+
nvidia-ml-py>=12.0.0
|
|
15
|
+
py7zr>=1.0.0
|
|
16
|
+
rarfile>=4.2
|
|
17
|
+
watchdog>=4.0.0
|
|
18
|
+
|
|
19
|
+
[:sys_platform != "win32"]
|
|
20
|
+
ptyprocess>=0.7.0
|
|
21
|
+
|
|
22
|
+
[:sys_platform == "win32"]
|
|
23
|
+
pywinpty>=2.0.13
|
|
24
|
+
|
|
25
|
+
[dev]
|
|
26
|
+
pytest>=9.0.3
|
|
27
|
+
pytest-asyncio>=1.3.0
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""The security key gating what belongs to the machine itself: shells and ignored files."""
|
|
2
|
+
|
|
3
|
+
import hmac
|
|
4
|
+
|
|
5
|
+
from core.config import PUBLIC_ACCESS_TOKEN, SECURITY_KEY
|
|
6
|
+
|
|
7
|
+
KEY_HEADER = "X-Security-Key"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def gated() -> bool:
|
|
11
|
+
return PUBLIC_ACCESS_TOKEN is not None
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def key_matches(candidate: str) -> bool:
|
|
15
|
+
if not gated():
|
|
16
|
+
return True
|
|
17
|
+
return bool(SECURITY_KEY) and hmac.compare_digest(candidate or "", SECURITY_KEY)
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""CConnect — FastAPI application entry point."""
|
|
2
|
+
|
|
3
|
+
import importlib
|
|
4
|
+
import os
|
|
5
|
+
import pkgutil
|
|
6
|
+
|
|
7
|
+
from contextlib import asynccontextmanager
|
|
8
|
+
|
|
9
|
+
from fastapi import FastAPI, Request
|
|
10
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
11
|
+
from fastapi.middleware.gzip import GZipMiddleware
|
|
12
|
+
from slowapi.errors import RateLimitExceeded
|
|
13
|
+
|
|
14
|
+
from core import data_migration, paths
|
|
15
|
+
from core.config import PORT
|
|
16
|
+
from core.db import init_db
|
|
17
|
+
from core.rate_limit import limiter
|
|
18
|
+
from core.responses import api_response
|
|
19
|
+
from core.sdk import ensure_sdk_installed, ensure_subscription_auth
|
|
20
|
+
from services import settings_store, system_monitor
|
|
21
|
+
from middleware.error_handler import register_error_handlers
|
|
22
|
+
from middleware.public_auth import register_public_auth_middleware
|
|
23
|
+
from middleware.security import register_security_middleware
|
|
24
|
+
import routers as routers_pkg
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@asynccontextmanager
|
|
28
|
+
async def lifespan(app: FastAPI):
|
|
29
|
+
data_migration.migrate()
|
|
30
|
+
init_db()
|
|
31
|
+
settings_store.load()
|
|
32
|
+
paths.RUNTIME_FILE.write_text(f"PORT={PORT}\nPID={os.getpid()}\n", encoding="utf-8")
|
|
33
|
+
system_monitor.setup_log_capture()
|
|
34
|
+
ensure_subscription_auth()
|
|
35
|
+
await ensure_sdk_installed()
|
|
36
|
+
from services import cli_info
|
|
37
|
+
await cli_info.refresh()
|
|
38
|
+
from services import chat_list
|
|
39
|
+
await chat_list.hub.start()
|
|
40
|
+
from services import project_watch, shared_watch, system_watch
|
|
41
|
+
await shared_watch.hub.start()
|
|
42
|
+
await project_watch.hub.start()
|
|
43
|
+
await system_watch.hub.start()
|
|
44
|
+
from services import network
|
|
45
|
+
await network.watchdog.start()
|
|
46
|
+
yield
|
|
47
|
+
chat_list.hub.stop()
|
|
48
|
+
shared_watch.hub.stop()
|
|
49
|
+
project_watch.hub.stop()
|
|
50
|
+
system_watch.hub.stop()
|
|
51
|
+
network.watchdog.stop()
|
|
52
|
+
paths.RUNTIME_FILE.unlink(missing_ok=True)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
app = FastAPI(
|
|
56
|
+
title="CConnect API",
|
|
57
|
+
version="0.1.0",
|
|
58
|
+
description="Remote bridge between the CConnect mobile app and Claude Code",
|
|
59
|
+
docs_url=None,
|
|
60
|
+
redoc_url=None,
|
|
61
|
+
openapi_url=None,
|
|
62
|
+
lifespan=lifespan,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
app.state.limiter = limiter
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
async def _rate_limit_handler(request: Request, exc: RateLimitExceeded):
|
|
69
|
+
return api_response(status=429)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
app.add_exception_handler(RateLimitExceeded, _rate_limit_handler)
|
|
73
|
+
|
|
74
|
+
app.add_middleware(GZipMiddleware, minimum_size=512)
|
|
75
|
+
register_security_middleware(app)
|
|
76
|
+
register_public_auth_middleware(app)
|
|
77
|
+
app.add_middleware(
|
|
78
|
+
CORSMiddleware,
|
|
79
|
+
allow_origins=["*"],
|
|
80
|
+
allow_methods=["*"],
|
|
81
|
+
allow_headers=["*"],
|
|
82
|
+
)
|
|
83
|
+
register_error_handlers(app)
|
|
84
|
+
|
|
85
|
+
for module_info in pkgutil.iter_modules(routers_pkg.__path__):
|
|
86
|
+
module = importlib.import_module(f"routers.{module_info.name}")
|
|
87
|
+
if hasattr(module, "router"):
|
|
88
|
+
app.include_router(module.router, prefix="/api")
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@app.api_route(
|
|
92
|
+
"/{path:path}",
|
|
93
|
+
methods=["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"],
|
|
94
|
+
include_in_schema=False,
|
|
95
|
+
)
|
|
96
|
+
async def catch_all(request: Request, path: str):
|
|
97
|
+
return api_response(status=404)
|