vps-deployer 1.0.0
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/LICENSE +21 -0
- package/README.md +151 -0
- package/dist/app.d.ts +4 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +39 -0
- package/dist/app.js.map +1 -0
- package/dist/db/db.d.ts +5 -0
- package/dist/db/db.d.ts.map +1 -0
- package/dist/db/db.js +100 -0
- package/dist/db/db.js.map +1 -0
- package/dist/helpers/arg.helper.d.ts +7 -0
- package/dist/helpers/arg.helper.d.ts.map +1 -0
- package/dist/helpers/arg.helper.js +28 -0
- package/dist/helpers/arg.helper.js.map +1 -0
- package/dist/helpers/cmd_executer.helper.d.ts +7 -0
- package/dist/helpers/cmd_executer.helper.d.ts.map +1 -0
- package/dist/helpers/cmd_executer.helper.js +88 -0
- package/dist/helpers/cmd_executer.helper.js.map +1 -0
- package/dist/helpers/common.helper.d.ts +2 -0
- package/dist/helpers/common.helper.d.ts.map +1 -0
- package/dist/helpers/common.helper.js +15 -0
- package/dist/helpers/common.helper.js.map +1 -0
- package/dist/helpers/config_files.helper.d.ts +2 -0
- package/dist/helpers/config_files.helper.d.ts.map +1 -0
- package/dist/helpers/config_files.helper.js +44 -0
- package/dist/helpers/config_files.helper.js.map +1 -0
- package/dist/helpers/create_systemd_service.helper.d.ts +9 -0
- package/dist/helpers/create_systemd_service.helper.d.ts.map +1 -0
- package/dist/helpers/create_systemd_service.helper.js +40 -0
- package/dist/helpers/create_systemd_service.helper.js.map +1 -0
- package/dist/helpers/date.helper.d.ts +2 -0
- package/dist/helpers/date.helper.d.ts.map +1 -0
- package/dist/helpers/date.helper.js +18 -0
- package/dist/helpers/date.helper.js.map +1 -0
- package/dist/helpers/email.helper.d.ts +11 -0
- package/dist/helpers/email.helper.d.ts.map +1 -0
- package/dist/helpers/email.helper.js +144 -0
- package/dist/helpers/email.helper.js.map +1 -0
- package/dist/helpers/logging.helper.d.ts +9 -0
- package/dist/helpers/logging.helper.d.ts.map +1 -0
- package/dist/helpers/logging.helper.js +32 -0
- package/dist/helpers/logging.helper.js.map +1 -0
- package/dist/helpers/remove_systemd_service.helper.d.ts +2 -0
- package/dist/helpers/remove_systemd_service.helper.d.ts.map +1 -0
- package/dist/helpers/remove_systemd_service.helper.js +21 -0
- package/dist/helpers/remove_systemd_service.helper.js.map +1 -0
- package/dist/helpers/start_systemd_service.helper.d.ts +2 -0
- package/dist/helpers/start_systemd_service.helper.d.ts.map +1 -0
- package/dist/helpers/start_systemd_service.helper.js +26 -0
- package/dist/helpers/start_systemd_service.helper.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.middleware.d.ts +3 -0
- package/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/middleware/auth.middleware.js +7 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/modules/auth/auth.route.d.ts +3 -0
- package/dist/modules/auth/auth.route.d.ts.map +1 -0
- package/dist/modules/auth/auth.route.js +16 -0
- package/dist/modules/auth/auth.route.js.map +1 -0
- package/dist/modules/auth/controllers/auth.controller.d.ts +6 -0
- package/dist/modules/auth/controllers/auth.controller.d.ts.map +1 -0
- package/dist/modules/auth/controllers/auth.controller.js +123 -0
- package/dist/modules/auth/controllers/auth.controller.js.map +1 -0
- package/dist/modules/auth/views/login.pug +254 -0
- package/dist/modules/auth/views/register.pug +298 -0
- package/dist/modules/common/views/404.pug +21 -0
- package/dist/modules/dashboard/dashboard.route.d.ts +3 -0
- package/dist/modules/dashboard/dashboard.route.d.ts.map +1 -0
- package/dist/modules/dashboard/dashboard.route.js +29 -0
- package/dist/modules/dashboard/dashboard.route.js.map +1 -0
- package/dist/modules/dashboard/views/dash.pug +149 -0
- package/dist/modules/dashboard/views/layout.pug +94 -0
- package/dist/modules/deployer/controllers/deployer.controller.d.ts +6 -0
- package/dist/modules/deployer/controllers/deployer.controller.d.ts.map +1 -0
- package/dist/modules/deployer/controllers/deployer.controller.js +119 -0
- package/dist/modules/deployer/controllers/deployer.controller.js.map +1 -0
- package/dist/modules/deployer/deployer.route.d.ts +3 -0
- package/dist/modules/deployer/deployer.route.d.ts.map +1 -0
- package/dist/modules/deployer/deployer.route.js +13 -0
- package/dist/modules/deployer/deployer.route.js.map +1 -0
- package/dist/modules/deployer/helper/deployer.d.ts +9 -0
- package/dist/modules/deployer/helper/deployer.d.ts.map +1 -0
- package/dist/modules/deployer/helper/deployer.js +89 -0
- package/dist/modules/deployer/helper/deployer.js.map +1 -0
- package/dist/modules/deployer/views/details.pug +157 -0
- package/dist/modules/deployer/views/index.pug +108 -0
- package/dist/modules/project/controllers/projects.controller.d.ts +12 -0
- package/dist/modules/project/controllers/projects.controller.d.ts.map +1 -0
- package/dist/modules/project/controllers/projects.controller.js +267 -0
- package/dist/modules/project/controllers/projects.controller.js.map +1 -0
- package/dist/modules/project/helper/project_file_sys.helper.d.ts +7 -0
- package/dist/modules/project/helper/project_file_sys.helper.d.ts.map +1 -0
- package/dist/modules/project/helper/project_file_sys.helper.js +93 -0
- package/dist/modules/project/helper/project_file_sys.helper.js.map +1 -0
- package/dist/modules/project/project.route.d.ts +3 -0
- package/dist/modules/project/project.route.d.ts.map +1 -0
- package/dist/modules/project/project.route.js +17 -0
- package/dist/modules/project/project.route.js.map +1 -0
- package/dist/modules/project/views/create.pug +189 -0
- package/dist/modules/project/views/details.pug +238 -0
- package/dist/modules/project/views/index.pug +114 -0
- package/dist/modules/settings/controllers/setting.controller.d.ts +5 -0
- package/dist/modules/settings/controllers/setting.controller.d.ts.map +1 -0
- package/dist/modules/settings/controllers/setting.controller.js +193 -0
- package/dist/modules/settings/controllers/setting.controller.js.map +1 -0
- package/dist/modules/settings/settings.route.d.ts +3 -0
- package/dist/modules/settings/settings.route.d.ts.map +1 -0
- package/dist/modules/settings/settings.route.js +10 -0
- package/dist/modules/settings/settings.route.js.map +1 -0
- package/dist/modules/settings/views/index.pug +173 -0
- package/dist/modules/webhook/controllers/webhook.controller.d.ts +3 -0
- package/dist/modules/webhook/controllers/webhook.controller.d.ts.map +1 -0
- package/dist/modules/webhook/controllers/webhook.controller.js +72 -0
- package/dist/modules/webhook/controllers/webhook.controller.js.map +1 -0
- package/dist/modules/webhook/webhook.route.d.ts +3 -0
- package/dist/modules/webhook/webhook.route.d.ts.map +1 -0
- package/dist/modules/webhook/webhook.route.js +6 -0
- package/dist/modules/webhook/webhook.route.js.map +1 -0
- package/dist/utils/app_config.d.ts +3 -0
- package/dist/utils/app_config.d.ts.map +1 -0
- package/dist/utils/app_config.js +5 -0
- package/dist/utils/app_config.js.map +1 -0
- package/dist/utils/cli.d.ts +2 -0
- package/dist/utils/cli.d.ts.map +1 -0
- package/dist/utils/cli.js +68 -0
- package/dist/utils/cli.js.map +1 -0
- package/package.json +80 -0
- package/public/favicon.svg +18 -0
- package/public/js/deploy.js +36 -0
- package/public/js/deployment-details.js +56 -0
- package/public/js/login.js +21 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/date.helper.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,KAAG,MAiBhD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const convertDateToIST = (input) => {
|
|
2
|
+
// Handles timestamps, ISO strings, or Date objects
|
|
3
|
+
const date = new Date(input);
|
|
4
|
+
// Check for invalid dates
|
|
5
|
+
if (isNaN(date.getTime()))
|
|
6
|
+
return "Invalid Date";
|
|
7
|
+
return date.toLocaleString("en-IN", {
|
|
8
|
+
timeZone: "Asia/Kolkata",
|
|
9
|
+
day: "2-digit",
|
|
10
|
+
month: "2-digit",
|
|
11
|
+
year: "numeric",
|
|
12
|
+
hour: "2-digit",
|
|
13
|
+
minute: "2-digit",
|
|
14
|
+
second: "2-digit",
|
|
15
|
+
hour12: true,
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=date.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.helper.js","sourceRoot":"","sources":["../../src/helpers/date.helper.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAU,EAAE;IACxD,mDAAmD;IACnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAE7B,0BAA0B;IAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,cAAc,CAAC;IAEjD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAClC,QAAQ,EAAE,cAAc;QACxB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type EmailPayload = {
|
|
2
|
+
project: any;
|
|
3
|
+
deployId: string;
|
|
4
|
+
branch: string;
|
|
5
|
+
commit: string;
|
|
6
|
+
author: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const sendDeploymentEmail: ({ project, deployId, branch, commit, author, }: EmailPayload) => Promise<void>;
|
|
9
|
+
export declare const sendDeploymentResultEmail: (deployId: string, status: "success" | "failed") => Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=email.helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/email.helper.ts"],"names":[],"mappings":"AAGA,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,gDAMvC,YAAY,kBAsDd,CAAC;AAMF,eAAO,MAAM,yBAAyB,GACpC,UAAU,MAAM,EAChB,QAAQ,SAAS,GAAG,QAAQ,kBAqG7B,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import nodemailer from "nodemailer";
|
|
2
|
+
import { getDB } from "../db/db.js";
|
|
3
|
+
export const sendDeploymentEmail = async ({ project, deployId, branch, commit, author, }) => {
|
|
4
|
+
const db = getDB();
|
|
5
|
+
const emailConfig = db
|
|
6
|
+
.prepare(`SELECT * FROM email LIMIT 1`)
|
|
7
|
+
.get();
|
|
8
|
+
if (!emailConfig)
|
|
9
|
+
return;
|
|
10
|
+
const transporter = nodemailer.createTransport({
|
|
11
|
+
host: emailConfig.smtp,
|
|
12
|
+
port: emailConfig.smtp_port,
|
|
13
|
+
secure: emailConfig.smtp_port === 465,
|
|
14
|
+
auth: {
|
|
15
|
+
user: emailConfig.username,
|
|
16
|
+
pass: emailConfig.password,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
const html = `
|
|
20
|
+
<div style="font-family: Arial; padding: 20px;">
|
|
21
|
+
<h2 style="color: #333;">🚀 Deployment Triggered</h2>
|
|
22
|
+
|
|
23
|
+
<p><strong>Project:</strong> ${project.name}</p>
|
|
24
|
+
<p><strong>Branch:</strong> ${branch}</p>
|
|
25
|
+
<p><strong>Deployment ID:</strong> ${deployId}</p>
|
|
26
|
+
|
|
27
|
+
<hr/>
|
|
28
|
+
|
|
29
|
+
<h3>Commit Info</h3>
|
|
30
|
+
<p><strong>Author:</strong> ${author}</p>
|
|
31
|
+
<p><strong>Message:</strong></p>
|
|
32
|
+
<pre style="background:#f4f4f4; padding:10px;">${commit}</pre>
|
|
33
|
+
|
|
34
|
+
<hr/>
|
|
35
|
+
|
|
36
|
+
<p style="font-size: 12px; color: gray;">
|
|
37
|
+
VPS Deployer Notification
|
|
38
|
+
</p>
|
|
39
|
+
</div>
|
|
40
|
+
`;
|
|
41
|
+
const user = db.prepare(`SELECT email FROM user LIMIT 1`).get();
|
|
42
|
+
try {
|
|
43
|
+
await transporter.sendMail({
|
|
44
|
+
from: emailConfig.from,
|
|
45
|
+
to: user.email,
|
|
46
|
+
subject: `🚀 Deployment Triggered - ${project.name}`,
|
|
47
|
+
html,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.error("Email failed:", err);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
export const sendDeploymentResultEmail = async (deployId, status) => {
|
|
55
|
+
const db = getDB();
|
|
56
|
+
const deployment = db
|
|
57
|
+
.prepare(`
|
|
58
|
+
SELECT d.*, p.name, p.receive_email_notf
|
|
59
|
+
FROM deployment d
|
|
60
|
+
JOIN project p ON d.proj_id = p.id
|
|
61
|
+
WHERE d.id = ?
|
|
62
|
+
`)
|
|
63
|
+
.get(deployId);
|
|
64
|
+
if (!deployment || deployment.receive_email_notf !== 1)
|
|
65
|
+
return;
|
|
66
|
+
const logs = db
|
|
67
|
+
.prepare(`
|
|
68
|
+
SELECT cmd, status
|
|
69
|
+
FROM deployment_logs
|
|
70
|
+
WHERE deploy_id = ?
|
|
71
|
+
`)
|
|
72
|
+
.all(deployId);
|
|
73
|
+
const emailConfig = db
|
|
74
|
+
.prepare(`SELECT * FROM email LIMIT 1`)
|
|
75
|
+
.get();
|
|
76
|
+
if (!emailConfig)
|
|
77
|
+
return;
|
|
78
|
+
const transporter = nodemailer.createTransport({
|
|
79
|
+
host: emailConfig.smtp,
|
|
80
|
+
port: emailConfig.smtp_port,
|
|
81
|
+
secure: emailConfig.smtp_port === 465,
|
|
82
|
+
auth: {
|
|
83
|
+
user: emailConfig.username,
|
|
84
|
+
pass: emailConfig.password,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
const statusColor = status === "success" ? "#28a745" : "#dc3545";
|
|
88
|
+
const logsHtml = logs
|
|
89
|
+
.map((l) => `
|
|
90
|
+
<li>
|
|
91
|
+
<strong>${l.cmd}</strong> →
|
|
92
|
+
<span style="color:${l.status === "success" ? "green" : "red"}">
|
|
93
|
+
${l.status}
|
|
94
|
+
</span>
|
|
95
|
+
</li>
|
|
96
|
+
`)
|
|
97
|
+
.join("");
|
|
98
|
+
const html = `
|
|
99
|
+
<div style="font-family: Arial; padding: 20px;">
|
|
100
|
+
|
|
101
|
+
<h2 style="color:${statusColor}">
|
|
102
|
+
${status === "success" ? "✅ Deployment Successful" : "❌ Deployment Failed"}
|
|
103
|
+
</h2>
|
|
104
|
+
|
|
105
|
+
<p><strong>Project:</strong> ${deployment.name}</p>
|
|
106
|
+
<p><strong>Deployment ID:</strong> ${deployId}</p>
|
|
107
|
+
|
|
108
|
+
<hr/>
|
|
109
|
+
|
|
110
|
+
<h3>Command Results</h3>
|
|
111
|
+
<ul>
|
|
112
|
+
${logsHtml}
|
|
113
|
+
</ul>
|
|
114
|
+
|
|
115
|
+
<hr/>
|
|
116
|
+
|
|
117
|
+
<p>
|
|
118
|
+
View details:
|
|
119
|
+
<a href="http://your-domain/deployment/${deployId}">
|
|
120
|
+
Open Deployment
|
|
121
|
+
</a>
|
|
122
|
+
</p>
|
|
123
|
+
|
|
124
|
+
<p style="font-size:12px; color:gray;">
|
|
125
|
+
VPS Deployer Notification
|
|
126
|
+
</p>
|
|
127
|
+
</div>
|
|
128
|
+
`;
|
|
129
|
+
const user = db.prepare(`SELECT email FROM user LIMIT 1`).get();
|
|
130
|
+
try {
|
|
131
|
+
await transporter.sendMail({
|
|
132
|
+
from: emailConfig.from,
|
|
133
|
+
to: user.email,
|
|
134
|
+
subject: status === "success"
|
|
135
|
+
? `✅ Deployment Success - ${deployment.name}`
|
|
136
|
+
: `❌ Deployment Failed - ${deployment.name}`,
|
|
137
|
+
html,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
console.error("Deployment result email failed:", err);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=email.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.helper.js","sourceRoot":"","sources":["../../src/helpers/email.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type LogLevel = "INFO" | "ERROR" | "WARN" | "DEBUG";
|
|
2
|
+
export declare const writeToLogFile: (message: string, options?: {
|
|
3
|
+
level?: LogLevel;
|
|
4
|
+
source?: string;
|
|
5
|
+
meta?: Record<string, any>;
|
|
6
|
+
}) => void;
|
|
7
|
+
export declare const closeLogger: () => Promise<void>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=logging.helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/logging.helper.ts"],"names":[],"mappings":"AAIA,KAAK,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAepD,eAAO,MAAM,cAAc,GACzB,SAAS,MAAM,EACf,UAAU;IACR,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,SAYF,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,OAAO,CAAC,IAAI,CAS1C,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { getWorkDirPath } from "./arg.helper.js";
|
|
4
|
+
let writeStream = null;
|
|
5
|
+
const getStream = () => {
|
|
6
|
+
if (writeStream)
|
|
7
|
+
return writeStream;
|
|
8
|
+
const dir = getWorkDirPath();
|
|
9
|
+
const filePath = path.join(dir, "vps-deployer.log");
|
|
10
|
+
writeStream = fs.createWriteStream(filePath, { flags: "a" });
|
|
11
|
+
return writeStream;
|
|
12
|
+
};
|
|
13
|
+
export const writeToLogFile = (message, options) => {
|
|
14
|
+
const stream = getStream();
|
|
15
|
+
const timestamp = new Date().toISOString().replace("T", " ").split(".")[0];
|
|
16
|
+
const level = options?.level || "INFO";
|
|
17
|
+
const source = options?.source || "APP";
|
|
18
|
+
const meta = options?.meta ? ` | ${JSON.stringify(options.meta)}` : "";
|
|
19
|
+
const logLine = `[${timestamp}] [${level}] [${source}] ${message}${meta}\n`;
|
|
20
|
+
stream.write(logLine);
|
|
21
|
+
};
|
|
22
|
+
export const closeLogger = () => {
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
if (!writeStream)
|
|
25
|
+
return resolve();
|
|
26
|
+
writeStream.end(() => {
|
|
27
|
+
writeStream = null;
|
|
28
|
+
resolve();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=logging.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.helper.js","sourceRoot":"","sources":["../../src/helpers/logging.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,IAAI,WAAW,GAA0B,IAAI,CAAC;AAE9C,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAEpD,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAE7D,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAAe,EACf,OAIC,EACD,EAAE;IACF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,MAAM,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvE,MAAM,OAAO,GAAG,IAAI,SAAS,MAAM,KAAK,MAAM,MAAM,KAAK,OAAO,GAAG,IAAI,IAAI,CAAC;IAE5E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAkB,EAAE;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC,WAAW;YAAE,OAAO,OAAO,EAAE,CAAC;QAEnC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE;YACnB,WAAW,GAAG,IAAI,CAAC;YACnB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove_systemd_service.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/remove_systemd_service.helper.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,GAAI,aAAa,MAAM,SAevD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { writeToLogFile } from "./logging.helper.js";
|
|
4
|
+
export const removeSystemdService = (serviceName) => {
|
|
5
|
+
const serviceFilePath = `/etc/systemd/system/${serviceName}.service`;
|
|
6
|
+
try {
|
|
7
|
+
execSync(`systemctl stop ${serviceName}`, { stdio: "inherit" });
|
|
8
|
+
execSync(`systemctl disable ${serviceName}`, { stdio: "inherit" });
|
|
9
|
+
if (fs.existsSync(serviceFilePath)) {
|
|
10
|
+
fs.unlinkSync(serviceFilePath);
|
|
11
|
+
}
|
|
12
|
+
execSync("systemctl daemon-reload", { stdio: "inherit" });
|
|
13
|
+
writeToLogFile(`Service ${serviceName} removed`, { level: "INFO", source: "SYS" });
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
console.log(`Failed to remove service: ${err.message}`);
|
|
17
|
+
writeToLogFile(`Failed to remove service: ${err.message}`, { level: "ERROR", source: "SYS" });
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=remove_systemd_service.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove_systemd_service.helper.js","sourceRoot":"","sources":["../../src/helpers/remove_systemd_service.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,WAAmB,EAAE,EAAE;IAC1D,MAAM,eAAe,GAAG,uBAAuB,WAAW,UAAU,CAAC;IACrE,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,QAAQ,CAAC,qBAAqB,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACjC,CAAC;QACD,QAAQ,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,cAAc,CAAC,WAAW,WAAW,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QACvD,cAAc,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9F,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start_systemd_service.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/start_systemd_service.helper.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB,GAAI,aAAa,MAAM,SAsBtD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { writeToLogFile } from "./logging.helper.js";
|
|
4
|
+
export const startSystemdService = (serviceName) => {
|
|
5
|
+
const serviceFilePath = `/etc/systemd/system/${serviceName}.service`;
|
|
6
|
+
if (!fs.existsSync(serviceFilePath)) {
|
|
7
|
+
throw new Error(`Service file not found at ${serviceFilePath}. Run "vps-deployer -w <dir> -p <port> -s <key>" first to generate it.`);
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
execSync("systemctl daemon-reload", { stdio: "inherit" });
|
|
11
|
+
execSync(`systemctl enable ${serviceName}`, { stdio: "inherit" });
|
|
12
|
+
execSync(`systemctl start ${serviceName}`, { stdio: "inherit" });
|
|
13
|
+
writeToLogFile(`Service ${serviceName} enabled and started`, {
|
|
14
|
+
level: "INFO",
|
|
15
|
+
source: "SYS",
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
writeToLogFile(`Failed to start service: ${err.message}`, {
|
|
20
|
+
level: "ERROR",
|
|
21
|
+
source: "SYS",
|
|
22
|
+
});
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=start_systemd_service.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start_systemd_service.helper.js","sourceRoot":"","sources":["../../src/helpers/start_systemd_service.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,WAAmB,EAAE,EAAE;IACzD,MAAM,eAAe,GAAG,uBAAuB,WAAW,UAAU,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,6BAA6B,eAAe,wEAAwE,CACrH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,QAAQ,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,QAAQ,CAAC,oBAAoB,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,QAAQ,CAAC,mBAAmB,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,cAAc,CAAC,WAAW,WAAW,sBAAsB,EAAE;YAC3D,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,cAAc,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,EAAE;YACxD,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { closeDB, initalizeDB } from "./db/db.js";
|
|
2
|
+
import { setPort, setSessKey, setWorkDirPath } from "./helpers/arg.helper.js";
|
|
3
|
+
import { createProxyAndLogConfigs } from "./helpers/config_files.helper.js";
|
|
4
|
+
import { convertDateToIST } from "./helpers/date.helper.js";
|
|
5
|
+
import { closeLogger, writeToLogFile } from "./helpers/logging.helper.js";
|
|
6
|
+
import { getArgs } from "./utils/cli.js";
|
|
7
|
+
import app, { initSessionAndRoutes } from "./app.js";
|
|
8
|
+
import { createSystemdService } from "./helpers/create_systemd_service.helper.js";
|
|
9
|
+
let server = null;
|
|
10
|
+
let isShuttingDown = false;
|
|
11
|
+
async function shutdown(signal) {
|
|
12
|
+
if (isShuttingDown)
|
|
13
|
+
return;
|
|
14
|
+
isShuttingDown = true;
|
|
15
|
+
writeToLogFile(`Shutdown initiated`, {
|
|
16
|
+
level: "WARN",
|
|
17
|
+
source: "SYSTEM",
|
|
18
|
+
meta: { signal, time: convertDateToIST(Date.now()) },
|
|
19
|
+
});
|
|
20
|
+
const exit = async (code) => {
|
|
21
|
+
await closeLogger(); // ensure logs flushed
|
|
22
|
+
process.exit(code);
|
|
23
|
+
};
|
|
24
|
+
if (!server) {
|
|
25
|
+
writeToLogFile(`Server not initialized, closing DB`, {
|
|
26
|
+
source: "SYSTEM",
|
|
27
|
+
});
|
|
28
|
+
closeDB();
|
|
29
|
+
return exit(0);
|
|
30
|
+
}
|
|
31
|
+
server.close(async (err) => {
|
|
32
|
+
if (err) {
|
|
33
|
+
writeToLogFile(`Error closing server`, {
|
|
34
|
+
level: "ERROR",
|
|
35
|
+
source: "SERVER",
|
|
36
|
+
meta: { error: err.message },
|
|
37
|
+
});
|
|
38
|
+
return exit(1);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
writeToLogFile(`Server closed successfully`, {
|
|
42
|
+
source: "SERVER",
|
|
43
|
+
});
|
|
44
|
+
closeDB();
|
|
45
|
+
writeToLogFile(`DB closed, shutdown complete`, {
|
|
46
|
+
source: "SYSTEM",
|
|
47
|
+
});
|
|
48
|
+
return exit(0);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
writeToLogFile(`Error during shutdown`, {
|
|
52
|
+
level: "ERROR",
|
|
53
|
+
source: "SYSTEM",
|
|
54
|
+
meta: { error: e.message },
|
|
55
|
+
});
|
|
56
|
+
return exit(1);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// hard timeout fallback (no await here)
|
|
60
|
+
setTimeout(() => {
|
|
61
|
+
server?.closeAllConnections();
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}, 10000);
|
|
64
|
+
}
|
|
65
|
+
function main() {
|
|
66
|
+
try {
|
|
67
|
+
if (process.getuid && process.getuid() !== 0) {
|
|
68
|
+
console.error("This command must be run as root. Use sudo.");
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
const [path, port, sessKey, isDev, isDaemon] = getArgs();
|
|
72
|
+
setWorkDirPath(path);
|
|
73
|
+
setPort(port);
|
|
74
|
+
setSessKey(sessKey);
|
|
75
|
+
initalizeDB();
|
|
76
|
+
createProxyAndLogConfigs();
|
|
77
|
+
if (isDev || isDaemon) {
|
|
78
|
+
initSessionAndRoutes(app);
|
|
79
|
+
server = app.listen(port, "0.0.0.0", () => {
|
|
80
|
+
writeToLogFile(`Server started`, {
|
|
81
|
+
source: "SERVER",
|
|
82
|
+
meta: { port },
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
server.on("connection", (socket) => {
|
|
86
|
+
// VERY IMP : SOMETIMES A OLD STALE CONN WHICH IS IN OS LAYER GETS TO NODE AFTER THE NODE INSTANCE RESTARTS SO SERVER CANT BE CLOSED PROPERLY LEADING INTO FORCE SHUTDOWN INSTEAD OF GRACEFUL
|
|
87
|
+
// USE THIS SETTIMEOUT SO EVEN IF STALE CONN OPENS AGAiN IT GETS CLOSED
|
|
88
|
+
socket.setTimeout(5000);
|
|
89
|
+
socket.on("timeout", () => socket.destroy());
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
createSystemdService({
|
|
94
|
+
serviceName: "vps-deployer",
|
|
95
|
+
execPath: process.argv[1] ?? "",
|
|
96
|
+
args: process.argv.slice(2),
|
|
97
|
+
workingDir: path,
|
|
98
|
+
});
|
|
99
|
+
writeToLogFile(`Systemd service file created. Run "vps-deployer start" to start the service.`, {
|
|
100
|
+
source: "SYSTEM",
|
|
101
|
+
});
|
|
102
|
+
closeDB();
|
|
103
|
+
closeLogger();
|
|
104
|
+
console.log(`Systemd service file created. Run "vps-deployer start" to start the service.`);
|
|
105
|
+
process.exit(0);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.log(error.message);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
114
|
+
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
115
|
+
process.on("uncaughtException", (err) => {
|
|
116
|
+
writeToLogFile("Uncaught Exception", {
|
|
117
|
+
level: "ERROR",
|
|
118
|
+
source: "SYSTEM",
|
|
119
|
+
meta: { error: err.message },
|
|
120
|
+
});
|
|
121
|
+
shutdown("uncaughtException");
|
|
122
|
+
});
|
|
123
|
+
process.on("unhandledRejection", (reason) => {
|
|
124
|
+
writeToLogFile("Unhandled Rejection", {
|
|
125
|
+
level: "ERROR",
|
|
126
|
+
source: "SYSTEM",
|
|
127
|
+
meta: { reason },
|
|
128
|
+
});
|
|
129
|
+
shutdown("unhandledRejection");
|
|
130
|
+
});
|
|
131
|
+
main();
|
|
132
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,SAM1E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.middleware.js","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC7E,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.route.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/auth.route.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM,4CAAW,CAAA;AAavB,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { login, register, viewLogin, viewRegister } from "./controllers/auth.controller.js";
|
|
3
|
+
import limitNgin from 'limitngin';
|
|
4
|
+
const router = Router();
|
|
5
|
+
router.use(limitNgin({
|
|
6
|
+
allowedNoOfRequests: 40,
|
|
7
|
+
intervalInSec: 60,
|
|
8
|
+
algorithm: 'sliding_window_counter',
|
|
9
|
+
blocks: 'ip_addr'
|
|
10
|
+
}));
|
|
11
|
+
router.get('/login', viewLogin);
|
|
12
|
+
router.get('/register', viewRegister);
|
|
13
|
+
router.post('/login', login);
|
|
14
|
+
router.post('/register', register);
|
|
15
|
+
export default router;
|
|
16
|
+
//# sourceMappingURL=auth.route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.route.js","sourceRoot":"","sources":["../../../src/modules/auth/auth.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,SAAS,MAAM,WAAW,CAAA;AAEjC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA;AACvB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjB,mBAAmB,EAAE,EAAE;IACvB,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,wBAAwB;IACnC,MAAM,EAAC,SAAS;CACnB,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAC,SAAS,CAAC,CAAA;AAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAC,YAAY,CAAC,CAAA;AACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAC,KAAK,CAAC,CAAA;AAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAC,QAAQ,CAAC,CAAA;AAEjC,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Request, Response } from "express";
|
|
2
|
+
export declare const viewLogin: (req: Request, res: Response) => Promise<void>;
|
|
3
|
+
export declare const login: (req: Request, res: Response) => Promise<void>;
|
|
4
|
+
export declare const viewRegister: (_req: Request, res: Response) => Promise<void>;
|
|
5
|
+
export declare const register: (req: Request, res: Response) => Promise<void>;
|
|
6
|
+
//# sourceMappingURL=auth.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.controller.d.ts","sourceRoot":"","sources":["../../../../src/modules/auth/controllers/auth.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIjD,eAAO,MAAM,SAAS,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,kBAO1D,CAAC;AAEF,eAAO,MAAM,KAAK,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,kBAmEtD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,kBAM9D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,kBA8DzD,CAAC"}
|