forked from Superalgos/Superalgos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlatformRoot.js
119 lines (108 loc) · 3.51 KB
/
PlatformRoot.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
runRoot()
async function runRoot() {
/*
This module represents the execution root of the Platform App.
We use this module that is outside the Platform folder to
load all node dependencies and get them ready to the actual App.
*/
/*
The PL object is accessible everywhere at the Superalgos Platform Client.
It provides access to all modules built for this Client.
*/
global.PL = {}
/*
The SA object is accessible everywhere at the Superalgos Platform App.
It provides access to all modules built for Superalgos in general.
*/
global.SA = {}
/* Load Environment Variables */
let ENVIRONMENT = require('./Environment.js')
let ENVIRONMENT_MODULE = ENVIRONMENT.newEnvironment()
global.env = ENVIRONMENT_MODULE
/*
First thing is to load the project schema file.
*/
global.PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECT_SCHEMA)
/*
Setting up the modules that will be available, defined at the Project Schema file.
*/
let MULTI_PROJECT = require('./MultiProject.js')
let MULTI_PROJECT_MODULE = MULTI_PROJECT.newMultiProject()
MULTI_PROJECT_MODULE.initialize(PL, 'PL')
MULTI_PROJECT_MODULE.initialize(SA, 'SA')
/*
Setting up external dependencies.
*/
SA.nodeModules = {
fs: require('fs'),
util: require('util'),
path: require('path'),
ws: require('ws'),
web3: require('web3'),
ethers: require('ethers'),
ethereumjsTx: require('ethereumjs-tx'),
ethereumjsCommon: require('ethereumjs-common'),
nodeFetch: require('node-fetch'),
open: require('open'),
http: require('http'),
ccxt: require('ccxt'),
octokit: require('@octokit/rest'),
graphql: require('@octokit/graphql'),
simpleGit: require('simple-git'),
lookpath: require('lookpath'),
process: require('process'),
childProcess: require('child_process'),
twitter: require('twitter-api-v2'),
slack: require('@slack/web-api'),
discordjs: require('discord.js'),
discordRest: require('@discordjs/rest'),
discordTypes: require('discord-api-types/v9'),
axios: require('axios'),
hyperquest: require('hyperquest'),
ndjson: require('ndjson'),
pako: require('pako')
}
const saLogsPath = SA.nodeModules.path.join(global.env.PATH_TO_LOG_FILES, 'Platform')
SA.logger = require('./loggerFactory').loggerFactory(saLogsPath, 'SA')
/*
Setting up the App Schema Memory Map.
*/
let APP_SCHEMAS = require('./AppSchemas.js')
let APP_SCHEMAS_MODULE = APP_SCHEMAS.newAppSchemas()
await APP_SCHEMAS_MODULE.initialize()
/*
Version Management
*/
SA.version = require('./package.json').version
/*
Check if we are starting from a particular workspace.
*/
let initialWorkspace = {}
for (let i = 0; i < process.argv.length; i++) {
let arg = process.argv[i]
if (arg === 'noBrowser') { continue }
if (arg === 'minMemo') { continue }
if (arg.indexOf(':') >= 0) { continue }
if (arg.indexOf('/') >= 0) { continue }
if (initialWorkspace.project === undefined) {
if (arg !== 'My-Workspaces') {
initialWorkspace.type = 'Plugin'
initialWorkspace.project = arg
} else {
initialWorkspace.type = 'My-Workspaces'
initialWorkspace.project = ''
}
} else {
initialWorkspace.name = arg
}
}
run(initialWorkspace)
async function run(initialWorkspace) {
PL.app = require('./Platform/PlatformApp.js').newPlatformApp()
await PL.app.run(initialWorkspace)
SA.logger.info('Superalgos Platform App is Running!')
if (process.send) {
process.send('Running')
}
}
}