logout method

Future logout()

To Logout

Implementation

Future logout() async {
  try {
    await wpClient.evaluateJs(
      '''
      (async () => {
        if (typeof window.WPP !== 'undefined' && window.WPP.conn) {
           try {
              await window.WPP.conn.logout();
           } catch (e) {
              console.error("WPP.conn.logout Error", e);
           }
        }

        // Emit logout event before clearing data and reloading
        if (typeof window.onCustomEvent === 'function') {
          window.onCustomEvent("connectionEvent", "${ConnectionEvent.logout.name}");
        }

        try {
          window.localStorage.clear();
          window.sessionStorage.clear();

          // Unregister service workers
          if (navigator.serviceWorker) {
              const registrations = await navigator.serviceWorker.getRegistrations();
              for (const registration of registrations) {
                await registration.unregister();
              }
          }

          // Clear IndexedDB
          if (window.indexedDB && window.indexedDB.databases) {
              const dbs = await window.indexedDB.databases();
              dbs.forEach(db => {
                  if (db.name) window.indexedDB.deleteDatabase(db.name);
              });
          }
        } catch (e) {
          // ignore cleanup errors
        }
        location.reload();
      })()
      ''',
      methodName: "logout",
    );
  } catch (e) {
    WhatsappLogger.log("Logout Error: $e");
    try {
      await wpClient.evaluateJs(
        'window.localStorage.clear(); window.sessionStorage.clear(); location.reload();',
        tryPromise: false,
      );
    } catch (_) {
      // ignore fallback errors
    }
    throw "Logout Failed";
  }
}