vps-deployer 1.1.2 → 1.2.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.
Files changed (31) hide show
  1. package/dist/db/db.d.ts.map +1 -1
  2. package/dist/db/db.js +7 -0
  3. package/dist/db/db.js.map +1 -1
  4. package/dist/helpers/cmd_executer.helper.d.ts.map +1 -1
  5. package/dist/helpers/cmd_executer.helper.js +16 -4
  6. package/dist/helpers/cmd_executer.helper.js.map +1 -1
  7. package/dist/modules/dashboard/views/layout.pug +1 -1
  8. package/dist/modules/settings/controllers/email_setting.controller.d.ts +6 -0
  9. package/dist/modules/settings/controllers/email_setting.controller.d.ts.map +1 -0
  10. package/dist/modules/settings/controllers/{setting.controller.js → email_setting.controller.js} +27 -24
  11. package/dist/modules/settings/controllers/email_setting.controller.js.map +1 -0
  12. package/dist/modules/settings/controllers/path_setting.controller.d.ts +6 -0
  13. package/dist/modules/settings/controllers/path_setting.controller.d.ts.map +1 -0
  14. package/dist/modules/settings/controllers/path_setting.controller.js +151 -0
  15. package/dist/modules/settings/controllers/path_setting.controller.js.map +1 -0
  16. package/dist/modules/settings/settings.route.d.ts.map +1 -1
  17. package/dist/modules/settings/settings.route.js +8 -2
  18. package/dist/modules/settings/settings.route.js.map +1 -1
  19. package/dist/modules/settings/views/{index.pug → email.pug} +16 -51
  20. package/dist/modules/settings/views/main.pug +114 -0
  21. package/dist/modules/settings/views/path_settings.pug +161 -0
  22. package/dist/utils/cli.js +1 -1
  23. package/dist/utils/cli.js.map +1 -1
  24. package/package.json +2 -2
  25. package/dist/modules/settings/controllers/setting.controller.d.ts +0 -5
  26. package/dist/modules/settings/controllers/setting.controller.d.ts.map +0 -1
  27. package/dist/modules/settings/controllers/setting.controller.js.map +0 -1
  28. package/dist/utils/app_config.d.ts +0 -3
  29. package/dist/utils/app_config.d.ts.map +0 -1
  30. package/dist/utils/app_config.js +0 -5
  31. package/dist/utils/app_config.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAqFzD,eAAO,MAAM,WAAW,YAMvB,CAAC;AAEF,eAAO,MAAM,KAAK,QAAO,MAIxB,CAAC;AAEF,eAAO,MAAM,OAAO,YAEnB,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AA4FzD,eAAO,MAAM,WAAW,YAMvB,CAAC;AAEF,eAAO,MAAM,KAAK,QAAO,MAIxB,CAAC;AAEF,eAAO,MAAM,OAAO,YAEnB,CAAC"}
package/dist/db/db.js CHANGED
@@ -72,6 +72,13 @@ const createTables = () => {
72
72
  FOREIGN KEY (deploy_id) REFERENCES deployment(id) ON DELETE CASCADE
73
73
  );
74
74
 
75
+ CREATE TABLE IF NOT EXISTS path_settings (
76
+ id TEXT PRIMARY KEY,
77
+ path TEXT NOT NULL,
78
+ sequence INTEGER NOT NULL DEFAULT 0,
79
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
80
+ );
81
+
75
82
  CREATE INDEX IF NOT EXISTS idx_project_commands_proj_id
76
83
  ON project_commands(proj_id);
77
84
 
