lol-js
Version:
Node.js bindings for the Riot API, with caching and rate limiting
173 lines (164 loc) • 6.41 kB
JavaScript
// Generated by CoffeeScript 1.9.2
(function() {
var api, assert, ld, lolStaticDataApi, pb, summonerApi;
assert = require('assert');
ld = require('lodash');
pb = require('promise-breaker');
summonerApi = require('./summoner');
lolStaticDataApi = require('./lolStaticData');
api = exports.api = {
fullname: "match-v2.2",
name: "match",
version: "v2.2"
};
exports.methods = {
getMatch: pb["break"](function(region, matchId, options) {
var cacheParams, requestOptions, requestParams;
if (options == null) {
options = {};
}
options = ld.defaults({}, options, {
includeTimeline: false
});
requestParams = {
caller: "getMatch",
region: region,
url: (this._makeUrl(region, api)) + "/" + matchId,
queryParams: {
includeTimeline: options.includeTimeline
}
};
cacheParams = {
key: api.fullname + "-match-" + region + "-" + matchId + "-" + options.includeTimeline,
region: region,
api: api,
ttl: this.cacheTTL.long,
objectType: 'match',
params: {
matchId: matchId,
includeTimeline: options.includeTimeline
}
};
requestOptions = {};
if (options.players != null) {
requestOptions.preCache = (function(_this) {
return function(match) {
if (match == null) {
return match;
}
return _this.populateMatch(region, match, options.players, options).then(function() {
return match;
});
};
})(this);
}
return this._riotRequestWithCache(requestParams, cacheParams, requestOptions);
}),
populateMatch: pb["break"](function(region, match, players, options) {
if (options == null) {
options = {};
}
assert(ld.isArray(players), "'players' must be an array!");
if (ld.every(match.participantIdentities, "player")) {
return this.Promise.resolve(0);
}
return this._loadPlayers(region, players, options).then(function(playerData) {
var i, len, participant, participantIdentitiesById, participantIdentity, player, populated, ref;
populated = 0;
participantIdentitiesById = ld.indexBy(match.participantIdentities, "participantId");
ref = match.participants;
for (i = 0, len = ref.length; i < len; i++) {
participant = ref[i];
participantIdentity = participantIdentitiesById[participant.participantId];
if (!participantIdentity.player) {
player = ld.find(playerData, function(p) {
return p.championId === participant.championId && p.teamId === participant.teamId;
});
if (player != null) {
populated++;
participantIdentity.player = {
profileIcon: player.summoner.profileIconId,
matchHistoryUri: null,
summonerName: player.summoner.name,
summonerId: player.summoner.id
};
}
}
}
return populated;
});
}),
_loadPlayers: function(region, players, options) {
var client;
if (options == null) {
options = {};
}
client = this;
return this.Promise.resolve().then((function(_this) {
return function() {
var summonerIds, summonerNames, summonersById, summonersByIdPromise, summonersByNamePromise;
players.forEach(function(player) {
if ((player.summonerId == null) && (player.summonerName == null)) {
throw new Error("player record has no summonerId and no summonerName");
}
});
assert.equal(summonerApi.api.version, "v1.4", "Can't load players - summoner API version has changed.");
assert.equal(lolStaticDataApi.api.version, "v1.2", "Can't load players - lol-static-data API version has changed.");
summonerIds = ld(players).filter('summonerId').map('summonerId').value();
summonersByIdPromise = summonerIds.length > 0 ? _this.getSummonersById(region, summonerIds) : _this.Promise.resolve({});
summonerNames = ld(players).reject('summonerId').map("summonerName").value();
summonersByNamePromise = summonerNames.length > 0 ? _this.getSummonersByName(region, summonerNames) : _this.Promise.resolve({});
summonersById = null;
return summonersByIdPromise.then(function(result) {
summonersById = result;
return summonersByNamePromise;
}).then(function(summonersByName) {
return _this.Promise.all(players.map(function(player) {
var summoner;
summoner = null;
return _this.Promise.resolve().then(function() {
summoner = player.summonerId != null ? summonersById[player.summonerId] : summonersByName[player.summonerName];
return (player.championId != null ? {
id: player.championId
} : _this.getChampionByName(region, player.championKey, options));
}).then(function(champion) {
var ref;
if ((summoner != null) && (champion != null)) {
return {
summoner: summoner,
championId: champion.id,
teamId: (ref = player.teamId) != null ? ref : _this.teamNameToId(player.team)
};
} else {
return null;
}
});
})).then(function(answer) {
return answer.filter(function(x) {
return x !== null;
});
});
});
};
})(this));
},
getTeamIdForSummonerId: function(match, summonerId) {
var answer, participant, participantId, participantIdentity;
participantIdentity = ld.find(match.participantIdentities, {
player: {
summonerId: summonerId
}
});
if (participantIdentity == null) {
answer = null;
} else {
participantId = participantIdentity.participantId;
participant = ld.find(match.participants, {
participantId: participantId
});
answer = participant.teamId;
}
return answer;
}
};
}).call(this);