export enum SnodeNamespaces { /** * This is the namespace anyone can deposit a message for us */ UserMessages = 0, /** * This is the namespace used to sync our profile */ UserProfile = 2, /** * This is the namespace used to sync our contacts */ UserContacts = 3, /** * This is the namespace used to sync our user groups and communities */ UserGroups = 5, /** * The messages sent to a closed group are sent and polled from this namespace */ ClosedGroupMessage = -10, /** * This is the namespace used to sync the closed group details for each of the closed groups we are polling */ ClosedGroupInfo = 1, } type PickEnum = { [P in keyof K]: P extends K ? P : never; }; export type SnodeNamespacesGroup = PickEnum< SnodeNamespaces, SnodeNamespaces.ClosedGroupInfo | SnodeNamespaces.ClosedGroupMessage >; export type SnodeNamespacesUser = PickEnum< SnodeNamespaces, SnodeNamespaces.UserContacts | SnodeNamespaces.UserProfile | SnodeNamespaces.UserMessages >; /** * Returns true if that namespace is associated with the config of a user (not his messages, only configs) */ function isUserConfigNamespace(namespace: SnodeNamespaces) { return ( namespace === SnodeNamespaces.UserContacts || namespace === SnodeNamespaces.UserProfile || namespace === SnodeNamespaces.UserGroups ); } /** * Returns true if that namespace is associated with the config of a closed group (not its messages, only configs) */ function isGroupConfigNamespace(namespace: SnodeNamespaces) { return namespace === SnodeNamespaces.ClosedGroupInfo; } /** * Returns true if that specific namespace hashes should be tracked. * We do not care about hash tracking for any of the config namespaces as we poll for all of them each poll event. */ function isNamespaceAlwaysPolled(namespace: SnodeNamespaces) { return !isUserConfigNamespace(namespace) && !isGroupConfigNamespace(namespace); } export const SnodeNamespace = { isUserConfigNamespace, isGroupConfigNamespace, isNamespaceAlwaysPolled, };