From cf0e6ebd4f9a44e8a8909ebd3d840f13a047dd0c Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 5 Sep 2021 10:11:34 +0200 Subject: [PATCH 1/8] Hello World running at Desktop App --- Client/WebServer/index.html | 9 +- Client/httpInterface.js | 5 - Desktop/DesktopApp.js | 24 +- Desktop/UI/AppLoader.js | 190 ++ Desktop/WebServer/Fonts/Saira-Condensed.woff2 | Bin 0 -> 17000 bytes Desktop/WebServer/Fonts/Saira.woff2 | Bin 0 -> 17096 bytes Desktop/WebServer/Fonts/segoeui.woff | Bin 0 -> 22720 bytes Desktop/WebServer/Images/favicon.ico | Bin 0 -> 15086 bytes Desktop/WebServer/css/main.css | 34 + Desktop/WebServer/index.html | 52 + Desktop/WebServer/require.js | 2145 +++++++++++++++++ Desktop/httpInterface.js | 24 +- EnvironmentForDebug.js | 1 + package-lock.json | 33 + package.json | 2 + runDesktop.js | 4 +- 16 files changed, 2504 insertions(+), 19 deletions(-) create mode 100644 Desktop/UI/AppLoader.js create mode 100644 Desktop/WebServer/Fonts/Saira-Condensed.woff2 create mode 100644 Desktop/WebServer/Fonts/Saira.woff2 create mode 100644 Desktop/WebServer/Fonts/segoeui.woff create mode 100644 Desktop/WebServer/Images/favicon.ico create mode 100644 Desktop/WebServer/css/main.css create mode 100644 Desktop/WebServer/index.html create mode 100644 Desktop/WebServer/require.js diff --git a/Client/WebServer/index.html b/Client/WebServer/index.html index c8e1dbf2e..663111b2f 100644 --- a/Client/WebServer/index.html +++ b/Client/WebServer/index.html @@ -2,7 +2,7 @@ - Superalgos + Superalgos Platform @@ -18,11 +18,8 @@ - - - -
diff --git a/Client/httpInterface.js b/Client/httpInterface.js index eb11587a5..537bd72e3 100644 --- a/Client/httpInterface.js +++ b/Client/httpInterface.js @@ -1165,11 +1165,6 @@ exports.newHttpInterface = function newHttpInterface() { SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse) } break - case 'favicon.ico': // This means the Scripts folder. - { - SA.projects.foundations.utilities.httpResponses.respondWithImage(global.env.PATH_TO_CLIENT + 'WebServer/Images/' + 'favicon.ico', httpResponse) - } - break case 'WebServer': // This means the WebServer folder. { SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + 'WebServer/' + requestPath[2], httpResponse) diff --git a/Desktop/DesktopApp.js b/Desktop/DesktopApp.js index 5dfbc3ea6..d2bb686db 100644 --- a/Desktop/DesktopApp.js +++ b/Desktop/DesktopApp.js @@ -11,11 +11,29 @@ exports.newDesktopApp = function newDesktopApp() { let socialGraphService = NT.projects.network.modules.socialGraph.newSocialGraph() await socialGraphService.initialize() */ + /* - Let's start the Network Interfaces + This is the Web Sockets client that interacts with the Superalgos Network. */ - DK.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient() - await DK.webSocketsClient.initialize() + //DK.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient() + //await DK.webSocketsClient.initialize() + + /* These are the Network Interfaces by which the UI interacts with the Desktop App.*/ + //let WEB_SOCKETS_INTERFACE = require('./webSocketsInterface.js') + let HTTP_INTERFACE = require('./httpInterface.js') + + /* + WEB_SOCKETS_INTERFACE = WEB_SOCKETS_INTERFACE.newWebSocketsInterface() + WEB_SOCKETS_INTERFACE.initialize() + console.log('Web Sockets Interface ....................................... Listening at port ' + global.env.CLIENT_WEB_SOCKETS_INTERFACE_PORT) + */ + + HTTP_INTERFACE = HTTP_INTERFACE.newHttpInterface() + HTTP_INTERFACE.initialize() + console.log('Http Interface .............................................. Listening at port ' + global.env.DESKTOP_HTTP_INTERFACE_PORT) + + return + let queryMessage let query diff --git a/Desktop/UI/AppLoader.js b/Desktop/UI/AppLoader.js new file mode 100644 index 000000000..b17587624 --- /dev/null +++ b/Desktop/UI/AppLoader.js @@ -0,0 +1,190 @@ +let postLoader + +function newAppLoader() { + const MODULE_NAME = 'App Loader' + const INFO_LOG = false + const ERROR_LOG = true + const logger = newWebDebugLog() + + + let thisObject = { + loadModules: loadModules + } + + return thisObject + + async function loadModules() { + try { + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> Entering function.') } + + let plotters + let modulesArray = [] + + plotters = defaultPlotters() + + modulesArray = modulesArray.concat([ + + 'Globals.js', + 'Workspace.js', + + 'Files/SingleFile.js', + 'Files/FileCloud.js', + 'Files/MarketFiles.js', + 'Files/DailyFiles.js', + 'Files/FileCursor.js', + 'Files/FileSequence.js', + 'Files/FileStorage.js', + + 'EventsServerClient.js', + + 'LegacyPlotter.js', + 'PlotterPanel.js', + + 'VideoRecorder.js', + 'ProductStorage.js', + 'Canvas.js', + 'EventHandler.js', + 'Frame.js', + 'Animation.js', + 'Container.js', + 'Utilities.js', + 'AppPostLoader.js' + ]) + + modulesArray = modulesArray.concat(plotters) + + functionLibraries() + + function functionLibraries() { + let url = 'ListFunctionLibraries' + httpRequest(undefined, url, onResponse) + + function onResponse(err, fileList) { + let urlArray = [] + let fileArray = JSON.parse(fileList) + for (let i = 0; i < fileArray.length; i++) { + let item = fileArray[i] + + project = item[0] + fileName = item[1] + urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Function-Libraries' + '/' + fileName) + } + + modulesArray = modulesArray.concat(urlArray) + utilities() + } + } + + function utilities() { + let url = 'ListUtilitiesFiles' + httpRequest(undefined, url, onResponse) + + function onResponse(err, fileList) { + let urlArray = [] + let fileArray = JSON.parse(fileList) + for (let i = 0; i < fileArray.length; i++) { + let item = fileArray[i] + + project = item[0] + fileName = item[1] + urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Utilities' + '/' + fileName) + } + + modulesArray = modulesArray.concat(urlArray) + globals() + } + } + + function globals() { + let url = 'ListGlobalFiles' + httpRequest(undefined, url, onResponse) + + function onResponse(err, fileList) { + let urlArray = [] + let fileArray = JSON.parse(fileList) + for (let i = 0; i < fileArray.length; i++) { + let item = fileArray[i] + + project = item[0] + fileName = item[1] + urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Globals' + '/' + fileName) + } + + modulesArray = modulesArray.concat(urlArray) + spaces() + } + } + + function spaces() { + let url = 'ListSpaceFiles' + httpRequest(undefined, url, onResponse) + + function onResponse(err, fileList) { + let urlArray = [] + let fileArray = JSON.parse(fileList) + for (let i = 0; i < fileArray.length; i++) { + let path = fileArray[i] + urlArray.push('Projects' + '/' + path) + } + + modulesArray = modulesArray.concat(urlArray) + downloadIncludedFiles() + } + } + + function downloadIncludedFiles() { + + let downloadedCounter = 0 + + for (let i = 0; i < modulesArray.length; i++) { + let path = modulesArray[i] + + REQUIREJS([path], onRequired) + + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> Module Requested.') } + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> path = ' + path) } + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> total requested = ' + (i + 1)) } + + function onRequired(pModule) { + try { + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Entering function.') } + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Module Downloaded.') } + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> path = ' + path) } + + downloadedCounter++ + + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> downloadedCounter = ' + downloadedCounter) } + + if (downloadedCounter === modulesArray.length) { + if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Starting Advanced Algos Platform.') } + setTimeout(() => { + postLoader = newAppPostLoader() + postLoader.start() + }, 500) + + } + } catch (err) { + if (ERROR_LOG === true) { logger.write('[ERROR] loadModules -> onRequired -> err = ' + err.stack) } + } + } + } + } + + } catch (err) { + if (ERROR_LOG === true) { logger.write('[ERROR] loadModules -> err = ' + err.stack) } + } + } + + function defaultPlotters() { + return [ + 'Plotters/Foundations/Candles/Plotters-Candles-Volumes/Candles.js', + 'Plotters/Foundations/Candles/Plotters-Candles-Volumes/CandlePanel.js', + 'Plotters/Foundations/Candles/Plotters-Candles-Volumes/Volumes.js', + 'Plotters/Foundations/Candles/Plotters-Candles-Volumes/VolumePanel.js', + 'Plotters/Foundations/Bollinger/Plotters-Bollinger-Bands/BollingerBands.js', + 'Plotters/Foundations/Bollinger/Plotters-Bollinger-Bands/BollingerBandsPanel.js', + 'Plotters/Foundations/Bollinger/Plotters-Bollinger-Bands/PercentageBandwidth.js' + ] + } +} + diff --git a/Desktop/WebServer/Fonts/Saira-Condensed.woff2 b/Desktop/WebServer/Fonts/Saira-Condensed.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8a7ff57d055bb5660e8c344870f91c225bfa3fa2 GIT binary patch literal 17000 zcmV(@K-Rx^Pew8T0RR91077U05dZ)H0G03n073--0RR9100000000000000000000 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 BtqcGF literal 0 HcmV?d00001 diff --git a/Desktop/WebServer/Images/favicon.ico b/Desktop/WebServer/Images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cd2c5d6afbe08d2ee060535f131cc21ad521575c GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/Desktop/WebServer/css/main.css b/Desktop/WebServer/css/main.css new file mode 100644 index 000000000..5e3eedde8 --- /dev/null +++ b/Desktop/WebServer/css/main.css @@ -0,0 +1,34 @@ +/* latin */ +@font-face { + font-family: 'Saira'; + font-style: normal; + font-weight: 300; + src: local('Saira Light'), local('Saira-Light'), url(Fonts/Saira.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + } + /* latin */ + @font-face { + font-family: 'Saira Condensed'; + font-style: normal; + font-weight: 300; + src: local('Saira Condensed Light'), local('SairaCondensed-Light'), url(Fonts/Saira-Condensed.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + } + + @font-face { + font-family: segoeui; + src: url(Fonts/segoeui.woff) format('woff'); + font-weight: normal; + font-style: normal; + } + + kbd { + padding: 2px 8px; + font-size: 125%; + font-weight: 500; + color: #000; + background-color: #bcd643; + border-radius: 5px; + border-style: outset; + border-width: 1px; + } \ No newline at end of file diff --git a/Desktop/WebServer/index.html b/Desktop/WebServer/index.html new file mode 100644 index 000000000..afeb95d14 --- /dev/null +++ b/Desktop/WebServer/index.html @@ -0,0 +1,52 @@ + + + + + Superalgos Desktop + + + + + + + + + + + Hello World! +
+
+ + + + + \ No newline at end of file diff --git a/Desktop/WebServer/require.js b/Desktop/WebServer/require.js new file mode 100644 index 000000000..f9476f532 --- /dev/null +++ b/Desktop/WebServer/require.js @@ -0,0 +1,2145 @@ +/** vim: et:ts=4:sw=4:sts=4 + * @license RequireJS 2.3.5 Copyright jQuery Foundation and other contributors. + * Released under MIT license, https://github.com/REQUIREJS/REQUIREJS/blob/master/LICENSE + */ +//Not using strict: uneven strict support in browsers, #392, and causes +//problems with REQUIREJS.exec()/transpiler plugins that may not be strict. +/*jslint regexp: true, nomen: true, sloppy: true */ +/*global window, navigator, document, importScripts, setTimeout, opera */ + +var REQUIREJS, REQUIRE, DEFINE; +(function (global, setTimeout) { + var req, s, head, baseElement, dataMain, src, + interactiveScript, currentlyAddingScript, mainScript, subPath, + version = '2.3.5', + commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/mg, + cjsRequireRegExp = /[^.]\s*REQUIRE\s*\(\s*["']([^'"\s]+)["']\s*\)/g, + jsSuffixRegExp = /\.js$/, + currDirRegExp = /^\.\//, + op = Object.prototype, + ostring = op.toString, + hasOwn = op.hasOwnProperty, + isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document), + isWebWorker = !isBrowser && typeof importScripts !== 'undefined', + //PS3 indicates loaded and complete, but need to wait for complete + //specifically. Sequence is 'loading', 'loaded', execution, + // then 'complete'. The UA check is unfortunate, but not sure how + //to feature test w/o causing perf issues. + readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? + /^complete$/ : /^(complete|loaded)$/, + defContextName = '_', + //Oh the tragedy, detecting opera. See the usage of isOpera for reason. + isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', + contexts = {}, + cfg = {}, + globalDefQueue = [], + useInteractive = false; + + //Could match something like ')//comment', do not lose the prefix to comment. + function commentReplace(match, singlePrefix) { + return singlePrefix || ''; + } + + function isFunction(it) { + return ostring.call(it) === '[object Function]'; + } + + function isArray(it) { + return ostring.call(it) === '[object Array]'; + } + + /** + * Helper function for iterating over an array. If the func returns + * a true value, it will break out of the loop. + */ + function each(ary, func) { + if (ary) { + var i; + for (i = 0; i < ary.length; i += 1) { + if (ary[i] && func(ary[i], i, ary)) { + break; + } + } + } + } + + /** + * Helper function for iterating over an array backwards. If the func + * returns a true value, it will break out of the loop. + */ + function eachReverse(ary, func) { + if (ary) { + var i; + for (i = ary.length - 1; i > -1; i -= 1) { + if (ary[i] && func(ary[i], i, ary)) { + break; + } + } + } + } + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + function getOwn(obj, prop) { + return hasProp(obj, prop) && obj[prop]; + } + + /** + * Cycles over properties in an object and calls a function for each + * property value. If the function returns a truthy value, then the + * iteration is stopped. + */ + function eachProp(obj, func) { + var prop; + for (prop in obj) { + if (hasProp(obj, prop)) { + if (func(obj[prop], prop)) { + break; + } + } + } + } + + /** + * Simple function to mix in properties from source into target, + * but only if target does not already have a property of the same name. + */ + function mixin(target, source, force, deepStringMixin) { + if (source) { + eachProp(source, function (value, prop) { + if (force || !hasProp(target, prop)) { + if (deepStringMixin && typeof value === 'object' && value && + !isArray(value) && !isFunction(value) && + !(value instanceof RegExp)) { + + if (!target[prop]) { + target[prop] = {}; + } + mixin(target[prop], value, force, deepStringMixin); + } else { + target[prop] = value; + } + } + }); + } + return target; + } + + //Similar to Function.prototype.bind, but the 'this' object is specified + //first, since it is easier to read/figure out what 'this' will be. + function bind(obj, fn) { + return function () { + return fn.apply(obj, arguments); + }; + } + + function scripts() { + return document.getElementsByTagName('script'); + } + + function defaultOnError(err) { + throw err; + } + + //Allow getting a global that is expressed in + //dot notation, like 'a.b.c'. + function getGlobal(value) { + if (!value) { + return value; + } + var g = global; + each(value.split('.'), function (part) { + g = g[part]; + }); + return g; + } + + /** + * Constructs an error with a pointer to an URL with more information. + * @param {String} id the error ID that maps to an ID on a web page. + * @param {String} message human readable error. + * @param {Error} [err] the original error, if there is one. + * + * @returns {Error} + */ + function makeError(id, msg, err, requireModules) { + var e = new Error(msg + '\nhttp://REQUIREJS.org/docs/errors.html#' + id); + e.requireType = id; + e.requireModules = requireModules; + if (err) { + e.originalError = err; + } + return e; + } + + if (typeof DEFINE !== 'undefined') { + //If a DEFINE is already in play via another AMD loader, + //do not overwrite. + return; + } + + if (typeof REQUIREJS !== 'undefined') { + if (isFunction(REQUIREJS)) { + //Do not overwrite an existing REQUIREJS instance. + return; + } + cfg = REQUIREJS; + REQUIREJS = undefined; + } + + //Allow for a REQUIRE config object + if (typeof REQUIRE !== 'undefined' && !isFunction(REQUIRE)) { + //assume it is a config object. + cfg = REQUIRE; + REQUIRE = undefined; + } + + function newContext(contextName) { + var inCheckLoaded, Module, context, handlers, + checkLoadedTimeoutId, + config = { + //Defaults. Do not set a default for map + //config to speed up normalize(), which + //will run faster if there is no default. + waitSeconds: 60, + baseUrl: './', + paths: {}, + bundles: {}, + pkgs: {}, + shim: {}, + config: {} + }, + registry = {}, + //registry of just enabled modules, to speed + //cycle breaking code when lots of modules + //are registered, but not activated. + enabledRegistry = {}, + undefEvents = {}, + defQueue = [], + defined = {}, + urlFetched = {}, + bundlesMap = {}, + requireCounter = 1, + unnormalizedCounter = 1; + + /** + * Trims the . and .. from an array of path segments. + * It will keep a leading path segment if a .. will become + * the first path segment, to help with module name lookups, + * which act like paths, but can be remapped. But the end result, + * all paths that use this function should look normalized. + * NOTE: this method MODIFIES the input array. + * @param {Array} ary the array of path segments. + */ + function trimDots(ary) { + var i, part; + for (i = 0; i < ary.length; i++) { + part = ary[i]; + if (part === '.') { + ary.splice(i, 1); + i -= 1; + } else if (part === '..') { + // If at the start, or previous value is still .., + // keep them so that when converted to a path it may + // still work when converted to a path, even though + // as an ID it is less than ideal. In larger point + // releases, may be better to just kick out an error. + if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') { + continue; + } else if (i > 0) { + ary.splice(i - 1, 2); + i -= 2; + } + } + } + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @param {Boolean} applyMap apply the map config to the value. Should + * only be done if this normalization is for a dependency ID. + * @returns {String} normalized name + */ + function normalize(name, baseName, applyMap) { + var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, + foundMap, foundI, foundStarMap, starI, normalizedBaseParts, + baseParts = (baseName && baseName.split('/')), + map = config.map, + starMap = map && map['*']; + + //Adjust any relative paths. + if (name) { + name = name.split('/'); + lastIndex = name.length - 1; + + // If wanting node ID compatibility, strip .js from end + // of IDs. Have to do this here, and not in nameToUrl + // because node allows either .js or non .js to map + // to same file. + if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { + name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); + } + + // Starts with a '.' so need the baseName + if (name[0].charAt(0) === '.' && baseParts) { + //Convert baseName to array, and lop off the last part, + //so that . matches that 'directory' and not name of the baseName's + //module. For instance, baseName of 'one/two/three', maps to + //'one/two/three.js', but we want the directory, 'one/two' for + //this normalization. + normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); + name = normalizedBaseParts.concat(name); + } + + trimDots(name); + name = name.join('/'); + } + + //Apply map config if available. + if (applyMap && map && (baseParts || starMap)) { + nameParts = name.split('/'); + + outerLoop: for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join('/'); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = getOwn(map, baseParts.slice(0, j).join('/')); + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = getOwn(mapValue, nameSegment); + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break outerLoop; + } + } + } + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { + foundStarMap = getOwn(starMap, nameSegment); + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + // If the name points to a package's name, use + // the package main instead. + pkgMain = getOwn(config.pkgs, name); + + return pkgMain ? pkgMain : name; + } + + function removeScript(name) { + if (isBrowser) { + each(scripts(), function (scriptNode) { + if (scriptNode.getAttribute('data-requiremodule') === name && + scriptNode.getAttribute('data-requirecontext') === context.contextName) { + scriptNode.parentNode.removeChild(scriptNode); + return true; + } + }); + } + } + + function hasPathFallback(id) { + var pathConfig = getOwn(config.paths, id); + if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { + //Pop off the first array value, since it failed, and + //retry + pathConfig.shift(); + context.REQUIRE.undef(id); + + //Custom REQUIRE that does not do map translation, since + //ID is "absolute", already mapped/resolved. + context.makeRequire(null, { + skipMap: true + })([id]); + + return true; + } + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + /** + * Creates a module mapping that includes plugin prefix, module + * name, and path. If parentModuleMap is provided it will + * also normalize the name via REQUIRE.normalize() + * + * @param {String} name the module name + * @param {String} [parentModuleMap] parent module map + * for the module name, used to resolve relative names. + * @param {Boolean} isNormalized: is the ID already normalized. + * This is true if this call is done for a DEFINE() module ID. + * @param {Boolean} applyMap: apply the map config to the ID. + * Should only be true if this map is for a dependency. + * + * @returns {Object} + */ + function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { + var url, pluginModule, suffix, nameParts, + prefix = null, + parentName = parentModuleMap ? parentModuleMap.name : null, + originalName = name, + isDefine = true, + normalizedName = ''; + + //If no name, then it means it is a REQUIRE call, generate an + //internal name. + if (!name) { + isDefine = false; + name = '_@r' + (requireCounter += 1); + } + + nameParts = splitPrefix(name); + prefix = nameParts[0]; + name = nameParts[1]; + + if (prefix) { + prefix = normalize(prefix, parentName, applyMap); + pluginModule = getOwn(defined, prefix); + } + + //Account for relative paths if there is a base name. + if (name) { + if (prefix) { + if (isNormalized) { + normalizedName = name; + } else if (pluginModule && pluginModule.normalize) { + //Plugin is loaded, use its normalize method. + normalizedName = pluginModule.normalize(name, function (name) { + return normalize(name, parentName, applyMap); + }); + } else { + // If nested plugin references, then do not try to + // normalize, as it will not normalize correctly. This + // places a restriction on resourceIds, and the longer + // term solution is not to normalize until plugins are + // loaded and all normalizations to allow for async + // loading of a loader plugin. But for now, fixes the + // common uses. Details in #1131 + normalizedName = name.indexOf('!') === -1 ? + normalize(name, parentName, applyMap) : + name; + } + } else { + //A regular module. + normalizedName = normalize(name, parentName, applyMap); + + //Normalized name may be a plugin ID due to map config + //application in normalize. The map config values must + //already be normalized, so do not need to redo that part. + nameParts = splitPrefix(normalizedName); + prefix = nameParts[0]; + normalizedName = nameParts[1]; + isNormalized = true; + + url = context.nameToUrl(normalizedName); + } + } + + //If the id is a plugin id that cannot be determined if it needs + //normalization, stamp it with a unique ID so two matching relative + //ids that may conflict can be separate. + suffix = prefix && !pluginModule && !isNormalized ? + '_unnormalized' + (unnormalizedCounter += 1) : + ''; + + return { + prefix: prefix, + name: normalizedName, + parentMap: parentModuleMap, + unnormalized: !!suffix, + url: url, + originalName: originalName, + isDefine: isDefine, + id: (prefix ? + prefix + '!' + normalizedName : + normalizedName) + suffix + }; + } + + function getModule(depMap) { + var id = depMap.id, + mod = getOwn(registry, id); + + if (!mod) { + mod = registry[id] = new context.Module(depMap); + } + + return mod; + } + + function on(depMap, name, fn) { + var id = depMap.id, + mod = getOwn(registry, id); + + if (hasProp(defined, id) && + (!mod || mod.defineEmitComplete)) { + if (name === 'defined') { + fn(defined[id]); + } + } else { + mod = getModule(depMap); + if (mod.error && name === 'error') { + fn(mod.error); + } else { + mod.on(name, fn); + } + } + } + + function onError(err, errback) { + var ids = err.requireModules, + notified = false; + + if (errback) { + errback(err); + } else { + each(ids, function (id) { + var mod = getOwn(registry, id); + if (mod) { + //Set error on module, so it skips timeout checks. + mod.error = err; + if (mod.events.error) { + notified = true; + mod.emit('error', err); + } + } + }); + + if (!notified) { + req.onError(err); + } + } + } + + /** + * Internal method to transfer globalQueue items to this context's + * defQueue. + */ + function takeGlobalQueue() { + //Push all the globalDefQueue items into the context's defQueue + if (globalDefQueue.length) { + each(globalDefQueue, function(queueItem) { + var id = queueItem[0]; + if (typeof id === 'string') { + context.defQueueMap[id] = true; + } + defQueue.push(queueItem); + }); + globalDefQueue = []; + } + } + + handlers = { + 'REQUIRE': function (mod) { + if (mod.REQUIRE) { + return mod.REQUIRE; + } else { + return (mod.REQUIRE = context.makeRequire(mod.map)); + } + }, + 'exports': function (mod) { + mod.usingExports = true; + if (mod.map.isDefine) { + if (mod.exports) { + return (defined[mod.map.id] = mod.exports); + } else { + return (mod.exports = defined[mod.map.id] = {}); + } + } + }, + 'module': function (mod) { + if (mod.module) { + return mod.module; + } else { + return (mod.module = { + id: mod.map.id, + uri: mod.map.url, + config: function () { + return getOwn(config.config, mod.map.id) || {}; + }, + exports: mod.exports || (mod.exports = {}) + }); + } + } + }; + + function cleanRegistry(id) { + //Clean up machinery used for waiting modules. + delete registry[id]; + delete enabledRegistry[id]; + } + + function breakCycle(mod, traced, processed) { + var id = mod.map.id; + + if (mod.error) { + mod.emit('error', mod.error); + } else { + traced[id] = true; + each(mod.depMaps, function (depMap, i) { + var depId = depMap.id, + dep = getOwn(registry, depId); + + //Only force things that have not completed + //being defined, so still in the registry, + //and only if it has not been matched up + //in the module already. + if (dep && !mod.depMatched[i] && !processed[depId]) { + if (getOwn(traced, depId)) { + mod.defineDep(i, defined[depId]); + mod.check(); //pass false? + } else { + breakCycle(dep, traced, processed); + } + } + }); + processed[id] = true; + } + } + + function checkLoaded() { + var err, usingPathFallback, + waitInterval = config.waitSeconds * 1000, + //It is possible to disable the wait interval by using waitSeconds of 0. + expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), + noLoads = [], + reqCalls = [], + stillLoading = false, + needCycleCheck = true; + + //Do not bother if this call was a result of a cycle break. + if (inCheckLoaded) { + return; + } + + inCheckLoaded = true; + + //Figure out the state of all the modules. + eachProp(enabledRegistry, function (mod) { + var map = mod.map, + modId = map.id; + + //Skip things that are not enabled or in error state. + if (!mod.enabled) { + return; + } + + if (!map.isDefine) { + reqCalls.push(mod); + } + + if (!mod.error) { + //If the module should be executed, and it has not + //been inited and time is up, remember it. + if (!mod.inited && expired) { + if (hasPathFallback(modId)) { + usingPathFallback = true; + stillLoading = true; + } else { + noLoads.push(modId); + removeScript(modId); + } + } else if (!mod.inited && mod.fetched && map.isDefine) { + stillLoading = true; + if (!map.prefix) { + //No reason to keep looking for unfinished + //loading. If the only stillLoading is a + //plugin resource though, keep going, + //because it may be that a plugin resource + //is waiting on a non-plugin cycle. + return (needCycleCheck = false); + } + } + } + }); + + if (expired && noLoads.length) { + //If wait time expired, throw error of unloaded modules. + err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); + err.contextName = context.contextName; + return onError(err); + } + + //Not expired, check for a cycle. + if (needCycleCheck) { + each(reqCalls, function (mod) { + breakCycle(mod, {}, {}); + }); + } + + //If still waiting on loads, and the waiting load is something + //other than a plugin resource, or there are still outstanding + //scripts, then just try back later. + if ((!expired || usingPathFallback) && stillLoading) { + //Something is still waiting to load. Wait for it, but only + //if a timeout is not already in effect. + if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { + checkLoadedTimeoutId = setTimeout(function () { + checkLoadedTimeoutId = 0; + checkLoaded(); + }, 50); + } + } + + inCheckLoaded = false; + } + + Module = function (map) { + this.events = getOwn(undefEvents, map.id) || {}; + this.map = map; + this.shim = getOwn(config.shim, map.id); + this.depExports = []; + this.depMaps = []; + this.depMatched = []; + this.pluginMaps = {}; + this.depCount = 0; + + /* this.exports this.factory + this.depMaps = [], + this.enabled, this.fetched + */ + }; + + Module.prototype = { + init: function (depMaps, factory, errback, options) { + options = options || {}; + + //Do not do more inits if already done. Can happen if there + //are multiple DEFINE calls for the same module. That is not + //a normal, common case, but it is also not unexpected. + if (this.inited) { + return; + } + + this.factory = factory; + + if (errback) { + //Register for errors on this module. + this.on('error', errback); + } else if (this.events.error) { + //If no errback already, but there are error listeners + //on this module, set up an errback to pass to the deps. + errback = bind(this, function (err) { + this.emit('error', err); + }); + } + + //Do a copy of the dependency array, so that + //source inputs are not modified. For example + //"shim" deps are passed in here directly, and + //doing a direct modification of the depMaps array + //would affect that config. + this.depMaps = depMaps && depMaps.slice(0); + + this.errback = errback; + + //Indicate this module has be initialized + this.inited = true; + + this.ignore = options.ignore; + + //Could have option to init this module in enabled mode, + //or could have been previously marked as enabled. However, + //the dependencies are not known until init is called. So + //if enabled previously, now trigger dependencies as enabled. + if (options.enabled || this.enabled) { + //Enable this module and dependencies. + //Will call this.check() + this.enable(); + } else { + this.check(); + } + }, + + defineDep: function (i, depExports) { + //Because of cycles, defined callback for a given + //export can be called more than once. + if (!this.depMatched[i]) { + this.depMatched[i] = true; + this.depCount -= 1; + this.depExports[i] = depExports; + } + }, + + fetch: function () { + if (this.fetched) { + return; + } + this.fetched = true; + + context.startTime = (new Date()).getTime(); + + var map = this.map; + + //If the manager is for a plugin managed resource, + //ask the plugin to load it now. + if (this.shim) { + context.makeRequire(this.map, { + enableBuildCallback: true + })(this.shim.deps || [], bind(this, function () { + return map.prefix ? this.callPlugin() : this.load(); + })); + } else { + //Regular dependency. + return map.prefix ? this.callPlugin() : this.load(); + } + }, + + load: function () { + var url = this.map.url; + + //Regular dependency. + if (!urlFetched[url]) { + urlFetched[url] = true; + context.load(this.map.id, url); + } + }, + + /** + * Checks if the module is ready to DEFINE itself, and if so, + * DEFINE it. + */ + check: function () { + if (!this.enabled || this.enabling) { + return; + } + + var err, cjsModule, + id = this.map.id, + depExports = this.depExports, + exports = this.exports, + factory = this.factory; + + if (!this.inited) { + // Only fetch if not already in the defQueue. + if (!hasProp(context.defQueueMap, id)) { + this.fetch(); + } + } else if (this.error) { + this.emit('error', this.error); + } else if (!this.defining) { + //The factory could trigger another REQUIRE call + //that would result in checking this module to + //DEFINE itself again. If already in the process + //of doing that, skip this work. + this.defining = true; + + if (this.depCount < 1 && !this.defined) { + if (isFunction(factory)) { + //If there is an error listener, favor passing + //to that instead of throwing an error. However, + //only do it for DEFINE()'d modules. REQUIRE + //errbacks should not be called for failures in + //their callbacks (#699). However if a global + //onError is set, use that. + if ((this.events.error && this.map.isDefine) || + req.onError !== defaultOnError) { + try { + exports = context.execCb(id, factory, depExports, exports); + } catch (e) { + err = e; + } + } else { + exports = context.execCb(id, factory, depExports, exports); + } + + // Favor return value over exports. If node/cjs in play, + // then will not have a return value anyway. Favor + // module.exports assignment over exports object. + if (this.map.isDefine && exports === undefined) { + cjsModule = this.module; + if (cjsModule) { + exports = cjsModule.exports; + } else if (this.usingExports) { + //exports already set the defined value. + exports = this.exports; + } + } + + if (err) { + err.requireMap = this.map; + err.requireModules = this.map.isDefine ? [this.map.id] : null; + err.requireType = this.map.isDefine ? 'DEFINE' : 'REQUIRE'; + return onError((this.error = err)); + } + + } else { + //Just a literal value + exports = factory; + } + + this.exports = exports; + + if (this.map.isDefine && !this.ignore) { + defined[id] = exports; + + if (req.onResourceLoad) { + var resLoadMaps = []; + each(this.depMaps, function (depMap) { + resLoadMaps.push(depMap.normalizedMap || depMap); + }); + req.onResourceLoad(context, this.map, resLoadMaps); + } + } + + //Clean up + cleanRegistry(id); + + this.defined = true; + } + + //Finished the DEFINE stage. Allow calling check again + //to allow DEFINE notifications below in the case of a + //cycle. + this.defining = false; + + if (this.defined && !this.defineEmitted) { + this.defineEmitted = true; + this.emit('defined', this.exports); + this.defineEmitComplete = true; + } + + } + }, + + callPlugin: function () { + var map = this.map, + id = map.id, + //Map already normalized the prefix. + pluginMap = makeModuleMap(map.prefix); + + //Mark this as a dependency for this plugin, so it + //can be traced for cycles. + this.depMaps.push(pluginMap); + + on(pluginMap, 'defined', bind(this, function (plugin) { + var load, normalizedMap, normalizedMod, + bundleId = getOwn(bundlesMap, this.map.id), + name = this.map.name, + parentName = this.map.parentMap ? this.map.parentMap.name : null, + localRequire = context.makeRequire(map.parentMap, { + enableBuildCallback: true + }); + + //If current map is not normalized, wait for that + //normalized name to load instead of continuing. + if (this.map.unnormalized) { + //Normalize the ID if the plugin allows it. + if (plugin.normalize) { + name = plugin.normalize(name, function (name) { + return normalize(name, parentName, true); + }) || ''; + } + + //prefix and name should already be normalized, no need + //for applying map config again either. + normalizedMap = makeModuleMap(map.prefix + '!' + name, + this.map.parentMap, + true); + on(normalizedMap, + 'defined', bind(this, function (value) { + this.map.normalizedMap = normalizedMap; + this.init([], function () { return value; }, null, { + enabled: true, + ignore: true + }); + })); + + normalizedMod = getOwn(registry, normalizedMap.id); + if (normalizedMod) { + //Mark this as a dependency for this plugin, so it + //can be traced for cycles. + this.depMaps.push(normalizedMap); + + if (this.events.error) { + normalizedMod.on('error', bind(this, function (err) { + this.emit('error', err); + })); + } + normalizedMod.enable(); + } + + return; + } + + //If a paths config, then just load that file instead to + //resolve the plugin, as it is built into that paths layer. + if (bundleId) { + this.map.url = context.nameToUrl(bundleId); + this.load(); + return; + } + + load = bind(this, function (value) { + this.init([], function () { return value; }, null, { + enabled: true + }); + }); + + load.error = bind(this, function (err) { + this.inited = true; + this.error = err; + err.requireModules = [id]; + + //Remove temp unnormalized modules for this module, + //since they will never be resolved otherwise now. + eachProp(registry, function (mod) { + if (mod.map.id.indexOf(id + '_unnormalized') === 0) { + cleanRegistry(mod.map.id); + } + }); + + onError(err); + }); + + //Allow plugins to load other code without having to know the + //context or how to 'complete' the load. + load.fromText = bind(this, function (text, textAlt) { + /*jslint evil: true */ + var moduleName = map.name, + moduleMap = makeModuleMap(moduleName), + hasInteractive = useInteractive; + + //As of 2.1.0, support just passing the text, to reinforce + //fromText only being called once per resource. Still + //support old style of passing moduleName but discard + //that moduleName in favor of the internal ref. + if (textAlt) { + text = textAlt; + } + + //Turn off interactive script matching for IE for any DEFINE + //calls in the text, then turn it back on at the end. + if (hasInteractive) { + useInteractive = false; + } + + //Prime the system by creating a module instance for + //it. + getModule(moduleMap); + + //Transfer any config to this other module. + if (hasProp(config.config, id)) { + config.config[moduleName] = config.config[id]; + } + + try { + req.exec(text); + } catch (e) { + return onError(makeError('fromtexteval', + 'fromText eval for ' + id + + ' failed: ' + e, + e, + [id])); + } + + if (hasInteractive) { + useInteractive = true; + } + + //Mark this as a dependency for the plugin + //resource + this.depMaps.push(moduleMap); + + //Support anonymous modules. + context.completeLoad(moduleName); + + //Bind the value of that module to the value for this + //resource ID. + localRequire([moduleName], load); + }); + + //Use parentName here since the plugin's name is not reliable, + //could be some weird string with no path that actually wants to + //reference the parentName's path. + plugin.load(map.name, localRequire, load, config); + })); + + context.enable(pluginMap, this); + this.pluginMaps[pluginMap.id] = pluginMap; + }, + + enable: function () { + enabledRegistry[this.map.id] = this; + this.enabled = true; + + //Set flag mentioning that the module is enabling, + //so that immediate calls to the defined callbacks + //for dependencies do not trigger inadvertent load + //with the depCount still being zero. + this.enabling = true; + + //Enable each dependency + each(this.depMaps, bind(this, function (depMap, i) { + var id, mod, handler; + + if (typeof depMap === 'string') { + //Dependency needs to be converted to a depMap + //and wired up to this module. + depMap = makeModuleMap(depMap, + (this.map.isDefine ? this.map : this.map.parentMap), + false, + !this.skipMap); + this.depMaps[i] = depMap; + + handler = getOwn(handlers, depMap.id); + + if (handler) { + this.depExports[i] = handler(this); + return; + } + + this.depCount += 1; + + on(depMap, 'defined', bind(this, function (depExports) { + if (this.undefed) { + return; + } + this.defineDep(i, depExports); + this.check(); + })); + + if (this.errback) { + on(depMap, 'error', bind(this, this.errback)); + } else if (this.events.error) { + // No direct errback on this module, but something + // else is listening for errors, so be sure to + // propagate the error correctly. + on(depMap, 'error', bind(this, function(err) { + this.emit('error', err); + })); + } + } + + id = depMap.id; + mod = registry[id]; + + //Skip special modules like 'REQUIRE', 'exports', 'module' + //Also, don't call enable if it is already enabled, + //important in circular dependency cases. + if (!hasProp(handlers, id) && mod && !mod.enabled) { + context.enable(depMap, this); + } + })); + + //Enable each plugin that is used in + //a dependency + eachProp(this.pluginMaps, bind(this, function (pluginMap) { + var mod = getOwn(registry, pluginMap.id); + if (mod && !mod.enabled) { + context.enable(pluginMap, this); + } + })); + + this.enabling = false; + + this.check(); + }, + + on: function (name, cb) { + var cbs = this.events[name]; + if (!cbs) { + cbs = this.events[name] = []; + } + cbs.push(cb); + }, + + emit: function (name, evt) { + each(this.events[name], function (cb) { + cb(evt); + }); + if (name === 'error') { + //Now that the error handler was triggered, remove + //the listeners, since this broken Module instance + //can stay around for a while in the registry. + delete this.events[name]; + } + } + }; + + function callGetModule(args) { + //Skip modules already defined. + if (!hasProp(defined, args[0])) { + getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); + } + } + + function removeListener(node, func, name, ieName) { + //Favor detachEvent because of IE9 + //issue, see attachEvent/addEventListener comment elsewhere + //in this file. + if (node.detachEvent && !isOpera) { + //Probably IE. If not it will throw an error, which will be + //useful to know. + if (ieName) { + node.detachEvent(ieName, func); + } + } else { + node.removeEventListener(name, func, false); + } + } + + /** + * Given an event from a script node, get the REQUIREJS info from it, + * and then removes the event listeners on the node. + * @param {Event} evt + * @returns {Object} + */ + function getScriptData(evt) { + //Using currentTarget instead of target for Firefox 2.0's sake. Not + //all old browsers will be supported, but this one was easy enough + //to support and still makes sense. + var node = evt.currentTarget || evt.srcElement; + + //Remove the listeners once here. + removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); + removeListener(node, context.onScriptError, 'error'); + + return { + node: node, + id: node && node.getAttribute('data-requiremodule') + }; + } + + function intakeDefines() { + var args; + + //Any defined modules in the global queue, intake them now. + takeGlobalQueue(); + + //Make sure any remaining defQueue items get properly processed. + while (defQueue.length) { + args = defQueue.shift(); + if (args[0] === null) { + return onError(makeError('mismatch', 'Mismatched anonymous DEFINE() module: ' + + args[args.length - 1])); + } else { + //args are id, deps, factory. Should be normalized by the + //DEFINE() function. + callGetModule(args); + } + } + context.defQueueMap = {}; + } + + context = { + config: config, + contextName: contextName, + registry: registry, + defined: defined, + urlFetched: urlFetched, + defQueue: defQueue, + defQueueMap: {}, + Module: Module, + makeModuleMap: makeModuleMap, + nextTick: req.nextTick, + onError: onError, + + /** + * Set a configuration for the context. + * @param {Object} cfg config object to integrate. + */ + configure: function (cfg) { + //Make sure the baseUrl ends in a slash. + if (cfg.baseUrl) { + if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { + cfg.baseUrl += '/'; + } + } + + // Convert old style urlArgs string to a function. + if (typeof cfg.urlArgs === 'string') { + var urlArgs = cfg.urlArgs; + cfg.urlArgs = function(id, url) { + return (url.indexOf('?') === -1 ? '?' : '&') + urlArgs; + }; + } + + //Save off the paths since they REQUIRE special processing, + //they are additive. + var shim = config.shim, + objs = { + paths: true, + bundles: true, + config: true, + map: true + }; + + eachProp(cfg, function (value, prop) { + if (objs[prop]) { + if (!config[prop]) { + config[prop] = {}; + } + mixin(config[prop], value, true, true); + } else { + config[prop] = value; + } + }); + + //Reverse map the bundles + if (cfg.bundles) { + eachProp(cfg.bundles, function (value, prop) { + each(value, function (v) { + if (v !== prop) { + bundlesMap[v] = prop; + } + }); + }); + } + + //Merge shim + if (cfg.shim) { + eachProp(cfg.shim, function (value, id) { + //Normalize the structure + if (isArray(value)) { + value = { + deps: value + }; + } + if ((value.exports || value.init) && !value.exportsFn) { + value.exportsFn = context.makeShimExports(value); + } + shim[id] = value; + }); + config.shim = shim; + } + + //Adjust packages if necessary. + if (cfg.packages) { + each(cfg.packages, function (pkgObj) { + var location, name; + + pkgObj = typeof pkgObj === 'string' ? {name: pkgObj} : pkgObj; + + name = pkgObj.name; + location = pkgObj.location; + if (location) { + config.paths[name] = pkgObj.location; + } + + //Save pointer to main module ID for pkg name. + //Remove leading dot in main, so main paths are normalized, + //and remove any trailing .js, since different package + //envs have different conventions: some use a module name, + //some use a file name. + config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main') + .replace(currDirRegExp, '') + .replace(jsSuffixRegExp, ''); + }); + } + + //If there are any "waiting to execute" modules in the registry, + //update the maps for them, since their info, like URLs to load, + //may have changed. + eachProp(registry, function (mod, id) { + //If module already has init called, since it is too + //late to modify them, and ignore unnormalized ones + //since they are transient. + if (!mod.inited && !mod.map.unnormalized) { + mod.map = makeModuleMap(id, null, true); + } + }); + + //If a deps array or a config callback is specified, then call + //REQUIRE with those args. This is useful when REQUIRE is defined as a + //config object before REQUIRE.js is loaded. + if (cfg.deps || cfg.callback) { + context.REQUIRE(cfg.deps || [], cfg.callback); + } + }, + + makeShimExports: function (value) { + function fn() { + var ret; + if (value.init) { + ret = value.init.apply(global, arguments); + } + return ret || (value.exports && getGlobal(value.exports)); + } + return fn; + }, + + makeRequire: function (relMap, options) { + options = options || {}; + + function localRequire(deps, callback, errback) { + var id, map, requireMod; + + if (options.enableBuildCallback && callback && isFunction(callback)) { + callback.__requireJsBuild = true; + } + + if (typeof deps === 'string') { + if (isFunction(callback)) { + //Invalid call + return onError(makeError('requireargs', 'Invalid REQUIRE call'), errback); + } + + //If REQUIRE|exports|module are requested, get the + //value for them from the special handlers. Caveat: + //this only works while module is being defined. + if (relMap && hasProp(handlers, deps)) { + return handlers[deps](registry[relMap.id]); + } + + //Synchronous access to one module. If REQUIRE.get is + //available (as in the Node adapter), prefer that. + if (req.get) { + return req.get(context, deps, relMap, localRequire); + } + + //Normalize module name, if it contains . or .. + map = makeModuleMap(deps, relMap, false, true); + id = map.id; + + if (!hasProp(defined, id)) { + return onError(makeError('notloaded', 'Module name "' + + id + + '" has not been loaded yet for context: ' + + contextName + + (relMap ? '' : '. Use REQUIRE([])'))); + } + return defined[id]; + } + + //Grab defines waiting in the global queue. + intakeDefines(); + + //Mark all the dependencies as needing to be loaded. + context.nextTick(function () { + //Some defines could have been added since the + //REQUIRE call, collect them. + intakeDefines(); + + requireMod = getModule(makeModuleMap(null, relMap)); + + //Store if map config should be applied to this REQUIRE + //call for dependencies. + requireMod.skipMap = options.skipMap; + + requireMod.init(deps, callback, errback, { + enabled: true + }); + + checkLoaded(); + }); + + return localRequire; + } + + mixin(localRequire, { + isBrowser: isBrowser, + + /** + * Converts a module name + .extension into an URL path. + * *Requires* the use of a module name. It does not support using + * plain URLs like nameToUrl. + */ + toUrl: function (moduleNamePlusExt) { + var ext, + index = moduleNamePlusExt.lastIndexOf('.'), + segment = moduleNamePlusExt.split('/')[0], + isRelative = segment === '.' || segment === '..'; + + //Have a file extension alias, and it is not the + //dots from a relative path. + if (index !== -1 && (!isRelative || index > 1)) { + ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); + moduleNamePlusExt = moduleNamePlusExt.substring(0, index); + } + + return context.nameToUrl(normalize(moduleNamePlusExt, + relMap && relMap.id, true), ext, true); + }, + + defined: function (id) { + return hasProp(defined, makeModuleMap(id, relMap, false, true).id); + }, + + specified: function (id) { + id = makeModuleMap(id, relMap, false, true).id; + return hasProp(defined, id) || hasProp(registry, id); + } + }); + + //Only allow undef on top level REQUIRE calls + if (!relMap) { + localRequire.undef = function (id) { + //Bind any waiting DEFINE() calls to this context, + //fix for #408 + takeGlobalQueue(); + + var map = makeModuleMap(id, relMap, true), + mod = getOwn(registry, id); + + mod.undefed = true; + removeScript(id); + + delete defined[id]; + delete urlFetched[map.url]; + delete undefEvents[id]; + + //Clean queued defines too. Go backwards + //in array so that the splices do not + //mess up the iteration. + eachReverse(defQueue, function(args, i) { + if (args[0] === id) { + defQueue.splice(i, 1); + } + }); + delete context.defQueueMap[id]; + + if (mod) { + //Hold on to listeners in case the + //module will be attempted to be reloaded + //using a different config. + if (mod.events.defined) { + undefEvents[id] = mod.events; + } + + cleanRegistry(id); + } + }; + } + + return localRequire; + }, + + /** + * Called to enable a module if it is still in the registry + * awaiting enablement. A second arg, parent, the parent module, + * is passed in for context, when this method is overridden by + * the optimizer. Not shown here to keep code compact. + */ + enable: function (depMap) { + var mod = getOwn(registry, depMap.id); + if (mod) { + getModule(depMap).enable(); + } + }, + + /** + * Internal method used by environment adapters to complete a load event. + * A load event could be a script load or just a load pass from a synchronous + * load call. + * @param {String} moduleName the name of the module to potentially complete. + */ + completeLoad: function (moduleName) { + var found, args, mod, + shim = getOwn(config.shim, moduleName) || {}, + shExports = shim.exports; + + takeGlobalQueue(); + + while (defQueue.length) { + args = defQueue.shift(); + if (args[0] === null) { + args[0] = moduleName; + //If already found an anonymous module and bound it + //to this name, then this is some other anon module + //waiting for its completeLoad to fire. + if (found) { + break; + } + found = true; + } else if (args[0] === moduleName) { + //Found matching DEFINE call for this script! + found = true; + } + + callGetModule(args); + } + context.defQueueMap = {}; + + //Do this after the cycle of callGetModule in case the result + //of those calls/init calls changes the registry. + mod = getOwn(registry, moduleName); + + if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { + if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { + if (hasPathFallback(moduleName)) { + return; + } else { + return onError(makeError('nodefine', + 'No DEFINE call for ' + moduleName, + null, + [moduleName])); + } + } else { + //A script that does not call DEFINE(), so just simulate + //the call for it. + callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); + } + } + + checkLoaded(); + }, + + /** + * Converts a module name to a file path. Supports cases where + * moduleName may actually be just an URL. + * Note that it **does not** call normalize on the moduleName, + * it is assumed to have already been normalized. This is an + * internal API, not a public one. Use toUrl for the public API. + */ + nameToUrl: function (moduleName, ext, skipExt) { + var paths, syms, i, parentModule, url, + parentPath, bundleId, + pkgMain = getOwn(config.pkgs, moduleName); + + if (pkgMain) { + moduleName = pkgMain; + } + + bundleId = getOwn(bundlesMap, moduleName); + + if (bundleId) { + return context.nameToUrl(bundleId, ext, skipExt); + } + + //If a colon is in the URL, it indicates a protocol is used and it is just + //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) + //or ends with .js, then assume the user meant to use an url and not a module id. + //The slash is important for protocol-less URLs as well as full paths. + if (req.jsExtRegExp.test(moduleName)) { + //Just a plain path, not module name lookup, so just return it. + //Add extension if it is included. This is a bit wonky, only non-.js things pass + //an extension, this method probably needs to be reworked. + url = moduleName + (ext || ''); + } else { + //A module that needs to be converted to a path. + paths = config.paths; + + syms = moduleName.split('/'); + //For each module name segment, see if there is a path + //registered for it. Start with most specific name + //and work up from it. + for (i = syms.length; i > 0; i -= 1) { + parentModule = syms.slice(0, i).join('/'); + + parentPath = getOwn(paths, parentModule); + if (parentPath) { + //If an array, it means there are a few choices, + //Choose the one that is desired + if (isArray(parentPath)) { + parentPath = parentPath[0]; + } + syms.splice(0, i, parentPath); + break; + } + } + + //Join the path parts together, then figure out if baseUrl is needed. + url = syms.join('/'); + url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js')); + url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; + } + + return config.urlArgs && !/^blob\:/.test(url) ? + url + config.urlArgs(moduleName, url) : url; + }, + + //Delegates to req.load. Broken out as a separate function to + //allow overriding in the optimizer. + load: function (id, url) { + req.load(context, id, url); + }, + + /** + * Executes a module callback function. Broken out as a separate function + * solely to allow the build system to sequence the files in the built + * layer in the right sequence. + * + * @private + */ + execCb: function (name, callback, args, exports) { + return callback.apply(exports, args); + }, + + /** + * callback for script loads, used to check status of loading. + * + * @param {Event} evt the event from the browser for the script + * that was loaded. + */ + onScriptLoad: function (evt) { + //Using currentTarget instead of target for Firefox 2.0's sake. Not + //all old browsers will be supported, but this one was easy enough + //to support and still makes sense. + if (evt.type === 'load' || + (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { + //Reset interactive script so a script node is not held onto for + //to long. + interactiveScript = null; + + //Pull out the name of the module and the context. + var data = getScriptData(evt); + context.completeLoad(data.id); + } + }, + + /** + * Callback for script errors. + */ + onScriptError: function (evt) { + var data = getScriptData(evt); + if (!hasPathFallback(data.id)) { + var parents = []; + eachProp(registry, function(value, key) { + if (key.indexOf('_@r') !== 0) { + each(value.depMaps, function(depMap) { + if (depMap.id === data.id) { + parents.push(key); + return true; + } + }); + } + }); + return onError(makeError('scripterror', 'Script error for "' + data.id + + (parents.length ? + '", needed by: ' + parents.join(', ') : + '"'), evt, [data.id])); + } + } + }; + + context.REQUIRE = context.makeRequire(); + return context; + } + + /** + * Main entry point. + * + * If the only argument to REQUIRE is a string, then the module that + * is represented by that string is fetched for the appropriate context. + * + * If the first argument is an array, then it will be treated as an array + * of dependency string names to fetch. An optional function callback can + * be specified to execute when all of those dependencies are available. + * + * Make a local req variable to help Caja compliance (it assumes things + * on a REQUIRE that are not standardized), and to give a short + * name for minification/local scope use. + */ + req = REQUIREJS = function (deps, callback, errback, optional) { + + //Find the right context, use default + var context, config, + contextName = defContextName; + + // Determine if have config object in the call. + if (!isArray(deps) && typeof deps !== 'string') { + // deps is a config object + config = deps; + if (isArray(callback)) { + // Adjust args if there are dependencies + deps = callback; + callback = errback; + errback = optional; + } else { + deps = []; + } + } + + if (config && config.context) { + contextName = config.context; + } + + context = getOwn(contexts, contextName); + if (!context) { + context = contexts[contextName] = req.s.newContext(contextName); + } + + if (config) { + context.configure(config); + } + + return context.REQUIRE(deps, callback, errback); + }; + + /** + * Support REQUIRE.config() to make it easier to cooperate with other + * AMD loaders on globally agreed names. + */ + req.config = function (config) { + return req(config); + }; + + /** + * Execute something after the current tick + * of the event loop. Override for other envs + * that have a better solution than setTimeout. + * @param {Function} fn function to execute later. + */ + req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { + setTimeout(fn, 4); + } : function (fn) { fn(); }; + + /** + * Export REQUIRE as a global, but only if it does not already exist. + */ + if (!REQUIRE) { + REQUIRE = req; + } + + req.version = version; + + //Used to filter out dependencies that are already paths. + req.jsExtRegExp = /^\/|:|\?|\.js$/; + req.isBrowser = isBrowser; + s = req.s = { + contexts: contexts, + newContext: newContext + }; + + //Create default context. + req({}); + + //Exports some context-sensitive methods on global REQUIRE. + each([ + 'toUrl', + 'undef', + 'defined', + 'specified' + ], function (prop) { + //Reference from contexts instead of early binding to default context, + //so that during builds, the latest instance of the default context + //with its config gets used. + req[prop] = function () { + var ctx = contexts[defContextName]; + return ctx.REQUIRE[prop].apply(ctx, arguments); + }; + }); + + if (isBrowser) { + head = s.head = document.getElementsByTagName('head')[0]; + //If BASE tag is in play, using appendChild is a problem for IE6. + //When that browser dies, this can be removed. Details in this jQuery bug: + //http://dev.jquery.com/ticket/2709 + baseElement = document.getElementsByTagName('base')[0]; + if (baseElement) { + head = s.head = baseElement.parentNode; + } + } + + /** + * Any errors that REQUIRE explicitly generates will be passed to this + * function. Intercept/override it if you want custom error handling. + * @param {Error} err the error object. + */ + req.onError = defaultOnError; + + /** + * Creates the node for the load command. Only used in browser envs. + */ + req.createNode = function (config, moduleName, url) { + var node = config.xhtml ? + document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : + document.createElement('script'); + node.type = config.scriptType || 'text/javascript'; + node.charset = 'utf-8'; + node.async = true; + return node; + }; + + /** + * Does the request to load a module for the browser case. + * Make this a separate function to allow other environments + * to override it. + * + * @param {Object} context the REQUIRE context to find state. + * @param {String} moduleName the name of the module. + * @param {Object} url the URL to the module. + */ + req.load = function (context, moduleName, url) { + var config = (context && context.config) || {}, + node; + if (isBrowser) { + //In the browser so use a script tag + node = req.createNode(config, moduleName, url); + + node.setAttribute('data-requirecontext', context.contextName); + node.setAttribute('data-requiremodule', moduleName); + + //Set up load listener. Test attachEvent first because IE9 has + //a subtle issue in its addEventListener and script onload firings + //that do not match the behavior of all other browsers with + //addEventListener support, which fire the onload event for a + //script right after the script execution. See: + //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution + //UNFORTUNATELY Opera implements attachEvent but does not follow the script + //script execution mode. + if (node.attachEvent && + //Check if node.attachEvent is artificially added by custom script or + //natively supported by browser + //read https://github.com/REQUIREJS/REQUIREJS/issues/187 + //if we can NOT find [native code] then it must NOT natively supported. + //in IE8, node.attachEvent does not have toString() + //Note the test for "[native code" with no closing brace, see: + //https://github.com/REQUIREJS/REQUIREJS/issues/273 + !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && + !isOpera) { + //Probably IE. IE (at least 6-8) do not fire + //script onload right after executing the script, so + //we cannot tie the anonymous DEFINE call to a name. + //However, IE reports the script as being in 'interactive' + //readyState at the time of the DEFINE call. + useInteractive = true; + + node.attachEvent('onreadystatechange', context.onScriptLoad); + //It would be great to add an error handler here to catch + //404s in IE9+. However, onreadystatechange will fire before + //the error handler, so that does not help. If addEventListener + //is used, then IE will fire error before load, but we cannot + //use that pathway given the connect.microsoft.com issue + //mentioned above about not doing the 'script execute, + //then fire the script load event listener before execute + //next script' that other browsers do. + //Best hope: IE10 fixes the issues, + //and then destroys all installs of IE 6-9. + //node.attachEvent('onerror', context.onScriptError); + } else { + node.addEventListener('load', context.onScriptLoad, false); + node.addEventListener('error', context.onScriptError, false); + } + node.src = url; + + //Calling onNodeCreated after all properties on the node have been + //set, but before it is placed in the DOM. + if (config.onNodeCreated) { + config.onNodeCreated(node, config, moduleName, url); + } + + //For some cache cases in IE 6-8, the script executes before the end + //of the appendChild execution, so to tie an anonymous DEFINE + //call to the module name (which is stored on the node), hold on + //to a reference to this node, but clear after the DOM insertion. + currentlyAddingScript = node; + if (baseElement) { + head.insertBefore(node, baseElement); + } else { + head.appendChild(node); + } + currentlyAddingScript = null; + + return node; + } else if (isWebWorker) { + try { + //In a web worker, use importScripts. This is not a very + //efficient use of importScripts, importScripts will block until + //its script is downloaded and evaluated. However, if web workers + //are in play, the expectation is that a build has been done so + //that only one script needs to be loaded anyway. This may need + //to be reevaluated if other use cases become common. + + // Post a task to the event loop to work around a bug in WebKit + // where the worker gets garbage-collected after calling + // importScripts(): https://webkit.org/b/153317 + setTimeout(function() {}, 0); + importScripts(url); + + //Account for anonymous modules + context.completeLoad(moduleName); + } catch (e) { + context.onError(makeError('importscripts', + 'importScripts failed for ' + + moduleName + ' at ' + url, + e, + [moduleName])); + } + } + }; + + function getInteractiveScript() { + if (interactiveScript && interactiveScript.readyState === 'interactive') { + return interactiveScript; + } + + eachReverse(scripts(), function (script) { + if (script.readyState === 'interactive') { + return (interactiveScript = script); + } + }); + return interactiveScript; + } + + //Look for a data-main script attribute, which could also adjust the baseUrl. + if (isBrowser && !cfg.skipDataMain) { + //Figure out baseUrl. Get it from the script tag with REQUIRE.js in it. + eachReverse(scripts(), function (script) { + //Set the 'head' where we can append children by + //using the script's parent. + if (!head) { + head = script.parentNode; + } + + //Look for a data-main attribute to set main script for the page + //to load. If it is there, the path to data main becomes the + //baseUrl, if it is not already set. + dataMain = script.getAttribute('data-main'); + if (dataMain) { + //Preserve dataMain in case it is a path (i.e. contains '?') + mainScript = dataMain; + + //Set final baseUrl if there is not already an explicit one, + //but only do so if the data-main value is not a loader plugin + //module ID. + if (!cfg.baseUrl && mainScript.indexOf('!') === -1) { + //Pull off the directory of data-main for use as the + //baseUrl. + src = mainScript.split('/'); + mainScript = src.pop(); + subPath = src.length ? src.join('/') + '/' : './'; + + cfg.baseUrl = subPath; + } + + //Strip off any trailing .js since mainScript is now + //like a module name. + mainScript = mainScript.replace(jsSuffixRegExp, ''); + + //If mainScript is still a path, fall back to dataMain + if (req.jsExtRegExp.test(mainScript)) { + mainScript = dataMain; + } + + //Put the data-main script in the files to load. + cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; + + return true; + } + }); + } + + /** + * The function that handles definitions of modules. Differs from + * REQUIRE() in that a string for the module should be the first argument, + * and the function to execute after dependencies are loaded should + * return a value to DEFINE the module corresponding to the first argument's + * name. + */ + DEFINE = function (name, deps, callback) { + var node, context; + + //Allow for anonymous modules + if (typeof name !== 'string') { + //Adjust args appropriately + callback = deps; + deps = name; + name = null; + } + + //This module may not have dependencies + if (!isArray(deps)) { + callback = deps; + deps = null; + } + + //If no name, and callback is a function, then figure out if it a + //CommonJS thing with dependencies. + if (!deps && isFunction(callback)) { + deps = []; + //Remove comments from the callback string, + //look for REQUIRE calls, and pull them into the dependencies, + //but only if there are function args. + if (callback.length) { + callback + .toString() + .replace(commentRegExp, commentReplace) + .replace(cjsRequireRegExp, function (match, dep) { + deps.push(dep); + }); + + //May be a CommonJS thing even without REQUIRE calls, but still + //could use exports, and module. Avoid doing exports and module + //work though if it just needs REQUIRE. + //REQUIRES the function to expect the CommonJS variables in the + //order listed below. + deps = (callback.length === 1 ? ['REQUIRE'] : ['REQUIRE', 'exports', 'module']).concat(deps); + } + } + + //If in IE 6-8 and hit an anonymous DEFINE() call, do the interactive + //work. + if (useInteractive) { + node = currentlyAddingScript || getInteractiveScript(); + if (node) { + if (!name) { + name = node.getAttribute('data-requiremodule'); + } + context = contexts[node.getAttribute('data-requirecontext')]; + } + } + + //Always save off evaluating the def call until the script onload handler. + //This allows multiple modules to be in a file without prematurely + //tracing dependencies, and allows for anonymous module support, + //where the module name is not known until the script onload event + //occurs. If no context, use the global queue, and get it processed + //in the onscript load callback. + if (context) { + context.defQueue.push([name, deps, callback]); + context.defQueueMap[name] = true; + } else { + globalDefQueue.push([name, deps, callback]); + } + }; + + DEFINE.amd = { + jQuery: true + }; + + /** + * Executes the text. Normally just uses eval, but can be modified + * to use a better, environment-specific call. Only used for transpiling + * loader plugins, not for plain JS modules. + * @param {String} text the text to execute/evaluate. + */ + req.exec = function (text) { + /*jslint evil: true */ + return eval(text); + }; + + //Set up with config info. + req(cfg); +}(this, (typeof setTimeout === 'undefined' ? undefined : setTimeout))); diff --git a/Desktop/httpInterface.js b/Desktop/httpInterface.js index 96e647f8e..0fb3b12a5 100644 --- a/Desktop/httpInterface.js +++ b/Desktop/httpInterface.js @@ -19,12 +19,12 @@ exports.newHttpInterface = function newHttpInterface() { /* We will create an HTTP Server and leave it running forever. */ - SA.nodeModules.http.createServer(onHttpRequest).listen(global.env.CLIENT_HTTP_INTERFACE_PORT) + SA.nodeModules.http.createServer(onHttpRequest).listen(global.env.DESKTOP_HTTP_INTERFACE_PORT) /* Starting the browser now is optional */ if (process.argv.includes("noBrowser")) { //Running Client only with no UI. } else { - SA.nodeModules.open('http://localhost:' + global.env.CLIENT_HTTP_INTERFACE_PORT) + SA.nodeModules.open('http://localhost:' + global.env.DESKTOP_HTTP_INTERFACE_PORT) } } @@ -35,14 +35,30 @@ exports.newHttpInterface = function newHttpInterface() { let endpointOrFile = requestPath[1] switch (endpointOrFile) { - case 'XXX': + case 'Images': // This means the Images folder. { + let path = global.env.PATH_TO_CLIENT + 'WebServer/Images/' + requestPath[2] + if (requestPath[3] !== undefined) { + path = path + '/' + requestPath[3] + } + + if (requestPath[4] !== undefined) { + path = path + '/' + requestPath[4] + } + + if (requestPath[5] !== undefined) { + path = path + '/' + requestPath[5] + } + + path = unescape(path) + + SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse) } break default: { - SA.projects.foundations.utilities.httpResponses.respondWithWebFile(httpResponse, endpointOrFile, global.env.PATH_TO_CLIENT) + SA.projects.foundations.utilities.httpResponses.respondWithWebFile(httpResponse, endpointOrFile, global.env.PATH_TO_DESKTOP) } } } catch (err) { diff --git a/EnvironmentForDebug.js b/EnvironmentForDebug.js index 1387f5699..d92780a6e 100644 --- a/EnvironmentForDebug.js +++ b/EnvironmentForDebug.js @@ -15,6 +15,7 @@ exports.newEnvironment = function () { PATH_TO_UI: './UI', PATH_TO_DATA_FILES: './UI/Data-Files/src', PATH_TO_CLIENT: './Client/', + PATH_TO_DESKTOP: './Desktop/', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', PATH_TO_MY_WORKSPACES: './My-Workspaces', PATH_TO_FONTS: './Client/WebServer/Fonts' diff --git a/package-lock.json b/package-lock.json index 11e53b3fd..469e05fe0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -784,6 +784,11 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1379,6 +1384,11 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "http": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -1505,6 +1515,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, "is-function": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", @@ -1598,6 +1613,14 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -1948,6 +1971,16 @@ "wrappy": "1" } }, + "open": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", + "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", diff --git a/package.json b/package.json index 98b8d8879..d083084f8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,8 @@ { "dependencies": { + "http": "0.0.1-security", "node-fetch": "^2.6.1", + "open": "^8.2.1", "web3": "^1.5.2", "ws": "^8.2.1" } diff --git a/runDesktop.js b/runDesktop.js index f6e04a1d2..ced762c1a 100644 --- a/runDesktop.js +++ b/runDesktop.js @@ -42,7 +42,9 @@ Setting up external dependencies. SA.nodeModules = { fs: require('fs'), web3: require('web3'), - ws: require('ws') + ws: require('ws'), + open: require('open'), + http: require('http') } /* From d6f4981278600a59cfa37f97f29e02d35e8f4468 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 5 Sep 2021 10:36:52 +0200 Subject: [PATCH 2/8] Relocating the UI folder --- {UI => Client/UI}/.vscode/settings.json | 0 {UI => Client/UI}/Animation.js | 0 {UI => Client/UI}/AppLoader.js | 0 {UI => Client/UI}/AppPostLoader.js | 0 {UI => Client/UI}/AppPreLoader.js | 0 {UI => Client/UI}/Canvas.js | 0 {UI => Client/UI}/Container.js | 0 {UI => Client/UI}/Data-Files/src/DailyFiles.js | 0 {UI => Client/UI}/Data-Files/src/FileCloud.js | 0 {UI => Client/UI}/Data-Files/src/FileCursor.js | 0 {UI => Client/UI}/Data-Files/src/FileSequence.js | 0 {UI => Client/UI}/Data-Files/src/FileStorage.js | 0 {UI => Client/UI}/Data-Files/src/MarketFiles.js | 0 {UI => Client/UI}/Data-Files/src/SingleFile.js | 0 {UI => Client/UI}/EventHandler.js | 0 {UI => Client/UI}/EventsServerClient.js | 0 {UI => Client/UI}/Frame.js | 0 {UI => Client/UI}/Globals.js | 0 {UI => Client/UI}/ProductStorage.js | 0 {UI => Client/UI}/Utilities.js | 0 {UI => Client/UI}/VideoRecorder.js | 0 {UI => Client/UI}/WebDebugLog.js | 0 Client/httpInterface.js | 14 +++++++------- Desktop/httpInterface.js | 2 +- Environment.js | 4 +--- EnvironmentForDebug.js | 6 ++---- Projects/Foundations/SA/Utilities/HttpResponses.js | 12 ++++++------ 27 files changed, 17 insertions(+), 21 deletions(-) rename {UI => Client/UI}/.vscode/settings.json (100%) rename {UI => Client/UI}/Animation.js (100%) rename {UI => Client/UI}/AppLoader.js (100%) rename {UI => Client/UI}/AppPostLoader.js (100%) rename {UI => Client/UI}/AppPreLoader.js (100%) rename {UI => Client/UI}/Canvas.js (100%) rename {UI => Client/UI}/Container.js (100%) rename {UI => Client/UI}/Data-Files/src/DailyFiles.js (100%) rename {UI => Client/UI}/Data-Files/src/FileCloud.js (100%) rename {UI => Client/UI}/Data-Files/src/FileCursor.js (100%) rename {UI => Client/UI}/Data-Files/src/FileSequence.js (100%) rename {UI => Client/UI}/Data-Files/src/FileStorage.js (100%) rename {UI => Client/UI}/Data-Files/src/MarketFiles.js (100%) rename {UI => Client/UI}/Data-Files/src/SingleFile.js (100%) rename {UI => Client/UI}/EventHandler.js (100%) rename {UI => Client/UI}/EventsServerClient.js (100%) rename {UI => Client/UI}/Frame.js (100%) rename {UI => Client/UI}/Globals.js (100%) rename {UI => Client/UI}/ProductStorage.js (100%) rename {UI => Client/UI}/Utilities.js (100%) rename {UI => Client/UI}/VideoRecorder.js (100%) rename {UI => Client/UI}/WebDebugLog.js (100%) diff --git a/UI/.vscode/settings.json b/Client/UI/.vscode/settings.json similarity index 100% rename from UI/.vscode/settings.json rename to Client/UI/.vscode/settings.json diff --git a/UI/Animation.js b/Client/UI/Animation.js similarity index 100% rename from UI/Animation.js rename to Client/UI/Animation.js diff --git a/UI/AppLoader.js b/Client/UI/AppLoader.js similarity index 100% rename from UI/AppLoader.js rename to Client/UI/AppLoader.js diff --git a/UI/AppPostLoader.js b/Client/UI/AppPostLoader.js similarity index 100% rename from UI/AppPostLoader.js rename to Client/UI/AppPostLoader.js diff --git a/UI/AppPreLoader.js b/Client/UI/AppPreLoader.js similarity index 100% rename from UI/AppPreLoader.js rename to Client/UI/AppPreLoader.js diff --git a/UI/Canvas.js b/Client/UI/Canvas.js similarity index 100% rename from UI/Canvas.js rename to Client/UI/Canvas.js diff --git a/UI/Container.js b/Client/UI/Container.js similarity index 100% rename from UI/Container.js rename to Client/UI/Container.js diff --git a/UI/Data-Files/src/DailyFiles.js b/Client/UI/Data-Files/src/DailyFiles.js similarity index 100% rename from UI/Data-Files/src/DailyFiles.js rename to Client/UI/Data-Files/src/DailyFiles.js diff --git a/UI/Data-Files/src/FileCloud.js b/Client/UI/Data-Files/src/FileCloud.js similarity index 100% rename from UI/Data-Files/src/FileCloud.js rename to Client/UI/Data-Files/src/FileCloud.js diff --git a/UI/Data-Files/src/FileCursor.js b/Client/UI/Data-Files/src/FileCursor.js similarity index 100% rename from UI/Data-Files/src/FileCursor.js rename to Client/UI/Data-Files/src/FileCursor.js diff --git a/UI/Data-Files/src/FileSequence.js b/Client/UI/Data-Files/src/FileSequence.js similarity index 100% rename from UI/Data-Files/src/FileSequence.js rename to Client/UI/Data-Files/src/FileSequence.js diff --git a/UI/Data-Files/src/FileStorage.js b/Client/UI/Data-Files/src/FileStorage.js similarity index 100% rename from UI/Data-Files/src/FileStorage.js rename to Client/UI/Data-Files/src/FileStorage.js diff --git a/UI/Data-Files/src/MarketFiles.js b/Client/UI/Data-Files/src/MarketFiles.js similarity index 100% rename from UI/Data-Files/src/MarketFiles.js rename to Client/UI/Data-Files/src/MarketFiles.js diff --git a/UI/Data-Files/src/SingleFile.js b/Client/UI/Data-Files/src/SingleFile.js similarity index 100% rename from UI/Data-Files/src/SingleFile.js rename to Client/UI/Data-Files/src/SingleFile.js diff --git a/UI/EventHandler.js b/Client/UI/EventHandler.js similarity index 100% rename from UI/EventHandler.js rename to Client/UI/EventHandler.js diff --git a/UI/EventsServerClient.js b/Client/UI/EventsServerClient.js similarity index 100% rename from UI/EventsServerClient.js rename to Client/UI/EventsServerClient.js diff --git a/UI/Frame.js b/Client/UI/Frame.js similarity index 100% rename from UI/Frame.js rename to Client/UI/Frame.js diff --git a/UI/Globals.js b/Client/UI/Globals.js similarity index 100% rename from UI/Globals.js rename to Client/UI/Globals.js diff --git a/UI/ProductStorage.js b/Client/UI/ProductStorage.js similarity index 100% rename from UI/ProductStorage.js rename to Client/UI/ProductStorage.js diff --git a/UI/Utilities.js b/Client/UI/Utilities.js similarity index 100% rename from UI/Utilities.js rename to Client/UI/Utilities.js diff --git a/UI/VideoRecorder.js b/Client/UI/VideoRecorder.js similarity index 100% rename from UI/VideoRecorder.js rename to Client/UI/VideoRecorder.js diff --git a/UI/WebDebugLog.js b/Client/UI/WebDebugLog.js similarity index 100% rename from UI/WebDebugLog.js rename to Client/UI/WebDebugLog.js diff --git a/Client/httpInterface.js b/Client/httpInterface.js index 537bd72e3..b7f5e2296 100644 --- a/Client/httpInterface.js +++ b/Client/httpInterface.js @@ -1075,17 +1075,17 @@ exports.newHttpInterface = function newHttpInterface() { break case 'LegacyPlotter.js': { - SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + 'WebServer/LegacyPlotter.js', httpResponse) + SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + '/WebServer/LegacyPlotter.js', httpResponse) } break case 'PlotterPanel.js': { - SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + 'WebServer/PlotterPanel.js', httpResponse) + SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + '/WebServer/PlotterPanel.js', httpResponse) } break case 'Images': // This means the Images folder. { - let path = global.env.PATH_TO_CLIENT + 'WebServer/Images/' + requestPath[2] + let path = global.env.PATH_TO_CLIENT + '/WebServer/Images/' + requestPath[2] if (requestPath[3] !== undefined) { path = path + '/' + requestPath[3] @@ -1167,12 +1167,12 @@ exports.newHttpInterface = function newHttpInterface() { break case 'WebServer': // This means the WebServer folder. { - SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + 'WebServer/' + requestPath[2], httpResponse) + SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + '/WebServer/' + requestPath[2], httpResponse) } break case 'externalScripts': // This means the WebServer folder. { - SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + 'WebServer/externalScripts/' + requestPath[2], httpResponse) + SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + '/WebServer/externalScripts/' + requestPath[2], httpResponse) } break case 'Plotters': // This means the plotter folder, not to be confused with the Plotters script! @@ -1187,12 +1187,12 @@ exports.newHttpInterface = function newHttpInterface() { break case 'ChartLayers': { - SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_UI + '/' + endpointOrFile + '/' + requestPath[2], httpResponse) + SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + '/UI/' + endpointOrFile + '/' + requestPath[2], httpResponse) } break case 'Files': { - SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_DATA_FILES + '/' + requestPath[2], httpResponse) + SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + '/UI/Data-Files/src/' + requestPath[2], httpResponse) } break case 'Fonts': diff --git a/Desktop/httpInterface.js b/Desktop/httpInterface.js index 0fb3b12a5..ddbddda7e 100644 --- a/Desktop/httpInterface.js +++ b/Desktop/httpInterface.js @@ -37,7 +37,7 @@ exports.newHttpInterface = function newHttpInterface() { switch (endpointOrFile) { case 'Images': // This means the Images folder. { - let path = global.env.PATH_TO_CLIENT + 'WebServer/Images/' + requestPath[2] + let path = global.env.PATH_TO_CLIENT + '/WebServer/Images/' + requestPath[2] if (requestPath[3] !== undefined) { path = path + '/' + requestPath[3] diff --git a/Environment.js b/Environment.js index a237cf14f..04a9bd49d 100644 --- a/Environment.js +++ b/Environment.js @@ -10,9 +10,7 @@ exports.newEnvironment = function () { PATH_TO_LOG_FILES: './Log-Files', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: '../Projects/ProjectsSchema.json', - PATH_TO_UI: './UI', - PATH_TO_DATA_FILES: './UI/Data-Files/src', - PATH_TO_CLIENT: './Client/', + PATH_TO_CLIENT: './Client', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', PATH_TO_MY_WORKSPACES: './My-Workspaces', PATH_TO_FONTS: './Client/WebServer/Fonts' diff --git a/EnvironmentForDebug.js b/EnvironmentForDebug.js index d92780a6e..e792280ee 100644 --- a/EnvironmentForDebug.js +++ b/EnvironmentForDebug.js @@ -12,10 +12,8 @@ exports.newEnvironment = function () { PATH_TO_LOG_FILES: './Log-Files', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', - PATH_TO_UI: './UI', - PATH_TO_DATA_FILES: './UI/Data-Files/src', - PATH_TO_CLIENT: './Client/', - PATH_TO_DESKTOP: './Desktop/', + PATH_TO_CLIENT: './Client', + PATH_TO_DESKTOP: './Desktop', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', PATH_TO_MY_WORKSPACES: './My-Workspaces', PATH_TO_FONTS: './Client/WebServer/Fonts' diff --git a/Projects/Foundations/SA/Utilities/HttpResponses.js b/Projects/Foundations/SA/Utilities/HttpResponses.js index 987e4f9c7..e14637245 100644 --- a/Projects/Foundations/SA/Utilities/HttpResponses.js +++ b/Projects/Foundations/SA/Utilities/HttpResponses.js @@ -113,9 +113,9 @@ exports.newFoundationsUtilitiesHttpResponses = function () { httpResponse.end('\n') } - function respondWithStyleSheet(httpResponse, path, fileName) { + function respondWithStyleSheet(httpResponse, pathToApp, fileName) { let fs = SA.nodeModules.fs - let filePath = path + 'WebServer/css/' + fileName + let filePath = pathToApp + '/WebServer/css/' + fileName fs.readFile(filePath, onFileRead) function onFileRead(err, file) { @@ -173,7 +173,7 @@ exports.newFoundationsUtilitiesHttpResponses = function () { } } - function respondWithWebFile(httpResponse, fileNameReceived, path) { + function respondWithWebFile(httpResponse, fileNameReceived, pathToApp) { if (fileNameReceived === '') { /* @@ -181,7 +181,7 @@ exports.newFoundationsUtilitiesHttpResponses = function () { */ let fs = SA.nodeModules.fs - let fileName = path + 'WebServer/index.html' + let fileName = pathToApp + '/WebServer/index.html' fs.readFile(fileName, onFileRead) function onFileRead(err, file) { @@ -200,12 +200,12 @@ exports.newFoundationsUtilitiesHttpResponses = function () { switch (fileExtension) { case 'js': { - let path = global.env.PATH_TO_UI + '/' + completeFileName + let path = pathToApp + '/UI/' + completeFileName SA.projects.foundations.utilities.httpResponses.respondWithFile(path, httpResponse) break } case 'css': { - SA.projects.foundations.utilities.httpResponses.respondWithStyleSheet(httpResponse, path, completeFileName) + SA.projects.foundations.utilities.httpResponses.respondWithStyleSheet(httpResponse, pathToApp, completeFileName) break } } From 17656a12c0231987a86271a6843d7c431aac13e6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 5 Sep 2021 11:18:45 +0200 Subject: [PATCH 3/8] run command --- run.js | 115 +++---------------------------------------------- runPlatform.js | 112 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 110 deletions(-) create mode 100644 runPlatform.js diff --git a/run.js b/run.js index d2af79959..52d6eb636 100644 --- a/run.js +++ b/run.js @@ -1,112 +1,7 @@ - -if ( - process.argv.includes("help") || - process.argv.includes("-help") || - process.argv.includes("--help") || - process.argv.includes("h") || - process.argv.includes("-h") || - process.argv.includes("--h") || - process.argv.includes("/h") || - process.argv.includes("/help")) { - - console.log('Superalgos') - console.log('') - console.log('VERSION: Beta 11') - console.log('') - console.log('WEB: https://www.superalgos.org') - console.log('') - console.log('GITHUB: https://www.github.com/Superalgos') - console.log('') - console.log('DOCUMENTATION: https://docs.superalgos.org/') - console.log('') - console.log('TELEGRAM SUPPORT: https://t.me/superalgoscommunity') - console.log('') - console.log('USAGE: node run [help] [noBrowser] [minMemo]') - console.log('') - console.log('OPTIONS:') - console.log('') - console.log(' help: Optional. Use it to see this helping information.') - console.log(' noBrowser: Optional. Use it to launch Superalgos Client only. The UI will not be loaded.') - console.log(' minMemo: Optional. Use it when your hardware has less than 8 Gb or memory.') - console.log('') - console.log('If you are having an error while trying to run this Client, consider this:') - - fatalErrorHelp() - return -} - -const OS = require("os") -let totalRAM = OS.totalmem() // Get total ram installed -totalRAM = totalRAM / 1024 / 1024 -let optimalRAM = totalRAM * 0.85 // Use 85% of installed RAM -let maxOldSpaceSize = "--max-old-space-size=" + (optimalRAM.toFixed(0)).toString() -let options - +console.log('Superalgos is growing...! and now, besides the platform for algo-traders, there is a p2p Network (under development) and a Social Trading Desktop app (under development).') console.log('') -console.log("Total RAM istalled in this system is ........................ " + (totalRAM / 1024).toFixed(2) + " GB") -if (process.argv.includes("minMemo")) { - options = { - stdio: 'inherit' - } - console.log("Total RAM available for Superalgos is ....................... 512 MB") -} else { - options = { - execArgv: [maxOldSpaceSize], - stdio: 'inherit' - } - console.log("Total RAM available for Superalgos is ....................... " + (optimalRAM / 1024).toFixed(2) + " GB") - console.log('') - console.log('If you would like to enable less RAM than that, use the minMemo flag. Note: RAM will be allocated only if needed.') -} +console.log('For that reason, the "node run" command was deprecated and now you need to use one of these:') console.log('') -console.log('OPTIONS ACCEPTED:') -console.log('') -let optionsAccepted = 0 - - -if (process.argv.includes("minMemo")) { - optionsAccepted++ - console.log('minMemo ..................................................... Running with Minimun Required Memory.') -} - -if (process.argv.includes("noBrowser")) { - optionsAccepted++ - console.log('noBrowser ................................................... Running without User Interface.') -} - -if (optionsAccepted === 0) { - console.log('none ........................................................ Running without any command line options.') -} -console.log('') -console.log('') - -const fs = require('fs') -const path = './Client/node_modules' -if ( fs.existsSync(path) ) { - - try { - const { fork } = require('child_process') - fork('./Client/client.js', process.argv, options) - } catch (err) { - console.log('') - console.log('Fail to create Client Process.') - console.log('') - - fatalErrorHelp() - } -} else { - console.log('') - console.log('ERROR: node_modules does not exist. Try running node setup to solve this issue. Then try again. You can finded detailed instructions for this in the ReadMe.') - console.log('') -} - - -function fatalErrorHelp() { - console.log('') - console.log('* If your device does not have MORE than 8GB of RAM then please use the minMemo option.') - console.log('* If your OS does not have a user interface, please use the noBrowser option.') - console.log('') - console.log('If you continue having trouble to start the Client try:') - console.log('') - console.log('node run minMemo noBrowser') -} +console.log('node runPlatform --------------- This will run the Platform for algo-tarders.') +console.log('node runNetwork --------------- This will run the p2p Network for social trading.') +console.log('node runDesktop --------------- This will run the Desktop App for crypto users willing to engage in social trading.') \ No newline at end of file diff --git a/runPlatform.js b/runPlatform.js new file mode 100644 index 000000000..d2af79959 --- /dev/null +++ b/runPlatform.js @@ -0,0 +1,112 @@ + +if ( + process.argv.includes("help") || + process.argv.includes("-help") || + process.argv.includes("--help") || + process.argv.includes("h") || + process.argv.includes("-h") || + process.argv.includes("--h") || + process.argv.includes("/h") || + process.argv.includes("/help")) { + + console.log('Superalgos') + console.log('') + console.log('VERSION: Beta 11') + console.log('') + console.log('WEB: https://www.superalgos.org') + console.log('') + console.log('GITHUB: https://www.github.com/Superalgos') + console.log('') + console.log('DOCUMENTATION: https://docs.superalgos.org/') + console.log('') + console.log('TELEGRAM SUPPORT: https://t.me/superalgoscommunity') + console.log('') + console.log('USAGE: node run [help] [noBrowser] [minMemo]') + console.log('') + console.log('OPTIONS:') + console.log('') + console.log(' help: Optional. Use it to see this helping information.') + console.log(' noBrowser: Optional. Use it to launch Superalgos Client only. The UI will not be loaded.') + console.log(' minMemo: Optional. Use it when your hardware has less than 8 Gb or memory.') + console.log('') + console.log('If you are having an error while trying to run this Client, consider this:') + + fatalErrorHelp() + return +} + +const OS = require("os") +let totalRAM = OS.totalmem() // Get total ram installed +totalRAM = totalRAM / 1024 / 1024 +let optimalRAM = totalRAM * 0.85 // Use 85% of installed RAM +let maxOldSpaceSize = "--max-old-space-size=" + (optimalRAM.toFixed(0)).toString() +let options + +console.log('') +console.log("Total RAM istalled in this system is ........................ " + (totalRAM / 1024).toFixed(2) + " GB") +if (process.argv.includes("minMemo")) { + options = { + stdio: 'inherit' + } + console.log("Total RAM available for Superalgos is ....................... 512 MB") +} else { + options = { + execArgv: [maxOldSpaceSize], + stdio: 'inherit' + } + console.log("Total RAM available for Superalgos is ....................... " + (optimalRAM / 1024).toFixed(2) + " GB") + console.log('') + console.log('If you would like to enable less RAM than that, use the minMemo flag. Note: RAM will be allocated only if needed.') +} +console.log('') +console.log('OPTIONS ACCEPTED:') +console.log('') +let optionsAccepted = 0 + + +if (process.argv.includes("minMemo")) { + optionsAccepted++ + console.log('minMemo ..................................................... Running with Minimun Required Memory.') +} + +if (process.argv.includes("noBrowser")) { + optionsAccepted++ + console.log('noBrowser ................................................... Running without User Interface.') +} + +if (optionsAccepted === 0) { + console.log('none ........................................................ Running without any command line options.') +} +console.log('') +console.log('') + +const fs = require('fs') +const path = './Client/node_modules' +if ( fs.existsSync(path) ) { + + try { + const { fork } = require('child_process') + fork('./Client/client.js', process.argv, options) + } catch (err) { + console.log('') + console.log('Fail to create Client Process.') + console.log('') + + fatalErrorHelp() + } +} else { + console.log('') + console.log('ERROR: node_modules does not exist. Try running node setup to solve this issue. Then try again. You can finded detailed instructions for this in the ReadMe.') + console.log('') +} + + +function fatalErrorHelp() { + console.log('') + console.log('* If your device does not have MORE than 8GB of RAM then please use the minMemo option.') + console.log('* If your OS does not have a user interface, please use the noBrowser option.') + console.log('') + console.log('If you continue having trouble to start the Client try:') + console.log('') + console.log('node run minMemo noBrowser') +} From 781f6b8fa16fda986fe21906d0d99870efefd834 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 5 Sep 2021 11:46:18 +0200 Subject: [PATCH 4/8] Client Files into its own folder --- Environment.js | 4 +- EnvironmentForDebug.js | 4 +- {Client => Platform/Client}/ccxtServer.js | 0 {Client => Platform/Client}/dataFileServer.js | 0 {Client => Platform/Client}/eventServer.js | 0 {Client => Platform/Client}/githubServer.js | 0 {Client => Platform/Client}/httpInterface.js | 0 {Client => Platform/Client}/pluginServer.js | 0 .../Client}/projectFileServer.js | 0 .../Client}/taskManagerServer.js | 0 {Client => Platform/Client}/uiFileServer.js | 0 {Client => Platform/Client}/web3Server.js | 0 {Client => Platform/Client}/webServer.js | 0 .../Client}/webSocketsInterface.js | 0 Client/client.js => Platform/PlatformApp.js | 40 +++++++++--------- {Client => Platform}/UI/.vscode/settings.json | 0 {Client => Platform}/UI/Animation.js | 0 {Client => Platform}/UI/AppLoader.js | 0 {Client => Platform}/UI/AppPostLoader.js | 0 {Client => Platform}/UI/AppPreLoader.js | 0 {Client => Platform}/UI/Canvas.js | 0 {Client => Platform}/UI/Container.js | 0 .../UI/Data-Files/src/DailyFiles.js | 0 .../UI/Data-Files/src/FileCloud.js | 0 .../UI/Data-Files/src/FileCursor.js | 0 .../UI/Data-Files/src/FileSequence.js | 0 .../UI/Data-Files/src/FileStorage.js | 0 .../UI/Data-Files/src/MarketFiles.js | 0 .../UI/Data-Files/src/SingleFile.js | 0 {Client => Platform}/UI/EventHandler.js | 0 {Client => Platform}/UI/EventsServerClient.js | 0 {Client => Platform}/UI/Frame.js | 0 {Client => Platform}/UI/Globals.js | 0 {Client => Platform}/UI/ProductStorage.js | 0 {Client => Platform}/UI/Utilities.js | 0 {Client => Platform}/UI/VideoRecorder.js | 0 {Client => Platform}/UI/WebDebugLog.js | 0 .../WebServer/Fonts/Saira-Condensed.woff2 | Bin .../WebServer/Fonts/Saira.woff2 | Bin .../WebServer/Fonts/fontawesome-webfont.ttf | Bin .../WebServer/Fonts/fontawesome-webfont.woff | Bin .../WebServer/Fonts/fontawesome-webfont.woff2 | Bin .../WebServer/Fonts/segoeui.woff | Bin .../WebServer/Images/Languages/CN.png | Bin .../WebServer/Images/Languages/DE.png | Bin .../WebServer/Images/Languages/EN.png | Bin .../WebServer/Images/Languages/ES.png | Bin .../WebServer/Images/Languages/FR.png | Bin .../WebServer/Images/Languages/ID.png | Bin .../WebServer/Images/Languages/IT.png | Bin .../WebServer/Images/Languages/RU.png | Bin .../WebServer/Images/Languages/TR.png | Bin .../Tutorial/Gifs/welcome-binanceus.gif | Bin .../WebServer/Images/favicon.ico | Bin .../Images/sa-beta10-logo-horiz-dark.png | Bin .../Images/sa-beta11-logo-horiz-dark.png | Bin .../Images/sa-beta6-logo-horiz-dark.png | Bin .../Images/sa-beta7-logo-horiz-dark.png | Bin .../Images/sa-beta8-logo-horiz-dark.png | Bin .../Images/sa-beta9-logo-horiz-dark.png | Bin .../Images/superalgos-header-background.png | Bin .../superalgos-logo-for-color-background.png | Bin .../Images/superalgos-logo-white.png | Bin .../WebServer/Images/superalgos-logo.png | Bin .../WebServer/Images/superalgos-platform.jpg | Bin .../WebServer/LegacyPlotter.js | 0 .../WebServer/PlotterPanel.js | 0 .../WebServer/css/context-menu.css | 0 .../WebServer/css/credits.css | 0 {Client => Platform}/WebServer/css/docs.css | 0 .../WebServer/css/font-awasome.css | 0 .../WebServer/css/governance.css | 0 {Client => Platform}/WebServer/css/main.css | 0 {Client => Platform}/WebServer/css/prism.css | 0 .../WebServer/css/tutorial.css | 0 .../externalScripts/CCapture.all.min.js | 0 .../WebServer/externalScripts/gif.worker.js | 0 .../WebServer/externalScripts/prism.js | 0 {Client => Platform}/WebServer/index.html | 0 {Client => Platform}/WebServer/require.js | 0 {Client => Platform}/package-lock.json | 0 {Client => Platform}/package.json | 0 .../Foundations/SA/Utilities/HttpResponses.js | 1 + runPlatform.js | 30 ++++++------- 84 files changed, 39 insertions(+), 40 deletions(-) rename {Client => Platform/Client}/ccxtServer.js (100%) rename {Client => Platform/Client}/dataFileServer.js (100%) rename {Client => Platform/Client}/eventServer.js (100%) rename {Client => Platform/Client}/githubServer.js (100%) rename {Client => Platform/Client}/httpInterface.js (100%) rename {Client => Platform/Client}/pluginServer.js (100%) rename {Client => Platform/Client}/projectFileServer.js (100%) rename {Client => Platform/Client}/taskManagerServer.js (100%) rename {Client => Platform/Client}/uiFileServer.js (100%) rename {Client => Platform/Client}/web3Server.js (100%) rename {Client => Platform/Client}/webServer.js (100%) rename {Client => Platform/Client}/webSocketsInterface.js (100%) rename Client/client.js => Platform/PlatformApp.js (81%) rename {Client => Platform}/UI/.vscode/settings.json (100%) rename {Client => Platform}/UI/Animation.js (100%) rename {Client => Platform}/UI/AppLoader.js (100%) rename {Client => Platform}/UI/AppPostLoader.js (100%) rename {Client => Platform}/UI/AppPreLoader.js (100%) rename {Client => Platform}/UI/Canvas.js (100%) rename {Client => Platform}/UI/Container.js (100%) rename {Client => Platform}/UI/Data-Files/src/DailyFiles.js (100%) rename {Client => Platform}/UI/Data-Files/src/FileCloud.js (100%) rename {Client => Platform}/UI/Data-Files/src/FileCursor.js (100%) rename {Client => Platform}/UI/Data-Files/src/FileSequence.js (100%) rename {Client => Platform}/UI/Data-Files/src/FileStorage.js (100%) rename {Client => Platform}/UI/Data-Files/src/MarketFiles.js (100%) rename {Client => Platform}/UI/Data-Files/src/SingleFile.js (100%) rename {Client => Platform}/UI/EventHandler.js (100%) rename {Client => Platform}/UI/EventsServerClient.js (100%) rename {Client => Platform}/UI/Frame.js (100%) rename {Client => Platform}/UI/Globals.js (100%) rename {Client => Platform}/UI/ProductStorage.js (100%) rename {Client => Platform}/UI/Utilities.js (100%) rename {Client => Platform}/UI/VideoRecorder.js (100%) rename {Client => Platform}/UI/WebDebugLog.js (100%) rename {Client => Platform}/WebServer/Fonts/Saira-Condensed.woff2 (100%) rename {Client => Platform}/WebServer/Fonts/Saira.woff2 (100%) rename {Client => Platform}/WebServer/Fonts/fontawesome-webfont.ttf (100%) rename {Client => Platform}/WebServer/Fonts/fontawesome-webfont.woff (100%) rename {Client => Platform}/WebServer/Fonts/fontawesome-webfont.woff2 (100%) rename {Client => Platform}/WebServer/Fonts/segoeui.woff (100%) rename {Client => Platform}/WebServer/Images/Languages/CN.png (100%) rename {Client => Platform}/WebServer/Images/Languages/DE.png (100%) rename {Client => Platform}/WebServer/Images/Languages/EN.png (100%) rename {Client => Platform}/WebServer/Images/Languages/ES.png (100%) rename {Client => Platform}/WebServer/Images/Languages/FR.png (100%) rename {Client => Platform}/WebServer/Images/Languages/ID.png (100%) rename {Client => Platform}/WebServer/Images/Languages/IT.png (100%) rename {Client => Platform}/WebServer/Images/Languages/RU.png (100%) rename {Client => Platform}/WebServer/Images/Languages/TR.png (100%) rename {Client => Platform}/WebServer/Images/Tutorial/Gifs/welcome-binanceus.gif (100%) rename {Client => Platform}/WebServer/Images/favicon.ico (100%) rename {Client => Platform}/WebServer/Images/sa-beta10-logo-horiz-dark.png (100%) rename {Client => Platform}/WebServer/Images/sa-beta11-logo-horiz-dark.png (100%) rename {Client => Platform}/WebServer/Images/sa-beta6-logo-horiz-dark.png (100%) rename {Client => Platform}/WebServer/Images/sa-beta7-logo-horiz-dark.png (100%) rename {Client => Platform}/WebServer/Images/sa-beta8-logo-horiz-dark.png (100%) rename {Client => Platform}/WebServer/Images/sa-beta9-logo-horiz-dark.png (100%) rename {Client => Platform}/WebServer/Images/superalgos-header-background.png (100%) rename {Client => Platform}/WebServer/Images/superalgos-logo-for-color-background.png (100%) rename {Client => Platform}/WebServer/Images/superalgos-logo-white.png (100%) rename {Client => Platform}/WebServer/Images/superalgos-logo.png (100%) rename {Client => Platform}/WebServer/Images/superalgos-platform.jpg (100%) rename {Client => Platform}/WebServer/LegacyPlotter.js (100%) rename {Client => Platform}/WebServer/PlotterPanel.js (100%) rename {Client => Platform}/WebServer/css/context-menu.css (100%) rename {Client => Platform}/WebServer/css/credits.css (100%) rename {Client => Platform}/WebServer/css/docs.css (100%) rename {Client => Platform}/WebServer/css/font-awasome.css (100%) rename {Client => Platform}/WebServer/css/governance.css (100%) rename {Client => Platform}/WebServer/css/main.css (100%) rename {Client => Platform}/WebServer/css/prism.css (100%) rename {Client => Platform}/WebServer/css/tutorial.css (100%) rename {Client => Platform}/WebServer/externalScripts/CCapture.all.min.js (100%) rename {Client => Platform}/WebServer/externalScripts/gif.worker.js (100%) rename {Client => Platform}/WebServer/externalScripts/prism.js (100%) rename {Client => Platform}/WebServer/index.html (100%) rename {Client => Platform}/WebServer/require.js (100%) rename {Client => Platform}/package-lock.json (100%) rename {Client => Platform}/package.json (100%) diff --git a/Environment.js b/Environment.js index 04a9bd49d..212d54e6e 100644 --- a/Environment.js +++ b/Environment.js @@ -10,10 +10,10 @@ exports.newEnvironment = function () { PATH_TO_LOG_FILES: './Log-Files', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: '../Projects/ProjectsSchema.json', - PATH_TO_CLIENT: './Client', + PATH_TO_CLIENT: './Platform', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', PATH_TO_MY_WORKSPACES: './My-Workspaces', - PATH_TO_FONTS: './Client/WebServer/Fonts' + PATH_TO_FONTS: './Platform/WebServer/Fonts' } return thisObject diff --git a/EnvironmentForDebug.js b/EnvironmentForDebug.js index e792280ee..932ed022b 100644 --- a/EnvironmentForDebug.js +++ b/EnvironmentForDebug.js @@ -12,11 +12,11 @@ exports.newEnvironment = function () { PATH_TO_LOG_FILES: './Log-Files', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', - PATH_TO_CLIENT: './Client', + PATH_TO_CLIENT: './Platform', PATH_TO_DESKTOP: './Desktop', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', PATH_TO_MY_WORKSPACES: './My-Workspaces', - PATH_TO_FONTS: './Client/WebServer/Fonts' + PATH_TO_FONTS: './Platform/WebServer/Fonts' } return thisObject diff --git a/Client/ccxtServer.js b/Platform/Client/ccxtServer.js similarity index 100% rename from Client/ccxtServer.js rename to Platform/Client/ccxtServer.js diff --git a/Client/dataFileServer.js b/Platform/Client/dataFileServer.js similarity index 100% rename from Client/dataFileServer.js rename to Platform/Client/dataFileServer.js diff --git a/Client/eventServer.js b/Platform/Client/eventServer.js similarity index 100% rename from Client/eventServer.js rename to Platform/Client/eventServer.js diff --git a/Client/githubServer.js b/Platform/Client/githubServer.js similarity index 100% rename from Client/githubServer.js rename to Platform/Client/githubServer.js diff --git a/Client/httpInterface.js b/Platform/Client/httpInterface.js similarity index 100% rename from Client/httpInterface.js rename to Platform/Client/httpInterface.js diff --git a/Client/pluginServer.js b/Platform/Client/pluginServer.js similarity index 100% rename from Client/pluginServer.js rename to Platform/Client/pluginServer.js diff --git a/Client/projectFileServer.js b/Platform/Client/projectFileServer.js similarity index 100% rename from Client/projectFileServer.js rename to Platform/Client/projectFileServer.js diff --git a/Client/taskManagerServer.js b/Platform/Client/taskManagerServer.js similarity index 100% rename from Client/taskManagerServer.js rename to Platform/Client/taskManagerServer.js diff --git a/Client/uiFileServer.js b/Platform/Client/uiFileServer.js similarity index 100% rename from Client/uiFileServer.js rename to Platform/Client/uiFileServer.js diff --git a/Client/web3Server.js b/Platform/Client/web3Server.js similarity index 100% rename from Client/web3Server.js rename to Platform/Client/web3Server.js diff --git a/Client/webServer.js b/Platform/Client/webServer.js similarity index 100% rename from Client/webServer.js rename to Platform/Client/webServer.js diff --git a/Client/webSocketsInterface.js b/Platform/Client/webSocketsInterface.js similarity index 100% rename from Client/webSocketsInterface.js rename to Platform/Client/webSocketsInterface.js diff --git a/Client/client.js b/Platform/PlatformApp.js similarity index 81% rename from Client/client.js rename to Platform/PlatformApp.js index c5ab5b73a..6e1733389 100644 --- a/Client/client.js +++ b/Platform/PlatformApp.js @@ -6,24 +6,24 @@ global.env = ENVIRONMENT_MODULE process.on('uncaughtException', function (err) { if (err.message && err.message.indexOf("EADDRINUSE") > 0) { - console.log("A Superalgos Client cannot be started. Reason: the port configured migth be being used by another application, or Superalgos might be already running.") + console.log("The Superalgos Platform Client cannot be started. Reason: the port configured migth be being used by another application, or Superalgos Platform Client might be already running.") return } - console.log('[ERROR] Client -> client-> uncaughtException -> err.message = ' + err.message) - console.log('[ERROR] Client -> client-> uncaughtException -> err.stack = ' + err.stack) - console.log('[ERROR] Client -> client-> uncaughtException -> err = ' + err) + console.log('[ERROR] Platform App -> uncaughtException -> err.message = ' + err.message) + console.log('[ERROR] Platform App -> uncaughtException -> err.stack = ' + err.stack) + console.log('[ERROR] Platform App -> uncaughtException -> err = ' + err) process.exit(1) }) process.on('unhandledRejection', (reason, p) => { // Signal user that a necissary node module is missing if (reason.code == 'MODULE_NOT_FOUND') { - console.log("[ERROR] Dependency library not found. Please try running the 'node setup' command and then restart the Client.") - console.log('[ERROR] Client -> client-> reason = ' + JSON.stringify(reason)) + console.log("[ERROR] Dependency library not found. Please try running the 'node setup' command and then restart the Superalgos Platform Client.") + console.log('[ERROR] Platform App -> reason = ' + JSON.stringify(reason)) process.exit(1) } - console.log('[ERROR] Client -> client-> unhandledRejection -> reason = ' + JSON.stringify(reason)) - console.log('[ERROR] Client -> client-> unhandledRejection -> p = ' + JSON.stringify(p)) + console.log('[ERROR] Platform App -> unhandledRejection -> reason = ' + JSON.stringify(reason)) + console.log('[ERROR] Platform App -> unhandledRejection -> p = ' + JSON.stringify(p)) process.exit(1) }) @@ -55,20 +55,20 @@ global.CUSTOM_FAIL_RESPONSE = { } /* Servers */ -let WEB_SERVER = require('./webServer.js') -let DATA_FILE_SERVER = require('./dataFileServer.js') -let PROJECT_FILE_SERVER = require('./projectFileServer.js') -let UI_FILE_SERVER = require('./uiFileServer.js') -let PLUGIN_SERVER = require('./pluginServer.js') -let EVENT_SERVER = require('./eventServer.js') -let TASK_MANAGER_SERVER = require('./taskManagerServer.js') -let CCXT_SERVER = require('./ccxtServer.js') -let WEB3_SERVER = require('./web3Server.js') -let GITHUB_SERVER = require('./githubServer.js') +let WEB_SERVER = require('./Client/webServer.js') +let DATA_FILE_SERVER = require('./Client/dataFileServer.js') +let PROJECT_FILE_SERVER = require('./Client/projectFileServer.js') +let UI_FILE_SERVER = require('./Client/uiFileServer.js') +let PLUGIN_SERVER = require('./Client/pluginServer.js') +let EVENT_SERVER = require('./Client/eventServer.js') +let TASK_MANAGER_SERVER = require('./Client/taskManagerServer.js') +let CCXT_SERVER = require('./Client/ccxtServer.js') +let WEB3_SERVER = require('./Client/web3Server.js') +let GITHUB_SERVER = require('./Client/githubServer.js') /* Network Interfaces */ -let WEB_SOCKETS_INTERFACE = require('./webSocketsInterface.js') -let HTTP_INTERFACE = require('./httpInterface.js') +let WEB_SOCKETS_INTERFACE = require('./Client/webSocketsInterface.js') +let HTTP_INTERFACE = require('./Client/httpInterface.js') try { /* diff --git a/Client/UI/.vscode/settings.json b/Platform/UI/.vscode/settings.json similarity index 100% rename from Client/UI/.vscode/settings.json rename to Platform/UI/.vscode/settings.json diff --git a/Client/UI/Animation.js b/Platform/UI/Animation.js similarity index 100% rename from Client/UI/Animation.js rename to Platform/UI/Animation.js diff --git a/Client/UI/AppLoader.js b/Platform/UI/AppLoader.js similarity index 100% rename from Client/UI/AppLoader.js rename to Platform/UI/AppLoader.js diff --git a/Client/UI/AppPostLoader.js b/Platform/UI/AppPostLoader.js similarity index 100% rename from Client/UI/AppPostLoader.js rename to Platform/UI/AppPostLoader.js diff --git a/Client/UI/AppPreLoader.js b/Platform/UI/AppPreLoader.js similarity index 100% rename from Client/UI/AppPreLoader.js rename to Platform/UI/AppPreLoader.js diff --git a/Client/UI/Canvas.js b/Platform/UI/Canvas.js similarity index 100% rename from Client/UI/Canvas.js rename to Platform/UI/Canvas.js diff --git a/Client/UI/Container.js b/Platform/UI/Container.js similarity index 100% rename from Client/UI/Container.js rename to Platform/UI/Container.js diff --git a/Client/UI/Data-Files/src/DailyFiles.js b/Platform/UI/Data-Files/src/DailyFiles.js similarity index 100% rename from Client/UI/Data-Files/src/DailyFiles.js rename to Platform/UI/Data-Files/src/DailyFiles.js diff --git a/Client/UI/Data-Files/src/FileCloud.js b/Platform/UI/Data-Files/src/FileCloud.js similarity index 100% rename from Client/UI/Data-Files/src/FileCloud.js rename to Platform/UI/Data-Files/src/FileCloud.js diff --git a/Client/UI/Data-Files/src/FileCursor.js b/Platform/UI/Data-Files/src/FileCursor.js similarity index 100% rename from Client/UI/Data-Files/src/FileCursor.js rename to Platform/UI/Data-Files/src/FileCursor.js diff --git a/Client/UI/Data-Files/src/FileSequence.js b/Platform/UI/Data-Files/src/FileSequence.js similarity index 100% rename from Client/UI/Data-Files/src/FileSequence.js rename to Platform/UI/Data-Files/src/FileSequence.js diff --git a/Client/UI/Data-Files/src/FileStorage.js b/Platform/UI/Data-Files/src/FileStorage.js similarity index 100% rename from Client/UI/Data-Files/src/FileStorage.js rename to Platform/UI/Data-Files/src/FileStorage.js diff --git a/Client/UI/Data-Files/src/MarketFiles.js b/Platform/UI/Data-Files/src/MarketFiles.js similarity index 100% rename from Client/UI/Data-Files/src/MarketFiles.js rename to Platform/UI/Data-Files/src/MarketFiles.js diff --git a/Client/UI/Data-Files/src/SingleFile.js b/Platform/UI/Data-Files/src/SingleFile.js similarity index 100% rename from Client/UI/Data-Files/src/SingleFile.js rename to Platform/UI/Data-Files/src/SingleFile.js diff --git a/Client/UI/EventHandler.js b/Platform/UI/EventHandler.js similarity index 100% rename from Client/UI/EventHandler.js rename to Platform/UI/EventHandler.js diff --git a/Client/UI/EventsServerClient.js b/Platform/UI/EventsServerClient.js similarity index 100% rename from Client/UI/EventsServerClient.js rename to Platform/UI/EventsServerClient.js diff --git a/Client/UI/Frame.js b/Platform/UI/Frame.js similarity index 100% rename from Client/UI/Frame.js rename to Platform/UI/Frame.js diff --git a/Client/UI/Globals.js b/Platform/UI/Globals.js similarity index 100% rename from Client/UI/Globals.js rename to Platform/UI/Globals.js diff --git a/Client/UI/ProductStorage.js b/Platform/UI/ProductStorage.js similarity index 100% rename from Client/UI/ProductStorage.js rename to Platform/UI/ProductStorage.js diff --git a/Client/UI/Utilities.js b/Platform/UI/Utilities.js similarity index 100% rename from Client/UI/Utilities.js rename to Platform/UI/Utilities.js diff --git a/Client/UI/VideoRecorder.js b/Platform/UI/VideoRecorder.js similarity index 100% rename from Client/UI/VideoRecorder.js rename to Platform/UI/VideoRecorder.js diff --git a/Client/UI/WebDebugLog.js b/Platform/UI/WebDebugLog.js similarity index 100% rename from Client/UI/WebDebugLog.js rename to Platform/UI/WebDebugLog.js diff --git a/Client/WebServer/Fonts/Saira-Condensed.woff2 b/Platform/WebServer/Fonts/Saira-Condensed.woff2 similarity index 100% rename from Client/WebServer/Fonts/Saira-Condensed.woff2 rename to Platform/WebServer/Fonts/Saira-Condensed.woff2 diff --git a/Client/WebServer/Fonts/Saira.woff2 b/Platform/WebServer/Fonts/Saira.woff2 similarity index 100% rename from Client/WebServer/Fonts/Saira.woff2 rename to Platform/WebServer/Fonts/Saira.woff2 diff --git a/Client/WebServer/Fonts/fontawesome-webfont.ttf b/Platform/WebServer/Fonts/fontawesome-webfont.ttf similarity index 100% rename from Client/WebServer/Fonts/fontawesome-webfont.ttf rename to Platform/WebServer/Fonts/fontawesome-webfont.ttf diff --git a/Client/WebServer/Fonts/fontawesome-webfont.woff b/Platform/WebServer/Fonts/fontawesome-webfont.woff similarity index 100% rename from Client/WebServer/Fonts/fontawesome-webfont.woff rename to Platform/WebServer/Fonts/fontawesome-webfont.woff diff --git a/Client/WebServer/Fonts/fontawesome-webfont.woff2 b/Platform/WebServer/Fonts/fontawesome-webfont.woff2 similarity index 100% rename from Client/WebServer/Fonts/fontawesome-webfont.woff2 rename to Platform/WebServer/Fonts/fontawesome-webfont.woff2 diff --git a/Client/WebServer/Fonts/segoeui.woff b/Platform/WebServer/Fonts/segoeui.woff similarity index 100% rename from Client/WebServer/Fonts/segoeui.woff rename to Platform/WebServer/Fonts/segoeui.woff diff --git a/Client/WebServer/Images/Languages/CN.png b/Platform/WebServer/Images/Languages/CN.png similarity index 100% rename from Client/WebServer/Images/Languages/CN.png rename to Platform/WebServer/Images/Languages/CN.png diff --git a/Client/WebServer/Images/Languages/DE.png b/Platform/WebServer/Images/Languages/DE.png similarity index 100% rename from Client/WebServer/Images/Languages/DE.png rename to Platform/WebServer/Images/Languages/DE.png diff --git a/Client/WebServer/Images/Languages/EN.png b/Platform/WebServer/Images/Languages/EN.png similarity index 100% rename from Client/WebServer/Images/Languages/EN.png rename to Platform/WebServer/Images/Languages/EN.png diff --git a/Client/WebServer/Images/Languages/ES.png b/Platform/WebServer/Images/Languages/ES.png similarity index 100% rename from Client/WebServer/Images/Languages/ES.png rename to Platform/WebServer/Images/Languages/ES.png diff --git a/Client/WebServer/Images/Languages/FR.png b/Platform/WebServer/Images/Languages/FR.png similarity index 100% rename from Client/WebServer/Images/Languages/FR.png rename to Platform/WebServer/Images/Languages/FR.png diff --git a/Client/WebServer/Images/Languages/ID.png b/Platform/WebServer/Images/Languages/ID.png similarity index 100% rename from Client/WebServer/Images/Languages/ID.png rename to Platform/WebServer/Images/Languages/ID.png diff --git a/Client/WebServer/Images/Languages/IT.png b/Platform/WebServer/Images/Languages/IT.png similarity index 100% rename from Client/WebServer/Images/Languages/IT.png rename to Platform/WebServer/Images/Languages/IT.png diff --git a/Client/WebServer/Images/Languages/RU.png b/Platform/WebServer/Images/Languages/RU.png similarity index 100% rename from Client/WebServer/Images/Languages/RU.png rename to Platform/WebServer/Images/Languages/RU.png diff --git a/Client/WebServer/Images/Languages/TR.png b/Platform/WebServer/Images/Languages/TR.png similarity index 100% rename from Client/WebServer/Images/Languages/TR.png rename to Platform/WebServer/Images/Languages/TR.png diff --git a/Client/WebServer/Images/Tutorial/Gifs/welcome-binanceus.gif b/Platform/WebServer/Images/Tutorial/Gifs/welcome-binanceus.gif similarity index 100% rename from Client/WebServer/Images/Tutorial/Gifs/welcome-binanceus.gif rename to Platform/WebServer/Images/Tutorial/Gifs/welcome-binanceus.gif diff --git a/Client/WebServer/Images/favicon.ico b/Platform/WebServer/Images/favicon.ico similarity index 100% rename from Client/WebServer/Images/favicon.ico rename to Platform/WebServer/Images/favicon.ico diff --git a/Client/WebServer/Images/sa-beta10-logo-horiz-dark.png b/Platform/WebServer/Images/sa-beta10-logo-horiz-dark.png similarity index 100% rename from Client/WebServer/Images/sa-beta10-logo-horiz-dark.png rename to Platform/WebServer/Images/sa-beta10-logo-horiz-dark.png diff --git a/Client/WebServer/Images/sa-beta11-logo-horiz-dark.png b/Platform/WebServer/Images/sa-beta11-logo-horiz-dark.png similarity index 100% rename from Client/WebServer/Images/sa-beta11-logo-horiz-dark.png rename to Platform/WebServer/Images/sa-beta11-logo-horiz-dark.png diff --git a/Client/WebServer/Images/sa-beta6-logo-horiz-dark.png b/Platform/WebServer/Images/sa-beta6-logo-horiz-dark.png similarity index 100% rename from Client/WebServer/Images/sa-beta6-logo-horiz-dark.png rename to Platform/WebServer/Images/sa-beta6-logo-horiz-dark.png diff --git a/Client/WebServer/Images/sa-beta7-logo-horiz-dark.png b/Platform/WebServer/Images/sa-beta7-logo-horiz-dark.png similarity index 100% rename from Client/WebServer/Images/sa-beta7-logo-horiz-dark.png rename to Platform/WebServer/Images/sa-beta7-logo-horiz-dark.png diff --git a/Client/WebServer/Images/sa-beta8-logo-horiz-dark.png b/Platform/WebServer/Images/sa-beta8-logo-horiz-dark.png similarity index 100% rename from Client/WebServer/Images/sa-beta8-logo-horiz-dark.png rename to Platform/WebServer/Images/sa-beta8-logo-horiz-dark.png diff --git a/Client/WebServer/Images/sa-beta9-logo-horiz-dark.png b/Platform/WebServer/Images/sa-beta9-logo-horiz-dark.png similarity index 100% rename from Client/WebServer/Images/sa-beta9-logo-horiz-dark.png rename to Platform/WebServer/Images/sa-beta9-logo-horiz-dark.png diff --git a/Client/WebServer/Images/superalgos-header-background.png b/Platform/WebServer/Images/superalgos-header-background.png similarity index 100% rename from Client/WebServer/Images/superalgos-header-background.png rename to Platform/WebServer/Images/superalgos-header-background.png diff --git a/Client/WebServer/Images/superalgos-logo-for-color-background.png b/Platform/WebServer/Images/superalgos-logo-for-color-background.png similarity index 100% rename from Client/WebServer/Images/superalgos-logo-for-color-background.png rename to Platform/WebServer/Images/superalgos-logo-for-color-background.png diff --git a/Client/WebServer/Images/superalgos-logo-white.png b/Platform/WebServer/Images/superalgos-logo-white.png similarity index 100% rename from Client/WebServer/Images/superalgos-logo-white.png rename to Platform/WebServer/Images/superalgos-logo-white.png diff --git a/Client/WebServer/Images/superalgos-logo.png b/Platform/WebServer/Images/superalgos-logo.png similarity index 100% rename from Client/WebServer/Images/superalgos-logo.png rename to Platform/WebServer/Images/superalgos-logo.png diff --git a/Client/WebServer/Images/superalgos-platform.jpg b/Platform/WebServer/Images/superalgos-platform.jpg similarity index 100% rename from Client/WebServer/Images/superalgos-platform.jpg rename to Platform/WebServer/Images/superalgos-platform.jpg diff --git a/Client/WebServer/LegacyPlotter.js b/Platform/WebServer/LegacyPlotter.js similarity index 100% rename from Client/WebServer/LegacyPlotter.js rename to Platform/WebServer/LegacyPlotter.js diff --git a/Client/WebServer/PlotterPanel.js b/Platform/WebServer/PlotterPanel.js similarity index 100% rename from Client/WebServer/PlotterPanel.js rename to Platform/WebServer/PlotterPanel.js diff --git a/Client/WebServer/css/context-menu.css b/Platform/WebServer/css/context-menu.css similarity index 100% rename from Client/WebServer/css/context-menu.css rename to Platform/WebServer/css/context-menu.css diff --git a/Client/WebServer/css/credits.css b/Platform/WebServer/css/credits.css similarity index 100% rename from Client/WebServer/css/credits.css rename to Platform/WebServer/css/credits.css diff --git a/Client/WebServer/css/docs.css b/Platform/WebServer/css/docs.css similarity index 100% rename from Client/WebServer/css/docs.css rename to Platform/WebServer/css/docs.css diff --git a/Client/WebServer/css/font-awasome.css b/Platform/WebServer/css/font-awasome.css similarity index 100% rename from Client/WebServer/css/font-awasome.css rename to Platform/WebServer/css/font-awasome.css diff --git a/Client/WebServer/css/governance.css b/Platform/WebServer/css/governance.css similarity index 100% rename from Client/WebServer/css/governance.css rename to Platform/WebServer/css/governance.css diff --git a/Client/WebServer/css/main.css b/Platform/WebServer/css/main.css similarity index 100% rename from Client/WebServer/css/main.css rename to Platform/WebServer/css/main.css diff --git a/Client/WebServer/css/prism.css b/Platform/WebServer/css/prism.css similarity index 100% rename from Client/WebServer/css/prism.css rename to Platform/WebServer/css/prism.css diff --git a/Client/WebServer/css/tutorial.css b/Platform/WebServer/css/tutorial.css similarity index 100% rename from Client/WebServer/css/tutorial.css rename to Platform/WebServer/css/tutorial.css diff --git a/Client/WebServer/externalScripts/CCapture.all.min.js b/Platform/WebServer/externalScripts/CCapture.all.min.js similarity index 100% rename from Client/WebServer/externalScripts/CCapture.all.min.js rename to Platform/WebServer/externalScripts/CCapture.all.min.js diff --git a/Client/WebServer/externalScripts/gif.worker.js b/Platform/WebServer/externalScripts/gif.worker.js similarity index 100% rename from Client/WebServer/externalScripts/gif.worker.js rename to Platform/WebServer/externalScripts/gif.worker.js diff --git a/Client/WebServer/externalScripts/prism.js b/Platform/WebServer/externalScripts/prism.js similarity index 100% rename from Client/WebServer/externalScripts/prism.js rename to Platform/WebServer/externalScripts/prism.js diff --git a/Client/WebServer/index.html b/Platform/WebServer/index.html similarity index 100% rename from Client/WebServer/index.html rename to Platform/WebServer/index.html diff --git a/Client/WebServer/require.js b/Platform/WebServer/require.js similarity index 100% rename from Client/WebServer/require.js rename to Platform/WebServer/require.js diff --git a/Client/package-lock.json b/Platform/package-lock.json similarity index 100% rename from Client/package-lock.json rename to Platform/package-lock.json diff --git a/Client/package.json b/Platform/package.json similarity index 100% rename from Client/package.json rename to Platform/package.json diff --git a/Projects/Foundations/SA/Utilities/HttpResponses.js b/Projects/Foundations/SA/Utilities/HttpResponses.js index e14637245..e804240f3 100644 --- a/Projects/Foundations/SA/Utilities/HttpResponses.js +++ b/Projects/Foundations/SA/Utilities/HttpResponses.js @@ -182,6 +182,7 @@ exports.newFoundationsUtilitiesHttpResponses = function () { let fs = SA.nodeModules.fs let fileName = pathToApp + '/WebServer/index.html' + console.log(fileName) fs.readFile(fileName, onFileRead) function onFileRead(err, file) { diff --git a/runPlatform.js b/runPlatform.js index d2af79959..8b5771861 100644 --- a/runPlatform.js +++ b/runPlatform.js @@ -11,25 +11,23 @@ if ( console.log('Superalgos') console.log('') - console.log('VERSION: Beta 11') + console.log('VERSION: Beta 11') console.log('') - console.log('WEB: https://www.superalgos.org') + console.log('WEB: https://www.superalgos.org') console.log('') - console.log('GITHUB: https://www.github.com/Superalgos') + console.log('GITHUB: https://www.github.com/Superalgos') console.log('') - console.log('DOCUMENTATION: https://docs.superalgos.org/') + console.log('TELEGRAM COMMUNITY: https://t.me/superalgoscommunity') console.log('') - console.log('TELEGRAM SUPPORT: https://t.me/superalgoscommunity') - console.log('') - console.log('USAGE: node run [help] [noBrowser] [minMemo]') + console.log('USAGE: node runPlatform [help] [noBrowser] [minMemo]') console.log('') console.log('OPTIONS:') console.log('') - console.log(' help: Optional. Use it to see this helping information.') - console.log(' noBrowser: Optional. Use it to launch Superalgos Client only. The UI will not be loaded.') - console.log(' minMemo: Optional. Use it when your hardware has less than 8 Gb or memory.') + console.log(' help: Optional. Use it to see this helping information.') + console.log(' noBrowser: Optional. Use it to launch Superalgos Platform Client only. The Superalgos Platform UI will not be loaded.') + console.log(' minMemo: Optional. Use it when your hardware has less than 8 Gb or memory.') console.log('') - console.log('If you are having an error while trying to run this Client, consider this:') + console.log('If you are having an error while trying to run the Superalgos Platform Client, consider this:') fatalErrorHelp() return @@ -81,15 +79,15 @@ console.log('') console.log('') const fs = require('fs') -const path = './Client/node_modules' +const path = './Platform/node_modules' if ( fs.existsSync(path) ) { try { const { fork } = require('child_process') - fork('./Client/client.js', process.argv, options) + fork('./Platform/PlatformApp.js', process.argv, options) } catch (err) { console.log('') - console.log('Fail to create Client Process.') + console.log('Fail to create Superalgos Platform Client Process.') console.log('') fatalErrorHelp() @@ -106,7 +104,7 @@ function fatalErrorHelp() { console.log('* If your device does not have MORE than 8GB of RAM then please use the minMemo option.') console.log('* If your OS does not have a user interface, please use the noBrowser option.') console.log('') - console.log('If you continue having trouble to start the Client try:') + console.log('If you continue having trouble to start the Superalgos Platform Client try:') console.log('') - console.log('node run minMemo noBrowser') + console.log('node runPlatform minMemo noBrowser') } From b942c855aca740f2532119e36a70be7829e76c9f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 5 Sep 2021 11:55:21 +0200 Subject: [PATCH 5/8] update some dependencies --- Platform/package-lock.json | 2464 +----------------------------------- Platform/package.json | 8 +- 2 files changed, 63 insertions(+), 2409 deletions(-) diff --git a/Platform/package-lock.json b/Platform/package-lock.json index 119b3c164..4cf5b15ba 100644 --- a/Platform/package-lock.json +++ b/Platform/package-lock.json @@ -4,40 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@ethereumjs/common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.4.0.tgz", - "integrity": "sha512-UdkhFWzWcJCZVsj1O/H8/oqj/0RVYjLc1OhPjBrQdALAkQHpCp8xXI4WLnuGTADqTdJZww0NtgwG+TRPkXt27w==", - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.0" - } - }, - "@ethereumjs/tx": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.0.tgz", - "integrity": "sha512-yTwEj2lVzSMgE6Hjw9Oa1DZks/nKTWM8Wn4ykDNapBPua2f4nXO3qKnni86O6lgDj5fVNRqbDsD0yy7/XNGDEA==", - "requires": { - "@ethereumjs/common": "^2.4.0", - "ethereumjs-util": "^7.1.0" - } - }, - "@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, "@ethersproject/abstract-provider": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz", @@ -271,6 +237,13 @@ "@ethersproject/web": "^5.4.0", "bech32": "1.1.4", "ws": "7.4.6" + }, + "dependencies": { + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + } } }, "@ethersproject/random": { @@ -516,6 +489,13 @@ "is-plain-object": "^5.0.0", "node-fetch": "^2.6.1", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } } }, "@octokit/request-error": { @@ -547,19 +527,6 @@ "@octokit/openapi-types": "^9.4.0" } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, "@types/bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", @@ -589,85 +556,11 @@ "@types/node": "*" } }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, "aes-js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "available-typed-arrays": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", - "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -681,19 +574,6 @@ "safe-buffer": "^5.0.1" } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, "bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", @@ -704,43 +584,16 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" - }, "blakejs": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -768,71 +621,6 @@ "safe-buffer": "^5.0.1" } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, "bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", @@ -851,81 +639,11 @@ "safe-buffer": "^5.1.2" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, - "bufferutil": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz", - "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==", - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "ccxt": { "version": "1.51.98", "resolved": "https://registry.npmjs.org/ccxt/-/ccxt-1.51.98.tgz", @@ -936,34 +654,6 @@ "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz", "integrity": "sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=" }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -973,102 +663,11 @@ "safe-buffer": "^5.0.1" } }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -1094,138 +693,21 @@ "sha.js": "^2.4.8" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", @@ -1240,141 +722,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - }, - "dependencies": { - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - } - } - }, "ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", @@ -1427,34 +774,6 @@ } } }, - "ethereumjs-util": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz", - "integrity": "sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - } - } - }, "ethers": { "version": "5.4.4", "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.4.4.tgz", @@ -1510,22 +829,6 @@ } } }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, "ethjs-util": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", @@ -1535,11 +838,6 @@ "strip-hex-prefix": "1.0.0" } }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -1549,143 +847,12 @@ "safe-buffer": "^5.1.1" } }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "fetch-blob": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.2.tgz", + "integrity": "sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==", "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" + "web-streams-polyfill": "^3.0.3" } }, "fs.realpath": { @@ -1693,37 +860,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -1737,83 +873,6 @@ "path-is-absolute": "^1.0.0" } }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -1850,72 +909,10 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "http": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" }, "inflight": { "version": "1.0.6", @@ -1931,158 +928,27 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" - }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" - }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "is-generator-function": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", - "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==" + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-hex-prefixed": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" - }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "is-docker": "^2.0.0" } }, "js-sha3": { @@ -2090,50 +956,6 @@ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "keccak": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", @@ -2143,24 +965,11 @@ "node-gyp-build": "^4.2.0" } }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, "lookpath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/lookpath/-/lookpath-1.2.2.tgz", "integrity": "sha512-k2Gmn8iV6qdME3ztZC2spubmQISimFOPLuQKiPaLcVdRz0IpdxrNClVepMlyTJlhodm/zG/VfbkWERm3kUIh+Q==" }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -2171,61 +980,6 @@ "safe-buffer": "^5.1.2" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" - }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "requires": { - "mime-db": "1.49.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -2244,187 +998,25 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "requires": { - "mkdirp": "*" - } - }, - "mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } - } - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz", + "integrity": "sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==", + "requires": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^3.1.2" + } }, "node-gyp-build": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==" }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=", - "requires": { - "http-https": "^1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2434,63 +1026,20 @@ } }, "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", + "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", "requires": { - "is-wsl": "^1.1.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "requires": { - "p-finally": "^1.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-headers": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", - "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -2503,82 +1052,6 @@ "sha.js": "^2.4.8" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -2587,31 +1060,6 @@ "safe-buffer": "^5.1.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -2622,48 +1070,6 @@ "util-deprecate": "^1.0.1" } }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - } - } - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -2694,11 +1100,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -2714,66 +1115,11 @@ "node-gyp-build": "^4.2.0" } }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -2783,31 +1129,6 @@ "safe-buffer": "^5.0.1" } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "simple-git": { "version": "2.42.0", "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.42.0.tgz", @@ -2833,50 +1154,6 @@ } } }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -2900,587 +1177,20 @@ "is-hex-prefixed": "1.0.0" } }, - "swarm-js": { - "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "tar": { - "version": "4.4.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.15.tgz", - "integrity": "sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "utf-8-validate": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.5.tgz", - "integrity": "sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ==", - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "web3": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.5.0.tgz", - "integrity": "sha512-p6mOU+t11tV5Z0W9ISO2ReZlbB1ICp755ogl3OXOWZ+/oWy12wwnIva+z+ypsZc3P8gaoGaTvEwSfXM9NF164w==", - "requires": { - "web3-bzz": "1.5.0", - "web3-core": "1.5.0", - "web3-eth": "1.5.0", - "web3-eth-personal": "1.5.0", - "web3-net": "1.5.0", - "web3-shh": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-bzz": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.5.0.tgz", - "integrity": "sha512-IqlecWpwTMO/O5qa0XZZubQh4GwAtO/CR+e2FQ/7oB5eXQyre3DZ/MYu8s5HCLxCR33Fcqda9q2dbNtm1wSQYw==", - "requires": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40" - } - }, - "web3-core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.5.0.tgz", - "integrity": "sha512-1o/etaPSK8tFOWTA6df3t9J6ez4epeyzlNmyh/gx8uHasfa16XLKD8//A9T+O/TmvyQAaA4hWAsQcvlRcuaZ8Q==", - "requires": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.5.0", - "web3-core-method": "1.5.0", - "web3-core-requestmanager": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-core-helpers": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.5.0.tgz", - "integrity": "sha512-7s5SrJbG5O0C0Oi9mqKLYchco72djZhk59B7kTla5vUorAxMc99SY7k9BoDgwbFl2dlZon2GtFUEW2RXUNkb1g==", - "requires": { - "web3-eth-iban": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-core-method": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.5.0.tgz", - "integrity": "sha512-izPhpjbn9jVBjMeFcsU7a5+/nqni9hS5oU+d00HJGTVbp8KV6zplhYw4GjkRqyy6OQzooO8Gx2MMUyRdv5x1wg==", - "requires": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "web3-core-helpers": "1.5.0", - "web3-core-promievent": "1.5.0", - "web3-core-subscriptions": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-core-promievent": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.5.0.tgz", - "integrity": "sha512-7GkbOIMtcp1qN8LRMMmwIhulzEldT+3Mu7ii2WgAcFFKT1yzUl6Gmycf8mmoEKpAuADAQ9Qeyk0PskTR6rTYlQ==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.5.0.tgz", - "integrity": "sha512-Sr5T2JuXOAsINJ2tf7Rgi2a+Dy2suBDKT8eMc1pcspPmaBhvTKOQfM9XdsO4yjJKYw6tt/Tagw4GKZm4IOx7mw==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.5.0", - "web3-providers-http": "1.5.0", - "web3-providers-ipc": "1.5.0", - "web3-providers-ws": "1.5.0" - } - }, - "web3-core-subscriptions": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.5.0.tgz", - "integrity": "sha512-dx9P1mZvJkQRiYpSo9SvFhYNzy5E9GHeLOc3uqxPaDxKU7Cu9fJnFHo/P6+wfD6ZhGIP23ZLK/uyor5UpdTqDQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.5.0" - } - }, - "web3-eth": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.5.0.tgz", - "integrity": "sha512-31ni3YliTDYLKuWt8naitZ4Ru86whZlqvz6kFzCaBaCR/EumzA9ejzNbcX9okio9zUtKSHH37Bk0+WogfU9Jqg==", - "requires": { - "web3-core": "1.5.0", - "web3-core-helpers": "1.5.0", - "web3-core-method": "1.5.0", - "web3-core-subscriptions": "1.5.0", - "web3-eth-abi": "1.5.0", - "web3-eth-accounts": "1.5.0", - "web3-eth-contract": "1.5.0", - "web3-eth-ens": "1.5.0", - "web3-eth-iban": "1.5.0", - "web3-eth-personal": "1.5.0", - "web3-net": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-eth-abi": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.5.0.tgz", - "integrity": "sha512-rfT/SvfZY9+SNJRzTHxLFaebQRBhS67tGqUqLxlyy6EsAcEmIs/g4mAUH5atYwPE9bOQeiVoLKLbwJEBIcw86w==", - "requires": { - "@ethersproject/abi": "5.0.7", - "web3-utils": "1.5.0" - } - }, - "web3-eth-accounts": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.5.0.tgz", - "integrity": "sha512-tqvF2bKECaS6jDux8h1dkdsrfb5SHIVVA6hu2lJmZNlTBqFIq2A8rfOkqcanie6Vh5n5U7Dnc2LUoN9rxgaSSg==", - "requires": { - "@ethereumjs/common": "^2.3.0", - "@ethereumjs/tx": "^3.2.1", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", - "scrypt-js": "^3.0.1", - "uuid": "3.3.2", - "web3-core": "1.5.0", - "web3-core-helpers": "1.5.0", - "web3-core-method": "1.5.0", - "web3-utils": "1.5.0" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "web3-eth-contract": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.5.0.tgz", - "integrity": "sha512-v4laiJRzdcoDwvqaMCzJH1BUosbTVsd01Qp+9v05Q94KycjkdeahPRXX6PEcUNW/ZF8N006iExUweGjajTZnTA==", - "requires": { - "@types/bn.js": "^4.11.5", - "web3-core": "1.5.0", - "web3-core-helpers": "1.5.0", - "web3-core-method": "1.5.0", - "web3-core-promievent": "1.5.0", - "web3-core-subscriptions": "1.5.0", - "web3-eth-abi": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-eth-ens": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.5.0.tgz", - "integrity": "sha512-NiaGfOnsCqP+3hOCeP3Q9IrlV/1ZCDiv8VmN1yF5Ya6n6YeO4TJU9MKP8i5038RFETjLIfGtXr5fthbsob30hA==", - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.5.0", - "web3-core-helpers": "1.5.0", - "web3-core-promievent": "1.5.0", - "web3-eth-abi": "1.5.0", - "web3-eth-contract": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-eth-iban": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.5.0.tgz", - "integrity": "sha512-cFfiPA8xs4lemMJjDb9KfXzPvs6rBrRl8y4rgvh/JWlZZgKolzo7KLXq4NR3oFd/C81s0Lslvz2st1EREp5CNA==", - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.5.0" - } - }, - "web3-eth-personal": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.5.0.tgz", - "integrity": "sha512-FYBrzMS6q/df8ud1kAN1p6lqdP/pd0szogcuyrVyi++bFQiovnR+QosudFsbn/aAZPDHOEh0UV4P3KVKbLqw9g==", - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.5.0", - "web3-core-helpers": "1.5.0", - "web3-core-method": "1.5.0", - "web3-net": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-net": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.5.0.tgz", - "integrity": "sha512-oGgEtO2fRtJjAp0K1/fvH247MeeDemFL+5tF+PxII9b/gBxnVe+MzP+oNLr4dTrweromjv34tioR3kUgsqwCWg==", - "requires": { - "web3-core": "1.5.0", - "web3-core-method": "1.5.0", - "web3-utils": "1.5.0" - } - }, - "web3-providers-http": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.5.0.tgz", - "integrity": "sha512-y1RuxsCGrWdsIUyuZBEN+3F8trl3bDZNajwLS2KYBGlB99sWYZHPmvbAsBpaW1d/I12W0fQiWOVzp63L7KPTow==", - "requires": { - "web3-core-helpers": "1.5.0", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.5.0.tgz", - "integrity": "sha512-Hda9wlOaIJC9/qMOVkayK+fbBHDZBmPcoL7TfjQX7hrtZn8V3+gR27ciyRXmuW7QD3hDg7CJfe5uRK8brh3nSA==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.5.0" - } - }, - "web3-providers-ws": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.5.0.tgz", - "integrity": "sha512-TCwOhu5WbuQCSUoar+U+7N1NqI4A6MlcdZqsC7AhTogYYtnXOPRWfiHMZtUP7Qw50GKJ37FIH3YDItcHTNHd6A==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.5.0", - "websocket": "^1.0.32" - } - }, - "web3-shh": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.5.0.tgz", - "integrity": "sha512-TwpcxXNh+fBnyRcCPPqVqaCB4IjSpVL2/5OR2WwCnZwejs1ife+pej8DYVZWm0m1tSzIDRTdNbsJf/DN0cAxYQ==", - "requires": { - "web3-core": "1.5.0", - "web3-core-method": "1.5.0", - "web3-core-subscriptions": "1.5.0", - "web3-net": "1.5.0" - } - }, - "web3-utils": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.0.tgz", - "integrity": "sha512-hNyw7Oxi6TM3ivXmv4hK5Cvyi9ML3UoKtcCYvLF9woPWh5v2dwCCVO1U3Iq5HHK7Dqq28t1d4CxWHqUfOfAkgg==", - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } + "web-streams-polyfill": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.1.0.tgz", + "integrity": "sha512-wO9r1YnYe7kFBLHyyVEhV1H8VRWoNiNnuP+v/HUUmSTaRF8F93Kmd3JMrETx0f11GXxRek6OcL2QtjFIdc5WYw==" }, "wrappy": { "version": "1.0.2", @@ -3488,65 +1198,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "requires": { - "xhr-request": "^1.1.0" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.1.tgz", + "integrity": "sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ==" } } } diff --git a/Platform/package.json b/Platform/package.json index d09113f0b..b428eed27 100644 --- a/Platform/package.json +++ b/Platform/package.json @@ -13,12 +13,12 @@ "ethereumjs-common": "^1.5.2", "ethereumjs-tx": "^2.1.2", "ethers": "^5.4.4", + "http": "0.0.1-security", "lookpath": "^1.2.2", - "node-fetch": "2.6.1", - "open": "^6.4.0", + "node-fetch": "^3.0.0", + "open": "^8.2.1", "rimraf": "^3.0.2", "simple-git": "^2.42.0", - "web3": "^1.5.0", - "ws": "^7.4.6" + "ws": "^8.2.1" } } From 2a88a3778a8bed34c1ede530d7d5212f29998c14 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 5 Sep 2021 12:11:16 +0200 Subject: [PATCH 6/8] Dependencies Upgraded --- .vscode/settings.json | 1 + Network/.vscode/settings.json | 1 + Platform/PlatformApp.js | 2 +- TaskServer/.vscode/settings.json | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 0bf7da203..e94f27f6f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,7 @@ "**/Data-Storage": true, "**/Documentation": true, "**/Log-Files": true, + "**/node_modules": true, "**/Deprecated-Code": true }, "search.maintainFileSearchCache": true diff --git a/Network/.vscode/settings.json b/Network/.vscode/settings.json index 0bf7da203..e94f27f6f 100644 --- a/Network/.vscode/settings.json +++ b/Network/.vscode/settings.json @@ -10,6 +10,7 @@ "**/Data-Storage": true, "**/Documentation": true, "**/Log-Files": true, + "**/node_modules": true, "**/Deprecated-Code": true }, "search.maintainFileSearchCache": true diff --git a/Platform/PlatformApp.js b/Platform/PlatformApp.js index 6e1733389..31ea4b1d2 100644 --- a/Platform/PlatformApp.js +++ b/Platform/PlatformApp.js @@ -97,7 +97,7 @@ try { */ SA.nodeModules = { fs: require('fs'), - nodeFetch: require('node-fetch'), + nodeFetch: import('node-fetch'), open: require('open'), http: require('http'), ccxt: require('ccxt') diff --git a/TaskServer/.vscode/settings.json b/TaskServer/.vscode/settings.json index 0bf7da203..e94f27f6f 100644 --- a/TaskServer/.vscode/settings.json +++ b/TaskServer/.vscode/settings.json @@ -10,6 +10,7 @@ "**/Data-Storage": true, "**/Documentation": true, "**/Log-Files": true, + "**/node_modules": true, "**/Deprecated-Code": true }, "search.maintainFileSearchCache": true From 2d6eb2a8b896bad4efaf5b2d850c7ca791cbed9d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 5 Sep 2021 12:59:53 +0200 Subject: [PATCH 7/8] More Client Reorg --- Platform/Client/httpInterface.js | 2 +- Platform/Client/webSocketsInterface.js | 4 ++-- Platform/UI/Data-Files/{src => }/DailyFiles.js | 0 Platform/UI/Data-Files/{src => }/FileCloud.js | 0 Platform/UI/Data-Files/{src => }/FileCursor.js | 0 Platform/UI/Data-Files/{src => }/FileSequence.js | 0 Platform/UI/Data-Files/{src => }/FileStorage.js | 0 Platform/UI/Data-Files/{src => }/MarketFiles.js | 0 Platform/UI/Data-Files/{src => }/SingleFile.js | 0 Projects/Foundations/SA/Utilities/HttpResponses.js | 2 +- 10 files changed, 4 insertions(+), 4 deletions(-) rename Platform/UI/Data-Files/{src => }/DailyFiles.js (100%) rename Platform/UI/Data-Files/{src => }/FileCloud.js (100%) rename Platform/UI/Data-Files/{src => }/FileCursor.js (100%) rename Platform/UI/Data-Files/{src => }/FileSequence.js (100%) rename Platform/UI/Data-Files/{src => }/FileStorage.js (100%) rename Platform/UI/Data-Files/{src => }/MarketFiles.js (100%) rename Platform/UI/Data-Files/{src => }/SingleFile.js (100%) diff --git a/Platform/Client/httpInterface.js b/Platform/Client/httpInterface.js index b7f5e2296..5b3368fb8 100644 --- a/Platform/Client/httpInterface.js +++ b/Platform/Client/httpInterface.js @@ -1192,7 +1192,7 @@ exports.newHttpInterface = function newHttpInterface() { break case 'Files': { - SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + '/UI/Data-Files/src/' + requestPath[2], httpResponse) + SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_CLIENT + '/UI/Data-Files/' + requestPath[2], httpResponse) } break case 'Fonts': diff --git a/Platform/Client/webSocketsInterface.js b/Platform/Client/webSocketsInterface.js index 79bb3a216..aaabd15d2 100644 --- a/Platform/Client/webSocketsInterface.js +++ b/Platform/Client/webSocketsInterface.js @@ -42,8 +42,8 @@ if (LOG_INFO === true) { console.log('Message Received: ' + message.substring(0, 1000)) } - - let messageArray = message.split('|*|') + + let messageArray = message.toString().split('|*|') let origin = messageArray[0] let nonce = messageArray[1] diff --git a/Platform/UI/Data-Files/src/DailyFiles.js b/Platform/UI/Data-Files/DailyFiles.js similarity index 100% rename from Platform/UI/Data-Files/src/DailyFiles.js rename to Platform/UI/Data-Files/DailyFiles.js diff --git a/Platform/UI/Data-Files/src/FileCloud.js b/Platform/UI/Data-Files/FileCloud.js similarity index 100% rename from Platform/UI/Data-Files/src/FileCloud.js rename to Platform/UI/Data-Files/FileCloud.js diff --git a/Platform/UI/Data-Files/src/FileCursor.js b/Platform/UI/Data-Files/FileCursor.js similarity index 100% rename from Platform/UI/Data-Files/src/FileCursor.js rename to Platform/UI/Data-Files/FileCursor.js diff --git a/Platform/UI/Data-Files/src/FileSequence.js b/Platform/UI/Data-Files/FileSequence.js similarity index 100% rename from Platform/UI/Data-Files/src/FileSequence.js rename to Platform/UI/Data-Files/FileSequence.js diff --git a/Platform/UI/Data-Files/src/FileStorage.js b/Platform/UI/Data-Files/FileStorage.js similarity index 100% rename from Platform/UI/Data-Files/src/FileStorage.js rename to Platform/UI/Data-Files/FileStorage.js diff --git a/Platform/UI/Data-Files/src/MarketFiles.js b/Platform/UI/Data-Files/MarketFiles.js similarity index 100% rename from Platform/UI/Data-Files/src/MarketFiles.js rename to Platform/UI/Data-Files/MarketFiles.js diff --git a/Platform/UI/Data-Files/src/SingleFile.js b/Platform/UI/Data-Files/SingleFile.js similarity index 100% rename from Platform/UI/Data-Files/src/SingleFile.js rename to Platform/UI/Data-Files/SingleFile.js diff --git a/Projects/Foundations/SA/Utilities/HttpResponses.js b/Projects/Foundations/SA/Utilities/HttpResponses.js index e804240f3..b12f7c458 100644 --- a/Projects/Foundations/SA/Utilities/HttpResponses.js +++ b/Projects/Foundations/SA/Utilities/HttpResponses.js @@ -182,7 +182,7 @@ exports.newFoundationsUtilitiesHttpResponses = function () { let fs = SA.nodeModules.fs let fileName = pathToApp + '/WebServer/index.html' - console.log(fileName) + fs.readFile(fileName, onFileRead) function onFileRead(err, file) { From 881682ea968243ecfb85a17a2c51b6b5dc8a9c34 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 5 Sep 2021 13:07:54 +0200 Subject: [PATCH 8/8] Client to Platform code reaorg --- runDesktop.js => desktop.js | 0 runNetwork.js => network.js | 0 runPlatform.js => platform.js | 0 run.js | 6 +++--- 4 files changed, 3 insertions(+), 3 deletions(-) rename runDesktop.js => desktop.js (100%) rename runNetwork.js => network.js (100%) rename runPlatform.js => platform.js (100%) diff --git a/runDesktop.js b/desktop.js similarity index 100% rename from runDesktop.js rename to desktop.js diff --git a/runNetwork.js b/network.js similarity index 100% rename from runNetwork.js rename to network.js diff --git a/runPlatform.js b/platform.js similarity index 100% rename from runPlatform.js rename to platform.js diff --git a/run.js b/run.js index 52d6eb636..cfa5e37c8 100644 --- a/run.js +++ b/run.js @@ -2,6 +2,6 @@ console.log('Superalgos is growing...! and now, besides the platform for algo-tr console.log('') console.log('For that reason, the "node run" command was deprecated and now you need to use one of these:') console.log('') -console.log('node runPlatform --------------- This will run the Platform for algo-tarders.') -console.log('node runNetwork --------------- This will run the p2p Network for social trading.') -console.log('node runDesktop --------------- This will run the Desktop App for crypto users willing to engage in social trading.') \ No newline at end of file +console.log('node platform --------------- This will run the Platform for algo-tarders.') +console.log('node network --------------- This will run the p2p Network for social trading.') +console.log('node desktop --------------- This will run the Desktop App for crypto users willing to engage in social trading.') \ No newline at end of file