@retroachievements/api 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +46 -46
  2. package/dist/api.cjs +1 -1
  3. package/dist/api.cjs.map +1 -1
  4. package/dist/api.modern.js +1 -1
  5. package/dist/api.modern.js.map +1 -1
  6. package/dist/api.module.js +1 -1
  7. package/dist/api.module.js.map +1 -1
  8. package/dist/api.umd.js +1 -1
  9. package/dist/api.umd.js.map +1 -1
  10. package/dist/feed/getAchievementOfTheWeek.d.ts +3 -1
  11. package/dist/feed/models/achievement-of-the-week.model.d.ts +2 -0
  12. package/dist/feed/models/get-achievement-of-the-week-response.model.d.ts +2 -0
  13. package/dist/set-version.d.ts +1 -0
  14. package/dist/user/getAchievementsEarnedBetween.d.ts +2 -1
  15. package/dist/user/getAchievementsEarnedOnDay.d.ts +2 -1
  16. package/dist/user/models/dated-user-achievement.model.d.ts +2 -1
  17. package/dist/user/models/dated-user-achievements-response.model.d.ts +1 -0
  18. package/package.json +3 -15
  19. package/src/feed/getAchievementOfTheWeek.test.ts +26 -11
  20. package/src/feed/getAchievementOfTheWeek.ts +3 -1
  21. package/src/feed/models/achievement-of-the-week.model.ts +2 -0
  22. package/src/feed/models/get-achievement-of-the-week-response.model.ts +2 -0
  23. package/src/set-version.js +6 -0
  24. package/src/user/getAchievementsEarnedBetween.test.ts +13 -6
  25. package/src/user/getAchievementsEarnedBetween.ts +2 -1
  26. package/src/user/getAchievementsEarnedOnDay.test.ts +13 -6
  27. package/src/user/getAchievementsEarnedOnDay.ts +2 -1
  28. package/src/user/models/dated-user-achievement.model.ts +2 -1
  29. package/src/user/models/dated-user-achievements-response.model.ts +1 -0
  30. package/src/utils/internal/call.ts +7 -1
package/README.md CHANGED
@@ -1,3 +1,4 @@
1
+ <p align="center" dir="auto"><a href="https://retroachievements.org" rel="nofollow"><img src="https://raw.githubusercontent.com/RetroAchievements/RAWeb/master/public/assets/images/ra-icon.webp" width="200" alt="RetroAchievements Logo" style="max-width: 100%;"></a></p>
1
2
  <h1 align="center">@retroachievements/api</h1>
2
3
 
3
4
  <p align="center">
@@ -16,23 +17,13 @@
16
17
 
17
18
  ✅ &nbsp;Modular by design and supports tree-shaking.
18
19
  ✅ &nbsp;Officially-supported, aligns 1:1 with the RAWeb API.
19
- ✅ &nbsp;Backwards-compatible, easy migration path to API v2.
20
20
  ✅ &nbsp;Supports Node environments (16 and above).
21
21
  ✅ &nbsp;Ships with TypeScript support and types.
22
- ✅ &nbsp;Correctly maps types and properties from RAWeb PHP calls.
22
+ ✅ &nbsp;Automatically maps types and properties from RAWeb PHP calls.
23
23
  ✅ &nbsp;Small, <3Kb.
24
24
 
25
25
  <hr />
26
26
 