package/dist/db/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAA2B,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,IAAI,EAAE,GAAkB,IAAI,CAAC;AAE7B,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAE/C,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EP,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACxD,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,YAAY,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAW,EAAE;IAChC,IAAI,EAAE,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEtD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,EAAE,EAAE,KAAK,EAAE,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAA2B,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,IAAI,EAAE,GAAkB,IAAI,CAAC;AAE7B,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAE/C,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFP,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACxD,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,YAAY,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAW,EAAE;IAChC,IAAI,EAAE,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEtD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,EAAE,EAAE,KAAK,EAAE,CAAC;AACd,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cmd_executer.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/cmd_executer.helper.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,YAU5C,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,SAAS,MAAM,EAAE,UAAU,MAAM;YAWtC,MAAM;YAAU,MAAM;EA8DpD,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,UAAU,MAAM,EAAE,EAClB,SAAS,MAAM,EACf,UAAU,MAAM,kBAKjB,CAAC"}
1
+ {"version":3,"file":"cmd_executer.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/cmd_executer.helper.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,YAU5C,CAAC;AAcF,eAAO,MAAM,MAAM,GACjB,KAAK,MAAM,EACX,SAAS,MAAM,EACf,UAAU,MAAM;YAYa,MAAM;YAAU,MAAM;EA6DpD,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,UAAU,MAAM,EAAE,EAClB,SAAS,MAAM,EACf,UAAU,MAAM,kBAKjB,CAAC"}
@@ -6,7 +6,7 @@ const startCmdLog = (deployId, cmd) => {
6
6
  db.prepare(`
7
7
  INSERT INTO deployment_logs (id, deploy_id, cmd,status)
8
8
  VALUES (?, ?, ?,?)
9
- `).run(id, deployId, cmd, "running");
9
+ `).run(id, deployId, cmd, 'running');
10
10
  return id;
11
11
  };
12
12
  const finishCmdLog = (logId, log, status) => {
@@ -27,6 +27,17 @@ export const dangerCmdDetector = (cmd) => {
27
27
  ];
28
28
  return dangerous.some((d) => cmd.includes(d));
29
29
  };
30
+ const getMergedPath = () => {
31
+ const db = getDB();
32
+ const paths = db
33
+ .prepare("SELECT path FROM path_settings ORDER BY sequence ASC")
34
+ .all();
35
+ if (paths.length === 0) {
36
+ return process.env.PATH || "";
37
+ }
38
+ const userPath = paths.map((p) => p.path).join(":");
39
+ return userPath + ":" + (process.env.PATH || "");
40
+ };
30
41
  export const runCmd = (cmd, projDir, deployId) => {
31
42
  if (dangerCmdDetector(cmd)) {
32
43
  throw new Error("Dangerous command blocked");
@@ -36,10 +47,11 @@ export const runCmd = (cmd, projDir, deployId) => {
36
47
  let stdout = "";
37
48
  let isFinished = false;
38
49
  return new Promise((resolve, reject) => {
39
- const shell = process.env.SHELL || "/bin/bash";
40
- const child = spawn(shell, ["-lc", cmd], {
50
+ const mergedEnv = { ...process.env, PATH: getMergedPath() };
51
+ const child = spawn(cmd, {
41
52
  cwd: projDir,
42
- env: process.env,
53
+ shell: true,
54
+ env: mergedEnv
43
55
  });
44
56
  // ⏱️ 5 min timeout
45
57
  const timeout = setTimeout(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"cmd_executer.helper.js","sourceRoot":"","sources":["../../src/helpers/cmd_executer.helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmd_executer.helper.js","sourceRoot":"","sources":["../../src/helpers/cmd_executer.helper.ts"],"names":[],"mappings":"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"}
@@ -77,7 +77,7 @@ html
77
77
  li.nav-item
78
78
  a.nav-link(class=(active === "deployments" ? "active" : ""), href="/deployments") Deployments
79
79
  li.nav-item
80
- a.nav-link(class=(active === "settings" ? "active" : ""), href="/settings") Settings
80
+ a.nav-link(class=(active === "settings" || active === "path_settings" ? "active" : ""), href="/settings") Settings
81
81
 
82
82
  // Main content
83
83
  main.container.my-4.flex-grow-1
@@ -0,0 +1,6 @@
1
+ import type { Request, Response } from "express";
2
+ export declare const viewMainSettings: (_req: Request, res: Response) => void;
3
+ export declare const viewEmailSettings: (_req: Request, res: Response) => void;
4
+ export declare const upsertEmail: (req: Request, res: Response) => void;
5
+ export declare const sendTestEmail: (_req: Request, res: Response) => Promise<void>;
6
+ //# sourceMappingURL=email_setting.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email_setting.controller.d.ts","sourceRoot":"","sources":["../../../../src/modules/settings/controllers/email_setting.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKjD,eAAO,MAAM,gBAAgB,GAAI,MAAM,OAAO,EAAE,KAAK,QAAQ,SAc5D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,OAAO,EAAE,KAAK,QAAQ,SAW7D,CAAC;AAGF,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,SAoDtD,CAAC;AAGF,eAAO,MAAM,aAAa,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,kBAuI/D,CAAC"}
@@ -1,32 +1,42 @@
1
1
  import nodemailer from "nodemailer";
2
2
  import { getDB } from "../../../db/db.js";
3
3
  import { convertDateToIST } from "../../../helpers/date.helper.js";
4
- export const viewSettings = (_req, res) => {
4
+ export const viewMainSettings = (_req, res) => {
5
5
  const db = getDB();
6
6
  const user = db.prepare("SELECT * FROM user LIMIT 1").get();
7
7
  const email = db.prepare("SELECT * FROM email LIMIT 1").get();
8
- return res.render("settings/views/index", {
8
+ const paths = db.prepare("SELECT * FROM path_settings ORDER BY sequence ASC").all();
9
+ return res.render("settings/views/main", {
9
10
  user: user || {},
10
11
  email: email || {},
12
+ paths,
11
13
  convertDateToIST,
12
14
  active: "settings",
13
15
  error: null,
14
16
  success: null,
15
17
  });
16
18
  };
19
+ export const viewEmailSettings = (_req, res) => {
20
+ const db = getDB();
21
+ const email = db.prepare("SELECT * FROM email LIMIT 1").get();
22
+ return res.render("settings/views/email", {
23
+ email: email || {},
24
+ active: "settings",
25
+ error: null,
26
+ success: null,
27
+ });
28
+ };
17
29
  // UPSERT EMAIL CONFIG
18
30
  export const upsertEmail = (req, res) => {
19
31
  const { username, password, smtp, smtp_port, from } = req.body;
20
32
  if (!smtp || !smtp_port || !from) {
21
33
  const db = getDB();
22
- const user = db.prepare("SELECT * FROM user LIMIT 1").get();
23
34
  const emailData = db.prepare("SELECT * FROM email LIMIT 1").get();
24
- return res.render("settings/views/index", {
25
- user: user || {},
35
+ return res.render("settings/views/email", {
26
36
  email: emailData || {},
27
- convertDateToIST,
28
37
  active: "settings",
29
38
  error: "SMTP host, port, and from email are required",
39
+ success: null,
30
40
  });
31
41
  }
32
42
  const db = getDB();
@@ -44,25 +54,21 @@ export const upsertEmail = (req, res) => {
44
54
  VALUES (?, ?, ?, ?, ?)
45
55
  `).run(username, password, smtp, smtp_port, from);
