@kapeta/local-cluster-service 0.16.8 → 0.17.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 +13 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/src/socketManager.js +6 -0
- package/dist/cjs/src/utils/DefaultProviderInstaller.d.ts +11 -0
- package/dist/cjs/src/utils/DefaultProviderInstaller.js +129 -0
- package/dist/esm/index.js +64 -57
- package/dist/esm/src/RepositoryWatcher.js +40 -33
- package/dist/esm/src/api.js +14 -9
- package/dist/esm/src/assetManager.js +62 -56
- package/dist/esm/src/assets/routes.js +22 -17
- package/dist/esm/src/attachments/routes.js +14 -9
- package/dist/esm/src/cacheManager.js +13 -5
- package/dist/esm/src/clusterService.js +6 -3
- package/dist/esm/src/codeGeneratorManager.js +19 -13
- 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.js +15 -9
- 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.js +163 -156
- package/dist/esm/src/instances/routes.js +38 -33
- 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.js +45 -39
- package/dist/esm/src/progressListener.js +16 -12
- package/dist/esm/src/providerManager.js +22 -16
- 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.js +28 -22
- 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 +57 -50
- 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 +3 -0
- package/package.json +10 -4
- package/src/instanceManager.ts +1 -1
- package/src/socketManager.ts +6 -0
- package/src/utils/DefaultProviderInstaller.ts +141 -0
- package/tsconfig.json +3 -2
@@ -1,36 +1,39 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.configManager = void 0;
|
4
|
+
const storageService_1 = require("./storageService");
|
5
|
+
const assetManager_1 = require("./assetManager");
|
6
|
+
const nodejs_utils_1 = require("@kapeta/nodejs-utils");
|
7
|
+
const utils_1 = require("./utils/utils");
|
5
8
|
class ConfigManager {
|
6
9
|
_config;
|
7
10
|
constructor() {
|
8
|
-
this._config = storageService.section('config');
|
11
|
+
this._config = storageService_1.storageService.section('config');
|
9
12
|
}
|
10
13
|
_forSystem(systemId) {
|
11
|
-
systemId = normalizeKapetaUri(systemId);
|
14
|
+
systemId = (0, utils_1.normalizeKapetaUri)(systemId);
|
12
15
|
if (!this._config[systemId]) {
|
13
16
|
this._config[systemId] = {};
|
14
17
|
}
|
15
18
|
return this._config[systemId];
|
16
19
|
}
|
17
20
|
setConfigForSystem(systemId, config) {
|
18
|
-
systemId = normalizeKapetaUri(systemId);
|
21
|
+
systemId = (0, utils_1.normalizeKapetaUri)(systemId);
|
19
22
|
const systemConfig = config || {};
|
20
|
-
storageService.put('config', systemId, systemConfig);
|
23
|
+
storageService_1.storageService.put('config', systemId, systemConfig);
|
21
24
|
}
|
22
25
|
getConfigForSystem(systemId) {
|
23
|
-
systemId = normalizeKapetaUri(systemId);
|
26
|
+
systemId = (0, utils_1.normalizeKapetaUri)(systemId);
|
24
27
|
return this._forSystem(systemId);
|
25
28
|
}
|
26
29
|
setConfigForSection(systemId, sectionId, config) {
|
27
|
-
systemId = normalizeKapetaUri(systemId);
|
30
|
+
systemId = (0, utils_1.normalizeKapetaUri)(systemId);
|
28
31
|
let systemConfig = this._forSystem(systemId);
|
29
32
|
systemConfig[sectionId] = config || {};
|
30
|
-
storageService.put('config', systemId, systemConfig);
|
33
|
+
storageService_1.storageService.put('config', systemId, systemConfig);
|
31
34
|
}
|
32
35
|
getConfigForSection(systemId, sectionId) {
|
33
|
-
systemId = normalizeKapetaUri(systemId);
|
36
|
+
systemId = (0, utils_1.normalizeKapetaUri)(systemId);
|
34
37
|
const systemConfig = this._forSystem(systemId);
|
35
38
|
if (!systemConfig[sectionId]) {
|
36
39
|
systemConfig[sectionId] = {};
|
@@ -54,12 +57,12 @@ class ConfigManager {
|
|
54
57
|
* @returns {Promise<{systemId:string,instanceId:string}>}
|
55
58
|
*/
|
56
59
|
async resolveIdentity(blockRef, systemId) {
|
57
|
-
blockRef = normalizeKapetaUri(blockRef);
|
60
|
+
blockRef = (0, utils_1.normalizeKapetaUri)(blockRef);
|
58
61
|
if (systemId) {
|
59
|
-
systemId = normalizeKapetaUri(systemId);
|
62
|
+
systemId = (0, utils_1.normalizeKapetaUri)(systemId);
|
60
63
|
}
|
61
|
-
const planAssets = assetManager.getPlans();
|
62
|
-
const blockUri = parseKapetaUri(blockRef);
|
64
|
+
const planAssets = assetManager_1.assetManager.getPlans();
|
65
|
+
const blockUri = (0, nodejs_utils_1.parseKapetaUri)(blockRef);
|
63
66
|
let matchingIdentities = [];
|
64
67
|
planAssets.forEach((planAsset) => {
|
65
68
|
if (systemId && planAsset.ref !== systemId) {
|
@@ -70,10 +73,10 @@ class ConfigManager {
|
|
70
73
|
return;
|
71
74
|
}
|
72
75
|
planAsset.data.spec.blocks.forEach((blockInstance) => {
|
73
|
-
const refUri = parseKapetaUri(blockInstance.block.ref);
|
76
|
+
const refUri = (0, nodejs_utils_1.parseKapetaUri)(blockInstance.block.ref);
|
74
77
|
if (refUri.equals(blockUri)) {
|
75
78
|
matchingIdentities.push({
|
76
|
-
systemId: normalizeKapetaUri(planAsset.ref),
|
79
|
+
systemId: (0, utils_1.normalizeKapetaUri)(planAsset.ref),
|
77
80
|
instanceId: blockInstance.id,
|
78
81
|
});
|
79
82
|
}
|
@@ -94,19 +97,19 @@ class ConfigManager {
|
|
94
97
|
return matchingIdentities[0];
|
95
98
|
}
|
96
99
|
async verifyIdentity(blockRef, systemId, instanceId) {
|
97
|
-
blockRef = normalizeKapetaUri(blockRef);
|
98
|
-
systemId = normalizeKapetaUri(systemId);
|
99
|
-
const planAssets = assetManager.getPlans();
|
100
|
-
const systemUri = systemId ? parseKapetaUri(systemId) : null;
|
101
|
-
const blockUri = parseKapetaUri(blockRef);
|
100
|
+
blockRef = (0, utils_1.normalizeKapetaUri)(blockRef);
|
101
|
+
systemId = (0, utils_1.normalizeKapetaUri)(systemId);
|
102
|
+
const planAssets = assetManager_1.assetManager.getPlans();
|
103
|
+
const systemUri = systemId ? (0, nodejs_utils_1.parseKapetaUri)(systemId) : null;
|
104
|
+
const blockUri = (0, nodejs_utils_1.parseKapetaUri)(blockRef);
|
102
105
|
let found = false;
|
103
106
|
planAssets.forEach((planAsset) => {
|
104
|
-
if (systemUri && !parseKapetaUri(planAsset.ref).equals(systemUri)) {
|
107
|
+
if (systemUri && !(0, nodejs_utils_1.parseKapetaUri)(planAsset.ref).equals(systemUri)) {
|
105
108
|
//Skip plans that do not match systemid if provided
|
106
109
|
return;
|
107
110
|
}
|
108
111
|
planAsset.data.spec.blocks.forEach((blockInstance) => {
|
109
|
-
if (blockInstance.id === instanceId && parseKapetaUri(blockInstance.block.ref).equals(blockUri)) {
|
112
|
+
if (blockInstance.id === instanceId && (0, nodejs_utils_1.parseKapetaUri)(blockInstance.block.ref).equals(blockUri)) {
|
110
113
|
found = true;
|
111
114
|
}
|
112
115
|
});
|
@@ -116,4 +119,4 @@ class ConfigManager {
|
|
116
119
|
}
|
117
120
|
}
|
118
121
|
}
|
119
|
-
|
122
|
+
exports.configManager = new ConfigManager();
|
@@ -1,21 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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.containerManager = exports.toLocalBindVolume = exports.getExtraHosts = exports.ContainerInfo = exports.HEALTH_CHECK_TIMEOUT = exports.CONTAINER_LABEL_PORT_PREFIX = void 0;
|
7
|
+
const path_1 = __importDefault(require("path"));
|
8
|
+
const storageService_1 = require("./storageService");
|
9
|
+
const os_1 = __importDefault(require("os"));
|
10
|
+
const lodash_1 = __importDefault(require("lodash"));
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
12
|
+
const node_docker_api_1 = require("node-docker-api");
|
13
|
+
const nodejs_utils_1 = require("@kapeta/nodejs-utils");
|
14
|
+
const local_cluster_config_1 = __importDefault(require("@kapeta/local-cluster-config"));
|
15
|
+
const node_uuid_1 = __importDefault(require("node-uuid"));
|
16
|
+
const md5_1 = __importDefault(require("md5"));
|
17
|
+
const utils_1 = require("./utils/utils");
|
18
|
+
const nodejs_api_client_1 = require("@kapeta/nodejs-api-client");
|
19
|
+
const taskManager_1 = require("./taskManager");
|
20
|
+
exports.CONTAINER_LABEL_PORT_PREFIX = 'kapeta_port-';
|
15
21
|
const NANO_SECOND = 1000000;
|
16
22
|
const HEALTH_CHECK_INTERVAL = 3000;
|
17
23
|
const HEALTH_CHECK_MAX = 20;
|
18
|
-
|
24
|
+
exports.HEALTH_CHECK_TIMEOUT = HEALTH_CHECK_INTERVAL * HEALTH_CHECK_MAX * 2;
|
19
25
|
const promisifyStream = (stream, handler) => new Promise((resolve, reject) => {
|
20
26
|
stream.on('data', handler);
|
21
27
|
stream.on('end', resolve);
|
@@ -31,12 +37,12 @@ class ContainerManager {
|
|
31
37
|
this._docker = null;
|
32
38
|
this._alive = false;
|
33
39
|
this._version = '';
|
34
|
-
this._mountDir =
|
35
|
-
|
40
|
+
this._mountDir = path_1.default.join(storageService_1.storageService.getKapetaBasedir(), 'mounts');
|
41
|
+
fs_extra_1.default.mkdirpSync(this._mountDir);
|
36
42
|
}
|
37
43
|
async initialize() {
|
38
44
|
// Use the value from cluster-service.yml if configured
|
39
|
-
const dockerConfig =
|
45
|
+
const dockerConfig = local_cluster_config_1.default.getDockerConfig();
|
40
46
|
const connectOptions = Object.keys(dockerConfig).length > 0
|
41
47
|
? [dockerConfig]
|
42
48
|
: [
|
@@ -46,7 +52,7 @@ class ContainerManager {
|
|
46
52
|
{ socketPath: '/var/run/docker.sock' },
|
47
53
|
// default macOS
|
48
54
|
{
|
49
|
-
socketPath:
|
55
|
+
socketPath: path_1.default.join(os_1.default.homedir(), '.docker/run/docker.sock'),
|
50
56
|
},
|
51
57
|
// Default http
|
52
58
|
{ protocol: 'http', host: 'localhost', port: 2375 },
|
@@ -56,7 +62,7 @@ class ContainerManager {
|
|
56
62
|
];
|
57
63
|
for (const opts of connectOptions) {
|
58
64
|
try {
|
59
|
-
const client = new Docker({
|
65
|
+
const client = new node_docker_api_1.Docker({
|
60
66
|
...opts,
|
61
67
|
timeout: 10000,
|
62
68
|
});
|
@@ -101,9 +107,9 @@ class ContainerManager {
|
|
101
107
|
return this._alive;
|
102
108
|
}
|
103
109
|
getMountPoint(systemId, ref, mountName) {
|
104
|
-
const kindUri = parseKapetaUri(ref);
|
105
|
-
const systemUri = parseKapetaUri(systemId);
|
106
|
-
return
|
110
|
+
const kindUri = (0, nodejs_utils_1.parseKapetaUri)(ref);
|
111
|
+
const systemUri = (0, nodejs_utils_1.parseKapetaUri)(systemId);
|
112
|
+
return path_1.default.join(this._mountDir, systemUri.handle, systemUri.name, systemUri.version, kindUri.handle, kindUri.name, kindUri.version, mountName);
|
107
113
|
}
|
108
114
|
async createMounts(systemId, kind, mountOpts) {
|
109
115
|
const mounts = {};
|
@@ -111,7 +117,7 @@ class ContainerManager {
|
|
111
117
|
const mountOptList = Object.entries(mountOpts);
|
112
118
|
for (const [mountName, containerPath] of mountOptList) {
|
113
119
|
const hostPath = this.getMountPoint(systemId, kind, mountName);
|
114
|
-
await
|
120
|
+
await fs_extra_1.default.mkdirp(hostPath);
|
115
121
|
mounts[containerPath] = hostPath;
|
116
122
|
}
|
117
123
|
}
|
@@ -167,7 +173,7 @@ class ContainerManager {
|
|
167
173
|
const taskName = `Pulling image ${friendlyImageName}`;
|
168
174
|
const processor = async (task) => {
|
169
175
|
const timeStarted = Date.now();
|
170
|
-
const api = new KapetaAPI();
|
176
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
171
177
|
const accessToken = api.hasToken() ? await api.getAccessToken() : null;
|
172
178
|
const auth = accessToken && image.startsWith('docker.kapeta.com/')
|
173
179
|
? {
|
@@ -287,7 +293,7 @@ class ContainerManager {
|
|
287
293
|
};
|
288
294
|
task.emitUpdate();
|
289
295
|
};
|
290
|
-
const task = taskManager.add(`docker:image:pull:${image}`, processor, {
|
296
|
+
const task = taskManager_1.taskManager.add(`docker:image:pull:${image}`, processor, {
|
291
297
|
name: taskName,
|
292
298
|
image,
|
293
299
|
progress: -1,
|
@@ -297,7 +303,7 @@ class ContainerManager {
|
|
297
303
|
}
|
298
304
|
toDockerMounts(mounts) {
|
299
305
|
const Mounts = [];
|
300
|
-
|
306
|
+
lodash_1.default.forEach(mounts, (Source, Target) => {
|
301
307
|
Mounts.push({
|
302
308
|
Target,
|
303
309
|
Source: toLocalBindVolume(Source),
|
@@ -320,7 +326,7 @@ class ContainerManager {
|
|
320
326
|
if (dockerOpts?.Labels?.HASH) {
|
321
327
|
delete dockerOpts.Labels.HASH;
|
322
328
|
}
|
323
|
-
const hash =
|
329
|
+
const hash = (0, md5_1.default)(JSON.stringify(dockerOpts));
|
324
330
|
if (!dockerOpts.Labels) {
|
325
331
|
dockerOpts.Labels = {};
|
326
332
|
}
|
@@ -425,7 +431,7 @@ class ContainerManager {
|
|
425
431
|
}
|
426
432
|
}
|
427
433
|
async remove(container, opts) {
|
428
|
-
const newName = 'deleting-' +
|
434
|
+
const newName = 'deleting-' + node_uuid_1.default.v4();
|
429
435
|
const containerData = container.data;
|
430
436
|
// Rename the container first to avoid name conflicts if people start the same container
|
431
437
|
await container.rename({ name: newName });
|
@@ -452,7 +458,7 @@ class ContainerManager {
|
|
452
458
|
return new ContainerInfo(dockerContainer);
|
453
459
|
}
|
454
460
|
async getLogs(instance) {
|
455
|
-
const containerName = getBlockInstanceContainerName(instance.systemId, instance.instanceId);
|
461
|
+
const containerName = (0, utils_1.getBlockInstanceContainerName)(instance.systemId, instance.instanceId);
|
456
462
|
const containerInfo = await this.getContainerByName(containerName);
|
457
463
|
if (!containerInfo) {
|
458
464
|
return [
|
@@ -467,7 +473,7 @@ class ContainerManager {
|
|
467
473
|
return containerInfo.getLogs();
|
468
474
|
}
|
469
475
|
}
|
470
|
-
|
476
|
+
class ContainerInfo {
|
471
477
|
_container;
|
472
478
|
/**
|
473
479
|
*
|
@@ -501,7 +507,7 @@ export class ContainerInfo {
|
|
501
507
|
await this._container.stop();
|
502
508
|
}
|
503
509
|
async remove(opts) {
|
504
|
-
await containerManager.remove(this._container, opts);
|
510
|
+
await exports.containerManager.remove(this._container, opts);
|
505
511
|
}
|
506
512
|
async getPort(type) {
|
507
513
|
const ports = await this.getPorts();
|
@@ -530,14 +536,14 @@ export class ContainerInfo {
|
|
530
536
|
}
|
531
537
|
const portTypes = {};
|
532
538
|
const ports = {};
|
533
|
-
|
534
|
-
if (!name.startsWith(CONTAINER_LABEL_PORT_PREFIX)) {
|
539
|
+
lodash_1.default.forEach(inspectResult.Config.Labels, (portType, name) => {
|
540
|
+
if (!name.startsWith(exports.CONTAINER_LABEL_PORT_PREFIX)) {
|
535
541
|
return;
|
536
542
|
}
|
537
|
-
const hostPort = name.substr(CONTAINER_LABEL_PORT_PREFIX.length);
|
543
|
+
const hostPort = name.substr(exports.CONTAINER_LABEL_PORT_PREFIX.length);
|
538
544
|
portTypes[hostPort] = portType;
|
539
545
|
});
|
540
|
-
|
546
|
+
lodash_1.default.forEach(inspectResult.HostConfig.PortBindings, (portBindings, containerPortSpec) => {
|
541
547
|
let [containerPort, protocol] = containerPortSpec.split(/\//);
|
542
548
|
const hostPort = portBindings[0].HostPort;
|
543
549
|
const portType = portTypes[hostPort];
|
@@ -606,7 +612,8 @@ export class ContainerInfo {
|
|
606
612
|
return out;
|
607
613
|
}
|
608
614
|
}
|
609
|
-
|
615
|
+
exports.ContainerInfo = ContainerInfo;
|
616
|
+
function getExtraHosts(dockerVersion) {
|
610
617
|
if (process.platform !== 'darwin' && process.platform !== 'win32') {
|
611
618
|
const [major, minor] = dockerVersion.split('.');
|
612
619
|
if (parseInt(major) >= 20 && parseInt(minor) >= 10) {
|
@@ -619,6 +626,7 @@ export function getExtraHosts(dockerVersion) {
|
|
619
626
|
}
|
620
627
|
return undefined;
|
621
628
|
}
|
629
|
+
exports.getExtraHosts = getExtraHosts;
|
622
630
|
/**
|
623
631
|
* Ensure that the volume is in the correct format for the docker daemon on the host
|
624
632
|
*
|
@@ -626,7 +634,7 @@ export function getExtraHosts(dockerVersion) {
|
|
626
634
|
* Linux: /path/to/volume -> /path/to/volume
|
627
635
|
* Mac: /path/to/volume -> /path/to/volume
|
628
636
|
*/
|
629
|
-
|
637
|
+
function toLocalBindVolume(volume) {
|
630
638
|
if (process.platform === 'win32') {
|
631
639
|
//On Windows we need to convert c:\ to /c/
|
632
640
|
return volume
|
@@ -637,4 +645,5 @@ export function toLocalBindVolume(volume) {
|
|
637
645
|
}
|
638
646
|
return volume;
|
639
647
|
}
|
640
|
-
|
648
|
+
exports.toLocalBindVolume = toLocalBindVolume;
|
649
|
+
exports.containerManager = new ContainerManager();
|
@@ -1,6 +1,12 @@
|
|
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.definitionsManager = void 0;
|
7
|
+
const local_cluster_config_1 = __importDefault(require("@kapeta/local-cluster-config"));
|
8
|
+
const nodejs_utils_1 = require("@kapeta/nodejs-utils");
|
9
|
+
const cacheManager_1 = require("./cacheManager");
|
4
10
|
class DefinitionsManager {
|
5
11
|
getHash(kindFilter) {
|
6
12
|
if (kindFilter) {
|
@@ -16,25 +22,25 @@ class DefinitionsManager {
|
|
16
22
|
}
|
17
23
|
getDefinitions(kindFilter) {
|
18
24
|
const key = this.getFullKey(kindFilter);
|
19
|
-
return doCached(key, () =>
|
25
|
+
return (0, cacheManager_1.doCached)(key, () => local_cluster_config_1.default.getDefinitions(kindFilter));
|
20
26
|
}
|
21
27
|
exists(ref) {
|
22
28
|
return !!this.getDefinition(ref);
|
23
29
|
}
|
24
30
|
getProviderDefinitions() {
|
25
|
-
return doCached('providers', () =>
|
31
|
+
return (0, cacheManager_1.doCached)('providers', () => local_cluster_config_1.default.getProviderDefinitions());
|
26
32
|
}
|
27
33
|
getDefinition(ref) {
|
28
|
-
const uri = parseKapetaUri(ref);
|
34
|
+
const uri = (0, nodejs_utils_1.parseKapetaUri)(ref);
|
29
35
|
return this.getDefinitions().find((d) => {
|
30
36
|
if (!uri.version) {
|
31
37
|
return d.definition.metadata.name === uri.fullName;
|
32
38
|
}
|
33
|
-
return parseKapetaUri(`${d.definition.metadata.name}:${d.version}`).id === uri.id;
|
39
|
+
return (0, nodejs_utils_1.parseKapetaUri)(`${d.definition.metadata.name}:${d.version}`).id === uri.id;
|
34
40
|
});
|
35
41
|
}
|
36
42
|
clearCache() {
|
37
|
-
cacheManager.removePrefix('definitionsManager:');
|
43
|
+
cacheManager_1.cacheManager.removePrefix('definitionsManager:');
|
38
44
|
}
|
39
45
|
}
|
40
|
-
|
46
|
+
exports.definitionsManager = new DefinitionsManager();
|
@@ -1,18 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
router
|
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 stringBody_1 = require("../middleware/stringBody");
|
8
|
+
const filesystemManager_1 = require("../filesystemManager");
|
9
|
+
const cors_1 = require("../middleware/cors");
|
10
|
+
let router = (0, express_promise_router_1.default)();
|
11
|
+
router.use('/', cors_1.corsHandler);
|
7
12
|
router.get('/root', (req, res) => {
|
8
|
-
res.send(filesystemManager.getRootFolder());
|
13
|
+
res.send(filesystemManager_1.filesystemManager.getRootFolder());
|
9
14
|
});
|
10
15
|
router.get('/project/root', (req, res) => {
|
11
|
-
res.send(filesystemManager.getProjectRootFolder());
|
16
|
+
res.send(filesystemManager_1.filesystemManager.getProjectRootFolder());
|
12
17
|
});
|
13
|
-
router.use('/project/root', stringBody);
|
18
|
+
router.use('/project/root', stringBody_1.stringBody);
|
14
19
|
router.post('/project/root', (req, res) => {
|
15
|
-
filesystemManager.setProjectRootFolder(req.stringBody ?? '');
|
20
|
+
filesystemManager_1.filesystemManager.setProjectRootFolder(req.stringBody ?? '');
|
16
21
|
res.sendStatus(204);
|
17
22
|
});
|
18
23
|
router.use('/', (req, res, next) => {
|
@@ -25,7 +30,7 @@ router.use('/', (req, res, next) => {
|
|
25
30
|
router.get('/list', async (req, res) => {
|
26
31
|
let pathArg = req.query.path;
|
27
32
|
try {
|
28
|
-
res.send(await filesystemManager.readDirectory(pathArg));
|
33
|
+
res.send(await filesystemManager_1.filesystemManager.readDirectory(pathArg));
|
29
34
|
}
|
30
35
|
catch (err) {
|
31
36
|
res.status(400).send({ error: '' + err });
|
@@ -34,7 +39,7 @@ router.get('/list', async (req, res) => {
|
|
34
39
|
router.get('/readfile', async (req, res) => {
|
35
40
|
let pathArg = req.query.path;
|
36
41
|
try {
|
37
|
-
res.send(await filesystemManager.readFile(pathArg));
|
42
|
+
res.send(await filesystemManager_1.filesystemManager.readFile(pathArg));
|
38
43
|
}
|
39
44
|
catch (err) {
|
40
45
|
res.status(400).send({ error: '' + err });
|
@@ -43,22 +48,22 @@ router.get('/readfile', async (req, res) => {
|
|
43
48
|
router.put('/mkdir', async (req, res) => {
|
44
49
|
let pathArg = req.query.path;
|
45
50
|
try {
|
46
|
-
await filesystemManager.createFolder(pathArg);
|
51
|
+
await filesystemManager_1.filesystemManager.createFolder(pathArg);
|
47
52
|
res.sendStatus(204);
|
48
53
|
}
|
49
54
|
catch (err) {
|
50
55
|
res.status(400).send({ error: '' + err });
|
51
56
|
}
|
52
57
|
});
|
53
|
-
router.use('/writefile', stringBody);
|
58
|
+
router.use('/writefile', stringBody_1.stringBody);
|
54
59
|
router.post('/writefile', async (req, res) => {
|
55
60
|
let pathArg = req.query.path;
|
56
61
|
try {
|
57
|
-
await filesystemManager.writeFile(pathArg, req.stringBody ?? '');
|
62
|
+
await filesystemManager_1.filesystemManager.writeFile(pathArg, req.stringBody ?? '');
|
58
63
|
res.sendStatus(204);
|
59
64
|
}
|
60
65
|
catch (err) {
|
61
66
|
res.status(400).send({ error: '' + err });
|
62
67
|
}
|
63
68
|
});
|
64
|
-
|
69
|
+
exports.default = router;
|
@@ -1,12 +1,18 @@
|
|
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
|
+
exports.filesystemManager = void 0;
|
7
|
+
const path_1 = __importDefault(require("path"));
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
9
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
10
|
+
const storageService_1 = require("./storageService");
|
5
11
|
const SECTION_ID = 'filesystem';
|
6
12
|
const PROJECT_ROOT = 'project_root';
|
7
13
|
function isFile(path) {
|
8
14
|
try {
|
9
|
-
return
|
15
|
+
return fs_1.default.statSync(path).isFile();
|
10
16
|
}
|
11
17
|
catch (error) {
|
12
18
|
return false;
|
@@ -14,15 +20,15 @@ function isFile(path) {
|
|
14
20
|
}
|
15
21
|
class FilesystemManager {
|
16
22
|
async writeFile(path, data) {
|
17
|
-
const dirName =
|
18
|
-
if (!
|
19
|
-
|
23
|
+
const dirName = path_1.default.dirname(path);
|
24
|
+
if (!fs_1.default.existsSync(dirName)) {
|
25
|
+
fs_extra_1.default.mkdirpSync(dirName, {});
|
20
26
|
}
|
21
|
-
|
27
|
+
fs_1.default.writeFileSync(path, data);
|
22
28
|
}
|
23
29
|
async createFolder(path) {
|
24
30
|
return new Promise((resolve, reject) => {
|
25
|
-
|
31
|
+
fs_1.default.mkdir(path, (err) => {
|
26
32
|
if (err) {
|
27
33
|
err.message += '. You can only create one single folder at a time.';
|
28
34
|
reject(err.message);
|
@@ -35,15 +41,15 @@ class FilesystemManager {
|
|
35
41
|
async readDirectory(path) {
|
36
42
|
return new Promise((resolve, reject) => {
|
37
43
|
let response = [];
|
38
|
-
|
44
|
+
fs_1.default.readdir(path, (err, files) => {
|
39
45
|
if (err) {
|
40
46
|
reject(new Error(err));
|
41
47
|
return;
|
42
48
|
}
|
43
49
|
files.forEach((file) => {
|
44
50
|
response.push({
|
45
|
-
path:
|
46
|
-
folder:
|
51
|
+
path: path_1.default.join(path, file),
|
52
|
+
folder: fs_1.default.lstatSync(path_1.default.join(path, file)).isDirectory(),
|
47
53
|
});
|
48
54
|
});
|
49
55
|
resolve(response);
|
@@ -56,7 +62,7 @@ class FilesystemManager {
|
|
56
62
|
reject(new Error('The path provided is invalid.Please check that the path and file name that were provided are spelled correctly. '));
|
57
63
|
}
|
58
64
|
else {
|
59
|
-
|
65
|
+
fs_1.default.readFile(path, (err, data) => {
|
60
66
|
if (err) {
|
61
67
|
reject(new Error(err.message));
|
62
68
|
return;
|
@@ -70,10 +76,10 @@ class FilesystemManager {
|
|
70
76
|
return require('os').homedir();
|
71
77
|
}
|
72
78
|
getProjectRootFolder() {
|
73
|
-
return storageService.get(SECTION_ID, PROJECT_ROOT);
|
79
|
+
return storageService_1.storageService.get(SECTION_ID, PROJECT_ROOT);
|
74
80
|
}
|
75
81
|
setProjectRootFolder(folder) {
|
76
|
-
storageService.put(SECTION_ID, PROJECT_ROOT, folder);
|
82
|
+
storageService_1.storageService.put(SECTION_ID, PROJECT_ROOT, folder);
|
77
83
|
}
|
78
84
|
}
|
79
|
-
|
85
|
+
exports.filesystemManager = new FilesystemManager();
|
@@ -1,11 +1,16 @@
|
|
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 nodejs_api_client_1 = require("@kapeta/nodejs-api-client");
|
8
|
+
const cors_1 = require("../middleware/cors");
|
9
|
+
const router = (0, express_promise_router_1.default)();
|
10
|
+
router.use('/', cors_1.corsHandler);
|
6
11
|
router.get('/current', async (req, res) => {
|
7
12
|
try {
|
8
|
-
const api = new KapetaAPI();
|
13
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
9
14
|
if (api.hasToken()) {
|
10
15
|
res.send(await api.getCurrentIdentity());
|
11
16
|
}
|
@@ -19,7 +24,7 @@ router.get('/current', async (req, res) => {
|
|
19
24
|
});
|
20
25
|
router.get('/:identityId/memberships', async (req, res) => {
|
21
26
|
try {
|
22
|
-
const api = new KapetaAPI();
|
27
|
+
const api = new nodejs_api_client_1.KapetaAPI();
|
23
28
|
if (api.hasToken()) {
|
24
29
|
res.send(await api.getMemberships(req.params.identityId));
|
25
30
|
}
|
@@ -31,4 +36,4 @@ router.get('/:identityId/memberships', async (req, res) => {
|
|
31
36
|
res.status(e.status ?? 500).send(e);
|
32
37
|
}
|
33
38
|
});
|
34
|
-
|
39
|
+
exports.default = router;
|