Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop
This commit is contained in:
commit
bd9dd06f89
120 files changed
+13505
-1022
No files matched your search
@@ -1,6 +1,7 @@
|
||||
Data-Storage
|
||||
Log-Files
|
||||
My-Workspaces
|
||||
My-Social-Trading-Data
|
||||
debug.log
|
||||
.DS_Store
|
||||
*.db
|
||||
|
||||
Vendored
+4
-2
@@ -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
@@ -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
|
||||
/*
|
||||
|
||||
@@ -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'
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 = {}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
}
|
||||
}
|
||||
@@ -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.
@@ -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
@@ -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>
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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
@@ -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 |
File renamed without changes.
@@ -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
|
||||
}
|
||||
+4
-4
@@ -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"
|
||||
}
|
||||
+18
@@ -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"
|
||||
|
||||
+6330
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,
|
||||
|
||||
+33
-17
@@ -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",
|
||||
|
||||
+4
-4
@@ -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
|
||||
|
||||
+10
-10
@@ -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 +
|
||||
|
||||
+1
-1
@@ -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,
|
||||
|
||||
+9
-9
@@ -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/" +
|
||||
|
||||
+5
-5
@@ -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 =
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+2
-2
@@ -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
|
||||
}
|
||||
|
||||
+139
-80
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
-3
@@ -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',
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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",
|
||||
|
||||
+5
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -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",
|
||||
|
||||
+7
-2
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
Reference in new issue
Block a user