{"version":3,"names":["AuthGeneric","Auth","focalStorage","LivelyAuthURL","constructor","name","onAuthenticatedCallbacks","logout","cb","setItem","tokenName","then","parseAuthInfoFromUrl","data","authInfo","JSON","parse","replace","key","value","decodeURIComponent","notifyMe","title","text","Notification","permission","requestPermission","notification","icon","notificationIconURL","body","onclick","onAuthenticated","windowUuid","state","token","tokenFromAuthInfo","Error","stringify","popup","url","width","height","screenX","window","screenY","outerWidth","outerHeight","left","Math","max","top","features","popupWindow","open","join","focus","challengeForAuth","uuid","config","fetch","r","json","oauthTokenURL","oauthURL","Promise","resolve","Date","now","cachedToken","getItem","ensureToken","iconURL","appInfo","clientId","redirectUri","openTokenURL","scope","encodeURIComponent"],"sources":["oauth2.js"],"sourcesContent":["import Auth from \"./auth.js\"\nimport focalStorage from '../external/focalStorage.js';\n\nconst LivelyAuthURL = \"https://lively-kernel.org/lively4-auth\"\n\nexport default class AuthGeneric extends Auth {\n  \n constructor(name) {\n    super()\n    this.name = name\n    this.onAuthenticatedCallbacks = {}\n  }\n\n  logout(cb) {\n    focalStorage.setItem(this.tokenName, null).then(cb)\n  }\n\n  parseAuthInfoFromUrl(data) {\n    var authInfo = JSON.parse(\n      '{\"' + data.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}',\n      (key, value) => { return key === \"\" ? value : decodeURIComponent(value); });\n    return authInfo;\n  }\n\n  notifyMe(title, text, cb) {\n    if (Notification.permission !== \"granted\")\n      Notification.requestPermission();\n    else {\n      var notification = new Notification(title, {\n        icon: this.notificationIconURL,\n        body: text,\n      });\n      notification.onclick = cb\n    }\n  }\n  \n  onAuthenticated(windowUuid, authInfo) {\n    var state = authInfo.state\n    var token = this.tokenFromAuthInfo(authInfo)\n\n    if (!state) { \n      throw new Error(\"AuthError, no state! Authinfo: \" + JSON.stringify(authInfo))\n    }\n    focalStorage.setItem(this.tokenName, token).then(() => {\n      var cb = this.onAuthenticatedCallbacks[state]\n      if (cb) {\n        cb(token)\n      } else {\n        throw new Error(\"AuthError: no callback found for\" + state)\n      }\n    })\n  }\n  \n  popup(url) {\n    var width = 525,\n      height = 525,\n      screenX = window.screenX,\n      screenY = window.screenY,\n      outerWidth = window.outerWidth,\n      outerHeight = window.outerHeight;\n    var left = screenX + Math.max(outerWidth - width, 0) / 2;\n    var top = screenY + Math.max(outerHeight - height, 0) / 2;\n    var features = [\n      \"width=\" + width,\n      \"height=\" + height,\n      \"top=\" + top,\n      \"left=\" + left,\n      \"status=no\",\n      \"resizable=yes\",\n      \"toolbar=no\",\n      \"menubar=no\",\n      \"scrollbars=yes\"];\n    var popupWindow = window.open(url, \"oauth\", features.join(\",\"));\n    if (!popupWindow) {\n      this.notifyMe(this.name + \" Authenfication required\", \"click here to authenticate\", () => {\n      window.open(url, \"oauth\", features.join(\",\"));\n      })\n    } else {\n      popupWindow.focus();\n    }\n  }\n  \n  \n  async challengeForAuth(uuid, cb) {\n    this.config = await fetch(LivelyAuthURL + \"/config/\" + this.name).then(r => r.json())  \n    \n    if (uuid && cb) {\n      this.onAuthenticatedCallbacks[uuid] = cb\n    }\n    fetch(this.oauthTokenURL(uuid))\n      .then(r => r.text())\n      .then(data => {\n        // console.log(\"challenge got a token, too: \" + data)      \n        var authInfo = this.parseAuthInfoFromUrl(data)\n        this.onAuthenticated(uuid, authInfo)\n    })\n    this.popup(this.oauthURL(uuid));\n  }\n  \n  token() {\n    return new Promise(resolve => {\n      this.challengeForAuth(Date.now(), resolve)\n    })\n  }\n\n  cachedToken() {\n    return focalStorage.getItem(this.tokenName)\n  }\n  \n  async ensureToken() {\n    var token = await this.cachedToken()\n    if (token) {\n      return token\n    } else {\n      return this.token()\n    }\n  }\n  \n\n  get tokenName() {\n    return this.name + \"Token\"\n  }\n  \n  \n \n  \n  tokenFromAuthInfo(authInfo) {\n    return authInfo.token\n  }\n\n  get notificationIconURL() {\n    return this.config.iconURL\n  }\n\n  get appInfo() {\n    return {\n      \"clientId\": this.config.clientId,\n      \"redirectUri\": this.config.redirectUri\n    };\n  }\n\n  oauthTokenURL(uuid) {\n    return this.config.openTokenURL + \"?state=\"+uuid\n  }\n  \n  oauthURL(uuid) {\n    return this.config.url +\n      \"?client_id=\" + this.appInfo.clientId +\n      \"&response_type=token\" +\n      \"&scope=\" + this.config.scope +\n      \"&state=\" + uuid +\n      \"&redirect_uri=\" + encodeURIComponent(this.appInfo.redirectUri);\n  } \n}\n\n"],"mappings":"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"}