@kapeta/local-cluster-service 0.6.1 → 0.7.1

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 (192) hide show
  1. package/.eslintrc.cjs +17 -0
  2. package/.github/workflows/main.yml +22 -22
  3. package/.prettierignore +4 -0
  4. package/.vscode/launch.json +2 -4
  5. package/CHANGELOG.md +14 -0
  6. package/definitions.d.ts +17 -35
  7. package/dist/cjs/index.d.ts +27 -0
  8. package/dist/cjs/index.js +126 -0
  9. package/dist/cjs/package.json +1 -0
  10. package/dist/cjs/src/assetManager.d.ts +31 -0
  11. package/dist/cjs/src/assetManager.js +153 -0
  12. package/dist/cjs/src/assets/routes.d.ts +3 -0
  13. package/dist/cjs/src/assets/routes.js +117 -0
  14. package/dist/cjs/src/clusterService.d.ts +40 -0
  15. package/dist/cjs/src/clusterService.js +114 -0
  16. package/dist/cjs/src/codeGeneratorManager.d.ts +8 -0
  17. package/dist/cjs/src/codeGeneratorManager.js +53 -0
  18. package/dist/cjs/src/config/routes.d.ts +3 -0
  19. package/dist/cjs/src/config/routes.js +126 -0
  20. package/dist/cjs/src/configManager.d.ts +36 -0
  21. package/dist/cjs/src/configManager.js +110 -0
  22. package/dist/cjs/src/containerManager.d.ts +89 -0
  23. package/dist/cjs/src/containerManager.js +365 -0
  24. package/dist/cjs/src/filesystem/routes.d.ts +3 -0
  25. package/dist/cjs/src/filesystem/routes.js +69 -0
  26. package/dist/cjs/src/filesystemManager.d.ts +15 -0
  27. package/dist/cjs/src/filesystemManager.js +87 -0
  28. package/dist/cjs/src/identities/routes.d.ts +3 -0
  29. package/dist/cjs/src/identities/routes.js +18 -0
  30. package/dist/cjs/src/instanceManager.d.ts +56 -0
  31. package/dist/cjs/src/instanceManager.js +424 -0
  32. package/dist/cjs/src/instances/routes.d.ts +3 -0
  33. package/dist/cjs/src/instances/routes.js +134 -0
  34. package/dist/cjs/src/middleware/cors.d.ts +2 -0
  35. package/dist/cjs/src/middleware/cors.js +10 -0
  36. package/dist/cjs/src/middleware/kapeta.d.ts +11 -0
  37. package/dist/cjs/src/middleware/kapeta.js +17 -0
  38. package/dist/cjs/src/middleware/stringBody.d.ts +5 -0
  39. package/dist/cjs/src/middleware/stringBody.js +14 -0
  40. package/dist/cjs/src/networkManager.d.ts +32 -0
  41. package/dist/cjs/src/networkManager.js +109 -0
  42. package/dist/cjs/src/operatorManager.d.ts +36 -0
  43. package/dist/cjs/src/operatorManager.js +165 -0
  44. package/dist/cjs/src/progressListener.d.ts +20 -0
  45. package/dist/cjs/src/progressListener.js +91 -0
  46. package/dist/cjs/src/providerManager.d.ts +9 -0
  47. package/dist/cjs/src/providerManager.js +51 -0
  48. package/dist/cjs/src/providers/routes.d.ts +3 -0
  49. package/dist/cjs/src/providers/routes.js +42 -0
  50. package/dist/cjs/src/proxy/routes.d.ts +3 -0
  51. package/dist/cjs/src/proxy/routes.js +111 -0
  52. package/dist/cjs/src/proxy/types/rest.d.ts +4 -0
  53. package/dist/cjs/src/proxy/types/rest.js +114 -0
  54. package/dist/cjs/src/proxy/types/web.d.ts +4 -0
  55. package/dist/cjs/src/proxy/types/web.js +53 -0
  56. package/dist/cjs/src/repositoryManager.d.ts +17 -0
  57. package/dist/cjs/src/repositoryManager.js +218 -0
  58. package/dist/cjs/src/serviceManager.d.ts +29 -0
  59. package/dist/cjs/src/serviceManager.js +99 -0
  60. package/dist/cjs/src/socketManager.d.ts +14 -0
  61. package/dist/cjs/src/socketManager.js +53 -0
  62. package/dist/cjs/src/storageService.d.ts +17 -0
  63. package/dist/cjs/src/storageService.js +74 -0
  64. package/dist/cjs/src/traffic/routes.d.ts +3 -0
  65. package/dist/cjs/src/traffic/routes.js +18 -0
  66. package/dist/cjs/src/types.d.ts +88 -0
  67. package/dist/cjs/src/types.js +2 -0
  68. package/dist/cjs/src/utils/BlockInstanceRunner.d.ts +29 -0
  69. package/dist/cjs/src/utils/BlockInstanceRunner.js +468 -0
  70. package/dist/cjs/src/utils/LogData.d.ts +19 -0
  71. package/dist/cjs/src/utils/LogData.js +43 -0
  72. package/dist/cjs/src/utils/pathTemplateParser.d.ts +26 -0
  73. package/dist/cjs/src/utils/pathTemplateParser.js +121 -0
  74. package/dist/cjs/src/utils/utils.d.ts +1 -0
  75. package/dist/cjs/src/utils/utils.js +18 -0
  76. package/dist/cjs/start.d.ts +1 -0
  77. package/dist/cjs/start.js +12 -0
  78. package/dist/esm/index.d.ts +27 -0
  79. package/dist/esm/index.js +121 -0
  80. package/dist/esm/package.json +1 -0
  81. package/dist/esm/src/assetManager.d.ts +31 -0
  82. package/{src → dist/esm/src}/assetManager.js +22 -60
  83. package/dist/esm/src/assets/routes.d.ts +3 -0
  84. package/{src → dist/esm/src}/assets/routes.js +21 -36
  85. package/dist/esm/src/clusterService.d.ts +40 -0
  86. package/{src → dist/esm/src}/clusterService.js +14 -37
  87. package/dist/esm/src/codeGeneratorManager.d.ts +8 -0
  88. package/{src → dist/esm/src}/codeGeneratorManager.js +15 -24
  89. package/dist/esm/src/config/routes.d.ts +3 -0
  90. package/{src → dist/esm/src}/config/routes.js +40 -89
  91. package/dist/esm/src/configManager.d.ts +36 -0
  92. package/{src → dist/esm/src}/configManager.js +11 -40
  93. package/dist/esm/src/containerManager.d.ts +89 -0
  94. package/{src → dist/esm/src}/containerManager.js +81 -182
  95. package/dist/esm/src/filesystem/routes.d.ts +3 -0
  96. package/dist/esm/src/filesystem/routes.js +64 -0
  97. package/dist/esm/src/filesystemManager.d.ts +15 -0
  98. package/{src → dist/esm/src}/filesystemManager.js +20 -28
  99. package/dist/esm/src/identities/routes.d.ts +3 -0
  100. package/dist/esm/src/identities/routes.js +13 -0
  101. package/dist/esm/src/instanceManager.d.ts +56 -0
  102. package/{src → dist/esm/src}/instanceManager.js +88 -179
  103. package/dist/esm/src/instances/routes.d.ts +3 -0
  104. package/{src → dist/esm/src}/instances/routes.js +31 -70
  105. package/dist/esm/src/middleware/cors.d.ts +2 -0
  106. package/{src → dist/esm/src}/middleware/cors.js +2 -3
  107. package/dist/esm/src/middleware/kapeta.d.ts +11 -0
  108. package/{src → dist/esm/src}/middleware/kapeta.js +3 -7
  109. package/dist/esm/src/middleware/stringBody.d.ts +5 -0
  110. package/{src → dist/esm/src}/middleware/stringBody.js +2 -3
  111. package/dist/esm/src/networkManager.d.ts +32 -0
  112. package/{src → dist/esm/src}/networkManager.js +16 -33
  113. package/dist/esm/src/operatorManager.d.ts +36 -0
  114. package/{src → dist/esm/src}/operatorManager.js +35 -91
  115. package/dist/esm/src/progressListener.d.ts +20 -0
  116. package/dist/esm/src/progressListener.js +88 -0
  117. package/dist/esm/src/providerManager.d.ts +9 -0
  118. package/dist/esm/src/providerManager.js +45 -0
  119. package/dist/esm/src/providers/routes.d.ts +3 -0
  120. package/{src → dist/esm/src}/providers/routes.js +10 -16
  121. package/dist/esm/src/proxy/routes.d.ts +3 -0
  122. package/dist/esm/src/proxy/routes.js +106 -0
  123. package/dist/esm/src/proxy/types/rest.d.ts +4 -0
  124. package/dist/esm/src/proxy/types/rest.js +107 -0
  125. package/dist/esm/src/proxy/types/web.d.ts +4 -0
  126. package/{src → dist/esm/src}/proxy/types/web.js +13 -35
  127. package/dist/esm/src/repositoryManager.d.ts +17 -0
  128. package/dist/esm/src/repositoryManager.js +212 -0
  129. package/dist/esm/src/serviceManager.d.ts +29 -0
  130. package/{src → dist/esm/src}/serviceManager.js +12 -42
  131. package/dist/esm/src/socketManager.d.ts +14 -0
  132. package/{src → dist/esm/src}/socketManager.js +19 -23
  133. package/dist/esm/src/storageService.d.ts +17 -0
  134. package/{src → dist/esm/src}/storageService.js +8 -27
  135. package/dist/esm/src/traffic/routes.d.ts +3 -0
  136. package/{src → dist/esm/src}/traffic/routes.js +4 -9
  137. package/dist/esm/src/types.d.ts +88 -0
  138. package/dist/esm/src/types.js +1 -0
  139. package/dist/esm/src/utils/BlockInstanceRunner.d.ts +29 -0
  140. package/{src → dist/esm/src}/utils/BlockInstanceRunner.js +137 -256
  141. package/dist/esm/src/utils/LogData.d.ts +19 -0
  142. package/{src → dist/esm/src}/utils/LogData.js +11 -22
  143. package/dist/esm/src/utils/pathTemplateParser.d.ts +26 -0
  144. package/{src → dist/esm/src}/utils/pathTemplateParser.js +21 -40
  145. package/dist/esm/src/utils/utils.d.ts +1 -0
  146. package/dist/esm/src/utils/utils.js +11 -0
  147. package/dist/esm/start.d.ts +1 -0
  148. package/dist/esm/start.js +7 -0
  149. package/index.ts +147 -0
  150. package/package.json +106 -74
  151. package/src/assetManager.ts +191 -0
  152. package/src/assets/routes.ts +132 -0
  153. package/src/clusterService.ts +134 -0
  154. package/src/codeGeneratorManager.ts +57 -0
  155. package/src/config/routes.ts +159 -0
  156. package/src/configManager.ts +148 -0
  157. package/src/containerManager.ts +466 -0
  158. package/src/filesystem/routes.ts +74 -0
  159. package/src/filesystemManager.ts +93 -0
  160. package/src/identities/routes.ts +20 -0
  161. package/src/instanceManager.ts +503 -0
  162. package/src/instances/routes.ts +164 -0
  163. package/src/middleware/cors.ts +9 -0
  164. package/src/middleware/kapeta.ts +27 -0
  165. package/src/middleware/stringBody.ts +16 -0
  166. package/src/networkManager.ts +137 -0
  167. package/src/operatorManager.ts +221 -0
  168. package/src/progressListener.ts +102 -0
  169. package/src/{providerManager.js → providerManager.ts} +15 -31
  170. package/src/providers/routes.ts +46 -0
  171. package/src/proxy/routes.ts +148 -0
  172. package/src/proxy/types/{rest.js → rest.ts} +30 -30
  173. package/src/proxy/types/web.ts +60 -0
  174. package/src/{repositoryManager.js → repositoryManager.ts} +49 -73
  175. package/src/serviceManager.ts +120 -0
  176. package/src/socketManager.ts +57 -0
  177. package/src/storageService.ts +88 -0
  178. package/src/traffic/routes.ts +18 -0
  179. package/src/types.ts +97 -0
  180. package/src/utils/BlockInstanceRunner.ts +555 -0
  181. package/src/utils/LogData.ts +47 -0
  182. package/src/utils/pathTemplateParser.ts +138 -0
  183. package/src/utils/utils.ts +12 -0
  184. package/start.ts +8 -0
  185. package/tsconfig.json +13 -0
  186. package/index.js +0 -127
  187. package/src/filesystem/routes.js +0 -74
  188. package/src/identities/routes.js +0 -19
  189. package/src/progressListener.js +0 -82
  190. package/src/proxy/routes.js +0 -126
  191. package/src/utils/utils.js +0 -13
  192. 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
- class LogData {
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 = 'STDOUT') {
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().map(entry => entry.message).join('\n');
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.test(path)) {
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.map((part) => {
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
- variables[part.value] === null ) {
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
- }).join('');
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
- "name": "@kapeta/local-cluster-service",
3
- "version": "0.6.1",
4
- "description": "Manages configuration, ports and service discovery for locally running Kapeta systems",
5
- "main": "index.js",
6
- "repository": {
7
- "type": "git",
8
- "url": "git+https://github.com/kapetacom/local-cluster-service.git"
9
- },
10
- "keywords": [
11
- "kapeta"
12
- ],
13
- "author": "Henrik Hofmeister <hh@kapeta.com>",
14
- "license": "MIT",
15
- "bugs": {
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.1",
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
- "@semantic-release/npm",
63
- "@semantic-release/github",
64
- [
65
- "@semantic-release/git",
66
- {
67
- "assets": [
68
- "CHANGELOG.md",
69
- "package.json",
70
- "package-lock.json"
71
- ],
72
- "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
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
  }