@kapeta/local-cluster-service 0.0.0-96f91ef
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/.eslintrc.cjs +25 -0
- package/.github/workflows/check-license.yml +17 -0
- package/.github/workflows/main.yml +26 -0
- package/.prettierignore +4 -0
- package/.vscode/launch.json +19 -0
- package/CHANGELOG.md +920 -0
- package/LICENSE +38 -0
- package/README.md +36 -0
- package/definitions.d.ts +35 -0
- package/dist/cjs/index.d.ts +34 -0
- package/dist/cjs/index.js +263 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/src/RepositoryWatcher.d.ts +30 -0
- package/dist/cjs/src/RepositoryWatcher.js +332 -0
- package/dist/cjs/src/ai/aiClient.d.ts +20 -0
- package/dist/cjs/src/ai/aiClient.js +74 -0
- package/dist/cjs/src/ai/routes.d.ts +7 -0
- package/dist/cjs/src/ai/routes.js +37 -0
- package/dist/cjs/src/ai/transform.d.ts +11 -0
- package/dist/cjs/src/ai/transform.js +239 -0
- package/dist/cjs/src/ai/types.d.ts +40 -0
- package/dist/cjs/src/ai/types.js +2 -0
- package/dist/cjs/src/api.d.ts +7 -0
- package/dist/cjs/src/api.js +29 -0
- package/dist/cjs/src/assetManager.d.ts +41 -0
- package/dist/cjs/src/assetManager.js +274 -0
- package/dist/cjs/src/assets/routes.d.ts +7 -0
- package/dist/cjs/src/assets/routes.js +165 -0
- package/dist/cjs/src/attachments/routes.d.ts +7 -0
- package/dist/cjs/src/attachments/routes.js +72 -0
- package/dist/cjs/src/authManager.d.ts +16 -0
- package/dist/cjs/src/authManager.js +64 -0
- package/dist/cjs/src/cacheManager.d.ts +20 -0
- package/dist/cjs/src/cacheManager.js +51 -0
- package/dist/cjs/src/clusterService.d.ts +44 -0
- package/dist/cjs/src/clusterService.js +120 -0
- package/dist/cjs/src/codeGeneratorManager.d.ts +14 -0
- package/dist/cjs/src/codeGeneratorManager.js +93 -0
- package/dist/cjs/src/config/routes.d.ts +7 -0
- package/dist/cjs/src/config/routes.js +160 -0
- package/dist/cjs/src/configManager.d.ts +42 -0
- package/dist/cjs/src/configManager.js +136 -0
- package/dist/cjs/src/containerManager.d.ts +148 -0
- package/dist/cjs/src/containerManager.js +958 -0
- package/dist/cjs/src/definitionsManager.d.ts +20 -0
- package/dist/cjs/src/definitionsManager.js +171 -0
- package/dist/cjs/src/filesystem/routes.d.ts +7 -0
- package/dist/cjs/src/filesystem/routes.js +105 -0
- package/dist/cjs/src/filesystemManager.d.ts +27 -0
- package/dist/cjs/src/filesystemManager.js +118 -0
- package/dist/cjs/src/identities/routes.d.ts +7 -0
- package/dist/cjs/src/identities/routes.js +37 -0
- package/dist/cjs/src/instanceManager.d.ts +69 -0
- package/dist/cjs/src/instanceManager.js +910 -0
- package/dist/cjs/src/instances/routes.d.ts +7 -0
- package/dist/cjs/src/instances/routes.js +179 -0
- package/dist/cjs/src/middleware/cors.d.ts +6 -0
- package/dist/cjs/src/middleware/cors.js +14 -0
- package/dist/cjs/src/middleware/kapeta.d.ts +15 -0
- package/dist/cjs/src/middleware/kapeta.js +28 -0
- package/dist/cjs/src/middleware/stringBody.d.ts +9 -0
- package/dist/cjs/src/middleware/stringBody.js +18 -0
- package/dist/cjs/src/networkManager.d.ts +37 -0
- package/dist/cjs/src/networkManager.js +119 -0
- package/dist/cjs/src/operatorManager.d.ts +41 -0
- package/dist/cjs/src/operatorManager.js +211 -0
- package/dist/cjs/src/progressListener.d.ts +31 -0
- package/dist/cjs/src/progressListener.js +133 -0
- package/dist/cjs/src/providerManager.d.ts +11 -0
- package/dist/cjs/src/providerManager.js +84 -0
- package/dist/cjs/src/providers/routes.d.ts +7 -0
- package/dist/cjs/src/providers/routes.js +46 -0
- package/dist/cjs/src/proxy/routes.d.ts +7 -0
- package/dist/cjs/src/proxy/routes.js +115 -0
- package/dist/cjs/src/proxy/types/rest.d.ts +10 -0
- package/dist/cjs/src/proxy/types/rest.js +123 -0
- package/dist/cjs/src/proxy/types/web.d.ts +8 -0
- package/dist/cjs/src/proxy/types/web.js +61 -0
- package/dist/cjs/src/repositoryManager.d.ts +35 -0
- package/dist/cjs/src/repositoryManager.js +247 -0
- package/dist/cjs/src/serviceManager.d.ts +36 -0
- package/dist/cjs/src/serviceManager.js +106 -0
- package/dist/cjs/src/socketManager.d.ts +32 -0
- package/dist/cjs/src/socketManager.js +125 -0
- package/dist/cjs/src/storageService.d.ts +21 -0
- package/dist/cjs/src/storageService.js +81 -0
- package/dist/cjs/src/taskManager.d.ts +70 -0
- package/dist/cjs/src/taskManager.js +181 -0
- package/dist/cjs/src/tasks/routes.d.ts +7 -0
- package/dist/cjs/src/tasks/routes.js +39 -0
- package/dist/cjs/src/traffic/routes.d.ts +7 -0
- package/dist/cjs/src/traffic/routes.js +22 -0
- package/dist/cjs/src/types.d.ts +99 -0
- package/dist/cjs/src/types.js +39 -0
- package/dist/cjs/src/utils/BlockInstanceRunner.d.ts +28 -0
- package/dist/cjs/src/utils/BlockInstanceRunner.js +432 -0
- package/dist/cjs/src/utils/DefaultProviderInstaller.d.ts +15 -0
- package/dist/cjs/src/utils/DefaultProviderInstaller.js +136 -0
- package/dist/cjs/src/utils/InternalConfigProvider.d.ts +38 -0
- package/dist/cjs/src/utils/InternalConfigProvider.js +146 -0
- package/dist/cjs/src/utils/LogData.d.ts +23 -0
- package/dist/cjs/src/utils/LogData.js +46 -0
- package/dist/cjs/src/utils/commandLineUtils.d.ts +8 -0
- package/dist/cjs/src/utils/commandLineUtils.js +39 -0
- package/dist/cjs/src/utils/pathTemplateParser.d.ts +30 -0
- package/dist/cjs/src/utils/pathTemplateParser.js +135 -0
- package/dist/cjs/src/utils/utils.d.ts +40 -0
- package/dist/cjs/src/utils/utils.js +148 -0
- package/dist/cjs/start.d.ts +5 -0
- package/dist/cjs/start.js +17 -0
- package/dist/cjs/test/proxy/types/rest.test.d.ts +5 -0
- package/dist/cjs/test/proxy/types/rest.test.js +48 -0
- package/dist/cjs/test/utils/pathTemplateParser.test.d.ts +5 -0
- package/dist/cjs/test/utils/pathTemplateParser.test.js +27 -0
- package/dist/esm/index.d.ts +34 -0
- package/dist/esm/index.js +263 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/src/RepositoryWatcher.d.ts +30 -0
- package/dist/esm/src/RepositoryWatcher.js +332 -0
- package/dist/esm/src/ai/aiClient.d.ts +20 -0
- package/dist/esm/src/ai/aiClient.js +74 -0
- package/dist/esm/src/ai/routes.d.ts +7 -0
- package/dist/esm/src/ai/routes.js +37 -0
- package/dist/esm/src/ai/transform.d.ts +11 -0
- package/dist/esm/src/ai/transform.js +239 -0
- package/dist/esm/src/ai/types.d.ts +40 -0
- package/dist/esm/src/ai/types.js +2 -0
- package/dist/esm/src/api.d.ts +7 -0
- package/dist/esm/src/api.js +29 -0
- package/dist/esm/src/assetManager.d.ts +41 -0
- package/dist/esm/src/assetManager.js +274 -0
- package/dist/esm/src/assets/routes.d.ts +7 -0
- package/dist/esm/src/assets/routes.js +165 -0
- package/dist/esm/src/attachments/routes.d.ts +7 -0
- package/dist/esm/src/attachments/routes.js +72 -0
- package/dist/esm/src/authManager.d.ts +16 -0
- package/dist/esm/src/authManager.js +64 -0
- package/dist/esm/src/cacheManager.d.ts +20 -0
- package/dist/esm/src/cacheManager.js +51 -0
- package/dist/esm/src/clusterService.d.ts +44 -0
- package/dist/esm/src/clusterService.js +120 -0
- package/dist/esm/src/codeGeneratorManager.d.ts +14 -0
- package/dist/esm/src/codeGeneratorManager.js +93 -0
- package/dist/esm/src/config/routes.d.ts +7 -0
- package/dist/esm/src/config/routes.js +160 -0
- package/dist/esm/src/configManager.d.ts +42 -0
- package/dist/esm/src/configManager.js +136 -0
- package/dist/esm/src/containerManager.d.ts +148 -0
- package/dist/esm/src/containerManager.js +958 -0
- package/dist/esm/src/definitionsManager.d.ts +20 -0
- package/dist/esm/src/definitionsManager.js +171 -0
- package/dist/esm/src/filesystem/routes.d.ts +7 -0
- package/dist/esm/src/filesystem/routes.js +105 -0
- package/dist/esm/src/filesystemManager.d.ts +27 -0
- package/dist/esm/src/filesystemManager.js +118 -0
- package/dist/esm/src/identities/routes.d.ts +7 -0
- package/dist/esm/src/identities/routes.js +37 -0
- package/dist/esm/src/instanceManager.d.ts +69 -0
- package/dist/esm/src/instanceManager.js +910 -0
- package/dist/esm/src/instances/routes.d.ts +7 -0
- package/dist/esm/src/instances/routes.js +179 -0
- package/dist/esm/src/middleware/cors.d.ts +6 -0
- package/dist/esm/src/middleware/cors.js +14 -0
- package/dist/esm/src/middleware/kapeta.d.ts +15 -0
- package/dist/esm/src/middleware/kapeta.js +28 -0
- package/dist/esm/src/middleware/stringBody.d.ts +9 -0
- package/dist/esm/src/middleware/stringBody.js +18 -0
- package/dist/esm/src/networkManager.d.ts +37 -0
- package/dist/esm/src/networkManager.js +119 -0
- package/dist/esm/src/operatorManager.d.ts +41 -0
- package/dist/esm/src/operatorManager.js +211 -0
- package/dist/esm/src/progressListener.d.ts +31 -0
- package/dist/esm/src/progressListener.js +133 -0
- package/dist/esm/src/providerManager.d.ts +11 -0
- package/dist/esm/src/providerManager.js +84 -0
- package/dist/esm/src/providers/routes.d.ts +7 -0
- package/dist/esm/src/providers/routes.js +46 -0
- package/dist/esm/src/proxy/routes.d.ts +7 -0
- package/dist/esm/src/proxy/routes.js +115 -0
- package/dist/esm/src/proxy/types/rest.d.ts +10 -0
- package/dist/esm/src/proxy/types/rest.js +123 -0
- package/dist/esm/src/proxy/types/web.d.ts +8 -0
- package/dist/esm/src/proxy/types/web.js +61 -0
- package/dist/esm/src/repositoryManager.d.ts +35 -0
- package/dist/esm/src/repositoryManager.js +247 -0
- package/dist/esm/src/serviceManager.d.ts +36 -0
- package/dist/esm/src/serviceManager.js +106 -0
- package/dist/esm/src/socketManager.d.ts +32 -0
- package/dist/esm/src/socketManager.js +125 -0
- package/dist/esm/src/storageService.d.ts +21 -0
- package/dist/esm/src/storageService.js +81 -0
- package/dist/esm/src/taskManager.d.ts +70 -0
- package/dist/esm/src/taskManager.js +181 -0
- package/dist/esm/src/tasks/routes.d.ts +7 -0
- package/dist/esm/src/tasks/routes.js +39 -0
- package/dist/esm/src/traffic/routes.d.ts +7 -0
- package/dist/esm/src/traffic/routes.js +22 -0
- package/dist/esm/src/types.d.ts +99 -0
- package/dist/esm/src/types.js +39 -0
- package/dist/esm/src/utils/BlockInstanceRunner.d.ts +28 -0
- package/dist/esm/src/utils/BlockInstanceRunner.js +432 -0
- package/dist/esm/src/utils/DefaultProviderInstaller.d.ts +15 -0
- package/dist/esm/src/utils/DefaultProviderInstaller.js +136 -0
- package/dist/esm/src/utils/InternalConfigProvider.d.ts +38 -0
- package/dist/esm/src/utils/InternalConfigProvider.js +146 -0
- package/dist/esm/src/utils/LogData.d.ts +23 -0
- package/dist/esm/src/utils/LogData.js +46 -0
- package/dist/esm/src/utils/commandLineUtils.d.ts +8 -0
- package/dist/esm/src/utils/commandLineUtils.js +39 -0
- package/dist/esm/src/utils/pathTemplateParser.d.ts +30 -0
- package/dist/esm/src/utils/pathTemplateParser.js +135 -0
- package/dist/esm/src/utils/utils.d.ts +40 -0
- package/dist/esm/src/utils/utils.js +148 -0
- package/dist/esm/start.d.ts +5 -0
- package/dist/esm/start.js +17 -0
- package/dist/esm/test/proxy/types/rest.test.d.ts +5 -0
- package/dist/esm/test/proxy/types/rest.test.js +48 -0
- package/dist/esm/test/utils/pathTemplateParser.test.d.ts +5 -0
- package/dist/esm/test/utils/pathTemplateParser.test.js +27 -0
- package/index.ts +280 -0
- package/jest.config.js +8 -0
- package/package.json +134 -0
- package/src/RepositoryWatcher.ts +363 -0
- package/src/ai/aiClient.ts +93 -0
- package/src/ai/routes.ts +39 -0
- package/src/ai/transform.ts +275 -0
- package/src/ai/types.ts +45 -0
- package/src/api.ts +32 -0
- package/src/assetManager.ts +355 -0
- package/src/assets/routes.ts +183 -0
- package/src/attachments/routes.ts +79 -0
- package/src/authManager.ts +67 -0
- package/src/cacheManager.ts +59 -0
- package/src/clusterService.ts +142 -0
- package/src/codeGeneratorManager.ts +109 -0
- package/src/config/routes.ts +201 -0
- package/src/configManager.ts +180 -0
- package/src/containerManager.ts +1178 -0
- package/src/definitionsManager.ts +212 -0
- package/src/filesystem/routes.ts +123 -0
- package/src/filesystemManager.ts +133 -0
- package/src/identities/routes.ts +38 -0
- package/src/instanceManager.ts +1160 -0
- package/src/instances/routes.ts +203 -0
- package/src/middleware/cors.ts +14 -0
- package/src/middleware/kapeta.ts +41 -0
- package/src/middleware/stringBody.ts +21 -0
- package/src/networkManager.ts +148 -0
- package/src/operatorManager.ts +294 -0
- package/src/progressListener.ts +151 -0
- package/src/providerManager.ts +97 -0
- package/src/providers/routes.ts +51 -0
- package/src/proxy/routes.ts +153 -0
- package/src/proxy/types/rest.ts +172 -0
- package/src/proxy/types/web.ts +70 -0
- package/src/repositoryManager.ts +291 -0
- package/src/serviceManager.ts +133 -0
- package/src/socketManager.ts +138 -0
- package/src/storageService.ts +97 -0
- package/src/taskManager.ts +247 -0
- package/src/tasks/routes.ts +43 -0
- package/src/traffic/routes.ts +23 -0
- package/src/types.ts +112 -0
- package/src/utils/BlockInstanceRunner.ts +577 -0
- package/src/utils/DefaultProviderInstaller.ts +150 -0
- package/src/utils/InternalConfigProvider.ts +214 -0
- package/src/utils/LogData.ts +50 -0
- package/src/utils/commandLineUtils.ts +45 -0
- package/src/utils/pathTemplateParser.ts +157 -0
- package/src/utils/utils.ts +155 -0
- package/start.ts +14 -0
- package/test/proxy/types/rest.test.ts +54 -0
- package/test/utils/pathTemplateParser.test.ts +29 -0
- package/tsconfig.json +15 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
4
|
+
*/
|
5
|
+
import { DefinitionInfo } from '@kapeta/local-cluster-config';
|
6
|
+
export declare const SAMPLE_PLAN_NAME = "kapeta/sample-java-chat-plan";
|
7
|
+
declare class DefinitionsManager {
|
8
|
+
private resolveDefinitionsAndSamples;
|
9
|
+
private prepareSample;
|
10
|
+
private applyFilters;
|
11
|
+
getDefinitions(kindFilter?: string | string[]): Promise<DefinitionInfo[]>;
|
12
|
+
exists(ref: string): Promise<boolean>;
|
13
|
+
getProviderDefinitions(): Promise<DefinitionInfo[]>;
|
14
|
+
getDefinition(ref: string): Promise<DefinitionInfo | undefined>;
|
15
|
+
getLatestDefinition(name: string): Promise<DefinitionInfo | undefined>;
|
16
|
+
getVersions(assetName: string): Promise<DefinitionInfo[]>;
|
17
|
+
clearCache(): void;
|
18
|
+
}
|
19
|
+
export declare const definitionsManager: DefinitionsManager;
|
20
|
+
export {};
|
@@ -0,0 +1,171 @@
|
|
1
|
+
"use strict";
|
2
|
+
/**
|
3
|
+
* Copyright 2023 Kapeta Inc.
|
4
|
+
* SPDX-License-Identifier: BUSL-1.1
|
5
|
+
*/
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
8
|
+
};
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
exports.definitionsManager = exports.SAMPLE_PLAN_NAME = void 0;
|
11
|
+
const local_cluster_config_1 = __importDefault(require("@kapeta/local-cluster-config"));
|
12
|
+
const nodejs_utils_1 = require("@kapeta/nodejs-utils");
|
13
|
+
const cacheManager_1 = require("./cacheManager");
|
14
|
+
const nodejs_api_client_1 = require("@kapeta/nodejs-api-client");
|
15
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
16
|
+
const yaml_1 = __importDefault(require("yaml"));
|
17
|
+
const nodejs_registry_utils_1 = require("@kapeta/nodejs-registry-utils");
|
18
|
+
const progressListener_1 = require("./progressListener");
|
19
|
+
const path_1 = __importDefault(require("path"));
|
20
|
+
exports.SAMPLE_PLAN_NAME = 'kapeta/sample-java-chat-plan';
|
21
|
+
function getRenamed(definition, targetHandle) {
|
22
|
+
const originalUri = (0, nodejs_utils_1.parseKapetaUri)(definition.definition.metadata.name);
|
23
|
+
return `${targetHandle}/${originalUri.name}`;
|
24
|
+
}
|
25
|
+
function applyHandleChange(definition, targetHandle) {
|
26
|
+
definition.definition.metadata.name = getRenamed(definition, targetHandle);
|
27
|
+
// We also change the visibility to private
|
28
|
+
definition.definition.metadata.visibility = 'private';
|
29
|
+
return definition;
|
30
|
+
}
|
31
|
+
function normalizeFilters(kindFilter) {
|
32
|
+
let resolvedFilters = [];
|
33
|
+
if (kindFilter) {
|
34
|
+
if (Array.isArray(kindFilter)) {
|
35
|
+
resolvedFilters = [...kindFilter];
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
resolvedFilters = [kindFilter];
|
39
|
+
}
|
40
|
+
}
|
41
|
+
return resolvedFilters.map((k) => k.toLowerCase());
|
42
|
+
}
|
43
|
+
class DefinitionsManager {
|
44
|
+
async resolveDefinitionsAndSamples() {
|
45
|
+
const definitions = local_cluster_config_1.default.getDefinitions();
|
46
|
+
const samplePlan = definitions.find((d) => d.version === 'local' && d.definition.metadata.name === exports.SAMPLE_PLAN_NAME);
|
47
|
+
if (!samplePlan) {
|
48
|
+
return definitions;
|
49
|
+
}
|
50
|
+
// We will only rewrite the sample plan once since we change the handle to be the users handle
|
51
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
52
|
+
if (!api.hasToken()) {
|
53
|
+
// Not logged in yet, so we can't rewrite the sample plan
|
54
|
+
return definitions;
|
55
|
+
}
|
56
|
+
const profile = await api.getCurrentIdentity();
|
57
|
+
if (!profile) {
|
58
|
+
// Not logged in yet, so we can't rewrite the sample plan
|
59
|
+
return definitions;
|
60
|
+
}
|
61
|
+
try {
|
62
|
+
await this.prepareSample(definitions, samplePlan, profile);
|
63
|
+
}
|
64
|
+
catch (e) {
|
65
|
+
console.warn('Failed to prepare sample plan', e);
|
66
|
+
}
|
67
|
+
// Return the rewritten definitions
|
68
|
+
return local_cluster_config_1.default.getDefinitions();
|
69
|
+
}
|
70
|
+
async prepareSample(definitions, samplePlan, profile) {
|
71
|
+
const newName = getRenamed(samplePlan, profile.handle);
|
72
|
+
if (definitions.some((d) => d.definition.metadata.name === newName && d.version === 'local')) {
|
73
|
+
// We already have a local version of the sample plan
|
74
|
+
return definitions;
|
75
|
+
}
|
76
|
+
console.log('Rewriting sample plan to use handle %s', profile.handle);
|
77
|
+
applyHandleChange(samplePlan, profile.handle);
|
78
|
+
const planDef = samplePlan.definition;
|
79
|
+
const blockRefs = new Set();
|
80
|
+
planDef.spec.blocks.forEach((b) => {
|
81
|
+
const blockUri = (0, nodejs_utils_1.parseKapetaUri)(b.block.ref);
|
82
|
+
if (blockUri.version === 'local') {
|
83
|
+
blockRefs.add(blockUri.id);
|
84
|
+
b.block.ref = (0, nodejs_utils_1.normalizeKapetaUri)(`${profile.handle}/${blockUri.name}:local`);
|
85
|
+
}
|
86
|
+
});
|
87
|
+
// Rewrite all blocks that are referenced by the sample plan
|
88
|
+
const rewrittenBlocks = Array.from(blockRefs)
|
89
|
+
.map((ref) => definitions.find((d) => (0, nodejs_utils_1.normalizeKapetaUri)(d.definition.metadata.name + ':' + d.version) === (0, nodejs_utils_1.normalizeKapetaUri)(ref)))
|
90
|
+
.filter((d) => d !== undefined)
|
91
|
+
.map((d) => applyHandleChange(d, profile.handle));
|
92
|
+
// Persist the rewritten assets
|
93
|
+
const progressListener = new progressListener_1.ProgressListener();
|
94
|
+
const rewrittenAssets = [samplePlan, ...rewrittenBlocks];
|
95
|
+
const originalRefs = [`${exports.SAMPLE_PLAN_NAME}:local`, ...Array.from(blockRefs)];
|
96
|
+
// Store the original paths on the assets - we'll need them later
|
97
|
+
for (const asset of rewrittenAssets) {
|
98
|
+
asset.path = await fs_extra_1.default.readlink(asset.path);
|
99
|
+
asset.ymlPath = path_1.default.join(asset.path, path_1.default.basename(asset.ymlPath));
|
100
|
+
}
|
101
|
+
// Uninstall the original assets
|
102
|
+
// This removes the symlinks
|
103
|
+
console.log('Uninstalling original assets', originalRefs);
|
104
|
+
try {
|
105
|
+
await nodejs_registry_utils_1.Actions.uninstall(progressListener, originalRefs);
|
106
|
+
}
|
107
|
+
catch (err) {
|
108
|
+
console.warn('Failed to uninstall original assets', err);
|
109
|
+
}
|
110
|
+
for (const asset of rewrittenAssets) {
|
111
|
+
console.log('Updating %s ', asset.ymlPath);
|
112
|
+
await fs_extra_1.default.writeFile(asset.ymlPath, yaml_1.default.stringify(asset.definition));
|
113
|
+
console.log('Linking %s ', asset.path);
|
114
|
+
await nodejs_registry_utils_1.Actions.link(progressListener, asset.path);
|
115
|
+
}
|
116
|
+
console.log('Rewrite done for sample plan');
|
117
|
+
}
|
118
|
+
applyFilters(definitions, kindFilter) {
|
119
|
+
if (kindFilter.length === 0) {
|
120
|
+
return definitions;
|
121
|
+
}
|
122
|
+
return definitions.filter((d) => {
|
123
|
+
return kindFilter.includes(d.definition.kind.toLowerCase());
|
124
|
+
});
|
125
|
+
}
|
126
|
+
async getDefinitions(kindFilter) {
|
127
|
+
kindFilter = normalizeFilters(kindFilter);
|
128
|
+
const definitions = await (0, cacheManager_1.doCached)('definitionsManager:all', () => this.resolveDefinitionsAndSamples());
|
129
|
+
return this.applyFilters(definitions, kindFilter);
|
130
|
+
}
|
131
|
+
async exists(ref) {
|
132
|
+
return !!(await this.getDefinition(ref));
|
133
|
+
}
|
134
|
+
async getProviderDefinitions() {
|
135
|
+
return (0, cacheManager_1.doCached)('definitionsManager:providers', () => local_cluster_config_1.default.getProviderDefinitions());
|
136
|
+
}
|
137
|
+
async getDefinition(ref) {
|
138
|
+
const uri = (0, nodejs_utils_1.parseKapetaUri)(ref);
|
139
|
+
const definitions = await this.getDefinitions();
|
140
|
+
return definitions.find((d) => {
|
141
|
+
if (!uri.version) {
|
142
|
+
return d.definition.metadata.name.toLowerCase() === uri.fullName.toLowerCase();
|
143
|
+
}
|
144
|
+
return (0, nodejs_utils_1.parseKapetaUri)(`${d.definition.metadata.name}:${d.version}`).equals(uri);
|
145
|
+
});
|
146
|
+
}
|
147
|
+
async getLatestDefinition(name) {
|
148
|
+
const definitions = await this.getDefinitions();
|
149
|
+
const allVersions = definitions.filter((d) => {
|
150
|
+
return d.version !== 'local' && d.definition.metadata.name === name;
|
151
|
+
});
|
152
|
+
if (allVersions.length === 0) {
|
153
|
+
return;
|
154
|
+
}
|
155
|
+
allVersions.sort((a, b) => {
|
156
|
+
return (0, nodejs_utils_1.parseVersion)(a.version).compareTo((0, nodejs_utils_1.parseVersion)(b.version)) * -1;
|
157
|
+
});
|
158
|
+
return allVersions[0];
|
159
|
+
}
|
160
|
+
async getVersions(assetName) {
|
161
|
+
const uri = (0, nodejs_utils_1.parseKapetaUri)(assetName);
|
162
|
+
const definitions = await this.getDefinitions();
|
163
|
+
return definitions.filter((d) => {
|
164
|
+
return d.definition.metadata.name === uri.fullName;
|
165
|
+
});
|
166
|
+
}
|
167
|
+
clearCache() {
|
168
|
+
cacheManager_1.cacheManager.removePrefix('definitionsManager:');
|
169
|
+
}
|
170
|
+
}
|
171
|
+
exports.definitionsManager = new DefinitionsManager();
|
@@ -0,0 +1,105 @@
|
|
1
|
+
"use strict";
|
2
|
+
/**
|
3
|
+
* Copyright 2023 Kapeta Inc.
|
4
|
+
* SPDX-License-Identifier: BUSL-1.1
|
5
|
+
*/
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
8
|
+
};
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
const express_promise_router_1 = __importDefault(require("express-promise-router"));
|
11
|
+
const stringBody_1 = require("../middleware/stringBody");
|
12
|
+
const filesystemManager_1 = require("../filesystemManager");
|
13
|
+
const cors_1 = require("../middleware/cors");
|
14
|
+
let router = (0, express_promise_router_1.default)();
|
15
|
+
router.use('/', cors_1.corsHandler);
|
16
|
+
router.get('/root', (req, res) => {
|
17
|
+
res.send(filesystemManager_1.filesystemManager.getRootFolder());
|
18
|
+
});
|
19
|
+
router.get('/project/root', (req, res) => {
|
20
|
+
res.send(filesystemManager_1.filesystemManager.getProjectRootFolder());
|
21
|
+
});
|
22
|
+
router.use('/project/root', stringBody_1.stringBody);
|
23
|
+
router.post('/project/root', (req, res) => {
|
24
|
+
filesystemManager_1.filesystemManager.setProjectRootFolder(req.stringBody ?? '');
|
25
|
+
res.sendStatus(204);
|
26
|
+
});
|
27
|
+
router.get('/editor', (req, res) => {
|
28
|
+
res.send(filesystemManager_1.filesystemManager.getEditor());
|
29
|
+
});
|
30
|
+
router.use('/editor', stringBody_1.stringBody);
|
31
|
+
router.post('/editor', (req, res) => {
|
32
|
+
filesystemManager_1.filesystemManager.setEditor(req.stringBody ?? '');
|
33
|
+
res.sendStatus(204);
|
34
|
+
});
|
35
|
+
router.get('/release-channel', (req, res) => {
|
36
|
+
res.send(filesystemManager_1.filesystemManager.getReleaseChannel());
|
37
|
+
});
|
38
|
+
router.use('/release-channel', stringBody_1.stringBody);
|
39
|
+
router.post('/release-channel', (req, res) => {
|
40
|
+
filesystemManager_1.filesystemManager.setReleaseChannel(req.stringBody ?? '');
|
41
|
+
res.sendStatus(204);
|
42
|
+
});
|
43
|
+
router.get('/show-pixel-grid', (req, res) => {
|
44
|
+
res.send(filesystemManager_1.filesystemManager.getShowPixelGrid());
|
45
|
+
});
|
46
|
+
router.use('/show-pixel-grid', stringBody_1.stringBody);
|
47
|
+
router.post('/show-pixel-grid', (req, res) => {
|
48
|
+
filesystemManager_1.filesystemManager.setShowPixelGrid(req?.stringBody === 'true' ?? false);
|
49
|
+
res.sendStatus(204);
|
50
|
+
});
|
51
|
+
router.get('/snap-to-pixel-grid', (req, res) => {
|
52
|
+
res.send(filesystemManager_1.filesystemManager.getSnapToPixelGrid());
|
53
|
+
});
|
54
|
+
router.use('/snap-to-pixel-grid', stringBody_1.stringBody);
|
55
|
+
router.post('/snap-to-pixel-grid', (req, res) => {
|
56
|
+
filesystemManager_1.filesystemManager.setSnapToPixelGrid(req?.stringBody === 'true' ?? false);
|
57
|
+
res.sendStatus(204);
|
58
|
+
});
|
59
|
+
router.use('/', (req, res, next) => {
|
60
|
+
if (!req.query.path) {
|
61
|
+
res.status(400).send({ error: 'Missing required query parameter "path"' });
|
62
|
+
return;
|
63
|
+
}
|
64
|
+
next();
|
65
|
+
});
|
66
|
+
router.get('/list', async (req, res) => {
|
67
|
+
let pathArg = req.query.path;
|
68
|
+
try {
|
69
|
+
res.send(await filesystemManager_1.filesystemManager.readDirectory(pathArg));
|
70
|
+
}
|
71
|
+
catch (err) {
|
72
|
+
res.status(400).send({ error: '' + err });
|
73
|
+
}
|
74
|
+
});
|
75
|
+
router.get('/readfile', async (req, res) => {
|
76
|
+
let pathArg = req.query.path;
|
77
|
+
try {
|
78
|
+
res.send(await filesystemManager_1.filesystemManager.readFile(pathArg));
|
79
|
+
}
|
80
|
+
catch (err) {
|
81
|
+
res.status(400).send({ error: '' + err });
|
82
|
+
}
|
83
|
+
});
|
84
|
+
router.put('/mkdir', async (req, res) => {
|
85
|
+
let pathArg = req.query.path;
|
86
|
+
try {
|
87
|
+
await filesystemManager_1.filesystemManager.createFolder(pathArg);
|
88
|
+
res.sendStatus(204);
|
89
|
+
}
|
90
|
+
catch (err) {
|
91
|
+
res.status(400).send({ error: '' + err });
|
92
|
+
}
|
93
|
+
});
|
94
|
+
router.use('/writefile', stringBody_1.stringBody);
|
95
|
+
router.post('/writefile', async (req, res) => {
|
96
|
+
let pathArg = req.query.path;
|
97
|
+
try {
|
98
|
+
await filesystemManager_1.filesystemManager.writeFile(pathArg, req.stringBody ?? '');
|
99
|
+
res.sendStatus(204);
|
100
|
+
}
|
101
|
+
catch (err) {
|
102
|
+
res.status(400).send({ error: '' + err });
|
103
|
+
}
|
104
|
+
});
|
105
|
+
exports.default = router;
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
4
|
+
*/
|
5
|
+
/// <reference types="node" />
|
6
|
+
declare class FilesystemManager {
|
7
|
+
writeFile(path: string, data: string | Buffer): Promise<void>;
|
8
|
+
createFolder(path: string): Promise<void>;
|
9
|
+
readDirectory(path: string): Promise<{
|
10
|
+
path: string;
|
11
|
+
folder: boolean;
|
12
|
+
}[]>;
|
13
|
+
readFile(path: string): Promise<Buffer>;
|
14
|
+
getRootFolder(): string;
|
15
|
+
getProjectRootFolder(): string | undefined;
|
16
|
+
setProjectRootFolder(folder: string): void;
|
17
|
+
getEditor(): string | undefined;
|
18
|
+
setEditor(editor: string): void;
|
19
|
+
getReleaseChannel(): string | undefined;
|
20
|
+
setReleaseChannel(channel: string): void;
|
21
|
+
getShowPixelGrid(): boolean | undefined;
|
22
|
+
setShowPixelGrid(show: boolean): void;
|
23
|
+
getSnapToPixelGrid(): boolean | undefined;
|
24
|
+
setSnapToPixelGrid(snap: boolean): void;
|
25
|
+
}
|
26
|
+
export declare const filesystemManager: FilesystemManager;
|
27
|
+
export {};
|
@@ -0,0 +1,118 @@
|
|
1
|
+
"use strict";
|
2
|
+
/**
|
3
|
+
* Copyright 2023 Kapeta Inc.
|
4
|
+
* SPDX-License-Identifier: BUSL-1.1
|
5
|
+
*/
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
8
|
+
};
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
exports.filesystemManager = void 0;
|
11
|
+
const path_1 = __importDefault(require("path"));
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
13
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
14
|
+
const storageService_1 = require("./storageService");
|
15
|
+
const SECTION_ID = 'filesystem';
|
16
|
+
const PROJECT_ROOT = 'project_root';
|
17
|
+
const EDITOR = 'editor';
|
18
|
+
const RELEASE_CHANNEL = 'release_channel';
|
19
|
+
const SHOW_PIXEL_GRID = 'show_pixel_grid';
|
20
|
+
const SNAP_TO_PIXEL_GRID = 'snap_to_pixel_grid';
|
21
|
+
function isFile(path) {
|
22
|
+
try {
|
23
|
+
return fs_1.default.statSync(path).isFile();
|
24
|
+
}
|
25
|
+
catch (error) {
|
26
|
+
return false;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
class FilesystemManager {
|
30
|
+
async writeFile(path, data) {
|
31
|
+
const dirName = path_1.default.dirname(path);
|
32
|
+
if (!fs_1.default.existsSync(dirName)) {
|
33
|
+
fs_extra_1.default.mkdirpSync(dirName, {});
|
34
|
+
}
|
35
|
+
fs_1.default.writeFileSync(path, data);
|
36
|
+
}
|
37
|
+
async createFolder(path) {
|
38
|
+
return new Promise((resolve, reject) => {
|
39
|
+
fs_1.default.mkdir(path, (err) => {
|
40
|
+
if (err) {
|
41
|
+
err.message += '. You can only create one single folder at a time.';
|
42
|
+
reject(err.message);
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
resolve();
|
46
|
+
});
|
47
|
+
});
|
48
|
+
}
|
49
|
+
async readDirectory(path) {
|
50
|
+
return new Promise((resolve, reject) => {
|
51
|
+
let response = [];
|
52
|
+
fs_1.default.readdir(path, (err, files) => {
|
53
|
+
if (err) {
|
54
|
+
reject(new Error(err));
|
55
|
+
return;
|
56
|
+
}
|
57
|
+
files.forEach((file) => {
|
58
|
+
response.push({
|
59
|
+
path: path_1.default.join(path, file),
|
60
|
+
folder: fs_1.default.lstatSync(path_1.default.join(path, file)).isDirectory(),
|
61
|
+
});
|
62
|
+
});
|
63
|
+
resolve(response);
|
64
|
+
});
|
65
|
+
});
|
66
|
+
}
|
67
|
+
async readFile(path) {
|
68
|
+
return new Promise((resolve, reject) => {
|
69
|
+
if (!isFile(path)) {
|
70
|
+
reject(new Error('The path provided is invalid.Please check that the path and file name that were provided are spelled correctly. '));
|
71
|
+
}
|
72
|
+
else {
|
73
|
+
fs_1.default.readFile(path, (err, data) => {
|
74
|
+
if (err) {
|
75
|
+
reject(new Error(err.message));
|
76
|
+
return;
|
77
|
+
}
|
78
|
+
resolve(data);
|
79
|
+
});
|
80
|
+
}
|
81
|
+
});
|
82
|
+
}
|
83
|
+
getRootFolder() {
|
84
|
+
return require('os').homedir();
|
85
|
+
}
|
86
|
+
getProjectRootFolder() {
|
87
|
+
return storageService_1.storageService.get(SECTION_ID, PROJECT_ROOT);
|
88
|
+
}
|
89
|
+
setProjectRootFolder(folder) {
|
90
|
+
storageService_1.storageService.put(SECTION_ID, PROJECT_ROOT, folder);
|
91
|
+
}
|
92
|
+
getEditor() {
|
93
|
+
return storageService_1.storageService.get(SECTION_ID, EDITOR);
|
94
|
+
}
|
95
|
+
setEditor(editor) {
|
96
|
+
storageService_1.storageService.put(SECTION_ID, EDITOR, editor);
|
97
|
+
}
|
98
|
+
// Should we put this in its own manager service?
|
99
|
+
getReleaseChannel() {
|
100
|
+
return storageService_1.storageService.get('app', RELEASE_CHANNEL);
|
101
|
+
}
|
102
|
+
setReleaseChannel(channel) {
|
103
|
+
storageService_1.storageService.put('app', RELEASE_CHANNEL, channel);
|
104
|
+
}
|
105
|
+
getShowPixelGrid() {
|
106
|
+
return storageService_1.storageService.get('app', SHOW_PIXEL_GRID, true);
|
107
|
+
}
|
108
|
+
setShowPixelGrid(show) {
|
109
|
+
storageService_1.storageService.put('app', SHOW_PIXEL_GRID, show);
|
110
|
+
}
|
111
|
+
getSnapToPixelGrid() {
|
112
|
+
return storageService_1.storageService.get('app', SNAP_TO_PIXEL_GRID, false);
|
113
|
+
}
|
114
|
+
setSnapToPixelGrid(snap) {
|
115
|
+
storageService_1.storageService.put('app', SNAP_TO_PIXEL_GRID, snap);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
exports.filesystemManager = new FilesystemManager();
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"use strict";
|
2
|
+
/**
|
3
|
+
* Copyright 2023 Kapeta Inc.
|
4
|
+
* SPDX-License-Identifier: BUSL-1.1
|
5
|
+
*/
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
8
|
+
};
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
const express_promise_router_1 = __importDefault(require("express-promise-router"));
|
11
|
+
const nodejs_api_client_1 = require("@kapeta/nodejs-api-client");
|
12
|
+
const cors_1 = require("../middleware/cors");
|
13
|
+
const router = (0, express_promise_router_1.default)();
|
14
|
+
router.use('/', cors_1.corsHandler);
|
15
|
+
router.get('/current', async (req, res) => {
|
16
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
17
|
+
if (api.hasToken()) {
|
18
|
+
try {
|
19
|
+
res.json(await api.getCurrentIdentity());
|
20
|
+
return;
|
21
|
+
}
|
22
|
+
catch (e) {
|
23
|
+
console.error(e);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
res.status(200).json(null);
|
27
|
+
});
|
28
|
+
router.get('/:identityId/memberships', async (req, res) => {
|
29
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
30
|
+
if (api.hasToken()) {
|
31
|
+
res.send(await api.getMemberships(req.params.identityId));
|
32
|
+
}
|
33
|
+
else {
|
34
|
+
res.send([]);
|
35
|
+
}
|
36
|
+
});
|
37
|
+
exports.default = router;
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
4
|
+
*/
|
5
|
+
import { EnvironmentType, InstanceInfo, LogEntry } from './types';
|
6
|
+
import { Task } from './taskManager';
|
7
|
+
import { InstanceOperator } from '@kapeta/sdk-config';
|
8
|
+
export declare class InstanceManager {
|
9
|
+
private _interval;
|
10
|
+
private readonly _instances;
|
11
|
+
private readonly instanceLocks;
|
12
|
+
constructor();
|
13
|
+
private checkInstancesLater;
|
14
|
+
getInstances(): InstanceInfo[];
|
15
|
+
getInstancesForPlan(systemId: string): Promise<InstanceInfo[]>;
|
16
|
+
getInstance(systemId: string, instanceId: string): InstanceInfo | undefined;
|
17
|
+
private exclusive;
|
18
|
+
private isLocked;
|
19
|
+
getLogs(systemId: string, instanceId: string): Promise<LogEntry[]>;
|
20
|
+
saveInternalInstance(instance: InstanceInfo): Promise<InstanceInfo>;
|
21
|
+
/**
|
22
|
+
* Method is called when instance is started from the Kapeta SDKs (e.g. NodeJS SDK)
|
23
|
+
* which self-registers with the cluster service locally on startup.
|
24
|
+
*/
|
25
|
+
registerInstanceFromSDK(systemId: string, instanceId: string, info: Omit<InstanceInfo, 'systemId' | 'instanceId'>): Promise<InstanceInfo | undefined>;
|
26
|
+
private getHealthUrl;
|
27
|
+
markAsStopped(systemId: string, instanceId: string): Promise<void>;
|
28
|
+
startAllForPlan(systemId: string): Promise<Task<InstanceInfo[]>>;
|
29
|
+
stopAllForPlan(systemId: string): Task<void>;
|
30
|
+
getInstanceOperator(systemId: string, instanceId: string, environment?: EnvironmentType, ensureContainer?: boolean): Promise<InstanceOperator<any, any>>;
|
31
|
+
stop(systemId: string, instanceId: string): Promise<void>;
|
32
|
+
private stopInner;
|
33
|
+
start(systemId: string, instanceId: string, checkForSingleton?: boolean): Promise<InstanceInfo | Task<InstanceInfo>>;
|
34
|
+
/**
|
35
|
+
* Stops an instance but does not remove it from the list of active instances
|
36
|
+
*
|
37
|
+
* It will be started again next time the system checks the status of the instance
|
38
|
+
*
|
39
|
+
* We do it this way to not cause the user to wait for the instance to start again
|
40
|
+
*/
|
41
|
+
prepareForRestart(systemId: string, instanceId: string): Promise<void>;
|
42
|
+
stopAll(): Promise<void>;
|
43
|
+
private stopInstances;
|
44
|
+
private save;
|
45
|
+
private checkInstances;
|
46
|
+
private getExternalStatus;
|
47
|
+
private requestInstanceStatus;
|
48
|
+
private isSingletonOperator;
|
49
|
+
private getKindForAssetRef;
|
50
|
+
/**
|
51
|
+
* Get the kind of an asset. Use the maxDepth parameter to specify how deep to look for the
|
52
|
+
* kind. For example, if maxDepth is 2, the method will look for the kind of the asset and then
|
53
|
+
* the kind of the kind.
|
54
|
+
* @param assetRef The asset reference
|
55
|
+
* @param maxDepth The maximum depth to look for the kind
|
56
|
+
* @returns The kind of the asset or null if not found
|
57
|
+
*/
|
58
|
+
private getDeepKindForAssetRef;
|
59
|
+
private isUsingKind;
|
60
|
+
private getAllInstancesForKind;
|
61
|
+
/**
|
62
|
+
* Get the ids for all block instances except the ones of the specified kind
|
63
|
+
* @param systemId The plan reference id
|
64
|
+
* @param kind The kind to exclude. Can be a string or an array of strings
|
65
|
+
* @returns An array of block instance ids
|
66
|
+
*/
|
67
|
+
private getAllInstancesExceptKind;
|
68
|
+
}
|
69
|
+
export declare const instanceManager: InstanceManager;
|