Spaces:
Runtime error
Runtime error
Cloud Backups — Google Drive integration
Exocore mirrors all panel state to a private folder on the owner's Google
Drive so that you can wipe / re-deploy the server and restore everything in
seconds. The client side lives in
home/GDriveManager.tsx (modal opened
from the dashboard's ☁ Cloud Backups quick action) plus
editor/GDrivePane.tsx (Drive sidebar
inside the IDE).
What gets synced
| Backend file | What it stores |
|---|---|
Exocore-Backend/local-db/users.enc |
All user accounts (encrypted at rest) |
Exocore-Backend/local-db/posts.json |
Public posts feed |
Exocore-Backend/local-db/dms.* |
Direct messages |
Exocore-Backend/local-db/global-chat.json |
Global chat backlog |
Exocore-Backend/local-db/token.enc |
OAuth bootstrap |
client/access/devs.json |
Panel-devs master account |
A background loop in
Exocore-Backend/src/services/drive.ts
checks every 60 s, uploads diffs, and emits cache-restore events on boot
([cache] restoring from Drive…).
Manager modal — desktop / mobile
Opened from Dashboard → Quick Actions → Cloud Backups. Sections:
┌─ Connected account ──────────────┐
│ 📷 Google avatar email · plan │
│ Disk used: 4.2 GB / 15 GB │
│ [ Re-authorize ] [ Disconnect ] │
├─ Sync status ────────────────────┤
│ ✅ users.enc 2 s ago │
│ ✅ posts.json 2 s ago │
│ 🔄 dms.* uploading… │
│ ⚠️ tokens.enc error: … │
├─ Manual actions ─────────────────┤
│ [ ⬆ Force upload ] [ ⬇ Pull now ]│
│ [ 🗑 Reset cloud cache ] │
└──────────────────────────────────┘
(Same dashboard capture applies — the modal opens on top of it once a user is authenticated.)
OAuth flow
- User clicks Connect Google Drive → server redirects to Google's consent
screen with the
drive.filescope. - Google redirects back to
/exocore/api/oauth/google/callback. - Server exchanges the code, encrypts + writes the refresh token to
Exocore-Backend/local-db/token.enc. - Sync loop boots and walks the
EXOCORE_BACKUPSparent folder.
RPC + HTTP touchpoints
| Channel / route | Purpose |
|---|---|
RPC drive.status |
Connected account + per-file last-sync ts |
RPC drive.sync |
Force a full upload pass |
RPC drive.pull |
Replace local cache with Drive copy |
RPC drive.disconnect |
Revoke + clear local token |
HTTP POST /exocore/api/editor/gdrive/* |
IDE-side file picker (proxied to backend Drive scope) |

