Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop

This commit is contained in:
Haroun committed 2021-09-14 22:45:00 +02:00
commit bd9dd06f89
120 files changed
+13505 -1022

No files matched your search

+1
View File
@@ -1,6 +1,7 @@
Data-Storage
Log-Files
My-Workspaces
My-Social-Trading-Data
debug.log
.DS_Store
*.db
+4 -2
View File
@@ -4,14 +4,16 @@
"**/Documentation": true,
"**/Log-Files": true,
"**/node_modules": true,
"**/Deprecated-Code": true
"**/Deprecated-Code": true,
"**/My-Social-Trading-Data": true,
},
"search.exclude": {
"**/Data-Storage": true,
"**/Documentation": true,
"**/Log-Files": true,
"**/node_modules": true,
"**/Deprecated-Code": true
"**/Deprecated-Code": true,
"**/My-Social-Trading-Data": true
},
"search.maintainFileSearchCache": true
}
+18 -15
View File
@@ -8,33 +8,36 @@ exports.newDesktopApp = function newDesktopApp() {
async function run() {
/*
let socialGraphService = NT.projects.network.modules.socialGraph.newSocialGraph()
await socialGraphService.initialize()
Heree we will store our running objects:
*/
DK.running = {}
/*
This is the Web Sockets client that interacts with the Superalgos Network.
*/
//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')
DK.running.socialGraph = DK.projects.socialTrading.modules.socialGraph.newSocialTradingModulesSocialGraph()
await DK.running.socialGraph.initialize()
/*
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)
This is the Web Sockets client that interacts with the Superalgos Network.
*/
DK.running.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient()
await DK.running.webSocketsClient.initialize()
console.log('Desktop Client Connected to Network Node via Web Sockets ................... Connected to port ' + global.env.NETWORK_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)
/* These are the Network Interfaces by which the UI interacts with the Desktop App.*/
DK.running.webSocketsInterface = DK.projects.socialTrading.modules.webSocketsInterface.newDesktopModulesWebSocketsInterface()
DK.running.webSocketsInterface.initialize()
console.log('Desktop Client Web Sockets Interface ....................................... Listening at port ' + global.env.CLIENT_WEB_SOCKETS_INTERFACE_PORT)
DK.running.httpInterface = DK.projects.socialTrading.modules.httpInterface.newDesktopModulesHttpInterface()
DK.running.httpInterface.initialize()
console.log('Desktop Client Http Interface .............................................. Listening at port ' + global.env.DESKTOP_HTTP_INTERFACE_PORT)
return
let queryMessage
let query
/*
-190
View File
@@ -1,190 +0,0 @@
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'
]
}
}
+15
View File
@@ -0,0 +1,15 @@
/* Root objects*/
let UI = {
projects: {},
schemas: { projectSchema: undefined },
environment: undefined,
running: {}
}
let SA = { projects: {} }
/*
We will use this to load functions originally intended for Nodejs
*/
let exports = {}
+379
View File
@@ -0,0 +1,379 @@
function newWebApp() {
let thisObject = {
initialize: initialize,
finalize: finalize
}
return thisObject
function finalize() {
}
async function initialize() {
try {
setupRootObject(UI, 'UI')
setupRootObject(SA, 'SA')
await UI.projects.socialTrading.modules.webSocketsClient.initialize()
loadWUserProfileTimeline()
loadWhoToFollow()
setupEventHandlers()
} catch (err) {
console.log('[ERROR] initialize -> err.stack = ' + err.stack)
}
}
function setupRootObject(rootObject, rootObjectName) {
/*
Here we will setup the UI object, with all the
projects and spaces.
*/
for (let i = 0; i < UI.schemas.projectSchema.length; i++) {
let projectDefinition = UI.schemas.projectSchema[i]
rootObject.projects[projectDefinition.propertyName] = {}
let projectInstance = rootObject.projects[projectDefinition.propertyName]
projectInstance.utilities = {}
projectInstance.globals = {}
projectInstance.functionLibraries = {}
projectInstance.modules = {}
if (projectDefinition[rootObjectName] === undefined) { continue }
/* Set up Globals of this Project */
if (projectDefinition[rootObjectName].globals !== undefined) {
for (let j = 0; j < projectDefinition[rootObjectName].globals.length; j++) {
let globalDefinition = projectDefinition[rootObjectName].globals[j]
if (exports[globalDefinition.functionName] === undefined) {
projectInstance.globals[globalDefinition.propertyName] = eval(globalDefinition.functionName + '()')
} else {
projectInstance.globals[globalDefinition.propertyName] = eval('exports.' + globalDefinition.functionName + '()')
}
}
}
/* Set up Utilities of this Project */
if (projectDefinition[rootObjectName].utilities !== undefined) {
for (let j = 0; j < projectDefinition[rootObjectName].utilities.length; j++) {
let utilityDefinition = projectDefinition[rootObjectName].utilities[j]
if (exports[utilityDefinition.functionName] === undefined) {
projectInstance.utilities[utilityDefinition.propertyName] = eval(utilityDefinition.functionName + '()')
} else {
projectInstance.utilities[utilityDefinition.propertyName] = eval('exports.' + utilityDefinition.functionName + '()')
}
}
}
/* Set up Function Libraries of this Project */
if (projectDefinition[rootObjectName].functionLibraries !== undefined) {
for (let j = 0; j < projectDefinition[rootObjectName].functionLibraries.length; j++) {
let functionLibraryDefinition = projectDefinition[rootObjectName].functionLibraries[j]
if (exports[functionLibraryDefinition.functionName] === undefined) {
projectInstance.functionLibraries[functionLibraryDefinition.propertyName] = eval(functionLibraryDefinition.functionName + '()')
} else {
projectInstance.functionLibraries[functionLibraryDefinition.propertyName] = eval('exports.' + functionLibraryDefinition.functionName + '()')
}
}
}
/* Set up Modules of this Project */
if (projectDefinition[rootObjectName].modules !== undefined) {
for (let j = 0; j < projectDefinition[rootObjectName].modules.length; j++) {
let functionLibraryDefinition = projectDefinition[rootObjectName].modules[j]
if (exports[functionLibraryDefinition.functionName] === undefined) {
projectInstance.modules[functionLibraryDefinition.propertyName] = eval(functionLibraryDefinition.functionName + '()')
} else {
projectInstance.modules[functionLibraryDefinition.propertyName] = eval('exports.' + functionLibraryDefinition.functionName + '()')
}
}
}
}
}
async function loadWUserProfileTimeline() {
let queryMessage = {
queryType: SA.projects.socialTrading.globals.queryTypes.EVENTS,
emitterUserProfileId: undefined,
initialIndex: SA.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_LAST,
amountRequested: 100,
direction: SA.projects.socialTrading.globals.queryConstants.DIRECTION_PAST
}
let query = {
requestType: 'Query',
queryMessage: JSON.stringify(queryMessage)
}
await UI.projects.socialTrading.modules.webSocketsClient.sendMessage(
JSON.stringify(query)
)
.then(addToContentDiv)
.catch(onError)
function onError(errorMessage) {
console.log('[ERROR] Query not executed. ' + errorMessage)
console.log('[ERROR] query = ' + JSON.stringify(query))
}
function addToContentDiv(events) {
let contentDiv = document.getElementById('content-div')
for (let i = 0; i < events.length; i++) {
let event = events[i]
let postDiv = document.createElement("div")
postDiv.setAttribute("class", "post-div")
let textNode = document.createTextNode('POST #' + i)
postDiv.appendChild(textNode)
contentDiv.appendChild(postDiv)
}
}
}
async function loadWhoToFollow() {
let queryMessage = {
queryType: SA.projects.socialTrading.globals.queryTypes.UNFOLLOWED_USER_PROFILES,
emitterUserProfileId: undefined,
initialIndex: SA.projects.socialTrading.globals.queryConstants.INITIAL_INDEX_FIRST,
amountRequested: 3,
direction: SA.projects.socialTrading.globals.queryConstants.DIRECTION_UP
}
let query = {
requestType: 'Query',
queryMessage: JSON.stringify(queryMessage)
}
await UI.projects.socialTrading.modules.webSocketsClient.sendMessage(
JSON.stringify(query)
)
.then(addWhoToFollowTable)
.catch(onError)
function onError(errorMessage) {
console.log('[ERROR] Query not executed. ' + errorMessage)
console.log('[ERROR] query = ' + JSON.stringify(query))
}
function addWhoToFollowTable(profiles) {
let contextCell = document.getElementById('who-to-follow-cell')
let table = document.createElement("table")
let tblBody = document.createElement("tbody")
for (let i = 0; i < profiles.length; i++) {
let profile = profiles[i]
let row = document.createElement("tr")
let cell = document.createElement("td")
addProfileToFollowTable(cell, profile)
row.appendChild(cell)
tblBody.appendChild(row)
}
table.appendChild(tblBody)
contextCell.appendChild(table)
table.setAttribute("class", "who-to-follow-table")
function addProfileToFollowTable(htmlElement, profile) {
let table = document.createElement("table")
let tblBody = document.createElement("tbody")
let row = document.createElement("tr")
{
let cell = document.createElement("td")
let textNode = document.createTextNode('Profile Picture')
cell.appendChild(textNode)
row.appendChild(cell)
}
{
let cell = document.createElement("td")
let textNode = document.createTextNode(profile.userProfileHandle)
cell.appendChild(textNode)
row.appendChild(cell)
}
{
let cell = document.createElement("td")
let span = document.createElement("span")
let button = document.createElement("button")
let text = document.createTextNode('Follow')
span.setAttribute("id", "profile-to-follow-span-" + profile.userProfileId)
button.setAttribute("id", "profile-to-follow-button-" + profile.userProfileId)
button.name = 'Follow Profile'
button.userProfileId = profile.userProfileId
span.setAttribute("class", "profile-to-follow-span")
button.setAttribute("class", "profile-to-follow-button")
button.appendChild(text)
span.appendChild(button)
cell.appendChild(span)
row.appendChild(cell)
}
tblBody.appendChild(row)
table.appendChild(tblBody)
htmlElement.appendChild(table)
table.setAttribute("class", "profile-to-follow-table")
}
}
}
function setupEventHandlers() {
/*
Add events to process button clicks , and mouseWheel.
*/
document.addEventListener("click", onClick)
document.addEventListener('mousewheel', onMouseWheel, false)
async function onClick(event) {
if (event.target && event.target.nodeName === "BUTTON") {
switch (event.target.name) {
case 'New Post': {
let textArea = document.getElementById("new-post-text-area")
await sendNewPostEvent(
textArea.value
)
.then(updateTextArea)
.catch(onError)
function updateTextArea() {
textArea.value = ""
}
break
}
case 'Follow Profile': {
await sendTargetUserProfileEvent(
event.target.userProfileId,
SA.projects.socialTrading.globals.eventTypes.FOLLOW_USER_PROFILE
)
.then(updateButton)
.catch(onError)
function updateButton() {
let span = document.getElementById('profile-to-follow-span-' + event.target.userProfileId)
let button = document.getElementById('profile-to-follow-button-' + event.target.userProfileId)
span.setAttribute("class", "profile-to-unfollow-span")
button.setAttribute("class", "profile-to-unfollow-button")
button.name = 'Unfollow Profile'
}
break
}
case 'Unfollow Profile': {
await sendTargetUserProfileEvent(
event.target.userProfileId,
SA.projects.socialTrading.globals.eventTypes.UNFOLLOW_USER_PROFILE
)
.then(updateButton)
.catch(onError)
function updateButton() {
let span = document.getElementById('profile-to-follow-span-' + event.target.userProfileId)
let button = document.getElementById('profile-to-follow-button-' + event.target.userProfileId)
span.setAttribute("class", "profile-to-follow-span")
button.setAttribute("class", "profile-to-follow-button")
button.name = 'Follow Profile'
}
break
}
}
}
/*
Error Handling
*/
function onError(errorMessage) {
console.log('[ERROR] Click event failed. ' + errorMessage)
}
}
function onMouseWheel(event) {
let scrollDiv = document.getElementById("scroll-div")
scrollDiv.scrollTop = scrollDiv.scrollTop + event.deltaY
}
}
async function sendTargetUserProfileEvent(
userProfileId,
eventType
) {
return new Promise((resolve, reject) => { asyncCall(resolve, reject) })
async function asyncCall(resolve, reject) {
let eventMessage
let event
eventMessage = {
eventType: eventType,
eventId: SA.projects.foundations.utilities.miscellaneousFunctions.genereteUniqueId(),
targetUserProfileId: userProfileId,
timestamp: new Date()
}
event = {
requestType: 'Event',
eventMessage: JSON.stringify(eventMessage)
}
await UI.projects.socialTrading.modules.webSocketsClient.sendMessage(
JSON.stringify(event)
)
.then(resolve)
.catch(onError)
function onError(errorMessage) {
console.log('[ERROR] Event not executed. ' + errorMessage)
console.log('[ERROR] event = ' + JSON.stringify(event))
reject(errorMessage)
}
}
}
async function sendNewPostEvent(
postText
) {
return new Promise((resolve, reject) => { asyncCall(resolve, reject) })
async function asyncCall(resolve, reject) {
let eventMessage
let event
eventMessage = {
eventType: SA.projects.socialTrading.globals.eventTypes.NEW_USER_POST,
eventId: SA.projects.foundations.utilities.miscellaneousFunctions.genereteUniqueId(),
text: postText,
timestamp: new Date()
}
event = {
requestType: 'Event',
eventMessage: JSON.stringify(eventMessage)
}
await UI.projects.socialTrading.modules.webSocketsClient.sendMessage(
JSON.stringify(event)
)
.then(resolve)
.catch(onError)
function onError(errorMessage) {
console.log('[ERROR] Event not executed. ' + errorMessage)
console.log('[ERROR] event = ' + JSON.stringify(event))
reject(errorMessage)
}
}
}
}
+118
View File
@@ -0,0 +1,118 @@
function newWebAppLoader() {
let thisObject = {
loadModules: loadModules
}
return thisObject
async function loadModules() {
try {
let modulesArray = [
'WebDebugLog.js',
'WebApp.js'
]
for (let i = 0; i < UI.schemas.projectSchema.length; i++) {
let project = UI.schemas.projectSchema[i]
if (project.UI !== undefined) {
if (project.UI.functionLibraries !== undefined) {
for (let j = 0; j < project.UI.functionLibraries.length; j++) {
let fileName = project.UI.functionLibraries[j].fileName
if (fileName === undefined) {fileName = project.UI.functionLibraries[j].name.replaceAll(' ', '') + '.js'}
modulesArray.push('Projects' + '/' + project.name + '/' + 'UI' + '/' + 'Function-Libraries' + '/' + fileName)
}
}
if (project.UI.utilities !== undefined) {
for (let j = 0; j < project.UI.utilities.length; j++) {
let fileName = project.UI.utilities[j].fileName
if (fileName === undefined) {fileName = project.UI.utilities[j].name.replaceAll(' ', '') + '.js'}
modulesArray.push('Projects' + '/' + project.name + '/' + 'UI' + '/' + 'Utilities' + '/' + fileName)
}
}
if (project.UI.globals !== undefined) {
for (let j = 0; j < project.UI.globals.length; j++) {
let fileName = project.UI.globals[j].fileName
if (fileName === undefined) {fileName = project.UI.globals[j].name.replaceAll(' ', '') + '.js'}
modulesArray.push('Projects' + '/' + project.name + '/' + 'UI' + '/' + 'Globals' + '/' + fileName)
}
}
if (project.UI.modules !== undefined) {
for (let j = 0; j < project.UI.modules.length; j++) {
let fileName = project.UI.modules[j].fileName
if (fileName === undefined) {fileName = project.UI.modules[j].name.replaceAll(' ', '') + '.js'}
modulesArray.push('Projects' + '/' + project.name + '/' + 'UI' + '/' + 'Modules' + '/' + fileName)
}
}
}
if (project.SA !== undefined) {
if (project.SA.functionLibraries !== undefined) {
for (let j = 0; j < project.SA.functionLibraries.length; j++) {
let fileName = project.SA.functionLibraries[j].fileName
if (fileName === undefined) {fileName = project.SA.functionLibraries[j].name.replaceAll(' ', '') + '.js'}
modulesArray.push('Projects' + '/' + project.name + '/' + 'SA' + '/' + 'Function-Libraries' + '/' + fileName)
}
}
if (project.SA.utilities !== undefined) {
for (let j = 0; j < project.SA.utilities.length; j++) {
let fileName = project.SA.utilities[j].fileName
if (fileName === undefined) {fileName = project.SA.utilities[j].name.replaceAll(' ', '') + '.js'}
modulesArray.push('Projects' + '/' + project.name + '/' + 'SA' + '/' + 'Utilities' + '/' + fileName)
}
}
if (project.SA.globals !== undefined) {
for (let j = 0; j < project.SA.globals.length; j++) {
let fileName = project.SA.globals[j].fileName
if (fileName === undefined) {fileName = project.SA.globals[j].name.replaceAll(' ', '') + '.js'}
modulesArray.push('Projects' + '/' + project.name + '/' + 'SA' + '/' + 'Globals' + '/' + fileName)
}
}
if (project.SA.modules !== undefined) {
for (let j = 0; j < project.SA.modules.length; j++) {
let fileName = project.SA.modules[j].fileName
if (fileName === undefined) {fileName = project.SA.modules[j].name.replaceAll(' ', '') + '.js'}
modulesArray.push('Projects' + '/' + project.name + '/' + 'SA' + '/' + 'Modules' + '/' + fileName)
}
}
}
}
downloadIncludedFiles()
function downloadIncludedFiles() {
let downloadedCounter = 0
for (let i = 0; i < modulesArray.length; i++) {
let path = modulesArray[i]
REQUIREJS([path], onRequired)
function onRequired(pModule) {
try {
downloadedCounter++
if (downloadedCounter === modulesArray.length) {
setTimeout(() => {
UI.running.webApp = newWebApp()
UI.running.webApp.initialize()
}, 500)
}
} catch (err) {
console.log('[ERROR] loadModules -> onRequired -> err = ' + err.stack)
}
}
}
}
} catch (err) {
console.log('[ERROR] loadModules -> err = ' + err.stack)
}
}
}
+102
View File
@@ -0,0 +1,102 @@
function loadSuperalgos() {
let browser = checkBrowserVersion()
if ((browser.name !== "Chrome" && browser.name !== "Safari") || (browser.name === "Chrome" && parseInt(browser.version) < 85) || (browser.name === "Safari" && parseInt(browser.version) < 13)) {
alert("Superalgos is officially supported on Google Chrome 85 or Safari 13.1 and above. Your browser version has been detected as potentially beneath this. If you continue you may experience some functionaility issues.\n\nDetected Browser: " + browser.name + "\nVersion: " + browser.version)
}
loadGlobals()
function loadGlobals() {
let path = "Globals.js"
REQUIREJS([path], onRequired)
function onRequired(pModule) {
setupEnvironment()
}
}
function setupEnvironment() {
httpRequest(undefined, 'Environment', onResponse)
function onResponse(err, file) {
UI.environment = JSON.parse(file)
setupProjectsSchema()
}
}
function setupProjectsSchema() {
httpRequest(undefined, 'ProjectsSchema', onResponse)
function onResponse(err, file) {
UI.schemas.projectSchema = JSON.parse(file)
loadModules()
}
}
function loadModules() {
let path = "WebAppLoader.js"
REQUIREJS([path], onRequired)
function onRequired(pModule) {
let APP_LOADER_MODULE = newWebAppLoader()
APP_LOADER_MODULE.loadModules()
}
}
}
function httpRequest(pContentToSend, pPath, callBackFunction) {
let xmlHttpRequest = new XMLHttpRequest()
xmlHttpRequest.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
try {
callBackFunction(undefined, xmlHttpRequest.responseText)
} catch (err) {
console.log('[ERROR] httpRequest -> httpRequest -> err.stack = ' + err.stack)
console.log('[ERROR] httpRequest -> httpRequest -> pContentToSend = ' + pContentToSend)
console.log('[ERROR] httpRequest -> httpRequest -> pPath = ' + pPath)
console.log('[ERROR] httpRequest -> httpRequest -> xmlHttpRequest.responseText = ' + xmlHttpRequest.responseText)
console.log('[ERROR] httpRequest -> httpRequest -> callBackFunction = ' + callBackFunction)
}
return
} else if (this.readyState === 4 && this.status === 404) {
callBackFunction({ result: "Fail", message: xmlHttpRequest.responseText.trim(), code: xmlHttpRequest.responseText.trim() })
return
}
}
if (pContentToSend === undefined) {
xmlHttpRequest.open("GET", pPath, true)
xmlHttpRequest.send()
} else {
try {
let blob = new Blob([pContentToSend], { type: 'text/plain' })
xmlHttpRequest.open("POST", pPath, true)
xmlHttpRequest.send(blob)
} catch (err) {
if (ERROR_LOG === true) { console.log("[ERROR] callServer -> err.message = " + err.message) }
callBackFunction({ result: "Fail", message: err.message })
}
}
}
function checkBrowserVersion() {
let ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []
if (/trident/i.test(M[1])) {
tem = /\brv[ :]+(\d+)/g.exec(ua) || []
return { name: 'IE', version: (tem[1] || '') }
}
if (M[1] === 'Chrome') {
tem = ua.match(/\bOPR|Edge\/(\d+)/)
if (tem != null) { return { name: 'Opera', version: tem[1] } }
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']
if ((tem = ua.match(/version\/(\d+)/i)) != null) { M.splice(1, 1, tem[1]) }
return {
name: M[0],
version: M[1]
}
}
+21
View File
@@ -0,0 +1,21 @@
function newWebDebugLog() {
try {
let thisObject = {
write: write,
fileName: 'undefined'
}
return thisObject
function write(pText) {
console.log(spacePad(thisObject.fileName, 50) + ' : ' + pText)
function spacePad(str, max) {
str = str.toString()
return str.length < max ? spacePad(' ' + str, max) : str
}
}
} catch (err) {
console.log(spacePad(MODULE_NAME, 50) + ' : ' + '[ERROR] WebDebugLog --> err = ' + err.stack)
}
}
File renamed without changes.
+282 -7
View File
@@ -22,13 +22,288 @@
font-style: normal;
}
kbd {
padding: 2px 8px;
font-size: 125%;
font-weight: 500;
.body{
overflow-y: hidden;
overflow-x: hidden;
}
.scroll-div {
position:absolute;
overflow-y: scroll;
overflow-x: hidden;
top:0px;
left:0px;
vertical-align: top;
height: 100%;
width: 100%;
color: #000;
background-color: #bcd643;
border-radius: 5px;
border-style: outset;
border-color: blue;
background-color: transparent;
border-width: 0px;
}
.static-div {
position: fixed;
top:0px;
left:18%;
width: 100%;
height: 100%;
padding: 0;
margin: 0;
color: #000;
background:transparent;
border-width: 0px;
border-collapse: collapse;
}
.content-div {
position:relative;
vertical-align: top;
height: 100%;
width: 30%;
left: 31.2%;
color: #000;
border-color: blue;
background-color:transparent;
border-width: 1px;
}
.post-placeholder {
vertical-align: top;
height: 50px;
width: 100%;
color: #000;
border-color: blue;
background-color: transparent;
border-width: 0px;
}
.post-div {
vertical-align: top;
height: 300px;
width: 100%;
color: #000;
border-color: blue;
background-color: transparent;
border-width: 0px;
}
.new-post-div {
vertical-align: top;
height: 300px;
width: 100%;
color: #000;
border-color: blue;
background-color: transparent;
border-width: 0px;
}
.page-table {
top:0px;
left:18%;
width: 64%;
height: 100%;
padding: 0;
margin: 0;
color: #000;
background:transparent;
border-width: 0px;
border-collapse: collapse;
}
.left-column {
position:relative;
top:0px;
width: 20%;
height: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.middle-column {
position:relative;
top:0px;
width: 50%;
height: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.right-column {
position:relative;
top:0px;
left:0px;
width: 30%;
height: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.left-table {
position:relative;
width: 100%;
height: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
border-collapse: collapse;
}
.logo-cell {
vertical-align: top;
width: 100%;
height: 70px;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.menu-cell {
vertical-align: top;
width: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.profile-cell {
vertical-align: bottom;
width: 100%;
height: 50px;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.middle-table {
position:relative;
width: 100%;
height: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
border-collapse: collapse;
}
.content-title-cell {
vertical-align: top;
width: 100%;
height: 50px;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
background-color: #ffffff;
}
.content-cell {
vertical-align: top;
width: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.right-table {
position:relative;
width: 100%;
height: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
border-collapse: collapse;
}
.search-cell {
vertical-align: top;
width: 100%;
height: 50px;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.context-cell {
vertical-align: top;
width: 100%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
background:transparent;
}
.menu-table {
position:relative;
width: 100%;
height: 65%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
border-collapse: collapse;
}
.menu-item-cell {
vertical-align: top;
width: 100%;
height: 50px;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
}
.who-to-follow-table {
position:relative;
width: 100%;
height: 30%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
border-collapse: collapse;
}
.profile-to-follow-table {
position:relative;
width: 100%;
height: 30%;
padding: 0;
margin: 0;
color: #000;
border-width: 0px;
border-collapse: collapse;
}
.profile-to-follow-span {
float: right;
}
.profile-to-follow-button {
float: right;
background-color: green;
}
.profile-to-unfollow-span {
float: right;
}
.profile-to-unfollow-button {
float: right;
background-color: red;
}
+129 -17
View File
@@ -6,8 +6,8 @@
<meta name="description" content="Free and Open Source Crypto Social Trading">
<link rel="stylesheet" href="main.css" type="text/css" charset="utf-8" />
<link rel="shortcut icon" type="image/png/ico" href="Images/favicon.ico" />
<script type="text/javascript" src="WebServer/require.js"></script>
<script type="text/javascript" src="AppPreLoader.js"></script>
<script type="text/javascript" src="Require.js"></script>
<script type="text/javascript" src="WebAppPreLoader.js"></script>
<script type="text/javascript">
function loadApp() {
@@ -28,25 +28,137 @@
}
function onResize() {
try {
if (page === undefined) { return }
if (page.eventHandler === undefined) { return }
if (DISABLE_BROWSER_RESIZE_EVENT === true) { return }
page.eventHandler.raiseEvent('Browser Resized')
} catch (err) {
console.log('Error Resizing. ' + err.stack)
}
}
</script>
</script>
</head>
<body id="body" onload="loadApp()"
onresize="onResize()">
Hello World!
<div id="masterApp"></div>
<div id="canvasApp"></div>
<body id="body" onload="loadApp()" onresize="onResize()" class="body">
<div id="scroll-div" class="scroll-div">
<div id="static-div" class="static-div">
<table id="page-table" class="page-table">
<tr>
<td class="left-column">
<table class="left-table">
<tr>
<td class="logo-cell">LOGO</td>
</tr>
<tr>
<td class="menu-cell">
<table class="menu-table">
<tr>
<td class="menu-item-cell">Home</td>
</tr>
<tr>
<td class="menu-item-cell">Explore</td>
</tr>
<tr>
<td class="menu-item-cell">Notifications</td>
</tr>
<tr>
<td class="menu-item-cell">Messages</td>
</tr>
<tr>
<td class="menu-item-cell">Bookmarks</td>
</tr>
<tr>
<td class="menu-item-cell">Lists</td>
</tr>
<tr>
<td class="menu-item-cell">Profile</td>
</tr>
<tr>
<td class="menu-item-cell">More</td>
</tr>
<tr>
<td class="menu-item-cell">Post</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="profile-cell">PROFILE</td>
</tr>
</table>
</td>
<td class="middle-column">
<table class="middle-table">
<tr>
<td class="content-title-cell">CONTENT TITLE</td>
</tr>
<tr>
<td class="content-cell">
</td>
</tr>
</table>
</td>
<td class="right-column">
<table class="right-table">
<tr>
<td class="search-cell">SEARCH</td>
</tr>
<tr>
<td class="context-cell">
<table class="context-table">
<tr>
<td>Who to follow</td>
</tr>
<tr>
<td id="who-to-follow-cell">
</td>
</tr>
<tr>
<td>Show more</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>>
<div class="content-div">
<div class="post-placeholder">
Placeholder
</div>
<div class="new-post-div">
<table>
<tr>
<td>Profile Pic</td>
<td>
<table>
<tr>
<td>
<textarea id="new-post-text-area">Type your post here...</textarea>
</td>
</tr>
<tr>
<td>Permissions</td>
</tr>
<tr>
<td>Tool Bar <button name="New Post">POST</button></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="post-div">
POST 2
</div>
<div class="post-div">
POST 3
</div>
<div class="post-div">
POST 4
</div>
<div class="post-div">
POST 5
</div>
</div>
</div>
</body>
</html>
-68
View File
@@ -1,68 +0,0 @@
exports.newHttpInterface = function newHttpInterface() {
/*
This module represent the HTTP API of the
Desktop App. All HTTP request are processed
by this module.
*/
let thisObject = {
initialize: initialize,
finalize: finalize
}
return thisObject
function finalize() {
}
function initialize() {
/*
We will create an HTTP Server and leave it running forever.
*/
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.DESKTOP_HTTP_INTERFACE_PORT)
}
}
function onHttpRequest(httpRequest, httpResponse) {
try {
let requestPathAndParameters = httpRequest.url.split('?') // Remove version information
let requestPath = requestPathAndParameters[0].split('/')
let endpointOrFile = requestPath[1]
switch (endpointOrFile) {
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_DESKTOP)
}
}
} catch (err) {
console.log(err.stack)
}
}
}
+2
View File
@@ -4,6 +4,8 @@ exports.newEnvironment = function () {
WEB_SERVER_URL: 'localhost',
CLIENT_WEB_SOCKETS_INTERFACE_PORT: 18041,
NETWORK_WEB_SOCKETS_INTERFACE_PORT: 18042,
DESKTOP_WEB_SOCKETS_INTERFACE_PORT: 18043,
DESKTOP_WEB_SOCKETS_INTERFACE_HOST: 'localhost',
CLIENT_HTTP_INTERFACE_PORT: 34248,
DESKTOP_HTTP_INTERFACE_PORT: 34249,
PATH_TO_TASK_SERVER: './TaskServer',
+1 -1
View File
@@ -65,7 +65,7 @@ exports.newMultiProject = function () {
}
/*
From here we will require and get the modules, but without instantiation thisObject.
From here we will require and get the modules, but without instantiating thisObject.
*/
/* Set up Modules for this Project */
+11 -11
View File
@@ -5,7 +5,7 @@ function newAppLoader() {
const INFO_LOG = false
const ERROR_LOG = true
const logger = newWebDebugLog()
let thisObject = {
loadModules: loadModules
@@ -64,16 +64,16 @@ function newAppLoader() {
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)
urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Function-Libraries' + '/' + fileName)
}
modulesArray = modulesArray.concat(urlArray)
utilities()
}
}
}
function utilities() {
let url = 'ListUtilitiesFiles'
@@ -84,16 +84,16 @@ function newAppLoader() {
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)
urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Utilities' + '/' + fileName)
}
modulesArray = modulesArray.concat(urlArray)
globals()
}
}
}
function globals() {
let url = 'ListGlobalFiles'
@@ -104,16 +104,16 @@ function newAppLoader() {
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)
urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Globals' + '/' + fileName)
}
modulesArray = modulesArray.concat(urlArray)
spaces()
}
}
}
function spaces() {
let url = 'ListSpaceFiles'
@@ -138,7 +138,7 @@ function newAppLoader() {
for (let i = 0; i < modulesArray.length; i++) {
let path = modulesArray[i]
console.log(path)
REQUIREJS([path], onRequired)
if (INFO_LOG === true) { logger.write('[INFO] loadModules -> Module Requested.') }
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1,33 @@
{
"type": "Docs Space Settings",
"level": 4,
"propertyNameAtParent": "docsSpaceSettings",
"attachingRules": {
"compatibleTypes": "Docs Space->"
},
"editors": {
"config": true
},
"initialValues": {
"config": "{\"indexContent\": true \n }"
},
"menuItems": [
{
"action": "Configure",
"actionFunction": "uiObject.configEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration"
},
{
"action": "Delete UI Object",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"actionFunction": "payload.executeAction",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity"
}
],
"addLeftIcons": true
}
@@ -0,0 +1,33 @@
{
"type": "Docs Space Style",
"level": 4,
"propertyNameAtParent": "docsSpaceStyle",
"attachingRules": {
"compatibleTypes": "Docs Space->"
},
"editors": {
"config": true
},
"initialValues": {
"config": "{\"backgroundColor\":\"UI_COLOR.BLACK\",\"node\":{\"fontSize\":16,\"imageSize\":60,\"type\":{\"fontColor\":\"UI_COLOR.WHITE\"},\"name\":{\"fontColor\":\"UI_COLOR.WHITE\"},\"menuItem\":{\"backgroundColor\":\"UI_COLOR.BLACK\",\"fontColor\":\"UI_COLOR.WHITE\",\"fontSize\":14,\"imageSize\":14}}}"
},
"menuItems": [
{
"action": "Configure",
"actionFunction": "uiObject.configEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration"
},
{
"action": "Delete UI Object",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"actionFunction": "payload.executeAction",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity"
}
],
"addLeftIcons": true
}
@@ -32,15 +32,15 @@
"level": 0,
"childrenNodesProperties": [
{
"name": "spaceStyle",
"name": "docsSpaceStyle",
"type": "node",
"childType": "Space Style",
"childType": "Docs Space Style",
"autoAdd": true
},
{
"name": "spaceSettings",
"name": "docsSpaceSettings",
"type": "node",
"childType": "Space Settings",
"childType": "Docs Space Settings",
"autoAdd": true
}
]
@@ -0,0 +1,45 @@
{
"type": "Education Project",
"menuItems": [
{
"action": "Add UI Object",
"actionProject": "Foundations",
"label": "Add Tutorial",
"iconProject": "Education",
"relatedUiObject": "Tutorial",
"actionFunction": "payload.executeAction"
},
{
"action": "Add UI Object",
"actionProject": "Foundations",
"label": "Add Docs Space",
"relatedUiObject": "Docs Space",
"actionFunction": "payload.executeAction"
},
{
"action": "Delete UI Object",
"actionProject": "Foundations",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"actionFunction": "payload.executeAction",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity"
}
],
"isProjectHead": true,
"isTitleAllwaysVisible": false,
"addLeftIcons": true,
"isPinned": true,
"positionLocked": true,
"childrenNodesProperties": [
{
"name": "projectDefinition",
"type": "node",
"childType": "Project Definition",
"project": "Foundations",
"autoAdd": true
}
],
"icon": "education"
}
@@ -0,0 +1,18 @@
{
"type": "Docs Space Settings",
"definition": {
"text": "This node allows the user to determine how the docs space will be loaded by the current workspace.",
"updated": 1631587592724
},
"paragraphs": [
{
"style": "Subtitle",
"text": "Properties",
"updated": 1631587516173
},
{
"style": "List",
"text": "indexContent defines whether the contents of the docs space will be indexed for searching upon loading the workspace. If false docs space will be disabled allowing faster load times for development."
}
]
}
@@ -0,0 +1,13 @@
{
"type": "Docs Space Style",
"definition": {
"text": "This node is currently a place holder that will eventually allow users to adjust the visual apperance of the docs space.",
"updated": 1631589004055
},
"paragraphs": [
{
"style": "Text",
"text": "Right click and select the pencil button to enter edit mode."
}
]
}
@@ -23,8 +23,8 @@ function newFoundationsDocsSearchEngine() {
*/
let docsSpaceNode = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadByNodeType('Docs Space')
if (docsSpaceNode !== undefined) {
if (docsSpaceNode.spaceSettings !== undefined) {
let indexContent = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(docsSpaceNode.spaceSettings.payload, 'indexContent')
if (docsSpaceNode.docsSpaceSettings !== undefined) {
let indexContent = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(docsSpaceNode.docsSpaceSettings.payload, 'indexContent')
if (indexContent === false) {
callbackFunction()
return
@@ -12,6 +12,7 @@ function newEducationTutorialSpace() {
playTutorialStep: playTutorialStep,
resumeTutorialStep: resumeTutorialStep,
resetTutorialProgress: resetTutorialProgress,
sidePanelTab: undefined,
container: undefined,
physics: physics,
draw: draw,
@@ -37,6 +38,8 @@ function newEducationTutorialSpace() {
resize()
let browserResizedEventSubscriptionId
let openingEventSubscriptionId
let closingEventSubscriptionId
let tutorialRootNode
let currentNode
@@ -104,6 +107,8 @@ function newEducationTutorialSpace() {
batchConfigChangesCounter = 0
workspacesCounter = 0
setupSidePanelTab()
browserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize)
let workspace = UI.projects.foundations.spaces.designSpace.workspace
workspace.executeAction({ name: 'Play Tutorials', project: 'Foundations' })
@@ -112,6 +117,8 @@ function newEducationTutorialSpace() {
function finalize() {
canvas.eventHandler.stopListening(browserResizedEventSubscriptionId)
thisObject.sidePanelTab.container.eventHandler.stopListening(openingEventSubscriptionId)
thisObject.sidePanelTab.container.eventHandler.stopListening(closingEventSubscriptionId)
tutorialRootNode = undefined
currentNode = undefined
@@ -130,8 +137,14 @@ function newEducationTutorialSpace() {
}
function getContainer(point, purpose) {
if (thisObject.sidePanelTab === undefined) { return }
let container
container = thisObject.sidePanelTab.getContainer(point, purpose)
if (container !== undefined) { return container }
if (thisObject.container.frame.isThisPointHere(point, true) === true) {
return thisObject.container
} else {
@@ -145,11 +158,13 @@ function newEducationTutorialSpace() {
switch (currentStatus) {
case 'Stopped': {
makeInvisible()
thisObject.sidePanelTab.close()
currentNode = undefined
break
}
case 'Playing Tutorial': {
makeVsible()
thisObject.sidePanelTab.open()
break
}
case 'Playing Topic': {
@@ -287,18 +302,28 @@ function newEducationTutorialSpace() {
function checkImage() {
let tutorialImageDiv = document.getElementById('tutorialImageDiv')
if (tutorialImageDiv !== null && tutorialImageDiv !== undefined) {
if (tutorialImageDiv !== null && tutorialImageDiv !== undefined) {
tutorialImageDiv.appendChild(htmlImage)
}
if (newImageName === undefined) { return }
if (currentImageName === newImageName) { return }
currentImageName = newImageName
let webParam = 'Icons/' + newImageProject + '/' + newImageName + '.png'
htmlImage.src = webParam
htmlImage.width = "100"
htmlImage.height = "100"
// If gathering Icon by Project and Name get it now
let icon = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName(newImageProject, newImageName)
if (icon !== undefined) {
htmlImage.src = icon.src
htmlImage.width = "100"
htmlImage.height = "100"
} else if (icon === undefined) {
// Legacy Code to handle icons being fetched by literal path
// Note: This if statment should be removed once all tutoials have been refactored
let webParam = 'Icons/' + newImageProject + '/' + newImageName + '.png'
htmlImage.src = webParam
htmlImage.width = "100"
htmlImage.height = "100"
}
}
function checkDocumentation() {
@@ -968,8 +993,8 @@ function newEducationTutorialSpace() {
function resumeTutorial(node) {
if (UI.projects.foundations.spaces.designSpace.workspace.isInitialized !== true) { return }
navigationStack = []
//Testing if removing the navigationStack reset here fixes the tutorial resume issues
//navigationStack = []
node.payload.uiObject.isPlaying = true
tutorialRootNode = node
currentNode = node
@@ -990,7 +1015,8 @@ function newEducationTutorialSpace() {
}
function resumeTutorialTopic(node) {
navigationStack = []
//Testing if removing the navigationStack reset here fixes the tutorial resume issues
//navigationStack = []
currentTopicNode = node
currentNode = node
currentStatus = 'Playing Topic'
@@ -1010,7 +1036,8 @@ function newEducationTutorialSpace() {
}
function resumeTutorialStep(node) {
navigationStack = []
//Testing if removing the navigationStack reset here fixes the tutorial resume issues
//navigationStack = []
currentStepNode = node
currentNode = node
currentStatus = 'Playing Step'
@@ -1499,4 +1526,36 @@ function newEducationTutorialSpace() {
function draw() {
if (isInitialized === false) { return }
}
function setupSidePanelTab() {
thisObject.sidePanelTab = UI.projects.foundations.spaces.sideSpace.createSidePanelTab(thisObject.container, 'Education', 'tutorial', 'Tutorial', 'left')
openingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('opening', onOpening)
closingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('closing', onClosing)
}
function onOpening() {
//console.log('onOpening');
let nodeResume = navigationStack.pop()
switch (nodeResume.type) {
case 'Tutorial': {
resumeTutorial(nodeResume)
break
}
case 'Tutorial Topic': {
resumeTutorialTopic(nodeResume)
break
}
case 'Tutorial Step': {
resumeTutorialStep(nodeResume)
break
}
}
}
function onClosing() {
//console.log('onClosing');
stop()
}
}
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="350" height="350" viewBox="0 0 350 350" xml:space="preserve">
<desc>Created with Fabric.js 1.7.22</desc>
<defs>
</defs>
<g id="icon" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-1.9444444444444287 -1.9444444444444287) scale(3.89 3.89)" >
<path d="M 45 0 C 25.463 0 9.625 15.838 9.625 35.375 c 0 8.722 3.171 16.693 8.404 22.861 L 45 90 l 26.97 -31.765 c 5.233 -6.167 8.404 -14.139 8.404 -22.861 C 80.375 15.838 64.537 0 45 0 z M 45 48.705 c -8.035 0 -14.548 -6.513 -14.548 -14.548 c 0 -8.035 6.513 -14.548 14.548 -14.548 s 14.548 6.513 14.548 14.548 C 59.548 42.192 53.035 48.705 45 48.705 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(204,88,53); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="350" height="350" viewBox="0 0 350 350" xml:space="preserve">
<desc>Created with Fabric.js 1.7.22</desc>
<defs>
</defs>
<g id="icon" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-1.9444444444444287 -1.9444444444444287) scale(3.89 3.89)" >
<path d="M 77.127 81.457 h -0.373 v -2 h 0.373 c 1.239 0 2.432 -0.371 3.446 -1.072 l 1.137 1.645 C 80.36 80.964 78.775 81.457 77.127 81.457 z M 72.11 81.457 h -4.645 v -2 h 4.645 V 81.457 z M 62.822 81.457 h -4.645 v -2 h 4.645 V 81.457 z M 53.534 81.457 H 48.89 v -2 h 4.645 V 81.457 z M 44.246 81.457 h -4.644 v -2 h 4.644 V 81.457 z M 34.958 81.457 h -4.644 v -2 h 4.644 V 81.457 z M 84.813 75.85 l -1.904 -0.609 c 0.19 -0.596 0.287 -1.218 0.287 -1.852 c 0 -0.708 -0.121 -1.403 -0.36 -2.064 l 1.881 -0.68 c 0.318 0.88 0.479 1.804 0.479 2.744 C 85.195 74.229 85.066 75.058 84.813 75.85 z M 80.386 68.269 c -0.972 -0.62 -2.099 -0.948 -3.259 -0.948 h -0.634 v -2 h 0.634 c 1.542 0 3.041 0.437 4.335 1.263 L 80.386 68.269 z M 71.849 67.32 h -4.644 v -2 h 4.644 V 67.32 z M 62.561 67.32 h -4.408 c -0.092 0 -0.183 -0.001 -0.272 -0.005 l 0.074 -1.998 l 0.198 0.003 h 4.408 V 67.32 z M 53.016 65.474 c -1.37 -1.132 -2.34 -2.705 -2.732 -4.43 l 1.951 -0.443 c 0.294 1.296 1.024 2.479 2.055 3.332 L 53.016 65.474 z M 52.642 56.707 l -1.814 -0.84 c 0.744 -1.607 2.02 -2.945 3.59 -3.768 l 0.928 1.771 C 54.162 54.49 53.202 55.497 52.642 56.707 z M 64.038 53.184 h -4.645 v -2 h 4.645 V 53.184 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(240,162,2); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
<path d="M 21.094 27.868 C 9.444 27.868 0 37.311 0 48.961 c 0 5.201 1.891 9.954 5.011 13.632 l 16.082 18.941 l 16.082 -18.941 c 3.12 -3.678 5.011 -8.431 5.011 -13.632 C 42.187 37.311 32.743 27.868 21.094 27.868 z M 21.094 56.91 c -4.791 0 -8.675 -3.884 -8.675 -8.675 c 0 -4.791 3.884 -8.675 8.675 -8.675 s 8.675 3.884 8.675 8.675 C 29.768 53.026 25.885 56.91 21.094 56.91 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(240,162,2); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
<path d="M 73.577 11.624 c -9.015 0 -16.323 7.308 -16.323 16.323 c 0 4.025 1.463 7.703 3.878 10.549 l 12.445 14.657 l 12.445 -14.657 c 2.415 -2.846 3.878 -6.524 3.878 -10.549 C 89.9 18.932 82.592 11.624 73.577 11.624 z M 73.577 34.098 c -3.707 0 -6.713 -3.006 -6.713 -6.713 c 0 -3.707 3.005 -6.713 6.713 -6.713 c 3.707 0 6.713 3.006 6.713 6.713 C 80.29 31.093 77.285 34.098 73.577 34.098 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(240,162,2); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@@ -19330,7 +19330,7 @@
},
{
"type": "Indicator Bot",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"config": "{\n\"codeName\": \"RSI\"\n}",
"project": "Foundations",
"processes": [
@@ -19383,7 +19383,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Indicator Bot",
"Foundations",
"b2fc1830-30e3-407a-9cd2-ab93a9e36cc7"
@@ -19535,7 +19535,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Indicator Bot",
"Foundations",
"b2fc1830-30e3-407a-9cd2-ab93a9e36cc7"
@@ -19829,7 +19829,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Indicator Bot",
"Foundations",
"b2fc1830-30e3-407a-9cd2-ab93a9e36cc7"
@@ -19920,7 +19920,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Indicator Bot",
"Foundations",
"b2fc1830-30e3-407a-9cd2-ab93a9e36cc7"
@@ -20717,7 +20717,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -38266,7 +38266,7 @@
},
{
"type": "Plotter",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"config": "{\n\"codeName\": \"Plotter RSI\"\n}",
"project": "Foundations",
"modules": [
@@ -39291,7 +39291,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -39363,7 +39363,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -39435,7 +39435,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -39507,7 +39507,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -39664,7 +39664,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -39736,7 +39736,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -39808,7 +39808,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -39880,7 +39880,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40037,7 +40037,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40109,7 +40109,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40181,7 +40181,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40253,7 +40253,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40410,7 +40410,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40482,7 +40482,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40554,7 +40554,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40626,7 +40626,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40783,7 +40783,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -40855,7 +40855,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41012,7 +41012,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41084,7 +41084,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41241,7 +41241,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41313,7 +41313,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41470,7 +41470,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41542,7 +41542,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41699,7 +41699,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41771,7 +41771,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -41985,7 +41985,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -42057,7 +42057,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -42214,7 +42214,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -42286,7 +42286,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -42358,7 +42358,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
@@ -42430,7 +42430,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Plotter",
"Foundations",
"d87c1a49-c376-404b-98ff-62feac714c64"
File diff suppressed because it is too large. Load diff
@@ -9604,7 +9604,7 @@
},
{
"type": "Bot Data Dependencies",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"dataDependencies": [
{
@@ -9646,7 +9646,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Indicator Bot",
"Foundations",
"b2fc1830-30e3-407a-9cd2-ab93a9e36cc7"
@@ -9706,7 +9706,7 @@
"63b3bd4b-97da-47a7-8f72-b9eaf0632ebb"
],
[
"Relative Strenght Index (RSI)",
"Relative Strength Index (RSI)",
"Indicator Bot",
"Foundations",
"b2fc1830-30e3-407a-9cd2-ab93a9e36cc7"
@@ -16872,7 +16872,7 @@
"botDataDependencies": [
{
"type": "Bot Data Dependencies",
"name": "Relative Strenght Index - Wilder Method (RSI-W)",
"name": "Relative Strength Index - Wilder Method (RSI-W)",
"project": "Foundations",
"dataDependencies": [
{
@@ -166,11 +166,11 @@
},
{
"type": "Task",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"bot": {
"type": "Indicator Bot Instance",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"config": "{ \n\"parameter1\": \"Value for parameter1 defined at the Product Definition\"\n}",
"project": "Foundations",
"processes": [
@@ -2736,7 +2736,7 @@
},
{
"type": "Bot Products",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"dataProducts": [
{
@@ -21362,7 +21362,7 @@
},
{
"type": "Bot Layers",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"layers": [
{
@@ -31933,7 +31933,7 @@
},
{
"type": "Bot Layers",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"layers": [
{
@@ -408,17 +408,17 @@
},
{
"type": "Task",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"bot": {
"type": "Indicator Bot Instance",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"config": "{ \n\"parameter1\": \"Value for parameter1 defined at the Product Definition\"\n}",
"project": "Foundations",
"processes": [
{
"type": "Indicator Process Instance",
"name": "Relative Strenght Index (RSI) Multi-Time-Frame-Market",
"name": "Relative Strength Index (RSI) Multi-Time-Frame-Market",
"project": "Foundations",
"id": "ffa5490a-b87c-4d25-a0bf-3a978ba22521",
"savedPayload": {
@@ -450,7 +450,7 @@
},
{
"type": "Indicator Process Instance",
"name": "Relative Strenght Index (RSI) Multi-Time-Frame-Daily",
"name": "Relative Strength Index (RSI) Multi-Time-Frame-Daily",
"project": "Foundations",
"id": "69ff12a5-65b8-4d00-ad9d-329f502aab42",
"savedPayload": {
@@ -3601,7 +3601,7 @@
},
{
"type": "Bot Products",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"dataProducts": [
{
@@ -25409,7 +25409,7 @@
},
{
"type": "Bot Layers",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"layers": [
{
@@ -39990,7 +39990,7 @@
},
{
"type": "Bot Layers",
"name": "Relative Strenght Index (RSI)",
"name": "Relative Strength Index (RSI)",
"project": "Foundations",
"layers": [
{
@@ -2,7 +2,9 @@ exports.newFoundationsUtilitiesFilesAndDirectories = function () {
let thisObject = {
getDirectories: getDirectories,
getAllFilesInDirectoryAndSubdirectories: getAllFilesInDirectoryAndSubdirectories
getAllFilesInDirectoryAndSubdirectories: getAllFilesInDirectoryAndSubdirectories,
pathFromDate: pathFromDate,
mkDirByPathSync: mkDirByPathSync
}
return thisObject
@@ -51,4 +53,49 @@ exports.newFoundationsUtilitiesFilesAndDirectories = function () {
return files.reduce((a, f) => a.concat(f), []);
}
}
function pathFromDate(timestamp) {
let file = { date: new Date(timestamp) }
file.year = file.date.getUTCFullYear()
file.month = file.date.getUTCMonth() + 1
file.day = file.date.getUTCDate()
return file.year + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(file.month, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(file.day, 2)
}
/* Function to create folders of missing folders at any path. */
function mkDirByPathSync(targetDir, { isRelativeToScript = false } = {}) {
const path = require('path')
targetDir = targetDir.substring(0, targetDir.lastIndexOf('/') + 1);
const sep = '/';
const initDir = path.isAbsolute(targetDir) ? sep : '';
const baseDir = isRelativeToScript ? __dirname : '.';
return targetDir.split(sep).reduce((parentDir, childDir) => {
const curDir = path.resolve(baseDir, parentDir, childDir);
try {
const fs = require('fs')
fs.mkdirSync(curDir);
} catch (err) {
if (err.code === 'EEXIST') { // curDir already exists!
return curDir;
}
// To avoid `EISDIR` error on Mac and `EACCES`-->`ENOENT` and `EPERM` on Windows.
if (err.code === 'ENOENT') { // Throw the original parentDir error on curDir `ENOENT` failure.
throw new Error(`EACCES: permission denied, mkdir '${parentDir}'`);
}
const caughtErr = ['EACCES', 'EPERM', 'EISDIR'].indexOf(err.code) > -1;
if (!caughtErr || caughtErr && curDir === path.resolve(targetDir)) {
throw err; // Throw if it's just the last created dir.
}
}
return curDir;
}, initDir);
}
}
@@ -1,7 +1,8 @@
exports.newFoundationsUtilitiesMiscellaneousFunctions = function () {
let thisObject = {
genereteUniqueId: genereteUniqueId
genereteUniqueId: genereteUniqueId,
pad: pad
}
return thisObject
@@ -12,4 +13,9 @@ exports.newFoundationsUtilitiesMiscellaneousFunctions = function () {
return v.toString(16)
})
}
function pad(str, max) {
str = str.toString();
return str.length < max ? pad("0" + str, max) : str;
}
}
@@ -7,13 +7,6 @@
"relatedUiObject": "Network",
"actionFunction": "payload.executeAction"
},
{
"action": "Add UI Object",
"label": "Add Tutorial",
"iconProject": "Education",
"relatedUiObject": "Tutorial",
"actionFunction": "payload.executeAction"
},
{
"action": "Add UI Object",
"label": "Add Plugins",
@@ -9,7 +9,7 @@
"config": true
},
"initialValues": {
"config": "{\"node\":{\"distancePercentage\":60,\"radiusPercentage\":85,\"massPercentage\":100,\"animationSteps\":2,\"menuItem\":{\"widthPercentage\":100,\"heightPercentage\":60,\"radiusPercentage\":90}},\"physics\":false,\"shortcuts\":{\"toggleMapMode\":\"M\",\"toggleDrawRelationshipLines\":\"R\",\"toggleDrawParentLines\":\"C\",\"saveWorkspace\":\"S\",\"adjustAspectRatio\":\"A\"}}"
"config": "{\"node\":{\"distancePercentage\":60,\"radiusPercentage\":85,\"massPercentage\":100,\"animationSteps\":2,\"menuItem\":{\"widthPercentage\":100,\"heightPercentage\":60,\"radiusPercentage\":90}},\"physics\":false,\"shortcuts\":{\"toggleMapMode\":\"M\",\"toggleDrawRelationshipLines\":\"R\",\"toggleDrawParentLines\":\"C\",\"saveWorkspace\":\"S\",\"adjustAspectRatio\":\"A\"} \n }"
},
"menuItems": [
{
@@ -13,12 +13,6 @@
"relatedUiObject": "Design Space",
"actionFunction": "payload.executeAction"
},
{
"action": "Add UI Object",
"label": "Add Docs Space",
"relatedUiObject": "Docs Space",
"actionFunction": "payload.executeAction"
},
{
"action": "Delete UI Object",
"askConfirmation": true,
@@ -16,26 +16,50 @@
{
"style": "Subtitle",
"text": "Properties",
"updated": 1609863924784
"updated": 1631554214199
},
{
"style": "List",
"text": "node refers to every node in the design space."
"text": "\"physics\" determines whether the environment is static (false) or dynamic (true). When physics is set to true, nodes in the design space are affected by th gravitational pull and repulsion of other nodes.",
"updated": 1631588883144
},
{
"style": "List",
"text": "radiusPercentage is the radius of the circular nodes' menu applied as a percentage of an arbitrary default radius.",
"updated": 1609863960583
"text": "detachUsingMouse defines if you can detach nodes from it's parent or reference parents only using the mouse (when true) or if you can not use the mouse for that and can only do it using the detach buttons on the icon's menu (when false)."
},
{
"style": "Subtitle",
"text": "Node Properties"
},
{
"style": "List",
"text": "massPercentage is the refernce mass of nodes that affect the attraction and repulsion of the environment's pysics whe the physics setting is set to true.",
"updated": 1609863964761
"text": "\"node\" here refers to every node in the design space. This collection of properties adjusts the settings of all nodes in the design space.",
"updated": 1631588871268
},
{
"style": "List",
"text": "menuItem refers to the items on the right-hand side of nodes' menus.",
"updated": 1609863969621
"text": "distancePercentage adjusts the baseline distance between nodes.",
"updated": 1631588124341
},
{
"style": "List",
"text": "radiusPercentage is the radius of the circular nodes' menu applied as a percentage of an arbitrary default radius. A higher value will lead to a larger node menu.",
"updated": 1631588202567
},
{
"style": "List",
"text": "massPercentage is the reference mass of nodes that affects the attraction and repulsion of the environment's physics when the physics setting is set to true.",
"updated": 1631588798797
},
{
"style": "List",
"text": "animationSteps adjusts the amount of steps the animation takes to open a node menu upon hovering over it. A higher value leads to smoother transtion.",
"updated": 1631588728860
},
{
"style": "List",
"text": "menuItem refers to the items on the right-hand side of a node's menus and has the following three properties.",
"updated": 1631588761551
},
{
"style": "List",
@@ -50,15 +74,7 @@
{
"style": "List",
"text": "radiusPercentage is the reference radious of the circular matrix that governs the distribution of items in the circular menu. Larger numbers cause items to spread appart while smaller numbers makes items lie closer to each other.",
"updated": 1609863985113
},
{
"style": "List",
"text": "physics determines wether the environment is static (false) or dynamic (true). When physics is set to true, nodes in the design space are affected by th gravitational pull and repulsion of other nodes."
},
{
"style": "List",
"text": "detachUsingMouse defines if you can detach nodes from it's parent or reference parents only using the mouse (when true) or if you can not use the mouse for that and can only do it using the detach buttons on the icon's menu (when false)."
"updated": 1631554041849
},
{
"style": "Subtitle",
@@ -160,8 +160,8 @@
},
{
"style": "Javascript",
"text": "productPluralVariable[tradingEngine.tradingCurrent.tradingEpisode.candle.index.value-n].propertyName",
"updated": 1624868076284
"text": "productName[tradingEngine.tradingCurrent.tradingEpisode.candle.index.value-n].propertyName",
"updated": 1625193412334
},
{
"style": "Text",
@@ -175,8 +175,8 @@
},
{
"style": "Javascript",
"text": "chart.at01hs.candles[tradingEngine.tradingCurrent.tradingEpisode.candle.index.value-5].max",
"updated": 1624868093927
"text": "chart.at01hs.candle[tradingEngine.tradingCurrent.tradingEpisode.candle.index.value-5].max",
"updated": 1625193408514
},
{
"style": "Text",
@@ -922,8 +922,8 @@ exports.newFoundationsBotModulesFetchingProcess = function (processIndex) {
file.month = file.date.getUTCMonth() + 1
file.day = file.date.getUTCDate()
let dateForPath = file.year + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(file.month, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(file.day, 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(file.month, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(file.day, 2)
/* We will need to save this at the Status Report */
contextVariables.lastFile = file.date
@@ -270,8 +270,8 @@
/* Telling the world we are alive and doing well */
let currentDateString =
processDate.getUTCFullYear() + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2);
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '-' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2);
let currentDate = new Date(processDate)
let percentage = TS.projects.foundations.utilities.dateTimeFunctions.getPercentage(fromDate, currentDate, lastDate)
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, currentDateString, percentage)
@@ -322,8 +322,8 @@
try {
let dateForPath =
previousDay.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(previousDay.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(previousDay.getUTCDate(), 2);
SA.projects.foundations.utilities.miscellaneousFunctions.pad(previousDay.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(previousDay.getUTCDate(), 2);
let fileName = "Data.json"
let filePathRoot =
'Project/' +
@@ -368,8 +368,8 @@
try {
let dateForPath =
processDate.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2);
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2);
let fileName = "Data.json"
let filePathRoot =
'Project/' +
@@ -584,8 +584,8 @@
let dateForPath =
processDate.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2);
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2);
let fileName = 'Data.json';
let filePath =
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT +
@@ -654,8 +654,8 @@
let dateForPath =
processDate.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2);
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2);
let fileName = 'Data.json';
let filePath =
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT +
@@ -406,7 +406,7 @@
}
/* Telling the world we are alive and doing well */
let currentDateString = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCDate(), 2);
let currentDateString = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCDate(), 2);
let currentDate = new Date(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME)
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(
processIndex,
@@ -232,8 +232,8 @@
/* Telling the world we are alive and doing well */
let currentDateString =
contextVariables.datetimeLastProducedFile.getUTCFullYear() + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '-' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
let currentDate = new Date(contextVariables.datetimeLastProducedFile)
let percentage = TS.projects.foundations.utilities.dateTimeFunctions.getPercentage(fromDate, currentDate, lastDate)
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, currentDateString, percentage)
@@ -272,8 +272,8 @@
function nextCandleFile() {
let dateForPath =
contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
let fileName = "Data.json"
let filePathRoot =
@@ -396,7 +396,7 @@
function nextVolumeFile() {
try {
let dateForPath = contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2);
let dateForPath = contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2);
let fileName = "Data.json"
let filePathRoot =
'Project/' +
@@ -540,8 +540,8 @@
let fileName = 'Data.json';
let dateForPath =
contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
let filePath =
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT +
"/Output/" +
@@ -588,8 +588,8 @@
let fileName = 'Data.json';
let dateForPath =
contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
let filePath =
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT +
"/Output/" +
@@ -412,8 +412,8 @@
/* Telling the world we are alive and doing well */
let currentDateString =
contextVariables.datetimeLastProducedFile.getUTCFullYear() + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2);
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '-' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2);
let currentDate = new Date(contextVariables.datetimeLastProducedFile)
let percentage = TS.projects.foundations.utilities.dateTimeFunctions.getPercentage(fromDate, currentDate, lastDate)
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, currentDateString, percentage)
@@ -509,7 +509,7 @@
nextCandleFile();
function nextCandleFile() {
let dateForPath = contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2);
let dateForPath = contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2);
let fileName = "Data.json"
let filePathRoot =
@@ -635,8 +635,8 @@
let dateForPath =
contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2);
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2);
let fileName = "Data.json"
let filePathRoot =
@@ -160,8 +160,8 @@ exports.newFoundationsBotModulesFromOneMinToMultiTimeFrameDaily = function (proc
file.month = file.date.getUTCMonth() + 1
file.day = file.date.getUTCDate()
let dateForPath = file.year + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(file.month, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(file.day, 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(file.month, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(file.day, 2)
let fileName = 'Data.json'
let filePath = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT +
@@ -275,8 +275,8 @@
/* Telling the world we are alive and doing well */
let currentDateString = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCFullYear() + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCMonth() + 1, 2) + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCMonth() + 1, 2) + '-' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCDate(), 2)
let currentDate = new Date(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME)
let percentage = TS.projects.foundations.utilities.dateTimeFunctions.getPercentage(fromDate, currentDate, lastDate)
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, currentDateString, percentage)
@@ -360,8 +360,8 @@
function getPreviousFile() {
let dateForPath = previousDay.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(previousDay.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(previousDay.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(previousDay.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(previousDay.getUTCDate(), 2)
let filePath
if (dependency.referenceParent.config.codeName === "Multi-Time-Frame-Daily") {
filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel + "/" + dateForPath;
@@ -412,8 +412,8 @@
function getCurrentFile() {
let dateForPath = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.getUTCDate(), 2)
let filePath
if (dependency.referenceParent.config.codeName === "Multi-Time-Frame-Daily") {
filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel + "/" + dateForPath;
@@ -224,7 +224,7 @@
}
/* Telling the world we are alive and doing well */
let currentDateString = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCDate(), 2)
let currentDateString = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME.getUTCDate(), 2)
let currentDate = new Date(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_DATETIME)
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(
processIndex,
@@ -317,7 +317,7 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
let fromDate = new Date(sessionParameters.timeRange.config.initialDatetime)
let lastDate = new Date(sessionParameters.timeRange.config.finalDatetime)
let currentDateString = heartBeatDate.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
let currentDateString = heartBeatDate.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
let currentDate = new Date(heartBeatDate)
let percentage = TS.projects.foundations.utilities.dateTimeFunctions.getPercentage(fromDate, currentDate, lastDate)
/*
@@ -327,7 +327,7 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
if (heartBeatDate.valueOf() !== previousHeartBeatDate) {
previousHeartBeatDate = heartBeatDate.valueOf()
let processingDate = heartBeatDate.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
let processingDate = heartBeatDate.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
'[INFO] runSimulation -> loop -> Simulation ' + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_KEY + ' Loop # ' + learningEngine.learningCurrent.learningEpisode.candle.index.value + ' @ ' + processingDate)
@@ -258,8 +258,8 @@
let fileName = "Data.json"
let datetime = new Date(lastFile.valueOf())
let dateForPath = datetime.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(datetime.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(datetime.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(datetime.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(datetime.getUTCDate(), 2)
let filePath = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT + "/Output/" + OHLCVS_FOLDER_NAME + '/' + dateForPath;
let fullFileName = filePath + '/' + fileName
fileStorage.getTextFile(fullFileName, onFileReceived)
@@ -368,7 +368,7 @@
/* Reporting we are doing well */
function heartBeat(noNewInternalLoop) {
let processingDate = new Date(since)
processingDate = processingDate.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCDate(), 2);
processingDate = processingDate.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCDate(), 2);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[INFO] start -> getOHLCVs -> Fetching OHLCVs @ " + processingDate + "-> exchange = " + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.parentNode.parentNode.name + " -> symbol = " + symbol + " -> since = " + since + " -> limit = " + limit)
let heartBeatText = "Fetching " + rawDataArray.length.toFixed(0) + " OHLCVs from " + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.parentNode.parentNode.name + " " + symbol + " @ " + processingDate
@@ -476,7 +476,7 @@
}
let processingDate = new Date(earliestMarketSince)
processingDate = processingDate.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCDate(), 2);
processingDate = processingDate.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCDate(), 2);
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, "Invalid or No Start Date. Finding Market Start @ " + processingDate, 0)
}
}
@@ -494,6 +494,10 @@
while (foundDate !== true) {
if (new Date(since).valueOf() >= (new Date).setSeconds(0,0)) {
return OHLCVs
}
await new Promise(resolve => setTimeout(resolve, rateLimit)) // rate limit
const nextValidOHLCVs = useFetchTradesForFetchOHLCVs ?
await fetchTradesForOHLCV(symbol, '1m', since, limit, params) :
@@ -509,7 +513,7 @@
}
let processingDate = new Date(since)
processingDate = processingDate.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCDate(), 2);
processingDate = processingDate.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCDate(), 2);
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, "No Data Found. Fast-Forwarding to Next Data @ " + processingDate, 0)
}
}
@@ -945,8 +949,8 @@
let processingDate = new Date(candle.begin)
processingDate =
processingDate.getUTCFullYear() + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCMonth() + 1, 2) + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCDate(), 2);
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCMonth() + 1, 2) + '-' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(processingDate.getUTCDate(), 2);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[INFO] start -> saveOHLCVs -> Before Fetch -> Saving OHLCVs @ " + processingDate + " -> ohlcvArrayIndex = " + ohlcvArrayIndex + " -> total = " + rawDataArray.length)
@@ -1048,8 +1052,8 @@
function getFilePath(timestamp, folderName) {
let datetime = new Date(timestamp)
let dateForPath = datetime.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(datetime.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(datetime.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(datetime.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(datetime.getUTCDate(), 2)
let filePath = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT + "/Output/" + folderName + '/' + dateForPath;
return filePath
}
@@ -1,7 +1,7 @@
exports.newFoundationsBotModulesSnapshots = function (processIndex) {
exports.newFoundationsBotModulesSnapshots = function(processIndex) {
/*
This module encapsulates the snapshots functionality.
*/
This module encapsulates the snapshots functionality.
*/
const MODULE_NAME = 'Snapshots'
let thisObject = {
@@ -28,20 +28,21 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
positions: []
}
let positionKeys = new Map() // This is to prevent adding the same indicator / variable to the output collection.
let positionKeys = new Map() // This is to prevent adding the same indicator / variable to the output collection.
let strategyKeys = new Map()
let createHeaders = true // This is going to be true only once
let createCloseHeaders = true // This is going to be true only once
let createHeaders = true // This is going to be true only once
let createCloseHeaders = true // This is going to be true only once
let closeValues
let strategyValues
let addToStrategyValues
let positionValues
let addToPositionValues
let snapshotAvailable = false
/*
These 3 are the main data structures available to users
when writing conditions and formulas.
*/
These 3 are the main data structures available to users
when writing conditions and formulas.
*/
let chart
let exchange
let market
@@ -52,6 +53,12 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
tradingEngine = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine
tradingSystem = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingSystem
sessionParameters = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.tradingParameters
// first trade forces overwrite of the existing file
if (tradingEngine.tradingCurrent.tradingEpisode.tradingEpisodeCounters.positions.value > 1) {
snapshotAvailable = true
createHeaders = false // This is going to be true only once
createCloseHeaders = false
}
}
function finalize() {
@@ -70,9 +77,9 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
function updateChart(pChart, pExchange, pMarket) {
/*
We need these 3 data structures to be a local objects
accessible while evaluating conditions and formulas.
*/
We need these 3 data structures to be a local objects
accessible while evaluating conditions and formulas.
*/
chart = pChart
exchange = pExchange
market = pMarket
@@ -80,9 +87,9 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
function strategyEntry() {
/*
We will record here a snapshot of all values used in conditions and formulas within the Trading System.
If the strategy exists with a trade, this information will be added to the snapshots file.
*/
We will record here a snapshot of all values used in conditions and formulas within the Trading System.
If the strategy exists with a trade, this information will be added to the snapshots file.
*/
strategyKeys = new Map()
strategyValues = []
@@ -147,24 +154,26 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
let property = schemaDocument.childrenNodesProperties[i]
switch (property.type) {
case 'node': {
if (property.name !== previousPropertyName) {
case 'node':
{
if (property.name !== previousPropertyName) {
if (node[property.name] !== undefined) {
evalNode(node[property.name])
}
previousPropertyName = property.name
}
break
}
case 'array':
{
if (node[property.name] !== undefined) {
evalNode(node[property.name])
let nodePropertyArray = node[property.name]
for (let m = 0; m < nodePropertyArray.length; m++) {
evalNode(nodePropertyArray[m])
}
}
previousPropertyName = property.name
break
}
break
}
case 'array': {
if (node[property.name] !== undefined) {
let nodePropertyArray = node[property.name]
for (let m = 0; m < nodePropertyArray.length; m++) {
evalNode(nodePropertyArray[m])
}
}
break
}
}
}
}
@@ -173,10 +182,10 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
function evalCondition(node) {
/*
The code can be at the condition node if it was done with the Conditions Editor, or it can also be
at a Javascript Code node. If there is a Javascript object we will give it preference and take the code
from there. Otherwise we will take the code from the Condition node.
*/
The code can be at the condition node if it was done with the Conditions Editor, or it can also be
at a Javascript Code node. If there is a Javascript object we will give it preference and take the code
from there. Otherwise we will take the code from the Condition node.
*/
let nodeWithCode = node
if (node.javascriptCode !== undefined) {
@@ -211,14 +220,15 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
instruction = instruction.replace(/!==/g, '')
instruction = instruction.replace(/==/g, '')
instruction = instruction.replace(/===/g, '')
instruction = instruction.replace(/{/g, '')
instruction = instruction.replace(/}/g, '')
instruction = instruction.replace(/{/g, '') //this wrecks something in JS markup?
instruction = instruction.replace(/}/g, '') //this wrecks something in JS markup?
if (instruction.indexOf('chart') >= 0) {
let parts = instruction.split('.')
let timeFrame = parts[1]
let product = parts[2]
let property
checkPrevious(3)
function checkPrevious(index) {
property = parts[index]
if (property === 'previous') {
@@ -295,17 +305,17 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
let closeHeaders = ['Trade Number', 'Open Datetime', 'Close Datetime', 'Strategy Name', 'Trigger On Situation', 'Take Position Situation', 'Result In Base Asset', 'Result In Quoted Asset', 'ROI in Base Asset', 'ROI in Quoted Asset', 'Exit Type']
closeValues = [
tradingEngine.tradingCurrent.tradingEpisode.tradingEpisodeCounters.positions.value, // Position Number
(new Date(openDatetime)).toISOString(), // Open Datetime
(new Date(closeDatetime)).toISOString(), // Open Datetime
tradingEngine.tradingCurrent.strategy.strategyName.value, // Strategy Name
tradingEngine.tradingCurrent.strategy.situationName.value, // Trigger On Situation
tradingEngine.tradingCurrent.position.situationName.value, // Take Position Situation
tradingEngine.tradingCurrent.position.positionBaseAsset.hitFail.value, // Result in Base Asset
tradingEngine.tradingCurrent.position.positionQuotedAsset.hitFail.value, // Result in Base Asset
tradingEngine.tradingCurrent.position.positionBaseAsset.ROI.value, // ROI in Base Asseet
tradingEngine.tradingCurrent.position.positionQuotedAsset.ROI.value, // ROI in Quoted Asset
tradingEngine.tradingCurrent.position.exitType.value // Exit Type
tradingEngine.tradingCurrent.tradingEpisode.tradingEpisodeCounters.positions.value, // Position Number
(new Date(openDatetime)).toISOString(), // Open Datetime
(new Date(closeDatetime)).toISOString(), // Open Datetime
tradingEngine.tradingCurrent.strategy.strategyName.value, // Strategy Name
tradingEngine.tradingCurrent.strategy.situationName.value, // Trigger On Situation
tradingEngine.tradingCurrent.position.situationName.value, // Take Position Situation
tradingEngine.tradingCurrent.position.positionBaseAsset.hitFail.value, // Result in Base Asset
tradingEngine.tradingCurrent.position.positionQuotedAsset.hitFail.value, // Result in Base Asset
tradingEngine.tradingCurrent.position.positionBaseAsset.ROI.value, // ROI in Base Asseet
tradingEngine.tradingCurrent.position.positionQuotedAsset.ROI.value, // ROI in Quoted Asset
tradingEngine.tradingCurrent.position.exitType.value // Exit Type
]
if (createCloseHeaders === true) {
@@ -333,46 +343,95 @@ exports.newFoundationsBotModulesSnapshots = function (processIndex) {
try {
let fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex);
let fileContent = "";
let separator = "\r\n";
let fileName = pFileName + '.csv'
parseRecord(snapshots.headers)
for (let i = 0; i < snapshotArray.length; i++) {
let record = snapshotArray[i];
parseRecord(record)
}
function parseRecord(record) {
for (let j = 0; j < record.length; j++) {
let property = record[j]
fileContent = fileContent + '' + property
if (j !== record.length - 1) {
fileContent = fileContent + ","
}
}
fileContent = fileContent + separator
}
fileContent = "" + fileContent + "";
let fileName = pFileName + '.csv';
let filePath = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT + "/Output/" + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_FOLDER_NAME + "/" + SNAPSHOTS_FOLDER_NAME;
let filePath = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT + '/Output/' + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_FOLDER_NAME + '/' + SNAPSHOTS_FOLDER_NAME;
filePath += '/' + fileName
fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated);
//Get contents of current file if available, otherwise start empty file
if (snapshotAvailable) {
getSnapShotFile(filePath)
} else {
writeOutput('')
}
function onFileCreated(err) {
if (err.result !== TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE.result) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] writeSnapshotFile -> onFileCreated -> err = " + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] writeSnapshotFile -> onFileCreated -> filePath = " + filePath);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] writeSnapshotFile -> onFileCreated -> market = " + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName + "_" + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName);
function writeOutput(fileContent) {
let separator = '\r\n';
parseRecord(snapshots.headers)
for (let i = 0; i < snapshotArray.length; i++) {
let record = snapshotArray[i];
parseRecord(record)
}
function parseRecord(record) {
for (let j = 0; j < record.length; j++) {
let property = record[j]
fileContent = fileContent + '' + property
if (j !== record.length - 1) {
fileContent = fileContent + ","
}
}
fileContent = fileContent + separator
}
fileContent = "" + fileContent + "";
fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated)
function onFileCreated(err) {
if (err.result !== TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE.result) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] writeSnapshotFile -> onFileCreated -> err = ' + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] writeSnapshotFile -> onFileCreated -> filePath = ' + filePath);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] writeSnapshotFile -> onFileCreated -> market = ' + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName + '_' + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName);
}
}
}
} catch (err) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(
processIndex
).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(
MODULE_NAME,
'[ERROR] writeSnapshotFile -> err = ' + err.stack
)
}
catch (err) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] writeSnapshotFile -> err = " + err.stack);
//get file contents
function getSnapShotFile(filePath) {
try {
let fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex);
fileStorage.getTextFile(filePath, onFileReceived)
function onFileReceived(err, text) {
if (err.result === TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE.result) {
try {
writeOutput(text)
} catch (err) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> fileName = ' + filePath);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> filePath = ' + filePath);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> err = ' + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.');
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
}
} else {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> err = ' + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> filePath = ' + filePath);
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).UNEXPECTED_ERROR = err;
callBackFunction(err)
}
}
} catch (error) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> err = ' + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> filePath = ' + filePath);
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).UNEXPECTED_ERROR = err;
callBackFunction(err);
}
}
}
}
@@ -88,7 +88,8 @@ exports.newFoundationsBotModulesTradingSimulation = function (processIndex) {
This will happen when the sessionParameters.timeRange.config.initialDatetime is beyond the last candle available,
meaning that the dataSet needs to be updated with more up-to-date data.
*/
TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Data is not up-to-date enough. Please start the Masters Data Mining Operation.')
console.log('DEBUGGING ..................', initialCandle, candles.length)
TS.projects.foundations.functionLibraries.sessionFunctions.stopSession(processIndex, 'Data is not up-to-date enough. Please start the Data Mining Operation.')
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
'[IMPORTANT] runSimulation -> Data is not up-to-date enough. Stopping the Session now. ')
return
@@ -307,7 +308,7 @@ exports.newFoundationsBotModulesTradingSimulation = function (processIndex) {
let fromDate = new Date(sessionParameters.timeRange.config.initialDatetime)
let lastDate = new Date(sessionParameters.timeRange.config.finalDatetime)
let currentDateString = heartBeatDate.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
let currentDateString = heartBeatDate.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
let currentDate = new Date(heartBeatDate)
let percentage = TS.projects.foundations.utilities.dateTimeFunctions.getPercentage(fromDate, currentDate, lastDate)
/*
@@ -317,7 +318,7 @@ exports.newFoundationsBotModulesTradingSimulation = function (processIndex) {
if (heartBeatDate.valueOf() !== previousHeartBeatDate) {
previousHeartBeatDate = heartBeatDate.valueOf()
let processingDate = heartBeatDate.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
let processingDate = heartBeatDate.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
'[INFO] runSimulation -> loop -> Simulation ' + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_KEY + ' Loop # ' + tradingEngine.tradingCurrent.tradingEpisode.candle.index.value + ' @ ' + processingDate)
@@ -241,7 +241,7 @@ exports.newFoundationsFunctionLibrariesDataDependenciesFunctions = function () {
processDate
) {
/* Telling the world we are alive and doing well and which date we are processing right now. */
let processingDateString = processDate.getUTCFullYear() + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '-' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2)
let processingDateString = processDate.getUTCFullYear() + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCMonth() + 1, 2) + '-' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(processDate.getUTCDate(), 2)
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, processingDateString, undefined, "Running...")
/*
@@ -327,7 +327,7 @@ exports.newFoundationsFunctionLibrariesDataDependenciesFunctions = function () {
async function getDataFileFromDate(dataFileDate) {
let dateForPath = dataFileDate.getUTCFullYear() + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(dataFileDate.getUTCMonth() + 1, 2) + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(dataFileDate.getUTCDate(), 2)
let dateForPath = dataFileDate.getUTCFullYear() + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(dataFileDate.getUTCMonth() + 1, 2) + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(dataFileDate.getUTCDate(), 2)
let filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel + "/" + dateForPath
let fileName = "Data.json"
@@ -329,8 +329,8 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
/* Telling the world we are alive and doing well */
let currentDateString =
contextVariables.datetimeLastProducedFile.getUTCFullYear() + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '-' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '-' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
let currentDate = new Date(contextVariables.datetimeLastProducedFile)
let percentage = TS.projects.foundations.utilities.dateTimeFunctions.getPercentage(fromDate, currentDate, lastDate)
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, currentDateString, percentage)
@@ -360,8 +360,8 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
const ONE_MIN_DATASET_TYPE = "One-Min"
let dateForPath = contextVariables.datetimeLastProducedFile.getUTCFullYear() + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
TS.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCMonth() + 1, 2) + '/' +
SA.projects.foundations.utilities.miscellaneousFunctions.pad(contextVariables.datetimeLastProducedFile.getUTCDate(), 2)
let fileName = "Data.json"
@@ -117,7 +117,7 @@ exports.newFoundationsFunctionLibrariesOutputManagementFunctions = function () {
if (dataset.config.type === 'Daily Files') {
let dateForPath = tradingProcessDate.getUTCFullYear() + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(tradingProcessDate.getUTCMonth() + 1, 2) + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(tradingProcessDate.getUTCDate(), 2);
let dateForPath = tradingProcessDate.getUTCFullYear() + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(tradingProcessDate.getUTCMonth() + 1, 2) + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(tradingProcessDate.getUTCDate(), 2);
let fileName = 'Data.json'
let filePath = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT + '/Output/' + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_FOLDER_NAME + '/' + dataset.parentNode.config.codeName + '/' + dataset.config.codeName + '/' + timeFrameLabel + "/" + dateForPath
@@ -181,7 +181,7 @@ exports.newFoundationsFunctionLibrariesOutputManagementFunctions = function () {
if (dataset.config.type === 'Daily Files') {
let dateForPath = tradingProcessDate.getUTCFullYear() + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(tradingProcessDate.getUTCMonth() + 1, 2) + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(tradingProcessDate.getUTCDate(), 2);
let dateForPath = tradingProcessDate.getUTCFullYear() + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(tradingProcessDate.getUTCMonth() + 1, 2) + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(tradingProcessDate.getUTCDate(), 2);
let fileName = 'Data.json'
let filePath = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT + '/Output/' + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_FOLDER_NAME + '/' + dataset.parentNode.config.codeName + '/' + dataset.config.codeName + '/' + timeFrameLabel + "/" + dateForPath
@@ -563,7 +563,7 @@
let dateForPath = ''
if (processingDailyFiles === true) {
dateForPath = "/" + currentDay.getUTCFullYear() + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(currentDay.getUTCMonth() + 1, 2) + '/' + TS.projects.foundations.utilities.miscellaneousFunctions.pad(currentDay.getUTCDate(), 2);
dateForPath = "/" + currentDay.getUTCFullYear() + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(currentDay.getUTCMonth() + 1, 2) + '/' + SA.projects.foundations.utilities.miscellaneousFunctions.pad(currentDay.getUTCDate(), 2);
}
let filePathRoot = 'Project/' + contextSummary.project + "/" + contextSummary.mineType + "/" + contextSummary.dataMine + "/" + contextSummary.bot + '/' + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.parentNode.parentNode.config.codeName + "/" + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName + "-" + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName
@@ -8,16 +8,17 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
let thisObject = {
asyncGetTextFile: asyncGetTextFile,
asyncCreateTextFile: asyncCreateTextFile,
asyncCreateTextFile: asyncCreateTextFile,
getTextFile: getTextFile,
createTextFile: createTextFile,
deleteTextFile: deleteTextFile
}
let logger
if (TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT === undefined) { // Dummy logger
logger = {}
function write() {
}
@@ -31,16 +32,17 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
/* This function allows its caller to work with async / await instead of callbacks */
let promise = new Promise((resolve, reject) => {
getTextFile(filePath, onFileRead, noRetry, canUsePrevious)
getTextFile(filePath, onFileRead, noRetry, canUsePrevious)
function onFileRead(err, text) {
let response = {
err: err,
text: text
}
resolve(response)
}
})
})
return promise
}
@@ -49,15 +51,16 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
/* This function allows its caller to work with async / await instead of callbacks */
let promise = new Promise((resolve, reject) => {
createTextFile(filePath, fileContent, onFileWriten, keepPrevious, noTemp)
createTextFile(filePath, fileContent, onFileWriten, keepPrevious, noTemp)
function onFileWriten(err) {
let response = {
err: err
}
resolve(response)
}
})
})
return promise
}
@@ -78,8 +81,13 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
fileLocation = global.env.PATH_TO_PROJECTS + '/' + filePath
mustBeJason = false
} else {
if (filePath.indexOf('.csv') > 0) {
mustBeJason = false
} else {
mustBeJason = true
}
fileLocation = global.env.PATH_TO_DATA_STORAGE + '/' + filePath
mustBeJason = true
}
try {
@@ -145,7 +153,7 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
}
/*
We are going to check if the file is a valir JSON object
We are going to check if the file is a valid JSON object
*/
try {
let jsonCheck = JSON.parse(text.toString())
@@ -244,7 +252,7 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
logger.write(MODULE_NAME, '[INFO] FileStorage -> createTextFile -> fileLocation: ' + fileLocation)
/* If necesary a folder or folders are created before writing the file to disk. */
TS.projects.foundations.utilities.miscellaneousFunctions.mkDirByPathSync(fileLocation)
SA.projects.foundations.utilities.filesAndDirectories.mkDirByPathSync(fileLocation)
/*
Here we write the file with a temporary name so as to avoid dirty read from other processes.
@@ -457,7 +465,7 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
let request = http.get(url, onResponse);
request.on('error', function (err) {
request.on('error', function(err) {
logger.write(MODULE_NAME, "[ERROR] getFileViaHTTP -> onError -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] getFileViaHTTP -> onError -> Failed to fetch file via HTTP. Will retry later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -498,4 +506,4 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
}
}
}
}
@@ -2,9 +2,7 @@ exports.newFoundationsUtilitiesMiscellaneousFunctions = function () {
let thisObject = {
truncateToThisPrecision: truncateToThisPrecision,
pad: pad,
asyncGetDatasetFile: asyncGetDatasetFile,
mkDirByPathSync: mkDirByPathSync
asyncGetDatasetFile: asyncGetDatasetFile
}
return thisObject
@@ -13,11 +11,6 @@ exports.newFoundationsUtilitiesMiscellaneousFunctions = function () {
return parseFloat(floatNumber.toFixed(precision))
}
function pad(str, max) {
str = str.toString();
return str.length < max ? pad("0" + str, max) : str;
}
async function asyncGetDatasetFile(datasetModule, filePath, fileName) {
/*
This function helps a caller to use await syntax while the called
@@ -39,38 +32,4 @@ exports.newFoundationsUtilitiesMiscellaneousFunctions = function () {
return promise
}
/* Function to create folders of missing folders at any path. */
function mkDirByPathSync(targetDir, { isRelativeToScript = false } = {}) {
const path = require('path')
targetDir = targetDir.substring(0, targetDir.lastIndexOf('/') + 1);
const sep = '/';
const initDir = path.isAbsolute(targetDir) ? sep : '';
const baseDir = isRelativeToScript ? __dirname : '.';
return targetDir.split(sep).reduce((parentDir, childDir) => {
const curDir = path.resolve(baseDir, parentDir, childDir);
try {
const fs = require('fs')
fs.mkdirSync(curDir);
} catch (err) {
if (err.code === 'EEXIST') { // curDir already exists!
return curDir;
}
// To avoid `EISDIR` error on Mac and `EACCES`-->`ENOENT` and `EPERM` on Windows.
if (err.code === 'ENOENT') { // Throw the original parentDir error on curDir `ENOENT` failure.
throw new Error(`EACCES: permission denied, mkdir '${parentDir}'`);
}
const caughtErr = ['EACCES', 'EPERM', 'EISDIR'].indexOf(err.code) > -1;
if (!caughtErr || caughtErr && curDir === path.resolve(targetDir)) {
throw err; // Throw if it's just the last created dir.
}
}
return curDir;
}, initDir);
}
}
@@ -779,6 +779,50 @@ function newFoundationsActionSwitch() {
UI.projects.foundations.functionLibraries.socialBotsFunctions.sendSlackTestMessage(action.node, action.callBackFunction)
}
break
case 'Copy Position':
{
UI.projects.foundations.utilities.clipboard.copyTextToClipboard( action.node.payload.position.x + ';' + action.node.payload.position.y)
action.node.payload.uiObject.setInfoMessage('Position copied')
}
break
case 'Snap to Position':
{
navigator.clipboard.readText()
.then(text => {
//console.log('Pasted content: ', text);
let newPosition = {
x: 0,
y: 0
}
let newVector = {
x: 0,
y: 0
}
let positionArray = text.split(";",2)
newPosition.x = positionArray[0]
newPosition.y = positionArray[1]
if (newPosition.x >= 0 && newPosition.x <= UI.projects.foundations.spaces.floatingSpace.container.frame.width) {
newVector.x = newPosition.x - action.node.payload.position.x
if (newPosition.y >= 0 && newPosition.y <= UI.projects.foundations.spaces.floatingSpace.container.frame.height) {
newVector.y = newPosition.y - action.node.payload.position.y
action.node.payload.floatingObject.container.displace(newVector)
action.node.payload.uiObject.setInfoMessage('Snapped to new position')
}
}
else {
action.node.payload.uiObject.setErrorMessage('[Error]:Failed to read clipboard contents')
}
})
.catch(err => {
console.error('[Error]:Failed to read clipboard contents: ', err);
action.node.payload.uiObject.setErrorMessage('[Error]:Failed to read clipboard contents')
});
}
break
}
}
}
@@ -129,7 +129,7 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
if (environment.id !== node.payload.referenceParent.id) { continue }
let market = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false)
if (market.payload.referenceParent === undefined) { continue }
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, session, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, session, true) === true) {
createTimeMachine(node, session, market.payload.referenceParent, networkNode, rootNodes)
}
}
@@ -320,13 +320,13 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
let testingTradingTasks = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Testing Trading Tasks', node, true)
let productionTradingTasks = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Production Trading Tasks', node, true)
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, testingTradingTasks, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, testingTradingTasks, true) === true) {
let dashboard = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Dashboard')
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(dashboard, testingTradingTasks)
dashboard.name = testingTradingTasks.type + ' ' + networkNode.name
}
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, productionTradingTasks, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, productionTradingTasks, true) === true) {
let dashboard = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Dashboard')
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(dashboard, productionTradingTasks)
dashboard.name = productionTradingTasks.type + ' ' + networkNode.name
@@ -345,7 +345,7 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
if (rootNode.type === project + ' Project') {
let projectDefinition = rootNode.projectDefinition
if (projectDefinition !== undefined) {
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, projectDefinition, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, projectDefinition, true) === true) {
let projectTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Project Dashboards', undefined, project)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(projectTasks, projectDefinition)
}
@@ -290,9 +290,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
}
function installTheRestOfTheBranch(projectDataTasks) {
let exchangeDataTasks = UI.projects.foundations.utilities.children.findOrCreateChildWithReference(projectDataTasks, 'Exchange Data Tasks', cryptoExchange)
let exchangeDataTasks = UI.projects.foundations.utilities.nodeChildren.findOrCreateChildWithReference(projectDataTasks, 'Exchange Data Tasks', cryptoExchange)
exchangeDataTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let marketDataTask = UI.projects.foundations.utilities.children.findAndRecreateChildWithReference(exchangeDataTasks, 'Market Data Tasks', market, rootNodes)
let marketDataTask = UI.projects.foundations.utilities.nodeChildren.findAndRecreateChildWithReference(exchangeDataTasks, 'Market Data Tasks', market, rootNodes)
UI.projects.foundations.utilities.menu.menuClick(marketDataTask, 'Add Missing Data Mine Tasks', true)
UI.projects.foundations.utilities.menu.menuClickOfNodeArray(marketDataTask.dataMineTasks, 'Add All Tasks', true)
@@ -323,9 +323,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
}
function installTheRestOfTheBranch(projectLearningTasks) {
let exchangeLearningTasks = UI.projects.foundations.utilities.children.findOrCreateChildWithReference(projectLearningTasks, 'Exchange Learning Tasks', cryptoExchange)
let exchangeLearningTasks = UI.projects.foundations.utilities.nodeChildren.findOrCreateChildWithReference(projectLearningTasks, 'Exchange Learning Tasks', cryptoExchange)
exchangeLearningTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let marketLearningTask = UI.projects.foundations.utilities.children.findAndRecreateChildWithReference(exchangeLearningTasks, 'Market Learning Tasks', market, rootNodes)
let marketLearningTask = UI.projects.foundations.utilities.nodeChildren.findAndRecreateChildWithReference(exchangeLearningTasks, 'Market Learning Tasks', market, rootNodes)
UI.projects.foundations.utilities.menu.menuClick(marketLearningTask, 'Add Missing Learning Mine Tasks', true)
UI.projects.foundations.utilities.menu.menuClickOfNodeArray(marketLearningTask.learningMineTasks, 'Add All Tasks', true)
@@ -377,9 +377,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
}
function installTheRestOfTheBranch(projectTradingTasks) {
let exchangeTradingTasks = UI.projects.foundations.utilities.children.findOrCreateChildWithReference(projectTradingTasks, 'Exchange Trading Tasks', cryptoExchange)
let exchangeTradingTasks = UI.projects.foundations.utilities.nodeChildren.findOrCreateChildWithReference(projectTradingTasks, 'Exchange Trading Tasks', cryptoExchange)
exchangeTradingTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let marketTradingTask = UI.projects.foundations.utilities.children.findAndRecreateChildWithReference(exchangeTradingTasks, 'Market Trading Tasks', market, rootNodes)
let marketTradingTask = UI.projects.foundations.utilities.nodeChildren.findAndRecreateChildWithReference(exchangeTradingTasks, 'Market Trading Tasks', market, rootNodes)
UI.projects.foundations.utilities.menu.menuClick(marketTradingTask, 'Add Missing Trading Mine Tasks', true)
UI.projects.foundations.utilities.menu.menuClickOfNodeArray(marketTradingTask.tradingMineTasks, 'Add All Tasks', true)
@@ -429,9 +429,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
}
function installTheRestOfTheBranch(projectDataProducts) {
let exchangeDataProducts = UI.projects.foundations.utilities.children.findOrCreateChildWithReference(projectDataProducts, 'Exchange Data Products', cryptoExchange)
let exchangeDataProducts = UI.projects.foundations.utilities.nodeChildren.findOrCreateChildWithReference(projectDataProducts, 'Exchange Data Products', cryptoExchange)
exchangeDataProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let marketDataProducts = UI.projects.foundations.utilities.children.findAndRecreateChildWithReference(exchangeDataProducts, 'Market Data Products', market, rootNodes)
let marketDataProducts = UI.projects.foundations.utilities.nodeChildren.findAndRecreateChildWithReference(exchangeDataProducts, 'Market Data Products', market, rootNodes)
marketDataProducts.payload.floatingObject.collapseToggle()
UI.projects.foundations.utilities.menu.menuClick(marketDataProducts, 'Add All Data Mine Products', true)
@@ -469,16 +469,16 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
function installTheRestOfTheBranch(projectLearningProducts) {
let exchangeLearningProducts = UI.projects.foundations.utilities.children.findOrCreateChildWithReference(projectLearningProducts, 'Exchange Learning Products', cryptoExchange)
let exchangeLearningProducts = UI.projects.foundations.utilities.nodeChildren.findOrCreateChildWithReference(projectLearningProducts, 'Exchange Learning Products', cryptoExchange)
exchangeLearningProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let marketLearningProducts = UI.projects.foundations.utilities.children.findAndRecreateChildWithReference(exchangeLearningProducts, 'Market Learning Products', market, rootNodes)
let marketLearningProducts = UI.projects.foundations.utilities.nodeChildren.findAndRecreateChildWithReference(exchangeLearningProducts, 'Market Learning Products', market, rootNodes)
marketLearningProducts.payload.floatingObject.collapseToggle()
/*
Create the new session references.
*/
for (let i = 0; i < learningSessionsCreatedArray.length; i++) {
let session = learningSessionsCreatedArray[i]
if (UI.projects.foundations.utilities.children.isMissingChildrenById(marketLearningProducts, session, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(marketLearningProducts, session, true) === true) {
UI.projects.foundations.functionLibraries.dataStorageFunctions.createSessionReference(marketLearningProducts, session, 'Learning Session Reference')
}
}
@@ -524,16 +524,16 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
function installTheRestOfTheBranch(projectTradingProducts) {
let exchangeTradingProducts = UI.projects.foundations.utilities.children.findOrCreateChildWithReference(projectTradingProducts, 'Exchange Trading Products', cryptoExchange)
let exchangeTradingProducts = UI.projects.foundations.utilities.nodeChildren.findOrCreateChildWithReference(projectTradingProducts, 'Exchange Trading Products', cryptoExchange)
exchangeTradingProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let marketTradingProducts = UI.projects.foundations.utilities.children.findAndRecreateChildWithReference(exchangeTradingProducts, 'Market Trading Products', market, rootNodes)
let marketTradingProducts = UI.projects.foundations.utilities.nodeChildren.findAndRecreateChildWithReference(exchangeTradingProducts, 'Market Trading Products', market, rootNodes)
marketTradingProducts.payload.floatingObject.collapseToggle()
/*
Create the new session references.
*/
for (let i = 0; i < tradingSessionsCreatedArray.length; i++) {
let session = tradingSessionsCreatedArray[i]
if (UI.projects.foundations.utilities.children.isMissingChildrenById(marketTradingProducts, session, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(marketTradingProducts, session, true) === true) {
UI.projects.foundations.functionLibraries.dataStorageFunctions.createSessionReference(marketTradingProducts, session, 'Trading Session Reference')
}
}
@@ -574,7 +574,7 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
If the Dashboard we need is not already there we create a new one.
*/
let arrayItem = dashboardsArray[i]
let dashboard = UI.projects.foundations.utilities.children.findOrCreateChildWithReference(projectDashboards, 'Dashboard', arrayItem.environmentNode)
let dashboard = UI.projects.foundations.utilities.nodeChildren.findOrCreateChildWithReference(projectDashboards, 'Dashboard', arrayItem.environmentNode)
dashboard.name = arrayItem.environmentNode.type + ' ' + arrayItem.networkNode.name
/*
We delete all the existing Time Machines related to the market we are currently installing.
@@ -123,7 +123,7 @@ function newFoundationsFunctionLibraryDataStorageFunctions() {
/* We will filter out all the sessions that does not belong to the market we are in */
let marketTradingTasks = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false)
if (node.payload.referenceParent.id !== marketTradingTasks.payload.referenceParent.id) { continue }
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, session, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, session, true) === true) {
createSessionReference(node, session, 'Trading Session Reference')
}
}
@@ -146,7 +146,7 @@ function newFoundationsFunctionLibraryDataStorageFunctions() {
/* We will filter out all the sessions that does not belong to the market we are in */
let marketLearningTasks = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(session, 'Market Learning Tasks', undefined, true, false, true, false)
if (node.payload.referenceParent.id !== marketLearningTasks.payload.referenceParent.id) { continue }
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, session, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, session, true) === true) {
createSessionReference(node, session, 'Learning Session Reference')
}
}
@@ -177,7 +177,7 @@ function newFoundationsFunctionLibraryDataStorageFunctions() {
for (let i = 0; i < marketsArray.length; i++) {
let market = marketsArray[i]
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, market, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, market, true) === true) {
let marketDataProducts = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(marketDataProducts, market)
}
@@ -205,7 +205,7 @@ function newFoundationsFunctionLibraryDataStorageFunctions() {
let cryptoExchanges = cryptoEcosystem.cryptoExchanges[j]
for (let k = 0; k < cryptoExchanges.exchanges.length; k++) {
let cryptoExchange = cryptoExchanges.exchanges[k]
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, cryptoExchange, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, cryptoExchange, true) === true) {
let exchange = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(exchange, cryptoExchange)
}
@@ -238,7 +238,7 @@ function newFoundationsFunctionLibraryDataStorageFunctions() {
if (rootNode.type === project + ' Project') {
let projectDefinition = rootNode.projectDefinition
if (projectDefinition !== undefined) {
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, projectDefinition, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, projectDefinition, true) === true) {
let projectTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType, undefined, project)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(projectTasks, projectDefinition)
}
@@ -22,7 +22,7 @@ function newFoundationsFunctionLibraryPluginsFunctions() {
for (let k = 0; k < PROJECTS_SCHEMA.length; k++) {
let projectDefinition = PROJECTS_SCHEMA[k]
let project = projectDefinition.name
if (UI.projects.foundations.utilities.children.isMissingChildrenByName(node, project) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByName(node, project) === true) {
let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Plugin Project')
child.name = project
let config = JSON.parse(child.config)
@@ -42,7 +42,7 @@ function newFoundationsFunctionLibraryPluginsFunctions() {
for (let i = 0; i < projectDefinition.plugins.length; i++) {
let pluginType = "Plugin" + " " + projectDefinition.plugins[i]
if (UI.projects.foundations.utilities.children.isMissingChildrenByType(node, pluginType) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByType(node, pluginType) === true) {
UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, pluginType, undefined, project)
}
}
@@ -209,10 +209,10 @@ function newFoundationsFunctionLibraryPluginsFunctions() {
function installAsPlugin(node, rootNodes) {
let plugins = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadByNodeType('Plugins')
let pluginProject = UI.projects.foundations.utilities.children.findChildByCodeName(plugins, node.project)
let pluginProject = UI.projects.foundations.utilities.nodeChildren.findChildByCodeName(plugins, node.project)
let pluginFolderName = UI.projects.foundations.utilities.plugins.getPluginFolderNamesByNodeType(node.type)
let pluginForlderNodeType = 'Plugin ' + pluginFolderName.replaceAll('-', ' ')
let pluginFolderNode = UI.projects.foundations.utilities.children.findChildByType(pluginProject, pluginForlderNodeType)
let pluginFolderNode = UI.projects.foundations.utilities.nodeChildren.findChildByType(pluginProject, pluginForlderNodeType)
let pluginFile = UI.projects.foundations.utilities.plugins.addMissingPluginFile(pluginFolderNode, node.name, pluginFolderName, node.type, true)
node.isPlugin = true
@@ -1,5 +1,5 @@
// These function are used across the system to establish and remove references between nodes
function newFoundationsFunctionLibraryAttachDetach() {
function newFoundationsFunctionLibraryReferenceAttachDetach() {
let thisObject = {
referenceDetachNode: referenceDetachNode,
referenceAttachNode: referenceAttachNode
@@ -609,7 +609,7 @@ function newFoundationsFunctionLibraryTaskFunctions() {
if (rootNode.type === project + ' Project') {
let projectDefinition = rootNode.projectDefinition
if (projectDefinition !== undefined) {
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, projectDefinition, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, projectDefinition, true) === true) {
let projectTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType, undefined, project)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(projectTasks, projectDefinition)
}
@@ -640,7 +640,7 @@ function newFoundationsFunctionLibraryTaskFunctions() {
let cryptoExchanges = cryptoEcosystem.cryptoExchanges[j]
for (let k = 0; k < cryptoExchanges.exchanges.length; k++) {
let cryptoExchange = cryptoExchanges.exchanges[k]
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, cryptoExchange, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, cryptoExchange, true) === true) {
let exchangeTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(exchangeTasks, cryptoExchange)
}
@@ -672,7 +672,7 @@ function newFoundationsFunctionLibraryTaskFunctions() {
for (let i = 0; i < markets.length; i++) {
let market = markets[i]
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, market, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, market, true) === true) {
let marketDataTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(marketDataTasks, market)
}
@@ -697,7 +697,7 @@ function newFoundationsFunctionLibraryTaskFunctions() {
if (rootNode.type === rootNodeType) {
let mine = rootNode
if (UI.projects.foundations.utilities.children.isMissingChildrenById(node, mine, true) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, mine, true) === true) {
let dataMineTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(dataMineTasks, mine)
}
@@ -21,6 +21,7 @@ function newFoundationsFunctionLibraryWorkspaceFunctions() {
if (alreadyExist === false) {
let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, project + ' Project', rootNodes, project)
if (child === undefined) { continue }
child.project = project
child.projectDefinition.name = project
child.projectDefinition.config = "{ \n \"codeName\": \"" + project + "\"\n}"
@@ -163,8 +163,8 @@ function newTimeMachine() {
function setInitialPosition() {
if (thisObject.container.frame.position.x === 0 && thisObject.container.frame.position.y === 0) {
let timeMachineIndex = UI.projects.foundations.utilities.children.findChildIndexAtParentNode(thisObject.payload.node)
let dashboardIndex = UI.projects.foundations.utilities.children.findChildIndexAtParentNode(thisObject.payload.parentNode)
let timeMachineIndex = UI.projects.foundations.utilities.nodeChildren.findChildIndexAtParentNode(thisObject.payload.node)
let dashboardIndex = UI.projects.foundations.utilities.nodeChildren.findChildIndexAtParentNode(thisObject.payload.parentNode)
thisObject.container.frame.position.x = thisObject.container.frame.width * timeMachineIndex * 2
thisObject.container.frame.position.y = thisObject.container.frame.height * dashboardIndex * 2
@@ -301,6 +301,13 @@ function newCircularMenuItem() {
function onMouseOver(point) {
if (thisObject.container.frame.isThisPointHere(point, true, false) === true) {
let text = thisObject.action
if(thisObject.payload.uiObject.payload.referenceParent !== undefined && thisObject.action === 'Reference Detach'){
text = text + ' -> [Existing Reference] Type : [' + thisObject.payload.uiObject.payload.referenceParent.type + '] , Name : [' + thisObject.payload.uiObject.payload.referenceParent.name + ']'
}
thisObject.payload.uiObject.setInfoMessage(text)
isMouseOver = true
} else {
isMouseOver = false
@@ -365,6 +365,38 @@ function newUiObjectConstructor() {
}
)
}
menuItemsInitialValues.push(
{
action: 'Copy Position',
actionFunction: floatingObject.payload.executeAction,
actionProject: 'Foundations',
label: undefined,
visible: true,
//placeholder icon : https://www.iconpacks.net/free-icon/pin-48.html
iconPathOn: 'copy-position',
iconPathOff: 'copy-position',
rawRadius: 12,
targetRadius: 0,
currentRadius: 0,
ring: 2
}
)
menuItemsInitialValues.push(
{
action: 'Snap to Position',
actionFunction: floatingObject.payload.executeAction,
actionProject: 'Foundations',
label: undefined,
visible: true,
//placeholder icon: https://www.iconpacks.net/free-icon/pins-53.html
iconPathOn: 'snap-position',
iconPathOff: 'snap-position',
rawRadius: 12,
targetRadius: 0,
currentRadius: 0,
ring: 2
}
)
menuItemsInitialValues.push(
{
action: 'Parent Detach',
+1 -1
View File
@@ -33,7 +33,7 @@ function newFoundationsUtilitiesPlugins() {
}
function addMissingPluginFile(node, fileName, pluginFolder, nodeType, saveWithWorkspace) {
if (UI.projects.foundations.utilities.children.isMissingChildrenByName(node, fileName) === true) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByName(node, fileName) === true) {
let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Plugin File', undefined, 'Foundations')
child.name = fileName
child.config = JSON.stringify({
@@ -6,13 +6,13 @@
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{\n \"percentage\": 90\n}",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{\n \"percentage\": 10\n}",
"config": "{\n \"percentage\": 0\n }",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
@@ -26,12 +26,12 @@
"id": "85d3b184-0122-4cb3-a83c-b3c00d626767",
"savedPayload": {
"position": {
"x": 24761.40800640108,
"y": 24813.204681296138
"x": 13397.771642764716,
"y": 17563.204681296138
},
"targetPosition": {
"x": 24984.3514540443,
"y": 25013.943863203796
"x": 13620.715090407934,
"y": 17763.943863203796
},
"floatingObject": {
"isPinned": false,
@@ -49,12 +49,12 @@
"id": "9163e52d-f77c-40b7-b139-960681b28171",
"savedPayload": {
"position": {
"x": 24984.3514540443,
"y": 25013.943863203796
"x": 13620.715090407934,
"y": 17763.943863203796
},
"targetPosition": {
"x": 25207.294901687517,
"y": 25214.683045111455
"x": 13843.658538051151,
"y": 17964.683045111455
},
"floatingObject": {
"isPinned": false,
@@ -81,12 +81,12 @@
"id": "5ebe2e87-295e-42cc-98f1-c70ee2efa4a3",
"savedPayload": {
"position": {
"x": 25332.041916178172,
"y": 24627.794484671173
"x": 13968.405552541806,
"y": 17377.794484671173
},
"targetPosition": {
"x": 25269.668408932845,
"y": 24921.238764891314
"x": 13906.032045296479,
"y": 17671.238764891314
},
"floatingObject": {
"isPinned": false,
@@ -104,12 +104,12 @@
"id": "d38054ef-3c0b-43fd-986d-27dd39f72f2c",
"savedPayload": {
"position": {
"x": 25269.668408932845,
"y": 24921.238764891314
"x": 13906.032045296479,
"y": 17671.238764891314
},
"targetPosition": {
"x": 25207.294901687517,
"y": 25214.683045111455
"x": 13843.658538051151,
"y": 17964.683045111455
},
"floatingObject": {
"isPinned": false,
@@ -127,12 +127,12 @@
"id": "975175a5-fbf2-4775-80c3-175af1bf27ae",
"savedPayload": {
"position": {
"x": 25207.294901687517,
"y": 25214.683045111455
"x": 13843.658538051151,
"y": 17964.683045111455
},
"targetPosition": {
"x": 25300,
"y": 25500
"x": 13936.363636363636,
"y": 18250
},
"floatingObject": {
"isPinned": false,
@@ -155,23 +155,23 @@
"referralProgram": {
"type": "Referral Program",
"name": "New Referral Program",
"config": "{\n \"percentage\": 30\n}",
"config": "{}",
"project": "Governance",
"userReferrers": [
{
"type": "User Referrer",
"name": "",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "46674b25-ed29-4c00-90be-3dc849e2af9f",
"id": "10938918-7341-47fd-84ea-ddc86904ec58",
"savedPayload": {
"position": {
"x": 25672.579175727584,
"y": 24749.70358952681
"x": 14285.388940725978,
"y": 17500.011926593106
},
"targetPosition": {
"x": 25664.72609123522,
"y": 25049.600787019477
"x": 14301.089727598861,
"y": 17799.600787019477
},
"floatingObject": {
"isPinned": false,
@@ -183,7 +183,61 @@
},
"uiObject": {
"isRunning": false
}
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile",
"Governance",
"a8de78f0-c3e4-4a2a-b7e8-f659073969db"
]
]
}
},
{
"type": "User Referrer",
"name": "Julian-Molina",
"config": "{}",
"project": "Governance",
"id": "d004c04d-aa54-4805-9e92-c7783e0cab0a",
"savedPayload": {
"position": {
"x": 14378.735441129616,
"y": 17509.823039132756
},
"targetPosition": {
"x": 14301.089727598861,
"y": 17799.600787019477
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 3,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Julian-Molina",
"id": "1fd95e41-4b22-48d5-be3a-904c37afcb11"
},
"referenceParentCombinedNodePath": [
[
"Julian-Molina",
"User Profile",
"Governance",
"1fd95e41-4b22-48d5-be3a-904c37afcb11"
]
]
}
}
],
@@ -194,18 +248,18 @@
"id": "1d484ca6-1fc2-4a6f-b6c1-f30ef07dc820",
"savedPayload": {
"position": {
"x": 25786.74708415796,
"y": 24775.537149726697
"x": 14501.828909506517,
"y": 17576.65733937626
},
"targetPosition": {
"x": 25664.72609123522,
"y": 25049.600787019477
"x": 14301.089727598861,
"y": 17799.600787019477
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 3,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -221,12 +275,12 @@
"id": "4849966e-c897-4222-9c46-b2e425f53810",
"savedPayload": {
"position": {
"x": 25882.338402538906,
"y": 24843.094414311352
"x": 14534.233516035953,
"y": 17610.804669704525
},
"targetPosition": {
"x": 25664.72609123522,
"y": 25049.600787019477
"x": 14301.089727598861,
"y": 17799.600787019477
},
"floatingObject": {
"isPinned": false,
@@ -244,12 +298,12 @@
"id": "e6e043a7-e486-4c7f-a686-8a031db4c7c5",
"savedPayload": {
"position": {
"x": 25664.72609123522,
"y": 25049.600787019477
"x": 14301.089727598861,
"y": 17799.600787019477
},
"targetPosition": {
"x": 25542.705098312483,
"y": 25323.664424312257
"x": 14179.06873467612,
"y": 18073.664424312257
},
"floatingObject": {
"isPinned": false,
@@ -272,18 +326,18 @@
"userSupporters": [
{
"type": "User Supporter",
"name": "",
"name": "cozed-gh",
"config": "{}",
"project": "Governance",
"id": "554c93e4-0de9-4ce2-a6ff-e8ce272e71cc",
"savedPayload": {
"position": {
"x": 25991.061666922964,
"y": 25032.498264196627
"x": 14578.62429950145,
"y": 17759.88994533369
},
"targetPosition": {
"x": 25841.061666922964,
"y": 25292.30588533196
"x": 14477.425303286602,
"y": 18042.30588533196
},
"floatingObject": {
"isPinned": false,
@@ -295,23 +349,36 @@
},
"uiObject": {
"isRunning": false
}
},
"referenceParent": {
"type": "User Profile",
"name": "cozed-gh",
"id": "07f0b13a-a50f-4488-8a2c-a3f8f08e889d"
},
"referenceParentCombinedNodePath": [
[
"cozed-gh",
"User Profile",
"Governance",
"07f0b13a-a50f-4488-8a2c-a3f8f08e889d"
]
]
}
},
{
"type": "User Supporter",
"name": "",
"name": "Smidy13",
"config": "{}",
"project": "Governance",
"id": "0d18e74f-dae9-4672-b00a-c997909494ee",
"id": "dab5a34d-1b55-4916-9ef6-a86133e3c4ad",
"savedPayload": {
"position": {
"x": 26115.125304215744,
"y": 25170.28489240922
"x": 14691.138132372005,
"y": 17831.766514466763
},
"targetPosition": {
"x": 25841.061666922964,
"y": 25292.30588533196
"x": 14477.425303286602,
"y": 18042.30588533196
},
"floatingObject": {
"isPinned": false,
@@ -323,7 +390,98 @@
},
"uiObject": {
"isRunning": false
}
},
"referenceParent": {
"type": "User Profile",
"name": "Smidy13",
"id": "4b5eca40-4d97-454d-91f3-8627a98ef682"
},
"referenceParentCombinedNodePath": [
[
"Smidy13",
"User Profile",
"Governance",
"4b5eca40-4d97-454d-91f3-8627a98ef682"
]
]
}
},
{
"type": "User Supporter",
"name": "PLuv",
"config": "{}",
"project": "Governance",
"id": "af6e4663-d24b-4684-913c-4821312d359a",
"savedPayload": {
"position": {
"x": 14761.32351842635,
"y": 17945.34298809562
},
"targetPosition": {
"x": 14477.425303286602,
"y": 18042.30588533196
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "PLuv",
"id": "142f5de2-3762-4f55-a839-22eac5c03c8f"
},
"referenceParentCombinedNodePath": [
[
"PLuv",
"User Profile"
]
]
}
},
{
"type": "User Supporter",
"name": "harrellbm",
"config": "{}",
"project": "Governance",
"id": "b5af4689-9931-49da-bc07-690c0deb4351",
"savedPayload": {
"position": {
"x": 14775.279381189153,
"y": 18078.124152694032
},
"targetPosition": {
"x": 14477.425303286602,
"y": 18042.30588533196
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "harrellbm",
"id": "3af73d3b-7c0e-4de7-a1e1-a72238081740"
},
"referenceParentCombinedNodePath": [
[
"harrellbm",
"User Profile"
]
]
}
}
],
@@ -334,12 +492,12 @@
"id": "37f0b912-de8f-4b79-98ad-b5aaf08f838b",
"savedPayload": {
"position": {
"x": 26134.505947143105,
"y": 25354.679392577287
"x": 14730.241590882813,
"y": 18203.811070159165
},
"targetPosition": {
"x": 25841.061666922964,
"y": 25292.30588533196
"x": 14477.425303286602,
"y": 18042.30588533196
},
"floatingObject": {
"isPinned": false,
@@ -361,12 +519,12 @@
"id": "f3fb13a2-b1f4-4b02-b925-c68f504fd2ac",
"savedPayload": {
"position": {
"x": 26041.800848830622,
"y": 25515.249332975178
"x": 14635.130434229754,
"y": 18297.50990503816
},
"targetPosition": {
"x": 25841.061666922964,
"y": 25292.30588533196
"x": 14477.425303286602,
"y": 18042.30588533196
},
"floatingObject": {
"isPinned": false,
@@ -384,12 +542,12 @@
"id": "65a48301-5bc1-4a5c-a50a-f429f44db4b8",
"savedPayload": {
"position": {
"x": 25841.061666922964,
"y": 25292.30588533196
"x": 14477.425303286602,
"y": 18042.30588533196
},
"targetPosition": {
"x": 25542.705098312483,
"y": 25323.664424312257
"x": 14179.06873467612,
"y": 18073.664424312257
},
"floatingObject": {
"isPinned": false,
@@ -407,12 +565,12 @@
"id": "410de3ee-3b6a-4e67-a6f0-130e29cd0a79",
"savedPayload": {
"position": {
"x": 25542.705098312483,
"y": 25323.664424312257
"x": 14179.06873467612,
"y": 18073.664424312257
},
"targetPosition": {
"x": 25300,
"y": 25500
"x": 13936.363636363636,
"y": 18250
},
"floatingObject": {
"isPinned": false,
@@ -430,7 +588,7 @@
"votesAndClaimsPrograms": {
"type": "Votes And Claims Programs",
"name": "New Votes And Claims Programs",
"config": "{\n \"percentage\": 20\n}",
"config": "{}",
"project": "Governance",
"votingProgram": {
"type": "Voting Program",
@@ -445,12 +603,12 @@
"id": "8b8039e0-c042-4dde-87ca-61ac8019a49e",
"savedPayload": {
"position": {
"x": 26139.418235533445,
"y": 25739.052653648338
"x": 14775.781871897083,
"y": 18489.052653648338
},
"targetPosition": {
"x": 25841.061666922964,
"y": 25707.69411466804
"x": 14477.425303286602,
"y": 18457.69411466804
},
"floatingObject": {
"isPinned": false,
@@ -468,12 +626,12 @@
"id": "1ca2a7f8-4dad-40a5-9a0b-70e4e6b0e037",
"savedPayload": {
"position": {
"x": 25841.061666922964,
"y": 25707.69411466804
"x": 14477.425303286602,
"y": 18457.69411466804
},
"targetPosition": {
"x": 25542.705098312483,
"y": 25676.335575687743
"x": 14179.06873467612,
"y": 18426.335575687743
},
"floatingObject": {
"isPinned": false,
@@ -493,102 +651,9 @@
"name": "New Claims Program",
"config": "{}",
"project": "Governance",
"assetClaimsFolders": [
{
"type": "Asset Claims Folder",
"name": "New Asset Claims Folder",
"config": "{}",
"project": "Governance",
"assetClaimsFolders": [],
"assetContributionClaims": [],
"id": "c0bb67cf-ed97-445f-b3b6-8ef181c386c0",
"savedPayload": {
"position": {
"x": 31844.903008026802,
"y": 18200.741292494906
},
"targetPosition": {
"x": 31404.73658769659,
"y": 18107.181031626915
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
],
"featureClaimsFolders": [
{
"type": "Feature Claims Folder",
"name": "New Feature Claims Folder",
"config": "{}",
"project": "Governance",
"featureClaimsFolders": [],
"featureContributionClaims": [],
"id": "81dc6357-893d-4361-9692-ef5d5e32a31e",
"savedPayload": {
"position": {
"x": 31705.845360558076,
"y": 18441.596203091744
},
"targetPosition": {
"x": 31404.73658769659,
"y": 18107.181031626915
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
],
"positionClaimsFolders": [
{
"type": "Position Claims Folder",
"name": "New Position Claims Folder",
"config": "{}",
"project": "Governance",
"positionClaimsFolders": [],
"positionContributionClaims": [],
"id": "32dec8a2-71c0-45f0-b1c3-8ea6f3b99b6d",
"savedPayload": {
"position": {
"x": 31451.77439616703,
"y": 18554.71588454264
},
"targetPosition": {
"x": 31404.73658769659,
"y": 18107.181031626915
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
],
"assetClaimsFolders": [],
"featureClaimsFolders": [],
"positionClaimsFolders": [],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
@@ -596,18 +661,18 @@
"id": "b3a93cc0-0801-4f6e-9488-435a1d272bff",
"savedPayload": {
"position": {
"x": 31179.73658769659,
"y": 18496.892463329914
"x": 14423.110720521601,
"y": 18974.462850273303
},
"targetPosition": {
"x": 31404.73658769659,
"y": 18107.181031626915
"x": 14301.089727598861,
"y": 18700.399212980523
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -619,19 +684,19 @@
"id": "98125357-80c3-4d3b-9b91-059298515c11",
"savedPayload": {
"position": {
"x": 31404.73658769659,
"y": 18107.181031626915
"x": 14301.089727598861,
"y": 18700.399212980523
},
"targetPosition": {
"x": 25542.705098312483,
"y": 25676.335575687743
"x": 14179.06873467612,
"y": 18426.335575687743
},
"floatingObject": {
"isPinned": true,
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 4,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
@@ -642,12 +707,12 @@
"id": "a79ace48-ae15-4359-95c1-371df5e41291",
"savedPayload": {
"position": {
"x": 25542.705098312483,
"y": 25676.335575687743
"x": 14179.06873467612,
"y": 18426.335575687743
},
"targetPosition": {
"x": 25300,
"y": 25500
"x": 13936.363636363636,
"y": 18250
},
"floatingObject": {
"isPinned": false,
@@ -665,7 +730,7 @@
"financialPrograms": {
"type": "Financial Programs",
"name": "New Financial Programs",
"config": "{\n \"percentage\": 20\n}",
"config": "{}",
"project": "Governance",
"stakingProgram": {
"type": "Staking Program",
@@ -679,12 +744,12 @@
"id": "77071bb6-dbda-4a2a-a8da-83ea6aa4155d",
"savedPayload": {
"position": {
"x": 25332.041916178172,
"y": 26372.205515328827
"x": 13968.405552541806,
"y": 19122.205515328827
},
"targetPosition": {
"x": 25269.668408932845,
"y": 26078.761235108686
"x": 13906.032045296479,
"y": 18828.761235108686
},
"floatingObject": {
"isPinned": false,
@@ -702,12 +767,12 @@
"id": "4087d58e-e684-4651-8849-4e194d5cc934",
"savedPayload": {
"position": {
"x": 25269.668408932845,
"y": 26078.761235108686
"x": 13906.032045296479,
"y": 18828.761235108686
},
"targetPosition": {
"x": 25207.294901687517,
"y": 25785.316954888545
"x": 13843.658538051151,
"y": 18535.316954888545
},
"floatingObject": {
"isPinned": false,
@@ -727,38 +792,7 @@
"name": "New Delegation Program",
"config": "{}",
"project": "Governance",
"delegatePowerSwitch": [
{
"type": "Delegate Power Switch",
"name": "New Delegate Power Switch",
"config": "{}",
"project": "Governance",
"delegatePowerSwitch": [],
"userDelegates": [],
"id": "41e5e919-43b5-43d1-b0c1-7b388b4cd1bf",
"savedPayload": {
"position": {
"x": 24891.646355731817,
"y": 26271.37309168475
},
"targetPosition": {
"x": 24984.3514540443,
"y": 25986.056136796204
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
],
"delegatePowerSwitch": [],
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
@@ -766,18 +800,18 @@
"id": "ef6f8b6c-6e85-4d6c-ad64-b1e6ddd1248f",
"savedPayload": {
"position": {
"x": 24690.90717382416,
"y": 26048.42964404153
"x": 13397.771642764716,
"y": 18936.795318703862
},
"targetPosition": {
"x": 24984.3514540443,
"y": 25986.056136796204
"x": 13620.715090407934,
"y": 18736.056136796204
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
@@ -789,12 +823,12 @@
"id": "ee380273-eced-4761-b91e-94b542beb5de",
"savedPayload": {
"position": {
"x": 24984.3514540443,
"y": 25986.056136796204
"x": 13620.715090407934,
"y": 18736.056136796204
},
"targetPosition": {
"x": 25207.294901687517,
"y": 25785.316954888545
"x": 13843.658538051151,
"y": 18535.316954888545
},
"floatingObject": {
"isPinned": false,
@@ -812,12 +846,12 @@
"id": "c09288a3-64fb-489d-8e7d-c8d72a56c535",
"savedPayload": {
"position": {
"x": 25207.294901687517,
"y": 25785.316954888545
"x": 13843.658538051151,
"y": 18535.316954888545
},
"targetPosition": {
"x": 25300,
"y": 25500
"x": 13936.363636363636,
"y": 18250
},
"floatingObject": {
"isPinned": false,
@@ -835,12 +869,12 @@
"id": "d7571db7-acfc-4d8c-aa91-582ff7f5dbb3",
"savedPayload": {
"position": {
"x": 25300,
"y": 25500
"x": 13936.363636363636,
"y": 18250
},
"targetPosition": {
"x": 25000,
"y": 25500
"x": 13636.363636363636,
"y": 18250
},
"floatingObject": {
"isPinned": false,
@@ -862,12 +896,12 @@
"id": "a72ec234-c5dc-425e-9ace-95ffed7c0542",
"savedPayload": {
"position": {
"x": 24700,
"y": 25500
"x": 13336.363636363636,
"y": 18250
},
"targetPosition": {
"x": 25000,
"y": 25500
"x": 13636.363636363636,
"y": 18250
},
"floatingObject": {
"isPinned": false,
@@ -885,12 +919,12 @@
"id": "280f0baf-bc13-497c-b255-618c1a146442",
"savedPayload": {
"position": {
"x": 25000,
"y": 25500
"x": 13636.363636363636,
"y": 18250
},
"targetPosition": {
"x": 25000,
"y": 25500
"x": 13636.363636363636,
"y": 18250
},
"floatingObject": {
"isPinned": false,
@@ -0,0 +1,539 @@
{
"type": "User Profile",
"name": "Ferrox85",
"config": "{\"signature\":{\"message\":\"Ferrox85\",\"messageHash\":\"0x6b9dff8767b58b146a3c641d6042eefccd0d9c307177db4f47fefff2653e12bf\",\"v\":\"0x1c\",\"r\":\"0x837324e0bf3c675f6d280bbf60da40d1bee39688a4af7aac63c63d6cbf36b8e1\",\"s\":\"0x5d2bd1a5a9e74eff00cab80ae424f8c2babe2bded104787598d4ec8bd883cfb7\",\"signature\":\"0x837324e0bf3c675f6d280bbf60da40d1bee39688a4af7aac63c63d6cbf36b8e15d2bd1a5a9e74eff00cab80ae424f8c2babe2bded104787598d4ec8bd883cfb71c\"},\"codeName\":\"Ferrox85\"}",
"project": "Governance",
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{\n \"percentage\": 0\n }",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
"name": "New Airdrop Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "90e5d1ca-8e7f-4c2b-9d63-592c55115782",
"savedPayload": {
"position": {
"x": 22877.272727272724,
"y": 23470.577136594
},
"targetPosition": {
"x": 23027.272727272724,
"y": 23730.384757729335
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "b463f377-cc54-4bcd-8b5d-4c3c9c4686c1",
"savedPayload": {
"position": {
"x": 23027.272727272724,
"y": 23730.384757729335
},
"targetPosition": {
"x": 23177.272727272724,
"y": 23990.192378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"githubProgram": {
"type": "Github Program",
"name": "New Github Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "eeb00048-018d-4512-a3cf-067ca647b500",
"savedPayload": {
"position": {
"x": 23777.272727272724,
"y": 23990.192378864667
},
"targetPosition": {
"x": 23477.272727272724,
"y": 23990.192378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "53fb2ec1-41cc-4c55-aae7-a8277a724c27",
"savedPayload": {
"position": {
"x": 23477.272727272724,
"y": 23990.192378864667
},
"targetPosition": {
"x": 23177.272727272724,
"y": 23990.192378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "e2689c81-1efa-4326-8889-9e4c60994322",
"savedPayload": {
"position": {
"x": 23177.272727272724,
"y": 23990.192378864667
},
"targetPosition": {
"x": 23027.272727272724,
"y": 24250
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"communityBuildingPrograms": {
"type": "Community Building Programs",
"name": "New Community Building Programs",
"config": "{}",
"project": "Governance",
"referralProgram": {
"type": "Referral Program",
"name": "New Referral Program",
"config": "{}",
"project": "Governance",
"userReferrers": [
{
"type": "User Referrer",
"name": "Julian-Molina",
"config": "{}",
"project": "Governance",
"id": "e766efaf-df09-40d0-9d45-47ad25ea453f",
"savedPayload": {
"position": {
"x": 23477.272727272724,
"y": 24209.807621135333
},
"targetPosition": {
"x": 23477.272727272724,
"y": 24509.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Julian-Molina",
"id": "1fd95e41-4b22-48d5-be3a-904c37afcb11"
},
"referenceParentCombinedNodePath": [
[
"Julian-Molina",
"User Profile",
"Governance",
"1fd95e41-4b22-48d5-be3a-904c37afcb11"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "9e220b16-a589-4b5b-b9b8-babb15e95bce",
"savedPayload": {
"position": {
"x": 23777.272727272724,
"y": 24509.807621135333
},
"targetPosition": {
"x": 23477.272727272724,
"y": 24509.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "bc91ee16-f7aa-4ab0-aa72-aa6ff5459f63",
"savedPayload": {
"position": {
"x": 23477.272727272724,
"y": 24809.807621135333
},
"targetPosition": {
"x": 23477.272727272724,
"y": 24509.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "7bd4b18d-cd7f-40e1-a928-9d1a89ff7337",
"savedPayload": {
"position": {
"x": 23477.272727272724,
"y": 24509.807621135333
},
"targetPosition": {
"x": 23177.272727272724,
"y": 24509.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"supportProgram": {
"type": "Support Program",
"name": "New Support Program",
"config": "{}",
"project": "Governance",
"userSupporters": [
{
"type": "User Supporter",
"name": "Julian-Molina",
"config": "{}",
"project": "Governance",
"id": "83907129-6c04-47b1-ab06-2b2ad451fa29",
"savedPayload": {
"position": {
"x": 23320.717007492865,
"y": 24831.988749515993
},
"targetPosition": {
"x": 23027.272727272724,
"y": 24769.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Julian-Molina",
"id": "1fd95e41-4b22-48d5-be3a-904c37afcb11"
},
"referenceParentCombinedNodePath": [
[
"Julian-Molina",
"User Profile",
"Governance",
"1fd95e41-4b22-48d5-be3a-904c37afcb11"
]
]
}
},
{
"type": "User Supporter",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "e9a04400-84d6-4652-b0d8-afa7b85c78e3",
"savedPayload": {
"position": {
"x": 23058.63126625302,
"y": 25067.971810881147
},
"targetPosition": {
"x": 23027.272727272724,
"y": 24769.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "393c8a9d-24a6-4ea2-a1ab-8e85cc9d9c10",
"savedPayload": {
"position": {
"x": 22753.209089979944,
"y": 24891.636235193404
},
"targetPosition": {
"x": 23027.272727272724,
"y": 24769.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "7331beda-d2d5-423d-bd2f-c7d22bdc1945",
"savedPayload": {
"position": {
"x": 22826.533545365066,
"y": 24546.671794627448
},
"targetPosition": {
"x": 23027.272727272724,
"y": 24769.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "f0c3aed4-c21b-4c23-96cd-5b95dc35c2ea",
"savedPayload": {
"position": {
"x": 23027.272727272724,
"y": 24769.615242270665
},
"targetPosition": {
"x": 23177.272727272724,
"y": 24509.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "a2137ff3-6504-47ed-9e2e-3875de641d52",
"savedPayload": {
"position": {
"x": 23177.272727272724,
"y": 24509.807621135333
},
"targetPosition": {
"x": 23027.272727272724,
"y": 24250
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "e0af057e-af90-4f4f-9261-75e860eeb00e",
"savedPayload": {
"position": {
"x": 23027.272727272724,
"y": 24250
},
"targetPosition": {
"x": 22727.272727272724,
"y": 24250
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensMined": {
"type": "Tokens Mined",
"name": "New Tokens Mined",
"project": "Governance",
"id": "a2d062af-5fd1-4e95-971b-132727a5b02f",
"savedPayload": {
"position": {
"x": 22427.272727272724,
"y": 24250
},
"targetPosition": {
"x": 22727.272727272724,
"y": 24250
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "200cfc7e-800e-4670-9c23-37adc34af02d",
"savedPayload": {
"position": {
"x": 22727.272727272724,
"y": 24250
},
"targetPosition": {
"x": 22727.272727272724,
"y": 24250
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
@@ -0,0 +1,485 @@
{
"type": "User Profile",
"name": "NAmorim",
"config": "{\n \"signature\": {\n \"message\": \"NAmorim\",\n \"messageHash\": \"0xd7fc194bfd83696ca9404e75ac4958a23e7b9204e9cefefd6b6a9d29953ebbaa\",\n \"v\": \"0x1b\",\n \"r\": \"0x91266021e1be8deaf8cfe2ac7893d6ce2bddad47459e7ba71b584ac29d25e449\",\n \"s\": \"0x2e06590f5eb90ad96683508cbad5349963621ce2babc394accd880c4530c0968\",\n \"signature\": \"0x91266021e1be8deaf8cfe2ac7893d6ce2bddad47459e7ba71b584ac29d25e4492e06590f5eb90ad96683508cbad5349963621ce2babc394accd880c4530c09681b\"\n }\n}",
"project": "Governance",
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{\"percentage\": 0}",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
"name": "New Airdrop Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "46bee27c-95f4-4ab9-8c1a-d46efcc05244",
"savedPayload": {
"position": {
"x": 13662,
"y": 16698.077136594
},
"targetPosition": {
"x": 13812,
"y": 16957.884757729335
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "27083db5-024d-4457-857a-88394a7b5118",
"savedPayload": {
"position": {
"x": 13812,
"y": 16957.884757729335
},
"targetPosition": {
"x": 13962,
"y": 17217.692378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"githubProgram": {
"type": "Github Program",
"name": "New Github Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "43a4f00c-eec3-464d-868b-13f480cc7e11",
"savedPayload": {
"position": {
"x": 14562,
"y": 17217.692378864667
},
"targetPosition": {
"x": 14262,
"y": 17217.692378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "3d762541-5bf7-4647-a545-f545cef7ef8b",
"savedPayload": {
"position": {
"x": 14262,
"y": 17217.692378864667
},
"targetPosition": {
"x": 13962,
"y": 17217.692378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "f88e2ac9-88e0-4816-b765-be4c4d1b400d",
"savedPayload": {
"position": {
"x": 13962,
"y": 17217.692378864667
},
"targetPosition": {
"x": 13812,
"y": 17477.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"communityBuildingPrograms": {
"type": "Community Building Programs",
"name": "New Community Building Programs",
"config": "{}",
"project": "Governance",
"referralProgram": {
"type": "Referral Program",
"name": "New Referral Program",
"config": "{}",
"project": "Governance",
"userReferrers": [
{
"type": "User Referrer",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "7491735f-f040-4483-8f74-8694c0759c81",
"savedPayload": {
"position": {
"x": 14262,
"y": 17437.307621135333
},
"targetPosition": {
"x": 14262,
"y": 17737.307621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "22664cdf-92cf-4102-8ccb-22a9f6f99801",
"savedPayload": {
"position": {
"x": 14562,
"y": 17737.307621135333
},
"targetPosition": {
"x": 14262,
"y": 17737.307621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "ee42c455-97f3-4624-b47a-ddd225ff8331",
"savedPayload": {
"position": {
"x": 14262,
"y": 18037.307621135333
},
"targetPosition": {
"x": 14262,
"y": 17737.307621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "3a8ef207-973f-4579-8acc-c98271e770ed",
"savedPayload": {
"position": {
"x": 14262,
"y": 17737.307621135333
},
"targetPosition": {
"x": 13962,
"y": 17737.307621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"supportProgram": {
"type": "Support Program",
"name": "New Support Program",
"config": "{}",
"project": "Governance",
"userSupporters": [
{
"type": "User Supporter",
"name": "",
"config": "{}",
"project": "Governance",
"id": "09c6fe47-e4c1-46dd-8825-b62e0524aab9",
"savedPayload": {
"position": {
"x": 14071.807621135331,
"y": 18147.115242270665
},
"targetPosition": {
"x": 13812,
"y": 17997.115242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "1874837c-6e22-460d-8847-6b884f7292aa",
"savedPayload": {
"position": {
"x": 13662,
"y": 18256.922863406
},
"targetPosition": {
"x": 13812,
"y": 17997.115242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "483b5f57-da5d-4583-b1cf-410c9fb40ae3",
"savedPayload": {
"position": {
"x": 13552.192378864669,
"y": 17847.115242270665
},
"targetPosition": {
"x": 13812,
"y": 17997.115242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "d2e657d3-e189-40a3-bd8d-b9c3bf152694",
"savedPayload": {
"position": {
"x": 13812,
"y": 17997.115242270665
},
"targetPosition": {
"x": 13962,
"y": 17737.307621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "1f6187e8-4878-43d1-a7df-9b33a73ccb57",
"savedPayload": {
"position": {
"x": 13962,
"y": 17737.307621135333
},
"targetPosition": {
"x": 13812,
"y": 17477.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "2d11ec65-8e01-49af-910c-1d6151e1ebe9",
"savedPayload": {
"position": {
"x": 13812,
"y": 17477.5
},
"targetPosition": {
"x": 13512,
"y": 17477.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensMined": {
"type": "Tokens Mined",
"name": "New Tokens Mined",
"project": "Governance",
"id": "5fb7a0f5-034b-4ce1-9052-c02cee1f6a38",
"savedPayload": {
"position": {
"x": 13212,
"y": 17477.5
},
"targetPosition": {
"x": 13512,
"y": 17477.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "d611eda3-4202-438a-af65-8981a90e742a",
"savedPayload": {
"position": {
"x": 13512,
"y": 17477.5
},
"targetPosition": {
"x": 13512,
"y": 17477.5
},
"floatingObject": {
"isPinned": true,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
@@ -0,0 +1,492 @@
{
"type": "User Profile",
"name": "Tentacule23",
"config": "{\"signature\":{\"message\":\"Tentacule23\",\"messageHash\":\"0x0fd9a76978281b0f3dfb6dfa25ce897698cb16ab7658fd127d0b2ee4a93856dc\",\"v\":\"0x1b\",\"r\":\"0x37ac59d105477fc0166075a89bc417c647c42e6c7a9117d85e34dd10470b30d7\",\"s\":\"0x425fb9fecb360a0ba183dce2a043e463511c7a57efac6529840473e199aaed45\",\"signature\":\"0x37ac59d105477fc0166075a89bc417c647c42e6c7a9117d85e34dd10470b30d7425fb9fecb360a0ba183dce2a043e463511c7a57efac6529840473e199aaed451b\"},\"codeName\":\"Tentacule23\"}",
"project": "Governance",
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{\n \"percentage\": 0\n}",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
"name": "New Airdrop Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "deaea400-fa7f-48fd-a3fe-653b1bd18650",
"savedPayload": {
"position": {
"x": 9240.90909090909,
"y": 20471.577136594
},
"targetPosition": {
"x": 9390.90909090909,
"y": 20731.384757729335
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "97ae26ad-542d-4373-806a-593e979e1a1b",
"savedPayload": {
"position": {
"x": 9390.90909090909,
"y": 20731.384757729335
},
"targetPosition": {
"x": 9540.90909090909,
"y": 20991.192378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"githubProgram": {
"type": "Github Program",
"name": "New Github Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "54a2fcd6-e80c-4a30-84c0-d80ae9d197e9",
"savedPayload": {
"position": {
"x": 10140.90909090909,
"y": 20991.192378864667
},
"targetPosition": {
"x": 9840.90909090909,
"y": 20991.192378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "786e62d1-6b32-49d9-8046-9c8577dbcd87",
"savedPayload": {
"position": {
"x": 9840.90909090909,
"y": 20991.192378864667
},
"targetPosition": {
"x": 9540.90909090909,
"y": 20991.192378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "7e7f3e6e-30f4-400d-a1f6-b3611498b7bf",
"savedPayload": {
"position": {
"x": 9540.90909090909,
"y": 20991.192378864667
},
"targetPosition": {
"x": 9390.90909090909,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"communityBuildingPrograms": {
"type": "Community Building Programs",
"name": "New Community Building Programs",
"config": "{}",
"project": "Governance",
"referralProgram": {
"type": "Referral Program",
"name": "New Referral Program",
"config": "{}",
"project": "Governance",
"userReferrers": [
{
"type": "User Referrer",
"name": "PLuv",
"config": "{}",
"project": "Governance",
"id": "bdf5f1d1-8441-4171-859f-d6e13f56ebd5",
"savedPayload": {
"position": {
"x": 9990.070230063444,
"y": 21748.196214194737
},
"targetPosition": {
"x": 9690.90909090909,
"y": 21770.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "PLuv",
"id": "142f5de2-3762-4f55-a839-22eac5c03c8f"
},
"referenceParentCombinedNodePath": [
[
"PLuv",
"User Profile",
"Governance",
"142f5de2-3762-4f55-a839-22eac5c03c8f"
]
]
}
},
{
"type": "User Referrer",
"name": "harrellbm",
"config": "{}",
"project": "Governance",
"id": "67c981c9-f18b-4476-911e-9761b375386a",
"savedPayload": {
"position": {
"x": 9970.17121550235,
"y": 21880.217549580582
},
"targetPosition": {
"x": 9690.90909090909,
"y": 21770.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "harrellbm",
"id": "3af73d3b-7c0e-4de7-a1e1-a72238081740"
},
"referenceParentCombinedNodePath": [
[
"harrellbm",
"User Profile"
]
]
}
},
{
"type": "User Referrer",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "2ca043e2-2332-4d61-b950-1e66fd360914",
"savedPayload": {
"position": {
"x": 9894.960912240365,
"y": 21990.530803819613
},
"targetPosition": {
"x": 9690.90909090909,
"y": 21770.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile"
]
]
}
},
{
"type": "User Referrer",
"name": "Julian-Molina",
"config": "{}",
"project": "Governance",
"id": "b53f989c-8771-4000-81f3-aef821170101",
"savedPayload": {
"position": {
"x": 9713.328118985017,
"y": 22069.77638142502
},
"targetPosition": {
"x": 9690.90909090909,
"y": 21770.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Julian-Molina",
"id": "1fd95e41-4b22-48d5-be3a-904c37afcb11"
},
"referenceParentCombinedNodePath": [
[
"Julian-Molina",
"User Profile"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "4f6ba6d0-501c-40ec-be81-806d505ca60f",
"savedPayload": {
"position": {
"x": 9470.993529360143,
"y": 21974.66706360194
},
"targetPosition": {
"x": 9690.90909090909,
"y": 21770.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "a364c990-fdaa-4b29-9c66-bd365d857532",
"savedPayload": {
"position": {
"x": 9394.259843041551,
"y": 21725.902562417814
},
"targetPosition": {
"x": 9690.90909090909,
"y": 21770.615242270665
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "4894f190-0535-4e91-b61f-9f74cbc273fb",
"savedPayload": {
"position": {
"x": 9690.90909090909,
"y": 21770.615242270665
},
"targetPosition": {
"x": 9540.90909090909,
"y": 21510.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "db99bd94-cded-4ef0-bfb2-979cac295f7f",
"savedPayload": {
"position": {
"x": 9540.90909090909,
"y": 21510.807621135333
},
"targetPosition": {
"x": 9390.90909090909,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "5683e2bf-45ca-4dd6-9ade-53b4cad76ed0",
"savedPayload": {
"position": {
"x": 9390.90909090909,
"y": 21251
},
"targetPosition": {
"x": 9090.90909090909,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensMined": {
"type": "Tokens Mined",
"name": "New Tokens Mined",
"project": "Governance",
"id": "96f1c595-f94e-4207-9828-4199c74c4bfd",
"savedPayload": {
"position": {
"x": 8790.90909090909,
"y": 21251
},
"targetPosition": {
"x": 9090.90909090909,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "7af21baa-ebc0-436f-94a7-a1746209418e",
"savedPayload": {
"position": {
"x": 9090.90909090909,
"y": 21251
},
"targetPosition": {
"x": 9090.90909090909,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
@@ -62,12 +62,12 @@
"id": "baa2f02c-2920-4edb-a103-d452fc61d82f",
"savedPayload": {
"position": {
"x": 20588.235294117643,
"y": 18250
"x": 30769.230769230762,
"y": 21250
},
"targetPosition": {
"x": 20588.235294117643,
"y": 18250
"x": 30769.230769230762,
"y": 21250
},
"floatingObject": {
"isPinned": false,
@@ -62,12 +62,12 @@
"id": "36c2b050-631f-4291-987c-418adc94317d",
"savedPayload": {
"position": {
"x": 17647.05882352941,
"y": 21251
"x": 28846.15384615384,
"y": 18250
},
"targetPosition": {
"x": 17647.05882352941,
"y": 21251
"x": 28846.15384615384,
"y": 18250
},
"floatingObject": {
"isPinned": false,
@@ -0,0 +1,222 @@
{
"type": "User Profile",
"name": "a-r-1",
"config": "{\n \"signature\": {\n \"message\": \"a-r-1\",\n \"messageHash\": \"0x9745bbf104bba5e739d256eb99244e777e1c7e071ccef5721ce4d2d1b23530e7\",\n \"v\": \"0x1b\",\n \"r\": \"0xf3cb4ffd98a4b690b15ae6185ae3b90e371ebfa94a801782a4225b40ae05bd7e\",\n \"s\": \"0x08368b4695b28f74e6379f66e7bd98295f68a5616a1977386bf41c80ff832722\",\n \"signature\": \"0xf3cb4ffd98a4b690b15ae6185ae3b90e371ebfa94a801782a4225b40ae05bd7e08368b4695b28f74e6379f66e7bd98295f68a5616a1977386bf41c80ff8327221b\"\n }\n}",
"project": "Governance",
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{}",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
"name": "New Airdrop Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "97dac6d9-abe3-407d-a695-bf0e78fb9338",
"savedPayload": {
"position": {
"x": 14202,
"y": 9998.884757729338
},
"targetPosition": {
"x": 14052,
"y": 10258.692378864669
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "06f2a2d5-4e0a-4229-a452-5cb77a90ca25",
"savedPayload": {
"position": {
"x": 14052,
"y": 10258.692378864669
},
"targetPosition": {
"x": 13902,
"y": 10518.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"githubProgram": {
"type": "Github Program",
"name": "New Github Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "769bca90-9994-42ff-8253-8b49394ff583",
"savedPayload": {
"position": {
"x": 14202,
"y": 11038.115242270662
},
"targetPosition": {
"x": 14052,
"y": 10778.307621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "ac196cef-a8b5-432b-8bbf-8122bc27fb04",
"savedPayload": {
"position": {
"x": 14052,
"y": 10778.307621135331
},
"targetPosition": {
"x": 13902,
"y": 10518.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "224f5e96-0309-4d0e-885d-d900e40ed060",
"savedPayload": {
"position": {
"x": 13902,
"y": 10518.5
},
"targetPosition": {
"x": 13602,
"y": 10518.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "99859f48-0e69-4fba-a93a-97156bf20b04",
"savedPayload": {
"position": {
"x": 13602,
"y": 10518.5
},
"targetPosition": {
"x": 13302,
"y": 10518.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensMined": {
"type": "Tokens Mined",
"name": "New Tokens Mined",
"project": "Governance",
"id": "3d0935b7-80b5-4b41-a0b8-77bf805f3d82",
"savedPayload": {
"position": {
"x": 13002,
"y": 10518.5
},
"targetPosition": {
"x": 13302,
"y": 10518.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "41c45cfb-3877-4b74-8526-0958300596b3",
"savedPayload": {
"position": {
"x": 13302,
"y": 10518.5
},
"targetPosition": {
"x": 13302,
"y": 10518.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
@@ -0,0 +1,625 @@
{
"type": "User Profile",
"name": "alexbacanu",
"config": "{\n \"signature\": {\n \"message\": \"alexbacanu\",\n \"messageHash\": \"0x82893d94bbeef59c79191b46b55e3b02ebf06138e914152b13de5633f26699d0\",\n \"v\": \"0x1b\",\n \"r\": \"0x9f2bec070af89bfde331a6f06c623c876133da647eb5657ccd83ee7af0e714dd\",\n \"s\": \"0x5c6af340c2febc2dbe3fac50e3a8e1dee226e2994613ea52a6b33089b59c7c30\",\n \"signature\": \"0x9f2bec070af89bfde331a6f06c623c876133da647eb5657ccd83ee7af0e714dd5c6af340c2febc2dbe3fac50e3a8e1dee226e2994613ea52a6b33089b59c7c301b\"\n },\n \"codeName\": \"alexbacanu\"\n}",
"project": "Governance",
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{\n \"percentage\": 0\n}",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
"name": "New Airdrop Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "febe4283-b7d6-4bbf-a2e2-5733b1715abe",
"savedPayload": {
"position": {
"x": 11831.807621135331,
"y": 10098.884757729338
},
"targetPosition": {
"x": 11681.807621135331,
"y": 10358.692378864669
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "370792a3-ab0d-4dc0-83bc-a48633923f99",
"savedPayload": {
"position": {
"x": 11681.807621135331,
"y": 10358.692378864669
},
"targetPosition": {
"x": 11531.807621135331,
"y": 10618.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"githubProgram": {
"type": "Github Program",
"name": "New Github Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "40385ee3-3d90-414d-b54e-22024ae8166f",
"savedPayload": {
"position": {
"x": 12131.807621135331,
"y": 10618.5
},
"targetPosition": {
"x": 11831.807621135331,
"y": 10618.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "24e27fdf-111e-4f37-ace8-d980638dcd7a",
"savedPayload": {
"position": {
"x": 11831.807621135331,
"y": 10618.5
},
"targetPosition": {
"x": 11531.807621135331,
"y": 10618.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "1ecb2c89-e7e8-485c-9f98-98428c78a02a",
"savedPayload": {
"position": {
"x": 11531.807621135331,
"y": 10618.5
},
"targetPosition": {
"x": 11272,
"y": 10768.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": true,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"communityBuildingPrograms": {
"type": "Community Building Programs",
"name": "New Community Building Programs",
"config": "{}",
"project": "Governance",
"referralProgram": {
"type": "Referral Program",
"name": "New Referral Program",
"config": "{}",
"project": "Governance",
"userReferrers": [
{
"type": "User Referrer",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "5ff1e995-2b2e-40fd-8de0-e9b4fcdeb69f",
"savedPayload": {
"position": {
"x": 11971.585369022052,
"y": 10581.046665333914
},
"targetPosition": {
"x": 11821.585369022052,
"y": 10840.854286469244
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile",
"Governance",
"a8de78f0-c3e4-4a2a-b7e8-f659073969db"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "8b8e990a-3458-4400-95da-d6232e24bf4a",
"savedPayload": {
"position": {
"x": 12111.363116908773,
"y": 10763.208572938489
},
"targetPosition": {
"x": 11821.585369022052,
"y": 10840.854286469244
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "ebc8ef82-ddec-41ab-9eed-2017f6e7b183",
"savedPayload": {
"position": {
"x": 12081.392990157383,
"y": 10990.854286469244
},
"targetPosition": {
"x": 11821.585369022052,
"y": 10840.854286469244
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "8f9aaa46-d804-4c10-a54b-92c2061dc858",
"savedPayload": {
"position": {
"x": 11821.585369022052,
"y": 10840.854286469244
},
"targetPosition": {
"x": 11531.807621135331,
"y": 10918.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"supportProgram": {
"type": "Support Program",
"name": "New Support Program",
"config": "{}",
"project": "Governance",
"userSupporters": [
{
"type": "User Supporter",
"name": "harrellbm",
"config": "{}",
"project": "Governance",
"id": "0e12f022-9c73-4dfc-ae01-679792d745c6",
"savedPayload": {
"position": {
"x": 12356.18567466841,
"y": 11027.031429703866
},
"targetPosition": {
"x": 11921.519052838328,
"y": 11143.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "harrellbm",
"id": "3af73d3b-7c0e-4de7-a1e1-a72238081740"
},
"referenceParentCombinedNodePath": [
[
"harrellbm",
"User Profile",
"Governance",
"3af73d3b-7c0e-4de7-a1e1-a72238081740"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "9a79cf1a-b9da-4f50-8ef0-39c151233c09",
"savedPayload": {
"position": {
"x": 12311.230484541325,
"y": 11368.5
},
"targetPosition": {
"x": 11921.519052838328,
"y": 11143.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "bbd18748-77f8-481b-a3d2-4bed02907cd2",
"savedPayload": {
"position": {
"x": 12037.987623134462,
"y": 11578.166621830082
},
"targetPosition": {
"x": 11921.519052838328,
"y": 11143.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "bc56de66-7e54-4b59-beb0-69cb612b4b71",
"savedPayload": {
"position": {
"x": 11921.519052838328,
"y": 11143.5
},
"targetPosition": {
"x": 11531.807621135331,
"y": 10918.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 4,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"mentorshipProgram": {
"type": "Mentorship Program",
"name": "New Mentorship Program",
"config": "{}",
"project": "Governance",
"userMentors": [
{
"type": "User Mentor",
"name": "PLuv",
"config": "{}",
"project": "Governance",
"id": "4d568744-258e-45a1-949c-0ea69e6683ef",
"savedPayload": {
"position": {
"x": 11869.260955801417,
"y": 11358.277747886721
},
"targetPosition": {
"x": 11609.453334666086,
"y": 11208.277747886721
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "PLuv",
"id": "142f5de2-3762-4f55-a839-22eac5c03c8f"
},
"referenceParentCombinedNodePath": [
[
"PLuv",
"User Profile",
"Governance",
"142f5de2-3762-4f55-a839-22eac5c03c8f"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "9b6fd291-940b-48aa-9c9c-fc48487c72c9",
"savedPayload": {
"position": {
"x": 11687.099048196842,
"y": 11498.055495773442
},
"targetPosition": {
"x": 11609.453334666086,
"y": 11208.277747886721
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "550e7a42-80f5-44c1-b866-40187888aec4",
"savedPayload": {
"position": {
"x": 11459.453334666086,
"y": 11468.085369022052
},
"targetPosition": {
"x": 11609.453334666086,
"y": 11208.277747886721
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "f158e082-bb8e-4d01-abf7-a8b504551b0a",
"savedPayload": {
"position": {
"x": 11609.453334666086,
"y": 11208.277747886721
},
"targetPosition": {
"x": 11531.807621135331,
"y": 10918.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "4f885985-7142-4cb8-a863-ef8e9ee7acec",
"savedPayload": {
"position": {
"x": 11531.807621135331,
"y": 10918.5
},
"targetPosition": {
"x": 11272,
"y": 10768.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": true,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "bfd6fc8e-8c79-4f63-90ab-b565348444ca",
"savedPayload": {
"position": {
"x": 11272,
"y": 10768.5
},
"targetPosition": {
"x": 10972,
"y": 10768.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensMined": {
"type": "Tokens Mined",
"name": "New Tokens Mined",
"project": "Governance",
"id": "2d4b83f8-b6d4-4555-9b1c-48a86442c077",
"savedPayload": {
"position": {
"x": 10672,
"y": 10768.5
},
"targetPosition": {
"x": 10972,
"y": 10768.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "ec022964-1f09-49e1-a147-3ba00abab9db",
"savedPayload": {
"position": {
"x": 22727.272727272724,
"y": 24250
},
"targetPosition": {
"x": 22727.272727272724,
"y": 24250
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
@@ -0,0 +1,362 @@
{
"type": "User Profile",
"name": "hellarnasstrom",
"config": "{\n \"signature\": {\n \"message\": \"hellarnasstrom\",\n \"messageHash\": \"0xdaf65d25729a9dea1d942565fe97a77a3d0ad39748ba97d4e75edbd6cfb3ba69\",\n \"v\": \"0x1b\",\n \"r\": \"0x2ae23edd6239dfbafe72632cb550225a3daa4a6b5fe9b2256a987d66e21d1836\",\n \"s\": \"0x5d9645529959dd53eb8043d07900fb71997d47328963221ece85a64ae374a080\",\n \"signature\": \"0x2ae23edd6239dfbafe72632cb550225a3daa4a6b5fe9b2256a987d66e21d18365d9645529959dd53eb8043d07900fb71997d47328963221ece85a64ae374a0801b\"\n }\n}",
"project": "Governance",
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{}",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
"name": "New Airdrop Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "ce3d6b8b-140c-486c-b81d-2867d8f91bf3",
"savedPayload": {
"position": {
"x": 14594,
"y": 9958.077136594007
},
"targetPosition": {
"x": 14744,
"y": 10217.884757729338
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "53473ffb-9cd1-47a6-bf2d-91589f9ac1b0",
"savedPayload": {
"position": {
"x": 14744,
"y": 10217.884757729338
},
"targetPosition": {
"x": 14894,
"y": 10477.692378864669
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"githubProgram": {
"type": "Github Program",
"name": "New Github Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "86265f29-a7e5-4e8e-b5c7-a7dc408c6d75",
"savedPayload": {
"position": {
"x": 15494,
"y": 10477.692378864669
},
"targetPosition": {
"x": 15194,
"y": 10477.692378864669
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "c7b309cd-aca8-4fde-b89d-46de14ff8da9",
"savedPayload": {
"position": {
"x": 15194,
"y": 10477.692378864669
},
"targetPosition": {
"x": 14894,
"y": 10477.692378864669
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "c02ba517-8246-43da-942c-f0299549370f",
"savedPayload": {
"position": {
"x": 14894,
"y": 10477.692378864669
},
"targetPosition": {
"x": 14744,
"y": 10737.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"communityBuildingPrograms": {
"type": "Community Building Programs",
"name": "New Community Building Programs",
"config": "{}",
"project": "Governance",
"referralProgram": {
"type": "Referral Program",
"name": "New Referral Program",
"config": "{}",
"project": "Governance",
"userReferrers": [
{
"type": "User Referrer",
"name": "",
"config": "{Julian-Molina}",
"project": "Governance",
"id": "c5d2130b-dab9-43f2-adcb-c3faef332073",
"savedPayload": {
"position": {
"x": 15303.807621135331,
"y": 11107.115242270662
},
"targetPosition": {
"x": 15044,
"y": 11257.115242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "6c3c64e5-b2ac-425b-a5f0-8fc871a107cf",
"savedPayload": {
"position": {
"x": 15194,
"y": 11516.922863405993
},
"targetPosition": {
"x": 15044,
"y": 11257.115242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "c5df6b99-450d-4dd6-a1b4-f4333d12536b",
"savedPayload": {
"position": {
"x": 14784.192378864669,
"y": 11407.115242270662
},
"targetPosition": {
"x": 15044,
"y": 11257.115242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "a66cfd08-f566-4bee-a4f7-e2fdc3ec4dde",
"savedPayload": {
"position": {
"x": 15044,
"y": 11257.115242270662
},
"targetPosition": {
"x": 14894,
"y": 10997.307621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "77faf241-5d51-4e7f-9b2b-e996eb942c44",
"savedPayload": {
"position": {
"x": 14894,
"y": 10997.307621135331
},
"targetPosition": {
"x": 14744,
"y": 10737.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "cc676344-5fc3-44f9-bd61-9d9a0045c510",
"savedPayload": {
"position": {
"x": 14744,
"y": 10737.5
},
"targetPosition": {
"x": 14444,
"y": 10737.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensMined": {
"type": "Tokens Mined",
"name": "New Tokens Mined",
"project": "Governance",
"id": "9d88be19-af2f-4305-8fa8-2722f8fbe0cb",
"savedPayload": {
"position": {
"x": 14144,
"y": 10737.5
},
"targetPosition": {
"x": 14444,
"y": 10737.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "f93bb5da-dd98-4dcf-92b2-95d86e0e0ed2",
"savedPayload": {
"position": {
"x": 14444,
"y": 10737.5
},
"targetPosition": {
"x": 14444,
"y": 10737.5
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
@@ -0,0 +1,697 @@
{
"type": "User Profile",
"name": "narkxx",
"config": "{\n \"signature\": {\n \"message\": \"narkxx\",\n \"messageHash\": \"0x9b2dbaa8f93d181e9ecead93dd3310217c50774828a0deb2b83a71d81f49ff4c\",\n \"v\": \"0x1b\",\n \"r\": \"0x0e65fdd697bf412f412669823bea7f76231c5fff1319d2c41c0568daa33d7f1c\",\n \"s\": \"0x2dfdf2361a34ca33f587dff4f2d89519f20f77ee1f49500a05ccc3ffb477187e\",\n \"signature\": \"0x0e65fdd697bf412f412669823bea7f76231c5fff1319d2c41c0568daa33d7f1c2dfdf2361a34ca33f587dff4f2d89519f20f77ee1f49500a05ccc3ffb477187e1b\"\n }\n}",
"project": "Governance",
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{\n \"percentage\": 0\n }",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
"name": "New Airdrop Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "e32a0924-c240-4e8e-a68b-0f1c313137d3",
"savedPayload": {
"position": {
"x": 25196,
"y": 14402.577136594007
},
"targetPosition": {
"x": 25346,
"y": 14662.384757729338
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "11f2e881-196c-466c-9de9-ec5ed0eb31d1",
"savedPayload": {
"position": {
"x": 25346,
"y": 14662.384757729338
},
"targetPosition": {
"x": 25496,
"y": 14922.192378864669
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"githubProgram": {
"type": "Github Program",
"name": "New Github Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "ff131c9a-a1f5-477c-b753-d24f2d22d10d",
"savedPayload": {
"position": {
"x": 26096,
"y": 14922.192378864669
},
"targetPosition": {
"x": 25796,
"y": 14922.192378864669
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "06cc86de-ad48-401e-98e6-b0a7e0f57257",
"savedPayload": {
"position": {
"x": 25796,
"y": 14922.192378864669
},
"targetPosition": {
"x": 25496,
"y": 14922.192378864669
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "93ba13e0-c631-4280-a011-fbffc30efb22",
"savedPayload": {
"position": {
"x": 25496,
"y": 14922.192378864669
},
"targetPosition": {
"x": 25346,
"y": 15182
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"communityBuildingPrograms": {
"type": "Community Building Programs",
"name": "New Community Building Programs",
"config": "{}",
"project": "Governance",
"referralProgram": {
"type": "Referral Program",
"name": "New Referral Program",
"config": "{}",
"project": "Governance",
"userReferrers": [
{
"type": "User Referrer",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "f2e7b4ac-314d-4e7f-a06e-a6bce2e6e1c1",
"savedPayload": {
"position": {
"x": 25905.807621135333,
"y": 15551.615242270662
},
"targetPosition": {
"x": 25646,
"y": 15701.615242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "c5021290-55dd-4a92-a73b-a41fbaedf849",
"savedPayload": {
"position": {
"x": 25796,
"y": 15961.422863405993
},
"targetPosition": {
"x": 25646,
"y": 15701.615242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "5952d507-52e6-461e-b875-309934d387d4",
"savedPayload": {
"position": {
"x": 25386.192378864667,
"y": 15851.615242270662
},
"targetPosition": {
"x": 25646,
"y": 15701.615242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "572e1b74-1cc8-4736-89a7-15c67bcb8849",
"savedPayload": {
"position": {
"x": 25755.807621135333,
"y": 15291.807621135331
},
"targetPosition": {
"x": 25496,
"y": 15441.807621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"supportProgram": {
"type": "Support Program",
"name": "New Support Program",
"config": "{}",
"project": "Governance",
"userSupporters": [
{
"type": "User Supporter",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "df9a319d-ecc9-452f-9fa3-d1d89c5b405c",
"savedPayload": {
"position": {
"x": 25639.44428022014,
"y": 15763.98874951599
},
"targetPosition": {
"x": 25346,
"y": 15701.615242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile"
]
]
}
},
{
"type": "User Supporter",
"name": "Julian-Molina",
"config": "{}",
"project": "Governance",
"id": "f3df7582-d059-4cfe-b827-e7012d25b82e",
"savedPayload": {
"position": {
"x": 25377.358538980297,
"y": 15999.971810881143
},
"targetPosition": {
"x": 25346,
"y": 15701.615242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Julian-Molina",
"id": "1fd95e41-4b22-48d5-be3a-904c37afcb11"
},
"referenceParentCombinedNodePath": [
[
"Julian-Molina",
"User Profile"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "fb4c58a8-c4e5-4a4b-bc52-5f525f838c26",
"savedPayload": {
"position": {
"x": 25071.93636270722,
"y": 15823.636235193402
},
"targetPosition": {
"x": 25346,
"y": 15701.615242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "2ae24fce-2b7a-4406-83d4-709d16539c8f",
"savedPayload": {
"position": {
"x": 25145.26081809234,
"y": 15478.671794627444
},
"targetPosition": {
"x": 25346,
"y": 15701.615242270662
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "f30a7db2-7f93-4fcc-8cc1-72fb9e5b6b4c",
"savedPayload": {
"position": {
"x": 25646,
"y": 15701.615242270662
},
"targetPosition": {
"x": 25496,
"y": 15441.807621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"mentorshipProgram": {
"type": "Mentorship Program",
"name": "New Mentorship Program",
"config": "{}",
"project": "Governance",
"userMentors": [
{
"type": "User Mentor",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "ce7cd9bb-3e22-4951-ac92-93f1d74631c8",
"savedPayload": {
"position": {
"x": 25459.135826507885,
"y": 15792.54680304299
},
"targetPosition": {
"x": 25236.192378864667,
"y": 15591.807621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile"
]
]
}
},
{
"type": "User Mentor",
"name": "Julian-Molina",
"config": "{}",
"project": "Governance",
"id": "1c6ddf3d-2ef5-49f2-96ed-20f025a22a0e",
"savedPayload": {
"position": {
"x": 25114.17138594193,
"y": 15865.871258428111
},
"targetPosition": {
"x": 25236.192378864667,
"y": 15591.807621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Julian-Molina",
"id": "1fd95e41-4b22-48d5-be3a-904c37afcb11"
},
"referenceParentCombinedNodePath": [
[
"Julian-Molina",
"User Profile"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "8c7da4b0-f06d-49f4-90b4-4327b6ceb21f",
"savedPayload": {
"position": {
"x": 24937.835810254186,
"y": 15560.449082155035
},
"targetPosition": {
"x": 25236.192378864667,
"y": 15591.807621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "e79084f0-78cc-4869-8010-cd9b698c0a90",
"savedPayload": {
"position": {
"x": 25173.81887161934,
"y": 15298.36334091519
},
"targetPosition": {
"x": 25236.192378864667,
"y": 15591.807621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "6bbb7865-cf57-4053-8e74-a9af2f8affa4",
"savedPayload": {
"position": {
"x": 25236.192378864667,
"y": 15591.807621135331
},
"targetPosition": {
"x": 25496,
"y": 15441.807621135331
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": true,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "260426a5-fb81-49aa-a6e7-8bf166c7d639",
"savedPayload": {
"position": {
"x": 25496,
"y": 15441.807621135331
},
"targetPosition": {
"x": 25346,
"y": 15182
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "adf950d7-547a-4028-a23b-dbc10991daa7",
"savedPayload": {
"position": {
"x": 25346,
"y": 15182
},
"targetPosition": {
"x": 25046,
"y": 15182
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensMined": {
"type": "Tokens Mined",
"name": "New Tokens Mined",
"project": "Governance",
"id": "1d9e6e80-030a-4dbe-97ed-819876bccf33",
"savedPayload": {
"position": {
"x": 24746,
"y": 15182
},
"targetPosition": {
"x": 25046,
"y": 15182
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "7bde7f01-4c03-48a4-9944-710b213ef414",
"savedPayload": {
"position": {
"x": 25046,
"y": 15182
},
"targetPosition": {
"x": 25046,
"y": 15182
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
@@ -0,0 +1,539 @@
{
"type": "User Profile",
"name": "quantum8",
"config": "{\"signature\":{\"message\":\"quantum8\",\"messageHash\":\"0x9eb09f3e33aa12ba004cec8f8b825ea0960c0bb2571c93c20e447e56be0f76a3\",\"v\":\"0x1b\",\"r\":\"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f\",\"s\":\"0x79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca2\",\"signature\":\"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca21b\"},\"codeName\":\"quantum8\"}",
"project": "Governance",
"tokenPowerSwitch": {
"type": "Token Power Switch",
"name": "New Token Power Switch",
"config": "{}",
"project": "Governance",
"tokenPowerSwitch": [],
"onboardingPrograms": {
"type": "Onboarding Programs",
"name": "New Onboarding Programs",
"config": "{\n \"percentage\": 0\n}",
"project": "Governance",
"airdropProgram": {
"type": "Airdrop Program",
"name": "New Airdrop Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "6565417c-961c-44a8-806b-75464582451b",
"savedPayload": {
"position": {
"x": 28132.5348938626,
"y": 20581.384757729335
},
"targetPosition": {
"x": 27982.5348938626,
"y": 20841.192378864667
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "3a1f75fa-aa2c-4460-b986-b03e67cdc45f",
"savedPayload": {
"position": {
"x": 27982.5348938626,
"y": 20841.192378864667
},
"targetPosition": {
"x": 27832.5348938626,
"y": 21101
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"githubProgram": {
"type": "Github Program",
"name": "New Github Program",
"config": "{}",
"project": "Governance",
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "f757ff52-6168-495f-81d4-0c60ead02ff5",
"savedPayload": {
"position": {
"x": 28432.5348938626,
"y": 21101
},
"targetPosition": {
"x": 28132.5348938626,
"y": 21101
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "bc18c9e2-3142-4e2a-9724-a190f79d88dd",
"savedPayload": {
"position": {
"x": 28132.5348938626,
"y": 21101
},
"targetPosition": {
"x": 27832.5348938626,
"y": 21101
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "5a1c7d96-3077-4ea6-9300-36ccd234290b",
"savedPayload": {
"position": {
"x": 27832.5348938626,
"y": 21101
},
"targetPosition": {
"x": 27572.72727272727,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"communityBuildingPrograms": {
"type": "Community Building Programs",
"name": "New Community Building Programs",
"config": "{}",
"project": "Governance",
"referralProgram": {
"type": "Referral Program",
"name": "New Referral Program",
"config": "{\n \"percentage\": 10\n}",
"project": "Governance",
"userReferrers": [
{
"type": "User Referrer",
"name": "Luis-Fernando-Molina",
"config": "{}",
"project": "Governance",
"id": "31721402-7e62-4d72-9037-d2535567c941",
"savedPayload": {
"position": {
"x": 28344.666928218565,
"y": 21188.867965644036
},
"targetPosition": {
"x": 28132.5348938626,
"y": 21401
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Luis-Fernando-Molina",
"id": "a8de78f0-c3e4-4a2a-b7e8-f659073969db"
},
"referenceParentCombinedNodePath": [
[
"Luis-Fernando-Molina",
"User Profile",
"Governance",
"a8de78f0-c3e4-4a2a-b7e8-f659073969db"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "ca9e4046-d3f3-4bd9-85a2-852c67a8c4f8",
"savedPayload": {
"position": {
"x": 28432.5348938626,
"y": 21401
},
"targetPosition": {
"x": 28132.5348938626,
"y": 21401
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "ed5ec5af-a544-4ad2-b7f8-72228e814c20",
"savedPayload": {
"position": {
"x": 28344.666928218565,
"y": 21613.132034355964
},
"targetPosition": {
"x": 28132.5348938626,
"y": 21401
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "3648a9b1-b3bc-4348-b940-1b868ea884d3",
"savedPayload": {
"position": {
"x": 28132.5348938626,
"y": 21401
},
"targetPosition": {
"x": 27832.5348938626,
"y": 21401
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"supportProgram": {
"type": "Support Program",
"name": "New Support Program",
"config": "{\n \"percentage\": 10\n}",
"project": "Governance",
"userSupporters": [
{
"type": "User Supporter",
"name": "Julian-Molina",
"config": "{}",
"project": "Governance",
"id": "013d635e-71ae-4376-86a7-97eaa6a788b5",
"savedPayload": {
"position": {
"x": 28280.891462473082,
"y": 21692.16616011563
},
"targetPosition": {
"x": 27982.5348938626,
"y": 21660.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "Julian-Molina",
"id": "1fd95e41-4b22-48d5-be3a-904c37afcb11"
},
"referenceParentCombinedNodePath": [
[
"Julian-Molina",
"User Profile",
"Governance",
"1fd95e41-4b22-48d5-be3a-904c37afcb11"
]
]
}
},
{
"type": "User Supporter",
"name": "harrellbm",
"config": "{}",
"project": "Governance",
"id": "d96cd4df-2cda-4ff8-a54d-5d81b1fabca7",
"savedPayload": {
"position": {
"x": 28205.47834150582,
"y": 21861.54680304299
},
"targetPosition": {
"x": 27982.5348938626,
"y": 21660.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
},
"referenceParent": {
"type": "User Profile",
"name": "harrellbm",
"id": "3af73d3b-7c0e-4de7-a1e1-a72238081740"
},
"referenceParentCombinedNodePath": [
[
"harrellbm",
"User Profile"
]
]
}
}
],
"tokensAwarded": {
"type": "Tokens Awarded",
"name": "New Tokens Awarded",
"project": "Governance",
"id": "c9a059b6-8a82-4961-9c9e-54aa37ffcf08",
"savedPayload": {
"position": {
"x": 28044.90840110793,
"y": 21954.251901355474
},
"targetPosition": {
"x": 27982.5348938626,
"y": 21660.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensBonus": {
"type": "Tokens Bonus",
"name": "New Tokens Bonus",
"project": "Governance",
"id": "b17ecb03-af59-4504-83cd-a92c2ac3a0e5",
"savedPayload": {
"position": {
"x": 27860.513900939863,
"y": 21934.871258428113
},
"targetPosition": {
"x": 27982.5348938626,
"y": 21660.807621135333
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "8c881a99-9bbc-4854-b849-f9a7d5ef1016",
"savedPayload": {
"position": {
"x": 27982.5348938626,
"y": 21660.807621135333
},
"targetPosition": {
"x": 27832.5348938626,
"y": 21401
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "3fb1d37b-4db8-438a-a198-cdd2e27d4cc1",
"savedPayload": {
"position": {
"x": 27832.5348938626,
"y": 21401
},
"targetPosition": {
"x": 27572.72727272727,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 2,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "9af8e675-0256-4b47-bb58-ebe914eb16a3",
"savedPayload": {
"position": {
"x": 27572.72727272727,
"y": 21251
},
"targetPosition": {
"x": 27272.72727272727,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"tokensMined": {
"type": "Tokens Mined",
"name": "New Tokens Mined",
"project": "Governance",
"id": "7b9b1c90-9101-4b09-bffd-1e5f46cee2c8",
"savedPayload": {
"position": {
"x": 26972.72727272727,
"y": 21251
},
"targetPosition": {
"x": 27272.72727272727,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
},
"id": "f2ba562b-9032-4fb4-8b97-0b58d8542905",
"savedPayload": {
"position": {
"x": 27272.72727272727,
"y": 21251
},
"targetPosition": {
"x": 27272.72727272727,
"y": 21251
},
"floatingObject": {
"isPinned": false,
"isFrozen": false,
"isCollapsed": false,
"angleToParent": 1,
"distanceToParent": 3,
"arrangementStyle": 0
},
"uiObject": {
"isRunning": false
}
}
}
@@ -47,8 +47,8 @@
},
{
"style": "Success",
"text": "No need to be an expert, but you will need some general knowledge of the system to understand what this is all about!",
"updated": 1629720316727,
"text": "No need to be an expert, but you do need to know how to operate the system! Otherwise, the process may be confusing and even frustrating!",
"updated": 1631546896227,
"translations": [
{
"language": "ES",
@@ -44,6 +44,11 @@
"style": "Text"
}
]
},
{
"style": "Important",
"text": "We will use this node to build your User Profile. Later on, you will delete this node to erase all the sensitive information you may enter along with the information the constructor will generate. But no need to worry at this point! I'll let you know when to delete it!",
"updated": 1631547429975
}
]
}
@@ -39,8 +39,8 @@
},
{
"style": "Text",
"text": "If you want to link an address you already own, type the twelve word mnemonic associated with your address under the mnemonic property. If not, leave the property blank and the system will make a new one for you!",
"updated": 1629706491511,
"text": "If you want to link an existing address, type its twelve-word mnemonic in the mnemonic property. Leave the property blank to generate a new address! You will delete this sensitive info later on. The info will not leave your computer and will not be saved to disk.",
"updated": 1631547921782,
"translations": [
{
"language": "ES",
@@ -21,8 +21,8 @@
"paragraphs": [
{
"style": "Note",
"text": "That is why we ask you to help in this manner! By completing those three tasks, you are effectively helping more developers find Superalgos, which is a win for everyone, as the more developers, the faster the project advances!",
"updated": 1630660356226,
"text": "That is why we ask you to help in this manner! By completing those three tasks, you are effectively helping more developers find Superalgos.",
"updated": 1631548798983,
"translations": [
{
"language": "ES",
@@ -70,6 +70,11 @@
"style": "List"
}
]
},
{
"style": "List",
"text": "This may not be immediately reflected in the system, as Github limits the number of queries the system makes. Don't worry, you will get your tokens anyway.",
"updated": 1631548891216
}
]
}
@@ -23,7 +23,7 @@
},
{
"style": "List",
"text": "The Superalgos.org Webiste: Julian-Molina",
"text": "The Superalgos.org Website: Julian-Molina",
"updated": 1630927577105
},
{
@@ -44,4 +44,4 @@
"text": "Official Social Media Posts: Julian-Molina"
}
]
}
}
@@ -59,7 +59,7 @@
},
{
"style": "List",
"text": "By default, Token Power flows in equal amounts to all offspring nodes! You may change this tough!",
"text": "By default, Token Power flows in equal amounts to all offspring nodes! You may change this though!",
"updated": 1630684072593,
"translations": [
{
@@ -71,4 +71,4 @@
]
}
]
}
}
@@ -535,7 +535,7 @@ function newGovernanceFunctionLibraryClaimsProgram() {
let destinationNodeChild = destinationNode[property.name]
let originNodeChildType = getOriginNodeChildType(destinationNodeChild)
let originNodeChild = UI.projects.foundations.utilities.children.findChildReferencingThisNode(originNode, destinationNodeChild)
let originNodeChild = UI.projects.foundations.utilities.nodeChildren.findChildReferencingThisNode(originNode, destinationNodeChild)
if (originNodeChild === undefined) {
originNodeChild = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(originNode, originNodeChildType)
@@ -552,7 +552,7 @@ function newGovernanceFunctionLibraryClaimsProgram() {
let destinationNodeChild = propertyArray[m]
let originNodeChildType = getOriginNodeChildType(destinationNodeChild)
let originNodeChild = UI.projects.foundations.utilities.children.findChildReferencingThisNode(originNode, destinationNodeChild)
let originNodeChild = UI.projects.foundations.utilities.nodeChildren.findChildReferencingThisNode(originNode, destinationNodeChild)
if (originNodeChild === undefined) {
originNodeChild = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(originNode, originNodeChildType)
@@ -552,7 +552,7 @@ function newGovernanceFunctionLibraryVotingProgram() {
let destinationNodeChild = destinationNode[property.name]
let originNodeChildType = getOriginNodeChildType(destinationNodeChild)
let originNodeChild = UI.projects.foundations.utilities.children.findChildReferencingThisNode(originNode, destinationNodeChild)
let originNodeChild = UI.projects.foundations.utilities.nodeChildren.findChildReferencingThisNode(originNode, destinationNodeChild)
if (originNodeChild === undefined) {
originNodeChild = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(originNode, originNodeChildType)
@@ -569,7 +569,7 @@ function newGovernanceFunctionLibraryVotingProgram() {
let destinationNodeChild = propertyArray[m]
let originNodeChildType = getOriginNodeChildType(destinationNodeChild)
let originNodeChild = UI.projects.foundations.utilities.children.findChildReferencingThisNode(originNode, destinationNodeChild)
let originNodeChild = UI.projects.foundations.utilities.nodeChildren.findChildReferencingThisNode(originNode, destinationNodeChild)
if (originNodeChild === undefined) {
originNodeChild = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(originNode, originNodeChildType)
@@ -1,6 +1,9 @@
exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSocketsInterface() {
let thisObject = {
networkClients: undefined,
networkPeers: undefined,
callersMap: undefined,
initialize: initialize,
finalize: finalize
}
@@ -14,6 +17,10 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
return thisObject
function finalize() {
thisObject.networkClients = undefined
thisObject.networkPeers = undefined
callersMap = undefined
socketServer = undefined
clientInterface = undefined
peerInterface = undefined
@@ -26,18 +33,35 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
clientInterface = NT.projects.socialTrading.modules.clientInterface.newSocialTradingModulesClientInterface()
peerInterface = NT.projects.socialTrading.modules.peerInterface.newSocialTradingModulesPeerInterface()
thisObject.networkClients = []
thisObject.networkPeers = []
thisObject.callersMap = new Map()
setUpWebSocketServer()
}
function setUpWebSocketServer() {
try {
socketServer.on('connection', onConnection)
socketServer.on('connection', onConnectionOpened)
function onConnectionOpened(socket)
/*
This function is executed every time a new Websockets connection
is stablished.
*/ {
let caller = {
socket: socket,
userProfile: undefined,
role: undefined
}
caller.socket.id = SA.projects.foundations.utilities.miscellaneousFunctions.genereteUniqueId()
caller.socket.on('close', onConnectionClosed)
function onConnection(socket) {
let caller = {}
let calledTimestamp = (new Date()).valueOf()
socket.on('message', onMenssage)
caller.socket.on('message', onMenssage)
async function onMenssage(message) {
try {
@@ -49,7 +73,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'messageHeader Not Coorrect JSON Format.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -60,13 +84,13 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'messageType Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
switch (messageHeader.messageType) {
case "Handshake": {
handshakeProducedure(socket, caller, calledTimestamp, messageHeader)
handshakeProducedure(caller, calledTimestamp, messageHeader)
break
}
case "Request": {
@@ -76,22 +100,27 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'Handshake Not Done Yet.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
let response
switch (caller.role) {
case 'Network Client': {
let response = await clientInterface.messageReceived(messageHeader.payload, caller.userProfile)
socket.send(JSON.stringify(response))
response = await clientInterface.messageReceived(messageHeader.payload, caller.userProfile)
caller.socket.send(JSON.stringify(response))
break
}
case 'Network Peer': {
let response = await peerInterface.messageReceived(messageHeader.payload)
socket.send(JSON.stringify(response))
response = await peerInterface.messageReceived(messageHeader.payload)
caller.socket.send(JSON.stringify(response))
break
}
}
if (response.result === 'Ok' && messageHeader.payload.requestType === 'Event') {
broadcastToPeers(messageHeader, caller)
broadcastToClients(messageHeader, caller)
}
break
}
default: {
@@ -99,7 +128,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'messageType Not Supported.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
break
}
}
@@ -109,7 +138,13 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
}
}
function handshakeProducedure(socket, caller, calledTimestamp, messageHeader) {
function onConnectionClosed() {
let socketId = this.id
let caller = thisObject.callersMap.get(socketId)
removeCaller(caller)
}
function handshakeProducedure(caller, calledTimestamp, messageHeader) {
/*
The handshage producedure have 2 steps, we need to know
now which one we are at.
@@ -119,7 +154,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'step Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
if (messageHeader.step !== 'One' && messageHeader.step !== 'Two') {
@@ -127,7 +162,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'step Not Supported.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
switch (messageHeader.step) {
@@ -149,7 +184,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerRole Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
@@ -158,7 +193,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerRole Not Supported.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
@@ -171,7 +206,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerProfileHandle Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
@@ -184,7 +219,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerTimestamp Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -195,7 +230,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerTimestamp Too Old.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -215,7 +250,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
message: 'Handshake Step One Complete',
signature: JSON.stringify(signature)
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
}
function handshakeStepTwo() {
@@ -227,7 +262,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'Handshake Step One Not Completed.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -238,7 +273,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'signature Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
@@ -250,7 +285,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'Bad Signature.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -263,7 +298,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'userProfile Not Found.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -277,7 +312,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerProfileHandle Does Not Match witnessUserProfile.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -289,7 +324,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'calledProfileHandle Does Not Match This Network Node Handle.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -300,7 +335,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'calledTimestamp Does Not Match calledTimestamp On Record.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -310,12 +345,96 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
We will remember the user profile behind this caller.
*/
caller.userProfile = witnessUserProfile
/*
We will remember the caller itself.
*/
addCaller(caller)
let response = {
result: 'Ok',
message: 'Handshake Successful.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
}
}
function addCaller(caller) {
thisObject.callersMap.set(caller.socket.id, caller)
switch (caller.role) {
case 'Network Client': {
addToArray(thisObject.networkClients, caller)
break
}
case 'Network Peer': {
addToArray(thisObject.networkPeers, caller)
break
}
}
function addToArray(callersArray, caller) {
/*
We will add the caller to the existing array, first the ones with highest ranking.
*/
for (let i = 0; i < callersArray.length; i++) {
let callerInArray = callersArray[i]
if (caller.userProfile.ranking > callerInArray.userProfile.ranking) {
callersArray.splice(i, 0, caller)
return
}
}
callersArray.push(caller)
}
}
function removeCaller(caller) {
thisObject.callersMap.delete(caller.socket.id)
switch (caller.role) {
case 'Network Client': {
removeFromArray(thisObject.networkClients, caller)
break
}
case 'Network Peer': {
removeFromArray(thisObject.networkPeers, caller)
break
}
}
function removeFromArray(callersArray, caller) {
for (let i = 0; i < callersArray.length; i++) {
let callerInArray = callersArray[i]
if (caller.socket.id === callerInArray.socket.id) {
callersArray.splice(i, 1)
return
}
}
}
}
function broadcastToPeers(messageHeader, caller) {
let callerIdToAVoid
if (caller.role === 'Network Peer') {
callerIdToAVoid = caller.socket.id
}
for (let i = 0; i < thisObject.networkPeers.length; i++) {
let networkPeer = thisObject.networkPeers[i]
if (networkPeer.socket.id === callerIdToAVoid) { continue }
networkPeer.socket.send(messageHeader)
}
}
function broadcastToClients(messageHeader, caller) {
let callerIdToAVoid
if (caller.role === 'Network Client') {
callerIdToAVoid = caller.socket.id
}
for (let i = 0; i < thisObject.networkClients.length; i++) {
let networkClient = thisObject.networkClients[i]
if (networkClient.socket.id === callerIdToAVoid) { continue }
networkClient.socket.send(messageHeader)
}
}
@@ -8,7 +8,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets
let socketClient
let web3 = new SA.nodeModules.web3()
let web3
let called = {}
let selectedNetworkNode // This is a Network Node we pick to try to connect to.
@@ -33,6 +33,8 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets
"address": "0xa153469c57A91F5a59Fc6c45A37aD8dbad85e417"
}
*/
web3 = new SA.nodeModules.web3()
selectedNetworkNode = {
userProfileHandle: "Test-Network-Node-Profile",
blockchainAccount: "0xa153469c57A91F5a59Fc6c45A37aD8dbad85e417",
@@ -185,7 +187,6 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets
reject()
return
}
console.log('[INFO] Web Sockets Client -> stepTwoResponse -> response.message = ' + response.message)
/*
This was the end of the Handshake producere. We are connected to the
Network Node and from now on, all response messages will be received
@@ -217,6 +218,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets
if (socketClient.readyState !== 1) { // 1 means connected and ready.
console.log('[ERROR] Web Sockets Client -> sendMessage -> Cannot send message while connection is closed.')
reject('Websockets Connection Not Ready.')
return
}
let socketMessage = {
@@ -226,7 +228,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets
socketClient.onmessage = socketMessage => { onMenssage(socketMessage) }
socketClient.send(
JSON.stringify(socketMessage)
)
)
function onMenssage(socketMessage) {
try {
+51 -10
View File
@@ -12,9 +12,9 @@
],
"functionLibraries": [
{
"name": "Attach Detach",
"name": "Reference Attach Detach",
"propertyName": "attachDetach",
"functionName": "newFoundationsFunctionLibraryAttachDetach"
"functionName": "newFoundationsFunctionLibraryReferenceAttachDetach"
},
{
"name": "Chain Attach Detach",
@@ -51,11 +51,6 @@
"propertyName": "onFocus",
"functionName": "newFoundationsFunctionLibraryOnFocus"
},
{
"name": "Super Scripts Functions",
"propertyName": "superScriptsFunctions",
"functionName": "newFoundationsFunctionLibrarySuperScriptsFunctions"
},
{
"name": "Webhook Functions",
"propertyName": "webhookFunctions",
@@ -184,8 +179,8 @@
"functionName": "newFoundationsUtilitiesMeshes"
},
{
"name": "Children",
"propertyName": "children",
"name": "Node Children",
"propertyName": "nodeChildren",
"functionName": "newFoundationsUtilitiesNodeChildren"
},
{
@@ -1238,7 +1233,7 @@
"functionName": "newGovernanceUtilitiesTables"
},
{
"name": "Decendent Tables",
"name": "Descendent Tables",
"propertyName": "decendentTables",
"functionName": "newGovernanceUtilitiesDecendentTables"
},
@@ -1344,6 +1339,12 @@
"functionName": "newSocialTradingModulesQueriesUserProfiles",
"fileName": "Queries/UserProfiles.js"
},
{
"name": "Unfollowed User Profiles",
"propertyName": "queriesUnfollowedUserProfiles",
"functionName": "newSocialTradingModulesQueriesUnfollowedUserProfiles",
"fileName": "Queries/UnfollowedUserProfiles.js"
},
{
"name": "Bot Profile Stats",
"propertyName": "queriesBotProfileStats",
@@ -1471,6 +1472,46 @@
"fileName": "EventTypes.js"
}
]
},
"DK": {
"globals": [],
"modules": [
{
"name": "Http Interface",
"propertyName": "httpInterface",
"functionName": "newDesktopModulesHttpInterface",
"fileName": "httpInterface.js"
},
{
"name": "Web Sockets Interface",
"propertyName": "webSocketsInterface",
"functionName": "newDesktopModulesWebSocketsInterface",
"fileName": "WebSocketsInterface.js"
},
{
"name": "Web App Interface",
"propertyName": "webAppInterface",
"functionName": "newSocialTradingModulesWebAppInterface",
"fileName": "WebAppInterface.js"
},
{
"name": "Social Graph",
"propertyName": "socialGraph",
"functionName": "newSocialTradingModulesSocialGraph",
"fileName": "SocialGraph.js"
}
],
"utilities": []
},
"UI":{
"modules":[
{
"name": "Web Sockets Client",
"propertyName": "webSocketsClient",
"functionName": "newSocialTradingModulesWebSocketsClient",
"fileName": "WebSocketsClient.js"
}
]
}
}
]
@@ -0,0 +1,24 @@
exports.newSocialTradingModulesSocialGraph = function newSocialTradingModulesSocialGraph() {
/*
This module mantains in memory the personal social graph for
the user profile of the user of the Desktop App. A personal social
graph is very similar to the one mantained at a Netwrok Node,
the mainn difference is that it only includes information relevant
to this particular user, and not for al the users in the system
as in the Network Node.
*/
let thisObject = {
initialize: initialize,
finalize: finalize
}
return thisObject
function finalize() {
}
function initialize() {
}
}
@@ -0,0 +1,152 @@
exports.newSocialTradingModulesWebAppInterface = function newSocialTradingModulesWebAppInterface() {
/*
This module handles the incomming messages from the Web App.
At it's current iteration, it will jusr forward those messages
to the Network Node it is connected to.
*/
let thisObject = {
messageReceived: messageReceived,
initialize: initialize,
finalize: finalize
}
return thisObject
function finalize() {
}
function initialize() {
}
async function messageReceived(message) {
let messageHeader
try {
messageHeader = JSON.parse(message)
} catch (err) {
let response = {
result: 'Error',
message: 'messageHeader Not Coorrect JSON Format.'
}
return JSON.stringify(response)
}
switch (messageHeader.requestType) {
case 'Query': {
let queryMessage
try {
queryMessage = JSON.parse(messageHeader.queryMessage)
} catch (err) {
let response = {
result: 'Error',
message: 'queryMessage Not Coorrect JSON Format.'
}
return JSON.stringify(response)
}
queryMessage.emitterUserProfileId = DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID
messageHeader.queryMessage = JSON.stringify(queryMessage)
let response = {
result: 'Ok',
message: 'Web App Interface Query Processed.',
data: await DK.running.webSocketsClient.sendMessage(JSON.stringify(messageHeader))
}
return response
}
case 'Event': {
let eventMessage
try {
eventMessage = JSON.parse(messageHeader.eventMessage)
} catch (err) {
let response = {
result: 'Error',
message: 'eventMessage Not Coorrect JSON Format.'
}
return JSON.stringify(response)
}
if (
eventMessage.eventType === SA.projects.socialTrading.globals.eventTypes.NEW_USER_POST ||
eventMessage.eventType === SA.projects.socialTrading.globals.eventTypes.REPLY_TO_USER_POST ||
eventMessage.eventType === SA.projects.socialTrading.globals.eventTypes.REPOST_USER_POST
) {
/*
We need to save the post at the User's storage and remove the text from the message
going to the Network Node.
*/
let commitMessage
switch (eventMessage.eventType) {
case SA.projects.socialTrading.globals.eventTypes.NEW_USER_POST: {
commitMessage = "New Post"
break
}
case SA.projects.socialTrading.globals.eventTypes.REPLY_TO_USER_POST: {
commitMessage = "Reply to User Post"
break
}
case SA.projects.socialTrading.globals.eventTypes.REPOST_USER_POST: {
commitMessage = "Repost User Post"
break
}
}
/*
The post text is eliminated, since it is now at the user's storage,
and a hash of the content was generated, and that is what is going to
the Network Node.
*/
eventMessage.emitterPostHash = await savePostAtStorage(eventMessage.text, commitMessage, eventMessage.timestamp)
eventMessage.text = undefined
}
eventMessage.emitterUserProfileId = DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID
messageHeader.eventMessage = JSON.stringify(eventMessage)
let response = {
result: 'Ok',
message: 'Web App Interface Event Processed.',
data: await DK.running.webSocketsClient.sendMessage(JSON.stringify(messageHeader))
}
return response
}
default: {
let response = {
result: 'Error',
message: 'requestType Not Supported.'
}
return JSON.stringify(response)
}
}
}
async function savePostAtStorage(text, commitMessage, timestamp) {
const { createHash } = await import('crypto')
const hash = createHash('sha256')
let post = {
timestamp: timestamp,
text: text
}
const fileContent = JSON.stringify(post, undefined, 4)
const fileHash = hash.update(fileContent).digest('hex')
const fileName = fileHash + ".json"
let filePath = './My-Social-Trading-Data/User-Posts/' + SA.projects.foundations.utilities.filesAndDirectories.pathFromDate(timestamp)
SA.projects.foundations.utilities.filesAndDirectories.mkDirByPathSync(filePath + '/')
SA.nodeModules.fs.writeFileSync(filePath + '/' + fileName, fileContent)
const options = {
baseDir: process.cwd() + '/My-Social-Trading-Data',
binary: 'git',
maxConcurrentProcesses: 6,
}
const git = SA.nodeModules.simpleGit(options)
await git.add('./*')
await git.commit(commitMessage)
await git.push('origin')
return fileHash
}
}
@@ -0,0 +1,103 @@
exports.newDesktopModulesWebSocketsInterface = function newDesktopModulesWebSocketsInterface() {
/*
This module handles the websockets communication between the
Desktop App's Client and the Destop App's Web App.
*/
let thisObject = {
sendToWebApp: sendToWebApp,
initialize: initialize,
finalize: finalize
}
let socketServer
let webAppInterface
let webApp
return thisObject
function finalize() {
socketServer = undefined
webAppInterface = undefined
webApp = undefined
}
function initialize() {
socketServer = new SA.nodeModules.ws.Server({ port: global.env.DESKTOP_WEB_SOCKETS_INTERFACE_PORT })
webAppInterface = DK.projects.socialTrading.modules.webAppInterface.newSocialTradingModulesWebAppInterface()
setUpWebSocketServer()
}
function setUpWebSocketServer() {
try {
socketServer.on('connection', onConnectionOpened)
function onConnectionOpened(socket)
/*
This function is executed every time a new Websockets connection
is stablished.
*/ {
if (webApp !== undefined) {
console.log('[ERROR] Only one websockets client allowed.')
return
}
webApp = {
socket: socket
}
console.log('Desktop Web App Connected to Web Sockets Interface ......................... Connected to port ' + global.env.CLIENT_WEB_SOCKETS_INTERFACE_PORT)
webApp.socket.on('close', onConnectionClosed)
webApp.socket.on('message', onMenssage)
async function onMenssage(message) {
try {
let messageHeader
try {
messageHeader = JSON.parse(message)
} catch (err) {
let response = {
result: 'Error',
message: 'messageHeader Not Coorrect JSON Format.'
}
webApp.socket.send(JSON.stringify(response))
return
}
await webAppInterface.messageReceived(messageHeader.payload)
.then(sendResponseToWebApp)
.catch(onError)
function sendResponseToWebApp(response) {
webApp.socket.send(JSON.stringify(response))
}
function onError(errorMessage) {
console.log('[ERROR] Web Sockets Interface -> onMenssage -> errorMessage = ' + errorMessage)
let response = {
result: 'Error',
message: errorMessage
}
webApp.socket.send(JSON.stringify(response))
}
} catch (err) {
console.log('[ERROR] Web Sockets Interface -> onMenssage -> err.stack = ' + err.stack)
}
}
}
function onConnectionClosed() {
webApp = undefined
console.log('Desktop Web App Discoonnected from Web Sockets Interface ................... Disonnected from port ' + global.env.CLIENT_WEB_SOCKETS_INTERFACE_PORT)
}
} catch (err) {
console.log('[ERROR] Web Sockets Interface -> setUpWebSocketServer -> err.stack = ' + err.stack)
}
}
function sendToWebApp(message) {
webApp.socket.send(JSON.stringify(message))
}
}
@@ -0,0 +1,93 @@
exports.newDesktopModulesHttpInterface = function newDesktopModulesHttpInterface() {
/*
This module represent the HTTP API of the
Desktop App. All HTTP request are processed
by this module.
*/
let thisObject = {
initialize: initialize,
finalize: finalize
}
return thisObject
function finalize() {
}
function initialize() {
/*
We will create an HTTP Server and leave it running forever.
*/
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.DESKTOP_HTTP_INTERFACE_PORT)
}
}
function onHttpRequest(httpRequest, httpResponse) {
try {
let requestPathAndParameters = httpRequest.url.split('?') // Remove version information
let requestPath = requestPathAndParameters[0].split('/')
let endpointOrFile = requestPath[1]
switch (endpointOrFile) {
case 'Environment':
{
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(global.env), httpResponse)
}
break
case 'ProjectsSchema':
{
let path = global.env.PATH_TO_PROJECTS + '/' + 'ProjectsSchema.json'
SA.projects.foundations.utilities.httpResponses.respondWithFile(path, httpResponse)
}
break
case 'Projects':
{
let path = ''
for (let i = 2; i < 10; i++) {
if (requestPath[i] !== undefined) {
let parameter = unescape(requestPath[i])
path = path + '/' + parameter
}
}
let filePath = global.env.PATH_TO_PROJECTS + path
SA.projects.foundations.utilities.httpResponses.respondWithFile(filePath, httpResponse)
}
break
case 'Images': // This means the Images folder.
{
let path = global.env.PATH_TO_DESKTOP + '/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_DESKTOP)
}
}
} catch (err) {
console.log(err.stack)
}
}
}
+2 -1
View File
@@ -7,11 +7,12 @@ exports.newSocialTradingGlobalsMemory = function () {
USER_PROFILES_BY_ID: new Map(), // Here we will store the user profiles by User Profile Id.
USER_PROFILES_BY_HANDLE: new Map(), // Here we will store the user profiles by User Profile Handle.
USER_PROFILES_BY_BLOCHAIN_ACCOUNT: new Map(), // Here we will store the user profiles by Blockchain Account.
EVENTS: new Map(), // This is the registry of all events received that prevents processing them more than once.
EVENTS: new Map() // This is the registry of all events received that prevents processing them more than once.
},
arrays: {
NETWORK_CLIENTS: [], // These are the Network Clients connected to this Network Node ordered by Ranking.
NETWORK_PEERS: [], // These are the Network Peers connected to this Network Node ordered by Ranking.
EVENTS: [] // This is the registry of all events in order that prevents ordering them more than once.
}
}
Loaded 100 of 120 files, more files were not shown because too many files have changed in this diff. Show more