"use strict"; const path = require('path'); const yargs = require(path.join(__dirname, '../server/node_modules/yargs')); const { hideBin } = require(path.join(__dirname, '../server/node_modules/yargs/helpers')); const _ = require(path.join(__dirname, '../server/node_modules/lodash')); const moduleAlias = require(path.join(__dirname, '../server/node_modules/module-alias')); moduleAlias.addAlias('punycode', 'punycode/'); const HELP_TEXT = `Usage: sh oasis.sh [mode] [options] Modes: gui Launch the Oasis web GUI (default if no mode given). server, pub Launch only the Oasis Sbot (headless, PUB mode). help, -h, --help Show this help message. PUB admin commands (require the Oasis Sbot to be running): whoami Print this Oasis ID. invite [N] Create an invite code. N = number of uses (default 1). name Set this Oasis display name. announce [port] Publish a pub address (default port 8008). follow Follow another Oasis ID / feed. status Show peer / replication status. gossip List known gossip peers. GUI options (forwarded to the backend): --host= Hostname / IP the web UI listens on (default: localhost). Use 0.0.0.0 to expose on a VPS. --port= Port for the web UI (default: 3000). --allow-host= Extra hostname allowed when behind a reverse proxy. --public Public-hosting mode: disables POST and redacts content from people who haven't opted in to public hosting. --offline Don't connect to Oasis peers or pubs. --no-open Don't auto-open a browser tab on launch (useful on VPS). --debug Verbose logging. Examples: sh oasis.sh sh oasis.sh server sh oasis.sh invite 100 sh oasis.sh name "My PUB" sh oasis.sh announce mypub.example.com sh oasis.sh --host=0.0.0.0 --port=8080 --no-open `; const cli = (presets /*, defaultConfigFile */) => { const argv = process.argv.slice(2); if (argv.includes('-h') || argv.includes('--help') || argv.includes('-help') || argv.includes('help')) { process.stdout.write(HELP_TEXT); process.exit(0); } return yargs(hideBin(process.argv)) .scriptName("oasis") .env("OASIS") .help(false) .version(false) .options("open", { default: _.get(presets, "open", true), type: "boolean" }) .options("offline", { default: _.get(presets, "offline", false), type: "boolean" }) .options("host", { default: _.get(presets, "host", "localhost"), type: "string" }) .options("allow-host", { default: _.get(presets, "allow-host", null), type: "string" }) .options("port", { default: _.get(presets, "port", 3000), type: "number" }) .options("public", { default: _.get(presets, "public", false), type: "boolean" }) .options("debug", { default: _.get(presets, "debug", false), type: "boolean" }) .parserConfiguration({ "strip-aliased": true }) .argv; }; module.exports = { cli };