27
- ## Documentation
28
-
29
- Learn how to authenticate and start pulling data from RetroAchievements on our documentation website.
30
-
31
- - [Get started](https://api-docs.retroachievements.org/getting-started.html)
32
- - [Get a user's profile information](https://api-docs.retroachievements.org/v1/users/get-user-summary.html)
33
- - [Look up games a user has completed](https://api-docs.retroachievements.org/v1/users/get-user-completed-games.html)
34
- - [Get a game's metadata](https://api-docs.retroachievements.org/v1/games/get-game-extended.html)
35
-
36
27
  ## Installation
37
28
 
38
29
  Run the following command:
@@ -41,6 +32,15 @@ Run the following command:
41
32
  npm install --save @retroachievements/api
42
33
  ```
43
34
 
35
+ ## Documentation
36
+
37
+ Learn how to authenticate and start pulling data from RetroAchievements on our documentation website.
38
+
39
+ - [Get started](https://api-docs.retroachievements.org/getting-started.html)
40
+ - [Get a user's profile information](https://api-docs.retroachievements.org/v1/get-user-profile.html)
41
+ - [Look up games a user has completed](https://api-docs.retroachievements.org/v1/get-user-progress.html)
42
+ - [Get a game's metadata](https://api-docs.retroachievements.org/v1/get-game-extended.html)
43
+
44
44
  ## How to begin making API calls
45
45
 
46
46
  To use any endpoint function in the API, you must first be authorized by RetroAchievements. Fortunately, this is a fairly straightforward process.
@@ -74,58 +74,58 @@ const game = await getGame(authorization, { gameId: 14402 });
74
74
 
75
75
  Click the function names to open their complete docs on the docs site.
76
76
 
77
- ### Users
77
+ ### User
78
78
 
79
- - [`getAchievementsEarnedBetween()`](https://api-docs.retroachievements.org/v1/users/get-achievements-earned-between.html) - Get a list of achievements earned by a user between two dates.
80
- - [`getAchievementsEarnedOnDay()`](https://api-docs.retroachievements.org/v1/users/get-achievements-earned-on-day.html) - Get a list of achievements earned by a user on a given date.
81
- - [`getGameInfoAndUserProgress()`](https://api-docs.retroachievements.org/v1/users/get-game-info-and-user-progress.html) - Get metadata about a game as well as a user's progress on that game.
82
- - [`getUserAwards()`](https://api-docs.retroachievements.org/v1/users/get-user-awards.html) - Get a list of a user's site awards/badges.
83
- - [`getUserClaims()`](https://api-docs.retroachievements.org/v1/users/get-user-claims.html) - Get a list of set claims made over the lifetime of a user.
84
- - [`getUserCompletedGames()`](https://api-docs.retroachievements.org/v1/users/get-user-completed-games.html) - Get hardcore and softcore completion metadata about games a user has played.
85
- - [`getUserGameRankAndScore()`](https://api-docs.retroachievements.org/v1/users/get-user-game-rank-and-score.html) - Get metadata about how a user has performed on a given game.
86
- - [`getUserPoints()`](https://api-docs.retroachievements.org/v1/users/get-user-points.html) - Get a user's total hardcore and softcore points.
87
- - [`getUserProgress()`](https://api-docs.retroachievements.org/v1/users/get-user-progress.html) - Get a user's progress on a list of specified games.
88
- - [`getUserRecentAchievements()`](https://api-docs.retroachievements.org/v1/users/get-user-recent-achievements.html) - Get a list of achievements recently earned by the user.
89
- - [`getUserRecentlyPlayedGames()`](https://api-docs.retroachievements.org/v1/users/get-user-recently-played-games.html) - Get a list of games a user has recently played.
90
- - [`getUserSummary()`](https://api-docs.retroachievements.org/v1/users/get-user-summary.html) - Get a user's exhaustive profile metadata.
91
- - [`getUserProfile()`](https://api-docs.retroachievements.org/v1/users/users/profile.html) - Get a thin subset of a user's profile metadata.
79
+ - [`getUserProfile()`](https://api-docs.retroachievements.org/v1/get-user-profile.html) - Get a user's basic profile information.
80
+ - [`getUserRecentAchievements()`](https://api-docs.retroachievements.org/v1/get-user-recent-achievements.html) - Get a list of achievements recently earned by the user.
81
+ - [`getAchievementsEarnedBetween()`](https://api-docs.retroachievements.org/v1/get-achievements-earned-between.html) - Get a list of achievements earned by a user between two dates.
82
+ - [`getAchievementsEarnedOnDay()`](https://api-docs.retroachievements.org/v1/get-achievements-earned-on-day.html) - Get a list of achievements earned by a user on a given date.
83
+ - [`getGameInfoAndUserProgress()`](https://api-docs.retroachievements.org/v1/get-game-info-and-user-progress.html) - Get metadata about a game as well as a user's progress on that game.
84
+ - [`getUserCompletionProgress()`](https://api-docs.retroachievements.org/v1/get-user-completion-progress.html) - Get metadata about all the user's played games and any awards associated with them.
85
+ - [`getUserAwards()`](https://api-docs.retroachievements.org/v1/get-user-awards.html) - Get a list of a user's site awards/badges.
86
+ - [`getUserClaims()`](https://api-docs.retroachievements.org/v1/get-user-claims.html) - Get a list of set development claims made over the lifetime of a user.
87
+ - [`getUserGameRankAndScore()`](https://api-docs.retroachievements.org/v1/get-user-game-rank-and-score.html) - Get metadata about how a user has performed on a given game.
88
+ - [`getUserPoints()`](https://api-docs.retroachievements.org/v1/get-user-points.html) - Get a user's total hardcore and softcore points.
89
+ - [`getUserProgress()`](https://api-docs.retroachievements.org/v1/get-user-progress.html) - Get a user's progress on a list of specified games.
90
+ - [`getUserRecentlyPlayedGames()`](https://api-docs.retroachievements.org/v1/get-user-recently-played-games.html) - Get a list of games a user has recently played.
91
+ - [`getUserSummary()`](https://api-docs.retroachievements.org/v1/get-user-summary.html) - Get a user's profile metadata.
92
+ - [`getUserCompletedGames()`](https://api-docs.retroachievements.org/v1/get-user-completed-games.html) - Deprecated function. Get hardcore and softcore completion metadata about games a user has played.
92
93
 
93
- ### Games
94
+ ### Game
94
95
 
95
- - [`getAchievementCount()`](https://api-docs.retroachievements.org/v1/games/get-achievement-count.html) - Get the list of achievement IDs for a game.
96
- - [`getAchievementDistribution()`](https://api-docs.retroachievements.org/v1/games/get-achievement-distribution.html) - Get how many players have unlocked how many achievements for a game.
97
- - [`getGame()`](https://api-docs.retroachievements.org/v1/games/get-game.html) - Get basic metadata about a game.
98
- - [`getGameExtended()`](https://api-docs.retroachievements.org/v1/games/get-game-extended.html) - Get extended metadata about a game.
99
- - [`getGameRankAndScore()`](https://api-docs.retroachievements.org/v1/games/get-game-rank-and-score.html) - Get a list of either the latest masters or highest points earners for a game.
100
- - [`getGameRating()`](https://api-docs.retroachievements.org/v1/games/get-game-rating.html) - Get how users have rated a game.
96
+ - [`getGame()`](https://api-docs.retroachievements.org/v1/get-game.html) - Get basic metadata about a game.
97
+ - [`getGameExtended()`](https://api-docs.retroachievements.org/v1/get-game-extended.html) - Get extended metadata about a game.
98
+ - [`getAchievementCount()`](https://api-docs.retroachievements.org/v1/get-achievement-count.html) - Get the list of achievement IDs for a game.
99
+ - [`getAchievementDistribution()`](https://api-docs.retroachievements.org/v1/get-achievement-distribution.html) - Get how many players have unlocked how many achievements for a game.
100
+ - [`getGameRankAndScore()`](https://api-docs.retroachievements.org/v1/get-game-rank-and-score.html) - Get a list of either the latest masters or highest hardcore points earners for a game.
101
101
 
102
- ### Achievements
102
+ ### System
103
103
 
104
- - [`getAchievementUnlocks()`](https://api-docs.retroachievements.org/v1/achievements/get-achievement-unlocks.html) - Get a list of users who have earned an achievement.
104
+ - [`getConsoleIds()`](https://api-docs.retroachievements.org/v1/get-console-ids.html) - Get the complete list of console ID and name pairs on the site.
105
+ - [`getGameList()`](https://api-docs.retroachievements.org/v1/get-game-list.html) - Get the complete list of games for a console.
105
106
 
106
- ### Consoles
107
+ ### Achievement
107
108
 
108
- - [`getConsoleIds()`](https://api-docs.retroachievements.org/v1/consoles/get-console-ids.html) - Get the complete list of console ID and name pairs on the site.
109
- - [`getGameList()`](https://api-docs.retroachievements.org/v1/consoles/get-game-list.html) - Get the complete list of games for a console.
109
+ - [`getAchievementUnlocks()`](https://api-docs.retroachievements.org/v1/get-achievement-unlocks.html) - Get a list of users who have earned an achievement.
110
110
 
111
111
  ### Feed
112
112
 
113
- - [`getAchievementOfTheWeek()`](https://api-docs.retroachievements.org/v1/feed/get-achievement-of-the-week.html) - Get comprehensive metadata about the current Achievement of the Week.
114
- - [`getActiveClaims()`](https://api-docs.retroachievements.org/v1/feed/get-active-claims.html) - Get all active set claims on the site.
115
- - [`getClaims()`](https://api-docs.retroachievements.org/v1/feed/get-claims.html) - Get all claims of other kinds on the site.
116
- - [`getTopTenUsers()`](https://api-docs.retroachievements.org/v1/feed/get-top-ten-users.html) - Get the list of top ten points earners.
113
+ - [`getActiveClaims()`](https://api-docs.retroachievements.org/v1/get-active-claims.html) - Get all active set claims on the site.
114
+ - [`getClaims()`](https://api-docs.retroachievements.org/v1/get-claims.html) - Get all claims of other kinds on the site.
115
+ - [`getTopTenUsers()`](https://api-docs.retroachievements.org/v1/get-top-ten-users.html) - Get the list of top ten points earners.
117
116
 
118
- ### Tickets
117
+ ### Event
118
+
119
+ - [`getAchievementOfTheWeek()`](https://api-docs.retroachievements.org/v1/get-achievement-of-the-week.html) - Get comprehensive metadata about the current Achievement of the Week.
120
+
121
+ ### Ticket
119
122
 
120
123
  - [Get Ticket by ID](https://api-docs.retroachievements.org/v1/tickets/get-ticket-by-id.html)
121
124
  - [Get Most Ticketed Games](https://api-docs.retroachievements.org/v1/tickets/get-most-ticketed-games.html)
122
125
  - [Get Most Recent Tickets](https://api-docs.retroachievements.org/v1/tickets/get-most-recent-tickets.html)
123
126
  - [Get Game Ticket Stats](https://api-docs.retroachievements.org/v1/tickets/get-game-ticket-stats.html)
124
127
  - [Get Developer Ticket Stats](https://api-docs.retroachievements.org/v1/tickets/get-developer-ticket-stats.html)
125
-
126
- ## Examples
127
-
128
- TODO
128
+ - [Get Achievement Ticket Stats](https://api-docs.retroachievements.org/v1/get-ticket-data/get-achievement-ticket-stats.html)
129
129
 
130
130
  ## Projects Using @retroachievements/api
131
131
 
package/dist/api.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e="https://retroachievements.org/API",r=function(e,r,t,o){void 0===o&&(o={});for(var n=(e+"/"+r).replaceAll(/([^:]\/)\/+/g,"$1"),s={z:t.userName,y:t.webApiKey},i=0,a=Object.entries(o);i<a.length;i++){var u=a[i],c=u[0],l=u[1];n.includes(":"+c)?n=n.replace(":"+c,String(l)):void 0!==l&&(s[c]=String(l))}return n+"?"+new URLSearchParams(s).toString()},t=function(e){try{return Promise.resolve(fetch(e.url)).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 o(){return o=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},o.apply(this,arguments)}function n(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,o=new Array(r);t<r;t++)o[t]=e[t];return o}function s(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 n(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)?n(e,r):void 0}}(e))||r&&e&&"number"==typeof e.length){t&&(e=t);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}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 i,a,u,c,l,m=function e(r,t){void 0===t&&(t={});var n=t.shouldCastToNumbers,i=t.shouldMapToBooleans,a=r;if(Array.isArray(r)){for(var u,c=[],l=s(r);!(u=l()).done;)c.push(e(u.value,t));a=c}else if(!Array.isArray(r)&&r instanceof Object){for(var m={},d=0,p=Object.entries(r);d<p.length;d++){var v,P=p[d],f=P[0],A=P[1],y=A;null!=n&&n.includes(f)&&(y=null===A?null:Number(A)),null!=i&&i.includes(f)&&(y=null===A?null:"1"===String(A)),m=o({},m,((v={})[h(f)]=e(y,t),v))}a=m}return a},h=function(e){if(e.toUpperCase()===e)return e.toLowerCase();var r=e.charAt(0).toLowerCase()+e.slice(1);return(r=(r=(r=r.replaceAll("ID","Id")).replaceAll("URL","Url")).replaceAll("rA","ra")).replaceAll("visibleUserawards","visibleUserAwards")},d={completed:"1",dropped:"2",expired:"3"};exports.ClaimSetType=void 0,(i=exports.ClaimSetType||(exports.ClaimSetType={}))[i.NewSet=0]="NewSet",i[i.Revision=1]="Revision",exports.ClaimStatus=void 0,(a=exports.ClaimStatus||(exports.ClaimStatus={}))[a.Active=0]="Active",a[a.Complete=1]="Complete",a[a.Dropped=2]="Dropped",exports.ClaimType=void 0,(u=exports.ClaimType||(exports.ClaimType={}))[u.Primary=0]="Primary",u[u.Collaboration=1]="Collaboration",exports.AchievementDistributionFlags=void 0,(c=exports.AchievementDistributionFlags||(exports.AchievementDistributionFlags={}))[c.CoreAchievements=3]="CoreAchievements",c[c.UnofficialAchievements=5]="UnofficialAchievements",function(e){e.Primary="0",e.Collaboration="1"}(l||(l={}));var p=function(e,r){var t=o({},e);return void 0!==r.count&&(t.c=r.count),void 0!==r.offset&&(t.o=r.offset),t};exports.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},exports.getAchievementCount=function(o,n){try{var s=r(e,"/API_GetAchievementCount.php",o,{i:n.gameId});return Promise.resolve(t({url:s})).then(m)}catch(e){return Promise.reject(e)}},exports.getAchievementDistribution=function(o,n){try{var s=n.flags,i=n.hardcore,a={i:n.gameId};void 0!==s&&(a.f=s),void 0!==i&&(a.h=!0===i?1:0);var u=r(e,"/API_GetAchievementDistribution.php",o,a);return Promise.resolve(t({url:u}))}catch(e){return Promise.reject(e)}},exports.getAchievementOfTheWeek=function(o){try{var n=r(e,"/API_GetAchievementOfTheWeek.php",o);return Promise.resolve(t({url:n})).then(function(e){return m(e,{shouldCastToNumbers:["ID","Points","TrueRatio","TotalPlayers","RAPoints","UnlocksCount"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getAchievementUnlocks=function(o,n){try{var s=n.offset,i=n.count,a={a:n.achievementId};s&&(a.o=s),i&&(a.c=i);var u=r(e,"/API_GetAchievementUnlocks.php",o,a);return Promise.resolve(t({url:u})).then(function(e){return m(e,{shouldCastToNumbers:["ID","Points","TrueRatio","RAPoints"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getAchievementsEarnedBetween=function(o,n){try{var s=n.toDate,i=r(e,"/API_GetAchievementsEarnedBetween.php",o,{u:n.userName,f:(n.fromDate.getTime()/1e3).toFixed(0),t:(s.getTime()/1e3).toFixed(0)});return Promise.resolve(t({url:i})).then(function(e){return m(e,{shouldCastToNumbers:["AchievementID","Points","GameID"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getAchievementsEarnedOnDay=function(o,n){try{var s=n.onDate,i=r(e,"/API_GetAchievementsEarnedOnDay.php",o,{u:n.userName,d:s.getFullYear()+"-"+(s.getMonth()+1)+"-"+s.getDate()});return Promise.resolve(t({url:i})).then(function(e){return m(e,{shouldCastToNumbers:["AchievementID","Points","GameID"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getActiveClaims=function(o){try{var n=r(e,"/API_GetActiveClaims.php",o);return Promise.resolve(t({url:n})).then(function(e){return m(e,{shouldMapToBooleans:["UserIsJrDev"]})})}catch(e){return Promise.reject(e)}},exports.getClaims=function(o,n){try{var s=r(e,"/API_GetClaims.php",o,{k:d[n.claimKind]});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldMapToBooleans:["UserIsJrDev"]})})}catch(e){return Promise.reject(e)}},exports.getConsoleIds=function(o){try{var n=r(e,"/API_GetConsoleIDs.php",o);return Promise.resolve(t({url:n})).then(function(e){return m(e,{shouldCastToNumbers:["ID"]})})}catch(e){return Promise.reject(e)}},exports.getGame=function(o,n){try{var s=r(e,"/API_GetGame.php",o,{i:n.gameId});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldCastToNumbers:["ID","ForumTopicID","ConsoleID","Flags"]})})}catch(e){return Promise.reject(e)}},exports.getGameExtended=function(o,n){try{var s={i:n.gameId};n.isRequestingUnofficialAchievements&&(s.f=5);var i=r(e,"/API_GetGameExtended.php",o,s);return Promise.resolve(t({url:i})).then(function(e){return m(e,{shouldCastToNumbers:["ID","NumAwarded","NumAwardedHardcore","Points","TrueRatio","DisplayOrder","NumDistinctPlayersCasual","NumDistinctPlayersHardcore"]})})}catch(e){return Promise.reject(e)}},exports.getGameInfoAndUserProgress=function(o,n){try{var s=r(e,"/API_GetGameInfoAndUserProgress.php",o,{g:n.gameId,u:n.userName});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldCastToNumbers:["ID","NumAwarded","NumAwardedHardcore","Points","TrueRatio","DisplayOrder","NumDistinctPlayersCasual","NumDistinctPlayersHardcore","Released"]})})}catch(e){return Promise.reject(e)}},exports.getGameList=function(n,s){try{var i=s.shouldOnlyRetrieveGamesWithAchievements,a=s.shouldRetrieveGameHashes,u={i:s.consoleId};void 0!==i&&(u=o({},u,{f:i?1:0})),a&&(u=o({},u,{h:a?1:0}));var c=r(e,"/API_GetGameList.php",n,u);return Promise.resolve(t({url:c})).then(function(e){return m(e,{shouldCastToNumbers:["ID","ConsoleID"]})})}catch(e){return Promise.reject(e)}},exports.getGameRankAndScore=function(o,n){try{var s=r(e,"/API_GetGameRankAndScore.php",o,{g:n.gameId,t:"latest-masters"===n.type?1:0});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldCastToNumbers:["TotalScore"]})})}catch(e){return Promise.reject(e)}},exports.getGameRating=function(o,n){try{var s=r(e,"/API_GetGameRating.php",o,{i:n.gameId});return Promise.resolve(t({url:s})).then(m)}catch(e){return Promise.reject(e)}},exports.getTicketData=function(o,n){void 0===n&&(n={});try{var s=function(e){var r=e.ticketId,t=e.isGettingMostTicketedGames,o=e.userName,n=e.gameId,s=e.isGettingTicketsForUnofficialAchievements,i=e.shouldReturnTicketsList,a=e.achievementId,u={};return void 0!==r?u.i=r:t?(u.f="1",u=p(u,e)):o?u.u=o:n?(u.g=n,s&&(u.f="5"),i&&(u.d="1")):a?u.a=a:u=p(u,e),u}(n),i=r(e,"/API_GetTicketData.php",o,s);return Promise.resolve(t({url:i})).then(function(e){return m(e,{shouldCastToNumbers:["ID","AchievementID","Points","GameID","ReportType","ReportState","OpenTickets"],shouldMapToBooleans:["Hardcore"]})})}catch(e){return Promise.reject(e)}},exports.getTopTenUsers=function(o){try{var n=r(e,"/API_GetTopTenUsers.php",o);return Promise.resolve(t({url:n})).then(function(e){for(var r,t=[],o=s(e);!(r=o()).done;){var n=r.value;t.push({userName:n[1],totalPoints:Number(n[2]),totalRatioPoints:Number(n[3])})}return t})}catch(e){return Promise.reject(e)}},exports.getUserAwards=function(o,n){try{var s=r(e,"/API_GetUserAwards.php",o,{u:n.userName});return Promise.resolve(t({url:s})).then(m)}catch(e){return Promise.reject(e)}},exports.getUserClaims=function(o,n){try{var s=r(e,"/API_GetUserClaims.php",o,{u:n.userName});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldCastToNumbers:["ID","GameID","ClaimType","SetType","Status","Extension","Special","MinutesLeft"]})})}catch(e){return Promise.reject(e)}},exports.getUserCompletedGames=function(o,n){try{var s=r(e,"/API_GetUserCompletedGames.php",o,{u:n.userName});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldCastToNumbers:["GameID","ConsoleID","MaxPossible","NumAwarded","PctWon"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getUserCompletionProgress=function(o,n){try{var s=n.offset,i=n.count,a={u:n.userName};s&&(a.o=s),i&&(a.c=i);var u=r(e,"/API_GetUserCompletionProgress.php",o,a);return Promise.resolve(t({url:u})).then(m)}catch(e){return Promise.reject(e)}},exports.getUserGameRankAndScore=function(o,n){try{var s=r(e,"/API_GetUserGameRankAndScore.php",o,{g:n.gameId,u:n.userName});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldCastToNumbers:["TotalScore","UserRank"]})})}catch(e){return Promise.reject(e)}},exports.getUserPoints=function(o,n){try{var s=r(e,"/API_GetUserPoints.php",o,{u:n.userName});return Promise.resolve(t({url:s})).then(m)}catch(e){return Promise.reject(e)}},exports.getUserProfile=function(o,n){try{var s=r(e,"/API_GetUserProfile.php",o,{u:n.userName});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldCastToNumbers:["TotalPoints","TotalSoftcorePoints","TotalTruePoints","Permissions"],shouldMapToBooleans:["Untracked","UserWallActive"]})})}catch(e){return Promise.reject(e)}},exports.getUserProgress=function(o,n){try{var s=r(e,"/API_GetUserProgress.php",o,{u:n.userName,i:n.gameIds.join(",")});return Promise.resolve(t({url:s})).then(function(e){return m(e,{shouldCastToNumbers:["NumPossibleAchievements","PossibleScore","NumAchieved","ScoreAchieved","NumAchievedHardcore","ScoreAchievedHardcore"]})})}catch(e){return Promise.reject(e)}},exports.getUserRecentAchievements=function(o,n){try{var s=n.recentMinutes,i={u:n.userName};void 0!==s&&(i.m=s);var a=r(e,"/API_GetUserRecentAchievements.php",o,i);return Promise.resolve(t({url:a})).then(function(e){return m(e,{shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getUserRecentlyPlayedGames=function(o,n){try{var s=n.offset,i=n.count,a={u:n.userName};void 0!==s&&(a.o=s),void 0!==i&&(a.c=i);var u=r(e,"/API_GetUserRecentlyPlayedGames.php",o,a);return Promise.resolve(t({url:u})).then(function(e){return m(e,{shouldCastToNumbers:["GameID","ConsoleID","NumPossibleAchievements","PossibleScore","NumAchieved","ScoreAchieved","NumAchievedHardcore","ScoreAchievedHardcore","MyVote"]})})}catch(e){return Promise.reject(e)}},exports.getUserSummary=function(o,n){try{var s=n.recentGamesCount,i=n.recentAchievementsCount,a={u:n.userName};void 0!==s&&(a.g=s),void 0!==i&&(a.a=i);var u=r(e,"/API_GetUserSummary.php",o,a);return Promise.resolve(t({url:u})).then(function(e){return m(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)}},exports.unsafe_call=t;
1
+ var e,r,t="https://retroachievements.org/API",o=function(e,r,t,o){void 0===o&&(o={});for(var n=(e+"/"+r).replaceAll(/([^:]\/)\/+/g,"$1"),s={z:t.userName,y:t.webApiKey},i=0,a=Object.entries(o);i<a.length;i++){var u=a[i],c=u[0],l=u[1];n.includes(":"+c)?n=n.replace(":"+c,String(l)):void 0!==l&&(s[c]=String(l))}return n+"?"+new URLSearchParams(s).toString()},n=null!=(e=null==(r=process.env)?void 0:r.PACKAGE_VERSION)?e:"Unknown",s=function(e){try{var r=e.url,t=new Headers({"User-Agent":"RetroAchievements-api-js/"+n});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 i(){return i=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},i.apply(this,arguments)}function a(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,o=new Array(r);t<r;t++)o[t]=e[t];return o}function u(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 a(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)?a(e,r):void 0}}(e))||r&&e&&"number"==typeof e.length){t&&(e=t);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}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 c,l,m,h,d,v=function e(r,t){void 0===t&&(t={});var o=t.shouldCastToNumbers,n=t.shouldMapToBooleans,s=r;if(Array.isArray(r)){for(var a,c=[],l=u(r);!(a=l()).done;)c.push(e(a.value,t));s=c}else if(!Array.isArray(r)&&r instanceof Object){for(var m={},h=0,d=Object.entries(r);h<d.length;h++){var v,P=d[h],f=P[0],A=P[1],y=A;null!=o&&o.includes(f)&&(y=null===A?null:Number(A)),null!=n&&n.includes(f)&&(y=null===A?null:"1"===String(A)),m=i({},m,((v={})[p(f)]=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.replaceAll("ID","Id")).replaceAll("URL","Url")).replaceAll("rA","ra")).replaceAll("visibleUserawards","visibleUserAwards")},P={completed:"1",dropped:"2",expired:"3"};exports.ClaimSetType=void 0,(c=exports.ClaimSetType||(exports.ClaimSetType={}))[c.NewSet=0]="NewSet",c[c.Revision=1]="Revision",exports.ClaimStatus=void 0,(l=exports.ClaimStatus||(exports.ClaimStatus={}))[l.Active=0]="Active",l[l.Complete=1]="Complete",l[l.Dropped=2]="Dropped",exports.ClaimType=void 0,(m=exports.ClaimType||(exports.ClaimType={}))[m.Primary=0]="Primary",m[m.Collaboration=1]="Collaboration",exports.AchievementDistributionFlags=void 0,(h=exports.AchievementDistributionFlags||(exports.AchievementDistributionFlags={}))[h.CoreAchievements=3]="CoreAchievements",h[h.UnofficialAchievements=5]="UnofficialAchievements",function(e){e.Primary="0",e.Collaboration="1"}(d||(d={}));var f=function(e,r){var t=i({},e);return void 0!==r.count&&(t.c=r.count),void 0!==r.offset&&(t.o=r.offset),t};exports.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},exports.getAchievementCount=function(e,r){try{var n=o(t,"/API_GetAchievementCount.php",e,{i:r.gameId});return Promise.resolve(s({url:n})).then(v)}catch(e){return Promise.reject(e)}},exports.getAchievementDistribution=function(e,r){try{var n=r.flags,i=r.hardcore,a={i:r.gameId};void 0!==n&&(a.f=n),void 0!==i&&(a.h=!0===i?1:0);var u=o(t,"/API_GetAchievementDistribution.php",e,a);return Promise.resolve(s({url:u}))}catch(e){return Promise.reject(e)}},exports.getAchievementOfTheWeek=function(e){try{var r=o(t,"/API_GetAchievementOfTheWeek.php",e);return Promise.resolve(s({url:r})).then(function(e){return v(e,{shouldCastToNumbers:["ID","Points","TrueRatio","TotalPlayers","RAPoints","UnlocksCount"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getAchievementUnlocks=function(e,r){try{var n=r.offset,i=r.count,a={a:r.achievementId};n&&(a.o=n),i&&(a.c=i);var u=o(t,"/API_GetAchievementUnlocks.php",e,a);return Promise.resolve(s({url:u})).then(function(e){return v(e,{shouldCastToNumbers:["ID","Points","TrueRatio","RAPoints"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getAchievementsEarnedBetween=function(e,r){try{var n=r.toDate,i=o(t,"/API_GetAchievementsEarnedBetween.php",e,{u:r.userName,f:(r.fromDate.getTime()/1e3).toFixed(0),t:(n.getTime()/1e3).toFixed(0)});return Promise.resolve(s({url:i})).then(function(e){return v(e,{shouldCastToNumbers:["AchievementID","Points","GameID"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getAchievementsEarnedOnDay=function(e,r){try{var n=r.onDate,i=o(t,"/API_GetAchievementsEarnedOnDay.php",e,{u:r.userName,d:n.getFullYear()+"-"+(n.getMonth()+1)+"-"+n.getDate()});return Promise.resolve(s({url:i})).then(function(e){return v(e,{shouldCastToNumbers:["AchievementID","Points","GameID"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getActiveClaims=function(e){try{var r=o(t,"/API_GetActiveClaims.php",e);return Promise.resolve(s({url:r})).then(function(e){return v(e,{shouldMapToBooleans:["UserIsJrDev"]})})}catch(e){return Promise.reject(e)}},exports.getClaims=function(e,r){try{var n=o(t,"/API_GetClaims.php",e,{k:P[r.claimKind]});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldMapToBooleans:["UserIsJrDev"]})})}catch(e){return Promise.reject(e)}},exports.getConsoleIds=function(e){try{var r=o(t,"/API_GetConsoleIDs.php",e);return Promise.resolve(s({url:r})).then(function(e){return v(e,{shouldCastToNumbers:["ID"]})})}catch(e){return Promise.reject(e)}},exports.getGame=function(e,r){try{var n=o(t,"/API_GetGame.php",e,{i:r.gameId});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldCastToNumbers:["ID","ForumTopicID","ConsoleID","Flags"]})})}catch(e){return Promise.reject(e)}},exports.getGameExtended=function(e,r){try{var n={i:r.gameId};r.isRequestingUnofficialAchievements&&(n.f=5);var i=o(t,"/API_GetGameExtended.php",e,n);return Promise.resolve(s({url:i})).then(function(e){return v(e,{shouldCastToNumbers:["ID","NumAwarded","NumAwardedHardcore","Points","TrueRatio","DisplayOrder","NumDistinctPlayersCasual","NumDistinctPlayersHardcore"]})})}catch(e){return Promise.reject(e)}},exports.getGameInfoAndUserProgress=function(e,r){try{var n=o(t,"/API_GetGameInfoAndUserProgress.php",e,{g:r.gameId,u:r.userName});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldCastToNumbers:["ID","NumAwarded","NumAwardedHardcore","Points","TrueRatio","DisplayOrder","NumDistinctPlayersCasual","NumDistinctPlayersHardcore","Released"]})})}catch(e){return Promise.reject(e)}},exports.getGameList=function(e,r){try{var n=r.shouldOnlyRetrieveGamesWithAchievements,a=r.shouldRetrieveGameHashes,u={i:r.consoleId};void 0!==n&&(u=i({},u,{f:n?1:0})),a&&(u=i({},u,{h:a?1:0}));var c=o(t,"/API_GetGameList.php",e,u);return Promise.resolve(s({url:c})).then(function(e){return v(e,{shouldCastToNumbers:["ID","ConsoleID"]})})}catch(e){return Promise.reject(e)}},exports.getGameRankAndScore=function(e,r){try{var n=o(t,"/API_GetGameRankAndScore.php",e,{g:r.gameId,t:"latest-masters"===r.type?1:0});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldCastToNumbers:["TotalScore"]})})}catch(e){return Promise.reject(e)}},exports.getGameRating=function(e,r){try{var n=o(t,"/API_GetGameRating.php",e,{i:r.gameId});return Promise.resolve(s({url:n})).then(v)}catch(e){return Promise.reject(e)}},exports.getTicketData=function(e,r){void 0===r&&(r={});try{var n=function(e){var r=e.ticketId,t=e.isGettingMostTicketedGames,o=e.userName,n=e.gameId,s=e.isGettingTicketsForUnofficialAchievements,i=e.shouldReturnTicketsList,a=e.achievementId,u={};return void 0!==r?u.i=r:t?(u.f="1",u=f(u,e)):o?u.u=o:n?(u.g=n,s&&(u.f="5"),i&&(u.d="1")):a?u.a=a:u=f(u,e),u}(r),i=o(t,"/API_GetTicketData.php",e,n);return Promise.resolve(s({url:i})).then(function(e){return v(e,{shouldCastToNumbers:["ID","AchievementID","Points","GameID","ReportType","ReportState","OpenTickets"],shouldMapToBooleans:["Hardcore"]})})}catch(e){return Promise.reject(e)}},exports.getTopTenUsers=function(e){try{var r=o(t,"/API_GetTopTenUsers.php",e);return Promise.resolve(s({url:r})).then(function(e){for(var r,t=[],o=u(e);!(r=o()).done;){var n=r.value;t.push({userName:n[1],totalPoints:Number(n[2]),totalRatioPoints:Number(n[3])})}return t})}catch(e){return Promise.reject(e)}},exports.getUserAwards=function(e,r){try{var n=o(t,"/API_GetUserAwards.php",e,{u:r.userName});return Promise.resolve(s({url:n})).then(v)}catch(e){return Promise.reject(e)}},exports.getUserClaims=function(e,r){try{var n=o(t,"/API_GetUserClaims.php",e,{u:r.userName});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldCastToNumbers:["ID","GameID","ClaimType","SetType","Status","Extension","Special","MinutesLeft"]})})}catch(e){return Promise.reject(e)}},exports.getUserCompletedGames=function(e,r){try{var n=o(t,"/API_GetUserCompletedGames.php",e,{u:r.userName});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldCastToNumbers:["GameID","ConsoleID","MaxPossible","NumAwarded","PctWon"],shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getUserCompletionProgress=function(e,r){try{var n=r.offset,i=r.count,a={u:r.userName};n&&(a.o=n),i&&(a.c=i);var u=o(t,"/API_GetUserCompletionProgress.php",e,a);return Promise.resolve(s({url:u})).then(v)}catch(e){return Promise.reject(e)}},exports.getUserGameRankAndScore=function(e,r){try{var n=o(t,"/API_GetUserGameRankAndScore.php",e,{g:r.gameId,u:r.userName});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldCastToNumbers:["TotalScore","UserRank"]})})}catch(e){return Promise.reject(e)}},exports.getUserPoints=function(e,r){try{var n=o(t,"/API_GetUserPoints.php",e,{u:r.userName});return Promise.resolve(s({url:n})).then(v)}catch(e){return Promise.reject(e)}},exports.getUserProfile=function(e,r){try{var n=o(t,"/API_GetUserProfile.php",e,{u:r.userName});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldCastToNumbers:["TotalPoints","TotalSoftcorePoints","TotalTruePoints","Permissions"],shouldMapToBooleans:["Untracked","UserWallActive"]})})}catch(e){return Promise.reject(e)}},exports.getUserProgress=function(e,r){try{var n=o(t,"/API_GetUserProgress.php",e,{u:r.userName,i:r.gameIds.join(",")});return Promise.resolve(s({url:n})).then(function(e){return v(e,{shouldCastToNumbers:["NumPossibleAchievements","PossibleScore","NumAchieved","ScoreAchieved","NumAchievedHardcore","ScoreAchievedHardcore"]})})}catch(e){return Promise.reject(e)}},exports.getUserRecentAchievements=function(e,r){try{var n=r.recentMinutes,i={u:r.userName};void 0!==n&&(i.m=n);var a=o(t,"/API_GetUserRecentAchievements.php",e,i);return Promise.resolve(s({url:a})).then(function(e){return v(e,{shouldMapToBooleans:["HardcoreMode"]})})}catch(e){return Promise.reject(e)}},exports.getUserRecentlyPlayedGames=function(e,r){try{var n=r.offset,i=r.count,a={u:r.userName};void 0!==n&&(a.o=n),void 0!==i&&(a.c=i);var u=o(t,"/API_GetUserRecentlyPlayedGames.php",e,a);return Promise.resolve(s({url:u})).then(function(e){return v(e,{shouldCastToNumbers:["GameID","ConsoleID","NumPossibleAchievements","PossibleScore","NumAchieved","ScoreAchieved","NumAchievedHardcore","ScoreAchievedHardcore","MyVote"]})})}catch(e){return Promise.reject(e)}},exports.getUserSummary=function(e,r){try{var n=r.recentGamesCount,i=r.recentAchievementsCount,a={u:r.userName};void 0!==n&&(a.g=n),void 0!==i&&(a.a=i);var u=o(t,"/API_GetUserSummary.php",e,a);return Promise.resolve(s({url:u})).then(function(e){return v(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)}},exports.unsafe_call=s;
2
2
  //# sourceMappingURL=api.cjs.map