diff --git a/html/src/vr.js b/html/src/vr.js
index bec952a7..e0694dd7 100644
--- a/html/src/vr.js
+++ b/html/src/vr.js
@@ -11,9 +11,11 @@ import locale from 'element-ui/lib/locale/lang/en';
import sharedRepository from './repository/shared.js';
import configRepository from './repository/config.js';
+import webApiService from './service/webapi.js';
(async function () {
await CefSharp.BindObjectAsync(
+ 'WebApi',
'VRCX',
'SharedVariable',
'SQLite'
@@ -151,30 +153,25 @@ import configRepository from './repository/config.js';
API.pendingGetRequests = new Map();
API.call = function (endpoint, options) {
- var resource = `https://api.vrchat.cloud/api/1/${endpoint}`;
var init = {
+ url: `https://api.vrchat.cloud/api/1/${endpoint}`,
method: 'GET',
- mode: 'cors',
- credentials: 'include',
- cache: 'no-cache',
- redirect: 'follow',
- referrerPolicy: 'no-referrer',
...options
};
var { params } = init;
var isGetRequest = init.method === 'GET';
- if (isGetRequest) {
+ if (isGetRequest === true) {
// transform body to url
if (params === Object(params)) {
- var url = new URL(resource);
+ var url = new URL(init.url);
var { searchParams } = url;
for (var key in params) {
searchParams.set(key, params[key]);
}
- resource = url.toString();
+ init.url = url.toString();
}
// merge requests
- var req = this.pendingGetRequests.get(resource);
+ var req = this.pendingGetRequests.get(init.url);
if (req !== undefined) {
return req;
}
@@ -187,45 +184,50 @@ import configRepository from './repository/config.js';
? JSON.stringify(params)
: '{}';
}
- var req = fetch(resource, init).catch((err) => {
+ var req = webApiService.execute(init).catch((err) => {
this.$throw(0, err);
- }).then((res) => res.json().catch(() => {
- if (res.ok) {
+ }).then((response) => {
+ try {
+ response.data = JSON.parse(response.data);
+ return response;
+ } catch (e) {
+ }
+ if (response.status === 200) {
this.$throw(0, 'Invalid JSON response');
}
this.$throw(res.status);
- }).then((json) => {
- if (res.ok) {
- if (json.success === Object(json.success)) {
- new Noty({
- type: 'success',
- text: escapeTag(json.success.message)
- }).show();
+ }).then(({ data, status }) => {
+ if (data === Object(data)) {
+ if (status === 200) {
+ if (data.success === Object(data.success)) {
+ new Noty({
+ type: 'success',
+ text: escapeTag(data.success.message)
+ }).show();
+ }
+ return data;
}
- return json;
- }
- if (json === Object(json)) {
- if (json.error === Object(json.error)) {
+ if (data.error === Object(data.error)) {
this.$throw(
- json.error.status_code || res.status,
- json.error.message,
- json.error.data
+ data.error.status_code || status,
+ data.error.message,
+ data.error.data
);
- } else if (typeof json.error === 'string') {
+ } else if (typeof data.error === 'string') {
this.$throw(
- json.status_code || res.status,
- json.error
+ data.status_code || status,
+ data.error
);
}
}
- this.$throw(res.status, json);
- return json;
- }));
- if (isGetRequest) {
+ this.$throw(status, data);
+ return data;
+ });
+ if (isGetRequest === true) {
req.finally(() => {
- this.pendingGetRequests.delete(resource);
+ this.pendingGetRequests.delete(init.url);
});
- this.pendingGetRequests.set(resource, req);
+ this.pendingGetRequests.set(init.url, req);
}
return req;
};