@powerhousedao/ph-cli 0.40.85-dev.1 → 0.40.85-dev.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/ph-cli",
3
- "version": "0.40.85-dev.1",
3
+ "version": "0.40.85-dev.3",
4
4
  "description": "",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # =============================================================================
4
+ # Configuration
5
+ # =============================================================================
6
+ PROJECT_NAME=${1:-"global"}
7
+ ACTION=${2:-"status"}
8
+
9
+ # =============================================================================
10
+ # OS Detection and Windows Handling
11
+ # =============================================================================
12
+ if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
13
+ if [ -f "$0.ps1" ]; then
14
+ powershell -ExecutionPolicy Bypass -File "$0.ps1" -PROJECT_NAME "$PROJECT_NAME" -ACTION "$ACTION"
15
+ else
16
+ echo "Error: Windows management script (manage-environment.ps1) not found"
17
+ exit 1
18
+ fi
19
+ else
20
+ # =============================================================================
21
+ # Service Management
22
+ # =============================================================================
23
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
24
+ echo " Managing project: $PROJECT_NAME"
25
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
26
+
27
+ # Function to enable/disable Nginx site
28
+ manage_nginx_site() {
29
+ local action=$1
30
+ local site_path="/etc/nginx/sites-available/$PROJECT_NAME"
31
+ local enabled_path="/etc/nginx/sites-enabled/$PROJECT_NAME"
32
+
33
+ if [ ! -f "$site_path" ]; then
34
+ echo "Error: Nginx site configuration for $PROJECT_NAME not found"
35
+ return 1
36
+ fi
37
+
38
+ case "$action" in
39
+ "enable")
40
+ if [ ! -L "$enabled_path" ]; then
41
+ sudo ln -sf "$site_path" "$enabled_path"
42
+ sudo nginx -t && sudo nginx -s reload
43
+ fi
44
+ ;;
45
+ "disable")
46
+ if [ -L "$enabled_path" ]; then
47
+ sudo rm -f "$enabled_path"
48
+ sudo nginx -t && sudo nginx -s reload
49
+ fi
50
+ ;;
51
+ esac
52
+ }
53
+
54
+ case "$ACTION" in
55
+ "start")
56
+ echo "Starting services..."
57
+ # Build Connect
58
+ echo "Building Connect..."
59
+ ph connect build
60
+
61
+ # Enable Nginx site
62
+ manage_nginx_site "enable"
63
+
64
+ # Start Switchboard via PM2
65
+ if ! pm2 list | grep -q "switchboard_${PROJECT_NAME}"; then
66
+ cd $PROJECT_NAME
67
+ pm2 start "pnpm switchboard" --name "switchboard_${PROJECT_NAME}"
68
+ pm2 save
69
+ else
70
+ pm2 start "switchboard_${PROJECT_NAME}"
71
+ fi
72
+ ;;
73
+
74
+ "stop")
75
+ echo "Stopping services..."
76
+ # Stop Switchboard via PM2
77
+ if pm2 list | grep -q "switchboard_${PROJECT_NAME}"; then
78
+ pm2 stop "switchboard_${PROJECT_NAME}"
79
+ fi
80
+
81
+ # Disable Nginx site
82
+ manage_nginx_site "disable"
83
+ ;;
84
+
85
+ "restart")
86
+ echo "Restarting services..."
87
+ # Build Connect
88
+ echo "Building Connect..."
89
+ ph connect build
90
+
91
+ # Restart Nginx site
92
+ manage_nginx_site "disable"
93
+ manage_nginx_site "enable"
94
+
95
+ # Restart Switchboard via PM2
96
+ if pm2 list | grep -q "switchboard_${PROJECT_NAME}"; then
97
+ pm2 restart "switchboard_${PROJECT_NAME}"
98
+ else
99
+ cd $PROJECT_NAME
100
+ pm2 start "pnpm switchboard" --name "switchboard_${PROJECT_NAME}"
101
+ pm2 save
102
+ fi
103
+ ;;
104
+
105
+ "status")
106
+ echo "Checking service status..."
107
+ echo "Nginx site status:"
108
+ if [ -L "/etc/nginx/sites-enabled/$PROJECT_NAME" ]; then
109
+ echo "Site is enabled"
110
+ else
111
+ echo "Site is disabled"
112
+ fi
113
+
114
+ echo -e "\nSwitchboard status:"
115
+ pm2 list | grep "switchboard_${PROJECT_NAME}"
116
+ ;;
117
+
118
+ *)
119
+ echo "Usage: $0 [project_name] {start|stop|restart|status}"
120
+ echo "Default project_name: global"
121
+ echo "Default action: status"
122
+ exit 1
123
+ ;;
124
+ esac
125
+ fi
@@ -4,6 +4,7 @@
4
4
  # Configuration
