@kapeta/local-cluster-service 0.17.0 → 0.19.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 +14 -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/containerManager.d.ts +15 -0
- package/dist/cjs/src/containerManager.js +190 -37
- 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 +7 -12
- 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/socketManager.d.ts +2 -2
- package/dist/cjs/src/socketManager.js +39 -14
- 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/containerManager.d.ts +15 -0
- package/dist/esm/src/containerManager.js +190 -37
- 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 +7 -12
- 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/socketManager.d.ts +2 -2
- package/dist/esm/src/socketManager.js +39 -14
- 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/containerManager.ts +210 -40
- package/src/definitionsManager.ts +132 -17
- package/src/instanceManager.ts +7 -14
- 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/socketManager.ts +42 -15
- package/src/utils/BlockInstanceRunner.ts +6 -8
package/src/instanceManager.ts
CHANGED
@@ -54,14 +54,14 @@ export class InstanceManager {
|
|
54
54
|
return [...this._instances];
|
55
55
|
}
|
56
56
|
|
57
|
-
public getInstancesForPlan(systemId: string) {
|
57
|
+
public async getInstancesForPlan(systemId: string) {
|
58
58
|
if (!this._instances) {
|
59
59
|
return [];
|
60
60
|
}
|
61
61
|
|
62
62
|
systemId = normalizeKapetaUri(systemId);
|
63
63
|
|
64
|
-
const planInfo = definitionsManager.getDefinition(systemId);
|
64
|
+
const planInfo = await definitionsManager.getDefinition(systemId);
|
65
65
|
|
66
66
|
if (!planInfo) {
|
67
67
|
return [];
|
@@ -458,9 +458,9 @@ export class InstanceManager {
|
|
458
458
|
|
459
459
|
const blockSpec = blockAsset.data.spec as BlockDefinitionSpec;
|
460
460
|
if (blockSpec.consumers) {
|
461
|
-
const promises = blockSpec.consumers.map((consumer) => {
|
461
|
+
const promises = blockSpec.consumers.map(async (consumer) => {
|
462
462
|
const consumerUri = parseKapetaUri(consumer.kind);
|
463
|
-
const asset = definitionsManager.getDefinition(consumer.kind);
|
463
|
+
const asset = await definitionsManager.getDefinition(consumer.kind);
|
464
464
|
if (!asset) {
|
465
465
|
// Definition not found
|
466
466
|
return Promise.resolve();
|
@@ -529,12 +529,6 @@ export class InstanceManager {
|
|
529
529
|
|
530
530
|
socketManager.emitInstanceLog(systemId, instanceId, logs[0]);
|
531
531
|
|
532
|
-
socketManager.emitInstanceEvent(systemId, blockInstance.id, EVENT_INSTANCE_EXITED, {
|
533
|
-
error: `Failed to start instance: ${e.message}`,
|
534
|
-
status: EVENT_INSTANCE_EXITED,
|
535
|
-
instanceId: blockInstance.id,
|
536
|
-
});
|
537
|
-
|
538
532
|
return out;
|
539
533
|
}
|
540
534
|
},
|
@@ -606,6 +600,7 @@ export class InstanceManager {
|
|
606
600
|
try {
|
607
601
|
const plan = await assetManager.getAsset(instance.systemId, true, false);
|
608
602
|
if (!plan) {
|
603
|
+
console.log('Plan not found - reset to stop', instance.ref, instance.systemId);
|
609
604
|
instance.desiredStatus = DesiredInstanceStatus.STOP;
|
610
605
|
changed = true;
|
611
606
|
return;
|
@@ -614,6 +609,7 @@ export class InstanceManager {
|
|
614
609
|
const planData = plan.data as Plan;
|
615
610
|
const planInstance = planData?.spec?.blocks?.find((b) => b.id === instance.instanceId);
|
616
611
|
if (!planInstance || !planInstance?.block?.ref) {
|
612
|
+
console.log('Plan instance not found - reset to stop', instance.ref, instance.systemId);
|
617
613
|
instance.desiredStatus = DesiredInstanceStatus.STOP;
|
618
614
|
changed = true;
|
619
615
|
return;
|
@@ -621,6 +617,7 @@ export class InstanceManager {
|
|
621
617
|
|
622
618
|
const blockDef = await assetManager.getAsset(instance.ref, true, false);
|
623
619
|
if (!blockDef) {
|
620
|
+
console.log('Block definition not found - reset to stop', instance.ref, instance.systemId);
|
624
621
|
instance.desiredStatus = DesiredInstanceStatus.STOP;
|
625
622
|
changed = true;
|
626
623
|
return;
|
@@ -836,7 +833,3 @@ export class InstanceManager {
|
|
836
833
|
}
|
837
834
|
|
838
835
|
export const instanceManager = new InstanceManager();
|
839
|
-
|
840
|
-
process.on('exit', async () => {
|
841
|
-
await instanceManager.stopAll();
|
842
|
-
});
|
package/src/instances/routes.ts
CHANGED
@@ -21,8 +21,8 @@ router.get('/', (req: Request, res: Response) => {
|
|
21
21
|
/**
|
22
22
|
* Get all instances
|
23
23
|
*/
|
24
|
-
router.get('/:systemId/instances', (req: Request, res: Response) => {
|
25
|
-
res.send(instanceManager.getInstancesForPlan(req.params.systemId));
|
24
|
+
router.get('/:systemId/instances', async (req: Request, res: Response) => {
|
25
|
+
res.send(await instanceManager.getInstancesForPlan(req.params.systemId));
|
26
26
|
});
|
27
27
|
|
28
28
|
/**
|
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
|
|
package/src/socketManager.ts
CHANGED
@@ -2,6 +2,7 @@ import _ from 'lodash';
|
|
2
2
|
import { Socket, Server } from 'socket.io';
|
3
3
|
import { normalizeKapetaUri } from './utils/utils';
|
4
4
|
import { LogEntry } from './types';
|
5
|
+
import { containerManager } from './containerManager';
|
5
6
|
export const EVENT_STATUS_CHANGED = 'status-changed';
|
6
7
|
export const EVENT_INSTANCE_CREATED = 'instance-created';
|
7
8
|
export const EVENT_INSTANCE_EXITED = 'instance-exited';
|
@@ -53,14 +54,24 @@ export class SocketManager {
|
|
53
54
|
emitSystemEvent(systemId: string, type: string, payload: any) {
|
54
55
|
systemId = normalizeKapetaUri(systemId);
|
55
56
|
try {
|
56
|
-
|
57
|
+
const contextId = `system-events/${encodeURIComponent(systemId)}`;
|
58
|
+
this.emit(contextId, type, payload);
|
57
59
|
} catch (e: any) {
|
58
60
|
console.warn('Failed to emit instance event: %s', e.message);
|
59
61
|
}
|
60
62
|
}
|
61
63
|
|
62
64
|
emitInstanceLog(systemId: string, instanceId: string, payload: LogEntry) {
|
63
|
-
|
65
|
+
systemId = normalizeKapetaUri(systemId);
|
66
|
+
try {
|
67
|
+
this.emit(
|
68
|
+
`instance-logs/${encodeURIComponent(systemId)}/${encodeURIComponent(instanceId)}`,
|
69
|
+
EVENT_INSTANCE_LOG,
|
70
|
+
payload
|
71
|
+
);
|
72
|
+
} catch (e: any) {
|
73
|
+
console.warn('Failed to emit instance event: %s', e.message);
|
74
|
+
}
|
64
75
|
}
|
65
76
|
|
66
77
|
emitSystemLog(systemId: string, payload: LogEntry) {
|
@@ -71,15 +82,6 @@ export class SocketManager {
|
|
71
82
|
this.emitGlobal(EVENT_LOG, payload);
|
72
83
|
}
|
73
84
|
|
74
|
-
emitInstanceEvent(systemId: string, instanceId: string, type: string, payload: any) {
|
75
|
-
systemId = normalizeKapetaUri(systemId);
|
76
|
-
try {
|
77
|
-
socketManager.emit(`${systemId}/instances/${instanceId}`, type, payload);
|
78
|
-
} catch (e: any) {
|
79
|
-
console.warn('Failed to emit instance event: %s', e.message);
|
80
|
-
}
|
81
|
-
}
|
82
|
-
|
83
85
|
private _bindIO() {
|
84
86
|
this.io.on('connection', (socket) => this._handleSocketCreated(socket));
|
85
87
|
}
|
@@ -90,17 +92,42 @@ export class SocketManager {
|
|
90
92
|
}
|
91
93
|
|
92
94
|
private _bindSocket(socket: Socket) {
|
93
|
-
socket.on('disconnect', () =>
|
95
|
+
socket.on('disconnect', () => {
|
96
|
+
_.pull(this._sockets, socket);
|
97
|
+
socket.rooms.forEach((roomId) => {
|
98
|
+
this.handleLeaveRoom(roomId);
|
99
|
+
});
|
100
|
+
});
|
94
101
|
socket.on('join', (id) => {
|
95
102
|
socket.join(id);
|
103
|
+
this.handleJoinRoom(id);
|
96
104
|
});
|
97
105
|
socket.on('leave', (id) => {
|
98
106
|
socket.leave(id);
|
107
|
+
this.handleLeaveRoom(id);
|
99
108
|
});
|
100
109
|
}
|
101
|
-
|
102
|
-
|
103
|
-
|
110
|
+
private handleJoinRoom(id: string) {
|
111
|
+
if (id.startsWith('instance-logs/')) {
|
112
|
+
let [, systemId, instanceId] = id.split(/\//g);
|
113
|
+
systemId = decodeURIComponent(systemId);
|
114
|
+
instanceId = decodeURIComponent(instanceId);
|
115
|
+
console.log('Start listening for logs', systemId, instanceId);
|
116
|
+
containerManager
|
117
|
+
.ensureLogListening(systemId, instanceId, (log) => {
|
118
|
+
this.emitInstanceLog(systemId, instanceId, log);
|
119
|
+
})
|
120
|
+
.catch((e) => {});
|
121
|
+
}
|
122
|
+
}
|
123
|
+
private handleLeaveRoom(id: string) {
|
124
|
+
if (id.startsWith('instance-logs/')) {
|
125
|
+
let [, systemId, instanceId] = id.split(/\//g);
|
126
|
+
systemId = decodeURIComponent(systemId);
|
127
|
+
instanceId = decodeURIComponent(instanceId);
|
128
|
+
console.log('Stop listening for logs', systemId, instanceId);
|
129
|
+
containerManager.stopLogListening(systemId, instanceId).catch((e) => {});
|
130
|
+
}
|
104
131
|
}
|
105
132
|
}
|
106
133
|
export const socketManager = new SocketManager();
|
@@ -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}`);
|