type Query {
    me: CurrentUser
}

type Mutation {
    "Authenticates the user using the native authentication strategy. This mutation is an alias for `authenticate({ native: { ... }})`"
    login(username: String!, password: String!, rememberMe: Boolean): NativeAuthenticationResult!
    "Authenticates the user using a named authentication strategy"
    authenticate(input: AuthenticationInput!, rememberMe: Boolean): AuthenticationResult!
    logout: Success!
}

# Populated at run-time
input AuthenticationInput

union NativeAuthenticationResult = CurrentUser | InvalidCredentialsError | NativeAuthStrategyError
union AuthenticationResult = CurrentUser | InvalidCredentialsError
