Switch MAX bridge to PyMax only
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# QMAX
|
||||
|
||||
QMAX is a private Android messenger client backed by a personal bridge server. The Android app talks to your QMAX server, and the server keeps a browser session for `https://web.max.ru`.
|
||||
QMAX is a private Android messenger client backed by a personal bridge server. The Android app talks to your QMAX server, and the server uses PyMax as the only MAX bridge.
|
||||
|
||||
Current shape:
|
||||
|
||||
- `server/QMax.Api` - ASP.NET Core API, SQLite cache, JWT pairing auth, SignalR hub, attachment storage, APK update catalog.
|
||||
- `worker` - Node/Playwright worker with a persistent MAX Web browser profile.
|
||||
- `pymax-worker` - Python/PyMax worker with a persistent MAX mobile API session.
|
||||
- `android` - Kotlin + Jetpack Compose Android client pointed at `https://qmax.kusoft.xyz`.
|
||||
- `deploy` - Docker Compose + Caddy for Raspberry Pi 5.
|
||||
|
||||
@@ -13,11 +13,9 @@ Current shape:
|
||||
|
||||
```powershell
|
||||
dotnet test QMax.slnx
|
||||
python -m py_compile pymax-worker/src/server.py
|
||||
cd android
|
||||
.\gradlew.bat :app:assembleDebug :app:assembleRelease --console=plain --no-daemon
|
||||
cd ..\worker
|
||||
npm.cmd install
|
||||
node --check src/server.js
|
||||
```
|
||||
|
||||
## Raspberry Pi Deployment
|
||||
@@ -47,7 +45,7 @@ Set strong values in `.env`:
|
||||
|
||||
- `QMAX_JWT_SECRET` - at least 32 random characters.
|
||||
- `QMAX_PAIRING_CODE` - one-time-ish pairing password for your Android client and `/admin/max`.
|
||||
- `QMAX_MAX_PHONE_NUMBER` - the phone number used for MAX Web login.
|
||||
- `QMAX_MAX_PHONE_NUMBER` - the phone number linked to the MAX account used by PyMax.
|
||||
|
||||
Secrets must stay in `.env`, not in git.
|
||||
|
||||
@@ -59,9 +57,9 @@ Open:
|
||||
https://qmax.kusoft.xyz/admin/max?pairingCode=YOUR_PAIRING_CODE
|
||||
```
|
||||
|
||||
Use **Start phone login**. If MAX shows a robot check, solve it manually on this page using the screenshot plus click/type forms. When MAX sends the confirmation code, submit it on the same page or from the Android app MAX panel.
|
||||
Use **Start phone login**. When MAX sends the confirmation code, submit it on the same page or from the Android app settings.
|
||||
|
||||
The worker stores browser state in the `qmax-max-profile` Docker volume, so the MAX session should survive restarts.
|
||||
The worker stores PyMax session state in the `qmax-pymax-session` Docker volume, so the MAX session should survive restarts until MAX expires the login token.
|
||||
|
||||
## Android Pairing
|
||||
|
||||
@@ -132,14 +130,11 @@ The Android app checks this manifest, compares semantic versions, downloads the
|
||||
|
||||
## Current MAX Mapping Status
|
||||
|
||||
The deployed worker is authorized in MAX Web and currently maps:
|
||||
The deployed worker is authorized through PyMax and currently maps:
|
||||
|
||||
- chat list extraction from the left MAX Web dialog list;
|
||||
- visible chat history extraction when Android opens a dialog;
|
||||
- text sending through the MAX Web composer;
|
||||
- attachment upload through the MAX Web file chooser;
|
||||
- image, video, file and voice attachment projection from MAX Web;
|
||||
- chat list and message history through PyMax;
|
||||
- text sending through PyMax;
|
||||
- attachment upload through PyMax file/photo/video models;
|
||||
- image, video, file and voice attachment projection through the API;
|
||||
- Android image attachment caching with `.part` downloads before a file is shown from local storage;
|
||||
- manual browser inspection endpoints for future selector changes.
|
||||
|
||||
The bridge uses DOM selectors in `worker/src/server.js`, so MAX Web UI changes may require a worker redeploy without changing the Android app contract.
|
||||
- explicit session status and phone-code re-login from Android settings.
|
||||
|
||||
Reference in New Issue
Block a user