function requestBOS(resource, store, forceUpdate, config, ) {
let url = `https://api.negawatt.co/v1/${resource}`
forceUpdate = forceUpdate == true ? forceUpdate : false;
function getBosEmail() {
try { return Secret("BOS_EMAIL"); }
catch { return authInputs[0][0]; }
}
function getBosPassword() {
try { return Secret("BOS_PASSWORD"); }
catch { return authInputs[1][0]; }
}
function getBosUserId() {
try { return Secret("BOS_USER_ID"); }
catch { return authInputs[2][0]; }
}
async function requestWithStore (token, body) {
let method = (token && (body === undefined || body == {})) ? "GET" : "POST";
if (store) {
let key;
if (config) {
key = JSON.stringify([resource, config])
}
else {
key = resource
}
let r = await store.getItem(key);
if (!r || forceUpdate) {
r = await request(url, method, body, token);
store.setItem(key, r);
}
return r;
}
else {
return await request(url, method, body, token);
}
}
const rs = requestWithStore;
const getToken = async () => (await requestBOS("auth/token", store, forceUpdate, config)).accessToken;
let methods = {
"users/login":
() => rs(null, { email: getBosEmail(), password: getBosPassword() } ),
"auth/token":
async() => await rs(null, {
..._.omit(await requestBOS("users/login", store, forceUpdate), ["accessToken"]),
user: getBosUserId(),
scope: config || {}
} ),
"users/me/groups":
async() => await rs(await getToken() ),
"users/me":
async() => await rs(await getToken() ),
"asset/sites":
async() => await rs(await getToken() ),
"asset/buildings":
async() => await rs(await getToken() ),
"statistics/buildings":
async() => await rs(await getToken(), config),
};
if ( resource.search(/asset\/sites\/(.*)\/buildings\/(.*)/) == 0 && "group" in config) {
let buildingId = resource.replace(/asset\/sites\/(.*)\/buildings\/(.*)/, `$1,$2`).split(',')[1];
config["building"] = buildingId
methods[resource] =
async() => await rs(await getToken() );
console.log(resource)
getToken().then(console.log);
}
try {
return methods[resource]();
}
catch {
forceUpdate = true;
return methods[resource]();
}
}