diff --git a/Caddyfile b/Caddyfile index 339ee9e..816d444 100644 --- a/Caddyfile +++ b/Caddyfile @@ -8,5 +8,5 @@ encode zstd gzip file_server root * /dist - # try_files {path} /index.html + try_files {path} /index.html } diff --git a/caddy.Dockerfile b/caddy.Dockerfile index b1841b3..e42ba97 100644 --- a/caddy.Dockerfile +++ b/caddy.Dockerfile @@ -1,20 +1,10 @@ -FROM caddy +FROM caddy:2.4.0 WORKDIR / COPY ./dist /dist COPY Caddyfile /Caddyfile -#RUN printf '\n\ -#dash.fluence.dev {\n\ -# try_files /bundle/{path} /bundle/index.html?{query}&p={path}\n\ -#}\n\ -#'\ -#>> /tmp/hello - -#RUN echo 'try_files /bundle/{path} /bundle/index.html?{query}&p={path}' > Caddyfile - VOLUME /data -#CMD ["caddy", "file-server", "--root", "/bundle", "--browse"] CMD ["caddy", "run", "--config", "/Caddyfile"] # DO NOT FORGET TO USE VOLUME OR CERTBOT WILL BAN: -v caddy_data:/data diff --git a/env/env.json b/env/env.json new file mode 100644 index 0000000..c3af7be --- /dev/null +++ b/env/env.json @@ -0,0 +1,4 @@ +{ + "nodes": [], + "logLevel": "error" +} diff --git a/index.html b/index.html index 3b2efd7..ac0dd34 100644 --- a/index.html +++ b/index.html @@ -24,6 +24,7 @@ gtag('js', new Date()); gtag('config', 'G-6ZTQKE1D4L'); +
diff --git a/package-lock.json b/package-lock.json index 9e70b18..0cf75a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -998,15 +998,15 @@ } }, "@fluencelabs/aqua-cli": { - "version": "0.1.6-149", - "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.6-149.tgz", - "integrity": "sha512-CTKZKYLTapmuTh6J2e9rhwqs2SpifhfAqabYTwdWPuOER+W9w+7RY/rRvy9kaENT8i1fQsmY/5zTrbyUHfOPIQ==", + "version": "0.1.7-153", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.7-153.tgz", + "integrity": "sha512-/4z8QbA9RJZMaRIjy+Q1ZAiT8HIHONUGOG87YWaRb9O1uBHY1o/Onorx/kIlSXAF8+0N0EI/CVkhWWIrYMy9HQ==", "dev": true }, "@fluencelabs/aqua-lib": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.1.6.tgz", - "integrity": "sha512-SMl6eFvI/6DIMu5RsLk5Uy3HIvy/CIkvbIhSYAba/UMVMc/Yszm6L6FvNXp5R/wogRXtFdZ3WCF7NVPgyiYmRA==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.1.5.tgz", + "integrity": "sha512-0f5Lo9NT4ZvN+S/oGYiNxLUtpZsTfDy2qL0D4SFPVoj2+YPPK2PKSzZnja2clfM1KHHP6kT6Jd20sHVBIxBMtw==", "dev": true }, "@fluencelabs/avm": { diff --git a/package.json b/package.json index ab070e6..f5e3373 100644 --- a/package.json +++ b/package.json @@ -39,8 +39,8 @@ "devDependencies": { "@babel/core": "^7.11.6", "@babel/preset-env": "^7.11.5", - "@fluencelabs/aqua-cli": "^0.1.6-149", - "@fluencelabs/aqua-lib": "^0.1.6", + "@fluencelabs/aqua-cli": "^0.1.7-153", + "@fluencelabs/aqua-lib": "^0.1.5", "@types/yup": "^0.29.11", "babel-loader": "^8.1.0", "chokidar-cli": "^2.1.0", diff --git a/src/_aqua/app.js b/src/_aqua/app.js index c5ea878..6af7308 100644 --- a/src/_aqua/app.js +++ b/src/_aqua/app.js @@ -3,84 +3,13 @@ * This file is auto-generated. Do not edit manually: changes may be erased. * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.1.6-149 + * Aqua version: 0.1.7-153 * */ import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable'; -export async function collectServiceInterfaces(client, peer, services) { - let request; - const promise = new Promise((resolve, reject) => { - request = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` -(xor - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "peer") [] peer) - ) - (call %init_peer_id% ("getDataSrv" "services") [] services) - ) - (fold services srv - (par - (seq - (seq - (seq - (call -relay- ("op" "identity") []) - (xor - (call peer ("srv" "get_interface") [srv.$.id!] iface) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "identity") []) - ) - ) - ) - (call -relay- ("op" "identity") []) - ) - (call %init_peer_id% ("event" "collectServiceInterface") [peer srv.$.id! iface]) - ) - (next srv) - ) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) -) - - `, - ) - .configHandler((h) => { - h.on('getDataSrv', '-relay-', () => { - return client.relayPeerId; - }); - h.on('getDataSrv', 'peer', () => {return peer;}); -h.on('getDataSrv', 'services', () => {return services;}); - - h.onEvent('errorHandlingSrv', 'error', (args) => { - // assuming error is the single argument - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject('Request timed out for collectServiceInterfaces'); - }) - .build(); - }); - await client.initiateFlow(request); - return Promise.race([promise, Promise.resolve()]); -} - - - export async function askAllAndSend(client, peer) { let request; const promise = new Promise((resolve, reject) => { @@ -97,7 +26,7 @@ export async function askAllAndSend(client, peer) { (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "peer") [] peer) ) - (call -relay- ("op" "identity") []) + (call -relay- ("op" "noop") []) ) (xor (seq @@ -111,42 +40,16 @@ export async function askAllAndSend(client, peer) { (call peer ("srv" "list") [] services) ) (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "identity") []) + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) ) ) ) - (call -relay- ("op" "identity") []) - ) - (fold services srv - (par - (seq - (seq - (seq - (call -relay- ("op" "identity") []) - (xor - (call peer ("srv" "get_interface") [srv.$.id!] iface) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - (call -relay- ("op" "identity") []) - ) - ) - ) - (call -relay- ("op" "identity") []) - ) - (call %init_peer_id% ("event" "collectServiceInterface") [peer srv.$.id! iface]) - ) - (next srv) - ) + (call -relay- ("op" "noop") []) ) + (call %init_peer_id% ("event" "all_info") [peer ident services blueprints modules]) ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) ) `, @@ -192,7 +95,7 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId) ) (call %init_peer_id% ("getDataSrv" "clientId") [] clientId) ) - (call -relay- ("op" "identity") []) + (call -relay- ("op" "noop") []) ) (xor (seq @@ -203,7 +106,7 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId) (seq (call n ("kad" "neighborhood") [clientId false] neighbors2) (fold neighbors2 n2 - (par + (seq (seq (xor (seq @@ -218,60 +121,31 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId) ) (seq (seq - (call -relay- ("op" "identity") []) + (call -relay- ("op" "noop") []) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) ) - (call -relay- ("op" "identity") []) - ) - ) - (fold services srv - (par - (seq - (xor - (call n2 ("srv" "get_interface") [srv.$.id!] iface) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - (call -relay- ("op" "identity") []) - ) - ) - (call n ("event" "collectServiceInterface") [n2 srv.$.id! iface]) - ) - (next srv) + (call -relay- ("op" "noop") []) ) ) + (call n ("event" "all_info") [n2 ident services blueprints modules]) ) (next n2) ) ) ) (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - (call -relay- ("op" "identity") []) + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) ) ) (next n) ) ) ) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) - ) - (call -relay- ("op" "identity") []) - ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) ) - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) - ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) ) `, @@ -312,203 +186,122 @@ export async function getAll(client, relayPeerId, knownPeers) { (seq (seq (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "relayPeerId") [] relayPeerId) + ) + (call %init_peer_id% ("getDataSrv" "knownPeers") [] knownPeers) + ) + (par + (par (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "relayPeerId") [] relayPeerId) - ) - (call %init_peer_id% ("getDataSrv" "knownPeers") [] knownPeers) - ) - (par (seq + (seq + (call -relay- ("op" "noop") []) + (xor + (seq + (seq + (seq + (call relayPeerId ("peer" "identify") [] ident) + (call relayPeerId ("dist" "list_blueprints") [] blueprints) + ) + (call relayPeerId ("dist" "list_modules") [] modules) + ) + (call relayPeerId ("srv" "list") [] services) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (call %init_peer_id% ("event" "all_info") [relayPeerId ident services blueprints modules]) + ) + (fold knownPeers peer + (par (seq (seq - (call -relay- ("op" "identity") []) + (seq + (call -relay- ("op" "noop") []) + (xor + (seq + (seq + (seq + (call peer ("peer" "identify") [] ident0) + (call peer ("dist" "list_blueprints") [] blueprints0) + ) + (call peer ("dist" "list_modules") [] modules0) + ) + (call peer ("srv" "list") [] services0) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (call %init_peer_id% ("event" "all_info") [peer ident0 services0 blueprints0 modules0]) + ) + (next peer) + ) + ) + ) + (seq + (call -relay- ("op" "noop") []) + (xor + (seq + (call relayPeerId ("kad" "neighborhood") [%init_peer_id% false] neighbors) + (fold neighbors n + (par (xor (seq - (seq - (seq - (call relayPeerId ("peer" "identify") [] ident) - (call relayPeerId ("dist" "list_blueprints") [] blueprints) - ) - (call relayPeerId ("dist" "list_modules") [] modules) - ) - (call relayPeerId ("srv" "list") [] services) - ) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "identity") []) - ) - ) - ) - (call -relay- ("op" "identity") []) - ) - (fold services srv - (par - (seq - (seq - (seq - (call -relay- ("op" "identity") []) - (xor - (call relayPeerId ("srv" "get_interface") [srv.$.id!] iface) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - (call -relay- ("op" "identity") []) - ) - ) - ) - (call -relay- ("op" "identity") []) - ) - (call %init_peer_id% ("event" "collectServiceInterface") [relayPeerId srv.$.id! iface]) - ) - (next srv) - ) - ) - ) - (fold knownPeers peer - (par - (seq - (seq - (seq - (call -relay- ("op" "identity") []) - (xor + (call n ("kad" "neighborhood") [%init_peer_id% false] neighbors2) + (fold neighbors2 n2 (seq (seq - (seq - (call peer ("peer" "identify") [] ident0) - (call peer ("dist" "list_blueprints") [] blueprints0) - ) - (call peer ("dist" "list_modules") [] modules0) - ) - (call peer ("srv" "list") [] services0) - ) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - (call -relay- ("op" "identity") []) - ) - ) - ) - (call -relay- ("op" "identity") []) - ) - (fold services0 srv0 - (par - (seq - (seq - (seq - (call -relay- ("op" "identity") []) (xor - (call peer ("srv" "get_interface") [srv0.$.id!] iface0) (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) - ) - (call -relay- ("op" "identity") []) - ) - ) - ) - (call -relay- ("op" "identity") []) - ) - (call %init_peer_id% ("event" "collectServiceInterface") [peer srv0.$.id! iface0]) - ) - (next srv0) - ) - ) - ) - (next peer) - ) - ) - ) - ) - (call -relay- ("op" "identity") []) - ) - (xor - (seq - (call relayPeerId ("kad" "neighborhood") [%init_peer_id% false] neighbors) - (fold neighbors n - (par - (xor - (seq - (call n ("kad" "neighborhood") [%init_peer_id% false] neighbors2) - (fold neighbors2 n2 - (par - (seq - (xor - (seq - (seq - (seq - (call n2 ("peer" "identify") [] ident1) - (call n2 ("dist" "list_blueprints") [] blueprints1) - ) - (call n2 ("dist" "list_modules") [] modules1) - ) - (call n2 ("srv" "list") [] services1) - ) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) - ) - (call -relay- ("op" "identity") []) - ) - ) - (fold services1 srv1 - (par - (seq - (xor - (call n2 ("srv" "get_interface") [srv1.$.id!] iface1) (seq (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6]) + (call n2 ("peer" "identify") [] ident1) + (call n2 ("dist" "list_blueprints") [] blueprints1) ) - (call -relay- ("op" "identity") []) + (call n2 ("dist" "list_modules") [] modules1) ) + (call n2 ("srv" "list") [] services1) + ) + (seq + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) + (call -relay- ("op" "noop") []) ) - (call n ("event" "collectServiceInterface") [n2 srv1.$.id! iface1]) ) - (next srv1) + (call n ("event" "all_info") [n2 ident1 services1 blueprints1 modules1]) ) + (next n2) ) ) - (next n2) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) ) ) - ) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 7]) - ) - (call -relay- ("op" "identity") []) + (next n) ) ) - (next n) ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) ) ) - (seq - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 8]) - ) - (call -relay- ("op" "identity") []) - ) ) ) - (seq - (call -relay- ("op" "identity") []) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 9]) - ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6]) ) `, diff --git a/src/index.js b/src/index.js index 326aa85..2bc86a4 100644 --- a/src/index.js +++ b/src/index.js @@ -19,6 +19,7 @@ import 'css-spinners/dist/all.min.css'; import './main.css'; // eslint-disable-next-line import/no-extraneous-dependencies import log from 'loglevel'; +import Multiaddr from 'multiaddr'; import { dev, krasnodar } from '@fluencelabs/fluence-network-environment'; import { createClient, @@ -33,12 +34,83 @@ import * as serviceWorker from './serviceWorker'; import { interfaceInfo, peerInfo } from './types'; import { getAll } from './_aqua/app'; -const relayIdx = 3; +const defaultNetworkName = 'krasnodar'; -const relays = krasnodar; -// const relays = dev; +const defaultEnv = { + relays: krasnodar, + relayIdx: 3, + logLevel: 'error', +}; -function genFlags(peerId) { +async function loadScript(script) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', script.src); + xhr.onreadystatechange = function () { + if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { + resolve(xhr.responseText); + } + }; + xhr.onerror = reject; + xhr.onabort = reject; + xhr.send(); + }); +} + +function isMultiaddr(multiaddr) { + try { + Multiaddr(multiaddr); + return true; + } catch (error) { + return false; + } +} + +async function initEnvironment() { + try { + const script = document.getElementById('env'); + if (!script) { + console.log("Couldn't load environment, falling back to default (${defaultNetworkName})"); + return defaultEnv; + } + + const scriptContent = await loadScript(script); + const envWrapper = JSON.parse(scriptContent); + + const res = { ...defaultEnv }; + + const data = envWrapper ? envWrapper.nodes : []; + if (data.length === 0) { + console.log(`Environment is empty, falling back to default (${defaultNetworkName})`); + } else { + data.forEach((element) => { + if (!element.multiaddr) { + console.error('multiaddr field is missing for ', element); + } + if (!element.peerId) { + console.error('peerId field is missing for ', element); + } + if (!isMultiaddr(element.multiaddr)) { + console.error(`Value ${element.multiaddr} is not a correct multiaddr`); + } + }); + res.relays = data; + res.relayIdx = 0; + } + + if (envWrapper.logLevel !== undefined) { + res.logLevel = envWrapper.logLevel; + } + + return res; + } catch (error) { + console.error("Couldn't parse environment, error: ", error); + } + + return defaultEnv; +} + +function genFlags(peerId, relays, relayIdx) { return { peerId, relayId: relays[relayIdx].peerId, @@ -47,10 +119,10 @@ function genFlags(peerId) { } (async () => { - setLogLevel('ERROR'); - + const { relays, relayIdx, logLevel } = await initEnvironment(); + setLogLevel(logLevel); const pid = await generatePeerId(); - const flags = genFlags(pid.toB58String()); + const flags = genFlags(pid.toB58String(), relays, relayIdx); console.log(`connect with client: ${pid.toB58String()}`); // If the relay is ever changed, an event shall be sent to elm diff --git a/webpack.config.js b/webpack.config.js index a7f0676..b6ab174 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -40,6 +40,9 @@ var common = { { from: 'favicon.ico', }, + { + from: './env/*.*', + }, ], }), ],