@kapeta/local-cluster-service 0.20.4 → 0.21.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 (54) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/src/assetManager.js +5 -6
  3. package/dist/cjs/src/clusterService.js +2 -2
  4. package/dist/cjs/src/codeGeneratorManager.js +2 -2
  5. package/dist/cjs/src/config/routes.js +13 -2
  6. package/dist/cjs/src/configManager.js +10 -10
  7. package/dist/cjs/src/definitionsManager.js +2 -3
  8. package/dist/cjs/src/instanceManager.js +18 -15
  9. package/dist/cjs/src/middleware/kapeta.js +3 -3
  10. package/dist/cjs/src/networkManager.js +6 -6
  11. package/dist/cjs/src/operatorManager.js +3 -3
  12. package/dist/cjs/src/repositoryManager.js +2 -2
  13. package/dist/cjs/src/serviceManager.d.ts +1 -0
  14. package/dist/cjs/src/serviceManager.js +9 -9
  15. package/dist/cjs/src/socketManager.js +3 -3
  16. package/dist/cjs/src/utils/BlockInstanceRunner.js +32 -14
  17. package/dist/cjs/src/utils/utils.d.ts +0 -1
  18. package/dist/cjs/src/utils/utils.js +1 -13
  19. package/dist/cjs/test/proxy/types/rest.test.js +16 -17
  20. package/dist/esm/src/assetManager.js +5 -6
  21. package/dist/esm/src/clusterService.js +2 -2
  22. package/dist/esm/src/codeGeneratorManager.js +2 -2
  23. package/dist/esm/src/config/routes.js +13 -2
  24. package/dist/esm/src/configManager.js +10 -10
  25. package/dist/esm/src/definitionsManager.js +2 -3
  26. package/dist/esm/src/instanceManager.js +18 -15
  27. package/dist/esm/src/middleware/kapeta.js +3 -3
  28. package/dist/esm/src/networkManager.js +6 -6
  29. package/dist/esm/src/operatorManager.js +3 -3
  30. package/dist/esm/src/repositoryManager.js +2 -2
  31. package/dist/esm/src/serviceManager.d.ts +1 -0
  32. package/dist/esm/src/serviceManager.js +9 -9
  33. package/dist/esm/src/socketManager.js +3 -3
  34. package/dist/esm/src/utils/BlockInstanceRunner.js +32 -14
  35. package/dist/esm/src/utils/utils.d.ts +0 -1
  36. package/dist/esm/src/utils/utils.js +1 -13
  37. package/dist/esm/test/proxy/types/rest.test.js +16 -17
  38. package/package.json +1 -1
  39. package/src/assetManager.ts +1 -2
  40. package/src/clusterService.ts +1 -1
  41. package/src/codeGeneratorManager.ts +1 -1
  42. package/src/config/routes.ts +17 -6
  43. package/src/configManager.ts +2 -2
  44. package/src/definitionsManager.ts +1 -2
  45. package/src/instanceManager.ts +8 -3
  46. package/src/middleware/kapeta.ts +1 -2
  47. package/src/networkManager.ts +1 -1
  48. package/src/operatorManager.ts +3 -3
  49. package/src/repositoryManager.ts +1 -1
  50. package/src/serviceManager.ts +2 -2
  51. package/src/socketManager.ts +1 -1
  52. package/src/utils/BlockInstanceRunner.ts +65 -30
  53. package/src/utils/utils.ts +0 -13
  54. package/test/proxy/types/rest.test.ts +22 -22
@@ -1,8 +1,8 @@
1
1
  import FS from 'node:fs';
2
2
  import ClusterConfig, { DefinitionInfo } from '@kapeta/local-cluster-config';
3
- import { getBindHost, getBlockInstanceContainerName, normalizeKapetaUri, readYML } from './utils';
4
- import { KapetaURI, parseKapetaUri } from '@kapeta/nodejs-utils';
5
- import { serviceManager } from '../serviceManager';
3
+ import { getBindHost, getBlockInstanceContainerName, readYML } from './utils';
4
+ import { KapetaURI, parseKapetaUri, normalizeKapetaUri } from '@kapeta/nodejs-utils';
5
+ import { DEFAULT_PORT_TYPE, serviceManager } from '../serviceManager';
6
6
  import {
7
7
  COMPOSE_LABEL_PROJECT,
8
8
  COMPOSE_LABEL_SERVICE,
@@ -39,14 +39,22 @@ async function getProvider(uri: KapetaURI) {
39
39
  });
40
40
  }
41
41
 
