{"version":3,"names":["MicrosoftScheme","RestScheme","PolymorphicIdentifier","parseQuery","getDeepProperty","OAuth2","scheme","baseURL","auth","getMetaData","window","lively4MicrosoftCachedMetadata","metadataURL","source","fetch","then","r","text","parser","DOMParser","parseFromString","getMetaDataType","contextPath","contextNode","metadata","m","match","pattern","enityTypeName","enityType","querySelector","enitySetName","rest","entitySet","entityTypeFullName","getAttribute","entityType","split","last","name","navigationProperty","typeName","collectionMatch","shortTypeName","console","warn","undefined","OPTIONS","options","result","path","type","contents","json","apiJSON","e","value","push","map","ea","child","displayName","title","createdDateTime","url","href","sectionsUrl","replace","pagesUrl","self","startsWith","parentReference","parent","id","addContentsFromType","navigationProperties","querySelectorAll","functionsBindings","functionDef","parentElement","parameters","para","join","URL","hash","find","children","folder","file","mimeType","Response","JSON","stringify","register"],"sources":["microsoft.js"],"sourcesContent":["import RestScheme  from \"./rest.js\"\nimport PolymorphicIdentifier  from \"src/client/poid.js\"\nimport {parseQuery, getDeepProperty} from 'utils'\n  \n\nimport OAuth2 from \"src/client/oauth2.js\"\n\n/*MD\n\n- [Microsoft Graph Overview](https://docs.microsoft.com/en-us/graph/overview)\n- [Microsoft Graph Navigation](https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/addressing-driveitems?view=odsp-graph-online)\n  - \"/me - A top-level Microsoft Graph resource being addressed, in this case the current user.\n  - /drive - The default drive for the previous resource, in this case the user's OneDrive.\n  - /root - The root folder for the drive.\n  - :/Documents/MyFile.xlsx: - The : : around /Documents/MyFile.xlsx represents a switch to the path-based addressing syntax. Everything between the two colons is treated as a path relative to the item before the path (in this case, the root).\n  - /content - Represents the default binary stream for the file. You can also address other properties or relationships on the item.\"\n  - maybe we should make use of OData\n    - e.g. use a client side [OData Library](https://www.odata.org/blog/OData-JavaScript-library-o.js-explained/)\n  - or use the [Microsoft Graph JavaScript Client](https://github.com/microsoftgraph/msgraph-sdk-javascript)\n- #TODO support PUT, PATCH, POST, needed for [writing data](https://docs.microsoft.com/en-us/graph/api/range-update?view=graph-rest-1.0&tabs=http)\n```\nMD*/\n\nexport default class MicrosoftScheme extends RestScheme {\n  \n  get scheme() {\n    return \"microsoft\"\n  }\n  \n  get baseURL() {\n    return \"https://graph.microsoft.com/v1.0/\"\n  }  \n  auth() {\n     return new OAuth2(\"microsoft\")\n  }\n  \n  async getMetaData() {\n    if (!window.lively4MicrosoftCachedMetadata) {\n      var metadataURL = \"https://graph.microsoft.com/v1.0/$metadata\" // we could also do it dynamically...\n      var source  = await fetch(metadataURL).then(r => r.text())\n      var parser = new DOMParser();\n      window.lively4MicrosoftCachedMetadata = parser.parseFromString(source, \"application/xml\");\n    }\n    return window.lively4MicrosoftCachedMetadata\n  }\n  \n  \n  async getMetaDataType(contextPath, contextNode) { \n    let metadata = await this.getMetaData()\n    \n    if (contextPath == \"\") return contextNode\n    \n    if (!contextNode) {\n      let m = contextPath.match(/^([a-zA-Z0-9]+)$/) // entySet\n      if (m) {\n        let [pattern, enityTypeName] = m\n        let enityType =  metadata.querySelector(`EntityType[Name=\"${enityTypeName}\"]`)\n        return enityType\n      }\n\n      m = contextPath.match(/^([a-zA-Z0-9]+)\\/(.*)/) // entySet\n      if (m) {\n        let [pattern, enitySetName, rest] = m\n        let entitySet =  metadata.querySelector(`EntitySet[Name=\"${enitySetName}\"]`)\n        return this.getMetaDataType(rest, entitySet) \n      }\n\n      m = contextPath.match(/^([a-zA-Z0-9]+)\\([^)]*\\)\\/?(.*)/) // entySet function?\n      if (m) {\n        let [pattern, enitySetName, rest] = m\n        let entitySet =  metadata.querySelector(`EntitySet[Name=\"${enitySetName}\"]`)\n        \n        let entityTypeFullName = entitySet.getAttribute(\"EntityType\")\n        let entityType = metadata.querySelector(`EntityType[Name=\"${entityTypeFullName.split(\".\").last}\"]`)\n        \n        return this.getMetaDataType(rest, entityType) \n      }\n    } else { \n      \n      \n      let m = contextPath.match(/^([a-zA-Z0-9]+)\\/?(.*)/) // navigation\n      if (m) {\n        let [pattern, name, rest] = m\n        \n        var navigationProperty = contextNode.querySelector(`NavigationProperty[Name=\"${name}\"]`)\n        if (navigationProperty) {\n          var typeName = navigationProperty.getAttribute(\"Type\")\n          \n          var collectionMatch = typeName.match(/^Collection\\((.*)\\)$/)\n          if (collectionMatch) {\n            typeName = collectionMatch[1]\n          }\n          \n          var shortTypeName = typeName.split(\".\").last\n          var entityType = metadata.querySelector(`EntityType[Name=\"${shortTypeName}\"]`)\n          return this.getMetaDataType(rest, entityType) \n        } else {\n          console.warn(\"[protocols.microsoft] could not find navigationProperty \" + name +\" in\", contextNode)\n          return \n        }\n        \n      }\n      \n      m = contextPath.match(/^\\$entity$/) // entySet\n      if (m) {\n        let entityTypeFullName = contextNode.getAttribute(\"EntityType\")\n        if (entityTypeFullName) {\n          let entityType = metadata.querySelector(`EntityType[Name=\"${entityTypeFullName.split(\".\").last}\"]`)\n          return entityType\n        } else {\n          // maybe we are alred and entity\n          return contextNode\n        }\n      }\n    }\n  \n    // \\$entity\n    \n    // var functionPattern = /^([a-zA-Z09]+)\\([^]*)\\)\\//\n    // if (!m) {\n    //   m = contextPath.match(entySetPattern)\n    // }\n    \n    return undefined // could not resolve rest... so we are undefined\n  }\n  \n  \n  async OPTIONS(options) {\n  \n    var result = {\n      name: this.path,\n      type: \"directory\",\n      contents: []\n    }\n    \n    try {\n      var json = await this.apiJSON(\"GET\", this.path + \"\")\n      \n    } catch(e) {\n      json = {}\n      // do nothing\n    }\n\n\n    \n    if (json.value) {\n      \n      result.contents.push(...json.value.map(ea => {\n        var child = {\n            name: ea.name || ea.displayName || ea.title || ea.createdDateTime || \"\",\n            type: \"directory\"\n        }\n        \n        if (ea.url && ea.url.match(/^[a-zA-Z0-9/]+$/)) {\n          child.href =  \"microsoft://\" + ea.url                                                                  \n        } else if (ea.sectionsUrl) { // #OneNote\n          // there is also sectionGroupsUrl\n          child.href =  \"microsoft://\" + ea.sectionsUrl.replace(\"https://graph.microsoft.com/v1.0/\",\"\")                                                       \n        } else if (ea.pagesUrl) { // #OneNote pages\n          child.href =  \"microsoft://\" + ea.pagesUrl.replace(\"https://graph.microsoft.com/v1.0/\",\"\")                                                       \n        } else if (ea.self && ea.self.startsWith(\"https://graph.microsoft.com/v1.0\")) { \n          \n          child.href =  \"microsoft://\" + ea.self.replace(\"https://graph.microsoft.com/v1.0/\",\"\") \n          child.type = \"file\"\n          if (ea.self.match(/\\/onenote\\/pages\\//)) {\n            child.href += \"/content?includeIDs=true\"\n          }\n          \n        } \n        return child\n      }))\n      \n    }\n    \n    \n    if (json.parentReference) {\n      result.parent =  \"microsoft://me/drive/items/\" + json.parentReference.id + \"/\"\n    }\n    \n    var addContentsFromType = async (contextPath) => {\n      var entityType = await this.getMetaDataType(contextPath)  \n      if (entityType) {\n        var navigationProperties = entityType.querySelectorAll(\"NavigationProperty\")  \n         result.contents.push(...navigationProperties.map(ea => ({\n          name: ea.getAttribute(\"Name\"),\n          type: \"link\",\n          // href:  \"microsoft://\" + ea.getAttribute(\"Name\")                                                                 \n        })))        \n        \n        var metadata = await this.getMetaData()\n        var functionsBindings = metadata.querySelectorAll(`Parameter[Name=\"bindparameter\"][Type=\"microsoft.graph.${entityType.getAttribute(\"Name\")}\"]`)\n\n        if (functionsBindings) {\n          result.contents.push(...functionsBindings.map(ea => {\n            var functionDef = ea.parentElement\n            var parameters = functionDef.querySelectorAll(`Parameter:not([Name=\"bindparameter\"])`)\n            \n            var child = {\n              name: `${functionDef.getAttribute(\"Name\")}(${parameters.map(para => para.getAttribute(\"Name\")).join(\", \")})`,\n              type: \"link\",\n              // href:  \"microsoft://\" + ea.getAttribute(\"Name\")                                                                 \n            };\n            return child\n          }))        \n        }\n      }\n    }\n    \n    \n    \n    if (json['@odata.context']) {\n      var contextPath = new URL(json[\"@odata.context\"]).hash.replace(/^#/,\"\")\n      await addContentsFromType(contextPath)\n      \n    } else {\n      await addContentsFromType(this.path) // maybe the path itselve is already a type?\n    }\n    \n    \n    \n    if (result.contents.find(ea => ea.name == \"children\")) {\n      var children = await this.apiJSON(\"GET\", this.path + \"/children\")\n      if (children && children.value) {\n        \n        result.contents.push(...children.value.map(ea => {\n            var child = ({\n              name: ea.name,\n              type: \"link\",\n              //href: \"microsoft://me/drive/items/\" + ea.id \n            })\n            \n            child.href = \"microsoft://\" + this.path.replace(/[\\/:]*$/,\"\") + (this.path.match(/\\:/)  ?  \"/\" : \":/\") + ea.name + \":\"\n\n            if (ea.folder) {\n              child.type = \"directory\"\n            } else if (ea.file) {\n              child.type = \"file\"\n              if (ea.file.mimeType.match(\"text/\") || ea.file.mimeType.match(\"image/\")) {\n                // guess... I want to see the content\n                child.href += \"/content\"\n              }\n            }\n            return child\n          }))\n      }      \n    }\n    \n    \n    return new Response(JSON.stringify(result, undefined, 2))\n  }\n\n}\n\n\n\nPolymorphicIdentifier.register(MicrosoftScheme)"],"mappings":"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"}