pubKeyFromIdentifierNip05 method

Future<String?> pubKeyFromIdentifierNip05({
  1. required String internetIdentifier,
})

Return the public key found by the NIP05 implementation via the given for the given internetIdentifier

Example:

 final pubKey = await Nostr.instance.relays.pubKeyFromIdentifierNip05(
  internetIdentifier: "localPart@domainPart",
);

print(pubKey); // ...

Implementation

Future<String?> pubKeyFromIdentifierNip05({
  required String internetIdentifier,
}) async {
  try {
    final localPart = internetIdentifier.split('@')[0];
    final domainPart = internetIdentifier.split('@')[1];

    logger.log(
      'Attempt to fetch pubkey for $internetIdentifier from $domainPart',
    );

    final res = await http.get(
      Uri.parse('https://$domainPart/.well-known/nostr.json?name=$localPart'),
    );

    final decoded = jsonDecode(res.body) as Map<String, dynamic>;
    if (decoded
        case {
          'names': final names as Map<String, dynamic>,
        }) {
      logger.log(
        'Pubkey for $localPart is ${names[localPart] ?? 'not found'} '
        'at $domainPart',
      );

      return names[localPart] as String?;
    }

    return null;
  } on Exception catch (e) {
    logger.log(
      'error while verifying nip05 for internet identifier: '
      '$internetIdentifier',
      e,
    );

    throw Nip05VerificationException(parent: e);
  }
}