@zappinginc/zm2 6.0.14

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.
Files changed (133) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/.gitattributes +4 -0
  3. package/.mocharc.js +14 -0
  4. package/CHANGELOG.md +2416 -0
  5. package/CLAUDE.md +84 -0
  6. package/CONTRIBUTING.md +124 -0
  7. package/GNU-AGPL-3.0.txt +665 -0
  8. package/LICENSE +1 -0
  9. package/README.md +248 -0
  10. package/bin/zm2 +3 -0
  11. package/bin/zm2-dev +3 -0
  12. package/bin/zm2-docker +3 -0
  13. package/bin/zm2-runtime +3 -0
  14. package/bin/zm2-windows +3 -0
  15. package/bin/zm2.ps1 +3 -0
  16. package/bun.lock +421 -0
  17. package/constants.js +114 -0
  18. package/index.js +13 -0
  19. package/lib/API/Configuration.js +212 -0
  20. package/lib/API/Containerizer.js +335 -0
  21. package/lib/API/Dashboard.js +459 -0
  22. package/lib/API/Deploy.js +117 -0
  23. package/lib/API/Extra.js +775 -0
  24. package/lib/API/ExtraMgmt/Docker.js +30 -0
  25. package/lib/API/Log.js +315 -0
  26. package/lib/API/LogManagement.js +371 -0
  27. package/lib/API/Modules/LOCAL.js +122 -0
  28. package/lib/API/Modules/Modularizer.js +148 -0
  29. package/lib/API/Modules/NPM.js +445 -0
  30. package/lib/API/Modules/TAR.js +362 -0
  31. package/lib/API/Modules/flagExt.js +46 -0
  32. package/lib/API/Modules/index.js +120 -0
  33. package/lib/API/Monit.js +247 -0
  34. package/lib/API/Serve.js +343 -0
  35. package/lib/API/Startup.js +629 -0
  36. package/lib/API/UX/helpers.js +213 -0
  37. package/lib/API/UX/index.js +9 -0
  38. package/lib/API/UX/pm2-describe.js +193 -0
  39. package/lib/API/UX/pm2-ls-minimal.js +31 -0
  40. package/lib/API/UX/pm2-ls.js +483 -0
  41. package/lib/API/Version.js +382 -0
  42. package/lib/API/interpreter.json +12 -0
  43. package/lib/API/pm2-plus/PM2IO.js +372 -0
  44. package/lib/API/pm2-plus/auth-strategies/CliAuth.js +288 -0
  45. package/lib/API/pm2-plus/auth-strategies/WebAuth.js +187 -0
  46. package/lib/API/pm2-plus/helpers.js +97 -0
  47. package/lib/API/pm2-plus/link.js +126 -0
  48. package/lib/API/pm2-plus/pres/motd +16 -0
  49. package/lib/API/pm2-plus/pres/motd.update +26 -0
  50. package/lib/API/pm2-plus/pres/welcome +28 -0
  51. package/lib/API/pm2-plus/process-selector.js +52 -0
  52. package/lib/API/schema.json +379 -0
  53. package/lib/API.js +1931 -0
  54. package/lib/Client.js +776 -0
  55. package/lib/Common.js +911 -0
  56. package/lib/Configuration.js +304 -0
  57. package/lib/Daemon.js +456 -0
  58. package/lib/Event.js +37 -0
  59. package/lib/God/ActionMethods.js +909 -0
  60. package/lib/God/ClusterMode.js +97 -0
  61. package/lib/God/ForkMode.js +297 -0
  62. package/lib/God/Methods.js +265 -0
  63. package/lib/God/Reload.js +240 -0
  64. package/lib/God.js +632 -0
  65. package/lib/HttpInterface.js +76 -0
  66. package/lib/ProcessContainer.js +305 -0
  67. package/lib/ProcessContainerBun.js +360 -0
  68. package/lib/ProcessContainerFork.js +42 -0
  69. package/lib/ProcessContainerForkBun.js +33 -0
  70. package/lib/ProcessUtils.js +55 -0
  71. package/lib/TreeKill.js +118 -0
  72. package/lib/Utility.js +430 -0
  73. package/lib/VersionCheck.js +46 -0
  74. package/lib/Watcher.js +117 -0
  75. package/lib/Worker.js +169 -0
  76. package/lib/binaries/CLI.js +1041 -0
  77. package/lib/binaries/DevCLI.js +183 -0
  78. package/lib/binaries/Runtime.js +101 -0
  79. package/lib/binaries/Runtime4Docker.js +192 -0
  80. package/lib/completion.js +229 -0
  81. package/lib/completion.sh +40 -0
  82. package/lib/motd +36 -0
  83. package/lib/templates/Dockerfiles/Dockerfile-java.tpl +7 -0
  84. package/lib/templates/Dockerfiles/Dockerfile-nodejs.tpl +8 -0
  85. package/lib/templates/Dockerfiles/Dockerfile-ruby.tpl +7 -0
  86. package/lib/templates/ecosystem-es.tpl +24 -0
  87. package/lib/templates/ecosystem-simple-es.tpl +8 -0
  88. package/lib/templates/ecosystem-simple.tpl +6 -0
  89. package/lib/templates/ecosystem.tpl +22 -0
  90. package/lib/templates/init-scripts/launchd.tpl +35 -0
  91. package/lib/templates/init-scripts/openrc.tpl +52 -0
  92. package/lib/templates/init-scripts/pm2-init-amazon.sh +86 -0
  93. package/lib/templates/init-scripts/rcd-openbsd.tpl +41 -0
  94. package/lib/templates/init-scripts/rcd.tpl +44 -0
  95. package/lib/templates/init-scripts/smf.tpl +43 -0
  96. package/lib/templates/init-scripts/systemd-online.tpl +22 -0
  97. package/lib/templates/init-scripts/systemd.tpl +22 -0
  98. package/lib/templates/init-scripts/upstart.tpl +103 -0
  99. package/lib/templates/logrotate.d/pm2 +10 -0
  100. package/lib/templates/sample-apps/http-server/README.md +14 -0
  101. package/lib/templates/sample-apps/http-server/api.js +9 -0
  102. package/lib/templates/sample-apps/http-server/ecosystem.config.js +14 -0
  103. package/lib/templates/sample-apps/http-server/package.json +11 -0
  104. package/lib/templates/sample-apps/pm2-plus-metrics-actions/README.md +45 -0
  105. package/lib/templates/sample-apps/pm2-plus-metrics-actions/custom-metrics.js +66 -0
  106. package/lib/templates/sample-apps/pm2-plus-metrics-actions/ecosystem.config.js +12 -0
  107. package/lib/templates/sample-apps/pm2-plus-metrics-actions/package.json +11 -0
  108. package/lib/templates/sample-apps/python-app/README.md +4 -0
  109. package/lib/templates/sample-apps/python-app/echo.py +7 -0
  110. package/lib/templates/sample-apps/python-app/ecosystem.config.js +12 -0
  111. package/lib/templates/sample-apps/python-app/package.json +11 -0
  112. package/lib/tools/Config.js +248 -0
  113. package/lib/tools/IsAbsolute.js +20 -0
  114. package/lib/tools/copydirSync.js +101 -0
  115. package/lib/tools/deleteFolderRecursive.js +19 -0
  116. package/lib/tools/find-package-json.js +74 -0
  117. package/lib/tools/fmt.js +72 -0
  118. package/lib/tools/isbinaryfile.js +94 -0
  119. package/lib/tools/json5.js +752 -0
  120. package/lib/tools/open.js +63 -0
  121. package/lib/tools/passwd.js +58 -0
  122. package/lib/tools/promise.min.js +1 -0
  123. package/lib/tools/sexec.js +55 -0
  124. package/lib/tools/treeify.js +113 -0
  125. package/lib/tools/which.js +120 -0
  126. package/lib/tools/xdg-open +861 -0
  127. package/package.json +219 -0
  128. package/paths.js +93 -0
  129. package/pm2 +11 -0
  130. package/preinstall.js +24 -0
  131. package/run.sh +9 -0
  132. package/types/index.d.ts +722 -0
  133. package/types/tsconfig.json +14 -0
