@kapeta/local-cluster-service 0.17.0 → 0.18.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 (57) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/index.js +4 -2
  3. package/dist/cjs/src/assetManager.d.ts +2 -2
  4. package/dist/cjs/src/assetManager.js +16 -16
  5. package/dist/cjs/src/assets/routes.js +2 -2
  6. package/dist/cjs/src/authManager.d.ts +12 -0
  7. package/dist/cjs/src/authManager.js +60 -0
  8. package/dist/cjs/src/codeGeneratorManager.d.ts +1 -1
  9. package/dist/cjs/src/codeGeneratorManager.js +3 -3
  10. package/dist/cjs/src/configManager.js +2 -2
  11. package/dist/cjs/src/definitionsManager.d.ts +7 -6
  12. package/dist/cjs/src/definitionsManager.js +102 -18
  13. package/dist/cjs/src/instanceManager.d.ts +1 -1
  14. package/dist/cjs/src/instanceManager.js +4 -4
  15. package/dist/cjs/src/instances/routes.js +2 -2
  16. package/dist/cjs/src/operatorManager.d.ts +1 -1
  17. package/dist/cjs/src/operatorManager.js +7 -9
  18. package/dist/cjs/src/providerManager.d.ts +2 -1
  19. package/dist/cjs/src/providerManager.js +23 -15
  20. package/dist/cjs/src/repositoryManager.d.ts +2 -2
  21. package/dist/cjs/src/repositoryManager.js +8 -9
  22. package/dist/cjs/src/utils/BlockInstanceRunner.js +6 -8
  23. package/dist/esm/index.js +4 -2
  24. package/dist/esm/src/assetManager.d.ts +2 -2
  25. package/dist/esm/src/assetManager.js +16 -16
  26. package/dist/esm/src/assets/routes.js +2 -2
  27. package/dist/esm/src/authManager.d.ts +12 -0
  28. package/dist/esm/src/authManager.js +60 -0
  29. package/dist/esm/src/codeGeneratorManager.d.ts +1 -1
  30. package/dist/esm/src/codeGeneratorManager.js +3 -3
  31. package/dist/esm/src/configManager.js +2 -2
  32. package/dist/esm/src/definitionsManager.d.ts +7 -6
  33. package/dist/esm/src/definitionsManager.js +102 -18
  34. package/dist/esm/src/instanceManager.d.ts +1 -1
  35. package/dist/esm/src/instanceManager.js +4 -4
  36. package/dist/esm/src/instances/routes.js +2 -2
  37. package/dist/esm/src/operatorManager.d.ts +1 -1
  38. package/dist/esm/src/operatorManager.js +7 -9
  39. package/dist/esm/src/providerManager.d.ts +2 -1
  40. package/dist/esm/src/providerManager.js +23 -15
  41. package/dist/esm/src/repositoryManager.d.ts +2 -2
  42. package/dist/esm/src/repositoryManager.js +8 -9
  43. package/dist/esm/src/utils/BlockInstanceRunner.js +6 -8
  44. package/index.ts +4 -2
  45. package/package.json +1 -1
  46. package/src/assetManager.ts +18 -16
  47. package/src/assets/routes.ts +2 -2
  48. package/src/authManager.ts +62 -0
  49. package/src/codeGeneratorManager.ts +3 -3
  50. package/src/configManager.ts +2 -2
  51. package/src/definitionsManager.ts +132 -17
  52. package/src/instanceManager.ts +4 -4
  53. package/src/instances/routes.ts +2 -2
  54. package/src/operatorManager.ts +7 -12
  55. package/src/providerManager.ts +27 -19
  56. package/src/repositoryManager.ts +8 -11
  57. package/src/utils/BlockInstanceRunner.ts +6 -8
@@ -15,6 +15,7 @@ import AsyncLock from 'async-lock';
15
15
  import { taskManager } from './taskManager';
16
16
 
17
17
  export const KIND_OPERATOR = 'core/resource-type-operator';
18
+ const KIND_PLAN = 'core/plan';
18
19
 