5
5
  # =============================================================================
6
6
  TARGET_TAG=${1:-"latest"}
7
+ PROJECT_NAME=${2:-"global"}
7
8
 
8
9
  # =============================================================================
9
10
  # OS Detection and Windows Handling
@@ -22,19 +23,15 @@ else
22
23
  sudo apt install -y postgresql postgresql-contrib nginx
23
24
 
24
25
  # =============================================================================
25
- # Global Project Setup
26
+ # Project Setup
26
27
  # =============================================================================
27
28
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
28
- echo " Setting up global project"
29
+ echo " Setting up project: $PROJECT_NAME"
29
30
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
30
31
 
31
- sudo mkdir -p /var/www
32
- cd /var/www
33
-
34
- ph init powerhouse
35
- cd powerhouse
32
+ ph init $PROJECT_NAME --$TARGET_TAG
33
+ cd $PROJECT_NAME
36
34
  ph use $TARGET_TAG
37
- ph connect build
38
35
 
39
36
  # =============================================================================
40
37
  # Interactive Package Installation
@@ -50,6 +47,11 @@ else
50
47
  ph install "$package_name"
51
48
  done
52
49
 
50
+ # =============================================================================
51
+ # Connect Build
52
+ # =============================================================================
53
+ ph connect build
54
+
53
55
  # =============================================================================
54
56
  # Database Configuration
55
57
  # =============================================================================
@@ -67,11 +69,30 @@ else
67
69
  # Generate database credentials
68
70
  DB_PASSWORD="powerhouse"
69
71
  DB_USER="powerhouse"
70
- DB_NAME="powerhouse"
72
+ DB_NAME="powerhouse_${PROJECT_NAME}"
71
73
 
72
- # Create database and user
74
+ # Check if database already exists
75
+ if sudo -u postgres psql -lqt | cut -d \| -f 1 | grep -qw $DB_NAME; then
76
+ echo "Database $DB_NAME already exists"
77
+ read -p "Do you want to recreate it? (y/n): " recreate_db
78
+ if [ "$recreate_db" = "y" ]; then
79
+ sudo -u postgres psql -c "DROP DATABASE $DB_NAME;"
80
+ else
81
+ echo "Using existing database"
82
+ fi
83
+ fi
84
+
85
+ # Create database and user if they don't exist
73
86
  sudo -u postgres psql << EOF
74
- CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';
87
+ DO
88
+ \$do\$
89
+ BEGIN
90
+ IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$DB_USER') THEN
91
+ CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';
92
+ END IF;
93
+ END
94
+ \$do\$;
95
+
75
96
  CREATE DATABASE $DB_NAME OWNER $DB_USER;
76
97
  GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;
77
98
  EOF
@@ -92,7 +113,7 @@ EOF
92
113
  fi
93
114
 
94
115
  # Save DATABASE_URL to .env file
95
- echo "DATABASE_URL=$DATABASE_URL" | sudo tee -a /var/www/powerhouse/.env
116
+ echo "DATABASE_URL=$DATABASE_URL" | sudo tee -a .env
96
117
 
97
118
  # =============================================================================
98
119
  # SSL Configuration
@@ -115,17 +136,8 @@ EOF
115
136
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
116
137
  echo " Domain Setup"
117
138
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
118
- read -p "Enter base domain (e.g. powerhouse.xyz): " base_domain
119
- read -p "Enter subdomain for Connect service (default: connect): " connect_subdomain
120
- read -p "Enter subdomain for Switchboard service (default: switchboard): " switchboard_subdomain
121
-
122
- # Set default subdomains
123
- connect_subdomain=${connect_subdomain:-connect}
124
- switchboard_subdomain=${switchboard_subdomain:-switchboard}
125
-
126
- # Construct full domains
127
- connect_domain="${connect_subdomain}.${base_domain}"
128
- switchboard_domain="${switchboard_subdomain}.${base_domain}"
139
+ read -p "Enter Connect domain (e.g. connect.google.com): " connect_domain
140
+ read -p "Enter Switchboard domain (e.g. switchboard.google.com): " switchboard_domain
129
141
 
