@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.
Files changed (96) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/index.js +6 -2
  3. package/dist/cjs/src/assetManager.d.ts +2 -2
  4. package/dist/cjs/src/assetManager.js +16 -16
  5. package/dist/cjs/src/assets/routes.js +2 -2
  6. package/dist/cjs/src/authManager.d.ts +12 -0
  7. package/dist/cjs/src/authManager.js +60 -0
  8. package/dist/cjs/src/codeGeneratorManager.d.ts +1 -1
  9. package/dist/cjs/src/codeGeneratorManager.js +3 -3
  10. package/dist/cjs/src/configManager.js +2 -2
  11. package/dist/cjs/src/definitionsManager.d.ts +7 -6
  12. package/dist/cjs/src/definitionsManager.js +102 -18
  13. package/dist/cjs/src/instanceManager.d.ts +1 -1
  14. package/dist/cjs/src/instanceManager.js +4 -4
  15. package/dist/cjs/src/instances/routes.js +2 -2
  16. package/dist/cjs/src/operatorManager.d.ts +1 -1
  17. package/dist/cjs/src/operatorManager.js +7 -9
  18. package/dist/cjs/src/providerManager.d.ts +2 -1
  19. package/dist/cjs/src/providerManager.js +23 -15
  20. package/dist/cjs/src/repositoryManager.d.ts +2 -2
  21. package/dist/cjs/src/repositoryManager.js +8 -9
  22. package/dist/cjs/src/socketManager.js +6 -0
  23. package/dist/cjs/src/utils/BlockInstanceRunner.js +6 -8
  24. package/dist/cjs/src/utils/DefaultProviderInstaller.d.ts +11 -0
  25. package/dist/cjs/src/utils/DefaultProviderInstaller.js +129 -0
  26. package/dist/esm/index.js +67 -58
  27. package/dist/esm/src/RepositoryWatcher.js +40 -33
  28. package/dist/esm/src/api.js +14 -9
  29. package/dist/esm/src/assetManager.d.ts +2 -2
  30. package/dist/esm/src/assetManager.js +73 -67
  31. package/dist/esm/src/assets/routes.js +23 -18
  32. package/dist/esm/src/attachments/routes.js +14 -9
  33. package/dist/esm/src/authManager.d.ts +12 -0
  34. package/dist/esm/src/authManager.js +60 -0
  35. package/dist/esm/src/cacheManager.js +13 -5
  36. package/dist/esm/src/clusterService.js +6 -3
  37. package/dist/esm/src/codeGeneratorManager.d.ts +1 -1
  38. package/dist/esm/src/codeGeneratorManager.js +20 -14
  39. package/dist/esm/src/config/routes.js +30 -25
  40. package/dist/esm/src/configManager.js +29 -26
  41. package/dist/esm/src/containerManager.js +48 -39
  42. package/dist/esm/src/definitionsManager.d.ts +7 -6
  43. package/dist/esm/src/definitionsManager.js +114 -24
  44. package/dist/esm/src/filesystem/routes.js +21 -16
  45. package/dist/esm/src/filesystemManager.js +23 -17
  46. package/dist/esm/src/identities/routes.js +13 -8
  47. package/dist/esm/src/instanceManager.d.ts +1 -1
  48. package/dist/esm/src/instanceManager.js +165 -158
  49. package/dist/esm/src/instances/routes.js +39 -34
  50. package/dist/esm/src/middleware/cors.js +5 -1
  51. package/dist/esm/src/middleware/kapeta.js +8 -4
  52. package/dist/esm/src/middleware/stringBody.js +5 -1
  53. package/dist/esm/src/networkManager.js +15 -9
  54. package/dist/esm/src/operatorManager.d.ts +1 -1
  55. package/dist/esm/src/operatorManager.js +48 -44
  56. package/dist/esm/src/progressListener.js +16 -12
  57. package/dist/esm/src/providerManager.d.ts +2 -1
  58. package/dist/esm/src/providerManager.js +43 -29
  59. package/dist/esm/src/providers/routes.js +14 -9
  60. package/dist/esm/src/proxy/routes.js +26 -21
  61. package/dist/esm/src/proxy/types/rest.js +29 -22
  62. package/dist/esm/src/proxy/types/web.js +18 -11
  63. package/dist/esm/src/repositoryManager.d.ts +2 -2
  64. package/dist/esm/src/repositoryManager.js +33 -28
  65. package/dist/esm/src/serviceManager.js +25 -19
  66. package/dist/esm/src/socketManager.js +31 -18
  67. package/dist/esm/src/storageService.js +18 -12
  68. package/dist/esm/src/taskManager.js +12 -8
  69. package/dist/esm/src/tasks/routes.js +14 -9
  70. package/dist/esm/src/traffic/routes.js +12 -7
  71. package/dist/esm/src/types.js +11 -8
  72. package/dist/esm/src/utils/BlockInstanceRunner.js +60 -55
  73. package/dist/esm/src/utils/DefaultProviderInstaller.d.ts +11 -0
  74. package/dist/esm/src/utils/DefaultProviderInstaller.js +129 -0
  75. package/dist/esm/src/utils/LogData.js +5 -1
  76. package/dist/esm/src/utils/commandLineUtils.js +12 -7
  77. package/dist/esm/src/utils/pathTemplateParser.js +7 -2
  78. package/dist/esm/src/utils/utils.js +30 -17
  79. package/dist/esm/start.js +7 -2
  80. package/index.ts +7 -2
  81. package/package.json +10 -4
  82. package/src/assetManager.ts +18 -16
  83. package/src/assets/routes.ts +2 -2
  84. package/src/authManager.ts +62 -0
  85. package/src/codeGeneratorManager.ts +3 -3
  86. package/src/configManager.ts +2 -2
  87. package/src/definitionsManager.ts +132 -17
  88. package/src/instanceManager.ts +5 -5
  89. package/src/instances/routes.ts +2 -2
  90. package/src/operatorManager.ts +7 -12
  91. package/src/providerManager.ts +27 -19
  92. package/src/repositoryManager.ts +8 -11
  93. package/src/socketManager.ts +6 -0
  94. package/src/utils/BlockInstanceRunner.ts +6 -8
  95. package/src/utils/DefaultProviderInstaller.ts +141 -0
  96. package/tsconfig.json +3 -2
