diff --git a/Platform/Client/githubServer.js b/Platform/Client/githubServer.js index cdf879457..b3b08503e 100644 --- a/Platform/Client/githubServer.js +++ b/Platform/Client/githubServer.js @@ -4,6 +4,7 @@ exports.newGithubServer = function newGithubServer() { getGithubStars: getGithubStars, getGithubWatchers: getGithubWatchers, getGithubForks: getGithubForks, + createGithubFork: createGithubFork, mergePullRequests: mergePullRequests, initialize: initialize, finalize: finalize, @@ -162,6 +163,49 @@ exports.newGithubServer = function newGithubServer() { } } + async function createGithubFork(repository, username, token) { + try { + username = unescape(username) + token = unescape(token) + + await doGithub() + + async function doGithub() { + try { + //const repo = 'Superalgos' + //const owner = username + const { Octokit } = SA.nodeModules.octokit + const octokit = new Octokit({ + auth: token, + userAgent: 'Superalgos ' + SA.version + }) + + await octokit.repos.createFork({ + owner: 'Superalgos', + repo: 'Superalgos' + }) + } catch (err) { + if (err === undefined) { return } + console.log('[ERROR] Github Server -> createGithubFork -> doGithub -> err.stack = ' + err.stack) + } + } + } catch (err) { + console.log('[ERROR] Github Server -> createGithubFork -> Method call produced an error.') + console.log('[ERROR] Github Server -> createGithubFork -> err.stack = ' + err.stack) + console.log('[ERROR] Github Server -> createGithubFork -> repository = ' + repository) + console.log('[ERROR] Github Server -> createGithubFork -> username = ' + username) + console.log('[ERROR] Github Server -> createGithubFork -> token starts with = ' + token.substring(0, 10) + '...') + console.log('[ERROR] Github Server -> createGithubFork -> token ends with = ' + '...' + token.substring(token.length - 10)) + + let error = { + result: 'Fail Because', + message: err.message, + stack: err.stack + } + return error + } + } + async function mergeGithubPullRequests(commitMessage, username, token) { try { commitMessage = unescape(commitMessage) diff --git a/Platform/Client/httpInterface.js b/Platform/Client/httpInterface.js index 565afded3..e355b31ca 100644 --- a/Platform/Client/httpInterface.js +++ b/Platform/Client/httpInterface.js @@ -1161,7 +1161,7 @@ exports.newHttpInterface = function newHttpInterface() { try { console.log('fixSchemas...' + allAppSchemas.length) let projects = SA.projects.foundations.utilities.filesAndDirectories.getDirectories(global.env.PATH_TO_PROJECTS) - const fs = SA.nodeModules.fs + //const fs = SA.nodeModules.fs let needFixing = 0 for (let i = 0; i < allAppSchemas.length; i++) { let schemaDocument = allAppSchemas[i] @@ -1209,13 +1209,13 @@ exports.newHttpInterface = function newHttpInterface() { } } - if (wasUpdated === true) { - let fileContent = JSON.stringify(schemaDocument, undefined, 4) - let filePath = allAppSchemasFilePaths[i] + //if (wasUpdated === true) { + //let fileContent = JSON.stringify(schemaDocument, undefined, 4) + //let filePath = allAppSchemasFilePaths[i] //console.log('Saving File at ' + filePath) //console.log(fileContent) //fs.writeFileSync(filePath, fileContent) - } + //} } } catch (err) { console.log(err.stack) @@ -1312,6 +1312,17 @@ exports.newHttpInterface = function newHttpInterface() { SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse) return } + case 'createGithubFork': { + + let serverResponse = await PL.servers.GITHUB_SERVER.createGithubFork( + params.repository, + params.username, + params.token + ) + + SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse) + return + } case 'mergePullRequests': { let serverResponse = await PL.servers.GITHUB_SERVER.mergePullRequests( diff --git a/Projects/Governance/UI/Function-Libraries/LiquidityProgram.js b/Projects/Governance/UI/Function-Libraries/LiquidityProgram.js index 1b6eae61a..1b676b970 100644 --- a/Projects/Governance/UI/Function-Libraries/LiquidityProgram.js +++ b/Projects/Governance/UI/Function-Libraries/LiquidityProgram.js @@ -108,7 +108,7 @@ function newGovernanceFunctionLibraryLiquidityProgram() { ) { node.payload.liquidityProgram.isActive = false userProfile.payload.uiObject.setErrorMessage( - "Waiting for liquidity balance. It takes 1 minute to load the liquidity provided by each profile, bacause you are using a free API provided by BSC Scan.", + "Waiting for liquidity balance. It takes 1 minute to load the liquidity provided by each profile, because you are using a free API provided by BSC Scan.", UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR ) return diff --git a/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js b/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js index ae3f8fe1c..14d43bf1a 100644 --- a/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js +++ b/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js @@ -125,6 +125,80 @@ function newGovernanceFunctionLibraryProfileConstructor() { UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes ) /* + Set up a basic profile to start receiving benefits + */ + let finServices = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(userProfile.tokenPowerSwitch, "Financial Programs", userProfile) + finServices.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + finServices.payload.uiObject.menu.internalClick("Add Financial Program") + + let stakeProg = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(finServices, "Staking Program", userProfile) + stakeProg.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + stakeProg.payload.uiObject.menu.internalClick("Add Tokens Awarded") + + let liquidProgs = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(userProfile.tokenPowerSwitch, "Liquidity Programs", userProfile) + liquidProgs.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + liquidProgs.payload.uiObject.menu.internalClick('Add Liquidity Program') + + let liquidProg = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(liquidProgs, "Liquidity Program", userProfile) + liquidProg.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + liquidProg.payload.uiObject.menu.internalClick('Add Tokens Awarded') + + /* + Check if the user already has the SA fork. If not, do it for them. + */ + + const hasFork = UI.projects.governance.spaces.userProfileSpace.githubForks.get(githubUsername) + if(hasFork === undefined) { + // New user! Probably doesn't have a fork, so let's create it. + let apisNode = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadByNodeType('APIs') + if (apisNode === undefined) { + UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Error - Github Credentials Missing', 'Anchor Github Credentials Missing') + return + } + if (apisNode.githubAPI === undefined) { + UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Error - Github Credentials Missing', 'Anchor Github Credentials Missing') + return + } + + let config = JSON.parse(apisNode.githubAPI.config) + if (config.username === undefined || config.username === "") { + UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Error - Github Credentials Missing', 'Anchor Github Credentials Missing') + return + } + if (config.token === undefined || config.token === "") { + UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Error - Github Credentials Missing', 'Anchor Github Credentials Missing') + return + } + + let params = { + method: 'createGithubFork', + username: config.username, + token: config.token, + } + + let url = 'GOV' // We will access the default Client GOV endpoint. + + httpRequest(JSON.stringify(params), url, onResponse) + + function onResponse(err, data) { + + data = JSON.parse(data) + if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result && data.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { + UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Message - Automated User Profile Contribute Done') + } else { + if (data.docs === undefined) {return} + UI.projects.education.spaces.docsSpace.navigateTo( + data.docs.project, + data.docs.category, + data.docs.type, + data.docs.anchor, + undefined, + data.docs.placeholder + ) + } + } + } + /* We store at the User Profile the Signed githubUsername */ UI.projects.visualScripting.utilities.nodeConfig.saveConfigProperty(userProfile.payload, 'signature', response.signature) @@ -143,10 +217,15 @@ function newGovernanceFunctionLibraryProfileConstructor() { Delete the mnemonic from the Profile Constructor config. */ node.config = "{}" + /* + TODO: Let's create a nice basic profile to start with liquidity and community + */ + /* Show nice message. */ if (mnemonic === undefined || mnemonic === "") { + // TODO link to some wallet and setup the token node.payload.uiObject.setInfoMessage( "Profile Private Key has been successfully created. User Profile installed as a plugin and saved. Use the Private Key at a crypto wallet and delete this node once done.", UI.projects.governance.globals.designer.SET_INFO_COUNTER_FACTOR