ha-frontend/src/util/hass-call-api.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>