@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
@@ -1,35 +1,31 @@
1
- const Router = require('express-promise-router').default;
2
- const YAML = require('yaml');
3
- const assetManager = require('../assetManager');
4
-
1
+ import Router from 'express-promise-router';
2
+ import YAML from 'yaml';
3
+ import { assetManager } from '../assetManager';
4
+ import { corsHandler } from '../middleware/cors';
5
+ import { stringBody } from '../middleware/stringBody';
5
6
  function parseBody(req) {
6
7
  switch (req.headers['content-type']) {
7
8
  case 'application/json':
8
9
  case 'application/x-json':
9
10
  case 'text/json':
10
- return JSON.parse(req.stringBody);
11
-
11
+ return JSON.parse(req.stringBody ?? '{}');
12
12
  case 'application/yaml':
13
13
  case 'application/x-yaml':
14
14
  case 'text/yaml':
15
15
  case 'text/x-yaml':
16
16
  default:
17
- return YAML.parse(req.stringBody);
17
+ return YAML.parse(req.stringBody ?? '{}');
18
18
  }
19
19
  }
20
-
21
- const router = new Router();
22
-
23
- router.use('/', require('../middleware/cors'));
24
- router.use('/', require('../middleware/stringBody'));
25
-
20
+ const router = Router();
21
+ router.use('/', corsHandler);
22
+ router.use('/', stringBody);
26
23
  /**
27
24
  * Get all local assets available
28
25
  */
29
26
  router.get('/', (req, res) => {
30
27
  res.send(assetManager.getAssets());
31
28
  });
32
-
33
29
  /**
34
30
  * Get single asset
35
31
  */
@@ -38,14 +34,13 @@ router.get('/read', async (req, res) => {
38
34
  res.status(400).send({ error: 'Query parameter "ref" is missing' });
39
35
  return;
40
36
  }
41
-
42
37
  try {
43
38
  res.send(await assetManager.getAsset(req.query.ref, true));
44
- } catch (err) {
39
+ }
40
+ catch (err) {
45
41
  res.status(400).send({ error: err.message });
46
42
  }
47
43
  });
48
-
49
44
  /**
50
45
  * Creates a new local file and registers it as an asset
51
46
  */
@@ -54,19 +49,16 @@ router.post('/create', async (req, res) => {
54
49
  res.status(400).send({ error: 'Query parameter "path" is missing' });
55
50
  return;
56
51
  }
57
-
58
52
  const content = parseBody(req);
59
-
60
53
  try {
61
54
  const assets = await assetManager.createAsset(req.query.path, content);
62
-
63
55
  res.status(200).send(assets);
64
- } catch (err) {
56
+ }
57
+ catch (err) {
65
58
  console.log('Failed while creating asset', req.query.path, err.message);
66
59
  res.status(400).send({ error: err.message });
67
60
  }
68
61
  });
69
-
70
62
  /**
71
63
  * Updates reference with new content
72
64
  */
@@ -75,19 +67,16 @@ router.put('/update', async (req, res) => {
75
67
  res.status(400).send({ error: 'Query parameter "ref" is missing' });
76
68
  return;
77
69
  }
78
-
79
70
  const content = parseBody(req);
80
-
81
71
  try {
82
72
  await assetManager.updateAsset(req.query.ref, content);
83
-
84
73
  res.sendStatus(204);
85
- } catch (err) {
74
+ }
75
+ catch (err) {
86
76
  console.log('Failed while updating asset', req.query.ref, err.message);
87
77
  res.status(400).send({ error: err.message });
88
78
  }
89
79
  });
90
-
91
80
  /**
92
81
  * Unregisters an asset (doesn't delete the asset)
93
82
  */
@@ -96,16 +85,14 @@ router.delete('/', async (req, res) => {
96
85
  res.status(400).send({ error: 'Query parameter "ref" is missing' });
97
86
  return;
98
87
  }
99
-
100
88
  try {
101
89
  await assetManager.unregisterAsset(req.query.ref);
102
-
103
90
  res.status(204).send();
104
- } catch (err) {
91
+ }
92
+ catch (err) {
105
93
  res.status(400).send({ error: err.message });
106
94
  }
107
95
  });
