@kapeta/local-cluster-service 0.16.8 → 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 +20 -0
- package/dist/cjs/index.js +6 -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/socketManager.js +6 -0
- package/dist/cjs/src/utils/BlockInstanceRunner.js +6 -8
- package/dist/cjs/src/utils/DefaultProviderInstaller.d.ts +11 -0
- package/dist/cjs/src/utils/DefaultProviderInstaller.js +129 -0
- package/dist/esm/index.js +67 -58
- package/dist/esm/src/RepositoryWatcher.js +40 -33
- package/dist/esm/src/api.js +14 -9
- package/dist/esm/src/assetManager.d.ts +2 -2
- package/dist/esm/src/assetManager.js +73 -67
- package/dist/esm/src/assets/routes.js +23 -18
- package/dist/esm/src/attachments/routes.js +14 -9
- package/dist/esm/src/authManager.d.ts +12 -0
- package/dist/esm/src/authManager.js +60 -0
- package/dist/esm/src/cacheManager.js +13 -5
- package/dist/esm/src/clusterService.js +6 -3
- package/dist/esm/src/codeGeneratorManager.d.ts +1 -1
- package/dist/esm/src/codeGeneratorManager.js +20 -14
- package/dist/esm/src/config/routes.js +30 -25
- package/dist/esm/src/configManager.js +29 -26
- package/dist/esm/src/containerManager.js +48 -39
- package/dist/esm/src/definitionsManager.d.ts +7 -6
- package/dist/esm/src/definitionsManager.js +114 -24
- package/dist/esm/src/filesystem/routes.js +21 -16
- package/dist/esm/src/filesystemManager.js +23 -17
- package/dist/esm/src/identities/routes.js +13 -8
- package/dist/esm/src/instanceManager.d.ts +1 -1
- package/dist/esm/src/instanceManager.js +165 -158
- package/dist/esm/src/instances/routes.js +39 -34
- package/dist/esm/src/middleware/cors.js +5 -1
- package/dist/esm/src/middleware/kapeta.js +8 -4
- package/dist/esm/src/middleware/stringBody.js +5 -1
- package/dist/esm/src/networkManager.js +15 -9
- package/dist/esm/src/operatorManager.d.ts +1 -1
- package/dist/esm/src/operatorManager.js +48 -44
- package/dist/esm/src/progressListener.js +16 -12
- package/dist/esm/src/providerManager.d.ts +2 -1
- package/dist/esm/src/providerManager.js +43 -29
- package/dist/esm/src/providers/routes.js +14 -9
- package/dist/esm/src/proxy/routes.js +26 -21
- package/dist/esm/src/proxy/types/rest.js +29 -22
- package/dist/esm/src/proxy/types/web.js +18 -11
- package/dist/esm/src/repositoryManager.d.ts +2 -2
- package/dist/esm/src/repositoryManager.js +33 -28
- package/dist/esm/src/serviceManager.js +25 -19
- package/dist/esm/src/socketManager.js +31 -18
- package/dist/esm/src/storageService.js +18 -12
- package/dist/esm/src/taskManager.js +12 -8
- package/dist/esm/src/tasks/routes.js +14 -9
- package/dist/esm/src/traffic/routes.js +12 -7
- package/dist/esm/src/types.js +11 -8
- package/dist/esm/src/utils/BlockInstanceRunner.js +60 -55
- package/dist/esm/src/utils/DefaultProviderInstaller.d.ts +11 -0
- package/dist/esm/src/utils/DefaultProviderInstaller.js +129 -0
- package/dist/esm/src/utils/LogData.js +5 -1
- package/dist/esm/src/utils/commandLineUtils.js +12 -7
- package/dist/esm/src/utils/pathTemplateParser.js +7 -2
- package/dist/esm/src/utils/utils.js +30 -17
- package/dist/esm/start.js +7 -2
- package/index.ts +7 -2
- package/package.json +10 -4
- 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 +5 -5
- 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 +6 -0
- package/src/utils/BlockInstanceRunner.ts +6 -8
- package/src/utils/DefaultProviderInstaller.ts +141 -0
- package/tsconfig.json +3 -2
package/dist/esm/src/api.js
CHANGED
@@ -1,21 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const express_promise_router_1 = __importDefault(require("express-promise-router"));
|
7
|
+
const cors_1 = require("./middleware/cors");
|
8
|
+
const nodejs_api_client_1 = require("@kapeta/nodejs-api-client");
|
9
|
+
const local_cluster_config_1 = __importDefault(require("@kapeta/local-cluster-config"));
|
5
10
|
const { createAPIRoute } = require('@kapeta/web-microfrontend/server');
|
6
11
|
const packageJson = require('../package.json');
|
7
|
-
const router =
|
8
|
-
const remoteServices =
|
9
|
-
router.use('/', corsHandler);
|
12
|
+
const router = (0, express_promise_router_1.default)();
|
13
|
+
const remoteServices = local_cluster_config_1.default.getClusterConfig().remoteServices ?? {};
|
14
|
+
router.use('/', cors_1.corsHandler);
|
10
15
|
router.use('/registry', createAPIRoute(remoteServices.registry ?? 'https://registry.kapeta.com', {
|
11
16
|
nonce: false,
|
12
17
|
userAgent: `KapetaDesktopCluster/${packageJson.version}`,
|
13
18
|
tokenFetcher: () => {
|
14
|
-
const api = new KapetaAPI();
|
19
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
15
20
|
if (api.hasToken()) {
|
16
21
|
return api.getAccessToken();
|
17
22
|
}
|
18
23
|
return null;
|
19
24
|
},
|
20
25
|
}));
|
21
|
-
|
26
|
+
exports.default = router;
|
@@ -17,8 +17,8 @@ declare class AssetManager {
|
|
17
17
|
* @param {string[]} [assetKinds]
|
18
18
|
* @returns {{path: *, ref: string, data: *, editable: boolean, kind: *, exists: boolean}[]}
|
19
19
|
*/
|
20
|
-
getAssets(assetKinds?: string[]): EnrichedAsset[]
|
21
|
-
getPlans(): EnrichedAsset[]
|
20
|
+
getAssets(assetKinds?: string[]): Promise<EnrichedAsset[]>;
|
21
|
+
getPlans(): Promise<EnrichedAsset[]>;
|
22
22
|
getPlan(ref: string, noCache?: boolean): Promise<Definition>;
|
23
23
|
getAsset(ref: string, noCache?: boolean, autoFetch?: boolean): Promise<EnrichedAsset | undefined>;
|
24
24
|
createAsset(path: string, yaml: BlockDefinition, sourceOfChange?: SourceOfChange): Promise<EnrichedAsset[]>;
|
@@ -1,15 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.assetManager = void 0;
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
9
|
+
const yaml_1 = __importDefault(require("yaml"));
|
10
|
+
const codeGeneratorManager_1 = require("./codeGeneratorManager");
|
11
|
+
const progressListener_1 = require("./progressListener");
|
12
|
+
const nodejs_utils_1 = require("@kapeta/nodejs-utils");
|
13
|
+
const repositoryManager_1 = require("./repositoryManager");
|
14
|
+
const nodejs_registry_utils_1 = require("@kapeta/nodejs-registry-utils");
|
15
|
+
const definitionsManager_1 = require("./definitionsManager");
|
16
|
+
const utils_1 = require("./utils/utils");
|
17
|
+
const taskManager_1 = require("./taskManager");
|
18
|
+
const cacheManager_1 = require("./cacheManager");
|
13
19
|
const CACHE_TTL = 60 * 60 * 1000; // 1 hour
|
14
20
|
const toKey = (ref) => `assetManager:asset:${ref}`;
|
15
21
|
function enrichAsset(asset) {
|
@@ -42,9 +48,9 @@ class AssetManager {
|
|
42
48
|
* @param {string[]} [assetKinds]
|
43
49
|
* @returns {{path: *, ref: string, data: *, editable: boolean, kind: *, exists: boolean}[]}
|
44
50
|
*/
|
45
|
-
getAssets(assetKinds) {
|
51
|
+
async getAssets(assetKinds) {
|
46
52
|
if (!assetKinds) {
|
47
|
-
const blockTypeProviders = definitionsManager.getDefinitions([
|
53
|
+
const blockTypeProviders = await definitionsManager_1.definitionsManager.getDefinitions([
|
48
54
|
'core/block-type',
|
49
55
|
'core/block-type-operator',
|
50
56
|
]);
|
@@ -53,10 +59,10 @@ class AssetManager {
|
|
53
59
|
});
|
54
60
|
assetKinds.push('core/plan');
|
55
61
|
}
|
56
|
-
const assets = definitionsManager.getDefinitions(assetKinds);
|
62
|
+
const assets = await definitionsManager_1.definitionsManager.getDefinitions(assetKinds);
|
57
63
|
return assets.map(enrichAsset);
|
58
64
|
}
|
59
|
-
getPlans() {
|
65
|
+
async getPlans() {
|
60
66
|
return this.getAssets(['core/plan']);
|
61
67
|
}
|
62
68
|
async getPlan(ref, noCache = false) {
|
@@ -67,51 +73,50 @@ class AssetManager {
|
|
67
73
|
return asset.data;
|
68
74
|
}
|
69
75
|
async getAsset(ref, noCache = false, autoFetch = true) {
|
70
|
-
ref = normalizeKapetaUri(ref);
|
76
|
+
ref = (0, utils_1.normalizeKapetaUri)(ref);
|
71
77
|
const cacheKey = toKey(ref);
|
72
|
-
if (!noCache && cacheManager.has(cacheKey)) {
|
73
|
-
return cacheManager.get(cacheKey);
|
78
|
+
if (!noCache && cacheManager_1.cacheManager.has(cacheKey)) {
|
79
|
+
return cacheManager_1.cacheManager.get(cacheKey);
|
74
80
|
}
|
75
|
-
const uri = parseKapetaUri(ref);
|
81
|
+
const uri = (0, nodejs_utils_1.parseKapetaUri)(ref);
|
76
82
|
if (autoFetch) {
|
77
|
-
await repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, true);
|
83
|
+
await repositoryManager_1.repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, true);
|
78
84
|
}
|
79
|
-
|
80
|
-
|
81
|
-
.map(enrichAsset)
|
82
|
-
.find((a) => parseKapetaUri(a.ref).equals(uri));
|
83
|
-
if (autoFetch && !asset) {
|
85
|
+
const definitionInfo = await definitionsManager_1.definitionsManager.getDefinition(ref);
|
86
|
+
if (autoFetch && !definitionInfo) {
|
84
87
|
throw new Error('Asset not found: ' + ref);
|
85
88
|
}
|
86
|
-
if (
|
87
|
-
|
89
|
+
if (definitionInfo) {
|
90
|
+
const asset = enrichAsset(definitionInfo);
|
91
|
+
cacheManager_1.cacheManager.set(cacheKey, asset, CACHE_TTL);
|
92
|
+
return asset;
|
88
93
|
}
|
89
|
-
return
|
94
|
+
return undefined;
|
90
95
|
}
|
91
96
|
async createAsset(path, yaml, sourceOfChange = 'filesystem') {
|
92
|
-
if (await
|
97
|
+
if (await fs_extra_1.default.pathExists(path)) {
|
93
98
|
throw new Error('File already exists: ' + path);
|
94
99
|
}
|
95
|
-
const dirName =
|
96
|
-
if (!(await
|
97
|
-
await
|
100
|
+
const dirName = node_path_1.default.dirname(path);
|
101
|
+
if (!(await fs_extra_1.default.pathExists(dirName))) {
|
102
|
+
await fs_extra_1.default.mkdirp(dirName);
|
98
103
|
}
|
99
|
-
await repositoryManager.setSourceOfChangeFor(path, sourceOfChange);
|
100
|
-
await
|
104
|
+
await repositoryManager_1.repositoryManager.setSourceOfChangeFor(path, sourceOfChange);
|
105
|
+
await fs_extra_1.default.writeFile(path, yaml_1.default.stringify(yaml));
|
101
106
|
const asset = await this.importFile(path);
|
102
107
|
asset.forEach((a) => {
|
103
|
-
const ref = normalizeKapetaUri(a.ref);
|
108
|
+
const ref = (0, utils_1.normalizeKapetaUri)(a.ref);
|
104
109
|
const key = toKey(ref);
|
105
|
-
cacheManager.set(key, a, CACHE_TTL);
|
110
|
+
cacheManager_1.cacheManager.set(key, a, CACHE_TTL);
|
106
111
|
});
|
107
|
-
definitionsManager.clearCache();
|
112
|
+
definitionsManager_1.definitionsManager.clearCache();
|
108
113
|
console.log(`Created asset at: ${path}`);
|
109
114
|
const ref = `kapeta://${yaml.metadata.name}:local`;
|
110
|
-
this.maybeGenerateCode(ref, path, yaml);
|
115
|
+
await this.maybeGenerateCode(ref, path, yaml);
|
111
116
|
return asset;
|
112
117
|
}
|
113
118
|
async updateAsset(ref, yaml, sourceOfChange = 'filesystem') {
|
114
|
-
ref = normalizeKapetaUri(ref);
|
119
|
+
ref = (0, utils_1.normalizeKapetaUri)(ref);
|
115
120
|
const asset = await this.getAsset(ref, true, false);
|
116
121
|
if (!asset) {
|
117
122
|
throw new Error('Attempted to update unknown asset: ' + ref);
|
@@ -122,31 +127,32 @@ class AssetManager {
|
|
122
127
|
if (!asset.ymlPath) {
|
123
128
|
throw new Error('Attempted to update corrupted asset: ' + ref);
|
124
129
|
}
|
125
|
-
await repositoryManager.setSourceOfChangeFor(asset.ymlPath, sourceOfChange);
|
126
|
-
await
|
130
|
+
await repositoryManager_1.repositoryManager.setSourceOfChangeFor(asset.ymlPath, sourceOfChange);
|
131
|
+
await fs_extra_1.default.writeFile(asset.ymlPath, yaml_1.default.stringify(yaml));
|
127
132
|
console.log(`Updated asset at: ${asset.ymlPath}`);
|
128
|
-
cacheManager.remove(toKey(ref));
|
129
|
-
definitionsManager.clearCache();
|
130
|
-
this.maybeGenerateCode(asset.ref, asset.ymlPath, yaml);
|
133
|
+
cacheManager_1.cacheManager.remove(toKey(ref));
|
134
|
+
definitionsManager_1.definitionsManager.clearCache();
|
135
|
+
await this.maybeGenerateCode(asset.ref, asset.ymlPath, yaml);
|
131
136
|
}
|
132
137
|
async importFile(filePath) {
|
133
138
|
if (filePath.startsWith('file://')) {
|
134
139
|
filePath = filePath.substring('file://'.length);
|
135
140
|
}
|
136
|
-
if (!(await
|
141
|
+
if (!(await fs_extra_1.default.pathExists(filePath))) {
|
137
142
|
throw new Error('File not found: ' + filePath);
|
138
143
|
}
|
139
|
-
const content = await
|
140
|
-
const assetInfos =
|
141
|
-
await Actions.link(new ProgressListener(),
|
144
|
+
const content = await fs_extra_1.default.readFile(filePath);
|
145
|
+
const assetInfos = yaml_1.default.parseAllDocuments(content.toString()).map((doc) => doc.toJSON());
|
146
|
+
await nodejs_registry_utils_1.Actions.link(new progressListener_1.ProgressListener(), node_path_1.default.dirname(filePath));
|
142
147
|
const version = 'local';
|
143
|
-
const refs = assetInfos.map((assetInfo) => normalizeKapetaUri(`kapeta://${assetInfo.metadata.name}:${version}`));
|
148
|
+
const refs = assetInfos.map((assetInfo) => (0, utils_1.normalizeKapetaUri)(`kapeta://${assetInfo.metadata.name}:${version}`));
|
144
149
|
refs.forEach((ref) => {
|
145
150
|
const key = toKey(ref);
|
146
|
-
cacheManager.remove(key);
|
151
|
+
cacheManager_1.cacheManager.remove(key);
|
147
152
|
});
|
148
|
-
definitionsManager.clearCache();
|
149
|
-
|
153
|
+
definitionsManager_1.definitionsManager.clearCache();
|
154
|
+
const assets = await this.getAssets();
|
155
|
+
return assets.filter((a) => refs.some((ref) => compareRefs(ref, a.ref)));
|
150
156
|
}
|
151
157
|
async unregisterAsset(ref) {
|
152
158
|
const asset = await this.getAsset(ref, true);
|
@@ -154,28 +160,28 @@ class AssetManager {
|
|
154
160
|
throw new Error('Asset does not exists: ' + ref);
|
155
161
|
}
|
156
162
|
const key = toKey(ref);
|
157
|
-
cacheManager.remove(key);
|
158
|
-
definitionsManager.clearCache();
|
159
|
-
await Actions.uninstall(new ProgressListener(), [asset.ref]);
|
163
|
+
cacheManager_1.cacheManager.remove(key);
|
164
|
+
definitionsManager_1.definitionsManager.clearCache();
|
165
|
+
await nodejs_registry_utils_1.Actions.uninstall(new progressListener_1.ProgressListener(), [asset.ref]);
|
160
166
|
}
|
161
167
|
async installAsset(ref) {
|
162
168
|
const asset = await this.getAsset(ref, true, false);
|
163
169
|
if (asset) {
|
164
170
|
throw new Error('Asset already installed: ' + ref);
|
165
171
|
}
|
166
|
-
const uri = parseKapetaUri(ref);
|
172
|
+
const uri = (0, nodejs_utils_1.parseKapetaUri)(ref);
|
167
173
|
console.log('Installing %s', ref);
|
168
174
|
const key = toKey(ref);
|
169
|
-
cacheManager.remove(key);
|
170
|
-
definitionsManager.clearCache();
|
171
|
-
return await repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, false);
|
175
|
+
cacheManager_1.cacheManager.remove(key);
|
176
|
+
definitionsManager_1.definitionsManager.clearCache();
|
177
|
+
return await repositoryManager_1.repositoryManager.ensureAsset(uri.handle, uri.name, uri.version, false);
|
172
178
|
}
|
173
|
-
maybeGenerateCode(ref, ymlPath, block) {
|
174
|
-
ref = normalizeKapetaUri(ref);
|
175
|
-
if (codeGeneratorManager.canGenerateCode(block)) {
|
176
|
-
const assetTitle = block.metadata.title ? block.metadata.title : parseKapetaUri(block.metadata.name).name;
|
177
|
-
taskManager.add(`codegen:${ref}`, async () => {
|
178
|
-
await codeGeneratorManager.generate(ymlPath, block);
|
179
|
+
async maybeGenerateCode(ref, ymlPath, block) {
|
180
|
+
ref = (0, utils_1.normalizeKapetaUri)(ref);
|
181
|
+
if (await codeGeneratorManager_1.codeGeneratorManager.canGenerateCode(block)) {
|
182
|
+
const assetTitle = block.metadata.title ? block.metadata.title : (0, nodejs_utils_1.parseKapetaUri)(block.metadata.name).name;
|
183
|
+
taskManager_1.taskManager.add(`codegen:${ref}`, async () => {
|
184
|
+
await codeGeneratorManager_1.codeGeneratorManager.generate(ymlPath, block);
|
179
185
|
}, {
|
180
186
|
name: `Generating code for ${assetTitle}`,
|
181
187
|
});
|
@@ -184,4 +190,4 @@ class AssetManager {
|
|
184
190
|
return false;
|
185
191
|
}
|
186
192
|
}
|
187
|
-
|
193
|
+
exports.assetManager = new AssetManager();
|
@@ -1,8 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const express_promise_router_1 = __importDefault(require("express-promise-router"));
|
7
|
+
const yaml_1 = __importDefault(require("yaml"));
|
8
|
+
const assetManager_1 = require("../assetManager");
|
9
|
+
const cors_1 = require("../middleware/cors");
|
10
|
+
const stringBody_1 = require("../middleware/stringBody");
|
6
11
|
function parseBody(req) {
|
7
12
|
switch (req.headers['content-type']) {
|
8
13
|
case 'application/json':
|
@@ -14,17 +19,17 @@ function parseBody(req) {
|
|
14
19
|
case 'text/yaml':
|
15
20
|
case 'text/x-yaml':
|
16
21
|
default:
|
17
|
-
return
|
22
|
+
return yaml_1.default.parse(req.stringBody ?? '{}');
|
18
23
|
}
|
19
24
|
}
|
20
|
-
const router =
|
21
|
-
router.use('/', corsHandler);
|
22
|
-
router.use('/', stringBody);
|
25
|
+
const router = (0, express_promise_router_1.default)();
|
26
|
+
router.use('/', cors_1.corsHandler);
|
27
|
+
router.use('/', stringBody_1.stringBody);
|
23
28
|
/**
|
24
29
|
* Get all local assets available
|
25
30
|
*/
|
26
|
-
router.get('/', (req, res) => {
|
27
|
-
res.send(assetManager.getAssets([]));
|
31
|
+
router.get('/', async (req, res) => {
|
32
|
+
res.send(await assetManager_1.assetManager.getAssets([]));
|
28
33
|
});
|
29
34
|
/**
|
30
35
|
* Get single asset
|
@@ -36,7 +41,7 @@ router.get('/read', async (req, res) => {
|
|
36
41
|
}
|
37
42
|
const ensure = req.query.ensure !== 'false';
|
38
43
|
try {
|
39
|
-
const asset = await assetManager.getAsset(req.query.ref, true, ensure);
|
44
|
+
const asset = await assetManager_1.assetManager.getAsset(req.query.ref, true, ensure);
|
40
45
|
if (asset) {
|
41
46
|
res.send(asset);
|
42
47
|
}
|
@@ -58,7 +63,7 @@ router.post('/create', async (req, res) => {
|
|
58
63
|
}
|
59
64
|
const content = parseBody(req);
|
60
65
|
try {
|
61
|
-
const assets = await assetManager.createAsset(req.query.path, content, 'user');
|
66
|
+
const assets = await assetManager_1.assetManager.createAsset(req.query.path, content, 'user');
|
62
67
|
res.status(200).send(assets);
|
63
68
|
}
|
64
69
|
catch (err) {
|
@@ -76,7 +81,7 @@ router.put('/update', async (req, res) => {
|
|
76
81
|
}
|
77
82
|
const content = parseBody(req);
|
78
83
|
try {
|
79
|
-
await assetManager.updateAsset(req.query.ref, content, 'user');
|
84
|
+
await assetManager_1.assetManager.updateAsset(req.query.ref, content, 'user');
|
80
85
|
res.sendStatus(204);
|
81
86
|
}
|
82
87
|
catch (err) {
|
@@ -93,7 +98,7 @@ router.delete('/', async (req, res) => {
|
|
93
98
|
return;
|
94
99
|
}
|
95
100
|
try {
|
96
|
-
await assetManager.unregisterAsset(req.query.ref);
|
101
|
+
await assetManager_1.assetManager.unregisterAsset(req.query.ref);
|
97
102
|
res.status(204).send();
|
98
103
|
}
|
99
104
|
catch (err) {
|
@@ -109,7 +114,7 @@ router.put('/import', async (req, res) => {
|
|
109
114
|
return;
|
110
115
|
}
|
111
116
|
try {
|
112
|
-
const assets = await assetManager.importFile(req.query.ref);
|
117
|
+
const assets = await assetManager_1.assetManager.importFile(req.query.ref);
|
113
118
|
res.status(200).send(assets);
|
114
119
|
}
|
115
120
|
catch (err) {
|
@@ -122,7 +127,7 @@ router.put('/install', async (req, res) => {
|
|
122
127
|
return;
|
123
128
|
}
|
124
129
|
try {
|
125
|
-
const tasks = await assetManager.installAsset(req.query.ref);
|
130
|
+
const tasks = await assetManager_1.assetManager.installAsset(req.query.ref);
|
126
131
|
const taskIds = tasks?.map((t) => t.id) ?? [];
|
127
132
|
res.status(200).send(taskIds);
|
128
133
|
}
|
@@ -130,4 +135,4 @@ router.put('/install', async (req, res) => {
|
|
130
135
|
res.status(400).send({ error: err.message });
|
131
136
|
}
|
132
137
|
});
|
133
|
-
|
138
|
+
exports.default = router;
|
@@ -1,15 +1,20 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
const
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const express_promise_router_1 = __importDefault(require("express-promise-router"));
|
7
|
+
const nodejs_api_client_1 = require("@kapeta/nodejs-api-client");
|
8
|
+
const cors_1 = require("../middleware/cors");
|
9
|
+
const storageService_1 = require("../storageService");
|
10
|
+
const router = (0, express_promise_router_1.default)();
|
11
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
7
12
|
const DEFAULT_REGISTRY_BASE = 'https://registry.kapeta.com';
|
8
13
|
function getBaseUrl() {
|
9
|
-
const endpoint = storageService.get('endpoints', 'registry', DEFAULT_REGISTRY_BASE);
|
14
|
+
const endpoint = storageService_1.storageService.get('endpoints', 'registry', DEFAULT_REGISTRY_BASE);
|
10
15
|
return `${endpoint}/v1/registry`;
|
11
16
|
}
|
12
|
-
router.use('/', corsHandler);
|
17
|
+
router.use('/', cors_1.corsHandler);
|
13
18
|
router.put('/:handle/:name', async (req, res) => {
|
14
19
|
if (!api.hasToken()) {
|
15
20
|
res.status(401).send({
|
@@ -60,4 +65,4 @@ router.put('/:handle/:name', async (req, res) => {
|
|
60
65
|
res.status(e.status ?? 500).send(e);
|
61
66
|
}
|
62
67
|
});
|
63
|
-
|
68
|
+
exports.default = router;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import { EventEmitter } from 'node:events';
|
3
|
+
declare class AuthManager extends EventEmitter {
|
4
|
+
private watcher?;
|
5
|
+
private hadToken;
|
6
|
+
constructor();
|
7
|
+
listenForChanges(): void;
|
8
|
+
private hasToken;
|
9
|
+
private handleFileChange;
|
10
|
+
}
|
11
|
+
export declare const authManager: AuthManager;
|
12
|
+
export {};
|
@@ -0,0 +1,60 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.authManager = void 0;
|
7
|
+
const node_events_1 = require("node:events");
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
9
|
+
const chokidar_1 = __importDefault(require("chokidar"));
|
10
|
+
const local_cluster_config_1 = __importDefault(require("@kapeta/local-cluster-config"));
|
11
|
+
const definitionsManager_1 = require("./definitionsManager");
|
12
|
+
const nodejs_api_client_1 = require("@kapeta/nodejs-api-client");
|
13
|
+
const socketManager_1 = require("./socketManager");
|
14
|
+
class AuthManager extends node_events_1.EventEmitter {
|
15
|
+
watcher;
|
16
|
+
hadToken;
|
17
|
+
constructor() {
|
18
|
+
super();
|
19
|
+
this.hadToken = this.hasToken();
|
20
|
+
}
|
21
|
+
listenForChanges() {
|
22
|
+
const parentDir = node_path_1.default.dirname(local_cluster_config_1.default.getKapetaBasedir());
|
23
|
+
//We watch the parent dir to catch changes to the base dir itself
|
24
|
+
this.watcher = chokidar_1.default.watch(parentDir, {
|
25
|
+
followSymlinks: false,
|
26
|
+
ignorePermissionErrors: true,
|
27
|
+
disableGlobbing: true,
|
28
|
+
persistent: true,
|
29
|
+
ignoreInitial: true,
|
30
|
+
depth: 1,
|
31
|
+
ignored: (path) => {
|
32
|
+
return !path.startsWith(local_cluster_config_1.default.getKapetaBasedir());
|
33
|
+
},
|
34
|
+
});
|
35
|
+
this.watcher.add(local_cluster_config_1.default.getKapetaBasedir());
|
36
|
+
this.watcher.on('all', this.handleFileChange.bind(this));
|
37
|
+
this.watcher.on('error', (error) => {
|
38
|
+
console.log('Error watching repository', error);
|
39
|
+
});
|
40
|
+
this.watcher.on('ready', () => {
|
41
|
+
console.log('Watching for auth changes: %s', local_cluster_config_1.default.getKapetaBasedir());
|
42
|
+
});
|
43
|
+
}
|
44
|
+
hasToken() {
|
45
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
46
|
+
return api.hasToken();
|
47
|
+
}
|
48
|
+
async handleFileChange(eventName, path) {
|
49
|
+
const hasTokenNow = this.hasToken();
|
50
|
+
if (this.hadToken !== hasTokenNow) {
|
51
|
+
socketManager_1.socketManager.emitGlobal('auth-change', {});
|
52
|
+
if (hasTokenNow) {
|
53
|
+
// Clear the cache in case we need to rewrite the sample plan
|
54
|
+
definitionsManager_1.definitionsManager.clearCache();
|
55
|
+
}
|
56
|
+
this.hadToken = hasTokenNow;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
exports.authManager = new AuthManager();
|
@@ -1,7 +1,13 @@
|
|
1
|
-
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.doCached = exports.cacheManager = exports.CacheManager = void 0;
|
7
|
+
const node_cache_1 = __importDefault(require("node-cache"));
|
2
8
|
const DEFAULT_CACHE_TTL = 60 * 1000; // 1 min
|
3
|
-
|
4
|
-
cache = new
|
9
|
+
class CacheManager {
|
10
|
+
cache = new node_cache_1.default();
|
5
11
|
flush() {
|
6
12
|
this.cache.flushAll();
|
7
13
|
}
|
@@ -35,5 +41,7 @@ export class CacheManager {
|
|
35
41
|
}
|
36
42
|
}
|
37
43
|
}
|
38
|
-
|
39
|
-
|
44
|
+
exports.CacheManager = CacheManager;
|
45
|
+
exports.cacheManager = new CacheManager();
|
46
|
+
const doCached = (key, getter, ttl = DEFAULT_CACHE_TTL) => exports.cacheManager.doCached(key, getter, ttl);
|
47
|
+
exports.doCached = doCached;
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.clusterService = void 0;
|
4
|
+
const utils_1 = require("./utils/utils");
|
2
5
|
const net = require('net');
|
3
6
|
const DEFAULT_SERVER_PORT = 35100;
|
4
7
|
const DEFAULT_START_PORT = 40000;
|
@@ -106,8 +109,8 @@ class ClusterService {
|
|
106
109
|
* @return {string}
|
107
110
|
*/
|
108
111
|
getProxyPath(systemId, consumerInstanceId, consumerResourceName, portType) {
|
109
|
-
systemId = normalizeKapetaUri(systemId);
|
112
|
+
systemId = (0, utils_1.normalizeKapetaUri)(systemId);
|
110
113
|
return `/proxy/${encodeURIComponent(systemId)}/${encodeURIComponent(consumerInstanceId)}/${encodeURIComponent(consumerResourceName)}/${encodeURIComponent(portType)}/`;
|
111
114
|
}
|
112
115
|
}
|
113
|
-
|
116
|
+
exports.clusterService = new ClusterService();
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { BlockDefinition } from '@kapeta/schemas';
|
2
2
|
declare class CodeGeneratorManager {
|
3
3
|
reload(): Promise<void>;
|
4
|
-
canGenerateCode(yamlContent: BlockDefinition): boolean
|
4
|
+
canGenerateCode(yamlContent: BlockDefinition): Promise<boolean>;
|
5
5
|
generate(yamlFile: string, yamlContent: BlockDefinition): Promise<void>;
|
6
6
|
}
|
7
7
|
export declare const codeGeneratorManager: CodeGeneratorManager;
|
@@ -1,21 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.codeGeneratorManager = void 0;
|
7
|
+
const path_1 = __importDefault(require("path"));
|
8
|
+
const codegen_1 = require("@kapeta/codegen");
|
9
|
+
const definitionsManager_1 = require("./definitionsManager");
|
4
10
|
const TARGET_KIND = 'core/language-target';
|
5
11
|
const BLOCK_TYPE_KIND = 'core/block-type';
|
6
12
|
class CodeGeneratorManager {
|
7
13
|
async reload() {
|
8
|
-
|
9
|
-
const languageTargets = definitionsManager.getDefinitions(TARGET_KIND);
|
14
|
+
codegen_1.registry.reset();
|
15
|
+
const languageTargets = await definitionsManager_1.definitionsManager.getDefinitions(TARGET_KIND);
|
10
16
|
for (const languageTarget of languageTargets) {
|
11
17
|
const key = `${languageTarget.definition.metadata.name}:${languageTarget.version}`;
|
12
18
|
try {
|
13
19
|
const target = require(languageTarget.path);
|
14
20
|
if (target.default) {
|
15
|
-
|
21
|
+
codegen_1.registry.register(key, target.default);
|
16
22
|
}
|
17
23
|
else {
|
18
|
-
|
24
|
+
codegen_1.registry.register(key, target);
|
19
25
|
}
|
20
26
|
}
|
21
27
|
catch (e) {
|
@@ -23,25 +29,25 @@ class CodeGeneratorManager {
|
|
23
29
|
}
|
24
30
|
}
|
25
31
|
}
|
26
|
-
canGenerateCode(yamlContent) {
|
32
|
+
async canGenerateCode(yamlContent) {
|
27
33
|
if (!yamlContent.spec.target?.kind) {
|
28
34
|
//Not all block types have targets
|
29
35
|
return false;
|
30
36
|
}
|
31
|
-
const blockTypes = definitionsManager.getDefinitions(BLOCK_TYPE_KIND);
|
37
|
+
const blockTypes = await definitionsManager_1.definitionsManager.getDefinitions(BLOCK_TYPE_KIND);
|
32
38
|
const blockTypeKinds = blockTypes.map((blockType) => blockType.definition.metadata.name.toLowerCase() + ':' + blockType.version);
|
33
39
|
return !!(yamlContent && yamlContent.kind && blockTypeKinds.indexOf(yamlContent.kind.toLowerCase()) > -1);
|
34
40
|
}
|
35
41
|
async generate(yamlFile, yamlContent) {
|
36
|
-
const baseDir =
|
42
|
+
const baseDir = path_1.default.dirname(yamlFile);
|
37
43
|
console.log('Generating code for path: %s', baseDir);
|
38
|
-
const codeGenerator = new BlockCodeGenerator(yamlContent);
|
44
|
+
const codeGenerator = new codegen_1.BlockCodeGenerator(yamlContent);
|
39
45
|
const output = await codeGenerator.generate();
|
40
|
-
const writer = new CodeWriter(baseDir, {});
|
46
|
+
const writer = new codegen_1.CodeWriter(baseDir, {});
|
41
47
|
const assets = writer.write(output);
|
42
48
|
await codeGenerator.postprocess(baseDir, assets);
|
43
49
|
console.log('Code generated for path: %s', baseDir);
|
44
50
|
}
|
45
51
|
}
|
46
|
-
|
47
|
-
codeGeneratorManager.reload();
|
52
|
+
exports.codeGeneratorManager = new CodeGeneratorManager();
|
53
|
+
exports.codeGeneratorManager.reload();
|