82 lines
1.9 KiB
HTML
82 lines
1.9 KiB
HTML
<script>
|
|
window.hassCallApi = function (host, auth, method, path, parameters) {
|
|
var url = host + '/api/' + path;
|
|
|
|
if (window.HASS_DEMO) {
|
|
var component = path.split('/', 1)[0];
|
|
var data;
|
|
switch (component) {
|
|
case 'bootstrap':
|
|
data = window.hassDemoData.bootstrap;
|
|
break;
|
|
case 'logbook':
|
|
data = window.hassDemoData.logbook;
|
|
break;
|
|
case 'history':
|
|
data = window.hassDemoData.stateHistory;
|
|
break;
|
|
default:
|
|
data = false;
|
|
}
|
|
return new Promise(function (resolve, reject) {
|
|
if (data) {
|
|
resolve(data);
|
|
} else {
|
|
reject('Request not allowed in demo mode.');
|
|
}
|
|
});
|
|
}
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
var req = new XMLHttpRequest();
|
|
req.open(method, url, true);
|
|
|
|
if (auth.authToken) {
|
|
req.setRequestHeader('X-HA-access', auth.authToken);
|
|
}
|
|
|
|
req.onload = function () {
|
|
var body = req.responseText;
|
|
|
|
if (req.getResponseHeader('content-type') === 'application/json') {
|
|
try {
|
|
body = JSON.parse(req.responseText);
|
|
} catch (err) {
|
|
reject({
|
|
error: 'Unable to parse JSON response',
|
|
status_code: req.status,
|
|
body: body,
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (req.status > 199 && req.status < 300) {
|
|
resolve(body);
|
|
} else {
|
|
reject({
|
|
error: 'Response error: ' + req.status,
|
|
status_code: req.status,
|
|
body: body
|
|
});
|
|
}
|
|
};
|
|
|
|
req.onerror = function () {
|
|
reject({
|
|
error: 'Request error',
|
|
status_code: req.status,
|
|
body: req.responseText,
|
|
});
|
|
};
|
|
|
|
if (parameters) {
|
|
req.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
|
|
req.send(JSON.stringify(parameters));
|
|
} else {
|
|
req.send();
|
|
}
|
|
});
|
|
};
|
|
</script>
|