getExternalIdMetrics method
Future<Nip85ExternalIdMetrics?>
getExternalIdMetrics(
- String identifier, {
- Set<
Nip85Metric> ? metrics, - List<
Nip85TrustedProvider> ? providers,
Get external identifier metrics from trusted providers (NIP-73)
identifier - The NIP-73 i-tag value to get metrics for
metrics - Optional set of specific metrics to fetch. If null, fetches all available.
providers - Optional list of providers to use. If null, uses default providers.
Returns Nip85ExternalIdMetrics or null if no assertion found.
Implementation
Future<Nip85ExternalIdMetrics?> getExternalIdMetrics(
String identifier, {
Set<Nip85Metric>? metrics,
List<Nip85TrustedProvider>? providers,
}) async {
final effectiveProviders = _filterProviders(
providers ?? _defaultProviders,
kind: Nip85Kind.externalId,
metrics: metrics,
);
if (effectiveProviders.isEmpty) {
return null;
}
final providersByRelay = <String, List<Nip85TrustedProvider>>{};
for (final provider in effectiveProviders) {
providersByRelay.putIfAbsent(provider.relay, () => []).add(provider);
}
Nip85ExternalIdMetrics? result;
int latestCreatedAt = 0;
for (final entry in providersByRelay.entries) {
final relay = entry.key;
final relayProviders = entry.value;
final providerPubkeys = relayProviders.map((p) => p.pubkey).toList();
try {
await for (final event in _requests
.query(
filter: Filter(
kinds: [Nip85Kind.externalId],
authors: providerPubkeys,
dTags: [identifier],
limit: providerPubkeys.length,
),
explicitRelays: [relay],
cacheRead: true,
cacheWrite: true,
)
.stream) {
final parsed = _parseExternalIdMetricsEvent(event, metrics);
if (parsed != null && parsed.createdAt > latestCreatedAt) {
result = parsed;
latestCreatedAt = parsed.createdAt;
}
}
} catch (_) {}
}
return result;
}