add wrapper around multiple rest sessions

This commit is contained in:
Bruno Windels 2018-09-11 16:18:27 +02:00
parent 48d95c228a
commit 827e6365bb
4 changed files with 111 additions and 35 deletions

View file

@ -23,38 +23,12 @@ module.exports = class RestSession {
this.credentials = credentials;
}
_post(csApiPath, body) {
return this._request("POST", csApiPath, body);
userId() {
return this.credentials.userId;
}
_put(csApiPath, body) {
return this._request("PUT", csApiPath, body);
}
async _request(method, csApiPath, body) {
try {
const responseBody = await request({
url: `${this.credentials.hsUrl}/_matrix/client/r0${csApiPath}`,
method,
headers: {
"Authorization": `Bearer ${this.credentials.accessToken}`
},
json: true,
body
});
return responseBody;
} catch(err) {
const responseBody = err.response.body;
if (responseBody.errcode === 'M_CONSENT_NOT_GIVEN') {
await approveConsent(responseBody.consent_uri);
return this._request(method, csApiPath, body);
} else if(responseBody && responseBody.error) {
throw new Error(`${method} ${csApiPath}: ${responseBody.error}`);
} else {
throw new Error(`${method} ${csApiPath}: ${err.response.statusCode}`);
}
}
userName() {
return this.credentials.userId.split(":")[0].substr(1);
}
async setDisplayName(displayName) {
@ -90,4 +64,38 @@ module.exports = class RestSession {
const {room_id} = await this._post(`/createRoom`, body);
return new RestRoom(this, room_id);
}
_post(csApiPath, body) {
return this._request("POST", csApiPath, body);
}
_put(csApiPath, body) {
return this._request("PUT", csApiPath, body);
}
async _request(method, csApiPath, body) {
try {
const responseBody = await request({
url: `${this.credentials.hsUrl}/_matrix/client/r0${csApiPath}`,
method,
headers: {
"Authorization": `Bearer ${this.credentials.accessToken}`
},
json: true,
body
});
return responseBody;
} catch(err) {
const responseBody = err.response.body;
if (responseBody.errcode === 'M_CONSENT_NOT_GIVEN') {
await approveConsent(responseBody.consent_uri);
return this._request(method, csApiPath, body);
} else if(responseBody && responseBody.error) {
throw new Error(`${method} ${csApiPath}: ${responseBody.error}`);
} else {
throw new Error(`${method} ${csApiPath}: ${err.response.statusCode}`);
}
}
}
}