105 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
import 'whatwg-fetch';
 | 
						|
 | 
						|
let fetchFunction = fetch;
 | 
						|
 | 
						|
function checkStatus(response) {
 | 
						|
    if (!response.ok) {
 | 
						|
        return response.text().then((text) => {
 | 
						|
            throw new Error(text);
 | 
						|
        });
 | 
						|
    }
 | 
						|
    return response;
 | 
						|
}
 | 
						|
 | 
						|
function parseJson(response) {
 | 
						|
    return response.json();
 | 
						|
}
 | 
						|
 | 
						|
function encodeQueryParams(params) {
 | 
						|
    return '?' + Object.keys(params).map((k) => {
 | 
						|
        return k + '=' + encodeURIComponent(params[k]);
 | 
						|
    }).join('&');
 | 
						|
}
 | 
						|
 | 
						|
const request = (url, opts) => {
 | 
						|
    if (opts && opts.qs) {
 | 
						|
        url += encodeQueryParams(opts.qs);
 | 
						|
        delete opts.qs;
 | 
						|
    }
 | 
						|
    if (opts && opts.body) {
 | 
						|
        if (!opts.headers) {
 | 
						|
            opts.headers = {};
 | 
						|
        }
 | 
						|
        opts.body = JSON.stringify(opts.body);
 | 
						|
        opts.headers['Content-Type'] = 'application/json';
 | 
						|
    }
 | 
						|
    return fetchFunction(url, opts)
 | 
						|
        .then(checkStatus)
 | 
						|
        .then(parseJson);
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
export default class RtsClient {
 | 
						|
    constructor(url) {
 | 
						|
        this._url = url;
 | 
						|
    }
 | 
						|
 | 
						|
    getTeamsConfig() {
 | 
						|
        return request(this._url + '/teams');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Track a referral with the Riot Team Server. This should be called once a referred
 | 
						|
     * user has been successfully registered.
 | 
						|
     * @param {string} referrer the user ID of one who referred the user to Riot.
 | 
						|
     * @param {string} sid the sign-up identity server session ID .
 | 
						|
     * @param {string} clientSecret the sign-up client secret.
 | 
						|
     * @returns {Promise} a promise that resolves to { team_token: 'sometoken' } upon
 | 
						|
     * success.
 | 
						|
     */
 | 
						|
    trackReferral(referrer, sid, clientSecret) {
 | 
						|
        return request(this._url + '/register',
 | 
						|
            {
 | 
						|
                body: {
 | 
						|
                    referrer: referrer,
 | 
						|
                    session_id: sid,
 | 
						|
                    client_secret: clientSecret,
 | 
						|
                },
 | 
						|
                method: 'POST',
 | 
						|
            },
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    getTeam(teamToken) {
 | 
						|
        return request(this._url + '/teamConfiguration',
 | 
						|
            {
 | 
						|
                qs: {
 | 
						|
                    team_token: teamToken,
 | 
						|
                },
 | 
						|
            },
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Signal to the RTS that a login has occurred and that a user requires their team's
 | 
						|
     * token.
 | 
						|
     * @param {string} userId the user ID of the user who is a member of a team.
 | 
						|
     * @returns {Promise} a promise that resolves to { team_token: 'sometoken' } upon
 | 
						|
     * success.
 | 
						|
     */
 | 
						|
    login(userId) {
 | 
						|
        return request(this._url + '/login',
 | 
						|
            {
 | 
						|
                qs: {
 | 
						|
                    user_id: userId,
 | 
						|
                },
 | 
						|
            },
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    // allow fetch to be replaced, for testing.
 | 
						|
    static setFetch(fn) {
 | 
						|
        fetchFunction = fn;
 | 
						|
    }
 | 
						|
}
 |