@kapeta/local-cluster-service 0.23.0 → 0.24.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [0.24.1](https://github.com/kapetacom/local-cluster-service/compare/v0.24.0...v0.24.1) (2023-10-27)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * increase timeout to try to compensate for slow machines ([#89](https://github.com/kapetacom/local-cluster-service/issues/89)) ([98f243f](https://github.com/kapetacom/local-cluster-service/commit/98f243fddf5ab827cc5fbb91e5bfd972a2137ea9))
7
+
8
+ # [0.24.0](https://github.com/kapetacom/local-cluster-service/compare/v0.23.0...v0.24.0) (2023-10-27)
9
+
10
+
11
+ ### Features
12
+
13
+ * Add endpoint for getting all installed versions for asset ([#90](https://github.com/kapetacom/local-cluster-service/issues/90)) ([fc593ba](https://github.com/kapetacom/local-cluster-service/commit/fc593babec99a7a67d6b6855c93546eb6cadd461))
14
+
1
15
  # [0.23.0](https://github.com/kapetacom/local-cluster-service/compare/v0.22.2...v0.23.0) (2023-10-24)
2
16
 
3
17
 
@@ -8,6 +8,7 @@ const yaml_1 = __importDefault(require("yaml"));
8
8
  const assetManager_1 = require("../assetManager");
9
9
  const cors_1 = require("../middleware/cors");
10
10
  const stringBody_1 = require("../middleware/stringBody");
11
+ const definitionsManager_1 = require("../definitionsManager");
11
12
  function parseBody(req) {
12
13
  switch (req.headers['content-type']) {
13
14
  case 'application/json':
@@ -53,6 +54,28 @@ router.get('/read', async (req, res) => {
53
54
  res.status(400).send({ error: err.message });
54
55
  }
55
56
  });
57
+ /**
58
+ * Get all versions for asset name
59
+ */
60
+ router.get('/versions', async (req, res) => {
61
+ if (!req.query.ref) {
62
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
63
+ return;
64
+ }
65
+ const ensure = req.query.ensure !== 'false';
66
+ try {
67
+ const versions = await definitionsManager_1.definitionsManager.getVersions(req.query.ref);
68
+ if (versions) {
69
+ res.send(versions);
70
+ }
71
+ else {
72
+ res.status(404).send({ error: 'Asset not found' });
73
+ }
74
+ }
75
+ catch (err) {
76
+ res.status(400).send({ error: err.message });
77
+ }
78
+ });
56
79
  /**
57
80
  * Creates a new local file and registers it as an asset
58
81
  */
@@ -22,7 +22,7 @@ const StreamValues_1 = __importDefault(require("stream-json/streamers/StreamValu
22
22
  exports.CONTAINER_LABEL_PORT_PREFIX = 'kapeta_port-';
23
23
  const NANO_SECOND = 1000000;
24
24
  const HEALTH_CHECK_INTERVAL = 3000;
25
- const HEALTH_CHECK_MAX = 20;
25
+ const HEALTH_CHECK_MAX = 100;
26
26
  exports.COMPOSE_LABEL_PROJECT = 'com.docker.compose.project';
27
27
  exports.COMPOSE_LABEL_SERVICE = 'com.docker.compose.service';
28
28
  exports.HEALTH_CHECK_TIMEOUT = HEALTH_CHECK_INTERVAL * HEALTH_CHECK_MAX * 2;
@@ -7,6 +7,7 @@ declare class DefinitionsManager {
7
7
  exists(ref: string): Promise<boolean>;
8
8
  getProviderDefinitions(): Promise<DefinitionInfo[]>;
9
9
  getDefinition(ref: string): Promise<DefinitionInfo | undefined>;
10
+ getVersions(assetName: string): Promise<DefinitionInfo[]>;
10
11
  clearCache(): void;
11
12
  }
12
13
  export declare const definitionsManager: DefinitionsManager;
@@ -132,6 +132,13 @@ class DefinitionsManager {
132
132
  return (0, nodejs_utils_1.parseKapetaUri)(`${d.definition.metadata.name}:${d.version}`).id === uri.id;
133
133
  });
134
134
  }
135
+ async getVersions(assetName) {
136
+ const uri = (0, nodejs_utils_1.parseKapetaUri)(assetName);
137
+ const definitions = await this.getDefinitions();
138
+ return definitions.filter((d) => {
139
+ return d.definition.metadata.name === uri.fullName;
140
+ });
141
+ }
135
142
  clearCache() {
136
143
  cacheManager_1.cacheManager.removePrefix('definitionsManager:');
137
144
  }
@@ -8,6 +8,7 @@ const yaml_1 = __importDefault(require("yaml"));
8
8
  const assetManager_1 = require("../assetManager");
9
9
  const cors_1 = require("../middleware/cors");
10
10
  const stringBody_1 = require("../middleware/stringBody");
11
+ const definitionsManager_1 = require("../definitionsManager");
11
12
  function parseBody(req) {
12
13
  switch (req.headers['content-type']) {
13
14
  case 'application/json':
@@ -53,6 +54,28 @@ router.get('/read', async (req, res) => {
53
54
  res.status(400).send({ error: err.message });
54
55
  }
55
56
  });
57
+ /**
58
+ * Get all versions for asset name
59
+ */
60
+ router.get('/versions', async (req, res) => {
61
+ if (!req.query.ref) {
62
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
63
+ return;
64
+ }
65
+ const ensure = req.query.ensure !== 'false';
66
+ try {
67
+ const versions = await definitionsManager_1.definitionsManager.getVersions(req.query.ref);
68
+ if (versions) {
69
+ res.send(versions);
70
+ }
71
+ else {
72
+ res.status(404).send({ error: 'Asset not found' });
73
+ }
74
+ }
75
+ catch (err) {
76
+ res.status(400).send({ error: err.message });
77
+ }
78
+ });
56
79
  /**
57
80
  * Creates a new local file and registers it as an asset
58
81
  */
@@ -22,7 +22,7 @@ const StreamValues_1 = __importDefault(require("stream-json/streamers/StreamValu
22
22
  exports.CONTAINER_LABEL_PORT_PREFIX = 'kapeta_port-';
23
23
  const NANO_SECOND = 1000000;
24
24
  const HEALTH_CHECK_INTERVAL = 3000;
25
- const HEALTH_CHECK_MAX = 20;
25
+ const HEALTH_CHECK_MAX = 100;
26
26
  exports.COMPOSE_LABEL_PROJECT = 'com.docker.compose.project';
27
27
  exports.COMPOSE_LABEL_SERVICE = 'com.docker.compose.service';
28
28
  exports.HEALTH_CHECK_TIMEOUT = HEALTH_CHECK_INTERVAL * HEALTH_CHECK_MAX * 2;
@@ -7,6 +7,7 @@ declare class DefinitionsManager {
7
7
  exists(ref: string): Promise<boolean>;
8
8
  getProviderDefinitions(): Promise<DefinitionInfo[]>;
9
9
  getDefinition(ref: string): Promise<DefinitionInfo | undefined>;
10
+ getVersions(assetName: string): Promise<DefinitionInfo[]>;
10
11
  clearCache(): void;
11
12
  }
12
13
  export declare const definitionsManager: DefinitionsManager;
@@ -132,6 +132,13 @@ class DefinitionsManager {
132
132
  return (0, nodejs_utils_1.parseKapetaUri)(`${d.definition.metadata.name}:${d.version}`).id === uri.id;
133
133
  });
134
134
  }
135
+ async getVersions(assetName) {
136
+ const uri = (0, nodejs_utils_1.parseKapetaUri)(assetName);
137
+ const definitions = await this.getDefinitions();
138
+ return definitions.filter((d) => {
139
+ return d.definition.metadata.name === uri.fullName;
140
+ });
141
+ }
135
142
  clearCache() {
136
143
  cacheManager_1.cacheManager.removePrefix('definitionsManager:');
137
144
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kapeta/local-cluster-service",
3
- "version": "0.23.0",
3
+ "version": "0.24.1",
4
4
  "description": "Manages configuration, ports and service discovery for locally running Kapeta systems",
5
5
  "type": "commonjs",
6
6
  "exports": {
@@ -6,6 +6,7 @@ import { assetManager } from '../assetManager';
6
6
  import { corsHandler } from '../middleware/cors';
7
7
 
8
8
  import { stringBody, StringBodyRequest } from '../middleware/stringBody';
9
+ import { definitionsManager } from '../definitionsManager';
9
10
 
10
11
  function parseBody(req: StringBodyRequest) {
11
12
  switch (req.headers['content-type']) {
@@ -58,6 +59,29 @@ router.get('/read', async (req: Request, res: Response) => {
58
59
  }
59
60
  });
60
61
 
62
+ /**
63
+ * Get all versions for asset name
64
+ */
65
+ router.get('/versions', async (req: Request, res: Response) => {
66
+ if (!req.query.ref) {
67
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
68
+ return;
69
+ }
70
+
71
+ const ensure = req.query.ensure !== 'false';
72
+
73
+ try {
74
+ const versions = await definitionsManager.getVersions(req.query.ref as string);
75
+ if (versions) {
76
+ res.send(versions);
77
+ } else {
78
+ res.status(404).send({ error: 'Asset not found' });
79
+ }
80
+ } catch (err: any) {
81
+ res.status(400).send({ error: err.message });
82
+ }
83
+ });
84
+
61
85
  /**
62
86
  * Creates a new local file and registers it as an asset
63
87
  */
@@ -80,7 +80,7 @@ interface Health {
80
80
  export const CONTAINER_LABEL_PORT_PREFIX = 'kapeta_port-';
81
81
  const NANO_SECOND = 1000000;
82
82
  const HEALTH_CHECK_INTERVAL = 3000;
83
- const HEALTH_CHECK_MAX = 20;
83
+ const HEALTH_CHECK_MAX = 100;
84
84
  export const COMPOSE_LABEL_PROJECT = 'com.docker.compose.project';
85
85
  export const COMPOSE_LABEL_SERVICE = 'com.docker.compose.service';
86
86
 
@@ -165,6 +165,14 @@ class DefinitionsManager {
165
165
  });
166
166
  }
167
167
 
168
+ public async getVersions(assetName: string) {
169
+ const uri = parseKapetaUri(assetName);
170
+ const definitions = await this.getDefinitions();
171
+ return definitions.filter((d) => {
172
+ return d.definition.metadata.name === uri.fullName;
173
+ });
174
+ }
175
+
168
176
  public clearCache() {
169
177
  cacheManager.removePrefix('definitionsManager:');
170
178
  }