130
142
  echo "Using domains:"
131
143
  echo "Connect: $connect_domain"
@@ -137,12 +149,19 @@ EOF
137
149
  sudo openssl req -x509 -nodes -days 1 -newkey rsa:2048 \
138
150
  -keyout /etc/nginx/ssl/temp.key \
139
151
  -out /etc/nginx/ssl/temp.crt \
140
- -subj "/CN=$base_domain" \
152
+ -subj "/CN=$connect_domain" \
141
153
  -addext "subjectAltName = DNS:$connect_domain,DNS:$switchboard_domain"
142
154
 
143
- # Create Nginx configuration for domains
144
- echo "Creating Nginx configuration..."
145
- sudo tee /etc/nginx/sites-available/powerhouse > /dev/null << EOF
155
+ # Check if Nginx configuration already exists
156
+ if [ -f "/etc/nginx/sites-available/$PROJECT_NAME" ]; then
157
+ echo "Nginx configuration for $PROJECT_NAME already exists"
158
+ read -p "Do you want to overwrite it? (y/n): " overwrite_nginx
159
+ if [ "$overwrite_nginx" != "y" ]; then
160
+ echo "Keeping existing Nginx configuration"
161
+ else
162
+ # Create Nginx configuration for domains
163
+ echo "Creating Nginx configuration..."
164
+ sudo tee /etc/nginx/sites-available/$PROJECT_NAME > /dev/null << EOF
146
165
  # Security headers
147
166
  add_header Strict-Transport-Security "max-age=63072000" always;
148
167
  add_header X-Frame-Options DENY;
@@ -206,18 +225,86 @@ server {
206
225
  }
207
226
  }
208
227
  EOF
228
+ fi
229
+ else
230
+ # Create Nginx configuration for domains
231
+ echo "Creating Nginx configuration..."
232
+ sudo tee /etc/nginx/sites-available/$PROJECT_NAME > /dev/null << EOF
233
+ # Security headers
234
+ add_header Strict-Transport-Security "max-age=63072000" always;
235
+ add_header X-Frame-Options DENY;
236
+ add_header X-Content-Type-Options nosniff;
237
+ add_header X-XSS-Protection "1; mode=block";
238
+
239
+ server {
240
+ listen 80;
241
+ server_name $connect_domain $switchboard_domain;
242
+ return 301 https://\$host\$request_uri;
243
+ }
244
+
245
+ server {
246
+ listen 443 ssl http2;
247
+ server_name $connect_domain;
248
+
249
+ ssl_certificate /etc/nginx/ssl/temp.crt;
250
+ ssl_certificate_key /etc/nginx/ssl/temp.key;
251
+
252
+ # SSL configuration
253
+ ssl_protocols TLSv1.2 TLSv1.3;
254
+ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
255
+ ssl_prefer_server_ciphers off;
256
+ ssl_session_timeout 1d;
257
+ ssl_session_cache shared:SSL:50m;
258
+ ssl_session_tickets off;
259
+ ssl_stapling on;
260
+ ssl_stapling_verify on;
261
+
262
+ if (\$http_x_forwarded_proto = "http") {
263
+ return 301 https://\$server_name\$request_uri;
264
+ }
265
+
266
+ location / {
267
+ root /var/www/powerhouse/.ph/connect-build/dist;
268
+ try_files \$uri \$uri/ /index.html;
269
+ add_header Cache-Control "no-cache";
270
+ add_header X-Forwarded-Proto \$scheme;
271
+ add_header X-Forwarded-Host \$host;
272
+ add_header X-Forwarded-Port \$server_port;
273
+ }
274
+ }
275
+
276
+ server {
277
+ listen 443 ssl http2;
278
+ server_name $switchboard_domain;
279
+
280
+ ssl_certificate /etc/nginx/ssl/temp.crt;
281
+ ssl_certificate_key /etc/nginx/ssl/temp.key;
282
+
283
+ location / {
284
+ proxy_pass http://localhost:4001;
285
+ proxy_http_version 1.1;
286
+ proxy_set_header Upgrade \$http_upgrade;
287
+ proxy_set_header Connection 'upgrade';
288
+ proxy_set_header Host \$host;
289
+ proxy_cache_bypass \$http_upgrade;
290
+ proxy_set_header X-Real-IP \$remote_addr;
291
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
292
+ proxy_set_header X-Forwarded-Proto \$scheme;
293
+ }
294
+ }
295
+ EOF
296
+ fi
209
297
 