@@ -1,21 +1,26 @@
1
- import Router from 'express-promise-router';
2
- import { corsHandler } from './middleware/cors';
3
- import { KapetaAPI } from '@kapeta/nodejs-api-client';
4
- import ClusterConfiguration from '@kapeta/local-cluster-config';
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 = Router();
8
- const remoteServices = ClusterConfiguration.getClusterConfig().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
- export default router;
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
- import Path from 'node:path';
2
- import FS from 'fs-extra';
3
- import YAML from 'yaml';
4
- import { codeGeneratorManager } from './codeGeneratorManager';
5
- import { ProgressListener } from './progressListener';
6
- import { parseKapetaUri } from '@kapeta/nodejs-utils';
7
- import { repositoryManager } from './repositoryManager';
8
- import { Actions } from '@kapeta/nodejs-registry-utils';
9
- import { definitionsManager } from './definitionsManager';
10
- import { normalizeKapetaUri } from './utils/utils';
11
- import { taskManager } from './taskManager';
12
- import { cacheManager } from './cacheManager';
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
- let asset = definitionsManager
80
- .getDefinitions()
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 (asset) {
87
- cacheManager.set(cacheKey, asset, CACHE_TTL);
89
+ if (definitionInfo) {
90
+ const asset = enrichAsset(definitionInfo);
91
+ cacheManager_1.cacheManager.set(cacheKey, asset, CACHE_TTL);
92
+ return asset;
88
93
  }
89
- return asset;
94
+ return undefined;
90
95
  }
91
96
  async createAsset(path, yaml, sourceOfChange = 'filesystem') {
92
- if (await FS.pathExists(path)) {
97
+ if (await fs_extra_1.default.pathExists(path)) {
93
98
  throw new Error('File already exists: ' + path);
94
99
  }
95
- const dirName = Path.dirname(path);
96
- if (!(await FS.pathExists(dirName))) {
97
- await FS.mkdirp(dirName);
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 FS.writeFile(path, YAML.stringify(yaml));
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 FS.writeFile(asset.ymlPath, YAML.stringify(yaml));
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 FS.pathExists(filePath))) {
141
+ if (!(await fs_extra_1.default.pathExists(filePath))) {
137
142
  throw new Error('File not found: ' + filePath);
138
143
  }
139
- const content = await FS.readFile(filePath);
140
- const assetInfos = YAML.parseAllDocuments(content.toString()).map((doc) => doc.toJSON());
141
- await Actions.link(new ProgressListener(), Path.dirname(filePath));
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
- return this.getAssets().filter((a) => refs.some((ref) => compareRefs(ref, a.ref)));
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
- export const assetManager = new AssetManager();
193
+ exports.assetManager = new AssetManager();
@@ -1,8 +1,13 @@
1
- import Router from 'express-promise-router';
2
- import YAML from 'yaml';
3
- import { assetManager } from '../assetManager';
4
- import { corsHandler } from '../middleware/cors';
5
- import { stringBody } from '../middleware/stringBody';
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 YAML.parse(req.stringBody ?? '{}');
22
+ return yaml_1.default.parse(req.stringBody ?? '{}');
18
23
  }
19
24
  }
20
- const router = 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
- export default router;
138
+ exports.default = router;
@@ -1,15 +1,20 @@
1
- import Router from 'express-promise-router';
2
- import { KapetaAPI } from '@kapeta/nodejs-api-client';
3
- import { corsHandler } from '../middleware/cors';
4
- import { storageService } from '../storageService';
5
- const router = Router();
6
- const api = new KapetaAPI();
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
- export default router;
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
- import NodeCache from 'node-cache';
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
- export class CacheManager {
4
- cache = new NodeCache();
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
- export const cacheManager = new CacheManager();
39
- export const doCached = (key, getter, ttl = DEFAULT_CACHE_TTL) => cacheManager.doCached(key, getter, ttl);
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
- import { normalizeKapetaUri } from './utils/utils';
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
- export const clusterService = new ClusterService();
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
- import Path from 'path';
2
- import { registry as Targets, BlockCodeGenerator, CodeWriter } from '@kapeta/codegen';
3
- import { definitionsManager } from './definitionsManager';
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
- Targets.reset();
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
- Targets.register(key, target.default);
21
+ codegen_1.registry.register(key, target.default);
16
22
  }
17
23
  else {
18
- Targets.register(key, target);
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 = Path.dirname(yamlFile);
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
- export const codeGeneratorManager = new CodeGeneratorManager();
47
- codeGeneratorManager.reload();
52
+ exports.codeGeneratorManager = new CodeGeneratorManager();
53
+ exports.codeGeneratorManager.reload();