19
20
  class Operator {
20
21
  private readonly _data: DefinitionInfo;
@@ -57,8 +58,8 @@ class OperatorManager {
57
58
  * @param {string} version
58
59
  * @return {Operator}
59
60
  */
60
- getOperator(resourceType: string, version: string) {
61
- const operators = definitionsManager.getDefinitions(KIND_OPERATOR);
61
+ async getOperator(resourceType: string, version: string) {
62
+ const operators = await definitionsManager.getDefinitions(KIND_OPERATOR);
62
63
 
63
64
  const operator: DefinitionInfo | undefined = operators.find(
64
65
  (operator) =>
@@ -92,7 +93,7 @@ class OperatorManager {
92
93
  environment?: EnvironmentType
93
94
  ): Promise<OperatorInfo> {
94
95
  systemId = normalizeKapetaUri(systemId);
95
- const plans = definitionsManager.getDefinitions('core/plan');
96
+ const plans = await definitionsManager.getDefinitions(KIND_PLAN);
96
97
 
97
98
  const planUri = parseKapetaUri(systemId);
98
99
  const currentPlan = plans.find(
@@ -109,13 +110,7 @@ class OperatorManager {
109
110
  throw new Error(`Unknown instance: ${fromServiceId} in plan ${systemId}`);
110
111
  }
111
112
 
112
- const blockUri = parseKapetaUri(currentInstance.block.ref);
113
- const blockDefinition = definitionsManager
114
- .getDefinitions()
115
- .find(
116
- (definition) =>
117
- definition.version === blockUri.version && definition.definition.metadata.name === blockUri.fullName
118
- );
113
+ const blockDefinition = await definitionsManager.getDefinition(currentInstance.block.ref);
119
114
 
120
115
  if (!blockDefinition) {
121
116
  throw new Error(`Unknown block: ${currentInstance.block.ref} in plan ${systemId}`);
@@ -129,7 +124,7 @@ class OperatorManager {
129
124
  }
130
125
 
131
126
  const kindUri = parseKapetaUri(blockResource.kind);
132
- const operator = this.getOperator(resourceType, kindUri.version);
127
+ const operator = await this.getOperator(resourceType, kindUri.version);
133
128
  const credentials = operator.getCredentials();
134
129
  const container = await this.ensureResource(systemId, resourceType, kindUri.version);
135
130
  const portInfo = await container.getPort(portType);
@@ -164,7 +159,7 @@ class OperatorManager {
164
159
  systemId = normalizeKapetaUri(systemId);
165
160
  const key = `${systemId}#${resourceType}:${version}`;
166
161
  return await this.operatorLock.acquire(key, async () => {
167
- const operator = this.getOperator(resourceType, version);
162
+ const operator = await this.getOperator(resourceType, version);
168
163
 
169
164
  const operatorData = operator.getLocalData();
170
165
 
@@ -3,12 +3,14 @@ import FSExtra from 'fs-extra';
3
3
  import { definitionsManager } from './definitionsManager';
4
4
  import { cacheManager } from './cacheManager';
5
5
  import request from 'request';
6
+ import { DefinitionInfo } from '@kapeta/local-cluster-config';
6
7
 
7
8
  const PROVIDER_FILE_BASE = 'https://providers.kapeta.com/files';
8
9
 
9
10
  class ProviderManager {
10
- getWebProviders() {
11
- return definitionsManager.getProviderDefinitions().filter((providerDefinition) => providerDefinition.hasWeb);
11
+ async getWebProviders(): Promise<DefinitionInfo[]> {
12
+ const providers = await definitionsManager.getProviderDefinitions();
13
+ return providers.filter((providerDefinition) => providerDefinition.hasWeb);
12
14
  }
13
15
 
14
16
  async getProviderWebJS(handle: string, name: string, version: string, sourceMap: boolean = false) {
@@ -22,7 +24,8 @@ class ProviderManager {
22
24
  return FSExtra.readFile(file, 'utf8');
23
25
  }
24
26
 
25
- const installedProvider = this.getWebProviders().find((providerDefinition) => {
27
+ const providers = await this.getWebProviders();
28
+ const installedProvider = providers.find((providerDefinition) => {
26
29
  return providerDefinition.definition.metadata.name === fullName && providerDefinition.version === version;
27
30
  });
28
31
 
@@ -63,22 +66,27 @@ class ProviderManager {
63
66
  }
64
67
  }
65
68
 
66
- const providerDefinitions = definitionsManager.getProviderDefinitions();
67
-
68
- if (providerDefinitions.length > 0) {
69
- console.log('## Loaded the following providers ##');
70
- providerDefinitions.forEach((providerDefinition) => {
71
- console.log(
72
- ' - %s[%s:%s]',
73
- providerDefinition.definition.kind,
74
- providerDefinition.definition.metadata.name,
75
- providerDefinition.version
76
- );
77
- console.log(' from %s', providerDefinition.path);
69
+ definitionsManager
70
+ .getProviderDefinitions()
71
+ .then((providerDefinitions) => {
72
+ if (providerDefinitions.length > 0) {
73
+ console.log('## Loaded the following providers ##');
74
+ providerDefinitions.forEach((providerDefinition) => {
75
+ console.log(
76
+ ' - %s[%s:%s]',
77
+ providerDefinition.definition.kind,
78
+ providerDefinition.definition.metadata.name,
79
+ providerDefinition.version
80
+ );
81
+ console.log(' from %s', providerDefinition.path);
82
+ });
83
+ console.log('##');
84
+ } else {
85
+ console.log('## No providers found ##');
86
+ }
87
+ })
88
+ .catch((e) => {
89
+ console.error('Failed to load providers', e);
78
90
  });
79
- console.log('##');
80
- } else {
81
- console.log('## No providers found ##');
82
- }
83
91
 
84
92
  export const providerManager = new ProviderManager();
@@ -58,19 +58,19 @@ class RepositoryManager {
58
58
  return this.watcher.clearSourceOfChangeFor(file);
59
59
  }
60
60
 
61
- public ensureDefaultProviders(): void {
61
+ public async ensureDefaultProviders(): Promise<void> {
62
62
  socketManager.emitGlobal(EVENT_DEFAULT_PROVIDERS_START, { providers: DEFAULT_PROVIDERS });
63
- const tasks = this._install(DEFAULT_PROVIDERS);
63
+ const tasks = await this.scheduleInstallation(DEFAULT_PROVIDERS);
64
64
  Promise.allSettled(tasks.map((t) => t.wait())).then(() => {
65
65
  socketManager.emitGlobal(EVENT_DEFAULT_PROVIDERS_END, {});
66
66
  });
67
67
  }
68
68
 
69
- private _install(refs: string[]): Task[] {
69
+ private async scheduleInstallation(refs: string[]): Promise<Task[]> {
70
70
  //We make sure to only install one asset at a time - otherwise unexpected things might happen
71
71
  const createInstaller = (ref: string) => {
72
72
  return async () => {
73
- if (definitionsManager.exists(ref)) {
73
+ if (await definitionsManager.exists(ref)) {
74
74
  return;
75
75
  }
76
76
  //console.log(`Installing asset: ${ref}`);
@@ -97,7 +97,7 @@ class RepositoryManager {
97
97
  }
98
98
  ref = normalizeKapetaUri(ref);
99
99
 
100
- if (definitionsManager.exists(ref)) {
100
+ if (await definitionsManager.exists(ref)) {
101
101
  continue;
102
102
  }
103
103
 
@@ -126,10 +126,7 @@ class RepositoryManager {
126
126
  return;
127
127
  }
128
128
 
129
- const definitions = definitionsManager.getDefinitions();
130
- const installedAsset = definitions.find(
131
- (d) => d.definition.metadata.name === fullName && d.version === version
132
- );
129
+ const installedAsset = await definitionsManager.getDefinition(`${fullName}:${version}`);
133
130
 
134
131
  let assetVersion;
135
132
  try {
@@ -147,12 +144,12 @@ class RepositoryManager {
147
144
 
148
145
  let tasks: Task[] | undefined = undefined;
149
146
  if (!installedAsset) {
150
- tasks = this._install([ref]);
147
+ tasks = await this.scheduleInstallation([ref]);
151
148
  } else {
152
149
  //Ensure dependencies are installed
153
150
  const refs = assetVersion.dependencies.map((dep: Dependency) => dep.name);
154
151
  if (refs.length > 0) {
155
- tasks = this._install(refs);
152
+ tasks = await this.scheduleInstallation(refs);
156
153
  }
157
154
  }
158
155
 
@@ -25,8 +25,9 @@ const DOCKER_ENV_VARS = [
25
25
  `KAPETA_ENVIRONMENT_TYPE=docker`,
26
26
  ];
27
27
 
28
- function getProvider(uri: KapetaURI) {
29
- return definitionsManager.getProviderDefinitions().find((provider) => {
28
+ async function getProvider(uri: KapetaURI) {
29
+ const providers = await definitionsManager.getProviderDefinitions();
30
+ return providers.find((provider) => {
30
31
  const ref = `${provider.definition.metadata.name}:${provider.version}`;
31
32
  return parseKapetaUri(ref).id === uri.id;
32
33
  });
@@ -87,10 +88,7 @@ export class BlockInstanceRunner {
87
88
  blockUri.version = 'local';
88
89
  }
89
90
 
90
- const assetVersion = definitionsManager.getDefinitions().find((definitions) => {
91
- const ref = `${definitions.definition.metadata.name}:${definitions.version}`;
92
- return parseKapetaUri(ref).id === blockUri.id;
93
- });
91
+ const assetVersion = await definitionsManager.getDefinition(blockUri.id);
94
92
 
95
93
  if (!assetVersion) {
96
94
  throw new Error(`Block definition not found: ${blockUri.id}`);
@@ -98,7 +96,7 @@ export class BlockInstanceRunner {
98
96
 
99
97
  const kindUri = parseKapetaUri(assetVersion.definition.kind);
100
98
 
101
- const providerVersion = getProvider(kindUri);
99
+ const providerVersion = await getProvider(kindUri);
102
100
 
103
101
  if (!providerVersion) {
104
102
  throw new Error(`Kind not found: ${kindUri.id}`);
@@ -150,7 +148,7 @@ export class BlockInstanceRunner {
150
148
 
151
149
  const kindUri = parseKapetaUri(assetVersion.definition.spec?.target?.kind);
152
150
 
153
- const targetVersion = getProvider(kindUri);
151
+ const targetVersion = await getProvider(kindUri);
154
152
 
155
153
  if (!targetVersion) {
156
154
  throw new Error(`Target not found: ${kindUri.id}`);