isSessionCompatible static method
Implementation
static bool isSessionCompatible(
SessionData session,
Map<String, RequiredNamespace> requiredNamespaces,
) {
List<String> sessionKeys = session.namespaces.keys.toList();
List<String> paramsKeys = requiredNamespaces.keys.toList();
bool compatible = true;
if (!hasOverlap(paramsKeys, sessionKeys)) return false;
sessionKeys.forEach((key) {
Namespace namespace = session.namespaces[key]!;
List<String> accounts = namespace.accounts;
List<dynamic> methods = namespace.methods;
List<dynamic> events = namespace.events;
List<BaseNamespace>? extension = namespace.extension;
List<String> chains = NamespaceUtils.getAccountsChains(accounts);
RequiredNamespace requiredNamespace = requiredNamespaces[key]!;
if (!hasOverlap(requiredNamespace.chains, chains) ||
!hasOverlap(requiredNamespace.methods, methods) ||
!hasOverlap(requiredNamespace.events, events)) {
compatible = false;
}
if (compatible && extension != null) {
extension.forEach((extensionNamespace) {
if (requiredNamespace.extension != null) {
List<String> accounts = extensionNamespace.accounts;
List<dynamic> methods = extensionNamespace.methods;
List<dynamic> events = extensionNamespace.events;
List<String> chains = NamespaceUtils.getAccountsChains(accounts);
bool overlap = requiredNamespace.extension!.any((ext) =>
hasOverlap(ext.chains, chains) &&
hasOverlap(ext.methods, methods) &&
hasOverlap(ext.events, events));
if (!overlap) {
compatible = false;
}
} else {
compatible = false;
}
});
}
});
return compatible;
}