108
-
109
96
  /**
110
97
  * Registers an existing file as an asset
111
98
  */
@@ -114,14 +101,12 @@ router.put('/import', async (req, res) => {
114
101
  res.status(400).send({ error: 'Query parameter "ref" is missing' });
115
102
  return;
116
103
  }
117
-
118
104
  try {
119
105
  const assets = await assetManager.importFile(req.query.ref);
120
-
121
106
  res.status(200).send(assets);
122
- } catch (err) {
107
+ }
108
+ catch (err) {
123
109
  res.status(400).send({ error: err.message });
124
110
  }
125
111
  });
126
-
127
- module.exports = router;
112
+ export default router;
@@ -0,0 +1,40 @@
1
+ declare class ClusterService {
2
+ private _port;
3
+ private _currentPort;
4
+ private _initialized;
5
+ private _reservedPorts;
6
+ private _host;
7
+ constructor();
8
+ reservePort(port: number | string): void;
9
+ init(): Promise<void>;
10
+ _findClusterServicePort(): Promise<void>;
11
+ /**
12
+ * Gets next available port
13
+ * @return {Promise<number>}
14
+ */
15
+ getNextAvailablePort(): Promise<number>;
16
+ _checkIfPortIsUsed(port: number, host?: string): Promise<unknown>;
17
+ /**
18
+ * The port of this local cluster service itself
19
+ */
20
+ getClusterServicePort(): number;
21
+ getClusterServiceHost(): string;
22
+ /**
23
+ * Set the port to be used for this local service
24
+ * @param port
25
+ */
26
+ setClusterServicePort(port: number): void;
27
+ setClusterServiceHost(host: string): void;
28
+ /**
29
+ * Gets that proxy path of a given request
30
+ *
31
+ * @param systemId
32
+ * @param consumerInstanceId
33
+ * @param consumerResourceName
34
+ * @param portType
35
+ * @return {string}
36
+ */
37
+ getProxyPath(systemId: string, consumerInstanceId: string, consumerResourceName: string, portType: string): string;
38
+ }
39
+ export declare const clusterService: ClusterService;
40
+ export {};
@@ -2,9 +2,12 @@ const net = require('net');
2
2
  const DEFAULT_SERVER_PORT = 35100;
3
3
  const DEFAULT_START_PORT = 40000;
4
4
  const DEFAULT_HOST = '127.0.0.1';
