@retroachievements/api
Version:
A well-tested library that lets you get achievement, user, and game data from RetroAchievements.
3 lines (2 loc) • 14.4 kB
JavaScript
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e||self).api={})}(this,function(e){var r,t,n="https://retroachievements.org/API",o=function(e,r,t,n){void 0===n&&(n={});for(var o=(e+"/"+r).replaceAll(/([^:]\/)\/+/g,"$1"),s={z:t.username,y:t.webApiKey},i=0,a=Object.entries(n);i<a.length;i++){var u=a[i],c=u[0],l=u[1];o.includes(":"+c)?o=o.replace(":"+c,String(l)):void 0!==l&&(s[c]=String(l))}return o+"?"+new URLSearchParams(s).toString()},s=null!=(r=null==(t=process.env)?void 0:t.PACKAGE_VERSION)?r:"Unknown",i=function(e){try{var r=e.url,t=new Headers({"User-Agent":"RetroAchievements-api-js/"+s});return Promise.resolve(fetch(r,{headers:t})).then(function(e){if(!e.ok)throw new Error("HTTP Error: Status "+e.status+" "+e.statusText);return Promise.resolve(e.json())})}catch(e){return Promise.reject(e)}};function a(){return a=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},a.apply(this,arguments)}function u(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}function c(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,r){if(e){if("string"==typeof e)return u(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?u(e,r):void 0}}(e))||r&&e&&"number"==typeof e.length){t&&(e=t);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,m,h,d,v,f=function e(r,t){void 0===t&&(t={});var n=t.shouldCastToNumbers,o=t.shouldMapToBooleans,s=r;if(Array.isArray(r)){for(var i,u=[],l=c(r);!(i=l()).done;)u.push(e(i.value,t));s=u}else if(!Array.isArray(r)&&r instanceof Object){for(var m={},h=0,d=Object.entries(r);h<d.length;h++){var v,f=d[h],p=f[0],A=f[1],y=A;null!=n&&n.includes(p)&&(y=null===A?null:Number(A)),null!=o&&o.includes(p)&&(y=null===A?null:"1"===String(A)),m=a({},m,((v={})[P(p)]=e(y,t),v))}s=m}return s},P=function(e){if(e.toUpperCase()===e)return e.toLowerCase();var r=e.charAt(0).toLowerCase()+e.slice(1);return(r=(r=(r=(r=r.replaceAll("ULID","Ulid")).replaceAll("ID","Id")).replaceAll("URL","Url")).replaceAll("rA","ra")).replaceAll("visibleUserawards","visibleUserAwards")},p={game:1,achievement:2,user:3},A={completed:"1",dropped:"2",expired:"3"};e.ClaimSetType=void 0,(l=e.ClaimSetType||(e.ClaimSetType={}))[l.NewSet=0]="NewSet",l[l.Revision=1]="Revision",e.ClaimStatus=void 0,(m=e.ClaimStatus||(e.ClaimStatus={}))[m.Active=0]="Active",m[m.Complete=1]="Complete",m[m.Dropped=2]="Dropped",e.ClaimType=void 0,(h=e.ClaimType||(e.ClaimType={}))[h.Primary=0]="Primary",h[h.Collaboration=1]="Collaboration",e.AchievementDistributionFlags=void 0,(d=e.AchievementDistributionFlags||(e.AchievementDistributionFlags={}))[d.CoreAchievements=3]="CoreAchievements",d[d.UnofficialAchievements=5]="UnofficialAchievements",function(e){e.Primary="0",e.Collaboration="1"}(v||(v={}));var y=function(e,r){var t=a({},e);return void 0!==r.count&&(t.c=r.count),void 0!==r.offset&&(t.o=r.offset),t};e.buildAuthorization=function(e){if(!e.username||!e.webApiKey)throw new Error('\n buildAuthorization() requires an object containing a\n username and webApiKey. eg:\n\n const authorization = buildAuthorization({\n username: "myUserName",\n webApiKey: "myWebApiKey"\n })\n ');return e},e.getAchievementCount=function(e,r){try{var t=o(n,"/API_GetAchievementCount.php",e,{i:r.gameId});return Promise.resolve(i({url:t})).then(f)}catch(e){return Promise.reject(e)}},e.getAchievementDistribution=function(e,r){try{var t=r.flags,s=r.hardcore,a={i:r.gameId};void 0!==t&&(a.f=t),void 0!==s&&(a.h=!0===s?1:0);var u=o(n,"/API_GetAchievementDistribution.php",e,a);return Promise.resolve(i({url:u}))}catch(e){return Promise.reject(e)}},e.getAchievementOfTheWeek=function(e){try{var r=o(n,"/API_GetAchievementOfTheWeek.php",e);return Promise.resolve(i({url:r})).then(function(e){return f(e,{shouldCastToNumbers:["ID","Points","TrueRatio","TotalPlayers","RAPoints","RASoftcorePoints","UnlocksCount"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},e.getAchievementUnlocks=function(e,r){try{var t=r.offset,s=r.count,a={a:r.achievementId};t&&(a.o=t),s&&(a.c=s);var u=o(n,"/API_GetAchievementUnlocks.php",e,a);return Promise.resolve(i({url:u})).then(function(e){return f(e,{shouldCastToNumbers:["ID","Points","TrueRatio","RAPoints","RASoftcorePoints"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},e.getAchievementsEarnedBetween=function(e,r){try{var t=r.toDate,s=o(n,"/API_GetAchievementsEarnedBetween.php",e,{u:r.username,f:(r.fromDate.getTime()/1e3).toFixed(0),t:(t.getTime()/1e3).toFixed(0)});return Promise.resolve(i({url:s})).then(function(e){return f(e,{shouldCastToNumbers:["AchievementID","Points","GameID"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},e.getAchievementsEarnedOnDay=function(e,r){try{var t=r.onDate,s=o(n,"/API_GetAchievementsEarnedOnDay.php",e,{u:r.username,d:t.getFullYear()+"-"+(t.getMonth()+1)+"-"+t.getDate()});return Promise.resolve(i({url:s})).then(function(e){return f(e,{shouldCastToNumbers:["AchievementID","Points","GameID"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},e.getActiveClaims=function(e){try{var r=o(n,"/API_GetActiveClaims.php",e);return Promise.resolve(i({url:r})).then(function(e){return f(e,{shouldMapToBooleans:["UserIsJrDev"]})})}catch(e){return Promise.reject(e)}},e.getClaims=function(e,r){try{var t=o(n,"/API_GetClaims.php",e,{k:A[r.claimKind]});return Promise.resolve(i({url:t})).then(function(e){return f(e,{shouldMapToBooleans:["UserIsJrDev"]})})}catch(e){return Promise.reject(e)}},e.getComments=function(e,r){try{var t=r.identifier,s=r.kind,a=r.offset,u=r.count,c={i:t};if(s)c.t=p[s];else if("number"==typeof t)throw new TypeError("'kind' must be specified when looking up an achievement or game.");a&&(c.o=a),u&&(c.c=u);var l=o(n,"/API_GetComments.php",e,c);return Promise.resolve(i({url:l})).then(function(e){return f(e,{shouldCastToNumbers:["Count","Total"]})})}catch(e){return Promise.reject(e)}},e.getConsoleIds=function(e,r){try{var t;null!=r&&r.shouldOnlyRetrieveActiveSystems&&(t=a({},t,{a:1})),null!=r&&r.shouldOnlyRetrieveGameSystems&&(t=a({},t,{g:1}));var s=o(n,"/API_GetConsoleIDs.php",e,t);return Promise.resolve(i({url:s})).then(function(e){return f(e,{shouldCastToNumbers:["ID"]})})}catch(e){return Promise.reject(e)}},e.getGame=function(e,r){try{var t=o(n,"/API_GetGame.php",e,{i:r.gameId});return Promise.resolve(i({url:t})).then(function(e){return f(e,{shouldCastToNumbers:["ID","ForumTopicID","ConsoleID","Flags"]})})}catch(e){return Promise.reject(e)}},e.getGameExtended=function(e,r){try{var t={i:r.gameId};r.isRequestingUnofficialAchievements&&(t.f=5);var s=o(n,"/API_GetGameExtended.php",e,t);return Promise.resolve(i({url:s})).then(function(e){return f(e,{shouldCastToNumbers:["ID","NumAwarded","NumAwardedHardcore","Points","TrueRatio","DisplayOrder","NumDistinctPlayersCasual","NumDistinctPlayersHardcore"]})})}catch(e){return Promise.reject(e)}},e.getGameHashes=function(e,r){try{var t=o(n,"/API_GetGameHashes.php",e,{i:r.gameId});return Promise.resolve(i({url:t})).then(f)}catch(e){return Promise.reject(e)}},e.getGameInfoAndUserProgress=function(e,r){try{var t={g:r.gameId,u:r.username};r.shouldIncludeHighestAwardMetadata&&(t.a=1);var s=o(n,"/API_GetGameInfoAndUserProgress.php",e,t);return Promise.resolve(i({url:s})).then(function(e){return f(e,{shouldCastToNumbers:["ID","NumAwarded","NumAwardedHardcore","Points","TrueRatio","DisplayOrder","NumDistinctPlayersCasual","NumDistinctPlayersHardcore"]})})}catch(e){return Promise.reject(e)}},e.getGameList=function(e,r){try{var t=r.shouldOnlyRetrieveGamesWithAchievements,s=r.shouldRetrieveGameHashes,u={i:r.consoleId};void 0!==t&&(u=a({},u,{f:t?1:0})),s&&(u=a({},u,{h:s?1:0}));var c=o(n,"/API_GetGameList.php",e,u);return Promise.resolve(i({url:c})).then(function(e){return f(e,{shouldCastToNumbers:["ID","ConsoleID"]})})}catch(e){return Promise.reject(e)}},e.getGameRankAndScore=function(e,r){try{var t=o(n,"/API_GetGameRankAndScore.php",e,{g:r.gameId,t:"latest-masters"===r.type?1:0});return Promise.resolve(i({url:t})).then(function(e){return f(e,{shouldCastToNumbers:["TotalScore"]})})}catch(e){return Promise.reject(e)}},e.getGameRating=function(e,r){try{var t=o(n,"/API_GetGameRating.php",e,{i:r.gameId});return Promise.resolve(i({url:t})).then(f)}catch(e){return Promise.reject(e)}},e.getLeaderboardEntries=function(e,r){try{var t={};t.i=r.leaderboardId,null!=r&&r.offset&&(t.o=r.offset),null!=r&&r.count&&(t.c=r.count);var s=o(n,"/API_GetLeaderboardEntries.php",e,t);return Promise.resolve(i({url:s})).then(f)}catch(e){return Promise.reject(e)}},e.getRecentGameAwards=function(e,r){try{var t={};null!=r&&r.startDate&&(t.d=r.startDate),null!=r&&r.offset&&(t.o=r.offset),null!=r&&r.count&&(t.c=r.count),null!=r&&r.desiredAwardKinds&&(t.k=r.desiredAwardKinds.join(","));var s=o(n,"/API_GetRecentGameAwards.php",e,t);return Promise.resolve(i({url:s})).then(f)}catch(e){return Promise.reject(e)}},e.getTicketData=function(e,r){void 0===r&&(r={});try{var t=function(e){var r=e.ticketId,t=e.isGettingMostTicketedGames,n=e.username,o=e.gameId,s=e.isGettingTicketsForUnofficialAchievements,i=e.shouldReturnTicketsList,a=e.achievementId,u={};return void 0!==r?u.i=r:t?(u.f="1",u=y(u,e)):n?u.u=n:o?(u.g=o,s&&(u.f="5"),i&&(u.d="1")):a?u.a=a:u=y(u,e),u}(r),s=o(n,"/API_GetTicketData.php",e,t);return Promise.resolve(i({url:s})).then(function(e){return f(e,{shouldCastToNumbers:["ID","AchievementID","Points","GameID","ReportType","ReportState","OpenTickets"],shouldMapToBooleans:["Hardcore"]})})}catch(e){return Promise.reject(e)}},e.getTopTenUsers=function(e){try{var r=o(n,"/API_GetTopTenUsers.php",e);return Promise.resolve(i({url:r})).then(function(e){for(var r,t=[],n=c(e);!(r=n()).done;){var o=r.value;t.push({username:o[1],totalPoints:Number(o[2]),totalRatioPoints:Number(o[3])})}return t})}catch(e){return Promise.reject(e)}},e.getUserAwards=function(e,r){try{var t=o(n,"/API_GetUserAwards.php",e,{u:r.username});return Promise.resolve(i({url:t})).then(f)}catch(e){return Promise.reject(e)}},e.getUserClaims=function(e,r){try{var t=o(n,"/API_GetUserClaims.php",e,{u:r.username});return Promise.resolve(i({url:t})).then(function(e){return f(e,{shouldCastToNumbers:["ID","GameID","ClaimType","SetType","Status","Extension","Special","MinutesLeft"]})})}catch(e){return Promise.reject(e)}},e.getUserCompletedGames=function(e,r){try{var t=o(n,"/API_GetUserCompletedGames.php",e,{u:r.username});return Promise.resolve(i({url:t})).then(function(e){return f(e,{shouldCastToNumbers:["GameID","ConsoleID","MaxPossible","NumAwarded","PctWon"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},e.getUserCompletionProgress=function(e,r){try{var t=r.offset,s=r.count,a={u:r.username};t&&(a.o=t),s&&(a.c=s);var u=o(n,"/API_GetUserCompletionProgress.php",e,a);return Promise.resolve(i({url:u})).then(f)}catch(e){return Promise.reject(e)}},e.getUserGameRankAndScore=function(e,r){try{var t=o(n,"/API_GetUserGameRankAndScore.php",e,{g:r.gameId,u:r.username});return Promise.resolve(i({url:t})).then(function(e){return f(e,{shouldCastToNumbers:["TotalScore","UserRank"]})})}catch(e){return Promise.reject(e)}},e.getUserPoints=function(e,r){try{var t=o(n,"/API_GetUserPoints.php",e,{u:r.username});return Promise.resolve(i({url:t})).then(f)}catch(e){return Promise.reject(e)}},e.getUserProfile=function(e,r){try{var t=o(n,"/API_GetUserProfile.php",e,{u:r.username});return Promise.resolve(i({url:t})).then(function(e){return f(e,{shouldCastToNumbers:["TotalPoints","TotalSoftcorePoints","TotalTruePoints","Permissions"],shouldMapToBooleans:["Untracked","UserWallActive"]})})}catch(e){return Promise.reject(e)}},e.getUserProgress=function(e,r){try{var t=o(n,"/API_GetUserProgress.php",e,{u:r.username,i:r.gameIds.join(",")});return Promise.resolve(i({url:t})).then(function(e){return f(e,{shouldCastToNumbers:["NumPossibleAchievements","PossibleScore","NumAchieved","ScoreAchieved","NumAchievedHardcore","ScoreAchievedHardcore"]})})}catch(e){return Promise.reject(e)}},e.getUserRecentAchievements=function(e,r){try{var t=r.recentMinutes,s={u:r.username};void 0!==t&&(s.m=t);var a=o(n,"/API_GetUserRecentAchievements.php",e,s);return Promise.resolve(i({url:a})).then(function(e){return f(e,{shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},e.getUserRecentlyPlayedGames=function(e,r){try{var t=r.offset,s=r.count,a={u:r.username};void 0!==t&&(a.o=t),void 0!==s&&(a.c=s);var u=o(n,"/API_GetUserRecentlyPlayedGames.php",e,a);return Promise.resolve(i({url:u})).then(function(e){return f(e,{shouldCastToNumbers:["GameID","ConsoleID","NumPossibleAchievements","PossibleScore","NumAchieved","ScoreAchieved","NumAchievedHardcore","ScoreAchievedHardcore","MyVote"]})})}catch(e){return Promise.reject(e)}},e.getUserSummary=function(e,r){try{var t=r.recentGamesCount,s=r.recentAchievementsCount,a={u:r.username};void 0!==t&&(a.g=t),void 0!==s&&(a.a=s);var u=o(n,"/API_GetUserSummary.php",e,a);return Promise.resolve(i({url:u})).then(function(e){return f(e,{shouldCastToNumbers:["GameID","ConsoleID","ID","LastGameID","ForumTopicID","activitytype","ContribCount","ContribYield","TotalPoints","TotalSoftcorePoints","TotalTruePoints","Permissions","NumPossibleAchievements","PossibleScore","NumAchieved","ScoreAchieved","NumAchievedHardcore","ScoreAchievedHardcore","Points","SoftcorePoints"],shouldMapToBooleans:["Untracked","UserWallActive","IsAwarded","HardcoreAchieved"]})})}catch(e){return Promise.reject(e)}},e.getUserWantToPlayList=function(e,r){try{var t={};t.u=r.username,null!=r&&r.offset&&(t.o=r.offset),null!=r&&r.count&&(t.c=r.count);var s=o(n,"/API_GetUserWantToPlayList.php",e,t);return Promise.resolve(i({url:s})).then(f)}catch(e){return Promise.reject(e)}},e.unsafe_call=i});
//# sourceMappingURL=api.umd.js.map