(function () { var entityID; var codes = {}; var GOOGLE_SCRIPTS_URL = "https://script.google.com/macros/s/AKfycbz9iifQui3XTCqHemf9x1CKZEffx3f7ONdVzb4YK_OtTv7cvw/exec"; // GOOGLE SHEET FUNCTIONS function startFetchCode(onCompleteCallback, onErrorCallback) { var params = ""; var onComplete = onCompleteCallback; var onError = onErrorCallback; sendRequest(GOOGLE_SCRIPTS_URL, params, onComplete, onError); } function sendRequest(url, paramString, onComplete, onError) { var request = new XMLHttpRequest(); var requestURL = paramString ? url + "?" + paramString : url; // print("SENT PARAMS"); // print(requestURL); request.open('GET', requestURL); request.timeout = 10000; request.ontimeout = onError; request.onreadystatechange = function () { // called after load when readyState = 4 if (request.readyState === 4) { if (onComplete) { onComplete(request); } } }; request.send(); } function encodeURLParams(params) { var paramPairs = []; for (var key in params) { paramPairs.push(key + "=" + params[key]); } return paramPairs.join("&"); } function CodeGetter () {}; CodeGetter.prototype = { remotelyCallable: [ "getCode" ], preload: function (id) { entityID = id; }, getRequestCallbacks: function (sessionUUID, username) { var _this = this; var uuid = sessionUUID; var onCompleteCallback = function (request) { print("recieved code ", request.responseText); print("uuid", uuid); // get code var code; try { code = request.responseText; } catch (e) { console.error("Error getting code"); } // set username to the code codes[username] = code; _this.returnCode(uuid, code); } var onErrorCallback = function () { _this.returnError(uuid); } return [ onCompleteCallback, onErrorCallback ]; }, // params [ sessionUUID, username ] getCode: function (id, params) { var sessionUUID = params[0]; var username = params[1]; if (codes[username]) { this.returnCode(codes[username]); } else { var callbacks = this.getRequestCallbacks(sessionUUID, username); var onComplete = callbacks[0]; var onError = callbacks[1]; startFetchCode(onComplete, onError); } }, returnError: function (uuid) { print("error", uuid); Entities.callEntityClientMethod( uuid, entityID, "displayError" ); }, returnCode: function (uuid, code) { print("returning code", uuid, code, entityID); Entities.callEntityClientMethod( uuid, entityID, "displayCode", [code] ); } } return new CodeGetter(); });