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;
 | |
|     }
 | |
| }
 |