package/package.json ADDED
@@ -0,0 +1,219 @@
1
+ {
2
+ "name": "@zappinginc/zm2",
3
+ "preferGlobal": true,
4
+ "version": "6.0.14",
5
+ "engines": {
6
+ "node": ">=16.0.0"
7
+ },
8
+ "directories": {
9
+ "bin": "./bin",
10
+ "lib": "./lib",
11
+ "example": "./examples"
12
+ },
13
+ "author": {
14
+ "name": "Strzelewicz Alexandre",
15
+ "email": "alexandre@pm2.io",
16
+ "url": "https://pm2.io"
17
+ },
18
+ "maintainers": [
19
+ {
20
+ "name": "Alexandre Strzelewicz",
21
+ "email": "alexandre@pm2.io"
22
+ },
23
+ {
24
+ "name": "Antoine Bluchet",
25
+ "email": "antoine@pm2.io"
26
+ }
27
+ ],
28
+ "contributors": [
29
+ {
30
+ "name": "Alex Kocharin",
31
+ "email": "alex@kocharin.ru"
32
+ },
33
+ {
34
+ "name": "Antoine Bluchet",
35
+ "email": "soyuka@gmail.com"
36
+ },
37
+ {
38
+ "name": "Subhash Burramsetty"
39
+ },
40
+ {
41
+ "name": "Valentin Marchaud",
42
+ "email": "thisismac47@gmail.com"
43
+ },
44
+ {
45
+ "name": "Valentin Touffet",
46
+ "email": "contact@eywek.fr"
47
+ },
48
+ {
49
+ "name": "Florian Hermouet-Joscht",
50
+ "email": "florian@keymetrics.io"
51
+ },
52
+ {
53
+ "name": "Vincent Vallet",
54
+ "email": "wallet77@gmail.com"
55
+ },
56
+ {
57
+ "name": "Joni Shkurti",
58
+ "email": "jonishkurti90@gmail.com"
59
+ },
60
+ {
61
+ "name": "Jun Tjatse",
62
+ "email": "thisnamemeansnothing@gmail.com"
63
+ },
64
+ {
65
+ "name": "Xu Jingxin",
66
+ "email": "sailxjx@gmail.com"
67
+ },
68
+ {
69
+ "name": "Ben Postlethwaite",
70
+ "email": "post.ben.here@gmail.com"
71
+ },
72
+ {
73
+ "name": "Devo.ps",
74
+ "email": "contact@devo.ps"
75
+ },
76
+ {
77
+ "name": "Bret Copeland",
78
+ "email": "bret@atlantisflight.org"
79
+ },
80
+ {
81
+ "name": "John Hurliman",
82
+ "email": "jhurliman@jhurliman.org"
83
+ },
84
+ {
85
+ "name": "TruongSinh Tran-Nguyen",
86
+ "email": "i@truongsinh.pro"
87
+ },
88
+ {
89
+ "name": "Michael Hueuberger",
90
+ "email": "michael.heuberger@binarykitchen.com"
91
+ },
92
+ {
93
+ "name": "Chris Wiggins",
94
+ "email": "chris@chriswiggins.co.nz"
95
+ }
96
+ ],
97
+ "homepage": "https://github.com/chernandez/zm2",
98
+ "description": "ZM2 - Production process manager for Node.JS applications with a built-in load balancer.",
99
+ "main": "index.js",
100
+ "types": "types/index.d.ts",
101
+ "scripts": {
102
+ "test:unit": "bash test/unit.sh",
103
+ "test:e2e": "bash test/e2e.sh",
104
+ "test": "bash test/unit.sh && bash test/e2e.sh"
105
+ },
106
+ "keywords": [
107
+ "cli",
108
+ "fault tolerant",
109
+ "sysadmin",
110
+ "tools",
111
+ "zm2",
112
+ "logs",
113
+ "log",
114
+ "json",
115
+ "express",
116
+ "hapi",
117
+ "kraken",
118
+ "reload",
119
+ "load balancer",
120
+ "lb",
121
+ "load-balancer",
122
+ "kubernetes",
123
+ "k8s",
124
+ "zm2-docker",
125
+ "runtime",
126
+ "source maps",
127
+ "graceful",
128
+ "microservice",
129
+ "programmatic",
130
+ "harmony",
131
+ "node-zm2",
132
+ "production",
133
+ "keymetrics",
134
+ "node.js monitoring",
135
+ "strong-pm",
136
+ "deploy",
137
+ "deployment",
138
+ "daemon",
139
+ "supervisor",
140
+ "supervisord",
141
+ "nodemon",
142
+ "zm2",
143
+ "ghost",
144
+ "ghost production",
145
+ "monitoring",
146
+ "keymetrics",
147
+ "process manager",
148
+ "forever",
149
+ "profiling",
150
+ "probes",
151
+ "apm",
152
+ "container",
153
+ "forever-monitor",
154
+ "keep process alive",
155
+ "process configuration",
156
+ "clustering",
157
+ "cluster cli",
158
+ "cluster",
159
+ "docker",
160
+ "cron",
161
+ "devops",
162
+ "dev ops"
163
+ ],
164
+ "bin": {
165
+ "zm2": "bin/zm2",
166
+ "zm2-dev": "bin/zm2-dev",
167
+ "zm2-docker": "bin/zm2-docker",
168
+ "zm2-runtime": "bin/zm2-runtime"
169
+ },
170
+ "dependencies": {
171
+ "@pm2/agent": "~2.1.1",
172
+ "@pm2/js-api": "~0.8.0",
173
+ "@pm2/io": "~6.1.0",
174
+ "@pm2/pm2-version-check": "^1.0.4",
175
+ "ansis": "4.0.0-node10",
176
+ "async": "3.2.6",
177
+ "@pm2/blessed": "0.1.81",
178
+ "chokidar": "3.6.0",
179
+ "cli-tableau": "2.0.1",
180
+ "commander": "2.15.1",
181
+ "croner": "4.1.97",
182
+ "dayjs": "1.11.15",
183
+ "debug": "4.4.3",
184
+ "enquirer": "2.3.6",
185
+ "eventemitter2": "5.0.1",
186
+ "fclone": "1.0.11",
187
+ "mkdirp": "1.0.4",
188
+ "needle": "2.4.0",
189
+ "pidusage": "3.0.2",
190
+ "pm2-axon": "~4.0.1",
191
+ "pm2-axon-rpc": "~0.7.1",
192
+ "pm2-deploy": "~1.0.2",
193
+ "pm2-multimeter": "^0.1.2",
194
+ "promptly": "2.2.0",
195
+ "semver": "7.7.2",
196
+ "source-map-support": "0.5.21",
197
+ "sprintf-js": "1.1.2",
198
+ "vizion": "~2.2.1",
199
+ "js-yaml": "4.1.1"
200
+ },
201
+ "overrides": {
202
+ "debug": "4.4.3"
203
+ },
204
+ "optionalDependencies": {
205
+ "pm2-sysmonit": "^1.2.8"
206
+ },
207
+ "devDependencies": {
208
+ "mocha": "^11.7.0",
209
+ "should": "^13.2.3"
210
+ },
211
+ "bugs": {
212
+ "url": "https://github.com/chernandez/zm2/issues"
213
+ },
214
+ "repository": {
215
+ "type": "git",
216
+ "url": "git://github.com/chernandez/zm2.git"
217
+ },
218
+ "license": "AGPL-3.0"
219
+ }
package/paths.js ADDED
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Copyright 2013-2022 the PM2 project authors. All rights reserved.
3
+ * Use of this source code is governed by a license that
4
+ * can be found in the LICENSE file.
5
+ */
6
+
7
+ var debug = require('debug')('zm2:paths');
8
+ var p = require('path');
9
+ var fs = require('fs')
10
+
11
+ function getDefaultPM2Home() {
12
+ var PM2_ROOT_PATH;
13
+
14
+ if (process.env.ZM2_HOME)
15
+ PM2_ROOT_PATH = process.env.ZM2_HOME;
16
+ else if (process.env.PM2_HOME)
17
+ PM2_ROOT_PATH = process.env.PM2_HOME;
18
+ else if (process.env.HOME && !process.env.HOMEPATH)
19
+ PM2_ROOT_PATH = p.resolve(process.env.HOME, '.zm2');
20
+ else if (process.env.HOME || process.env.HOMEPATH)
21
+ PM2_ROOT_PATH = p.resolve(process.env.HOMEDRIVE, process.env.HOME || process.env.HOMEPATH, '.zm2');
22
+ else {
23
+ console.error('[ZM2][Initialization] Environment variable HOME (Linux) or HOMEPATH (Windows) are not set!');
24
+ console.error('[ZM2][Initialization] Defaulting to /etc/.zm2');
25
+ PM2_ROOT_PATH = p.resolve('/etc', '.zm2');
26
+ }
27
+
28
+ debug('zm2 home resolved to %s', PM2_ROOT_PATH, process.env.HOME);
29
+ return PM2_ROOT_PATH;
30
+ }
31
+
32
+ module.exports = function(PM2_HOME) {
33
+ var has_node_embedded = false
34
+
35
+ if (fs.existsSync(p.resolve(__dirname, './node')) === true) {
36
+ has_node_embedded = true
37
+ }
38
+
39
+ if (!PM2_HOME) {
40
+ PM2_HOME = getDefaultPM2Home()
41
+ }
42
+
43
+ var pm2_file_stucture = {
44
+ PM2_HOME : PM2_HOME,
45
+ PM2_ROOT_PATH : PM2_HOME,
46
+
47
+ PM2_CONF_FILE : p.resolve(PM2_HOME, 'conf.js'),
48
+ PM2_MODULE_CONF_FILE : p.resolve(PM2_HOME, 'module_conf.json'),
49
+
50
+ PM2_LOG_FILE_PATH : p.resolve(PM2_HOME, 'zm2.log'),
51
+ PM2_PID_FILE_PATH : p.resolve(PM2_HOME, 'zm2.pid'),
52
+
53
+ PM2_RELOAD_LOCKFILE : p.resolve(PM2_HOME, 'reload.lock'),
54
+
55
+ DEFAULT_PID_PATH : p.resolve(PM2_HOME, 'pids'),
56
+ DEFAULT_LOG_PATH : p.resolve(PM2_HOME, 'logs'),
57
+ DEFAULT_MODULE_PATH : p.resolve(PM2_HOME, 'modules'),
58
+ PM2_IO_ACCESS_TOKEN : p.resolve(PM2_HOME, 'zm2-io-token'),
59
+ DUMP_FILE_PATH : p.resolve(PM2_HOME, 'dump.zm2'),
60
+ DUMP_BACKUP_FILE_PATH : p.resolve(PM2_HOME, 'dump.zm2.bak'),
61
+
62
+ DAEMON_RPC_PORT : p.resolve(PM2_HOME, 'rpc.sock'),
63
+ DAEMON_PUB_PORT : p.resolve(PM2_HOME, 'pub.sock'),
64
+ INTERACTOR_RPC_PORT : p.resolve(PM2_HOME, 'interactor.sock'),
65
+
66
+ INTERACTOR_LOG_FILE_PATH : p.resolve(PM2_HOME, 'agent.log'),
67
+ INTERACTOR_PID_PATH : p.resolve(PM2_HOME, 'agent.pid'),
68
+ INTERACTION_CONF : p.resolve(PM2_HOME, 'agent.json5'),
69
+
70
+ HAS_NODE_EMBEDDED : has_node_embedded,
71
+ BUILTIN_NODE_PATH : has_node_embedded === true ? p.resolve(__dirname, './node/bin/node') : null,
72
+ BUILTIN_NPM_PATH : has_node_embedded === true ? p.resolve(__dirname, './node/bin/npm') : null,
73
+ };
74
+
75
+ // allow overide of file paths via environnement
76
+ var paths = Object.keys(pm2_file_stucture);
77
+ paths.forEach(function (key) {
78
+ var envKey = key.indexOf('PM2_') > -1 ? key : 'PM2_' + key;
79
+ if (process.env[envKey] && key !== 'PM2_HOME' && key !== 'PM2_ROOT_PATH') {
80
+ pm2_file_stucture[key] = process.env[envKey];
81
+ }
82
+ });
83
+
84
+ if (process.platform === 'win32' ||
85
+ process.platform === 'win64') {
86
+ //@todo instead of static unique rpc/pub file custom with PM2_HOME or UID
87
+ pm2_file_stucture.DAEMON_RPC_PORT = '\\\\.\\pipe\\rpc.sock';
88
+ pm2_file_stucture.DAEMON_PUB_PORT = '\\\\.\\pipe\\pub.sock';
89
+ pm2_file_stucture.INTERACTOR_RPC_PORT = '\\\\.\\pipe\\interactor.sock';
90
+ }
91
+
92
+ return pm2_file_stucture;
93
+ };
package/pm2 ADDED
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+
3
+ SCRIPT_PATH="$(dirname "$0")/../lib/binaries/CLI.js"
4
+
5
+ # Check if 'bun' is available, otherwise use 'node'
6
+ if command -v bun &> /dev/null
7
+ then
8
+ bun "$SCRIPT_PATH" "$@"
9
+ else
10
+ node "$SCRIPT_PATH" "$@"
11
+ fi
package/preinstall.js ADDED
@@ -0,0 +1,24 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ // Determine platform
5
+ const isWindows = process.platform === 'win32';
6
+
7
+ if (!isWindows)
8
+ process.exit(0)
9
+
10
+ const sourceFile = 'bin/pm2-windows';
11
+ const destinationFile = 'bin/pm2';
12
+
13
+ // Resolve file paths
14
+ const sourcePath = path.resolve(__dirname, sourceFile);
15
+ const destinationPath = path.resolve(__dirname, destinationFile);
16
+
17
+ // Copy the appropriate file based on the platform
18
+ fs.copyFile(sourcePath, destinationPath, (err) => {
19
+ if (err) {
20
+ console.error(`Error copying file from ${sourcePath} to ${destinationPath}:`, err);
21
+ process.exit(1);
22
+ }
23
+ console.log(`Successfully copied ${sourceFile} to ${destinationFile}`);
24
+ });
package/run.sh ADDED
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ # Check if 'bun' is available, otherwise use 'node'
4
+ if command -v bun &> /dev/null
5
+ then
6
+ bun "$@"
7
+ else
8
+ node "$@"
9
+ fi