{"version":3,"names":["Issue","Project","Story","Item","Comment","GitHub","authGithub","Strings","Files","LivelyWebhookService","constructor","props","ea","toString","project","title","item","comment","current","force","_current","storagePrefix","storeValue","key","value","lively","focalStorage","setItem","loadValue","getItem","githubApi","path","token","fetch","headers","Headers","Authorization","then","r","json","loadCredentials","Promise","resolve","reject","challengeForAuth","Date","now","user","username","login","emails","email","find","primary","repo","loaded","getToken","ensureBranch","name","original","info","getBranch","ref","originalInfo","Error","method","body","JSON","stringify","object","sha","apiFetch","api","options","baseHeaders","baseOptions","composedOptions","Object","assign","getFile","branch","result","listWebhooks","hooks","ensureWebhook","url","found","config","createWebhook","fixPath","replace","setFile","content","message","file","b64EncodeUnicode","deleteFile","getContent","b64DecodeUnicode","issueByTitle","searchInTitle","issues","match","issueByNumber","number","create","patch","issuePatch","parseLinkHeader","header","parts","split","links","i","length","section","trim","getURLAuthorized","_issues","resp","get","concat","parseMarkdownStories","source","recursive","lines","stories","map","matchDo","isProject","comments","prefix","issue","rest","state","a","labels","tags","b","matchAllDo","tag","label","tagToLabel","includes","push","forEach","RegExp","isStory","parseInt","undefined","items","isItem","isComment","lastProject","lastStory","story","filter","stringifyMarkdownStoriesDebug","join","labelToTag","l","toUpperCaseFirst","toCamelCase","toLowerCase","stringifyMarkdownStories","syncMarkdownStories","projectLabel","notify","updateMarkdownFile","files","loadFile","updateContent","saveFile","getGitMergeBase","serverURL","repositoryName","versionA","versionB","gitversiona","gitversionb","text"],"sources":["github.js"],"sourcesContent":["\nimport authGithub from \"src/client/auth-github.js\"\nimport Strings from \"src/client/strings.js\"\nimport Files from \"src/client/files.js\"\n\nconst LivelyWebhookService = \"https://lively-kernel.org/lively4/_webhook/signal\"\n\nexport class Issue {\n  constructor(props) {\n    for(var ea in props) {\n      this[ea] = props[ea]\n    }\n  }\n}\n\nexport class Project extends Issue {\n  toString() {\n    return \"Project: \" + this.project\n  }\n}\n\nexport class Story extends Issue {\n  toString() {\n    return \"Story: \" + this.title\n  }\n}\n\nexport class Item extends Issue {\n  toString() {\n    return \"Items: \" + this.item\n  }\n}\n\nexport class Comment extends Issue {\n  toString() {\n    return \"Comment: \" + this.comment\n  }\n}\n\nexport default class GitHub {\n   \n  static current(force) {\n    if (!this._current || force) {\n      this._current = new GitHub()\n    }\n    return this._current\n  }\n  \n  get storagePrefix() {\n    return \"LivelySync_\"\n  }\n  \n  \n  async storeValue(key, value) {\n    return  lively.focalStorage.setItem(this.storagePrefix + key, value)\n  }\n  \n  async loadValue(key) {\n    return lively.focalStorage.getItem(this.storagePrefix + key)\n  }\n  \n  githubApi(path, token) {\n    return fetch(\"https://api.github.com\" + path, {\n      headers: new Headers({\n        Authorization: \"token \" + token\n    })}).then(r => r.json());\n  }\n  \n  async loadCredentials() {\n    // this.updateLoginStatus()\n    this.token = await this.loadValue(\"githubToken\")\n    if (!this.token) {\n       this.token = await new Promise((resolve, reject) => {\n          authGithub.challengeForAuth(Date.now(), async (token) => {\n              var user = await this.githubApi(\"/user\", token);\n              var username = user.login;\n              var emails =  await this.githubApi(\"/user/emails\", token);\n              var email = emails.find(ea => ea.primary).email;\n              this.storeValue(\"githubUsername\", username);\n              this.storeValue(\"githubEmail\", email);\n              this.storeValue(\"githubToken\", token);\n              resolve(token);\n        });\n       })\n    }\n    this.username = await this.loadValue(\"githubUsername\");\n    this.email = await this.loadValue(\"githubEmail\");\n  }\n  \n  \n  constructor(user= \"LivelyKernel\", repo= \"lively4-core\") {\n    this.user = user\n    this.repo = repo\n    this.loaded = this.loadCredentials()\n  }\n\n  async getToken() {\n    if (!this.token ) {\n      this.loaded = this.loadCredentials()\n      await this.loaded\n    }\n    return this.token\n  }\n  \n  async ensureBranch(name, original=\"master\") {\n    await this.loaded\n    \n    var info = await this.getBranch(name)\n    if (info.ref) return info\n    \n    var originalInfo = await this.getBranch(original)\n    if (!originalInfo.ref) throw new Error(\"Could not find original branch \" + original)\n    \n    return fetch(`https://api.github.com/repos/${this.user}/${this.repo}/git/refs`, {\n      method: \"POST\",\n      headers: {\n       Authorization: \"token \" + this.token \n      },\n      body: JSON.stringify({\n        \"ref\": `refs/heads/${name}` ,\n        \"sha\": originalInfo.object.sha\n      })\n    }).then(r => r.json())\n  }\n  \n  async apiFetch(api, options={}) {\n    await this.loaded\n    var baseHeaders =  {\n      Authorization: \"token \" + this.token\n    }\n    var baseOptions = {\n      method: \"GET\"\n    }\n    var composedOptions = Object.assign(baseOptions, options)\n    composedOptions.headers = Object.assign(baseHeaders, options.headers || {})\n    return fetch(`https://api.github.com/repos/${this.user}/${this.repo}` + api, composedOptions).then(r => r.json())\n  }\n  \n  \n  async getBranch(name) {\n    return this.apiFetch(`/git/refs/heads/${name}`)\n  }\n\n  async getFile(path, branch) {\n    await this.loaded\n    var result = await fetch(`https://api.github.com/repos/${this.user}/${this.repo}/contents/${path}` \n                 + (branch  ? `?ref=${branch}` : \"\"), {\n      headers: {\n       Authorization: \"token \" + this.token \n      }\n    }).then(r => r.json())\n    return result\n  }\n  \n  async listWebhooks() {\n    var hooks = await this.apiFetch(`/hooks`)\n    return hooks\n  }  \n\n  async ensureWebhook(url=LivelyWebhookService) {\n    var hooks = await this.listWebhooks()\n    if (!hooks || !hooks.find) return\n    var found = hooks.find(ea => ea.config.url == url)\n    if (found) {\n      return found\n    } else {\n      return this.createWebhook(url)\n    }\n  }\n\n  async createWebhook(url=LivelyWebhookService) {\n    return await this.apiFetch(`/hooks`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        \"name\": \"web\",\n        \"active\": true,\n        \"events\": [\n          \"push\"\n        ],\n        \"config\": {\n          \"url\": url,\n          \"content_type\": \"json\",\n          \"insecure_ssl\": \"0\"\n        }\n      })\n    })\n  }\n  \n  fixPath(path) {\n   return path && path.replace(/^\\//,\"\") // do not start with /\n  }\n\n  async setFile(path, branch, content, message=\"LIVELY COMMIT\") {\n    path = this.fixPath(path) \n    await this.loaded\n    var file = await this.getFile(path, branch)\n    var body = {\n        \"message\": message,\n        \"committer\": {\n          \"name\": this.user,\n          \"email\": this.email\n        },\n        \"content\": Files.b64EncodeUnicode(content),\n        \n      }\n    if (file.sha)  body.sha = file.sha\n    if (branch) body.branch = branch\n    return fetch(`https://api.github.com/repos/${this.user}/${this.repo}/contents/${path}`, {\n      method: \"PUT\",\n      headers: {\n       Authorization: \"token \" + this.token \n      }, \n      body: JSON.stringify(body)\n    }).then(r => r.json())\n  }\n  \n  async deleteFile(path, branch, message=\"LIVELY COMMIT DELETE\") {\n    await this.loaded\n    var file = await this.getFile(path, branch)\n    if (!file.sha) throw new Error(\"File not found\")\n    \n    var body = {\n        \"message\": message,\n        \"committer\": {\n          \"name\": this.user,\n          \"email\": this.email\n        },\n      }\n    body.sha = file.sha\n    if (branch) body.branch = branch\n    return fetch(`https://api.github.com/repos/${this.user}/${this.repo}/contents/${path}`, {\n      method: \"DELETE\",\n      headers: {\n       Authorization: \"token \" + this.token \n      }, \n      body: JSON.stringify(body)\n    }).then(r => r.json())\n  }\n\n  async getContent(path, branch) {\n    var file = await this.getFile(path, branch)\n    if (file.content) return Files.b64DecodeUnicode(file.content)\n  }\n\n  async issueByTitle(searchInTitle) {\n    var issues = await this.issues()\n    return issues.find(ea => ea.title.match(searchInTitle))\n  }\n  \n  async issueByNumber(number) {\n    var issues = await this.issues()\n    return issues.find(ea => ea.number == number)\n  }\n  \n  \n  async create(title, body) {\n    await this.loaded\n    if (!title) throw new Error(\"title is missing\") \n    if (!body) throw new Error(\"body is missing\") \n    return fetch(\"https://api.github.com/repos/\" \n        + this.user+ \"/\" + this.repo + \"/issues\", {\n        method: \"POST\",\n        body: JSON.stringify({\n          title: title,\n          body: body\n        }),\n        headers: {\n          Authorization: \"token \" + this.token,\n          'Content-Type': 'application/json'\n        }\n      }).then(r => r.json())\n  }\n  \n  async patch(number, issuePatch) {\n    await this.loaded\n    if (!number) throw new Error(\"number is missing\") \n    if (!issuePatch) throw new Error(\"issuePatch is missing\") \n\n    return fetch(\"https://api.github.com/repos/\" \n        + this.user+ \"/\" + this.repo + \"/issues/\" + number, {\n        method: \"PATCH\",\n        body: JSON.stringify(issuePatch),\n        headers: {\n          Authorization: \"token \" + this.token,\n          'Content-Type': 'application/json'\n        }\n      }).then(r => r.json())\n  }\n\n  \n  parseLinkHeader(header) {\n    var parts = header.split(',');\n    var links = {};\n    for(var i=0; i<parts.length; i++) {\n        var section = parts[i].split(';');\n        if (section.length !== 2) {\n            throw new Error(\"section could not be split on ';'\");\n        }\n        var url = section[0].replace(/<(.*)>/, '$1').trim();\n        var name = section[1].replace(/rel=\"(.*)\"/, '$1').trim();\n        links[name] = url;\n    }\n    return links;\n  }\n  \n\n  async getURLAuthorized(url, force) {\n    // force not used...\n    await this.loaded\n    return fetch(url, {\n        method: \"GET\",\n        headers: {\n          Authorization: \"token \" + this.token\n        }\n      })\n  }\n  \n  \n  async issues(force) {\n    if (!this._issues || force) {\n      this._issues = []\n      \n      var url = \"https://api.github.com/repos/\" \n        + this.user+ \"/\" + this.repo + \"/issues\" + \"?per_page=100&state=all\"\n      \n      // retrieve all pages\n      while(url) {\n        var resp = await this.getURLAuthorized(url, force)\n        var links = this.parseLinkHeader(resp.headers.get(\"link\"))\n        url = links[\"next\"]\n        this._issues = this._issues.concat(await resp.json())\n      }\n\n    }\n    return this._issues\n  }\n  /*\n   * source    ... stories in markdown list item syntax \n   * recursive ... items are only referenced in their parent projects, otherwise it is a flat list\n   */\n  parseMarkdownStories(source, recursive) {\n    var lines = source.split(/\\r?\\n/)\n    var stories = lines.map((ea) => {\n      var result =  Strings.matchDo(/^## +(.*)/, ea, title => \n        new Project({isProject: true, project: title, stories: [], comments: []}))\n      if (!result) result = Strings.matchDo(/^(- )(.*)/, ea, (prefix, issue) => {\n        var title, rest, state;\n        Strings.matchDo(/ ((#|(?:[0-9]+P)|(?:\\?+P)).*)$/, issue, (a) => {\n          rest = a\n        })\n        if (!title) title = issue.replace(rest, \"\")\n        var number;\n        var labels = []\n        var tags = []\n        if (rest) {\n          Strings.matchDo(/(#([0-9]+))/, rest, (a,b) => {\n            rest = rest.replace(a,\"\") \n            number = b\n          })\n          }\n        if (rest) {\n          Strings.matchDo(/(#((open)|(closed)))/, rest, (a,b) => {\n            rest = rest.replace(a,\"\") \n            state = b\n          })\n        }\n        if (rest) {\n          // lively.notify(\"rest \" + rest)\n          Strings.matchAllDo(/(#[A-Za-z]+)/, rest, (tag) => {\n            var label = this.tagToLabel(tag)\n            if (label && !labels.includes(label)) {\n              labels.push(label)\n            }\n            tags.push(tag)\n\n          })\n          tags.forEach(tag => {\n            // lively.notify(\"replace tag \" + tag)\n            rest = rest.replace(new RegExp(\" ?\" + tag, \"g\"),\"\")\n          })\n\n        }\n\n        return   new Story({\n          isStory: true,\n          title: title.replace(/ *$/,\"\"), \n          rest: rest && rest.replace(/ *$/,\"\"),\n          number: number ? parseInt(number) : undefined,\n          state: state,\n          labels: labels,\n          items: []\n        })\n      })\n      if (!result) result = Strings.matchDo(/^ +(- .*)/, ea, item => \n        new Item({isItem: true, item: item}))\n    \n      if (!result) result = new Comment({isComment: true, comment: ea})\n      return result\n    })\n    \n    // now, make sense of the parsing...\n    var lastProject\n    var lastStory\n    \n    stories.forEach(ea => {\n      if (ea.isProject) {\n        lastProject = ea;\n        lastStory = null;\n      }\n      if (ea.isStory) {\n        lastStory = ea\n      }\n      if (ea.isStory && lastProject) {\n        lastProject.stories.push(ea)\n        lastStory.project = lastProject.project\n      }\n      if (ea.isItem && lastStory) {\n        ea.story = lastStory; // it is not a tree any more...\n        lastStory.items.push(ea)\n      }\n      if (ea.isComment && lastProject) {\n        ea.project = lastProject\n        lastProject.comments.push(ea)\n      }\n      if (ea.comment == \"<!--NoProject-->\") {\n        ea.project = undefined;\n        lastProject = undefined\n      }\n    })\n    if (recursive) {\n      stories = stories.filter(ea => \n        ea.isProject ||\n          (ea.isStory && !ea.project) ||\n          (ea.isItem && !ea.story) ||\n          ea.isComment && !ea.project\n      ); // get rid of the global itmes\n    }\n    return stories\n  }\n  \n  stringifyMarkdownStoriesDebug(stories) {\n    return stories.map(ea => JSON.stringify(ea)).join(\"\\n\")\n  }\n  \n  labelToTag(l) {\n    var tag = l\n        .replace(\"type: \", \"\")\n        .replace(/P[0-9]\\: /, \"\")\n        .replace(/effort[0-9]\\: /, \"\")\n        .replace(/ \\(hour\\)/, \"\")\n        .replace(/ \\(day\\)/, \"\")\n        .replace(/ \\(week\\)/, \"\")\n        .replace(\"RFC / discussion / question\", \"discussion\")\n        .replace(/comp\\: /, \"\")\n    if (tag.match(\" \")) {\n      tag = Strings.toUpperCaseFirst(Strings.toCamelCase(tag, \" \"))\n    }\n    return \"#\" + tag\n  }\n  \n  tagToLabel(tag) {\n    if (!tag) return \n    var label = tag.replace(\"#\", \"\")\n    if (label == \"bug\") return \"type: bug\"\n    if (label == \"chore\") return \"type: chore\"\n    if (label == \"feature\") return \"type: feature\"\n    if (label == \"performance\") return \"type: performance\"\n    if (label == \"refactor\") return \"type: refactor\"\n    if (label == \"discussion\") return \"type: RFC / discussion / question\"\n    \n    if (label == \"easy\") return \"effort1: easy (hour)\"\n    if (label == \"medium\") return \"effort2: medium (day)\"\n    if (label == \"hard\") return \"effort3: hard (week)\"\n     \n    if (label == \"critical\") return \"P0: critical\"\n    if (label == \"critical\") return \"P0: critical\"\n    if (label == \"critical\") return \"P0: critical\"\n    if (label == \"critical\") return \"P0: critical\"\n    if (label == \"critical\") return \"P0: critical\"\n    \n    if (label == \"urgent\") return \"P1: urgent\"\n    if (label == \"required\") return \"P2: required\"\n    if (label == \"important\") return \"P3: important\"\n    if (label == \"NiceToHave\") return \"P4: nice to have\"\n\n\n    if (label == \"duplicate\") return \"duplicate\"\n    if (label == \"FollowUp\") return \"follow up\"\n    if (label == \"HelpWanted\") return \"help wanted\"\n\n    if (label.match(/[A-Z][a-z]+[A-Z]/)) \n      return \"comp: \" + label.split(/(?=[A-Z])/).map(ea => ea.toLowerCase()).join(\" \")\n    return label\n  }\n  \n  stringifyMarkdownStories(stories, recursive) {\n    return stories.map(ea => {\n      if (ea.title  !== undefined) \n        return \"- \" + ea.title + \n          (ea.rest ? \" \" + ea.rest : \"\") + \n          (ea.labels ? \" \" +ea.labels\n            .filter(l => l !== (\"comp: \" + ea.project).toLowerCase())\n            .map(l => this.labelToTag(l)).join(\" \")  : \"\") + \n          (ea.state ? \" #\" + ea.state : \"\") + \n          (ea.number ? \" #\" + ea.number : \"\") +\n          (recursive && ea.items && ea.items.length > 0 ? \n            \"\\n\" + this.stringifyMarkdownStories(ea.items, true) : \"\")\n      if (ea.comment !== undefined) return  ea.comment;\n      if (ea.project  !== undefined) \n        return \"## \" + ea.project + \n          (recursive && ea.comments && ea.comments.length > 0 ? \n            \"\\n\" + this.stringifyMarkdownStories(ea.comments, true) : \"\") + \n          (recursive && ea.stories && ea.stories.length > 0 ? \n            \"\\n\" + this.stringifyMarkdownStories(ea.stories, true) : \"\")\n          \n      if (ea.item) return \"  \" + ea.item;\n      throw new Error(\"Could not stringify parsed line: \" + JSON.stringify(ea))\n    }).join(\"\\n\")\n  }\n  \n  async syncMarkdownStories(stories) {\n    var issues = await this.issues(true)\n    // lively.notify(\"found \" + issues.length + \" issues\")\n    for(var ea of stories){\n      var issue = null\n      if (ea.title && ea.number === undefined) {\n        issue = issues.find(issue => ea.title == issue.title)\n        if (!issue) {\n          issue = await this.create(ea.title, ea.body || \"<no description>\")\n        }\n        ea.number = issue.number;\n        // #TODO add maybe github flags too?\n      }\n      if (ea.title) {\n        if (!issue) {\n          issue = issues.find(issue => ea.number == issue.number)\n        }\n        \n        if (issue && issue.state) {\n          ea.state = issue.state\n        }\n        \n        if (ea && issue && issue.labels) {\n          if (!ea.labels) ea.labels = []; \n          issue.labels.forEach(l => {\n            if (!ea.labels.includes(l.name)) {\n              \n              // lively.notify(\"add \" + l.name)\n              ea.labels.push(l.name)\n            }\n          })\n          if (ea.project) {\n            var projectLabel = \"comp: \"+ ea.project.trim().replace(/[^A-Za-z0-9 ]/g,\"\").toLowerCase()\n            if (!issue.labels.find(ea => ea.name.toLowerCase() == projectLabel)) {\n              lively.notify(\"labeled \" + issue.number  + \" as \" + projectLabel )\n              var patch = {labels: issue.labels.map(ea => ea.name).concat([projectLabel])};\n              var result = await this.patch(issue.number, patch)\n              \n            }\n          }\n          \n          // local labels are thrown away... ?\n          // #TODO what about labels that are not in github?\n        }\n        \n      }\n    }\n    for(var issue of issues) {\n      if (issue.state == \"open\" && !stories.find(ea => ea.number == issue.number)) {\n        var story = {title: issue.title, state: issue.state, body: issue.body, number: issue.number}; // Project, Tags?\n        stories.push(story) // just append, #TODO find a proper place in the list? \n      }\n    }\n    return stories\n  }\n  \n  async updateMarkdownFile(url) {\n    var content = await lively.files.loadFile(url)\n    var stories = this.parseMarkdownStories(content)\n    await this.syncMarkdownStories(stories)\n    var updateContent = this.stringifyMarkdownStories(stories)\n    return lively.files.saveFile(url, updateContent)\n  }\n  \n  \n  // Example: AnnotationSet.getGitMergeBase(\"https://lively-kernel.org/lively4\",  \"lively4-dummyA\", \"HEAD\", \"fd956\")\n  async getGitMergeBase(serverURL, repositoryName, versionA, versionB) {\n    var headers = new Headers({\n      \"gitusername\":          this.username,\n      \"gitpassword\":          this.token, \n      \"gitemail\":             this.email,\n      \"gitrepository\":        repositoryName,\n      gitversiona: versionA,\n      gitversionb: versionB,\n    })\n\n    return fetch(serverURL + \"/_git/mergebase\", {\n      headers: headers\n    }).then(r => r.text())    \n  }\n  \n}"],"mappings":"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"}