diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js index db7d65527dac966338fda587d2866b513c431eda..16525a26bfd0c884d00009130ef415671d47a7f1 100644 --- a/javascript/src/iframe/viamapi-iframe.js +++ b/javascript/src/iframe/viamapi-iframe.js @@ -246,43 +246,34 @@ const handleIdentityLogin = (identity, uuid, token) => { setKeyForUUID(uuid, publicKey); }; -function executeRestfulFunction(type, that, fn, config, ...args) { +async function executeRestfulFunction(type, that, fn, config, ...args) { const { currentlyAuthenticatedIdentity, viamApi, currentlyLoadedIdentity } = window; + const response = await fn.apply(that, [config, ...args]); - return new Penpal.Promise(executeResult => { - fn.apply(that, [config, ...args]).then(async (response) => { - const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity; + const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity; + const { code, status } = response.data; - const { code, status } = response.data; + const deviceRevoked = type === "private" && code === "401" && status === STATUS_DEVICE_REVOKED; + if (deviceRevoked) { + destroyIdentity(); - // Destroy local storage in case device was revoked - if (type === "private" && code === "401" && status === STATUS_DEVICE_REVOKED) { - destroyIdentity(); + const event = createEvent("", "DeviceRevoked"); + iframeParent.onEvent(event); - const event = createEvent("", "DeviceRevoked"); - iframeParent.onEvent(event); + return response.data; + } - return executeResult(response.data); - } + const badSession = type === "private" && identity && code === "400" && status === "Bad session"; + if (!badSession) return response.data; - if (type === "private" && identity && code === "400" && status === "Bad session") { - viamApi.identityLogin(null, "previousaddeddevice") - .then((response) => { - if (response.data.code === "200") { - const uuid = response.data.data["Uuid"]; - const token = response.data.data["Session"]; - handleIdentityLogin(identity, uuid, token); - fn.apply(that, [config, ...args]).then(({data}) => executeResult(data)); - } else { - executeResult(response.data); - } - }) - .catch(console.warn); - } else { - executeResult(response.data); - } - }); - }); + const loginResponse = await viamApi.identityLogin("previousaddeddevice"); + if (loginResponse.data.code !== "200") return loginResponse.data; + + const uuid = loginResponse.data.data["Uuid"]; + const token = loginResponse.data.data["Session"]; + handleIdentityLogin(identity, uuid, token); + const { data } = await fn.apply(that, [config, ...args]); + return data; } window.executeRestfulFunction = executeRestfulFunction; @@ -1228,17 +1219,17 @@ connection.promise.then(parent => { } } - var anynomousDeviceKeyEventsProcessing = false; - var maxDeviceKeyAnonymousEventTime = 0; + let anynomousDeviceKeyEventsProcessing = false; + let maxDeviceKeyAnonymousEventTime = 0; - var eventsDeviceEventsProcessing = false; - var maxDeviceKeyEventTime = 0; + let eventsDeviceEventsProcessing = false; + let maxDeviceKeyEventTime = 0; - var eventsEntityEventsProcessing = false; - var maxEntityEventTime = 0; + let eventsEntityEventsProcessing = false; + let maxEntityEventTime = 0; - var identityLoadedEvent = false; - var identityAuthenticatedEvent = false; + let identityLoadedEvent = false; + let identityAuthenticatedEvent = false; setInterval(async function () { if (window.currentlyAuthenticatedIdentity) { @@ -1297,15 +1288,16 @@ connection.promise.then(parent => { } }, 50); - setInterval(function() { + setInterval(async () => { if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) { anynomousDeviceKeyEventsProcessing = true; - executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey").then(async executeResult => { + try { + const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey"); if(executeResult.code === "200") { - var eventsLen = executeResult.data.length; + const eventsLen = executeResult.data.length; let changedMaxDeviceKeyAnonymousEventTime = false; - for (var i = 0; i < eventsLen; i++) { - var event = executeResult.data[i]; + for (let i = 0; i < eventsLen; i++) { + const event = executeResult.data[i]; switch (event.type) { case "Authenticated" : { const uuid = event.payloads[0]; @@ -1313,25 +1305,23 @@ connection.promise.then(parent => { handleIdentityLogin(window.currentlyLoadedIdentity, uuid, token); const identityToStore = window.currentlyAuthenticatedIdentity; event.payloads = [{fromQRCode: true}]; - setIdentityInLocalStorage(identityToStore).then(() => { - getProfileData(identityToStore).then(() => { - parent.onEvent(event); - }); - }); + await setIdentityInLocalStorage(identityToStore); + await getProfileData(identityToStore); + parent.onEvent(event); break; } case "QRCodeUpdated" : { - var actionID = event["actionID"]; - var QrCode = event["payloads"][1]; + const actionID = event["actionID"]; + const QrCode = event["payloads"][1]; - var eventCopy = JSON.parse(JSON.stringify(event)); + const eventCopy = JSON.parse(JSON.stringify(event)); QRCode.toDataURL(actionID + "," + QrCode, function (err, url) { eventCopy["payloads"].push(url); - parent.onEvent(eventCopy) + parent.onEvent(eventCopy); }); - break + break; } case "KeyDeleted" : { @@ -1346,106 +1336,100 @@ connection.promise.then(parent => { window.lastTimeGetProfile = 0; destroyIdentityFromLocalStorage(authenticationPublicKey); - break + break; } default : { - parent.onEvent(event) + parent.onEvent(event); } } changedMaxDeviceKeyAnonymousEventTime = true; - maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp) + maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp); } if(changedMaxDeviceKeyAnonymousEventTime) { - executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession, - null, "devicekey", maxDeviceKeyAnonymousEventTime.toString()).then(() => { - anynomousDeviceKeyEventsProcessing = false; - }); - } else { - anynomousDeviceKeyEventsProcessing = false; + await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession, + null, "devicekey", maxDeviceKeyAnonymousEventTime.toString()); } - } else { - anynomousDeviceKeyEventsProcessing = false; } - }); + } catch (e) { + console.warn(e); + } + anynomousDeviceKeyEventsProcessing = false; } if (window.currentlyAuthenticatedIdentity != null && eventsDeviceEventsProcessing === false) { eventsDeviceEventsProcessing = true; - executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey").then(executeResult => { - if(executeResult.code === "200") { - var eventsLen = executeResult.data.length; + try { + const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey"); + if (executeResult.code === "200") { + const eventsLen = executeResult.data.length; const changedMaxDeviceKeyEventTime = false; - for(var i = 0; i < eventsLen; i++) { - var event = executeResult.data[i]; - if(event.type === "QRCodeUpdated") { - var actionID = event["actionID"]; - var QrCode = event["payloads"][1]; + for (let i = 0; i < eventsLen; i++) { + const event = executeResult.data[i]; + if (event.type === "QRCodeUpdated") { + const actionID = event["actionID"]; + const QrCode = event["payloads"][1]; - var eventCopy = JSON.parse(JSON.stringify(event)); + const eventCopy = JSON.parse(JSON.stringify(event)); QRCode.toDataURL(actionID + "," + QrCode, function (err, url) { eventCopy["payloads"].push(url); - parent.onEvent(eventCopy) - }) + parent.onEvent(eventCopy); + }); } else { - parent.onEvent(event) + parent.onEvent(event); } - maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp) + maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp); } if(changedMaxDeviceKeyEventTime) { - executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey", - maxDeviceKeyEventTime.toString()).then(executeResult1 => { - eventsDeviceEventsProcessing = false - }) - } else { - eventsDeviceEventsProcessing = false + await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey", + maxDeviceKeyEventTime.toString()); } - } else { - eventsDeviceEventsProcessing = false } - }); + } catch (e) { + console.warn(e); + } + eventsDeviceEventsProcessing = false; } if (window.currentlyAuthenticatedIdentity != null && eventsEntityEventsProcessing === false) { eventsEntityEventsProcessing = true; - executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity").then(executeResult => { - if(executeResult.code === "200") { - var eventsLen = executeResult.data.length; + try { + const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity"); + + if (executeResult.code === "200") { + const eventsLen = executeResult.data.length; let changedMaxEntityEventTime = false; - for(var i = 0; i < eventsLen; i++) { - event = executeResult.data[i]; - if(event.type === "QRCodeUpdated") { - var actionID = event["actionID"]; - var QrCode = event["payloads"][1]; + for (let i = 0; i < eventsLen; i++) { + const event = executeResult.data[i]; + if (event.type === "QRCodeUpdated") { + const actionID = event["actionID"]; + const QrCode = event["payloads"][1]; - var eventCopy = JSON.parse(JSON.stringify(event)); + const eventCopy = JSON.parse(JSON.stringify(event)); QRCode.toDataURL(actionID + "," + QrCode, function (err, url) { eventCopy["payloads"].push(url); - parent.onEvent(eventCopy) + parent.onEvent(eventCopy); }); - continue + continue; } parent.onEvent(event); changedMaxEntityEventTime = true; - maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp) + maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp); } if(changedMaxEntityEventTime) { - executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity", - maxEntityEventTime.toString()).then(executeResult1 => { - eventsEntityEventsProcessing = false - }) - } else { - eventsEntityEventsProcessing = false + await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity", + maxEntityEventTime.toString()); } - } else { - eventsEntityEventsProcessing = false } - }); + } catch (e) { + console.warn(e); + } + eventsEntityEventsProcessing = false; } }, 1000); });