isConformingNamespaces function
ErrorObject?
isConformingNamespaces(
- ProposalRequiredNamespaces requiredNamespaces,
- SessionNamespaces namespaces,
- String context
Implementation
ErrorObject? isConformingNamespaces(
ProposalRequiredNamespaces requiredNamespaces,
SessionNamespaces namespaces,
String context,
) {
ErrorObject? error;
final requiredNamespaceKeys = requiredNamespaces.keys.toList();
final namespaceKeys = namespaces.keys.toList();
if (!hasOverlap(requiredNamespaceKeys, namespaceKeys)) {
error = getInternalError(
InternalErrorKey.NON_CONFORMING_NAMESPACES,
context: '$context namespaces keys don\'t satisfy requiredNamespaces',
);
} else {
requiredNamespaceKeys.forEach((key) {
if (error != null) return;
final requiredNamespaceChains = requiredNamespaces[key]!.chains;
final namespaceChains = getAccountsChains(namespaces[key]!.accounts);
if (!hasOverlap(requiredNamespaceChains, namespaceChains)) {
error = getInternalError(
InternalErrorKey.NON_CONFORMING_NAMESPACES,
context:
'$context namespaces accounts don\'t satisfy requiredNamespaces chains for $key',
);
} else if (!hasOverlap(
requiredNamespaces[key]!.methods, namespaces[key]!.methods)) {
error = getInternalError(
InternalErrorKey.NON_CONFORMING_NAMESPACES,
context:
'$context namespaces methods don\'t satisfy requiredNamespaces methods for $key',
);
} else if (!hasOverlap(
requiredNamespaces[key]!.events, namespaces[key]!.events)) {
error = getInternalError(
InternalErrorKey.NON_CONFORMING_NAMESPACES,
context:
'$context namespaces events don\'t satisfy requiredNamespaces events for $key',
);
} else if (requiredNamespaces[key]!.extension != null &&
namespaces[key]!.extension == null) {
error = getInternalError(
InternalErrorKey.NON_CONFORMING_NAMESPACES,
context:
'$context namespaces extension doesn\'t satisfy requiredNamespaces extension for $key',
);
} else if (requiredNamespaces[key]!.extension != null &&
namespaces[key]!.extension != null) {
requiredNamespaces[key]!.extension!.forEach((namespace) {
final methods = namespace.methods;
final events = namespace.events;
final chains = namespace.chains;
if (error != null) return;
final isOverlap = namespaces[key]!.extension!.any((namespace) {
final accChains = getAccountsChains(namespace.accounts);
return (hasOverlap(chains, accChains) &&
hasOverlap(events, namespace.events) &&
hasOverlap(methods, namespace.methods));
});
if (!isOverlap) {
error = getInternalError(
InternalErrorKey.NON_CONFORMING_NAMESPACES,
context:
'$context namespaces extension doesn\'t satisfy requiredNamespaces extension for $key',
);
}
});
}
});
}
return error;
}