{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/src/client/fetch.js"],"names":["installProxyFetch","focalStorage","System","import","default","mounts","getItem","self","lively4fetchHandlers","filter","ea","isProxyFetch","proxyRequest","url","options","console","log","method","originalFetch","mode","cache","headers","redirect","referrer","credentials","body","push","handle","request","toString","m","match","result","Response","JSON","stringify","name","contents","mountPoint","rest","json","newMounts","parse","e","setItem","status","proxy","path","base","Error","lively"],"mappings":"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","file":"fetch.js","sourcesContent":["export async function installProxyFetch() {\n  var focalStorage = (await System.import(\"src/external/focalStorage.js\")).default\n  \n  var mounts = await focalStorage.getItem(\"lively4mounts\")\n  \n  if (!mounts) return \n  \n  self.lively4fetchHandlers = self.lively4fetchHandlers.filter(ea => !ea.isProxyFetch);\n  \n  async function proxyRequest(url, options={}) {\n    console.log(\"PROXY reqest: \" + options.method + \" \" + url)\n    return self.originalFetch(url, {\n        mode: options.mode,\n        cache: options.cache,\n        method: options.method,\n        headers: options.headers,\n        redirect: options.redirect,\n        referrer: options.referrer,\n        credentials: options.credentials,\n        body: options.body && await options.body\n      })\n  }\n  \n  self.lively4fetchHandlers.push({\n    isProxyFetch: true,\n    handle(request, options) {\n      var url = (request.url || request).toString()\n      var method = \"GET\"\n      if (options && options.method) method = options.method;\n      var m = url.match(/^https?:\\/\\/lively4(\\/[^/]*)(\\/.*)?/)\n      if (m) {\n        if (m[1] == \"/\") {\n          return {\n              result: new Response(JSON.stringify({\n                name: \"root\",\n                contents: []\n              }, null, 2))\n          }\n        }\n        \n        console.log(\"proxy fetch \" + url)\n        var mountPoint = m[1]\n        var rest = m[2]\n       \n        if (mountPoint == \"/sys\" && rest == \"/mounts\") {\n          if (method == \"GET\") {\n            return {\n              result: new Response(JSON.stringify(mounts, null, 2))\n            }            \n          } else if (method == \"PUT\") {\n            \n            return {\n              result: (async () => {\n                try {\n                  var json = options.body\n                  var newMounts = JSON.parse(json)\n                } catch(e) {\n                  // json could not be parsed\n                }\n                if (newMounts) {\n                  mounts = newMounts\n                  await focalStorage.setItem(\"lively4mounts\", mounts)\n                  return new Response(\"updated mounts\", {status: 200})\n                } else {\n                  return new Response(\"could not parse json: \" + json, {status: 500})\n                }\n              })()\n            }\n          }\n        }\n        \n        for (var proxy of mounts.filter(ea => ea.name == \"http\")) {\n          if (mountPoint == proxy.path) {\n            if (!proxy.options || !proxy.options.base) \n              throw new Error(\"options.base is missing in mount config for \" + mountPoint)\n            return {\n              result: proxyRequest(proxy.options.base + rest, options)\n            }  \n          }\n        }\n        // give SWX a chance to handle POID requests...\n        // return  {\n        //   result: new Response(\"Could not handle \" + url)\n        // }          \n      }\n    }\n  })\n}\n\nif (self.lively) {\n  // dev time\n  installProxyFetch()\n}\n\n// installProxyFetch()\n"]}