210
298
  # Enable the site
211
- sudo ln -sf /etc/nginx/sites-available/powerhouse /etc/nginx/sites-enabled/
299
+ sudo ln -sf /etc/nginx/sites-available/$PROJECT_NAME /etc/nginx/sites-enabled/
212
300
  sudo rm -f /etc/nginx/sites-enabled/default
213
301
 
214
- # Test and restart Nginx
302
+ # Test Nginx configuration
215
303
  sudo nginx -t
216
- sudo systemctl restart nginx
217
304
 
218
305
  # Obtain SSL certificates
219
306
  echo "Obtaining SSL certificates..."
220
- sudo certbot --nginx -d $connect_domain -d $switchboard_domain --non-interactive --agree-tos --email admin@$base_domain
307
+ sudo certbot --nginx -d $connect_domain -d $switchboard_domain --non-interactive --agree-tos --email admin@$connect_domain
221
308
 
222
309
  # Remove temporary certificates
223
310
  sudo rm -f /etc/nginx/ssl/temp.*
@@ -236,7 +323,7 @@ EOF
236
323
 
237
324
  # Create Nginx configuration for self-signed
238
325
  echo "Creating Nginx configuration..."
239
- sudo tee /etc/nginx/sites-available/powerhouse > /dev/null << EOF
326
+ sudo tee /etc/nginx/sites-available/$PROJECT_NAME > /dev/null << EOF
240
327
  # Security headers
241
328
  add_header Strict-Transport-Security "max-age=63072000" always;
242
329
  add_header X-Frame-Options DENY;
