{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/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","GET","options","data","urlObj","URL","url","m","pathname","match","type","id","notify","result","list","item","find","ea","Response","status","itemToFile","name","title","content","slice","undefined","parent","OPTIONS","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\n\nvar todoistData\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/v7/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 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    lively.notify(\"path\" +urlObj.pathname+\"type: \" + type + \" id:\" + id)\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    return new Response(JSON.stringify(result), {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)"]}