@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,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import FS from 'node:fs';
|
|
7
|
+
import YAML from 'yaml';
|
|
8
|
+
import md5 from 'md5';
|
|
9
|
+
import { EntityList, LocalInstance, LocalInstancePort, LocalInstancePortType } from '@kapeta/schemas';
|
|
10
|
+
import _ from 'lodash';
|
|
11
|
+
import { AnyMap, DOCKER_HOST_INTERNAL, EnvironmentType, KIND_BLOCK_TYPE_OPERATOR } from '../types';
|
|
12
|
+
import ClusterConfiguration from '@kapeta/local-cluster-config';
|
|
13
|
+
import { definitionsManager } from '../definitionsManager';
|
|
14
|
+
import { normalizeKapetaUri, parseKapetaUri } from '@kapeta/nodejs-utils';
|
|
15
|
+
import { assetManager } from '../assetManager';
|
|
16
|
+
import { serviceManager } from '../serviceManager';
|
|
17
|
+
import { clusterService } from '../clusterService';
|
|
18
|
+
|
|
19
|
+
export async function getBlockInstanceContainerName(systemId: string, instanceId: string, blockType?: string) {
|
|
20
|
+
if (!blockType) {
|
|
21
|
+
const instance = await assetManager.getBlockInstance(systemId, instanceId);
|
|
22
|
+
if (!instance) {
|
|
23
|
+
throw new Error(`Instance ${instanceId} not found in plan ${systemId}`);
|
|
24
|
+
}
|
|
25
|
+
const block = await assetManager.getAsset(instance.block.ref);
|
|
26
|
+
if (!block) {
|
|
27
|
+
throw new Error(`Block ${instance.block.ref} not found`);
|
|
28
|
+
}
|
|
29
|
+
blockType = block.data.kind;
|
|
30
|
+
}
|
|
31
|
+
const typeDefinition = await definitionsManager.getDefinition(blockType);
|
|
32
|
+
if (!typeDefinition) {
|
|
33
|
+
throw new Error(`Block type ${blockType} not found`);
|
|
34
|
+
}
|
|
35
|
+
if (
|
|
36
|
+
parseKapetaUri(typeDefinition.definition.kind).fullName === KIND_BLOCK_TYPE_OPERATOR &&
|
|
37
|
+
typeDefinition.definition.spec?.local?.singleton
|
|
38
|
+
) {
|
|
39
|
+
return `kapeta-instance-operator-${md5(normalizeKapetaUri(systemId) + normalizeKapetaUri(blockType))}`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return `kapeta-block-instance-${md5(normalizeKapetaUri(systemId) + instanceId)}`;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function toPortInfo(port: LocalInstancePort) {
|
|
46
|
+
if (typeof port === 'number' || typeof port === 'string') {
|
|
47
|
+
return { port: parseInt(`${port}`), type: 'tcp' };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!port.type) {
|
|
51
|
+
port.type = LocalInstancePortType.TCP;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return port;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function getOperatorInstancePorts(systemId: string, operatorId: string, local: LocalInstance) {
|
|
58
|
+
const localPorts = local.ports ?? {};
|
|
59
|
+
|
|
60
|
+
const promises = Object.entries(localPorts).map(async ([portType, value]) => {
|
|
61
|
+
const portInfo = toPortInfo(value);
|
|
62
|
+
const hostPort = await serviceManager.ensureServicePort(systemId, operatorId, portType);
|
|
63
|
+
return {
|
|
64
|
+
portType,
|
|
65
|
+
port: portInfo.port,
|
|
66
|
+
hostPort,
|
|
67
|
+
protocol: portInfo.type,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
return await Promise.all(promises);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Gets the hostname where all services are available - including the cluster service.
|
|
75
|
+
*
|
|
76
|
+
* For docker this is the internal docker host - otherwise it's the local machine
|
|
77
|
+
* Assumed to be the same address as the cluster service outside docker.
|
|
78
|
+
*/
|
|
79
|
+
export function getRemoteHostForEnvironment(environment: EnvironmentType | undefined): string {
|
|
80
|
+
return environment === 'docker' ? DOCKER_HOST_INTERNAL : clusterService.getClusterServiceHost();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Get the bind address for the given environment.
|
|
85
|
+
*
|
|
86
|
+
* Outside of docker we bind to 127.0.0.1 - inside we bind to everything (0.0.0.0)
|
|
87
|
+
*/
|
|
88
|
+
export function getBindAddressForEnvironment(
|
|
89
|
+
environment: EnvironmentType | undefined,
|
|
90
|
+
preferredHost = '127.0.0.1'
|
|
91
|
+
): string {
|
|
92
|
+
return environment === 'docker' ? '0.0.0.0' : preferredHost;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Get the docker host IP address for port binding.
|
|
97
|
+
*/
|
|
98
|
+
export function getDockerHostIp(preferredHost = '127.0.0.1') {
|
|
99
|
+
// On Linux we need to bind to 0.0.0.0 to be able to connect to it from docker containers.
|
|
100
|
+
// TODO: This might pose a security risk - so we should authenticate all requests using a shared secret/nonce that we pass around.
|
|
101
|
+
return isLinux() ? '0.0.0.0' : preferredHost;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function getRemoteUrl(id: string, defautValue: string) {
|
|
105
|
+
const remoteConfig = ClusterConfiguration.getClusterConfig().remote;
|
|
106
|
+
return remoteConfig?.[id] ?? defautValue;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export function readYML(path: string) {
|
|
110
|
+
const rawYaml = FS.readFileSync(path);
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
return YAML.parse(rawYaml.toString());
|
|
114
|
+
} catch (err) {
|
|
115
|
+
throw new Error(`Failed to parse plan YAML: ${err}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function isWindows() {
|
|
120
|
+
return 'win32' === process.platform;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function isMac() {
|
|
124
|
+
return 'darwin' === process.platform;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function isLinux() {
|
|
128
|
+
return !isWindows() && !isMac();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function getResolvedConfiguration(entities?: EntityList, config?: AnyMap, globalConfiguration?: AnyMap): AnyMap {
|
|
132
|
+
if (!entities || !globalConfiguration) {
|
|
133
|
+
return config || {};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const mergedConfig = config ? _.cloneDeep(config) : {};
|
|
137
|
+
entities.types?.forEach((type) => {
|
|
138
|
+
if (!type.properties) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
Object.entries(type.properties).forEach(([propertyName, property]) => {
|
|
142
|
+
if (!property.global) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const configPath = type.name + '.' + propertyName;
|
|
147
|
+
const defaultValue = globalConfiguration ? _.get(globalConfiguration, configPath) : undefined;
|
|
148
|
+
if (!_.has(mergedConfig, configPath)) {
|
|
149
|
+
_.set(mergedConfig, configPath, defaultValue);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
return mergedConfig;
|
|
155
|
+
}
|
package/start.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import localClusterService from './index';
|
|
7
|
+
|
|
8
|
+
localClusterService
|
|
9
|
+
.start()
|
|
10
|
+
.then(({ host, port }) => console.log('Listening on port %s:%s', host, port))
|
|
11
|
+
.catch((e) => {
|
|
12
|
+
console.error('Failed to start local cluster due to an error:\n\t - %s', e);
|
|
13
|
+
process.exit(1);
|
|
14
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { getRestMethodId } from '../../../src/proxy/types/rest';
|
|
7
|
+
import { Resource, ResourceMetadata } from '@kapeta/schemas';
|
|
8
|
+
|
|
9
|
+
describe('getRestMethodId', () => {
|
|
10
|
+
it('should match @Query in url', () => {
|
|
11
|
+
const restResource = new TestResource();
|
|
12
|
+
|
|
13
|
+
const restMethodId = getRestMethodId(restResource, 'POST', '/names?name=Ib');
|
|
14
|
+
expect(restMethodId).toBeDefined();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
class TestResource implements Resource {
|
|
19
|
+
kind = '';
|
|
20
|
+
metadata = new TestResourceMetaData();
|
|
21
|
+
|
|
22
|
+
get spec(): { [p: string]: any } {
|
|
23
|
+
return {
|
|
24
|
+
methods: [
|
|
25
|
+
{
|
|
26
|
+
responseType: {
|
|
27
|
+
ref: 'Name[]',
|
|
28
|
+
},
|
|
29
|
+
method: 'GET',
|
|
30
|
+
path: '/names',
|
|
31
|
+
arguments: {},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
responseType: {
|
|
35
|
+
ref: 'Name',
|
|
36
|
+
},
|
|
37
|
+
method: 'POST',
|
|
38
|
+
path: '/names',
|
|
39
|
+
arguments: {
|
|
40
|
+
name: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
transport: 'QUERY',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
class TestResourceMetaData implements ResourceMetadata {
|
|
52
|
+
[property: string]: any;
|
|
53
|
+
name: string = '';
|
|
54
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { PathTemplate } from '../../src/utils/pathTemplateParser';
|
|
7
|
+
|
|
8
|
+
describe('pathTemplateParser', () => {
|
|
9
|
+
it('must return parameters for query parameters from parse', () => {
|
|
10
|
+
const template = new PathTemplate('/names');
|
|
11
|
+
const parse = template.parse('/names?name=Ib#test');
|
|
12
|
+
console.log(parse);
|
|
13
|
+
expect(parse).toBeTruthy();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('must return parameters defined in url', () => {
|
|
17
|
+
const template = new PathTemplate('/names/{identityId}');
|
|
18
|
+
const parse = template.parse('/names/idn_xxyyzz');
|
|
19
|
+
expect(parse).toBeTruthy();
|
|
20
|
+
expect(parse).toMatchObject({ identityId: 'idn_xxyyzz' });
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('must return parameters defined in url regardless of query parameters', () => {
|
|
24
|
+
const template = new PathTemplate('/names/{identityId}');
|
|
25
|
+
const parse = template.parse('/names/idn_xxyyzz?name=Ib#test');
|
|
26
|
+
expect(parse).toBeTruthy();
|
|
27
|
+
expect(parse).toMatchObject({ identityId: 'idn_xxyyzz' });
|
|
28
|
+
});
|
|
29
|
+
});
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "@tsconfig/node18/tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"module": "node16",
|
|
5
|
+
"moduleResolution": "node16",
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"declaration": true,
|
|
8
|
+
"strict": true
|
|
9
|
+
},
|
|
10
|
+
"ts-node": {
|
|
11
|
+
"files": true
|
|
12
|
+
},
|
|
13
|
+
"include": ["definitions.d.ts", "src/**/*", "index.ts", "start.ts", "test/**/*.ts"],
|
|
14
|
+
"exclude": ["node_modules", "dist"]
|
|
15
|
+
}
|