46
56
  }
47
- const user = db.prepare("SELECT * FROM user LIMIT 1").get();
48
57
  const emailData = db.prepare("SELECT * FROM email LIMIT 1").get();
49
- return res.render("settings/views/index", {
50
- user: user || {},
58
+ return res.render("settings/views/email", {
51
59
  email: emailData || {},
52
- convertDateToIST,
53
60
  active: "settings",
61
+ error: null,
54
62
  success: "Email settings saved successfully",
55
63
  });
56
64
  }
57
65
  catch (error) {
58
- const user = db.prepare("SELECT * FROM user LIMIT 1").get();
59
66
  const emailData = db.prepare("SELECT * FROM email LIMIT 1").get();
60
- return res.render("settings/views/index", {
61
- user: user || {},
67
+ return res.render("settings/views/email", {
62
68
  email: emailData || {},
63
- convertDateToIST,
64
69
  active: "settings",
65
70
  error: error.message || "Failed to save email settings",
71
+ success: null
66
72
  });
67
73
  }
68
74
  };
@@ -72,12 +78,11 @@ export const sendTestEmail = async (_req, res) => {
72
78
  const emailConfig = db.prepare("SELECT * FROM email LIMIT 1").get();
73
79
  const user = db.prepare("SELECT * FROM user LIMIT 1").get();
74
80
  if (!emailConfig || !user) {
75
- return res.render("settings/views/index", {
76
- user: user || {},
81
+ return res.render("settings/views/email", {
77
82
  email: emailConfig || {},
78
- convertDateToIST,
79
83
  active: "settings",
80
84
  error: "Email settings not configured",
85
+ success: null,
81
86
  });
82
87
  }
83
88
  try {
@@ -184,22 +189,20 @@ export const sendTestEmail = async (_req, res) => {
184
189
  </body>
185
190
  </html>`,
186
191
  });
187
- return res.render("settings/views/index", {
188
- user: user || {},
192
+ return res.render("settings/views/email", {
189
193
  email: emailConfig || {},
190
- convertDateToIST,
191
194
  active: "settings",
195
+ error: null,
192
196
  success: "Test email sent successfully",
193
197
  });
194
198
  }
195
199
  catch (err) {
196
- return res.render("settings/views/index", {
197
- user: user || {},
200
+ return res.render("settings/views/email", {
198
201
  email: emailConfig || {},
199
- convertDateToIST,
200
202
  active: "settings",
201
203
  error: err.message || "Failed to send test email",
204
+ success: null,
202
205
  });
203
206
  }
204
207
  };
205
- //# sourceMappingURL=setting.controller.js.map
208
+ //# sourceMappingURL=email_setting.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email_setting.controller.js","sourceRoot":"","sources":["../../../../src/modules/settings/controllers/email_setting.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Request, Response } from "express";
2
+ export declare const viewPathSettings: (_req: Request, res: Response) => void;
3
+ export declare const createPath: (req: Request, res: Response) => void;
4
+ export declare const updatePath: (req: Request, res: Response) => void;
5
+ export declare const deletePath: (req: Request, res: Response) => void;
6
+ //# sourceMappingURL=path_setting.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path_setting.controller.d.ts","sourceRoot":"","sources":["../../../../src/modules/settings/controllers/path_setting.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGjD,eAAO,MAAM,gBAAgB,GAAI,MAAM,OAAO,EAAE,KAAK,QAAQ,SAW5D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,SA6CrD,CAAC;AACF,eAAO,MAAM,UAAU,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,SAwCrD,CAAC;AACF,eAAO,MAAM,UAAU,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,SAuDrD,CAAC"}
@@ -0,0 +1,151 @@
1
+ import { getDB } from "../../../db/db.js";
2
+ export const viewPathSettings = (_req, res) => {
3
+ const db = getDB();
4
+ const paths = db
5
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
6
+ .all();
7
+ return res.render("settings/views/path_settings", {
8
+ paths,
9
+ active: "path_settings",
10
+ error: null,
11
+ success: null,
12
+ });
13
+ };
14
+ export const createPath = (req, res) => {
15
+ const { path } = req.body;
16
+ if (!path || !path.trim()) {
17
+ const db = getDB();
18
+ const paths = db
19
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
20
+ .all();
21
+ return res.render("settings/views/path_settings", {
22
+ paths,
23
+ active: "path_settings",
24
+ error: "Path is required",
25
+ success: null,
26
+ });
27
+ }
28
+ const db = getDB();
29
+ try {
30
+ const maxSeq = db
31
+ .prepare("SELECT COALESCE(MAX(sequence), -1) as max_seq FROM path_settings")
32
+ .get();
33
+ const nextSeq = maxSeq.max_seq + 1;
34
+ db.prepare("INSERT INTO path_settings (id, path, sequence) VALUES (?, ?, ?)").run(crypto.randomUUID(), path.trim(), nextSeq);
35
+ const paths = db
36
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
37
+ .all();
38
+ return res.render("settings/views/path_settings", {
39
+ paths,
40
+ active: "path_settings",
41
+ error: null,
42
+ success: "Path added successfully",
43
+ });
44
+ }
45
+ catch (error) {
46
+ const paths = db
47
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
48
+ .all();
49
+ return res.render("settings/views/path_settings", {
50
+ paths,
51
+ active: "path_settings",
52
+ error: error.message || "Failed to add path",
53
+ success: null,
54
+ });
55
+ }
56
+ };
57
+ export const updatePath = (req, res) => {
58
+ const { id, path } = req.body;
59
+ if (!id || !path || !path.trim()) {
60
+ const db = getDB();
61
+ const paths = db
62
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
63
+ .all();
64
+ return res.render("settings/views/path_settings", {
65
+ paths,
66
+ active: "path_settings",
67
+ error: "ID and path are required",
68
+ success: null,
69
+ });
70
+ }
71
+ const db = getDB();
72
+ try {
73
+ db.prepare("UPDATE path_settings SET path = ? WHERE id = ?").run(path.trim(), id);
74
+ const paths = db
75
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
76
+ .all();
77
+ return res.render("settings/views/path_settings", {
78
+ paths,
79
+ active: "path_settings",
80
+ error: null,
81
+ success: "Path updated successfully",
82
+ });
83
+ }
84
+ catch (error) {
85
+ const paths = db
86
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
87
+ .all();
88
+ return res.render("settings/views/path_settings", {
89
+ paths,
90
+ active: "path_settings",
91
+ error: error.message || "Failed to update path",
92
+ success: null,
93
+ });
94
+ }
95
+ };
96
+ export const deletePath = (req, res) => {
97
+ const { id } = req.params;
98
+ if (!id) {
99
+ const db = getDB();
100
+ const paths = db
101
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
102
+ .all();
103
+ return res.render("settings/views/path_settings", {
104
+ paths,
105
+ active: "path_settings",
106
+ error: "Path ID is required",
107
+ success: null,
108
+ });
109
+ }
110
+ const db = getDB();
111
+ try {
112
+ const deleted = db
113
+ .prepare("SELECT sequence FROM path_settings WHERE id = ?")
114
+ .get(id);
115
+ if (!deleted) {
116
+ const paths = db
117
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
118
+ .all();
119
+ return res.render("settings/views/path_settings", {
120
+ paths,
121
+ active: "path_settings",
122
+ error: "Path not found",
123
+ success: null,
124
+ });
125
+ }
126
+ const deletedSeq = deleted.sequence;
127
+ db.prepare("DELETE FROM path_settings WHERE id = ?").run(id);
128
+ db.prepare("UPDATE path_settings SET sequence = sequence - 1 WHERE sequence > ?").run(deletedSeq);
129
+ const paths = db
130
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
131
+ .all();
132
+ return res.render("settings/views/path_settings", {
133
+ paths,
134
+ active: "path_settings",
135
+ error: null,
136
+ success: "Path deleted successfully",
137
+ });
138
+ }
139
+ catch (error) {
140
+ const paths = db
141
+ .prepare("SELECT * FROM path_settings ORDER BY sequence ASC")
142
+ .all();
143
+ return res.render("settings/views/path_settings", {
144
+ paths,
145
+ active: "path_settings",
146
+ error: error.message || "Failed to delete path",
147
+ success: null,
148
+ });
149
+ }
150
+ };
151
+ //# sourceMappingURL=path_setting.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path_setting.controller.js","sourceRoot":"","sources":["../../../../src/modules/settings/controllers/path_setting.controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings.route.d.ts","sourceRoot":"","sources":["../../../src/modules/settings/settings.route.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAQxB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"settings.route.d.ts","sourceRoot":"","sources":["../../../src/modules/settings/settings.route.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAaxB,eAAe,MAAM,CAAC"}
@@ -1,10 +1,16 @@
1
1
  import { Router } from "express";
2
- import { viewSettings, upsertEmail, sendTestEmail, } from "./controllers/setting.controller.js";
3
2
  import { requireAuth } from "../../middleware/auth.middleware.js";
3
+ import { sendTestEmail, upsertEmail, viewEmailSettings, viewMainSettings, } from "./controllers/email_setting.controller.js";
4
+ import { createPath, deletePath, updatePath, viewPathSettings, } from "./controllers/path_setting.controller.js";
4
5
  const router = Router();
5
6
  router.use(requireAuth);
6
- router.get("/", viewSettings);
7
+ router.get("/", viewMainSettings);
8
+ router.get("/email", viewEmailSettings);
7
9
  router.post("/email", upsertEmail);
8
10
  router.post("/email/test", sendTestEmail);
11
+ router.get("/path", viewPathSettings);
12
+ router.post("/path", createPath);
13
+ router.post("/path/update", updatePath);
14
+ router.post("/path/delete/:id", deletePath);
9
15
  export default router;
10
16
  //# sourceMappingURL=settings.route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.route.js","sourceRoot":"","sources":["../../../src/modules/settings/settings.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAExB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AAC9B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACnC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE1C,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"settings.route.js","sourceRoot":"","sources":["../../../src/modules/settings/settings.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,GACjB,MAAM,0CAA0C,CAAC;AAElD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAExB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;AAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACnC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AACtC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACjC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AACxC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;AAE5C,eAAe,MAAM,CAAC"}
@@ -1,73 +1,40 @@
1
1
  extends ../../dashboard/views/layout.pug
2
-
3
2
  block content
4
- // Page Header
5
3
  .d-flex.justify-content-between.align-items-center.mb-4
6
4
  div
7
- h2.mb-1 Settings
8
- p.text-muted.mb-0 Manage your account and email configuration
5
+ h2.mb-1 Email Settings
6
+ p.text-muted.mb-0 Configure SMTP for deployment notifications
9
7
  div
10
- i.bi.bi-gear.text-muted(style="font-size: 1.5rem;")
11
-
12
- // Flash Messages
8
+ i.bi.bi-envelope-gear.text-muted(style="font-size: 1.5rem;")
9
+ div
10
+ a.btn.btn-outline-secondary.btn-sm(href="/settings")
11
+ i.bi.bi-arrow-left.me-1
12
+ | Back to Settings
13
13
  if error
14
14
  .alert.alert-danger.alert-dismissible.fade-show.d-flex.align-items-center.mb-4(role="alert")
15
15
  i.bi.bi-exclamation-triangle-fill.me-2
16
16
  span.flex-grow-1 #{error}
17
-
18
-
19
17
  if success
20
18
  .alert.alert-success.alert-dismissible.fade-show.d-flex.align-items-center.mb-4(role="alert")
21
19
  i.bi.bi-check-circle-fill.me-2
22
20
  span.flex-grow-1 #{success}
23
-
24
-
25
- .row
26
- .col-lg-6.mb-4
27
- // ================= USER INFO =================
28
- .card.border-0.shadow-sm.h-100
29
- .card-header.bg-white.border-bottom-0.pt-3
30
- .d-flex.align-items-center
31
- i.bi.bi-person-circle.text-primary.me-2(style="font-size: 1.25rem;")
32
- h5.mb-0 User Details
33
- .card-body
34
- .mb-3.pb-2.border-bottom
35
- .d-flex.justify-content-between
36
- small.text-muted Username
37
- strong.text-dark #{user.username}
38
- .mb-3.pb-2.border-bottom
39
- .d-flex.justify-content-between
40
- small.text-muted Email
41
- strong.text-dark #{user.email}
42
- .mb-3.pb-2.border-bottom
43
- .d-flex.justify-content-between
44
- small.text-muted Created At
45
- strong.text-dark #{convertDateToIST(user.created_at)}
46
- .mb-3
47
- .d-flex.justify-content-between
48
- small.text-muted Last Logged In
49
- strong.text-dark #{convertDateToIST(user.last_logged_in)}
50
-
51
- .col-lg-6.mb-4
52
- // ================= QUICK ACTIONS =================
53
- .card.border-0.shadow-sm.h-100
21
+ .row.mb-4
22
+ .col-lg-12
23
+ .card.border-0.shadow-sm
54
24
  .card-header.bg-white.border-bottom-0.pt-3
55
25
  .d-flex.align-items-center
56
26
  i.bi.bi-envelope-paper.text-primary.me-2(style="font-size: 1.25rem;")
57
27
  h5.mb-0 Email Actions
58
- .card-body.d-flex.align-items-center.justify-content-center.flex-column
59
- form(method="POST", action="/settings/email/test", style="width: 100%;")
60
- button.btn.btn-outline-success.w-100(type="submit")
61
- i.bi.bi-envelope-paper-fill.me-2
28
+ .card-body
29
+ form(method="POST", action="/settings/email/test")
30
+ button.btn.btn-outline-success(type="submit")
31
+ i.bi.bi-send.me-2
62
32
  | Send Test Email
63
- small.text-muted.mt-3.d-block.text-center Verify your email configuration
64
-
65
- // ================= EMAIL CONFIG =================
66
33
  .card.border-0.shadow-sm
67
34
  .card-header.bg-white.border-bottom-0.pt-3
68
35
  .d-flex.align-items-center
69
- i.bi.bi-envelope-gear.text-primary.me-2(style="font-size: 1.25rem;")
70
- h5.mb-0 Email Configuration
36
+ i.bi.bi-gear.text-primary.me-2(style="font-size: 1.25rem;")
37
+ h5.mb-0 SMTP Configuration
71
38
  .card-body
72
39
  form(method="POST", action="/settings/email")
73
40
  .row
@@ -138,8 +105,6 @@ block content
138
105
  button.btn.btn-primary(type="submit")
139
106
  i.bi.bi-save.me-2
140
107
  | Save Configuration
141
-
142
- // Additional styles
143
108
  style.
144
109
  .card {
145
110
  transition: transform 0.2s ease, box-shadow 0.2s ease;
@@ -0,0 +1,114 @@
1
+ extends ../../dashboard/views/layout.pug
2
+ block content
3
+ .d-flex.justify-content-between.align-items-center.mb-4
4
+ div
5
+ h2.mb-1 Settings
6
+ p.text-muted.mb-0 Manage your account and system configuration
7
+ div
8
+ i.bi.bi-gear.text-muted(style="font-size: 1.5rem;")
9
+ if error
10
+ .alert.alert-danger.alert-dismissible.fade-show.d-flex.align-items-center.mb-4(role="alert")
11
+ i.bi.bi-exclamation-triangle-fill.me-2
12
+ span.flex-grow-1 #{error}
13
+ if success
14
+ .alert.alert-success.alert-dismissible.fade-show.d-flex.align-items-center.mb-4(role="alert")
15
+ i.bi.bi-check-circle-fill.me-2
16
+ span.flex-grow-1 #{success}
17
+ .row.mb-4
18
+ .col-lg-4.mb-3
19
+ .card.border-0.shadow-sm.h-100
20
+ .card-header.bg-white.border-bottom-0.pt-3
21
+ .d-flex.align-items-center
22
+ i.bi.bi-person-circle.text-primary.me-2(style="font-size: 1.25rem;")
23
+ h5.mb-0 User Details
24
+ .card-body
25
+ .mb-3.pb-2.border-bottom
26
+ .d-flex.justify-content-between
27
+ small.text-muted Username
28
+ strong.text-dark #{user.username}
29
+ .mb-3.pb-2.border-bottom
30
+ .d-flex.justify-content-between
31
+ small.text-muted Email
32
+ strong.text-dark #{user.email}
33
+ .mb-3.pb-2.border-bottom
34
+ .d-flex.justify-content-between
35
+ small.text-muted Created At
36
+ strong.text-dark #{convertDateToIST(user.created_at)}
37
+ .mb-3
38
+ .d-flex.justify-content-between
39
+ small.text-muted Last Logged In
40
+ strong.text-dark #{convertDateToIST(user.last_logged_in)}
41
+ .row
42
+ .col-md-6.mb-4
43
+ a.text-decoration-none(href="/settings/email")
44
+ .card.border-0.shadow-sm.h-100.settings-card
45
+ .card-body.d-flex.align-items-center
46
+ .me-4
47
+ .icon-circle.bg-primary.bg-opacity-10
48
+ i.bi.bi-envelope.text-primary(style="font-size: 1.75rem;")
49
+ div
50
+ h5.mb-1.text-dark Email Settings
51
+ p.mb-0.text-muted Configure SMTP and notification settings
52
+ if email.smtp
53
+ small.text-success
54
+ i.bi.bi-check-circle.me-1
55
+ | Configured
56
+ .col-md-6.mb-4
57
+ a.text-decoration-none(href="/settings/path")
58
+ .card.border-0.shadow-sm.h-100.settings-card
59
+ .card-body.d-flex.align-items-center
60
+ .me-4
61
+ .icon-circle.bg-success.bg-opacity-10
62
+ i.bi.bi-folder2-open.text-success(style="font-size: 1.75rem;")
63
+ div
64
+ h5.mb-1.text-dark Path Settings
65
+ p.mb-0.text-muted Configure system PATH for command execution
66
+ if paths.length > 0
67
+ small.text-success
68
+ i.bi.bi-check-circle.me-1
69
+ | #{paths.length} path(s) configured
70
+ style.
71
+ .settings-card {
72
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
73
+ cursor: pointer;
74
+ }
75
+
76
+ .settings-card:hover {
77
+ transform: translateY(-4px);
78
+ box-shadow: 0 0.5rem 1.5rem rgba(0, 0, 0, 0.1) !important;
79
+ }
80
+
81
+ .icon-circle {
82
+ width: 60px;
83
+ height: 60px;
84
+ border-radius: 12px;
85
+ display: flex;
86
+ align-items: center;
87
+ justify-content: center;
88
+ }
89
+
90
+ .card {
91
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
92
+ }
93
+
94
+ .card:hover {
95
+ transform: translateY(-2px);
96
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.08) !important;
97
+ }
98
+
99
+ .alert {
100
+ border-radius: 8px;
101
+ border: none;
102
+ }
103
+
104
+ .alert-danger {
105
+ background: #fff5f5;
106
+ color: #c62828;
107
+ border-left: 4px solid #c62828;
108
+ }
109
+
110
+ .alert-success {
111
+ background: #f0f9f0;
112
+ color: #2e7d32;
113
+ border-left: 4px solid #2e7d32;
114
+ }
@@ -0,0 +1,161 @@
1
+ extends ../../dashboard/views/layout.pug
2
+ block content
3
+ .d-flex.justify-content-between.align-items-center.mb-4
4
+ div
5
+ h2.mb-1 Path Settings
6
+ p.text-muted.mb-0 Configure system PATH for command execution
7
+ div
8
+ i.bi.bi-folder2-open.text-muted(style="font-size: 1.5rem;")
9
+ div
10
+ a.btn.btn-outline-secondary.btn-sm(href="/settings")
11
+ i.bi.bi-arrow-left.me-1
12
+ | Back to Settings
13
+ if error
14
+ .alert.alert-danger.alert-dismissible.fade-show.d-flex.align-items-center.mb-4(role="alert")
15
+ i.bi.bi-exclamation-triangle-fill.me-2
16
+ span.flex-grow-1 #{error}
17
+ if success
18
+ .alert.alert-success.alert-dismissible.fade-show.d-flex.align-items-center.mb-4(role="alert")
19
+ i.bi.bi-check-circle-fill.me-2
20
+ span.flex-grow-1 #{success}
21
+ .card.border-0.shadow-sm.mb-4
22
+ .card-header.bg-white.border-bottom-0.pt-3
23
+ .d-flex.align-items-center
24
+ i.bi.bi-plus-circle.text-primary.me-2(style="font-size: 1.25rem;")
25
+ h5.mb-0 Add New Path
26
+ .card-body
27
+ form(method="POST", action="/settings/path")
28
+ .row.align-items-end
29
+ .col
30
+ label.form-label.fw-semibold(for="path-input")
31
+ i.bi.bi-folder.me-1
32
+ | Path
33
+ input.form-control(
34
+ type="text",
35
+ id="path-input",
36
+ name="path",
37
+ placeholder="/home/user/.nvm/versions/node/v24.14.0/bin"
38
+ )
39
+ .col-auto
40
+ button.btn.btn-primary(type="submit")
41
+ i.bi.bi-plus-lg.me-2
42
+ | Add
43
+ .card.border-0.shadow-sm
44
+ .card-header.bg-white.border-bottom-0.pt-3
45
+ .d-flex.align-items-center
46
+ i.bi.bi-list-ul.text-primary.me-2(style="font-size: 1.25rem;")
47
+ h5.mb-0 Configured Paths
48
+ span.badge.bg-secondary.ms-2 #{paths.length}
49
+ .card-body.p-0
50
+ if paths.length === 0
51
+ .text-center.py-5.text-muted
52
+ i.bi.bi-inbox(style="font-size: 3rem;")
53
+ p.mt-2.mb-0 No paths configured. Add a path above.
54
+ else
55
+ .table-responsive
56
+ table.table.table-hover.mb-0
57
+ thead.bg-light
58
+ tr
59
+ th.text-nowrap.px-4 Seq
60
+ th Path
61
+ th.text-end.px-4 Actions
62
+ tbody
63
+ each p in paths
64
+ tr
65
+ td.text-nowrap.px-4
66
+ span.badge.bg-light.text-dark ##{p.sequence + 1}
67
+ td.px-3
68
+ code.text-dark #{p.path}
69
+ td.text-end.px-4
70
+ .btn-group.btn-group-sm
71
+ button.btn.btn-outline-primary.edit-btn(
72
+ type="button",
73
+ data-id=p.id,
74
+ data-path=p.path
75
+ )
76
+ i.bi.bi-pencil
77
+ form.d-inline(
78
+ method="POST",
79
+ action="/settings/path/delete/" + p.id
80
+ )
81
+ button.btn.btn-outline-danger(type="submit")
82
+ i.bi.bi-trash
83
+ #editModal.modal.fade(tabindex="-1")
84
+ .modal-dialog
85
+ .modal-content
86
+ .modal-header
87
+ h5.modal-title Edit Path
88
+ button.btn-close(type="button", data-bs-dismiss="modal")
89
+ form(method="POST", action="/settings/path/update")
90
+ .modal-body
91
+ input(type="hidden", name="id", id="edit-id")
92
+ .mb-3
93
+ label.form-label.fw-semibold(for="edit-path")
94
+ i.bi.bi-folder.me-1
95
+ | Path
96
+ input.form-control(
97
+ type="text",
98
+ id="edit-path",
99
+ name="path"
100
+ )
101
+ .modal-footer
102
+ button.btn.btn-secondary(type="button", data-bs-dismiss="modal") Cancel
103
+ button.btn.btn-primary(type="submit") Save Changes
104
+ script.
105
+ document.querySelectorAll('.edit-btn').forEach(btn => {
106
+ btn.addEventListener('click', () => {
107
+ document.getElementById('edit-id').value = btn.dataset.id;
108
+ document.getElementById('edit-path').value = btn.dataset.path;
109
+ new bootstrap.Modal(document.getElementById('editModal')).show();
110
+ });
111
+ });
112
+ style.
113
+ .table > thead > tr > th {
114
+ border-bottom: 2px solid #e9ecef;
115
+ font-weight: 600;
116
+ font-size: 0.8125rem;
117
+ text-transform: uppercase;
118
+ letter-spacing: 0.5px;
119
+ color: #6c757d;
120
+ }
121
+
122
+ .table > tbody > tr > td {
123
+ vertical-align: middle;
124
+ }
125
+
126
+ code {
127
+ background: #f8f9fa;
128
+ padding: 0.25rem 0.5rem;
129
+ border-radius: 4px;
130
+ font-size: 0.875rem;
131
+ }
132
+
133
+ .btn-group-sm > .btn {
134
+ padding: 0.25rem 0.5rem;
135
+ }
136
+
137
+ .card {
138
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
139
+ }
140
+
141
+ .card:hover {
142
+ transform: translateY(-2px);
143
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.08) !important;
144
+ }
145
+
146
+ .alert {
147
+ border-radius: 8px;
148
+ border: none;
149
+ }
150
+
151
+ .alert-danger {
152
+ background: #fff5f5;
153
+ color: #c62828;
154
+ border-left: 4px solid #c62828;
155
+ }
156
+
157
+ .alert-success {
158
+ background: #f0f9f0;
159
+ color: #2e7d32;
160
+ border-left: 4px solid #2e7d32;
161
+ }
package/dist/utils/cli.js CHANGED
@@ -28,7 +28,7 @@ const parseCommonOptions = (opts) => {
28
28
  };
29
29
  export const setupCLI = () => {
30
30
  const program = new Command();
31
- program.description("a utility that helps u auto deploy things").version("1.1.2");
31
+ program.description("A lightweight, self-hosted continuous deployment system with a web UI").version("1.2.0");
32
32
  // ---- config subcommand ----
33
33
  program
34
34
  .command("config")
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vps-deployer",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "description": "A lightweight, self-hosted continuous deployment (CD) system with a built-in web UI — manages projects on your VPS, accepts GitHub webhooks for automatic deployments, and sends real-time email notifications on deployment events",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,7 +15,7 @@
15
15
  "LICENSE"
16
16
  ],
17
17
  "scripts": {
18
- "dev": "ts-node src/index.ts ",
18
+ "dev": "ts-node src/index.ts",
19
19
  "build": "tsc && find src/modules -type d -name views -exec sh -c 'dest=\"dist/modules/${1#src/modules/}\"; mkdir -p \"$dest\"; cp \"$1\"/* \"$dest/\"' _ {} \\;",
20
20
  "start": "node dist/index.js",
21
21
  "clean": "rm -rf dist",
@@ -1,5 +0,0 @@
1
- import type { Request, Response } from "express";
2
- export declare const viewSettings: (_req: Request, res: Response) => void;
3
- export declare const upsertEmail: (req: Request, res: Response) => void;
4
- export declare const sendTestEmail: (_req: Request, res: Response) => Promise<void>;
5
- //# sourceMappingURL=setting.controller.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setting.controller.d.ts","sourceRoot":"","sources":["../../../../src/modules/settings/controllers/setting.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKjD,eAAO,MAAM,YAAY,GAAI,MAAM,OAAO,EAAE,KAAK,QAAQ,SAcxD,CAAC;AAGF,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,SA0DtD,CAAC;AAGF,eAAO,MAAM,aAAa,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,kBA0I/D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"setting.controller.js","sourceRoot":"","sources":["../../../../src/modules/settings/controllers/setting.controller.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- declare const _default: Readonly<{}>;
2
- export default _default;
3
- //# sourceMappingURL=app_config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app_config.d.ts","sourceRoot":"","sources":["../../src/utils/app_config.ts"],"names":[],"mappings":";AAQA,wBAAwC"}
@@ -1,5 +0,0 @@
1
- import dotenv from 'dotenv';
2
- dotenv.config();
3
- const APP_CONFIG = {};
4
- export default Object.freeze(APP_CONFIG);
5
- //# sourceMappingURL=app_config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app_config.js","sourceRoot":"","sources":["../../src/utils/app_config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,MAAM,CAAC,MAAM,EAAE,CAAA;AAEf,MAAM,UAAU,GAAG,EAElB,CAAA;AAED,eAAe,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA"}