extend type Mutation { createRefreshToken(input: NewRefreshToken!): RefreshToken! createUserAccount(input: NewUserAccount!): UserAccount! @hasRole(roles: [ADMIN], level: ORG, type: ORG) deleteUserAccount(input: DeleteUserAccount!): DeleteUserAccountPayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG) deleteInvitedUserAccount(input: DeleteInvitedUserAccount!): DeleteInvitedUserAccountPayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG) logoutUser(input: LogoutUser!): Boolean! clearProfileAvatar: UserAccount! updateUserPassword(input: UpdateUserPassword!): UpdateUserPasswordPayload! updateUserRole(input: UpdateUserRole!): UpdateUserRolePayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG) updateUserInfo(input: UpdateUserInfo!): UpdateUserInfoPayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG) } extend type Query { searchMembers(input: MemberSearchFilter!): [MemberSearchResult!]! } input DeleteInvitedUserAccount { invitedUserID: UUID! } type DeleteInvitedUserAccountPayload { invitedUser: InvitedUserAccount! } input MemberSearchFilter { searchFilter: String! projectID: UUID } type MemberSearchResult { similarity: Int! id: String! user: UserAccount status: ShareStatus! } type UpdateUserInfoPayload { user: UserAccount! } input UpdateUserInfo { name: String! initials: String! email: String! bio: String! } input UpdateUserPassword { userID: UUID! password: String! } type UpdateUserPasswordPayload { ok: Boolean! user: UserAccount! } input UpdateUserRole { userID: UUID! roleCode: RoleCode! } type UpdateUserRolePayload { user: UserAccount! } input NewRefreshToken { userID: UUID! } input NewUserAccount { username: String! email: String! fullName: String! initials: String! password: String! roleCode: String! } input LogoutUser { userID: UUID! } input DeleteUserAccount { userID: UUID! newOwnerID: UUID } type DeleteUserAccountPayload { ok: Boolean! userAccount: UserAccount! }