@@ -283,36 +370,20 @@ server {
283
370
  EOF
284
371
 
285
372
  # Enable the site
286
- sudo ln -sf /etc/nginx/sites-available/powerhouse /etc/nginx/sites-enabled/
373
+ sudo ln -sf /etc/nginx/sites-available/$PROJECT_NAME /etc/nginx/sites-enabled/
287
374
  sudo rm -f /etc/nginx/sites-enabled/default
288
375
 
289
- # Test and restart Nginx
376
+ # Test Nginx configuration
290
377
  sudo nginx -t
291
- sudo systemctl restart nginx
292
378
  fi
293
379
 
294
380
  # =============================================================================
295
- # Service Setup
381
+ # Database Schema Setup
296
382
  # =============================================================================
297
- # Install PM2 globally if not already installed
298
- if ! command -v pm2 &> /dev/null; then
299
- pnpm install -g pm2
300
- fi
301
-
302
383
  pnpm prisma db push --schema node_modules/document-drive/dist/prisma/schema.prisma
303
- pnpm add @powerhousedao/switchboard@dev
304
384
 
305
- # Start services with PM2
306
- echo "Starting services with PM2..."
307
- if [ "$ssl_choice" = "2" ]; then
308
- # Self-signed certificate - use base paths
309
- pm2 start pnpm switchboard --name "switchboard" -- --base-path /switchboard
310
- else
311
- # Let's Encrypt - no base paths needed
312
- pm2 start "pnpm switchboard" --name "switchboard"
313
- fi
314
-
315
- # Save PM2 process list and setup startup script
316
- pm2 save
317
- pm2 startup
385
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
386
+ echo " Environment setup complete!"
387
+ echo " Use 'ph service start' to start services"
388
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
318
389
  fi
@@ -33,10 +33,8 @@ if (-not (Test-Path $installPath)) {
33
33
  Set-Location $installPath
34
34
 
35
35
  # Initialize Powerhouse project
36
- ph init powerhouse
36
+ ph init powerhouse --$TARGET_TAG
37
37
  Set-Location powerhouse
38
- ph use $TARGET_TAG
39
- ph connect build
40
38
 
41
39
  # Interactive package installation loop
42
40
  Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
@@ -50,6 +48,9 @@ while ($true) {
50
48
  ph install $package_name
51
49
  }
52
50
 
51
+ # Build Connect
52
+ ph connect build
53
+
53
54
  # Database Configuration
54
55
  Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
55
56
  Write-Host " Database Configuration"
@@ -296,7 +297,6 @@ if (-not (Get-Command pm2 -ErrorAction SilentlyContinue)) {
296
297
 
297
298
  # Run database migrations
298
299
  pnpm prisma db push --schema node_modules/document-drive/dist/prisma/schema.prisma
299
- pnpm add @powerhousedao/switchboard@dev
300
300
 
301
301
  # Start services with PM2
302
302
  Write-Host "Starting services with PM2..."
@@ -1,5 +1,5 @@
1
1
  import { type Command } from "commander";
2
2
  import { type CommandActionType } from "../types.js";
3
- export declare const manageService: CommandActionType<[string, string]>;
3
+ export declare const manageService: CommandActionType<[string]>;
4
4
  export declare function serviceCommand(program: Command): void;
5
5
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/commands/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAMnD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQrD,eAAO,MAAM,aAAa,EAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAmC7D,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAW9C"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/commands/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAKnD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,eAAO,MAAM,aAAa,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAsDrD,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAQ9C"}
@@ -1,145 +1,56 @@
1
- import { getConfig } from "@powerhousedao/config/utils";
2
1
  import { Argument } from "commander";
3
2
  import { execSync } from "node:child_process";
4
3
  import path from "node:path";
5
4
  import { fileURLToPath } from "node:url";
6
- import pm2 from "pm2";
7
5
  import { serviceHelp } from "../help.js";
8
6
  import { setCustomHelp } from "../utils.js";
9
- const actions = ["start", "stop", "status", "list", "startup", "unstartup"];
10
- const services = ["switchboard", "connect", "all"];
11
- let switchboardPort = 8442;
12
- let connectPort = 8443;
13
- export const manageService = async (action, service) => {
7
+ const actions = ["start", "stop", "status", "setup"];
8
+ export const manageService = async (action) => {
14
9
  try {
15
- const config = getConfig();
16
- if (config.reactor?.port) {
17
- switchboardPort = config.reactor.port;
10
+ const dirname = path.dirname(fileURLToPath(import.meta.url));
11
+ const manageScriptPath = path.join(dirname, "..", "scripts", "manage-environment");
12
+ const setupScriptPath = path.join(dirname, "..", "scripts", "setup-environment");
13
+ // Get the current directory name as project name
14
+ const projectName = path.basename(process.cwd());
15
+ switch (action) {
16
+ case "start":
17
+ console.log("Starting environment...");
18
+ execSync(`bash ${manageScriptPath} ${projectName} start`, {
19
+ stdio: "inherit",
20
+ });
21
+ break;
22
+ case "stop":
23
+ console.log("Stopping environment...");
24
+ execSync(`bash ${manageScriptPath} ${projectName} stop`, {
25
+ stdio: "inherit",
26
+ });
27
+ break;
28
+ case "status":
29
+ console.log("Checking environment status...");
30
+ execSync(`bash ${manageScriptPath} ${projectName} status`, {
31
+ stdio: "inherit",
32
+ });
33
+ break;
34
+ case "setup":
35
+ console.log("Setting up environment...");
36
+ execSync(`bash ${setupScriptPath}`, { stdio: "inherit" });
37
+ break;
38
+ default:
39
+ console.log("Unknown action:", action);
40
+ process.exit(1);
18
41
  }
19
- if (config.studio?.port) {
20
- connectPort = config.studio.port;
21
- }
22
- pm2.connect((err) => {
23
- switch (action) {
24
- case "start":
25
- startServices(service);
26
- break;
27
- case "stop":
28
- stopServices(service);
29
- break;
30
- case "startup":
31
- startupServices();
32
- break;
33
- case "unstartup":
34
- unstartupServices();
35
- break;
36
- default:
37
- statusServices();
38
- break;
39
- }
40
- });
41
42
  }
42
43
  catch (error) {
43
- console.error(error);
44
+ console.error("Error:", error);
45
+ process.exit(1);
44
46
  }
45
47
  };
46
48
  export function serviceCommand(program) {
47
49
  const command = program
48
50
  .command("service")
49
- .description("Manage services")
50
- .addArgument(new Argument("action").choices(actions).default("list"))
51
- .addArgument(new Argument("service").choices(services).argOptional().default("all"))
51
+ .description("Manage environment services")
52
+ .addArgument(new Argument("action").choices(actions).default("status"))
52
53
  .action(manageService);
53
54
  setCustomHelp(command, serviceHelp);
54
55
  }
55
- function startServices(service) {
56
- if (service === "switchboard" || service === "all") {
57
- const switchboardOptions = {
58
- name: "switchboard",
59
- script: "npx ph-cli switchboard",
60
- };
61
- console.log("Starting Switchboard...");
62
- pm2.start(switchboardOptions, (err) => {
63
- if (err) {
64
- console.log(err.name);
65
- // throw new Error(err.message);
66
- }
67
- dumpServices();
68
- });
69
- console.log("Switchboard started");
70
- }
71
- if (service === "connect" || service === "all") {
72
- const connectOptions = {
73
- name: "connect",
74
- script: "npx ph-cli connect",
75
- args: ["--port", connectPort.toString()],
76
- };
77
- console.log("Starting connect...");
78
- pm2.start(connectOptions, (err) => {
79
- if (err) {
80
- throw new Error(err.message);
81
- }
82
- dumpServices();
83
- });
84
- console.log("Connect started");
85
- }
86
- }
87
- function dumpServices() {
88
- pm2.dump((err) => {
89
- if (err) {
90
- throw new Error(err.message);
91
- }
92
- statusServices();
93
- });
94
- }
95
- function stopServices(service) {
96
- if (service === "all" || service === "connect") {
97
- pm2.stop("connect", (err) => {
98
- if (err) {
99
- throw new Error(err.message);
100
- }
101
- dumpServices();
102
- });
103
- }
104
- if (service === "all" || service === "switchboard") {
105
- pm2.stop("switchboard", (err) => {
106
- if (err) {
107
- throw new Error(err.message);
108
- }
109
- dumpServices();
110
- });
111
- }
112
- }
113
- function statusServices() {
114
- pm2.list((err, list) => {
115
- const formattedList = list.map((item) => {
116
- return {
117
- id: item.pm_id,
118
- name: item.name,
119
- pid: item.pid,
120
- uptime: item.pm2_env?.pm_uptime,
121
- restarts: item.pm2_env?.unstable_restarts,
122
- status: item.pm2_env?.status,
123
- mem: item.monit?.memory,
124
- cpu: item.monit?.cpu,
125
- };
126
- });
127
- console.table(formattedList);
128
- process.exit(0);
129
- });
130
- }
131
- function startupServices() {
132
- const dirname = import.meta.dirname || path.dirname(fileURLToPath(import.meta.url));
133
- const scriptPath = path.join(dirname, "..", "scripts", "service-startup.sh");
134
- const result = execSync(`bash ${scriptPath}`).toString();
135
- console.log(result);
136
- process.exit(0);
137
- }
138
- function unstartupServices() {
139
- const dirname = import.meta.dirname || path.dirname(fileURLToPath(import.meta.url));
140
- const scriptPath = path.join(dirname, "..", "scripts", "service-unstartup.sh");
141
- const result = execSync(`bash ${scriptPath}`).toString();
142
- console.log(result);
143
- process.exit(0);
144
- }
145
56
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAgC,KAAK,EAAE,MAAM,EAAE,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,OAAO,EACP,IAAI,EACJ,SAAS,EACT,oBAAoB,CACrB,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,OAAO,EACP,IAAI,EACJ,SAAS,EACT,mBAAmB,CACpB,CAAC;QAEF,iDAAiD;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAEjD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,OAAO;gBACV,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,QAAQ,CAAC,QAAQ,gBAAgB,IAAI,WAAW,QAAQ,EAAE;oBACxD,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,MAAM;gBACT,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,QAAQ,CAAC,QAAQ,gBAAgB,IAAI,WAAW,OAAO,EAAE;oBACvD,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,QAAQ;gBACX,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBAC9C,QAAQ,CAAC,QAAQ,gBAAgB,IAAI,WAAW,SAAS,EAAE;oBACzD,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,OAAO;gBACV,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACzC,QAAQ,CAAC,QAAQ,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1D,MAAM;YAER;gBACE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,WAAW,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACtE,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC"}