@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.
- package/CHANGELOG.md +7 -0
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/src/assetManager.d.ts +2 -2
- package/dist/cjs/src/assetManager.js +16 -16
- package/dist/cjs/src/assets/routes.js +2 -2
- package/dist/cjs/src/authManager.d.ts +12 -0
- package/dist/cjs/src/authManager.js +60 -0
- package/dist/cjs/src/codeGeneratorManager.d.ts +1 -1
- package/dist/cjs/src/codeGeneratorManager.js +3 -3
- package/dist/cjs/src/configManager.js +2 -2
- package/dist/cjs/src/definitionsManager.d.ts +7 -6
- package/dist/cjs/src/definitionsManager.js +102 -18
- package/dist/cjs/src/instanceManager.d.ts +1 -1
- package/dist/cjs/src/instanceManager.js +4 -4
- package/dist/cjs/src/instances/routes.js +2 -2
- package/dist/cjs/src/operatorManager.d.ts +1 -1
- package/dist/cjs/src/operatorManager.js +7 -9
- package/dist/cjs/src/providerManager.d.ts +2 -1
- package/dist/cjs/src/providerManager.js +23 -15
- package/dist/cjs/src/repositoryManager.d.ts +2 -2
- package/dist/cjs/src/repositoryManager.js +8 -9
- package/dist/cjs/src/utils/BlockInstanceRunner.js +6 -8
- package/dist/esm/index.js +4 -2
- package/dist/esm/src/assetManager.d.ts +2 -2
- package/dist/esm/src/assetManager.js +16 -16
- package/dist/esm/src/assets/routes.js +2 -2
- package/dist/esm/src/authManager.d.ts +12 -0
- package/dist/esm/src/authManager.js +60 -0
- package/dist/esm/src/codeGeneratorManager.d.ts +1 -1
- package/dist/esm/src/codeGeneratorManager.js +3 -3
- package/dist/esm/src/configManager.js +2 -2
- package/dist/esm/src/definitionsManager.d.ts +7 -6
- package/dist/esm/src/definitionsManager.js +102 -18
- package/dist/esm/src/instanceManager.d.ts +1 -1
- package/dist/esm/src/instanceManager.js +4 -4
- package/dist/esm/src/instances/routes.js +2 -2
- package/dist/esm/src/operatorManager.d.ts +1 -1
- package/dist/esm/src/operatorManager.js +7 -9
- package/dist/esm/src/providerManager.d.ts +2 -1
- package/dist/esm/src/providerManager.js +23 -15
- package/dist/esm/src/repositoryManager.d.ts +2 -2
- package/dist/esm/src/repositoryManager.js +8 -9
- package/dist/esm/src/utils/BlockInstanceRunner.js +6 -8
- package/index.ts +4 -2
- package/package.json +1 -1
- package/src/assetManager.ts +18 -16
- package/src/assets/routes.ts +2 -2
- package/src/authManager.ts +62 -0
- package/src/codeGeneratorManager.ts +3 -3
- package/src/configManager.ts +2 -2
- package/src/definitionsManager.ts +132 -17
- package/src/instanceManager.ts +4 -4
- package/src/instances/routes.ts +2 -2
- package/src/operatorManager.ts +7 -12
- package/src/providerManager.ts +27 -19
- package/src/repositoryManager.ts +8 -11
- package/src/utils/BlockInstanceRunner.ts +6 -8
package/src/operatorManager.ts
CHANGED
@@ -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(
|
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
|
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
|
|
package/src/providerManager.ts
CHANGED
@@ -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
|
-
|
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
|
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
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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();
|
package/src/repositoryManager.ts
CHANGED
@@ -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.
|
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
|
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
|
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.
|
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.
|
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
|
-
|
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.
|
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}`);
|