{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/src/client/protocols/scholar.js"],"names":["Scheme","PolymorphicIdentifier","focalStorage","Author","Paper","MicrosoftAcademicEntities","_","semanticScholarSubscriptionKeyId","SemanticScholarScheme","scheme","resolve","setSubscriptionKey","key","setItem","getSubscriptionKey","getItem","ensureSubscriptionKey","lively","prompt","response","content","contentType","Response","headers","status","notfound","GET","options","m","url","match","RegExp","mode","query","length","search","replace","id","authorId","Headers","set","fetch","method","then","r","text","OPTIONS","JSON","stringify","undefined","register"],"mappings":"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","file":"scholar.js","sourcesContent":["import { Scheme } from \"src/client/poid.js\";\nimport PolymorphicIdentifier from \"src/client/poid.js\";\nimport focalStorage from \"src/external/focalStorage.js\";\n\nimport {Author, Paper, MicrosoftAcademicEntities} from \"src/client/literature.js\"\n\n\nimport _ from 'src/external/lodash/lodash.js';\n/*MD \n# Semantic Scholar API \n\nExamples: \n```\nfetch(\"scholar://paper/search?query=literature+graph\").then(r => r.json())\n\nvar fields = \"externalIds,url,title,abstract,venue,year,referenceCount,citationCount,influentialCitationCount,isOpenAccess,fieldsOfStudy,s2FieldsOfStudy,authors\"\nfetch(`scholar://paper/649def34f8be52c8b66281af98ae884c09aef38b?fields=${fields}`).then(r => r.json())\n\n\nfetch(\"scholar://data/paper/DOI:10.1145/2384592.2384611\").then(r => r.json())\n\nfetch(\"scholar://data/paper/MAG:2087784813\").then(r => r.json())\n```\n<script>\n  <div>\n    <button click={() => {\n     lively.openBrowser(\"scholar://data/paper/DOI:10.1145/2384592.2384611\")     \n        }}>DOI example</button>\n    <button click={() => {\n     lively.openBrowser(\"scholar://data/paper/MAG:2087784813\")     \n    }}>Microsoft Academic Graph example</button>\n    <button click={() => {\n     lively.openBrowser(\"scholar://browse/paper/MAG:2087784813\")     \n    }}>Browse example</button>\n  </div>\n</script>\n\nMD*/\n\nconst semanticScholarSubscriptionKeyId = \"semantic-scholar-key\";\n\n\nexport default class SemanticScholarScheme extends Scheme {\n\n  get scheme() {\n    return \"scholar\";\n  }\n\n  resolve() {\n    return true;\n  }\n\n  static async setSubscriptionKey(key) {\n      return focalStorage.setItem(semanticScholarSubscriptionKeyId, key);\n  }\n  \n  static async getSubscriptionKey() {\n    var key = await focalStorage.getItem(semanticScholarSubscriptionKeyId);\n    return key\n  }\n  \n  static async ensureSubscriptionKey() {\n    var key = await this.getSubscriptionKey()\n    if (!key) {\n      key = await lively.prompt(`Enter your Semantic Scholar key`, \"\");\n      await this.setSubscriptionKey(key);\n    }\n    return key\n  }\n\n  response(content, contentType = \"text/html\") {\n    return new Response(content, {\n      headers: {\n        \"content-type\": contentType\n      },\n      status: 200\n    });\n  }\n\n  notfound(content, contentType = \"text/html\") {\n    return new Response(content, {\n      headers: {\n        \"content-type\": contentType\n      },\n      status: 303\n    });\n  }\n\n\n  async GET(options) {\n    var m = this.url.match(new RegExp(this.scheme + \"\\:\\/\\/([^/]*)/(.*)\"))\n    var mode = m[1]\n    var query = m[2];\n    if (query.length < 2) return this.response(`{\"error\": \"query to short\"}`);\n    \n    if (mode === \"browse\") {\n      if (query.match(\"search\\?query=\")) {\n        let search = query.replace(/.*\\?query=/,\"\")\n        return this.response(`<literature-paper search=\"${search}\"><literature-paper>`);\n        \n      } else if (query.match(\"paper/\")) {\n        let id = query.replace(/.*\\?query=/,\"\").replace(/paper\\//,\"\")\n        return this.response(`<literature-paper scholarpaper=\"${id}\"><literature-paper>`);\n        \n      } else if (query.match(\"author/\")) {\n        var authorId = query.replace(/.*author\\//,\"\")\n        return this.response(`<literature-paper authorid=\"${authorId}\"><literature-paper>`);\n      } else {\n        return this.response(`query not supported: ` + query);\n      }\n      \n      \n    }\n  \n    var url = \"https://api.semanticscholar.org/graph/v1/\" + query\n    \n    var key = await SemanticScholarScheme.ensureSubscriptionKey() // maybe only get... ?\n    var headers = new Headers({})\n    if (key) {\n      headers.set(\"x-api-key\", key)\n    }\n    \n    var content = await fetch(url, {\n      method: \"GET\",\n      headers: headers\n    }).then(r => r.text())\n   \n    return this.response(content);\n  }\n\n  async OPTIONS(options) {\n    var content = JSON.stringify({}, undefined, 2);\n    return new Response(content, {\n      headers: {\n        \"content-type\": \"application/json\"\n      },\n      status: 200\n    });\n  }\n\n}\n\nPolymorphicIdentifier.register(SemanticScholarScheme);\n\n// import Tracing from \"src/client/tracing.js\"\n// Tracing.traceClass(Paper)\n"]}