@interep/reputation
Version:
Definitions and utility functions of Interep reputation.
37 lines (31 loc) • 1.59 kB
text/typescript
import { assert } from "superstruct"
import { OAuthProvider, GithubParameters, ProviderParameters, RedditParameters, TwitterParameters } from "./types"
import criteria from "./criteria"
import { GhStruct, RedditStruct, TwitterStruct } from "./structs"
/**
* Returns the reputation based on the parameters.
* @param provider The provider.
* @param parameters The provider parameters to check.
* @returns The reputation level found.
*/
// eslint-disable-next-line consistent-return
const calculateReputation = (provider: OAuthProvider, parameters: ProviderParameters) => {
if (!Object.values(OAuthProvider).includes(provider)) throw new Error(`Provider '${provider}' is not supported`)
if (provider === OAuthProvider.GITHUB) {
assert(parameters, GhStruct)
const { receivedStars, sponsorsCount, sponsoringCount } = parameters as GithubParameters
return criteria[OAuthProvider.GITHUB](receivedStars, sponsorsCount + sponsoringCount)
}
if (provider === OAuthProvider.REDDIT) {
assert(parameters, RedditStruct)
const { totalKarma, isGold } = parameters as RedditParameters
return criteria[OAuthProvider.REDDIT](totalKarma, isGold)
}
if (provider === OAuthProvider.TWITTER) {
assert(parameters, TwitterStruct)
const { followers, verifiedProfile, botometerOverallScore } = parameters as TwitterParameters
if (botometerOverallScore >= 0.95) throw new Error("You are a bot!")
return criteria[OAuthProvider.TWITTER](followers, verifiedProfile)
}
}
export default calculateReputation