nRestoreAccounts function

Future<void> nRestoreAccounts(
  1. Ndk ndk
)

Implementation

Future<void> nRestoreAccounts(Ndk ndk) async {
  final storage = FlutterSecureStorage();

  final storedAccounts = await storage.read(
    key: StorageKeys.nostrWidgetsAccounts,
  );

  if (storedAccounts == null) return;

  final accounts = NostrWidgetsAccounts.fromJson(jsonDecode(storedAccounts));

  for (var account in accounts.accounts) {
    if (account.kind == AccountKinds.nip07) {
      final signer = Nip07EventSigner();
      ndk.accounts.addAccount(
        pubkey: account.pubkey,
        type: AccountType.externalSigner,
        signer: signer,
      );
      continue;
    }

    if (account.kind == AccountKinds.amber) {
      final amber = Amberflutter();
      final amberFlutterDS = AmberFlutterDS(amber);

      ndk.accounts.addAccount(
        pubkey: account.pubkey,
        type: AccountType.externalSigner,
        signer: AmberEventSigner(
          publicKey: account.pubkey,
          amberFlutterDS: amberFlutterDS,
        ),
      );
      continue;
    }

    if (account.kind == AccountKinds.bunker) {
      final signer = Nip46EventSigner(
        connection: BunkerConnection.fromJson(jsonDecode(account.signerSeed!)),
        requests: ndk.requests,
        broadcast: ndk.broadcast,
        cachedPublicKey: account.pubkey,
      );
      ndk.accounts.addAccount(
        pubkey: account.pubkey,
        type: AccountType.externalSigner,
        signer: signer,
      );
      continue;
    }

    if (account.kind == AccountKinds.pubkey) {
      ndk.accounts.addAccount(
        pubkey: account.pubkey,
        type: AccountType.publicKey,
        signer: Bip340EventSigner(privateKey: null, publicKey: account.pubkey),
      );
      continue;
    }

    if (account.kind == AccountKinds.privkey) {
      final keyPair = KeyPair.fromPrivateKey(privateKey: account.signerSeed!);
      ndk.accounts.addAccount(
        pubkey: keyPair.publicKey,
        type: AccountType.privateKey,
        signer: Bip340EventSigner(
          privateKey: keyPair.privateKey,
          publicKey: keyPair.publicKey,
        ),
      );
      continue;
    }
  }

  if (accounts.loggedAccount == null) return;
  if (!ndk.accounts.hasAccount(accounts.loggedAccount!)) return;
  ndk.accounts.switchAccount(pubkey: accounts.loggedAccount!);
}