@kapeta/local-cluster-service 0.6.0 → 0.7.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/.eslintrc.cjs +17 -0
- package/.github/workflows/main.yml +22 -22
- package/.prettierignore +4 -0
- package/.vscode/launch.json +2 -4
- package/CHANGELOG.md +14 -0
- package/definitions.d.ts +17 -35
- package/dist/cjs/index.d.ts +27 -0
- package/dist/cjs/index.js +126 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/src/assetManager.d.ts +31 -0
- package/dist/cjs/src/assetManager.js +153 -0
- package/dist/cjs/src/assets/routes.d.ts +3 -0
- package/dist/cjs/src/assets/routes.js +117 -0
- package/dist/cjs/src/clusterService.d.ts +40 -0
- package/dist/cjs/src/clusterService.js +114 -0
- package/dist/cjs/src/codeGeneratorManager.d.ts +8 -0
- package/dist/cjs/src/codeGeneratorManager.js +53 -0
- package/dist/cjs/src/config/routes.d.ts +3 -0
- package/dist/cjs/src/config/routes.js +126 -0
- package/dist/cjs/src/configManager.d.ts +36 -0
- package/dist/cjs/src/configManager.js +110 -0
- package/dist/cjs/src/containerManager.d.ts +89 -0
- package/dist/cjs/src/containerManager.js +365 -0
- package/dist/cjs/src/filesystem/routes.d.ts +3 -0
- package/dist/cjs/src/filesystem/routes.js +69 -0
- package/dist/cjs/src/filesystemManager.d.ts +15 -0
- package/dist/cjs/src/filesystemManager.js +87 -0
- package/dist/cjs/src/identities/routes.d.ts +3 -0
- package/dist/cjs/src/identities/routes.js +18 -0
- package/dist/cjs/src/instanceManager.d.ts +56 -0
- package/dist/cjs/src/instanceManager.js +424 -0
- package/dist/cjs/src/instances/routes.d.ts +3 -0
- package/dist/cjs/src/instances/routes.js +134 -0
- package/dist/cjs/src/middleware/cors.d.ts +2 -0
- package/dist/cjs/src/middleware/cors.js +10 -0
- package/dist/cjs/src/middleware/kapeta.d.ts +11 -0
- package/dist/cjs/src/middleware/kapeta.js +17 -0
- package/dist/cjs/src/middleware/stringBody.d.ts +5 -0
- package/dist/cjs/src/middleware/stringBody.js +14 -0
- package/dist/cjs/src/networkManager.d.ts +32 -0
- package/dist/cjs/src/networkManager.js +109 -0
- package/dist/cjs/src/operatorManager.d.ts +36 -0
- package/dist/cjs/src/operatorManager.js +165 -0
- package/dist/cjs/src/progressListener.d.ts +20 -0
- package/dist/cjs/src/progressListener.js +91 -0
- package/dist/cjs/src/providerManager.d.ts +9 -0
- package/dist/cjs/src/providerManager.js +51 -0
- package/dist/cjs/src/providers/routes.d.ts +3 -0
- package/dist/cjs/src/providers/routes.js +42 -0
- package/dist/cjs/src/proxy/routes.d.ts +3 -0
- package/dist/cjs/src/proxy/routes.js +111 -0
- package/dist/cjs/src/proxy/types/rest.d.ts +4 -0
- package/dist/cjs/src/proxy/types/rest.js +114 -0
- package/dist/cjs/src/proxy/types/web.d.ts +4 -0
- package/dist/cjs/src/proxy/types/web.js +53 -0
- package/dist/cjs/src/repositoryManager.d.ts +17 -0
- package/dist/cjs/src/repositoryManager.js +215 -0
- package/dist/cjs/src/serviceManager.d.ts +29 -0
- package/dist/cjs/src/serviceManager.js +99 -0
- package/dist/cjs/src/socketManager.d.ts +14 -0
- package/dist/cjs/src/socketManager.js +53 -0
- package/dist/cjs/src/storageService.d.ts +17 -0
- package/dist/cjs/src/storageService.js +74 -0
- package/dist/cjs/src/traffic/routes.d.ts +3 -0
- package/dist/cjs/src/traffic/routes.js +18 -0
- package/dist/cjs/src/types.d.ts +88 -0
- package/dist/cjs/src/types.js +2 -0
- package/dist/cjs/src/utils/BlockInstanceRunner.d.ts +29 -0
- package/dist/cjs/src/utils/BlockInstanceRunner.js +468 -0
- package/dist/cjs/src/utils/LogData.d.ts +19 -0
- package/dist/cjs/src/utils/LogData.js +43 -0
- package/dist/cjs/src/utils/pathTemplateParser.d.ts +26 -0
- package/dist/cjs/src/utils/pathTemplateParser.js +121 -0
- package/dist/cjs/src/utils/utils.d.ts +1 -0
- package/dist/cjs/src/utils/utils.js +18 -0
- package/dist/cjs/start.d.ts +1 -0
- package/dist/cjs/start.js +12 -0
- package/dist/esm/index.d.ts +27 -0
- package/dist/esm/index.js +121 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/src/assetManager.d.ts +31 -0
- package/{src → dist/esm/src}/assetManager.js +22 -60
- package/dist/esm/src/assets/routes.d.ts +3 -0
- package/{src → dist/esm/src}/assets/routes.js +21 -36
- package/dist/esm/src/clusterService.d.ts +40 -0
- package/{src → dist/esm/src}/clusterService.js +14 -37
- package/dist/esm/src/codeGeneratorManager.d.ts +8 -0
- package/{src → dist/esm/src}/codeGeneratorManager.js +15 -24
- package/dist/esm/src/config/routes.d.ts +3 -0
- package/dist/esm/src/config/routes.js +121 -0
- package/dist/esm/src/configManager.d.ts +36 -0
- package/{src → dist/esm/src}/configManager.js +11 -40
- package/dist/esm/src/containerManager.d.ts +89 -0
- package/{src → dist/esm/src}/containerManager.js +81 -182
- package/dist/esm/src/filesystem/routes.d.ts +3 -0
- package/dist/esm/src/filesystem/routes.js +64 -0
- package/dist/esm/src/filesystemManager.d.ts +15 -0
- package/{src → dist/esm/src}/filesystemManager.js +20 -28
- package/dist/esm/src/identities/routes.d.ts +3 -0
- package/dist/esm/src/identities/routes.js +13 -0
- package/dist/esm/src/instanceManager.d.ts +56 -0
- package/{src → dist/esm/src}/instanceManager.js +94 -175
- package/dist/esm/src/instances/routes.d.ts +3 -0
- package/{src → dist/esm/src}/instances/routes.js +31 -70
- package/dist/esm/src/middleware/cors.d.ts +2 -0
- package/{src → dist/esm/src}/middleware/cors.js +2 -3
- package/dist/esm/src/middleware/kapeta.d.ts +11 -0
- package/{src → dist/esm/src}/middleware/kapeta.js +3 -7
- package/dist/esm/src/middleware/stringBody.d.ts +5 -0
- package/{src → dist/esm/src}/middleware/stringBody.js +2 -3
- package/dist/esm/src/networkManager.d.ts +32 -0
- package/{src → dist/esm/src}/networkManager.js +16 -33
- package/dist/esm/src/operatorManager.d.ts +36 -0
- package/{src → dist/esm/src}/operatorManager.js +35 -91
- package/dist/esm/src/progressListener.d.ts +20 -0
- package/dist/esm/src/progressListener.js +88 -0
- package/dist/esm/src/providerManager.d.ts +9 -0
- package/dist/esm/src/providerManager.js +45 -0
- package/dist/esm/src/providers/routes.d.ts +3 -0
- package/{src → dist/esm/src}/providers/routes.js +10 -16
- package/dist/esm/src/proxy/routes.d.ts +3 -0
- package/dist/esm/src/proxy/routes.js +106 -0
- package/dist/esm/src/proxy/types/rest.d.ts +4 -0
- package/dist/esm/src/proxy/types/rest.js +107 -0
- package/dist/esm/src/proxy/types/web.d.ts +4 -0
- package/{src → dist/esm/src}/proxy/types/web.js +13 -35
- package/dist/esm/src/repositoryManager.d.ts +17 -0
- package/dist/esm/src/repositoryManager.js +209 -0
- package/dist/esm/src/serviceManager.d.ts +29 -0
- package/{src → dist/esm/src}/serviceManager.js +12 -42
- package/dist/esm/src/socketManager.d.ts +14 -0
- package/{src → dist/esm/src}/socketManager.js +19 -23
- package/dist/esm/src/storageService.d.ts +17 -0
- package/{src → dist/esm/src}/storageService.js +8 -27
- package/dist/esm/src/traffic/routes.d.ts +3 -0
- package/{src → dist/esm/src}/traffic/routes.js +4 -9
- package/dist/esm/src/types.d.ts +88 -0
- package/dist/esm/src/types.js +1 -0
- package/dist/esm/src/utils/BlockInstanceRunner.d.ts +29 -0
- package/{src → dist/esm/src}/utils/BlockInstanceRunner.js +137 -256
- package/dist/esm/src/utils/LogData.d.ts +19 -0
- package/{src → dist/esm/src}/utils/LogData.js +11 -22
- package/dist/esm/src/utils/pathTemplateParser.d.ts +26 -0
- package/{src → dist/esm/src}/utils/pathTemplateParser.js +21 -40
- package/dist/esm/src/utils/utils.d.ts +1 -0
- package/dist/esm/src/utils/utils.js +11 -0
- package/dist/esm/start.d.ts +1 -0
- package/dist/esm/start.js +7 -0
- package/index.ts +147 -0
- package/package.json +106 -74
- package/src/assetManager.ts +191 -0
- package/src/assets/routes.ts +132 -0
- package/src/clusterService.ts +134 -0
- package/src/codeGeneratorManager.ts +57 -0
- package/src/config/routes.ts +159 -0
- package/src/configManager.ts +148 -0
- package/src/containerManager.ts +466 -0
- package/src/filesystem/routes.ts +74 -0
- package/src/filesystemManager.ts +93 -0
- package/src/identities/routes.ts +20 -0
- package/src/instanceManager.ts +503 -0
- package/src/instances/routes.ts +164 -0
- package/src/middleware/cors.ts +9 -0
- package/src/middleware/kapeta.ts +27 -0
- package/src/middleware/stringBody.ts +16 -0
- package/src/networkManager.ts +137 -0
- package/src/operatorManager.ts +221 -0
- package/src/progressListener.ts +102 -0
- package/src/{providerManager.js → providerManager.ts} +15 -31
- package/src/providers/routes.ts +46 -0
- package/src/proxy/routes.ts +148 -0
- package/src/proxy/types/{rest.js → rest.ts} +30 -30
- package/src/proxy/types/web.ts +60 -0
- package/src/{repositoryManager.js → repositoryManager.ts} +45 -73
- package/src/serviceManager.ts +120 -0
- package/src/socketManager.ts +57 -0
- package/src/storageService.ts +88 -0
- package/src/traffic/routes.ts +18 -0
- package/src/types.ts +97 -0
- package/src/utils/BlockInstanceRunner.ts +555 -0
- package/src/utils/LogData.ts +47 -0
- package/src/utils/pathTemplateParser.ts +138 -0
- package/src/utils/utils.ts +12 -0
- package/start.ts +8 -0
- package/tsconfig.json +13 -0
- package/index.js +0 -127
- package/src/config/routes.js +0 -160
- package/src/filesystem/routes.js +0 -74
- package/src/identities/routes.js +0 -19
- package/src/progressListener.js +0 -82
- package/src/proxy/routes.js +0 -126
- package/src/utils/utils.js +0 -13
- package/start.js +0 -7
@@ -0,0 +1,19 @@
|
|
1
|
+
import { LogEntry, LogLevel, LogSource } from '../types';
|
2
|
+
export declare class LogData {
|
3
|
+
static readonly MAX_LINES = 1000;
|
4
|
+
private readonly entries;
|
5
|
+
constructor();
|
6
|
+
/**
|
7
|
+
*
|
8
|
+
* @param {string} msg
|
9
|
+
* @param {string} [level]
|
10
|
+
* @param {string} [source]
|
11
|
+
*/
|
12
|
+
addLog(msg: string, level?: LogLevel, source?: LogSource): void;
|
13
|
+
/**
|
14
|
+
*
|
15
|
+
* @return {LogEntry[]}
|
16
|
+
*/
|
17
|
+
getLogs(): LogEntry[];
|
18
|
+
toString(): string;
|
19
|
+
}
|
@@ -1,26 +1,18 @@
|
|
1
1
|
const MAX_LINES = 1000;
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
constructor() {
|
6
|
-
/**
|
7
|
-
*
|
8
|
-
* @type {LogEntry[]}
|
9
|
-
*/
|
10
|
-
this.entries = [];
|
11
|
-
}
|
12
|
-
|
2
|
+
export class LogData {
|
3
|
+
static MAX_LINES = MAX_LINES;
|
4
|
+
entries = [];
|
5
|
+
constructor() { }
|
13
6
|
/**
|
14
7
|
*
|
15
8
|
* @param {string} msg
|
16
9
|
* @param {string} [level]
|
17
10
|
* @param {string} [source]
|
18
11
|
*/
|
19
|
-
addLog(msg, level = 'INFO', source = '
|
20
|
-
while(this.entries.length > MAX_LINES) {
|
12
|
+
addLog(msg, level = 'INFO', source = 'stdout') {
|
13
|
+
while (this.entries.length > MAX_LINES) {
|
21
14
|
this.entries.shift();
|
22
15
|
}
|
23
|
-
|
24
16
|
if (!msg.endsWith('\n')) {
|
25
17
|
msg += '\n';
|
26
18
|
}
|
@@ -28,10 +20,9 @@ class LogData {
|
|
28
20
|
time: Date.now(),
|
29
21
|
message: msg,
|
30
22
|
level,
|
31
|
-
source
|
23
|
+
source,
|
32
24
|
});
|
33
25
|
}
|
34
|
-
|
35
26
|
/**
|
36
27
|
*
|
37
28
|
* @return {LogEntry[]}
|
@@ -39,12 +30,10 @@ class LogData {
|
|
39
30
|
getLogs() {
|
40
31
|
return this.entries;
|
41
32
|
}
|
42
|
-
|
43
33
|
toString() {
|
44
|
-
return this.getLogs()
|
34
|
+
return this.getLogs()
|
35
|
+
.map((entry) => entry.message)
|
36
|
+
.join('\n');
|
45
37
|
}
|
46
38
|
}
|
47
|
-
|
48
|
-
LogData.MAX_LINES = MAX_LINES;
|
49
|
-
|
50
|
-
module.exports = LogData;
|
39
|
+
module.exports = LogData;
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import { StringMap } from '../types';
|
2
|
+
/**
|
3
|
+
* A path template is a string that can be used to match a path and extract variables from it.
|
4
|
+
*
|
5
|
+
* E.g. /foo/{bar}/baz
|
6
|
+
*
|
7
|
+
* Would match /foo/123/baz and extract bar=123
|
8
|
+
*
|
9
|
+
* You can also specify a regex for the variable:
|
10
|
+
* /foo/{bar:[0-9]+}/baz
|
11
|
+
*
|
12
|
+
*/
|
13
|
+
export declare class PathTemplate {
|
14
|
+
private _path;
|
15
|
+
private _parts;
|
16
|
+
constructor(pathTemplate: string);
|
17
|
+
get path(): string;
|
18
|
+
matches(path: string): boolean;
|
19
|
+
parse(path: string): StringMap | null;
|
20
|
+
create(variables: StringMap): string;
|
21
|
+
toString(): string;
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* Parses a path into a RESTPath
|
25
|
+
*/
|
26
|
+
export declare function pathTemplateParser(path: string): PathTemplate;
|
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
1
|
const TYPE_VARIABLE = 'variable';
|
3
2
|
const TYPE_PATH = 'path';
|
4
|
-
|
5
3
|
/**
|
6
4
|
* A path template is a string that can be used to match a path and extract variables from it.
|
7
5
|
*
|
@@ -13,123 +11,106 @@ const TYPE_PATH = 'path';
|
|
13
11
|
* /foo/{bar:[0-9]+}/baz
|
14
12
|
*
|
15
13
|
*/
|
16
|
-
class PathTemplate {
|
14
|
+
export class PathTemplate {
|
15
|
+
_path;
|
16
|
+
_parts = [];
|
17
17
|
constructor(pathTemplate) {
|
18
18
|
if (!pathTemplate.startsWith('/')) {
|
19
19
|
pathTemplate = '/' + pathTemplate;
|
20
20
|
}
|
21
21
|
this._path = pathTemplate;
|
22
|
-
|
23
22
|
const variableRegex = /{([^}]+)}/g;
|
24
23
|
let match, offset = 0;
|
25
24
|
this._parts = [];
|
26
|
-
while((match = variableRegex.exec(pathTemplate)) !== null) {
|
25
|
+
while ((match = variableRegex.exec(pathTemplate)) !== null) {
|
27
26
|
if (match.index > offset) {
|
28
27
|
this._parts.push({
|
29
28
|
type: TYPE_PATH,
|
30
|
-
value: pathTemplate.substring(offset, match.index)
|
29
|
+
value: pathTemplate.substring(offset, match.index),
|
31
30
|
});
|
32
31
|
}
|
33
|
-
|
34
32
|
let regex;
|
35
33
|
let value = match[1];
|
36
34
|
[value, regex] = value.split(/:/, 2);
|
37
|
-
|
38
35
|
if (regex) {
|
39
36
|
regex = new RegExp('^' + regex);
|
40
|
-
} else {
|
41
|
-
regex = /^[^\/]+/
|
42
37
|
}
|
43
|
-
|
38
|
+
else {
|
39
|
+
regex = /^[^\/]+/;
|
40
|
+
}
|
44
41
|
this._parts.push({
|
45
42
|
type: TYPE_VARIABLE,
|
46
43
|
value,
|
47
|
-
regex
|
44
|
+
regex,
|
48
45
|
});
|
49
46
|
offset = match.index + match[0].length;
|
50
47
|
}
|
51
|
-
|
52
48
|
if (offset < pathTemplate.length) {
|
53
49
|
this._parts.push({
|
54
50
|
type: TYPE_PATH,
|
55
|
-
value: pathTemplate.substring(offset)
|
51
|
+
value: pathTemplate.substring(offset),
|
56
52
|
});
|
57
53
|
}
|
58
54
|
}
|
59
|
-
|
60
55
|
get path() {
|
61
56
|
return this._path;
|
62
57
|
}
|
63
|
-
|
64
58
|
matches(path) {
|
65
59
|
return this.parse(path) !== null;
|
66
60
|
}
|
67
|
-
|
68
61
|
parse(path) {
|
69
62
|
if (!path.startsWith('/')) {
|
70
63
|
path = '/' + path;
|
71
64
|
}
|
72
|
-
|
73
65
|
const values = {};
|
74
|
-
|
75
|
-
for(let i = 0 ; i < this._parts.length; i++) {
|
66
|
+
for (let i = 0; i < this._parts.length; i++) {
|
76
67
|
const part = this._parts[i];
|
77
68
|
switch (part.type) {
|
78
69
|
case TYPE_PATH:
|
79
70
|
if (!path.startsWith(part.value)) {
|
80
71
|
return null;
|
81
72
|
}
|
82
|
-
|
83
73
|
path = path.substring(part.value.length);
|
84
74
|
break;
|
85
75
|
case TYPE_VARIABLE:
|
86
|
-
if (!part.regex
|
76
|
+
if (!part.regex?.test(path)) {
|
87
77
|
return null;
|
88
78
|
}
|
89
|
-
|
90
|
-
const newPath = path.replace(part.regex,'');
|
79
|
+
const newPath = path.replace(part.regex, '');
|
91
80
|
const value = path.substr(0, path.length - newPath.length);
|
92
81
|
values[part.value] = value;
|
93
82
|
path = newPath;
|
94
83
|
break;
|
95
84
|
}
|
96
85
|
}
|
97
|
-
|
98
86
|
if (path && path !== '/') {
|
99
87
|
//We did not match all of it
|
100
88
|
return null;
|
101
89
|
}
|
102
|
-
|
103
90
|
return values;
|
104
91
|
}
|
105
|
-
|
106
92
|
create(variables) {
|
107
|
-
return this._parts
|
93
|
+
return this._parts
|
94
|
+
.map((part) => {
|
108
95
|
switch (part.type) {
|
109
96
|
case TYPE_PATH:
|
110
97
|
return part.value;
|
111
98
|
case TYPE_VARIABLE:
|
112
|
-
if (variables[part.value] === undefined ||
|
113
|
-
|
114
|
-
return ''
|
99
|
+
if (variables[part.value] === undefined || variables[part.value] === null) {
|
100
|
+
return '';
|
115
101
|
}
|
116
|
-
|
117
102
|
return variables[part.value];
|
118
103
|
}
|
119
|
-
})
|
104
|
+
})
|
105
|
+
.join('');
|
120
106
|
}
|
121
|
-
|
122
107
|
toString() {
|
123
|
-
return 'tmpl: ' + this.path
|
108
|
+
return 'tmpl: ' + this.path;
|
124
109
|
}
|
125
110
|
}
|
126
|
-
|
127
111
|
/**
|
128
112
|
* Parses a path into a RESTPath
|
129
|
-
* @param {string} path
|
130
113
|
*/
|
131
|
-
function pathTemplateParser(path) {
|
114
|
+
export function pathTemplateParser(path) {
|
132
115
|
return new PathTemplate(path);
|
133
116
|
}
|
134
|
-
|
135
|
-
module.exports = pathTemplateParser;
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function readYML(path: string): any;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import FS from 'node:fs';
|
2
|
+
import YAML from 'yaml';
|
3
|
+
export function readYML(path) {
|
4
|
+
const rawYaml = FS.readFileSync(path);
|
5
|
+
try {
|
6
|
+
return YAML.parse(rawYaml.toString());
|
7
|
+
}
|
8
|
+
catch (err) {
|
9
|
+
throw new Error('Failed to parse plan YAML: ' + err);
|
10
|
+
}
|
11
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import localClusterService from './index';
|
2
|
+
localClusterService
|
3
|
+
.start()
|
4
|
+
.then(({ host, port }) => console.log('Listening on port %s:%s', host, port))
|
5
|
+
.catch((e) => {
|
6
|
+
console.error('Failed to start local cluster due to an error:\n\t - %s', e.toString());
|
7
|
+
});
|
package/index.ts
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
import { clusterService } from './src/clusterService';
|
2
|
+
import { storageService } from './src/storageService';
|
3
|
+
import { serviceManager } from './src/serviceManager';
|
4
|
+
import { socketManager } from './src/socketManager';
|
5
|
+
import { containerManager } from './src/containerManager';
|
6
|
+
import express from 'express';
|
7
|
+
import HTTP from 'http';
|
8
|
+
import { Server } from 'socket.io';
|
9
|
+
|
10
|
+
import TrafficRoutes from './src/traffic/routes';
|
11
|
+
import ProxyRoutes from './src/proxy/routes';
|
12
|
+
import ConfigRoutes from './src/config/routes';
|
13
|
+
import InstancesRoutes from './src/instances/routes';
|
14
|
+
import IdentitiesRoutes from './src/identities/routes';
|
15
|
+
import FilesystemRoutes from './src/filesystem/routes';
|
16
|
+
import AssetsRoutes from './src/assets/routes';
|
17
|
+
import ProviderRoutes from './src/providers/routes';
|
18
|
+
|
19
|
+
export type LocalClusterService = HTTP.Server & { host?: string; port?: number };
|
20
|
+
|
21
|
+
export type StartResult = { host: string; port: number; dockerStatus: boolean };
|
22
|
+
|
23
|
+
let currentServer: LocalClusterService | null = null;
|
24
|
+
|
25
|
+
function createServer() {
|
26
|
+
const app = express();
|
27
|
+
app.use('/traffic', TrafficRoutes);
|
28
|
+
app.use('/proxy', ProxyRoutes);
|
29
|
+
app.use('/config', ConfigRoutes);
|
30
|
+
app.use('/instances', InstancesRoutes);
|
31
|
+
app.use('/identities', IdentitiesRoutes);
|
32
|
+
app.use('/files', FilesystemRoutes);
|
33
|
+
app.use('/assets', AssetsRoutes);
|
34
|
+
app.use('/providers', ProviderRoutes);
|
35
|
+
app.use('/', (err: any, req: express.Request, res: express.Response) => {
|
36
|
+
console.error('Request failed: %s %s', req.method, req.originalUrl, err);
|
37
|
+
res.status(500).send({
|
38
|
+
ok: false,
|
39
|
+
error: err.error ?? err.message,
|
40
|
+
});
|
41
|
+
});
|
42
|
+
const server = HTTP.createServer(app);
|
43
|
+
|
44
|
+
//socket
|
45
|
+
const io = new Server(server, {
|
46
|
+
cors: {
|
47
|
+
//TODO: This should'nt be hardcoded but also shouldn't be "*"
|
48
|
+
origin: 'http://localhost:8080',
|
49
|
+
},
|
50
|
+
});
|
51
|
+
socketManager.setIo(io);
|
52
|
+
return server;
|
53
|
+
}
|
54
|
+
|
55
|
+
export default {
|
56
|
+
isRunning: function () {
|
57
|
+
return !!currentServer;
|
58
|
+
},
|
59
|
+
|
60
|
+
getCurrentPort: function () {
|
61
|
+
if (!currentServer) {
|
62
|
+
return -1;
|
63
|
+
}
|
64
|
+
|
65
|
+
return currentServer.port;
|
66
|
+
},
|
67
|
+
|
68
|
+
/**
|
69
|
+
* Starts the local cluster service.
|
70
|
+
* resolves when listening is done with port number. Rejects if listening failed.
|
71
|
+
*/
|
72
|
+
start: async function (): Promise<StartResult> {
|
73
|
+
if (currentServer) {
|
74
|
+
throw new Error('Server already started');
|
75
|
+
}
|
76
|
+
|
77
|
+
try {
|
78
|
+
await containerManager.initialize();
|
79
|
+
} catch (e: any) {
|
80
|
+
console.error(
|
81
|
+
'Could not ping docker runtime: ' + e.toString() + '. Make sure docker is running and working.'
|
82
|
+
);
|
83
|
+
}
|
84
|
+
|
85
|
+
const clusterPort = storageService.get('cluster', 'port');
|
86
|
+
if (clusterPort) {
|
87
|
+
clusterService.setClusterServicePort(clusterPort);
|
88
|
+
}
|
89
|
+
|
90
|
+
const clusterHost = storageService.get('cluster', 'host');
|
91
|
+
if (clusterHost) {
|
92
|
+
clusterService.setClusterServiceHost(clusterHost);
|
93
|
+
}
|
94
|
+
|
95
|
+
await clusterService.init();
|
96
|
+
|
97
|
+
currentServer = createServer();
|
98
|
+
|
99
|
+
const port = clusterService.getClusterServicePort();
|
100
|
+
|
101
|
+
const host = clusterService.getClusterServiceHost();
|
102
|
+
|
103
|
+
if (clusterPort !== port) {
|
104
|
+
storageService.put('cluster', 'port', port);
|
105
|
+
}
|
106
|
+
|
107
|
+
if (clusterHost !== host) {
|
108
|
+
storageService.put('cluster', 'host', host);
|
109
|
+
}
|
110
|
+
|
111
|
+
return new Promise((resolve, reject) => {
|
112
|
+
if (!currentServer) {
|
113
|
+
reject(new Error(`Current server wasn't set`));
|
114
|
+
return;
|
115
|
+
}
|
116
|
+
currentServer.once('error', (err) => {
|
117
|
+
if (currentServer) {
|
118
|
+
currentServer.close();
|
119
|
+
currentServer = null;
|
120
|
+
}
|
121
|
+
reject(err);
|
122
|
+
});
|
123
|
+
|
124
|
+
currentServer.listen(port, host, () => resolve({ host, port, dockerStatus: containerManager.isAlive() }));
|
125
|
+
currentServer.host = host;
|
126
|
+
currentServer.port = port;
|
127
|
+
});
|
128
|
+
},
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Stops any currently running cluster services.
|
132
|
+
* @return {Promise<boolean>} Returns true if the service was stopped - false if no service was running.
|
133
|
+
*/
|
134
|
+
stop: function () {
|
135
|
+
if (currentServer) {
|
136
|
+
return new Promise(function (resolve) {
|
137
|
+
if (currentServer) {
|
138
|
+
currentServer.close(() => resolve(true));
|
139
|
+
currentServer = null;
|
140
|
+
}
|
141
|
+
});
|
142
|
+
}
|
143
|
+
|
144
|
+
return Promise.resolve(false);
|
145
|
+
},
|
146
|
+
getServices: () => serviceManager.getServices(),
|
147
|
+
};
|
package/package.json
CHANGED
@@ -1,77 +1,109 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
"url": "https://github.com/kapetacom/local-cluster-service/issues"
|
17
|
-
},
|
18
|
-
"scripts": {
|
19
|
-
"start": "nodemon start.js",
|
20
|
-
"test": "echo its fine"
|
21
|
-
},
|
22
|
-
"homepage": "https://github.com/kapetacom/local-cluster-service#readme",
|
23
|
-
"dependencies": {
|
24
|
-
"@kapeta/codegen": "<2",
|
25
|
-
"@kapeta/local-cluster-config": ">= 0.2.3 <2",
|
26
|
-
"@kapeta/nodejs-api-client": "<2",
|
27
|
-
"@kapeta/nodejs-registry-utils": "<2",
|
28
|
-
"@kapeta/nodejs-utils": "<2",
|
29
|
-
"@kapeta/sdk-config": "<2",
|
30
|
-
"express": "4.17.1",
|
31
|
-
"express-promise-router": "^4.1.1",
|
32
|
-
"fs-extra": "^11.1.0",
|
33
|
-
"glob": "7.1.6",
|
34
|
-
"lodash": "^4.17.15",
|
35
|
-
"md5": "2.2.1",
|
36
|
-
"mkdirp": "0.5.1",
|
37
|
-
"node-cache": "^5.1.2",
|
38
|
-
"node-docker-api": "1.1.22",
|
39
|
-
"node-uuid": "^1.4.8",
|
40
|
-
"request": "2.88.2",
|
41
|
-
"request-promise": "4.2.6",
|
42
|
-
"socket.io": "^4.5.2",
|
43
|
-
"yaml": "^1.6.0"
|
44
|
-
},
|
45
|
-
"devDependencies": {
|
46
|
-
"nodemon": "^2.0.2"
|
47
|
-
},
|
48
|
-
"prettier": {
|
49
|
-
"tabWidth": 4,
|
50
|
-
"singleQuote": true
|
51
|
-
},
|
52
|
-
"release": {
|
53
|
-
"plugins": [
|
54
|
-
"@semantic-release/commit-analyzer",
|
55
|
-
"@semantic-release/release-notes-generator",
|
56
|
-
[
|
57
|
-
"@semantic-release/changelog",
|
58
|
-
{
|
59
|
-
"changelogFile": "CHANGELOG.md"
|
2
|
+
"name": "@kapeta/local-cluster-service",
|
3
|
+
"version": "0.7.0",
|
4
|
+
"description": "Manages configuration, ports and service discovery for locally running Kapeta systems",
|
5
|
+
"type": "commonjs",
|
6
|
+
"exports": {
|
7
|
+
".": {
|
8
|
+
"import": {
|
9
|
+
"types": "./dist/esm/index.d.ts",
|
10
|
+
"default": "./dist/esm/index.js"
|
11
|
+
},
|
12
|
+
"require": {
|
13
|
+
"types": "./dist/cjs/index.d.cts",
|
14
|
+
"default": "./dist/cjs/index.js"
|
15
|
+
}
|
60
16
|
}
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
"
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
17
|
+
},
|
18
|
+
"types": "./dist/esm/index.d.ts",
|
19
|
+
"main": "./dist/cjs/index.js",
|
20
|
+
"repository": {
|
21
|
+
"type": "git",
|
22
|
+
"url": "git+https://github.com/kapetacom/local-cluster-service.git"
|
23
|
+
},
|
24
|
+
"keywords": [
|
25
|
+
"kapeta"
|
26
|
+
],
|
27
|
+
"author": "Henrik Hofmeister <hh@kapeta.com>",
|
28
|
+
"license": "MIT",
|
29
|
+
"bugs": {
|
30
|
+
"url": "https://github.com/kapetacom/local-cluster-service/issues"
|
31
|
+
},
|
32
|
+
"scripts": {
|
33
|
+
"start": "node ./dist/cjs/start.js",
|
34
|
+
"dev": "nodemon -e js,ts,json ts-node --transpile-only ./start.ts",
|
35
|
+
"test": "echo its fine",
|
36
|
+
"clean": "rm -rf ./dist",
|
37
|
+
"build:esm": "tsc --module esnext --outDir ./dist/esm && echo '{\"type\":\"module\"}' > ./dist/esm/package.json",
|
38
|
+
"build:cjs": "tsc --module commonjs --outDir ./dist/cjs && echo '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json",
|
39
|
+
"build": "npm run clean && npm run build:esm && npm run build:cjs",
|
40
|
+
"format": "prettier --write .",
|
41
|
+
"lint": "tsc --noEmit && eslint src/**/*.ts",
|
42
|
+
"prepublishOnly": "npm run build"
|
43
|
+
},
|
44
|
+
"homepage": "https://github.com/kapetacom/local-cluster-service#readme",
|
45
|
+
"dependencies": {
|
46
|
+
"@kapeta/codegen": "<2",
|
47
|
+
"@kapeta/local-cluster-config": ">= 0.2.3 <2",
|
48
|
+
"@kapeta/nodejs-api-client": "<2",
|
49
|
+
"@kapeta/nodejs-registry-utils": "<2",
|
50
|
+
"@kapeta/nodejs-utils": "<2",
|
51
|
+
"@kapeta/schemas": "^0.0.58",
|
52
|
+
"@kapeta/sdk-config": "<2",
|
53
|
+
"express": "4.17.1",
|
54
|
+
"express-promise-router": "^4.1.1",
|
55
|
+
"fs-extra": "^11.1.0",
|
56
|
+
"glob": "7.1.6",
|
57
|
+
"lodash": "^4.17.15",
|
58
|
+
"md5": "2.2.1",
|
59
|
+
"node-cache": "^5.1.2",
|
60
|
+
"node-docker-api": "1.1.22",
|
61
|
+
"node-uuid": "^1.4.8",
|
62
|
+
"request": "2.88.2",
|
63
|
+
"request-promise": "4.2.6",
|
64
|
+
"socket.io": "^4.5.2",
|
65
|
+
"ts-node": "^10.9.1",
|
66
|
+
"typescript": "^5.1.6",
|
67
|
+
"yaml": "^1.6.0"
|
68
|
+
},
|
69
|
+
"devDependencies": {
|
70
|
+
"@kapeta/prettier-config": "^0.6.0",
|
71
|
+
"@tsconfig/node18": "^18.2.0",
|
72
|
+
"@types/express": "^4.17.17",
|
73
|
+
"@types/fs-extra": "^11.0.1",
|
74
|
+
"@types/lodash": "^4.14.195",
|
75
|
+
"@types/md5": "^2.3.2",
|
76
|
+
"@types/node-uuid": "^0.0.29",
|
77
|
+
"@types/request": "^2.48.8",
|
78
|
+
"eslint": "^8.42.0",
|
79
|
+
"eslint-config-prettier": "^8.8.0",
|
80
|
+
"nodemon": "^2.0.2",
|
81
|
+
"prettier": "^2.8.8"
|
82
|
+
},
|
83
|
+
"prettier": "@kapeta/prettier-config",
|
84
|
+
"release": {
|
85
|
+
"plugins": [
|
86
|
+
"@semantic-release/commit-analyzer",
|
87
|
+
"@semantic-release/release-notes-generator",
|
88
|
+
[
|
89
|
+
"@semantic-release/changelog",
|
90
|
+
{
|
91
|
+
"changelogFile": "CHANGELOG.md"
|
92
|
+
}
|
93
|
+
],
|
94
|
+
"@semantic-release/npm",
|
95
|
+
"@semantic-release/github",
|
96
|
+
[
|
97
|
+
"@semantic-release/git",
|
98
|
+
{
|
99
|
+
"assets": [
|
100
|
+
"CHANGELOG.md",
|
101
|
+
"package.json",
|
102
|
+
"package-lock.json"
|
103
|
+
],
|
104
|
+
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
105
|
+
}
|
106
|
+
]
|
107
|
+
]
|
108
|
+
}
|
77
109
|
}
|