@push.rocks/smartdaemon 2.1.1 → 2.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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/smartdaemon.classes.service.d.ts +2 -0
- package/dist_ts/smartdaemon.classes.service.js +1 -1
- package/dist_ts/smartdaemon.classes.templatemanager.d.ts +1 -0
- package/dist_ts/smartdaemon.classes.templatemanager.js +16 -3
- package/package.json +12 -13
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/smartdaemon.classes.service.ts +2 -0
- package/ts/smartdaemon.classes.templatemanager.ts +16 -2
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartdaemon',
|
|
6
|
-
version: '2.
|
|
6
|
+
version: '2.2.0',
|
|
7
7
|
description: 'Start scripts as long running daemons and manage them.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHdEQUF3RDtDQUN0RSxDQUFBIn0=
|
|
@@ -7,6 +7,7 @@ export interface ISmartDaemonServiceConstructorOptions {
|
|
|
7
7
|
version: string;
|
|
8
8
|
user?: string;
|
|
9
9
|
group?: string;
|
|
10
|
+
environment?: Record<string, string>;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* represents a service that is being spawned by SmartDaemon
|
|
@@ -22,6 +23,7 @@ export declare class SmartDaemonService implements ISmartDaemonServiceConstructo
|
|
|
22
23
|
description: string;
|
|
23
24
|
user?: string;
|
|
24
25
|
group?: string;
|
|
26
|
+
environment?: Record<string, string>;
|
|
25
27
|
smartdaemonRef: SmartDaemon;
|
|
26
28
|
constructor(smartdaemonRegfArg: SmartDaemon);
|
|
27
29
|
/**
|
|
@@ -53,4 +53,4 @@ export class SmartDaemonService {
|
|
|
53
53
|
await this.smartdaemonRef.systemdManager.reload();
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYWVtb24uY2xhc3Nlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYWVtb24uY2xhc3Nlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEtBQUssTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFhbkU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQ25DLGNBQTJCLEVBQzNCLFVBQWlEO1FBRWpELE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDN0IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQWdCRCxZQUFZLGtCQUErQjtRQWJwQyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQWMzQixJQUFJLENBQUMsY0FBYyxHQUFHLGtCQUFrQixDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGtCQUFrQjtJQUNYLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE1BQU07UUFDakIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEQsQ0FBQztDQUNGIn0=
|
|
@@ -3,5 +3,6 @@ import { SmartDaemonService } from './smartdaemon.classes.service.js';
|
|
|
3
3
|
export declare class SmartDaemonTemplateManager {
|
|
4
4
|
smartdaemonRef: SmartDaemon;
|
|
5
5
|
constructor(smartdaemonRefArg: SmartDaemon);
|
|
6
|
+
private generateEnvironmentLines;
|
|
6
7
|
generateUnitFileForService: (serviceArg: SmartDaemonService) => string;
|
|
7
8
|
}
|
|
@@ -3,6 +3,7 @@ import { SmartDaemonService } from './smartdaemon.classes.service.js';
|
|
|
3
3
|
export class SmartDaemonTemplateManager {
|
|
4
4
|
constructor(smartdaemonRefArg) {
|
|
5
5
|
this.generateUnitFileForService = (serviceArg) => {
|
|
6
|
+
const environmentLines = this.generateEnvironmentLines(serviceArg);
|
|
6
7
|
return `# ---
|
|
7
8
|
# name: ${serviceArg.name}
|
|
8
9
|
# version: ${serviceArg.version}
|
|
@@ -20,8 +21,8 @@ After=network.target
|
|
|
20
21
|
[Service]
|
|
21
22
|
Type=simple${serviceArg.user ? `
|
|
22
23
|
User=${serviceArg.user}` : ''}${serviceArg.group ? `
|
|
23
|
-
Group=${serviceArg.group}` : ''}
|
|
24
|
-
|
|
24
|
+
Group=${serviceArg.group}` : ''}${environmentLines ? `
|
|
25
|
+
${environmentLines}` : ''}
|
|
25
26
|
ExecStart=/bin/bash -c "cd ${serviceArg.workingDir} && ${serviceArg.command}"
|
|
26
27
|
WorkingDirectory=${serviceArg.workingDir}
|
|
27
28
|
Restart=on-failure
|
|
@@ -37,5 +38,17 @@ WantedBy=multi-user.target
|
|
|
37
38
|
};
|
|
38
39
|
this.smartdaemonRef = smartdaemonRefArg;
|
|
39
40
|
}
|
|
41
|
+
generateEnvironmentLines(serviceArg) {
|
|
42
|
+
const environment = serviceArg.environment || {};
|
|
43
|
+
return Object.entries(environment)
|
|
44
|
+
.map(([key, value]) => {
|
|
45
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
|
|
46
|
+
throw new Error(`Invalid systemd environment key: ${key}`);
|
|
47
|
+
}
|
|
48
|
+
const escapedValue = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
49
|
+
return `Environment="${key}=${escapedValue}"`;
|
|
50
|
+
})
|
|
51
|
+
.join('\n');
|
|
52
|
+
}
|
|
40
53
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYWVtb24uY2xhc3Nlcy50ZW1wbGF0ZW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGRhZW1vbi5jbGFzc2VzLnRlbXBsYXRlbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEUsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQyxZQUFZLGlCQUE4QjtRQWlCbkMsK0JBQTBCLEdBQUcsQ0FBQyxVQUE4QixFQUFFLEVBQUU7WUFDckUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkUsT0FBTztVQUNELFVBQVUsQ0FBQyxJQUFJO2FBQ1osVUFBVSxDQUFDLE9BQU87aUJBQ2QsVUFBVSxDQUFDLFdBQVc7YUFDMUIsVUFBVSxDQUFDLE9BQU87Z0JBQ2YsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUNoRCxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztXQUMzQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7OztjQUdwQixVQUFVLENBQUMsV0FBVzs7Ozs7YUFLdkIsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDeEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0MsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0VBQ25ELGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7NkJBQ0ksVUFBVSxDQUFDLFVBQVUsT0FBTyxVQUFVLENBQUMsT0FBTzttQkFDeEQsVUFBVSxDQUFDLFVBQVU7Ozs7Ozs7Ozs7Q0FVdkMsQ0FBQztRQUNBLENBQUMsQ0FBQztRQWpEQSxJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDO0lBQzFDLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxVQUE4QjtRQUM3RCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEdBQUcsQ0FBQztRQUNoRCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQztDQW9DRiJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartdaemon",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Start scripts as long running daemons and manage them.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -8,12 +8,6 @@
|
|
|
8
8
|
"type": "module",
|
|
9
9
|
"author": "Task Venture Capital GmbH <hello@task.vc>",
|
|
10
10
|
"license": "MIT",
|
|
11
|
-
"scripts": {
|
|
12
|
-
"test": "tstest test/ --verbose --timeout 60",
|
|
13
|
-
"build": "tsbuild --web",
|
|
14
|
-
"format": "gitzone format",
|
|
15
|
-
"buildDocs": "tsdoc"
|
|
16
|
-
},
|
|
17
11
|
"repository": {
|
|
18
12
|
"type": "git",
|
|
19
13
|
"url": "https://code.foss.global/push.rocks/smartdaemon.git"
|
|
@@ -32,10 +26,10 @@
|
|
|
32
26
|
},
|
|
33
27
|
"homepage": "https://code.foss.global/push.rocks/smartdaemon",
|
|
34
28
|
"devDependencies": {
|
|
35
|
-
"@git.zone/tsbuild": "^4.4.
|
|
36
|
-
"@git.zone/tsrun": "^2.0.
|
|
37
|
-
"@git.zone/tstest": "^3.6.
|
|
38
|
-
"@types/node": "^25.
|
|
29
|
+
"@git.zone/tsbuild": "^4.4.2",
|
|
30
|
+
"@git.zone/tsrun": "^2.0.4",
|
|
31
|
+
"@git.zone/tstest": "^3.6.6",
|
|
32
|
+
"@types/node": "^25.9.1"
|
|
39
33
|
},
|
|
40
34
|
"dependencies": {
|
|
41
35
|
"@push.rocks/lik": "^6.4.1",
|
|
@@ -64,5 +58,10 @@
|
|
|
64
58
|
"browserslist": [
|
|
65
59
|
"last 1 chrome versions"
|
|
66
60
|
],
|
|
67
|
-
"
|
|
68
|
-
|
|
61
|
+
"scripts": {
|
|
62
|
+
"test": "tstest test/ --verbose --timeout 60",
|
|
63
|
+
"build": "tsbuild --web",
|
|
64
|
+
"format": "gitzone format",
|
|
65
|
+
"buildDocs": "tsdoc"
|
|
66
|
+
}
|
|
67
|
+
}
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface ISmartDaemonServiceConstructorOptions {
|
|
|
10
10
|
version: string;
|
|
11
11
|
user?: string;
|
|
12
12
|
group?: string;
|
|
13
|
+
environment?: Record<string, string>;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
/**
|
|
@@ -36,6 +37,7 @@ export class SmartDaemonService implements ISmartDaemonServiceConstructorOptions
|
|
|
36
37
|
public description!: string;
|
|
37
38
|
public user?: string;
|
|
38
39
|
public group?: string;
|
|
40
|
+
public environment?: Record<string, string>;
|
|
39
41
|
|
|
40
42
|
public smartdaemonRef: SmartDaemon;
|
|
41
43
|
|
|
@@ -8,7 +8,21 @@ export class SmartDaemonTemplateManager {
|
|
|
8
8
|
this.smartdaemonRef = smartdaemonRefArg;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
private generateEnvironmentLines(serviceArg: SmartDaemonService): string {
|
|
12
|
+
const environment = serviceArg.environment || {};
|
|
13
|
+
return Object.entries(environment)
|
|
14
|
+
.map(([key, value]) => {
|
|
15
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
|
|
16
|
+
throw new Error(`Invalid systemd environment key: ${key}`);
|
|
17
|
+
}
|
|
18
|
+
const escapedValue = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
19
|
+
return `Environment="${key}=${escapedValue}"`;
|
|
20
|
+
})
|
|
21
|
+
.join('\n');
|
|
22
|
+
}
|
|
23
|
+
|
|
11
24
|
public generateUnitFileForService = (serviceArg: SmartDaemonService) => {
|
|
25
|
+
const environmentLines = this.generateEnvironmentLines(serviceArg);
|
|
12
26
|
return `# ---
|
|
13
27
|
# name: ${serviceArg.name}
|
|
14
28
|
# version: ${serviceArg.version}
|
|
@@ -26,8 +40,8 @@ After=network.target
|
|
|
26
40
|
[Service]
|
|
27
41
|
Type=simple${serviceArg.user ? `
|
|
28
42
|
User=${serviceArg.user}` : ''}${serviceArg.group ? `
|
|
29
|
-
Group=${serviceArg.group}` : ''}
|
|
30
|
-
|
|
43
|
+
Group=${serviceArg.group}` : ''}${environmentLines ? `
|
|
44
|
+
${environmentLines}` : ''}
|
|
31
45
|
ExecStart=/bin/bash -c "cd ${serviceArg.workingDir} && ${serviceArg.command}"
|
|
32
46
|
WorkingDirectory=${serviceArg.workingDir}
|
|
33
47
|
Restart=on-failure
|