UNPKG

@interep/reputation

Version:
10 lines (9 loc) 2.93 kB
/** * @module @interep/reputation * @version 0.5.0 * @file Definitions and utility functions of Interep reputation. * @copyright Omar Desogus 2023 * @license MIT * @see [Github]{@link https://github.com/interep-project/interep.js/tree/main/packages/reputation} */ var interepReputation=function(e,r){"use strict";var t,o,n,i;e.OAuthProvider=void 0,(t=e.OAuthProvider||(e.OAuthProvider={})).TWITTER="twitter",t.GITHUB="github",t.REDDIT="reddit",e.ReputationLevel=void 0,(o=e.ReputationLevel||(e.ReputationLevel={})).Commoner="commoner",o.UpAndComing="up-and-coming",o.Established="established",o.Star="star",o.Icon="icon",function(e){e.Eq="eq",e.Gt="gt",e.Lt="lt",e.Gte="gte"}(n||(n={}));var a=((i={})[e.OAuthProvider.GITHUB]={bins:[[0,1],[1,10],[10,100],[100,1e3]],condition:{operator:n.Gte,operand:1,binIndexGrantedIfSatisfied:2}},i[e.OAuthProvider.REDDIT]={bins:[[0,2e3],[2e3,2e4],[2e4,1e5],[1e5,2e5]],condition:{operator:n.Eq,operand:!0,binIndexGrantedIfSatisfied:1}},i[e.OAuthProvider.TWITTER]={bins:[[0,100],[100,1e3],[1e3,1e4],[1e4,1e5]],condition:{operator:n.Eq,operand:!0,binIndexGrantedIfSatisfied:2}},i);var u=function(r){var t=r.bins,o=r.condition;return function(r,i){var a=function(e,r){if(e<0)throw new Error("only accept positive numbers");for(var t=0;t<r.length&&!(r[t][0]<=e&&e<r[t][1]);)t+=1;return t}(r,t),u=function(e,r){var t=r.operator,o=r.operand;switch(t){case n.Eq:return e===o;case n.Gt:return e>o;case n.Lt:return e<o;case n.Gte:return e>=o;default:throw new Error("Unknown operator ".concat(t))}}(i,o)?o.binIndexGrantedIfSatisfied:a;return[e.ReputationLevel.Commoner,e.ReputationLevel.UpAndComing,e.ReputationLevel.Established,e.ReputationLevel.Star,e.ReputationLevel.Icon][u]}},s=Object.fromEntries(Object.entries(a).map((function(e){var r=e[0],t=e[1];return[r,u(t)]}))),d=r.object({receivedStars:r.min(r.number(),0),sponsorsCount:r.min(r.number(),0),sponsoringCount:r.min(r.number(),0)}),v=r.object({totalKarma:r.min(r.number(),0),isGold:r.boolean()}),c=r.object({followers:r.min(r.number(),0),botometerOverallScore:r.size(r.number(),0,1),verifiedProfile:r.boolean()});return e.calculateReputation=function(t,o){if(!Object.values(e.OAuthProvider).includes(t))throw new Error("Provider '".concat(t,"' is not supported"));if(t===e.OAuthProvider.GITHUB){r.assert(o,d);var n=o,i=n.receivedStars,a=n.sponsorsCount,u=n.sponsoringCount;return s[e.OAuthProvider.GITHUB](i,a+u)}if(t===e.OAuthProvider.REDDIT){r.assert(o,v);var l=o,p=l.totalKarma,f=l.isGold;return s[e.OAuthProvider.REDDIT](p,f)}if(t===e.OAuthProvider.TWITTER){r.assert(o,c);var b=o,m=b.followers,h=b.verifiedProfile;if(b.botometerOverallScore>=.95)throw new Error("You are a bot!");return s[e.OAuthProvider.TWITTER](m,h)}},e.getOAuthProviders=function(){return Object.values(e.OAuthProvider)},e.getReputationLevels=function(){return Object.values(e.ReputationLevel)},Object.defineProperty(e,"__esModule",{value:!0}),e}({},superstruct);