2022-07-08 18:17:56 +00:00
import { existsSync , unlinkSync , appendFileSync } from "fs" ;
import { createInterface } from "readline" ;
2023-05-08 08:40:38 +00:00
import { Cyan , Bright } from "./sub/consoleText.js" ;
2022-07-08 18:17:56 +00:00
import { execSync } from "child_process" ;
let envPath = './.env' ;
let q = ` ${ Cyan ( '?' ) } \x 1b[1m ` ;
2023-06-05 06:43:04 +00:00
let ob = { } ;
2022-08-16 07:14:19 +00:00
let rl = createInterface ( { input : process . stdin , output : process . stdout } ) ;
2022-07-08 18:17:56 +00:00
2022-09-01 13:51:18 +00:00
let final = ( ) => {
2023-06-05 06:43:04 +00:00
if ( existsSync ( envPath ) ) unlinkSync ( envPath ) ;
2022-09-01 13:51:18 +00:00
for ( let i in ob ) {
appendFileSync ( envPath , ` ${ i } = ${ ob [ i ] } \n ` )
}
2023-06-05 06:43:04 +00:00
console . log ( Bright ( "\nAwesome! I've created a fresh .env file for you." ) ) ;
console . log ( ` ${ Bright ( "Now I'll run" ) } ${ Cyan ( "npm install" ) } ${ Bright ( "to install all dependencies. It shouldn't take long.\n\n" ) } ` ) ;
2022-09-01 13:51:18 +00:00
execSync ( 'npm install' , { stdio : [ 0 , 1 , 2 ] } ) ;
2023-06-05 06:43:04 +00:00
console . log ( ` \n \n ${ Cyan ( "All done!\n" ) } ` ) ;
console . log ( Bright ( "You can re-run this script at any time to update the configuration." ) ) ;
console . log ( Bright ( "\nYou're now ready to start cobalt. Simply run " ) + Cyan ( "npm start" ) + Bright ( '!\nHave fun :)' ) ) ;
2022-09-01 13:51:18 +00:00
rl . close ( )
}
2022-07-08 18:17:56 +00:00
console . log (
2023-06-05 06:43:04 +00:00
` ${ Cyan ( "Hey, this is cobalt." ) } \n ${ Bright ( "Let's start by creating a new " ) } ${ Cyan ( ".env" ) } ${ Bright ( " file. You can always change it later." ) } `
2022-07-08 18:17:56 +00:00
)
2023-06-05 06:43:04 +00:00
2022-07-08 18:17:56 +00:00
console . log (
2023-06-27 13:56:15 +00:00
` \n ${ Bright ( "⚠️ Please notice that since v.6.0 cobalt is hosted in two parts. API and web app are now separate.\nMerged hosting is no longer available." ) } `
2022-07-08 18:17:56 +00:00
)
2023-06-05 06:43:04 +00:00
function setup ( ) {
console . log ( Bright ( "\nWhat kind of server will this instance be?\nOptions: api, web." ) ) ;
rl . question ( q , r1 => {
switch ( r1 . toLowerCase ( ) ) {
case 'api' :
console . log ( Bright ( "\nCool! What's the domain this API instance will be running on? (localhost)\nExample: co.wuk.sh" ) ) ;
rl . question ( q , apiURL => {
ob [ 'apiURL' ] = ` http://localhost:9000/ ` ;
ob [ 'apiPort' ] = 9000 ;
if ( apiURL && apiURL !== "localhost" ) ob [ 'apiURL' ] = ` https:// ${ apiURL . toLowerCase ( ) } / ` ;
2022-07-08 18:17:56 +00:00
2023-06-05 06:43:04 +00:00
console . log ( Bright ( "\nGreat! Now, what port will it be running on? (9000)" ) ) ;
2023-02-09 14:45:17 +00:00
2023-06-05 06:43:04 +00:00
rl . question ( q , apiPort => {
if ( apiPort ) ob [ 'apiPort' ] = apiPort ;
if ( apiPort && ( apiURL === "localhost" || ! apiURL ) ) ob [ 'apiURL' ] = ` http://localhost: ${ apiPort } / ` ;
2023-02-09 14:45:17 +00:00
2023-06-05 06:43:04 +00:00
console . log ( Bright ( "\nWhat will your instance's name be? Usually it's something like eu-nl aka region-country. (local)" ) ) ;
2023-04-09 04:47:17 +00:00
2023-06-05 06:43:04 +00:00
rl . question ( q , apiName => {
ob [ 'apiName' ] = apiName . toLowerCase ( ) ;
if ( ! apiName || apiName === "local" ) ob [ 'apiName' ] = "local" ;
2023-04-09 04:47:17 +00:00
2023-06-05 06:43:04 +00:00
console . log ( Bright ( "\nOne last thing: would you like to enable CORS? It allows other websites and extensions to use your instance's API.\ny/n (n)" ) ) ;
rl . question ( q , apiCors => {
if ( apiCors . toLowerCase ( ) !== 'y' ) ob [ 'cors' ] = '0'
final ( )
} )
} )
} ) ;
} )
break ;
case 'web' :
console . log ( Bright ( "\nAwesome! What's the domain this web app instance will be running on? (localhost)\nExample: co.wukko.me" ) ) ;
rl . question ( q , webURL => {
ob [ 'webURL' ] = ` http://localhost:9001/ ` ;
ob [ 'webPort' ] = 9001 ;
if ( webURL && webURL !== "localhost" ) ob [ 'webURL' ] = ` https:// ${ webURL . toLowerCase ( ) } / ` ;
console . log (
Bright ( "\nGreat! Now, what port will it be running on? (9001)" )
)
rl . question ( q , webPort => {
if ( webPort ) ob [ 'webPort' ] = webPort ;
if ( webPort && ( webURL === "localhost" || ! webURL ) ) ob [ 'webURL' ] = ` http://localhost: ${ webPort } / ` ;
console . log (
Bright ( "\nOne last thing: what default API domain should be used? (co.wuk.sh)\nIf it's hosted locally, make sure to include the port:" ) + Cyan ( " localhost:9000" )
) ;
rl . question ( q , apiURL => {
ob [ 'apiURL' ] = ` https:// ${ apiURL . toLowerCase ( ) } / ` ;
if ( apiURL . includes ( ':' ) ) ob [ 'apiURL' ] = ` http:// ${ apiURL . toLowerCase ( ) } / ` ;
if ( ! apiURL ) ob [ 'apiURL' ] = "https://co.wuk.sh/" ;
final ( )
} )
} ) ;
} ) ;
break ;
default :
console . log ( Bright ( "\nThis is not an option. Try again." ) ) ;
setup ( )
}
} )
}
setup ( )