@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.
Files changed (193) 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 +215 -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/dist/esm/src/config/routes.js +121 -0
  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 +94 -175
  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 +209 -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} +45 -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/config/routes.js +0 -160
  188. package/src/filesystem/routes.js +0 -74
  189. package/src/identities/routes.js +0 -19
  190. package/src/progressListener.js +0 -82
  191. package/src/proxy/routes.js +0 -126
  192. package/src/utils/utils.js +0 -13
  193. package/start.js +0 -7
@@ -0,0 +1,138 @@
1
+ import { StringMap } from '../types';
2
+
3
+ const TYPE_VARIABLE = 'variable';
4
+ const TYPE_PATH = 'path';
5
+
6
+ /**
7
+ * A path template is a string that can be used to match a path and extract variables from it.
8
+ *
9
+ * E.g. /foo/{bar}/baz
10
+ *
11
+ * Would match /foo/123/baz and extract bar=123
12
+ *
13
+ * You can also specify a regex for the variable:
14
+ * /foo/{bar:[0-9]+}/baz
15
+ *
16
+ */
17
+ export class PathTemplate {
18
+ private _path: string;
19
+ private _parts: { type: 'variable' | 'path'; value: string; regex?: RegExp }[] = [];
20
+
21
+ constructor(pathTemplate: string) {
22
+ if (!pathTemplate.startsWith('/')) {
23
+ pathTemplate = '/' + pathTemplate;
24
+ }
25
+ this._path = pathTemplate;
26
+
27
+ const variableRegex = /{([^}]+)}/g;
28
+ let match,
29
+ offset = 0;
30
+ this._parts = [];
31
+ while ((match = variableRegex.exec(pathTemplate)) !== null) {
32
+ if (match.index > offset) {
33
+ this._parts.push({
34
+ type: TYPE_PATH,
35
+ value: pathTemplate.substring(offset, match.index),
36
+ });
37
+ }
38
+
39
+ let regex;
40
+ let value = match[1];
41
+ [value, regex] = value.split(/:/, 2);
42
+
43
+ if (regex) {
44
+ regex = new RegExp('^' + regex);
45
+ } else {
46
+ regex = /^[^\/]+/;
47
+ }
48
+
49
+ this._parts.push({
50
+ type: TYPE_VARIABLE,
51
+ value,
52
+ regex,
53
+ });
54
+ offset = match.index + match[0].length;
55
+ }
56
+
57
+ if (offset < pathTemplate.length) {
58
+ this._parts.push({
59
+ type: TYPE_PATH,
60
+ value: pathTemplate.substring(offset),
61
+ });
62
+ }
63
+ }
64
+
65
+ get path() {
66
+ return this._path;
67
+ }
68
+
69
+ matches(path: string) {
70
+ return this.parse(path) !== null;
71
+ }
72
+
73
+ parse(path: string) {
74
+ if (!path.startsWith('/')) {
75
+ path = '/' + path;
76
+ }
77
+
78
+ const values: StringMap = {};
79
+
80
+ for (let i = 0; i < this._parts.length; i++) {
81
+ const part = this._parts[i];
82
+ switch (part.type) {
83
+ case TYPE_PATH:
84
+ if (!path.startsWith(part.value)) {
85
+ return null;
86
+ }
87
+
88
+ path = path.substring(part.value.length);
89
+ break;
90
+ case TYPE_VARIABLE:
91
+ if (!part.regex?.test(path)) {
92
+ return null;
93
+ }
94
+
95
+ const newPath = path.replace(part.regex, '');
96
+ const value = path.substr(0, path.length - newPath.length);
97
+ values[part.value] = value;
98
+ path = newPath;
99
+ break;
100
+ }
101
+ }
102
+
103
+ if (path && path !== '/') {
104
+ //We did not match all of it
105
+ return null;
106
+ }
107
+
108
+ return values;
109
+ }
110
+
111
+ create(variables: StringMap) {
112
+ return this._parts
113
+ .map((part) => {
114
+ switch (part.type) {
115
+ case TYPE_PATH:
116
+ return part.value;
117
+ case TYPE_VARIABLE:
118
+ if (variables[part.value] === undefined || variables[part.value] === null) {
119
+ return '';
120
+ }
121
+
122
+ return variables[part.value];
123
+ }
124
+ })
125
+ .join('');
126
+ }
127
+
128
+ toString() {
129
+ return 'tmpl: ' + this.path;
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Parses a path into a RESTPath
135
+ */
136
+ export function pathTemplateParser(path: string) {
137
+ return new PathTemplate(path);
138
+ }
@@ -0,0 +1,12 @@
1
+ import FS from 'node:fs';
2
+ import YAML from 'yaml';
3
+
4
+ export function readYML(path: string) {
5
+ const rawYaml = FS.readFileSync(path);
6
+
7
+ try {
8
+ return YAML.parse(rawYaml.toString());
9
+ } catch (err) {
10
+ throw new Error('Failed to parse plan YAML: ' + err);
11
+ }
12
+ }
package/start.ts ADDED
@@ -0,0 +1,8 @@
1
+ import localClusterService from './index';
2
+
3
+ localClusterService
4
+ .start()
5
+ .then(({ host, port }) => console.log('Listening on port %s:%s', host, port))
6
+ .catch((e) => {
7
+ console.error('Failed to start local cluster due to an error:\n\t - %s', e.toString());
8
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "extends": "@tsconfig/node18/tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist",
5
+ "declaration": true,
6
+ "esModuleInterop": true
7
+ },
8
+ "ts-node": {
9
+ "files": true
10
+ },
11
+ "include": ["definitions.d.ts", "src/**/*", "index.ts", "start.ts"],
12
+ "exclude": ["node_modules", "dist"]
13
+ }
package/index.js DELETED
@@ -1,127 +0,0 @@
1
- const clusterService = require('./src/clusterService');
2
- const storageService = require('./src/storageService');
3
- const serviceManager = require('./src/serviceManager');
4
- const socketManager = require('./src/socketManager');
5
- const containerManager = require('./src/containerManager');
6
- const express = require('express');
7
- const HTTP = require('http');
8
- const {Server} = require("socket.io");
9
-
10
- let currentServer = null;
11
-
12
- function createServer() {
13
- const app = express();
14
- app.use('/traffic', require('./src/traffic/routes'));
15
- app.use('/proxy', require('./src/proxy/routes'));
16
- app.use('/config', require('./src/config/routes'));
17
- app.use('/instances', require('./src/instances/routes'));
18
- app.use('/identities', require('./src/identities/routes'));
19
- app.use('/files', require('./src/filesystem/routes'));
20
- app.use('/assets', require('./src/assets/routes'));
21
- app.use('/providers', require('./src/providers/routes'));
22
- app.use('/', (err, req, res, next) => {
23
- console.error('Request failed: %s %s', req.method, req.originalUrl, err);
24
- res.status(500).send({
25
- ok: false,
26
- error: err.error ?? err.message
27
- })
28
- });
29
- const server = HTTP.createServer(app);
30
-
31
- //socket
32
- const io = new Server(server, {
33
- cors: {
34
- //TODO: This should'nt be hardcoded but also shouldn't be "*"
35
- origin: "http://localhost:8080"
36
- }
37
- });
38
- socketManager.setIo(io);
39
- return server;
40
- }
41
-
42
- module.exports = {
43
-
44
- isRunning: function() {
45
- return !!currentServer;
46
- },
47
-
48
- getCurrentPort: function() {
49
- if (!currentServer) {
50
- return -1;
51
- }
52
-
53
- return currentServer.port;
54
- },
55
-
56
- /**
57
- * Starts the local cluster service.
58
- * @return {Promise<{ host: string, port: nubmer, dockerStatus: boolean}>} resolves when listening is done with port number. Rejects if listening failed.
59
- */
60
- start: async function() {
61
- if (currentServer) {
62
- throw new Error('Server already started');
63
- }
64
-
65
- try {
66
- await containerManager.initialize()
67
- } catch (e) {
68
- console.error('Could not ping docker runtime: ' + e.toString() + '. Make sure docker is running and working.');
69
- }
70
-
71
- const clusterPort = storageService.get('cluster','port');
72
- if (clusterPort) {
73
- clusterService.setClusterServicePort(clusterPort);
74
- }
75
-
76
- const clusterHost = storageService.get('cluster','host');
77
- if (clusterHost) {
78
- clusterService.setClusterServiceHost(clusterHost);
79
- }
80
-
81
- await clusterService.init();
82
-
83
- currentServer = createServer();
84
-
85
- const port = clusterService.getClusterServicePort();
86
-
87
- const host = clusterService.getClusterServiceHost();
88
-
89
- if (clusterPort !== port) {
90
- storageService.put('cluster','port', port);
91
- }
92
-
93
- if (clusterHost !== host) {
94
- storageService.put('cluster','host', host);
95
- }
96
-
97
- return new Promise((resolve, reject) => {
98
-
99
- currentServer.once('error', (err) => {
100
- currentServer.close();
101
- currentServer = null;
102
- reject(err);
103
- });
104
-
105
- currentServer.listen(port, host, () => resolve({host,port, dockerStatus: containerManager.isAlive()}));
106
- currentServer.host = host;
107
- currentServer.port = port;
108
- });
109
- },
110
-
111
- /**
112
- * Stops any currently running cluster services.
113
- * @return {Promise<boolean>} Returns true if the service was stopped - false if no service was running.
114
- */
115
- stop: function() {
116
- if (currentServer) {
117
- return new Promise(function(resolve) {
118
- currentServer.close(() => resolve(true));
119
- currentServer = null;
120
- });
121
- }
122
-
123
- return Promise.resolve(false);
124
- },
125
- getServices: () => serviceManager.getServices()
126
- };
127
-
@@ -1,160 +0,0 @@
1
- const Router = require('express-promise-router').default;
2
- const configManager = require('../configManager');
3
- const serviceManager = require('../serviceManager');
4
- const operatorManager = require('../operatorManager');
5
-
6
- const router = new Router();
7
- const SYSTEM_ID = '$plan';
8
-
9
- router.use('/', require('../middleware/cors'));
10
- router.use('/', require('../middleware/kapeta'));
11
- router.use('/', require('../middleware/stringBody'));
12
-
13
- /**
14
- * Returns the full configuration for a given service.
15
- */
16
- router.get('/instance', (req, res) => {
17
-
18
- const config = req.kapeta.instanceId ?
19
- configManager.getConfigForSection(req.kapeta.systemId, req.kapeta.instanceId) :
20
- configManager.getConfigForSystem(req.kapeta.systemId);
21
-
22
- res.send(config);
23
- });
24
-
25
- /**
26
- * Updates the full configuration for a given service.
27
- */
28
- router.put('/instance', (req, res) => {
29
-
30
- let config = JSON.parse(req.stringBody);
31
- if (!config) {
32
- config = {};
33
- }
34
-
35
- if (req.kapeta.instanceId) {
36
- configManager.setConfigForSection(
37
- req.kapeta.systemId,
38
- req.kapeta.instanceId,
39
- config
40
- );
41
- } else {
42
- configManager.setConfigForSystem(
43
- req.kapeta.systemId,
44
- config
45
- );
46
- }
47
-
48
- res.status(202).send({ok:true});
49
- });
50
-
51
- /**
52
- * Returns the full configuration for a plan
53
- */
54
- router.get('/system', (req, res) => {
55
- const config = configManager.getConfigForSection(req.kapeta.systemId, SYSTEM_ID);
56
-
57
- res.send(config);
58
- });
59
-
60
- /**
61
- * Updates the full configuration for a plan
62
- */
63
- router.put('/system', (req, res) => {
64
-
65
- let config = JSON.parse(req.stringBody);
66
- if (!config) {
67
- config = {};
68
- }
69
- configManager.setConfigForSection(
70
- req.kapeta.systemId,
71
- SYSTEM_ID,
72
- config
73
- );
74
- res.status(202).send({ok:true});
75
- });
76
-
77
-
78
- /**
79
- * Resolves and checks the identity of a block instance
80
- */
81
- router.get('/identity', async (req, res) => {
82
-
83
-
84
- const identity = {
85
- systemId: req.kapeta.systemId,
86
- instanceId: req.kapeta.instanceId
87
- };
88
-
89
- if (!req.kapeta.blockRef) {
90
- res.status(400).send({error: 'Missing required header "X-Kapeta-Block"'});
91
- return;
92
- }
93
-
94
- try {
95
-
96
- if (!identity.systemId ||
97
- !identity.instanceId) {
98
- const {systemId, instanceId} = await configManager.resolveIdentity(req.kapeta.blockRef, identity.systemId);
99
- identity.systemId = systemId;
100
- identity.instanceId = instanceId;
101
- } else {
102
- await configManager.verifyIdentity(req.kapeta.blockRef, identity.systemId, identity.instanceId);
103
- }
104
-
105
- res.send(identity);
106
- } catch(err) {
107
- console.warn('Failed to resolve identity', err);
108
- res.status(400).send({error: err.message});
109
- }
110
- });
111
-
112
- /**
113
- * Services call this to request a free port. If a service has
114
- * already called the endpoint the same port is returned.
115
- */
116
- router.get('/provides/:type', async (req, res) => {
117
- //Get service port
118
- res.send('' + await serviceManager.ensureServicePort(
119
- req.kapeta.systemId,
120
- req.kapeta.instanceId,
121
- req.params.type
122
- ));
123
- });
124
-
125
- /**
126
- * Used by services to get info for consumed operator resource.
127
- *
128
- * If the operator resource is not already available this will cause it to start an instance and
129
- * assign port numbers to it etc.
130
- */
131
- router.get('/consumes/resource/:resourceType/:portType/:name', async (req, res) => {
132
- const operatorInfo = await operatorManager.getConsumerResourceInfo(
133
- req.kapeta.systemId,
134
- req.kapeta.instanceId,
135
- req.params.resourceType,
136
- req.params.portType,
137
- req.params.name,
138
- req.kapeta.environment
139
- );
140
-
141
- res.send(operatorInfo);
142
- });
143
-
144
- /**
145
- * Used by services to get address for their clients.
146
- *
147
- * If the remote service is not already registered with a port - we do that here
148
- * to handle clients for services that hasn't started yet.
149
- */
150
- router.get('/consumes/:resourceName/:type', (req, res) => {
151
- res.send(serviceManager.getConsumerAddress(
152
- req.kapeta.systemId,
153
- req.kapeta.instanceId,
154
- req.params.resourceName,
155
- req.params.type,
156
- req.kapeta.environment,
157
- ));
158
- });
159
-
160
- module.exports = router;
@@ -1,74 +0,0 @@
1
- const Router = require('express-promise-router').default;
2
- const stringBodyMiddleware = require('../middleware/stringBody');
3
- const fileManager = require('../filesystemManager');
4
-
5
- let router = new Router();
6
-
7
- router.use('/', require('../middleware/cors'));
8
-
9
- router.get('/root', (req, res) => {
10
- res.send(fileManager.getRootFolder());
11
- });
12
-
13
- router.get('/project/root', (req, res) => {
14
- res.send(fileManager.getProjectRootFolder());
15
- });
16
-
17
- router.use('/project/root', stringBodyMiddleware);
18
- router.post('/project/root', (req, res) => {
19
- fileManager.setProjectRootFolder(req.stringBody);
20
- res.sendStatus(204);
21
- });
22
-
23
-
24
- router.use("/",(req,res,next)=>{
25
- if (!req.query.path) {
26
- res.status(400).send({ error: 'Missing required query parameter "path"' });
27
- return;
28
- }
29
- next();
30
- });
31
-
32
-
33
- router.get('/list', async (req, res) => {
34
- let pathArg = req.query.path;
35
-
36
- try {
37
- res.send(await fileManager.readDirectory(pathArg))
38
- } catch (err) {
39
- res.status(400).send({error:''+err});
40
- }
41
-
42
- });
43
-
44
- router.get('/readfile', async (req, res) => {
45
- let pathArg = req.query.path;
46
- try {
47
- res.send(await fileManager.readFile(pathArg));
48
- } catch (err) {
49
- res.status(400).send({error:''+err});
50
- }
51
- });
52
-
53
- router.put('/mkdir', async (req, res) => {
54
- let pathArg = req.query.path;
55
- try {
56
- await fileManager.createFolder(pathArg);
57
- res.sendStatus(204);
58
- } catch (err) {
59
- res.status(400).send({error:''+err});
60
- }
61
- });
62
-
63
- router.use('/writefile', stringBodyMiddleware);
64
- router.post('/writefile', async (req, res) => {
65
- let pathArg = req.query.path;
66
- try {
67
- await fileManager.writeFile(pathArg, req.stringBody);
68
- res.sendStatus(204);
69
- } catch (err) {
70
- res.status(400).send({error:''+err});
71
- }
72
- });
73
-
74
- module.exports = router;
@@ -1,19 +0,0 @@
1
- const Router = require('express-promise-router').default;
2
- const {KapetaAPI} = require('@kapeta/nodejs-api-client');
3
-
4
- const instanceManager = require('../instanceManager');
5
-
6
- const router = new Router();
7
- const api = new KapetaAPI();
8
-
9
- router.use('/', require('../middleware/cors'));
10
-
11
- router.get('/current', async (req, res) => {
12
- res.send(await api.getCurrentIdentity());
13
- });
14
-
15
- router.get('/:identityId/memberships', async (req, res) => {
16
- res.send(await api.getMemberships(req.params.identityId));
17
- });
18
-
19
- module.exports = router;
@@ -1,82 +0,0 @@
1
- const {spawn} = require("child_process");
2
- const socketManager = require("./socketManager");
3
- /**
4
- *
5
- * @type {ProgressListener}
6
- */
7
- module.exports = {
8
- run: (command, directory) => {
9
- socketManager.emit(
10
- `install`,
11
- 'install:log',
12
- {
13
- type: 'info',
14
- message: `Running command "${command}"`
15
- }
16
- );
17
-
18
- return new Promise((resolve, reject) => {
19
- const child = spawn(command, {
20
- cwd: directory ? directory : process.cwd(),
21
- detached: true,
22
- shell: true
23
- });
24
-
25
- child.stdout.on('data', (data) => {
26
- socketManager.emit(`install`, 'install:log', {type: 'info', message: data.toString()});
27
- });
28
-
29
- child.stderr.on('data', (data) => {
30
- socketManager.emit(`install`, 'install:log', {type: 'info', message: data.toString()});
31
- });
32
-
33
- child.on('exit', (exit, signal) => {
34
- if (exit !== 0) {
35
- socketManager.emit(`install`, 'install:log', {type: 'info', message: `"${command}" failed: "${exit}"`});
36
- reject(new Error(`Command "${command}" exited with code ${exit}`));
37
- } else {
38
- socketManager.emit(`install`, 'install:log', {type: 'info', message: `Command OK: "${command}"`});
39
- resolve({exit, signal});
40
- }
41
- });
42
-
43
- child.on('error', (err) => {
44
- socketManager.emit(`install`, 'install:log', {type: 'info', message: `"${command}" failed: "${err.message}"`});
45
- reject(err);
46
- });
47
- });
48
- },
49
- progress: async (label, callback) => {
50
- socketManager.emit(`install`, 'install:log', {type: 'info', message: `${label}: started`});
51
- try {
52
- const result = await callback();
53
- socketManager.emit(`install`, 'install:log', {type: 'info', message: `${label}: done`});
54
- return result;
55
- } catch (e) {
56
- socketManager.emit(`install`, 'install:log', {type: 'info', message: `${label}: failed. ${e.message}`});
57
- throw e;
58
- }
59
- },
60
- check: async (message, ok) => {
61
- const wasOk = await ok;
62
- socketManager.emit(`install`, 'install:log', {type: 'info', message: `${message}: ${wasOk}`});
63
- },
64
- start: (label) => {
65
- socketManager.emit(`install`, 'install:log', {type: 'info', message: label});
66
- },
67
- showValue: (label, value) => {
68
- socketManager.emit(`install`, 'install:log', {type: 'info', message: `${label}: ${value}`});
69
- },
70
- error: (msg, ...args) => {
71
- socketManager.emit(`install`, 'install:log', {type: 'error', message: msg});
72
- },
73
- warn: (msg, ...args) => {
74
- socketManager.emit(`install`, 'install:log', {type: 'warn', message: msg});
75
- },
76
- info: (msg, ...args) => {
77
- socketManager.emit(`install`, 'install:log', {type: 'info', message: msg});
78
- },
79
- debug: (msg, ...args) => {
80
- socketManager.emit(`install`, 'install:log', {type: 'debug', message: msg});
81
- },
82
- }