@kapeta/local-cluster-service 0.22.2 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [0.24.0](https://github.com/kapetacom/local-cluster-service/compare/v0.23.0...v0.24.0) (2023-10-27)
2
+
3
+
4
+ ### Features
5
+
6
+ * 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))
7
+
8
+ # [0.23.0](https://github.com/kapetacom/local-cluster-service/compare/v0.22.2...v0.23.0) (2023-10-24)
9
+
10
+
11
+ ### Features
12
+
13
+ * Make it possible to wait for installation to complete from the UI ([#88](https://github.com/kapetacom/local-cluster-service/issues/88)) ([f34c807](https://github.com/kapetacom/local-cluster-service/commit/f34c807d260264e85d770dc1575d0458feae2bae))
14
+
1
15
  ## [0.22.2](https://github.com/kapetacom/local-cluster-service/compare/v0.22.1...v0.22.2) (2023-10-22)
2
16
 
3
17
 
@@ -26,7 +26,7 @@ declare class AssetManager {
26
26
  updateAsset(ref: string, yaml: BlockDefinition, sourceOfChange?: SourceOfChange): Promise<void>;
27
27
  importFile(filePath: string): Promise<EnrichedAsset[]>;
28
28
  unregisterAsset(ref: string): Promise<void>;
29
- installAsset(ref: string): Promise<import("./taskManager").Task<void>[] | undefined>;
29
+ installAsset(ref: string, wait?: boolean): Promise<import("./taskManager").Task<void>[] | undefined>;
30
30
  private maybeGenerateCode;
31
31
  }
32
32
  export declare const assetManager: AssetManager;
@@ -175,17 +175,17 @@ class AssetManager {
175
175
  definitionsManager_1.definitionsManager.clearCache();
176
176
  await nodejs_registry_utils_1.Actions.uninstall(new progressListener_1.ProgressListener(), [asset.ref]);
177
177
  }
178
- async installAsset(ref) {
178
+ async installAsset(ref, wait = false) {
179
179
  const asset = await this.getAsset(ref, true, false);
180
180
  if (asset) {
181
181
  throw new Error('Asset already installed: ' + ref);
182
182
  }
183
183
  const uri = (0, nodejs_utils_1.parseKapetaUri)(ref);
184
- console.log('Installing %s', ref);
184
+ console.log('Installing %s (sync: %s)', ref, wait);
185
185
  const key = toKey(ref);
186
186
  cacheManager_1.cacheManager.remove(key);
187
187
  definitionsManager_1.definitionsManager.clearCache();
188
- return await repositoryManager_1.repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, false);
188
+ return await repositoryManager_1.repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, wait);
189
189
  }
190
190
  async maybeGenerateCode(ref, ymlPath, block) {
191
191
  ref = (0, nodejs_utils_1.normalizeKapetaUri)(ref);
@@ -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
  */
@@ -127,7 +150,7 @@ router.put('/install', async (req, res) => {
127
150
  return;
128
151
  }
129
152
  try {
130
- const tasks = await assetManager_1.assetManager.installAsset(req.query.ref);
153
+ const tasks = await assetManager_1.assetManager.installAsset(req.query.ref, !!req.query.wait);
131
154
  const taskIds = tasks?.map((t) => t.id) ?? [];
132
155
  res.status(200).send(taskIds);
133
156
  }
@@ -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
  }
@@ -26,7 +26,7 @@ declare class AssetManager {
26
26
  updateAsset(ref: string, yaml: BlockDefinition, sourceOfChange?: SourceOfChange): Promise<void>;
27
27
  importFile(filePath: string): Promise<EnrichedAsset[]>;
28
28
  unregisterAsset(ref: string): Promise<void>;
29
- installAsset(ref: string): Promise<import("./taskManager").Task<void>[] | undefined>;
29
+ installAsset(ref: string, wait?: boolean): Promise<import("./taskManager").Task<void>[] | undefined>;
30
30
  private maybeGenerateCode;
31
31
  }
32
32
  export declare const assetManager: AssetManager;
@@ -175,17 +175,17 @@ class AssetManager {
175
175
  definitionsManager_1.definitionsManager.clearCache();
176
176
  await nodejs_registry_utils_1.Actions.uninstall(new progressListener_1.ProgressListener(), [asset.ref]);
177
177
  }
178
- async installAsset(ref) {
178
+ async installAsset(ref, wait = false) {
179
179
  const asset = await this.getAsset(ref, true, false);
180
180
  if (asset) {
181
181
  throw new Error('Asset already installed: ' + ref);
182
182
  }
183
183
  const uri = (0, nodejs_utils_1.parseKapetaUri)(ref);
184
- console.log('Installing %s', ref);
184
+ console.log('Installing %s (sync: %s)', ref, wait);
185
185
  const key = toKey(ref);
186
186
  cacheManager_1.cacheManager.remove(key);
187
187
  definitionsManager_1.definitionsManager.clearCache();
188
- return await repositoryManager_1.repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, false);
188
+ return await repositoryManager_1.repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, wait);
189
189
  }
190
190
  async maybeGenerateCode(ref, ymlPath, block) {
191
191
  ref = (0, nodejs_utils_1.normalizeKapetaUri)(ref);
@@ -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
  */
@@ -127,7 +150,7 @@ router.put('/install', async (req, res) => {
127
150
  return;
128
151
  }
129
152
  try {
130
- const tasks = await assetManager_1.assetManager.installAsset(req.query.ref);
153
+ const tasks = await assetManager_1.assetManager.installAsset(req.query.ref, !!req.query.wait);
131
154
  const taskIds = tasks?.map((t) => t.id) ?? [];
132
155
  res.status(200).send(taskIds);
133
156
  }
@@ -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.22.2",
3
+ "version": "0.24.0",
4
4
  "description": "Manages configuration, ports and service discovery for locally running Kapeta systems",
5
5
  "type": "commonjs",
6
6
  "exports": {
@@ -239,18 +239,18 @@ class AssetManager {
239
239
  await Actions.uninstall(new ProgressListener(), [asset.ref]);
240
240
  }
241
241
 
242
- async installAsset(ref: string) {
242
+ async installAsset(ref: string, wait: boolean = false) {
243
243
  const asset = await this.getAsset(ref, true, false);
244
244
  if (asset) {
245
245
  throw new Error('Asset already installed: ' + ref);
246
246
  }
247
247
  const uri = parseKapetaUri(ref);
248
- console.log('Installing %s', ref);
248
+ console.log('Installing %s (sync: %s)', ref, wait);
249
249
  const key = toKey(ref);
250
250
  cacheManager.remove(key);
251
251
  definitionsManager.clearCache();
252
252
 
253
- return await repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, false);
253
+ return await repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, wait);
254
254
  }
255
255
 
256
256
  private async maybeGenerateCode(ref: string, ymlPath: string, block: BlockDefinition) {
@@ -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
  */
@@ -143,7 +167,7 @@ router.put('/install', async (req: Request, res: Response) => {
143
167
  }
144
168
 
145
169
  try {
146
- const tasks = await assetManager.installAsset(req.query.ref as string);
170
+ const tasks = await assetManager.installAsset(req.query.ref as string, !!req.query.wait);
147
171
  const taskIds = tasks?.map((t) => t.id) ?? [];
148
172
  res.status(200).send(taskIds);
149
173
  } catch (err: any) {
@@ -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
  }