{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/src/client/protocols/microsoft.js"],"names":["RestScheme","PolymorphicIdentifier","parseQuery","getDeepProperty","OAuth2","MicrosoftScheme","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"],"mappings":"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","file":"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)"]}