{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-eventsourcing/src/client/protocols/todoist.js"],"names":["Scheme","PolymorphicIdentifier","focalStorage","parseQuery","getDeepProperty","lastTokenPromted","todoistData","TodoistScheme","scheme","todoistToken","token","getItem","Date","now","lively","prompt","setItem","resolve","fetchData","fetch","encodeURI","JSON","stringify","method","then","r","json","getData","renderHTML","result","undefined","GET","options","data","urlObj","URL","url","m","pathname","match","type","id","list","item","find","ea","search","Response","status","itemToFile","name","title","content","slice","parent","OPTIONS","notify","contents","Object","keys","map","register"],"mappings":"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","file":"todoist.js","sourcesContent":["import {Scheme}  from \"src/client/poid.js\"\nimport PolymorphicIdentifier  from \"src/client/poid.js\"\nimport focalStorage from \"src/external/focalStorage.js\"\nimport {parseQuery, getDeepProperty} from 'utils'\n\nvar lastTokenPromted\nvar todoistData\n\n\n/*MD\n\n[API documentation](https://developer.todoist.com/sync/v8)\n\nMD*/\n\nexport class TodoistScheme extends Scheme {\n  \n  get scheme() {\n    return \"todoist\"\n  }\n  \n  async todoistToken() {\n    var token = await focalStorage.getItem(\"todoist-token\")\n    if(!token && (!lastTokenPromted || ((Date.now() - lastTokenPromted) > 1000 * 5))) { \n      // don't ask again for 5 seconds...\n      lastTokenPromted = Date.now()\n      token = await lively.prompt(\"todoist token required: \")\n      if (token) {\n        focalStorage.setItem(\"todoist-token\", token)\n      }\n    }\n    return token\n  }\n\n  resolve() {\n    return true\n  }  \n \n  async fetchData() {\n    return await fetch(`https://todoist.com/api/v8/sync`+\n      `?token=${await this.todoistToken()}`+\n      `&sync_token=*`+\n      `&resource_types=${encodeURI(JSON.stringify([\"all\"]))}`, {  \n          method: 'POST',  \n      }).then(r => r.json())\n  }\n\n  async getData() {\n    if (!todoistData)  todoistData = await this.fetchData()\n    return todoistData\n  }\n  \n async renderHTML(result) {\n   return \"<pre>\" + JSON.stringify(result, undefined, 2) + \"</pre>\"\n }\n  \n  async GET(options) {\n    let data = await this.getData()\n    let urlObj = new URL(this.url)\n    let m = urlObj.pathname.match(/^\\/*([^/]+)\\/?([^/]+)?$/)\n    let type = m && m[1]\n    let id = m && m[2]\n     let result;\n    if (!type ) {\n      result =  data   \n    } else {\n      let list = data[type]\n      if (!id) {\n       result =  list\n      } else {\n       let item = list.find(ea => ea.id == id)\n       result =  item\n      }\n    }\n    if (urlObj.search == \"?html\") {\n      return new Response(await this.renderHTML(result), {status: 200})  \n    }\n    return new Response(JSON.stringify(result, undefined, 2), {status: 200})\n  }\n\n  itemToFile(type, item) {\n    return {\n      name: \"\" + item.id, \n      title: item.name || \n        (item.content ? (\"\" + item.content).slice(0, 30) : undefined),\n      parent: this.scheme + \"://\" + type + \"/\",\n      type: \"file\", \n    } \n  }\n  \n  async OPTIONS() {\n    let data = await this.getData()\n    let urlObj = new URL(this.url)\n    let m = urlObj.pathname.match(/^\\/*([^/]+)\\/?([^/]+)?$/)\n    let type = m && m[1]\n    let id = m && m[2]\n    lively.notify(\"path\" +urlObj.pathname+\"type: \" + type + \" id:\" + id)\n    let result;\n    if (!type ) {\n      result =  {\n        name: \"root\", \n        type: \"directory\", \n        parent: this.scheme + \"://\",\n        contents: Object.keys(data).map(ea => ({\n          name: ea,\n          type: data[ea].map ? \"directory\" : \"file\"\n        }))\n      }      \n    } else {\n      let list = data[type]\n      if (!id) {\n       result =  {\n          name: type, \n          type: list.map ? \"directory\" : \"file\", \n          parent: this.scheme + \"://\",\n          contents:  list.map ? list.map(ea => this.itemToFile(type, ea)) : undefined\n       } \n      } else {\n       let item = list.find(ea => ea.id == id)\n       result =  this.itemToFile(type, item)\n      }\n    }\n    return new Response(JSON.stringify(result), {status: 200})\n  }\n}\n\n\n\nPolymorphicIdentifier.register(TodoistScheme)"]}