5
-
6
5
  class ClusterService {
7
-
6
+ _port;
7
+ _currentPort;
8
+ _initialized;
9
+ _reservedPorts;
10
+ _host;
8
11
  constructor() {
9
12
  this._port = DEFAULT_SERVER_PORT;
10
13
  this._currentPort = DEFAULT_START_PORT;
@@ -12,51 +15,38 @@ class ClusterService {
12
15
  this._reservedPorts = [];
13
16
  this._host = DEFAULT_HOST;
14
17
  }
15
-
16
18
  reservePort(port) {
17
19
  const intPort = parseInt(port);
18
20
  if (this._reservedPorts.indexOf(intPort) > -1) {
19
21
  throw new Error('Port already reserved: ' + intPort);
20
22
  }
21
-
22
23
  this._reservedPorts.push(intPort);
23
24
  }
24
-
25
25
  async init() {
26
26
  if (this._initialized) {
27
27
  return;
28
28
  }
29
-
30
29
  this._initialized = true;
31
30
  await this._findClusterServicePort();
32
-
33
31
  }
34
-
35
32
  async _findClusterServicePort() {
36
- while(true) {
37
-
33
+ while (true) {
38
34
  const isUsed = await this._checkIfPortIsUsed(this._port);
39
35
  if (!isUsed) {
40
36
  break;
41
37
  }
42
-
43
38
  this._port++;
44
-
45
39
  }
46
40
  }
47
-
48
-
49
41
  /**
50
42
  * Gets next available port
51
43
  * @return {Promise<number>}
52
44
  */
53
45
  async getNextAvailablePort() {
54
- while(true) {
55
-
46
+ while (true) {
56
47
  while (this._reservedPorts.indexOf(this._currentPort) > -1) {
57
48
  this._currentPort++;
58
49
  }
59
-
60
50
  const nextPort = this._currentPort++;
61
51
  const isUsed = await this._checkIfPortIsUsed(nextPort);
62
52
  if (!isUsed) {
@@ -64,47 +54,37 @@ class ClusterService {
64
54
  }
65
55
  }
66
56
  }
67
-
68
- _checkIfPortIsUsed(port, host=this._host) {
57
+ _checkIfPortIsUsed(port, host = this._host) {
69
58
  return new Promise((resolve, reject) => {
70
59
  const server = net.createServer();
71
-
72
- server.once('error', function(err) {
60
+ server.once('error', function (err) {
73
61
  if (err.code === 'EADDRINUSE') {
74
62
  server.close();
75
63
  resolve(true);
76
64
  return;
77
65
  }
78
-
79
66
  server.close();
80
67
  reject(err);
81
68
  });
82
-
83
- server.once('listening', function() {
69
+ server.once('listening', function () {
84
70
  server.close();
85
71
  resolve(false);
86
72
  });
87
-
88
- server.listen( port, host );
73
+ server.listen(port, host);
89
74
  });
90
-
91
75
  }
92
-
93
-
94
76
  /**
95
77
  * The port of this local cluster service itself
96
78
  */
97
79
  getClusterServicePort() {
98
80
  return this._port;
99
81
  }
100
-
101
- /*
82
+ /*
102
83
  *Gets the host name ( 127.0.0.1 ) on which Express JS is listening
103
84
  */
104
- getClusterServiceHost() {
85
+ getClusterServiceHost() {
105
86
  return this._host;
106
87
  }
107
-
108
88
  /**
109
89
  * Set the port to be used for this local service
110
90
  * @param port
@@ -112,11 +92,9 @@ class ClusterService {
112
92
  setClusterServicePort(port) {
113
93
  this._port = port;
114
94
  }
115
-
116
95
  setClusterServiceHost(host) {
117
96
  this._host = host;
118
97
  }
119
-
120
98
  /**
121
99
  * Gets that proxy path of a given request
122
100
  *
@@ -130,5 +108,4 @@ class ClusterService {
130
108
  return `/proxy/${encodeURIComponent(systemId)}/${encodeURIComponent(consumerInstanceId)}/${encodeURIComponent(consumerResourceName)}/${encodeURIComponent(portType)}/`;
131
109
  }
132
110
  }
133
-
134
- module.exports = new ClusterService();
111
+ export const clusterService = new ClusterService();
@@ -0,0 +1,8 @@
1
+ import { BlockDefinition } from '@kapeta/schemas';
2
+ declare class CodeGeneratorManager {
3
+ reload(): Promise<void>;
4
+ canGenerateCode(yamlContent: BlockDefinition): boolean;
5
+ generate(yamlFile: string, yamlContent: BlockDefinition): Promise<void>;
6
+ }
7
+ export declare const codeGeneratorManager: CodeGeneratorManager;
8
+ export {};
@@ -1,56 +1,47 @@
1
- const Path = require('path');
2
-
3
- const {registry:Targets, BlockCodeGenerator, CodeWriter} = require('@kapeta/codegen');
4
- const ClusterConfiguration = require('@kapeta/local-cluster-config').default;
1
+ import Path from 'path';
2
+ import { registry as Targets, BlockCodeGenerator, CodeWriter } from '@kapeta/codegen';
3
+ import ClusterConfiguration from '@kapeta/local-cluster-config';
5
4
  const TARGET_KIND = 'core/language-target';
6
5
  const BLOCK_TYPE_KIND = 'core/block-type';
7
-
8
6
  class CodeGeneratorManager {
9
-
10
- reload() {
7
+ async reload() {
11
8
  Targets.reset();
12
9
  const languageTargets = ClusterConfiguration.getDefinitions(TARGET_KIND);
13
- languageTargets.forEach((languageTarget) => {
14
- const key = `${languageTarget.definition.metadata.name}:${languageTarget.version}`
10
+ for (const languageTarget of languageTargets) {
11
+ const key = `${languageTarget.definition.metadata.name}:${languageTarget.version}`;
15
12
  try {
16
13
  const target = require(languageTarget.path);
17
14
  if (target.default) {
18
15
  Targets.register(key, target.default);
19
- } else {
16
+ }
17
+ else {
20
18
  Targets.register(key, target);
21
19
  }
22
- } catch (e) {
20
+ }
21
+ catch (e) {
23
22
  console.error('Failed to load target: %s', key, e);
24
23
  }
25
- });
24
+ }
26
25
  }
27
-
28
26
  canGenerateCode(yamlContent) {
29
27
  if (!yamlContent.spec.target?.kind) {
30
28
  //Not all block types have targets
31
29
  return false;
32
30
  }
33
-
34
31
  const blockTypes = ClusterConfiguration.getDefinitions(BLOCK_TYPE_KIND);
35
- const blockTypeKinds = blockTypes.map(blockType => blockType.definition.metadata.name.toLowerCase() + ':' + blockType.version);
36
- return yamlContent && yamlContent.kind && blockTypeKinds.indexOf(yamlContent.kind.toLowerCase()) > -1;
32
+ const blockTypeKinds = blockTypes.map((blockType) => blockType.definition.metadata.name.toLowerCase() + ':' + blockType.version);
33
+ return !!(yamlContent && yamlContent.kind && blockTypeKinds.indexOf(yamlContent.kind.toLowerCase()) > -1);
37
34
  }
38
-
39
35
  async generate(yamlFile, yamlContent) {
40
36
  const baseDir = Path.dirname(yamlFile);
41
37
  console.log('Generating code for path: %s', baseDir);
42
38
  const codeGenerator = new BlockCodeGenerator(yamlContent);
43
-
44
39
  const output = await codeGenerator.generate();
45
40
  const writer = new CodeWriter(baseDir, {});
46
41
  const assets = writer.write(output);
47
-
48
42
  await codeGenerator.postprocess(baseDir, assets);
49
-
50
43
  console.log('Code generated for path: %s', baseDir);
51
44
  }
52
45
  }
53
-
54
- const manager = new CodeGeneratorManager();
55
- manager.reload();
56
- module.exports = manager;
46
+ export const codeGeneratorManager = new CodeGeneratorManager();
47
+ codeGeneratorManager.reload();
@@ -0,0 +1,3 @@
1
+ /// <reference types="express" />
2
+ declare const router: import("express").Router;
3
+ export default router;
@@ -1,137 +1,104 @@
1
- const Router = require('express-promise-router').default;
2
- const configManager = require('../configManager');
3
- const serviceManager = require('../serviceManager');
4
- const operatorManager = require('../operatorManager');
5
- const instanceManager = require('../instanceManager');
6
-
7
- const router = new Router();
1
+ import Router from 'express-promise-router';
2
+ import { configManager } from '../configManager';
3
+ import { serviceManager } from '../serviceManager';
4
+ import { operatorManager } from '../operatorManager';
5
+ import { instanceManager } from '../instanceManager';
6
+ import { corsHandler } from '../middleware/cors';
7
+ import { kapetaHeaders } from '../middleware/kapeta';
8
+ import { stringBody } from '../middleware/stringBody';
9
+ const router = Router();
8
10
  const SYSTEM_ID = '$plan';
9
-
10
- router.use('/', require('../middleware/cors'));
11
- router.use('/', require('../middleware/kapeta'));
12
- router.use('/', require('../middleware/stringBody'));
13
-
11
+ router.use('/', corsHandler);
12
+ router.use('/', kapetaHeaders);
13
+ router.use('/', stringBody);
14
14
  /**
15
15
  * Returns the full configuration for a given service.
16
16
  */
17
17
  router.get('/instance', (req, res) => {
18
-
19
- const config = req.kapeta.instanceId ?
20
- configManager.getConfigForSection(req.kapeta.systemId, req.kapeta.instanceId) :
21
- configManager.getConfigForSystem(req.kapeta.systemId);
22
-
18
+ const config = req.kapeta.instanceId
19
+ ? configManager.getConfigForSection(req.kapeta.systemId, req.kapeta.instanceId)
20
+ : configManager.getConfigForSystem(req.kapeta.systemId);
23
21
  res.send(config);
24
22
  });
25
-
26
23
  /**
27
24
  * Updates the full configuration for a given service.
28
25
  */
29
26
  router.put('/instance', async (req, res) => {
30
-
31
27
  try {
32
- let config = JSON.parse(req.stringBody);
28
+ let config = JSON.parse(req.stringBody ?? '{}');
33
29
  if (!config) {
34
30
  config = {};
35
31
  }
36
-
37
32
  if (req.kapeta.instanceId) {
38
- configManager.setConfigForSection(
39
- req.kapeta.systemId,
40
- req.kapeta.instanceId,
41
- config
42
- );
33
+ configManager.setConfigForSection(req.kapeta.systemId, req.kapeta.instanceId, config);
43
34
  //Restart the instance if it is running after config change
44
35
  await instanceManager.restartIfRunning(req.kapeta.systemId, req.kapeta.instanceId);
45
- } else {
46
- configManager.setConfigForSystem(
47
- req.kapeta.systemId,
48
- config
49
- );
50
36
  }
51
-
52
- } catch(err) {
37
+ else {
38
+ configManager.setConfigForSystem(req.kapeta.systemId, config);
39
+ }
40
+ }
41
+ catch (err) {
53
42
  console.error('Failed to update instance config', err);
54
- res.status(400).send({error: err.message});
43
+ res.status(400).send({ error: err.message });
55
44
  return;
56
45
  }
57
-
58
- res.status(202).send({ok:true});
46
+ res.status(202).send({ ok: true });
59
47
  });
60
-
61
48
  /**
62
49
  * Returns the full configuration for a plan
63
50
  */
64
51
  router.get('/system', (req, res) => {
65
52
  const config = configManager.getConfigForSection(req.kapeta.systemId, SYSTEM_ID);
66
-
67
53
  res.send(config);
68
54
  });
69
-
70
55
  /**
71
56
  * Updates the full configuration for a plan
72
57
  */
73
58
  router.put('/system', (req, res) => {
74
-
75
- let config = JSON.parse(req.stringBody);
59
+ let config = JSON.parse(req.stringBody ?? '{}');
76
60
  if (!config) {
77
61
  config = {};
78
62
  }
79
- configManager.setConfigForSection(
80
- req.kapeta.systemId,
81
- SYSTEM_ID,
82
- config
83
- );
84
- res.status(202).send({ok:true});
63
+ configManager.setConfigForSection(req.kapeta.systemId, SYSTEM_ID, config);
64
+ res.status(202).send({ ok: true });
85
65
  });
86
-
87
-
88
66
  /**
89
67
  * Resolves and checks the identity of a block instance
90
68
  */
91
69
  router.get('/identity', async (req, res) => {
92
-
93
-
94
70
  const identity = {
95
71
  systemId: req.kapeta.systemId,
96
- instanceId: req.kapeta.instanceId
72
+ instanceId: req.kapeta.instanceId,
97
73
  };
98
-
99
74
  if (!req.kapeta.blockRef) {
100
- res.status(400).send({error: 'Missing required header "X-Kapeta-Block"'});
75
+ res.status(400).send({ error: 'Missing required header "X-Kapeta-Block"' });
101
76
  return;
102
77
  }
103
-
104
78
  try {
105
-
106
- if (!identity.systemId ||
107
- !identity.instanceId) {
108
- const {systemId, instanceId} = await configManager.resolveIdentity(req.kapeta.blockRef, identity.systemId);
79
+ if (!identity.systemId || !identity.instanceId) {
80
+ const { systemId, instanceId } = await configManager.resolveIdentity(req.kapeta.blockRef, identity.systemId);
109
81
  identity.systemId = systemId;
110
82
  identity.instanceId = instanceId;
111
- } else {
83
+ }
84
+ else {
112
85
  await configManager.verifyIdentity(req.kapeta.blockRef, identity.systemId, identity.instanceId);
113
86
  }
114
-
115
87
  res.send(identity);
116
- } catch(err) {
88
+ }
89
+ catch (err) {
117
90
  console.warn('Failed to resolve identity', err);
118
- res.status(400).send({error: err.message});
91
+ res.status(400).send({ error: err.message });
119
92
  }
120
93
  });
121
-
122
94
  /**
123
95
  * Services call this to request a free port. If a service has
124
96
  * already called the endpoint the same port is returned.
125
97
  */
126
98
  router.get('/provides/:type', async (req, res) => {
127
99
  //Get service port
128
- res.send('' + await serviceManager.ensureServicePort(
129
- req.kapeta.systemId,
130
- req.kapeta.instanceId,
131
- req.params.type
132
- ));
100
+ res.send('' + (await serviceManager.ensureServicePort(req.kapeta.systemId, req.kapeta.instanceId, req.params.type)));
133
101
  });
134
-
135
102
  /**
136
103
  * Used by services to get info for consumed operator resource.
137
104
  *
@@ -139,18 +106,9 @@ router.get('/provides/:type', async (req, res) => {
139
106
  * assign port numbers to it etc.
140
107
  */
141
108
  router.get('/consumes/resource/:resourceType/:portType/:name', async (req, res) => {
142
- const operatorInfo = await operatorManager.getConsumerResourceInfo(
143
- req.kapeta.systemId,
144
- req.kapeta.instanceId,
145
- req.params.resourceType,
146
- req.params.portType,
147
- req.params.name,
148
- req.kapeta.environment
149
- );
150
-
109
+ const operatorInfo = await operatorManager.getConsumerResourceInfo(req.kapeta.systemId, req.kapeta.instanceId, req.params.resourceType, req.params.portType, req.params.name, req.kapeta.environment);
151
110
  res.send(operatorInfo);
152
111
  });
153
-
154
112
  /**
155
113
  * Used by services to get address for their clients.
156
114
  *
@@ -158,13 +116,6 @@ router.get('/consumes/resource/:resourceType/:portType/:name', async (req, res)
158
116
  * to handle clients for services that hasn't started yet.
159
117
  */
160
118
  router.get('/consumes/:resourceName/:type', (req, res) => {
161
- res.send(serviceManager.getConsumerAddress(
162
- req.kapeta.systemId,
163
- req.kapeta.instanceId,
164
- req.params.resourceName,
165
- req.params.type,
166
- req.kapeta.environment,
167
- ));
119
+ res.send(serviceManager.getConsumerAddress(req.kapeta.systemId, req.kapeta.instanceId, req.params.resourceName, req.params.type, req.kapeta.environment));
168
120
  });
169
-
170
- module.exports = router;
121
+ export default router;
@@ -0,0 +1,36 @@
1
+ type AnyMap = {
2
+ [key: string]: any;
3
+ };
4
+ interface MatchedIdentity {
5
+ systemId: string;
6
+ instanceId: string;
7
+ }
8
+ declare class ConfigManager {
9
+ private _config;
10
+ constructor();
11
+ _forSystem(systemId: string): any;
12
+ setConfigForSystem(systemId: string, config: AnyMap): void;
13
+ getConfigForSystem(systemId: string): AnyMap;
14
+ setConfigForSection(systemId: string, sectionId: string, config: AnyMap): void;
15
+ getConfigForSection(systemId: string, sectionId: string): any;
16
+ /**
17
+ * Try to identify the plan and instance in a plan automatically based on the block reference
18
+ *
19
+ * It will:
20
+ * 1. Go through all plans available in the assets
21
+ * 2. Look through each plan and see if the plan is referencing the block
22
+ * 3. If only 1 plan references the block - assume that as the system id
23
+ * 4. If only 1 instance in 1 plan references the block - assume that as instance id
24
+ *
25
+ * In case multiple uses of the same block reference we will prompt to user to choose which instance they want to
26
+ * use.
27
+ *
28
+ * @param blockRef block reference
29
+ * @param [systemId] plan reference
30
+ * @returns {Promise<{systemId:string,instanceId:string}>}
31
+ */
32
+ resolveIdentity(blockRef: string, systemId?: string): Promise<MatchedIdentity>;
33
+ verifyIdentity(blockRef: string, systemId: string, instanceId: string): Promise<void>;
34
+ }
35
+ export declare const configManager: ConfigManager;
36
+ export {};