diff --git a/src/App.jsx b/src/App.jsx
index 7259984..83525c3 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -8,7 +8,8 @@ import {
Lock,
Loader2,
MessageSquare,
- Bookmark
+ Bookmark,
+ GitCommit
} from 'lucide-react';
import Header from './components/Header';
import SecurityBadge from './components/SecurityBadge';
@@ -251,6 +252,11 @@ export default function App() {
{typeof __COMMIT_HASH__ !== 'undefined' ? __COMMIT_HASH__ : 'dev'}
+
diff --git a/src/components/wpp/AppWPP.jsx b/src/components/wpp/AppWPP.jsx
index ce7722c..2bef1f2 100644
--- a/src/components/wpp/AppWPP.jsx
+++ b/src/components/wpp/AppWPP.jsx
@@ -14,7 +14,8 @@ import {
AlertCircle,
CheckCircle2,
Info,
- Edit2
+ Edit2,
+ RefreshCw
} from 'lucide-react';
import { getStoredServers, saveServers } from '../../utils/appWppStorage';
import {
@@ -24,7 +25,9 @@ import {
checkSessionStatus,
clearSessionData,
generateToken,
- ensureQRPrefix
+ ensureQRPrefix,
+ testServerConnection,
+ listAllServerSessions
} from '../../utils/wppConnectApi';
import WppSessionCard from './WppSessionCard';
import ModalServer from './ModalServer';
@@ -91,6 +94,63 @@ export default function AppWPP() {
};
const activeServer = servers.find((s) => s.id === activeServerId) || null;
+ const [isCheckingServer, setIsCheckingServer] = useState(false);
+
+ const checkServerOnlineStatus = async (serverToCheck) => {
+ const srv = serverToCheck || servers.find((s) => s.id === activeServerId) || activeServer;
+ if (!srv || !srv.baseUrl || !srv.secretKey) return;
+
+ setIsCheckingServer(true);
+ try {
+ const res = await testServerConnection(srv.baseUrl, srv.secretKey);
+ const isOnline = res.ok === true;
+ updateServersState((prevServers) =>
+ prevServers.map((s) => (s.id === srv.id ? { ...s, online: isOnline } : s))
+ );
+
+ // Se estiver online, sincroniza o status das sessões já ativas no servidor
+ if (isOnline) {
+ try {
+ const sessionsOnServer = await listAllServerSessions(srv);
+ if (Array.isArray(sessionsOnServer)) {
+ updateServersState((prevServers) =>
+ prevServers.map((s) => {
+ if (s.id !== srv.id) return s;
+ const updatedSessions = (s.sessions || []).map((sess) => {
+ const match = sessionsOnServer.find((x) =>
+ x === sess.name || x?.name === sess.name || x?.session === sess.name
+ );
+ if (match) {
+ const statusStr = typeof match === 'string' ? 'connected' : (match.status || 'connected');
+ const isConn = statusStr === 'CONNECTED' || statusStr === 'connected' || statusStr === true;
+ return { ...sess, status: isConn ? 'connected' : sess.status };
+ }
+ return sess;
+ });
+ return { ...s, sessions: updatedSessions };
+ })
+ );
+ }
+ } catch (e) {}
+ }
+ } catch (e) {
+ updateServersState((prevServers) =>
+ prevServers.map((s) => (s.id === srv.id ? { ...s, online: false } : s))
+ );
+ } finally {
+ setIsCheckingServer(false);
+ }
+ };
+
+ // Checa automaticamente o status do servidor ativo na inicialização e ao alternar
+ useEffect(() => {
+ if (activeServerId && servers.length > 0) {
+ const srv = servers.find((s) => s.id === activeServerId);
+ if (srv) {
+ checkServerOnlineStatus(srv);
+ }
+ }
+ }, [activeServerId, servers.length]);
// Servidor CRUD
const handleSaveServer = (serverData) => {
@@ -415,9 +475,20 @@ export default function AppWPP() {