// service
public getAccounts() {
    return from<string>(this.web3js.eth.getAccounts()).pipe(
      map((accounts) => {
        return accounts[0];
      })
    );
  }
// auth guard
import { CampaignService } from 'src/app/services/campaign.service';
import { Injectable } from '@angular/core';
import {
  ActivatedRouteSnapshot,
  CanActivate,
  Router,
  RouterStateSnapshot,
  UrlTree,
} from '@angular/router';
import { Observable, Subject } from 'rxjs';

@Injectable({
  providedIn: 'root',
})
export class AuthGuard implements CanActivate {
  constructor(
    private campaignService: CampaignService,
    private router: Router
  ) {}
  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ):
    | Observable<boolean | UrlTree>
    | Promise<boolean | UrlTree>
    | boolean
    | UrlTree {
    let account$ = new Subject<boolean>();
    this.campaignService.getAccounts().subscribe((account: string) => {
      if (account) {
        account$.next(true);
      } else {
        account$.next(false);
        this.router.navigate(['/campaign'])
      }
    });
    return account$.asObservable();
  }
}