noise-server/noise.graphql
2021-05-10 13:18:30 +00:00

82 lines
1.7 KiB
GraphQL

schema {
query: Query
}
type Query {
users: [User!]!
}
# Hopefully provided by juniper and chrono
scalar DateTimeUtc
# else it's probably DateTime
# scalar DateTime
# Provided by juniper and url
scalar Url
type User {
id: ID!
userName: String!
displayName: String
activated: Boolean!
created: DateTimeUtc!
lastOnline: DateTimeUtc
preferences: UserPreferences!
}
# All account preferences for a single user
type UserPreferences {
privacyPreference: PrivacyPreference!
notificationPreference: NotificationPreference!
securityPreference: SecurityPreference!
# TODO: external servers
externalServersPreference: ExternalServersPreference!
}
type PrivacyPreference {
# Discovery on other servers
discovery: RestrictionPolicy!
discoveryUserLimit: [String!]
discoveryServerLimit: [Url!]
# Last seen online
lastSeen: RestrictionPolicy!
lastSeenUserLimit: [String!]
lastSeenServerLimit: [Url!]
# For enabled users/servers: Only give vague indications
# e.g. recently, a long time ago
lastSeenCourse: Boolean!
# Describing informational text regarding the user
info: RestrictionPolicy!
infoUserLimit: [String!]
infoServerLimit: [Url!]
}
type NotificationPreference {
lockDetails: Boolean!
doNotDisturb: Boolean!
}
type SecurityPreference {
# One-purpose-passwords
accountTokens: [ID!]!
# The account's password hash
passwordHash: String!
}
type ExternalServersPreference {
privacyPreference: PrivacyPreference
externalServers: RestrictionPolicy!
externalServersLimit: [Url!]
}
# Everyone = Including all = Excluding none
# None = Including none = Excluding all
enum RestrictionPolicy {
Everyone
Excluding
Including
None
}