42
- function getProviderPorts(assetVersion: DefinitionInfo): string[] {
43
- return (
42
+ function getProviderPorts(assetVersion: DefinitionInfo, providerVersion: DefinitionInfo): string[] {
43
+ const out =
44
44
  assetVersion.definition?.spec?.providers
45
45
  ?.map((provider: any) => {
46
46
  return provider.spec?.port?.type;
47
47
  })
48
- .filter((t: any) => !!t) ?? []
49
- );
48
+ .filter((t: any) => !!t) ?? [];
49
+
50
+ if (out.length === 0) {
51
+ if (providerVersion.definition.spec?.defaultPort?.type) {
52
+ return [providerVersion.definition.spec?.defaultPort?.type];
53
+ }
54
+ return [DEFAULT_PORT_TYPE];
55
+ }
56
+
57
+ return out;
50
58
  }
51
59
 
52
60
  export class BlockInstanceRunner {
@@ -114,7 +122,7 @@ export class BlockInstanceRunner {
114
122
  processInfo = await this._startOperatorProcess(blockInstance, blockUri, providerVersion, env);
115
123
  } else {
116
124
  //We need a port type to know how to connect to the block consistently
117
- const portTypes = getProviderPorts(assetVersion);
125
+ const portTypes = getProviderPorts(assetVersion, providerVersion);
118
126
 
119
127
  if (blockUri.version === 'local') {
120
128
  processInfo = await this._startLocalProcess(blockInstance, blockUri, env, assetVersion);
@@ -152,18 +160,26 @@ export class BlockInstanceRunner {
152
160
  throw new Error('Missing target kind in block definition');
153
161
  }
154
162
 
155
- const kindUri = parseKapetaUri(assetVersion.definition.spec?.target?.kind);
163
+ const kindUri = parseKapetaUri(assetVersion.definition.kind);
156
164
 
157
- const targetVersion = await getProvider(kindUri);
165
+ const providerVersion = await getProvider(kindUri);
166
+
167
+ if (!providerVersion) {
168
+ throw new Error(`Block type not found: ${kindUri.id}`);
169
+ }
170
+
171
+ const targetKindUri = parseKapetaUri(assetVersion.definition.spec?.target?.kind);
172
+
173
+ const targetVersion = await getProvider(targetKindUri);
158
174
 
159
175
  if (!targetVersion) {
160
- throw new Error(`Target not found: ${kindUri.id}`);
176
+ throw new Error(`Target not found: ${targetKindUri.id}`);
161
177
  }
162
178
 
163
179
  const localContainer = targetVersion.definition.spec.local;
164
180
 
165
181
  if (!localContainer) {
166
- throw new Error(`Missing local container information from target: ${kindUri.id}`);
182
+ throw new Error(`Missing local container information from target: ${targetKindUri.id}`);
167
183
  }
168
184
 
169
185
  const dockerImage = localContainer.image;
@@ -184,7 +200,11 @@ export class BlockInstanceRunner {
184
200
  delete localContainer.Labels;
185
201
  delete localContainer.Env;
186
202
 
187
- const { PortBindings, ExposedPorts, addonEnv } = await this.getDockerPortBindings(blockInstance, assetVersion);
203
+ const { PortBindings, ExposedPorts, addonEnv } = await this.getDockerPortBindings(
204
+ blockInstance,
205
+ assetVersion,
206
+ providerVersion
207
+ );
188
208
 
189
209
  let HealthCheck = undefined;
190
210
  if (localContainer.healthcheck) {
@@ -254,7 +274,19 @@ export class BlockInstanceRunner {
254
274
  throw new Error(`Missing docker image information: ${JSON.stringify(versionInfo?.artifact?.details)}`);
255
275
  }
256
276
 
257
- const { PortBindings, ExposedPorts, addonEnv } = await this.getDockerPortBindings(blockInstance, assetVersion);
277
+ const kindUri = parseKapetaUri(assetVersion.definition.kind);
278
+
279
+ const providerVersion = await getProvider(kindUri);
280
+
281
+ if (!providerVersion) {
282
+ throw new Error(`Block type not found: ${kindUri.id}`);
283
+ }
284
+
285
+ const { PortBindings, ExposedPorts, addonEnv } = await this.getDockerPortBindings(
286
+ blockInstance,
287
+ assetVersion,
288
+ providerVersion
289
+ );
258
290
 
259
291
  const containerName = getBlockInstanceContainerName(this._systemId, blockInstance.id);
260
292
 
@@ -332,20 +364,19 @@ export class BlockInstanceRunner {
332
364
  const PortBindings: AnyMap = {};
333
365
  let HealthCheck = undefined;
334
366
  let Mounts: DockerMounts[] = [];
335
- const promises = Object.entries(spec.local.ports as { [p: string]: { port: string; type: string } }).map(
336
- async ([portType, value]) => {
337
- const dockerPort = `${value.port}/${value.type}`;
338
- ExposedPorts[dockerPort] = {};
339
- addonEnv[`KAPETA_LOCAL_SERVER_PORT_${portType.toUpperCase()}`] = value.port;
340
- const publicPort = await serviceManager.ensureServicePort(this._systemId, blockInstance.id, portType);
341
- PortBindings[dockerPort] = [
342
- {
343
- HostIp: bindHost,
344
- HostPort: `${publicPort}`,
345
- },
346
- ];
347
- }
348
- );
367
+ const localPorts = spec.local.ports as { [p: string]: { port: string; type: string } };
368
+ const promises = Object.entries(localPorts).map(async ([portType, value]) => {
369
+ const dockerPort = `${value.port}/${value.type}`;
370
+ ExposedPorts[dockerPort] = {};
371
+ addonEnv[`KAPETA_LOCAL_SERVER_PORT_${portType.toUpperCase()}`] = value.port;
372
+ const publicPort = await serviceManager.ensureServicePort(this._systemId, blockInstance.id, portType);
373
+ PortBindings[dockerPort] = [
374
+ {
375
+ HostIp: bindHost,
376
+ HostPort: `${publicPort}`,
377
+ },
378
+ ];
379
+ });
349
380
 
350
381
  await Promise.all(promises);
351
382
 
@@ -406,13 +437,17 @@ export class BlockInstanceRunner {
406
437
  return out;
407
438
  }
408
439
 
409
- private async getDockerPortBindings(blockInstance: BlockProcessParams, assetVersion: DefinitionInfo) {
440
+ private async getDockerPortBindings(
441
+ blockInstance: BlockProcessParams,
442
+ assetVersion: DefinitionInfo,
443
+ providerVersion: DefinitionInfo
444
+ ) {
410
445
  const bindHost = getBindHost();
411
446
  const ExposedPorts: AnyMap = {};
412
447
  const addonEnv: StringMap = {};
413
448
  const PortBindings: AnyMap = {};
414
449
 
415
- const portTypes = getProviderPorts(assetVersion);
450
+ const portTypes = getProviderPorts(assetVersion, providerVersion);
416
451
  let port = 80;
417
452
  const promises = portTypes.map(async (portType) => {
418
453
  const publicPort = await serviceManager.ensureServicePort(this._systemId, blockInstance.id, portType);
@@ -10,19 +10,6 @@ export function getBlockInstanceContainerName(systemId: string, instanceId: stri
10
10
  return `kapeta-block-instance-${md5(systemId + instanceId)}`;
11
11
  }
12
12
 
13
- export function normalizeKapetaUri(uri: string) {
14
- if (!uri) {
15
- return '';
16
- }
17
-
18
- const uriObj = parseKapetaUri(uri);
19
- if (!uriObj.version) {
20
- return `kapeta://${parseKapetaUri(uri).fullName}`;
21
- }
22
-
23
- return `kapeta://${parseKapetaUri(uri).id}`;
24
- }
25
-
26
13
  export function readYML(path: string) {
27
14
  const rawYaml = FS.readFileSync(path);
28
15
 
@@ -1,17 +1,17 @@
1
- import {getRestMethodId} from "../../../src/proxy/types/rest";
2
- import {Resource, ResourceMetadata} from '@kapeta/schemas';
1
+ import { getRestMethodId } from '../../../src/proxy/types/rest';
2
+ import { Resource, ResourceMetadata } from '@kapeta/schemas';
3
3
 
4
4
  describe('getRestMethodId', () => {
5
5
  it('should match @Query in url', () => {
6
6
  const restResource = new TestResource();
7
7
 
8
- const restMethodId = getRestMethodId(restResource, "POST", "/names?name=Ib");
8
+ const restMethodId = getRestMethodId(restResource, 'POST', '/names?name=Ib');
9
9
  expect(restMethodId).toBeDefined();
10
- })
10
+ });
11
11
  });
12
12
 
13
13
  class TestResource implements Resource {
14
- kind = "";
14
+ kind = '';
15
15
  metadata = new TestResourceMetaData();
16
16
 
17
17
  get spec(): { [p: string]: any } {
@@ -19,31 +19,31 @@ class TestResource implements Resource {
19
19
  methods: [
20
20
  {
21
21
  responseType: {
22
- ref: "Name[]"
22
+ ref: 'Name[]',
23
23
  },
24
- method: "GET",
25
- path: "/names",
26
- arguments: {}
24
+ method: 'GET',
25
+ path: '/names',
26
+ arguments: {},
27
27
  },
28
28
  {
29
29
  responseType: {
30
- ref: "Name"
30
+ ref: 'Name',
31
31
  },
32
- method: "POST",
33
- path: "/names",
32
+ method: 'POST',
33
+ path: '/names',
34
34
  arguments: {
35
35
  name: {
36
- type: "string",
37
- transport: "QUERY"
38
- }
39
- }
40
- }
41
- ]
42
- }
43
- };
36
+ type: 'string',
37
+ transport: 'QUERY',
38
+ },
39
+ },
40
+ },
41
+ ],
42
+ };
43
+ }
44
44
  }
45
45
 
46
46
  class TestResourceMetaData implements ResourceMetadata {
47
47
  [property: string]: any;
48
- name: string = "";
49
- }
48
+ name: string = '';
49
+ }