@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.
Files changed (274) hide show
  1. package/.eslintrc.cjs +25 -0
  2. package/.github/workflows/check-license.yml +17 -0
  3. package/.github/workflows/main.yml +26 -0
  4. package/.prettierignore +4 -0
  5. package/.vscode/launch.json +19 -0
  6. package/CHANGELOG.md +920 -0
  7. package/LICENSE +38 -0
  8. package/README.md +36 -0
  9. package/definitions.d.ts +35 -0
  10. package/dist/cjs/index.d.ts +34 -0
  11. package/dist/cjs/index.js +263 -0
  12. package/dist/cjs/package.json +1 -0
  13. package/dist/cjs/src/RepositoryWatcher.d.ts +30 -0
  14. package/dist/cjs/src/RepositoryWatcher.js +332 -0
  15. package/dist/cjs/src/ai/aiClient.d.ts +20 -0
  16. package/dist/cjs/src/ai/aiClient.js +74 -0
  17. package/dist/cjs/src/ai/routes.d.ts +7 -0
  18. package/dist/cjs/src/ai/routes.js +37 -0
  19. package/dist/cjs/src/ai/transform.d.ts +11 -0
  20. package/dist/cjs/src/ai/transform.js +239 -0
  21. package/dist/cjs/src/ai/types.d.ts +40 -0
  22. package/dist/cjs/src/ai/types.js +2 -0
  23. package/dist/cjs/src/api.d.ts +7 -0
  24. package/dist/cjs/src/api.js +29 -0
  25. package/dist/cjs/src/assetManager.d.ts +41 -0
  26. package/dist/cjs/src/assetManager.js +274 -0
  27. package/dist/cjs/src/assets/routes.d.ts +7 -0
  28. package/dist/cjs/src/assets/routes.js +165 -0
  29. package/dist/cjs/src/attachments/routes.d.ts +7 -0
  30. package/dist/cjs/src/attachments/routes.js +72 -0
  31. package/dist/cjs/src/authManager.d.ts +16 -0
  32. package/dist/cjs/src/authManager.js +64 -0
  33. package/dist/cjs/src/cacheManager.d.ts +20 -0
  34. package/dist/cjs/src/cacheManager.js +51 -0
  35. package/dist/cjs/src/clusterService.d.ts +44 -0
  36. package/dist/cjs/src/clusterService.js +120 -0
  37. package/dist/cjs/src/codeGeneratorManager.d.ts +14 -0
  38. package/dist/cjs/src/codeGeneratorManager.js +93 -0
  39. package/dist/cjs/src/config/routes.d.ts +7 -0
  40. package/dist/cjs/src/config/routes.js +160 -0
  41. package/dist/cjs/src/configManager.d.ts +42 -0
  42. package/dist/cjs/src/configManager.js +136 -0
  43. package/dist/cjs/src/containerManager.d.ts +148 -0
  44. package/dist/cjs/src/containerManager.js +958 -0
  45. package/dist/cjs/src/definitionsManager.d.ts +20 -0
  46. package/dist/cjs/src/definitionsManager.js +171 -0
  47. package/dist/cjs/src/filesystem/routes.d.ts +7 -0
  48. package/dist/cjs/src/filesystem/routes.js +105 -0
  49. package/dist/cjs/src/filesystemManager.d.ts +27 -0
  50. package/dist/cjs/src/filesystemManager.js +118 -0
  51. package/dist/cjs/src/identities/routes.d.ts +7 -0
  52. package/dist/cjs/src/identities/routes.js +37 -0
  53. package/dist/cjs/src/instanceManager.d.ts +69 -0
  54. package/dist/cjs/src/instanceManager.js +910 -0
  55. package/dist/cjs/src/instances/routes.d.ts +7 -0
  56. package/dist/cjs/src/instances/routes.js +179 -0
  57. package/dist/cjs/src/middleware/cors.d.ts +6 -0
  58. package/dist/cjs/src/middleware/cors.js +14 -0
  59. package/dist/cjs/src/middleware/kapeta.d.ts +15 -0
  60. package/dist/cjs/src/middleware/kapeta.js +28 -0
  61. package/dist/cjs/src/middleware/stringBody.d.ts +9 -0
  62. package/dist/cjs/src/middleware/stringBody.js +18 -0
  63. package/dist/cjs/src/networkManager.d.ts +37 -0
  64. package/dist/cjs/src/networkManager.js +119 -0
  65. package/dist/cjs/src/operatorManager.d.ts +41 -0
  66. package/dist/cjs/src/operatorManager.js +211 -0
  67. package/dist/cjs/src/progressListener.d.ts +31 -0
  68. package/dist/cjs/src/progressListener.js +133 -0
  69. package/dist/cjs/src/providerManager.d.ts +11 -0
  70. package/dist/cjs/src/providerManager.js +84 -0
  71. package/dist/cjs/src/providers/routes.d.ts +7 -0
  72. package/dist/cjs/src/providers/routes.js +46 -0
  73. package/dist/cjs/src/proxy/routes.d.ts +7 -0
  74. package/dist/cjs/src/proxy/routes.js +115 -0
  75. package/dist/cjs/src/proxy/types/rest.d.ts +10 -0
  76. package/dist/cjs/src/proxy/types/rest.js +123 -0
  77. package/dist/cjs/src/proxy/types/web.d.ts +8 -0
  78. package/dist/cjs/src/proxy/types/web.js +61 -0
  79. package/dist/cjs/src/repositoryManager.d.ts +35 -0
  80. package/dist/cjs/src/repositoryManager.js +247 -0
  81. package/dist/cjs/src/serviceManager.d.ts +36 -0
  82. package/dist/cjs/src/serviceManager.js +106 -0
  83. package/dist/cjs/src/socketManager.d.ts +32 -0
  84. package/dist/cjs/src/socketManager.js +125 -0
  85. package/dist/cjs/src/storageService.d.ts +21 -0
  86. package/dist/cjs/src/storageService.js +81 -0
  87. package/dist/cjs/src/taskManager.d.ts +70 -0
  88. package/dist/cjs/src/taskManager.js +181 -0
  89. package/dist/cjs/src/tasks/routes.d.ts +7 -0
  90. package/dist/cjs/src/tasks/routes.js +39 -0
  91. package/dist/cjs/src/traffic/routes.d.ts +7 -0
  92. package/dist/cjs/src/traffic/routes.js +22 -0
  93. package/dist/cjs/src/types.d.ts +99 -0
  94. package/dist/cjs/src/types.js +39 -0
  95. package/dist/cjs/src/utils/BlockInstanceRunner.d.ts +28 -0
  96. package/dist/cjs/src/utils/BlockInstanceRunner.js +432 -0
  97. package/dist/cjs/src/utils/DefaultProviderInstaller.d.ts +15 -0
  98. package/dist/cjs/src/utils/DefaultProviderInstaller.js +136 -0
  99. package/dist/cjs/src/utils/InternalConfigProvider.d.ts +38 -0
  100. package/dist/cjs/src/utils/InternalConfigProvider.js +146 -0
  101. package/dist/cjs/src/utils/LogData.d.ts +23 -0
  102. package/dist/cjs/src/utils/LogData.js +46 -0
  103. package/dist/cjs/src/utils/commandLineUtils.d.ts +8 -0
  104. package/dist/cjs/src/utils/commandLineUtils.js +39 -0
  105. package/dist/cjs/src/utils/pathTemplateParser.d.ts +30 -0
  106. package/dist/cjs/src/utils/pathTemplateParser.js +135 -0
  107. package/dist/cjs/src/utils/utils.d.ts +40 -0
  108. package/dist/cjs/src/utils/utils.js +148 -0
  109. package/dist/cjs/start.d.ts +5 -0
  110. package/dist/cjs/start.js +17 -0
  111. package/dist/cjs/test/proxy/types/rest.test.d.ts +5 -0
  112. package/dist/cjs/test/proxy/types/rest.test.js +48 -0
  113. package/dist/cjs/test/utils/pathTemplateParser.test.d.ts +5 -0
  114. package/dist/cjs/test/utils/pathTemplateParser.test.js +27 -0
  115. package/dist/esm/index.d.ts +34 -0
  116. package/dist/esm/index.js +263 -0
  117. package/dist/esm/package.json +1 -0
  118. package/dist/esm/src/RepositoryWatcher.d.ts +30 -0
  119. package/dist/esm/src/RepositoryWatcher.js +332 -0
  120. package/dist/esm/src/ai/aiClient.d.ts +20 -0
  121. package/dist/esm/src/ai/aiClient.js +74 -0
  122. package/dist/esm/src/ai/routes.d.ts +7 -0
  123. package/dist/esm/src/ai/routes.js +37 -0
  124. package/dist/esm/src/ai/transform.d.ts +11 -0
  125. package/dist/esm/src/ai/transform.js +239 -0
  126. package/dist/esm/src/ai/types.d.ts +40 -0
  127. package/dist/esm/src/ai/types.js +2 -0
  128. package/dist/esm/src/api.d.ts +7 -0
  129. package/dist/esm/src/api.js +29 -0
  130. package/dist/esm/src/assetManager.d.ts +41 -0
  131. package/dist/esm/src/assetManager.js +274 -0
  132. package/dist/esm/src/assets/routes.d.ts +7 -0
  133. package/dist/esm/src/assets/routes.js +165 -0
  134. package/dist/esm/src/attachments/routes.d.ts +7 -0
  135. package/dist/esm/src/attachments/routes.js +72 -0
  136. package/dist/esm/src/authManager.d.ts +16 -0
  137. package/dist/esm/src/authManager.js +64 -0
  138. package/dist/esm/src/cacheManager.d.ts +20 -0
  139. package/dist/esm/src/cacheManager.js +51 -0
  140. package/dist/esm/src/clusterService.d.ts +44 -0
  141. package/dist/esm/src/clusterService.js +120 -0
  142. package/dist/esm/src/codeGeneratorManager.d.ts +14 -0
  143. package/dist/esm/src/codeGeneratorManager.js +93 -0
  144. package/dist/esm/src/config/routes.d.ts +7 -0
  145. package/dist/esm/src/config/routes.js +160 -0
  146. package/dist/esm/src/configManager.d.ts +42 -0
  147. package/dist/esm/src/configManager.js +136 -0
  148. package/dist/esm/src/containerManager.d.ts +148 -0
  149. package/dist/esm/src/containerManager.js +958 -0
  150. package/dist/esm/src/definitionsManager.d.ts +20 -0
  151. package/dist/esm/src/definitionsManager.js +171 -0
  152. package/dist/esm/src/filesystem/routes.d.ts +7 -0
  153. package/dist/esm/src/filesystem/routes.js +105 -0
  154. package/dist/esm/src/filesystemManager.d.ts +27 -0
  155. package/dist/esm/src/filesystemManager.js +118 -0
  156. package/dist/esm/src/identities/routes.d.ts +7 -0
  157. package/dist/esm/src/identities/routes.js +37 -0
  158. package/dist/esm/src/instanceManager.d.ts +69 -0
  159. package/dist/esm/src/instanceManager.js +910 -0
  160. package/dist/esm/src/instances/routes.d.ts +7 -0
  161. package/dist/esm/src/instances/routes.js +179 -0
  162. package/dist/esm/src/middleware/cors.d.ts +6 -0
  163. package/dist/esm/src/middleware/cors.js +14 -0
  164. package/dist/esm/src/middleware/kapeta.d.ts +15 -0
  165. package/dist/esm/src/middleware/kapeta.js +28 -0
  166. package/dist/esm/src/middleware/stringBody.d.ts +9 -0
  167. package/dist/esm/src/middleware/stringBody.js +18 -0
  168. package/dist/esm/src/networkManager.d.ts +37 -0
  169. package/dist/esm/src/networkManager.js +119 -0
  170. package/dist/esm/src/operatorManager.d.ts +41 -0
  171. package/dist/esm/src/operatorManager.js +211 -0
  172. package/dist/esm/src/progressListener.d.ts +31 -0
  173. package/dist/esm/src/progressListener.js +133 -0
  174. package/dist/esm/src/providerManager.d.ts +11 -0
  175. package/dist/esm/src/providerManager.js +84 -0
  176. package/dist/esm/src/providers/routes.d.ts +7 -0
  177. package/dist/esm/src/providers/routes.js +46 -0
  178. package/dist/esm/src/proxy/routes.d.ts +7 -0
  179. package/dist/esm/src/proxy/routes.js +115 -0
  180. package/dist/esm/src/proxy/types/rest.d.ts +10 -0
  181. package/dist/esm/src/proxy/types/rest.js +123 -0
  182. package/dist/esm/src/proxy/types/web.d.ts +8 -0
  183. package/dist/esm/src/proxy/types/web.js +61 -0
  184. package/dist/esm/src/repositoryManager.d.ts +35 -0
  185. package/dist/esm/src/repositoryManager.js +247 -0
  186. package/dist/esm/src/serviceManager.d.ts +36 -0
  187. package/dist/esm/src/serviceManager.js +106 -0
  188. package/dist/esm/src/socketManager.d.ts +32 -0
  189. package/dist/esm/src/socketManager.js +125 -0
  190. package/dist/esm/src/storageService.d.ts +21 -0
  191. package/dist/esm/src/storageService.js +81 -0
  192. package/dist/esm/src/taskManager.d.ts +70 -0
  193. package/dist/esm/src/taskManager.js +181 -0
  194. package/dist/esm/src/tasks/routes.d.ts +7 -0
  195. package/dist/esm/src/tasks/routes.js +39 -0
  196. package/dist/esm/src/traffic/routes.d.ts +7 -0
  197. package/dist/esm/src/traffic/routes.js +22 -0
  198. package/dist/esm/src/types.d.ts +99 -0
  199. package/dist/esm/src/types.js +39 -0
  200. package/dist/esm/src/utils/BlockInstanceRunner.d.ts +28 -0
  201. package/dist/esm/src/utils/BlockInstanceRunner.js +432 -0
  202. package/dist/esm/src/utils/DefaultProviderInstaller.d.ts +15 -0
  203. package/dist/esm/src/utils/DefaultProviderInstaller.js +136 -0
  204. package/dist/esm/src/utils/InternalConfigProvider.d.ts +38 -0
  205. package/dist/esm/src/utils/InternalConfigProvider.js +146 -0
  206. package/dist/esm/src/utils/LogData.d.ts +23 -0
  207. package/dist/esm/src/utils/LogData.js +46 -0
  208. package/dist/esm/src/utils/commandLineUtils.d.ts +8 -0
  209. package/dist/esm/src/utils/commandLineUtils.js +39 -0
  210. package/dist/esm/src/utils/pathTemplateParser.d.ts +30 -0
  211. package/dist/esm/src/utils/pathTemplateParser.js +135 -0
  212. package/dist/esm/src/utils/utils.d.ts +40 -0
  213. package/dist/esm/src/utils/utils.js +148 -0
  214. package/dist/esm/start.d.ts +5 -0
  215. package/dist/esm/start.js +17 -0
  216. package/dist/esm/test/proxy/types/rest.test.d.ts +5 -0
  217. package/dist/esm/test/proxy/types/rest.test.js +48 -0
  218. package/dist/esm/test/utils/pathTemplateParser.test.d.ts +5 -0
  219. package/dist/esm/test/utils/pathTemplateParser.test.js +27 -0
  220. package/index.ts +280 -0
  221. package/jest.config.js +8 -0
  222. package/package.json +134 -0
  223. package/src/RepositoryWatcher.ts +363 -0
  224. package/src/ai/aiClient.ts +93 -0
  225. package/src/ai/routes.ts +39 -0
  226. package/src/ai/transform.ts +275 -0
  227. package/src/ai/types.ts +45 -0
  228. package/src/api.ts +32 -0
  229. package/src/assetManager.ts +355 -0
  230. package/src/assets/routes.ts +183 -0
  231. package/src/attachments/routes.ts +79 -0
  232. package/src/authManager.ts +67 -0
  233. package/src/cacheManager.ts +59 -0
  234. package/src/clusterService.ts +142 -0
  235. package/src/codeGeneratorManager.ts +109 -0
  236. package/src/config/routes.ts +201 -0
  237. package/src/configManager.ts +180 -0
  238. package/src/containerManager.ts +1178 -0
  239. package/src/definitionsManager.ts +212 -0
  240. package/src/filesystem/routes.ts +123 -0
  241. package/src/filesystemManager.ts +133 -0
  242. package/src/identities/routes.ts +38 -0
  243. package/src/instanceManager.ts +1160 -0
  244. package/src/instances/routes.ts +203 -0
  245. package/src/middleware/cors.ts +14 -0
  246. package/src/middleware/kapeta.ts +41 -0
  247. package/src/middleware/stringBody.ts +21 -0
  248. package/src/networkManager.ts +148 -0
  249. package/src/operatorManager.ts +294 -0
  250. package/src/progressListener.ts +151 -0
  251. package/src/providerManager.ts +97 -0
  252. package/src/providers/routes.ts +51 -0
  253. package/src/proxy/routes.ts +153 -0
  254. package/src/proxy/types/rest.ts +172 -0
  255. package/src/proxy/types/web.ts +70 -0
  256. package/src/repositoryManager.ts +291 -0
  257. package/src/serviceManager.ts +133 -0
  258. package/src/socketManager.ts +138 -0
  259. package/src/storageService.ts +97 -0
  260. package/src/taskManager.ts +247 -0
  261. package/src/tasks/routes.ts +43 -0
  262. package/src/traffic/routes.ts +23 -0
  263. package/src/types.ts +112 -0
  264. package/src/utils/BlockInstanceRunner.ts +577 -0
  265. package/src/utils/DefaultProviderInstaller.ts +150 -0
  266. package/src/utils/InternalConfigProvider.ts +214 -0
  267. package/src/utils/LogData.ts +50 -0
  268. package/src/utils/commandLineUtils.ts +45 -0
  269. package/src/utils/pathTemplateParser.ts +157 -0
  270. package/src/utils/utils.ts +155 -0
  271. package/start.ts +14 -0
  272. package/test/proxy/types/rest.test.ts +54 -0
  273. package/test/utils/pathTemplateParser.test.ts +29 -0
  274. package/tsconfig.json +15 -0
@@ -0,0 +1,165 @@
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 yaml_1 = __importDefault(require("yaml"));
12
+ const assetManager_1 = require("../assetManager");
13
+ const cors_1 = require("../middleware/cors");
14
+ const stringBody_1 = require("../middleware/stringBody");
15
+ const definitionsManager_1 = require("../definitionsManager");
16
+ function parseBody(req) {
17
+ switch (req.headers['content-type']) {
18
+ case 'application/json':
19
+ case 'application/x-json':
20
+ case 'text/json':
21
+ return JSON.parse(req.stringBody ?? '{}');
22
+ case 'application/yaml':
23
+ case 'application/x-yaml':
24
+ case 'text/yaml':
25
+ case 'text/x-yaml':
26
+ default:
27
+ return yaml_1.default.parse(req.stringBody ?? '{}');
28
+ }
29
+ }
30
+ const router = (0, express_promise_router_1.default)();
31
+ router.use('/', cors_1.corsHandler);
32
+ router.use('/', stringBody_1.stringBody);
33
+ /**
34
+ * Get all local assets available
35
+ */
36
+ router.get('/', async (req, res) => {
37
+ res.send(await assetManager_1.assetManager.getAssets([]));
38
+ });
39
+ /**
40
+ * Get single asset
41
+ */
42
+ router.get('/read', async (req, res) => {
43
+ if (!req.query.ref) {
44
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
45
+ return;
46
+ }
47
+ const ensure = req.query.ensure !== 'false';
48
+ try {
49
+ const asset = await assetManager_1.assetManager.getAsset(req.query.ref, true, ensure);
50
+ if (asset) {
51
+ res.send(asset);
52
+ }
53
+ else {
54
+ res.status(404).send({ error: 'Asset not found' });
55
+ }
56
+ }
57
+ catch (err) {
58
+ res.status(400).send({ error: err.message });
59
+ }
60
+ });
61
+ /**
62
+ * Get all versions for asset name
63
+ */
64
+ router.get('/versions', async (req, res) => {
65
+ if (!req.query.ref) {
66
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
67
+ return;
68
+ }
69
+ const ensure = req.query.ensure !== 'false';
70
+ try {
71
+ const versions = await definitionsManager_1.definitionsManager.getVersions(req.query.ref);
72
+ if (versions) {
73
+ res.send(versions);
74
+ }
75
+ else {
76
+ res.status(404).send({ error: 'Asset not found' });
77
+ }
78
+ }
79
+ catch (err) {
80
+ res.status(400).send({ error: err.message });
81
+ }
82
+ });
83
+ /**
84
+ * Creates a new local file and registers it as an asset
85
+ */
86
+ router.post('/create', async (req, res) => {
87
+ if (!req.query.path) {
88
+ res.status(400).send({ error: 'Query parameter "path" is missing' });
89
+ return;
90
+ }
91
+ const content = parseBody(req);
92
+ try {
93
+ const assets = await assetManager_1.assetManager.createAsset(req.query.path, content, 'user');
94
+ res.status(200).send(assets);
95
+ }
96
+ catch (err) {
97
+ console.log('Failed while creating asset', req.query.path, err.message);
98
+ res.status(400).send({ error: err.message });
99
+ }
100
+ });
101
+ /**
102
+ * Updates reference with new content
103
+ */
104
+ router.put('/update', async (req, res) => {
105
+ if (!req.query.ref) {
106
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
107
+ return;
108
+ }
109
+ const content = parseBody(req);
110
+ try {
111
+ await assetManager_1.assetManager.updateAsset(req.query.ref, content, 'user');
112
+ res.sendStatus(204);
113
+ }
114
+ catch (err) {
115
+ console.log('Failed while updating asset', req.query.ref, err.message);
116
+ res.status(400).send({ error: err.message });
117
+ }
118
+ });
119
+ /**
120
+ * Unregisters an asset (doesn't delete the asset)
121
+ */
122
+ router.delete('/', async (req, res) => {
123
+ if (!req.query.ref) {
124
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
125
+ return;
126
+ }
127
+ try {
128
+ await assetManager_1.assetManager.unregisterAsset(req.query.ref);
129
+ res.status(204).send();
130
+ }
131
+ catch (err) {
132
+ res.status(400).send({ error: err.message });
133
+ }
134
+ });
135
+ /**
136
+ * Registers an existing file as an asset
137
+ */
138
+ router.put('/import', async (req, res) => {
139
+ if (!req.query.ref) {
140
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
141
+ return;
142
+ }
143
+ try {
144
+ const assets = await assetManager_1.assetManager.importFile(req.query.ref);
145
+ res.status(200).send(assets);
146
+ }
147
+ catch (err) {
148
+ res.status(400).send({ error: err.message });
149
+ }
150
+ });
151
+ router.put('/install', async (req, res) => {
152
+ if (!req.query.ref) {
153
+ res.status(400).send({ error: 'Query parameter "ref" is missing' });
154
+ return;
155
+ }
156
+ try {
157
+ const tasks = await assetManager_1.assetManager.installAsset(req.query.ref, !!req.query.wait);
158
+ const taskIds = tasks?.map((t) => t.id) ?? [];
159
+ res.status(200).send(taskIds);
160
+ }
161
+ catch (err) {
162
+ res.status(400).send({ error: err.message });
163
+ }
164
+ });
165
+ exports.default = router;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ /// <reference types="express" />
6
+ declare const router: import("express").Router;
7
+ export default router;
@@ -0,0 +1,72 @@
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 storageService_1 = require("../storageService");
14
+ const router = (0, express_promise_router_1.default)();
15
+ const api = new nodejs_api_client_1.KapetaAPI();
16
+ const DEFAULT_REGISTRY_BASE = 'https://registry.kapeta.com';
17
+ function getBaseUrl() {
18
+ const endpoint = storageService_1.storageService.get('endpoints', 'registry', DEFAULT_REGISTRY_BASE);
19
+ return `${endpoint}/v1/registry`;
20
+ }
21
+ router.use('/', cors_1.corsHandler);
22
+ router.put('/:handle/:name', async (req, res) => {
23
+ if (!api.hasToken()) {
24
+ res.status(401).send({
25
+ status: 401,
26
+ error: 'Unauthorized',
27
+ });
28
+ return;
29
+ }
30
+ const endpoint = getBaseUrl();
31
+ if (!req.headers['content-type']) {
32
+ res.status(400).send({
33
+ status: 400,
34
+ error: 'Missing content-type header',
35
+ });
36
+ return;
37
+ }
38
+ if (!req.headers['content-length']) {
39
+ res.status(400).send({
40
+ status: 400,
41
+ error: 'Missing content-length header',
42
+ });
43
+ return;
44
+ }
45
+ if (!req.headers['content-disposition']) {
46
+ res.status(400).send({
47
+ status: 400,
48
+ error: 'Missing content-disposition header',
49
+ });
50
+ return;
51
+ }
52
+ try {
53
+ const { handle, name } = req.params;
54
+ const url = `${endpoint}/${handle}/${name}/attachments`;
55
+ const result = await api.send({
56
+ method: 'PUT',
57
+ url,
58
+ auth: true,
59
+ headers: {
60
+ 'content-type': req.headers['content-type'],
61
+ 'content-length': req.headers['content-length'],
62
+ 'content-disposition': req.headers['content-disposition'],
63
+ },
64
+ body: req,
65
+ });
66
+ res.send(result);
67
+ }
68
+ catch (e) {
69
+ res.status(e.status ?? 500).send(e);
70
+ }
71
+ });
72
+ exports.default = router;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ /// <reference types="node" />
6
+ import { EventEmitter } from 'node:events';
7
+ declare class AuthManager extends EventEmitter {
8
+ private watcher?;
9
+ private hadToken;
10
+ constructor();
11
+ listenForChanges(): void;
12
+ private hasToken;
13
+ private handleFileChange;
14
+ }
15
+ export declare const authManager: AuthManager;
16
+ export {};
@@ -0,0 +1,64 @@
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.authManager = void 0;
11
+ const node_events_1 = require("node:events");
12
+ const node_path_1 = __importDefault(require("node:path"));
13
+ const chokidar_1 = __importDefault(require("chokidar"));
14
+ const local_cluster_config_1 = __importDefault(require("@kapeta/local-cluster-config"));
15
+ const definitionsManager_1 = require("./definitionsManager");
16
+ const nodejs_api_client_1 = require("@kapeta/nodejs-api-client");
17
+ const socketManager_1 = require("./socketManager");
18
+ class AuthManager extends node_events_1.EventEmitter {
19
+ watcher;
20
+ hadToken;
21
+ constructor() {
22
+ super();
23
+ this.hadToken = this.hasToken();
24
+ }
25
+ listenForChanges() {
26
+ const parentDir = node_path_1.default.dirname(local_cluster_config_1.default.getKapetaBasedir());
27
+ //We watch the parent dir to catch changes to the base dir itself
28
+ this.watcher = chokidar_1.default.watch(parentDir, {
29
+ followSymlinks: false,
30
+ ignorePermissionErrors: true,
31
+ disableGlobbing: true,
32
+ persistent: true,
33
+ ignoreInitial: true,
34
+ depth: 1,
35
+ ignored: (path) => {
36
+ return !path.startsWith(local_cluster_config_1.default.getKapetaBasedir());
37
+ },
38
+ });
39
+ this.watcher.add(local_cluster_config_1.default.getKapetaBasedir());
40
+ this.watcher.on('all', this.handleFileChange.bind(this));
41
+ this.watcher.on('error', (error) => {
42
+ console.log('Error watching repository', error);
43
+ });
44
+ this.watcher.on('ready', () => {
45
+ console.log('Watching for auth changes: %s', local_cluster_config_1.default.getKapetaBasedir());
46
+ });
47
+ }
48
+ hasToken() {
49
+ const api = new nodejs_api_client_1.KapetaAPI();
50
+ return api.hasToken();
51
+ }
52
+ async handleFileChange(eventName, path) {
53
+ const hasTokenNow = this.hasToken();
54
+ if (this.hadToken !== hasTokenNow) {
55
+ socketManager_1.socketManager.emitGlobal('auth-change', {});
56
+ if (hasTokenNow) {
57
+ // Clear the cache in case we need to rewrite the sample plan
58
+ definitionsManager_1.definitionsManager.clearCache();
59
+ }
60
+ this.hadToken = hasTokenNow;
61
+ }
62
+ }
63
+ }
64
+ exports.authManager = new AuthManager();
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ export interface CacheEntry<T = any> {
6
+ expires: number;
7
+ data: T;
8
+ }
9
+ export declare class CacheManager {
10
+ private cache;
11
+ flush(): void;
12
+ doCached<T>(key: string, getter: () => T, ttl?: number): T;
13
+ get<T>(key: string): T | undefined;
14
+ set<T>(key: string, data: T, ttl?: number): void;
15
+ has(key: string): boolean;
16
+ remove(key: string): number;
17
+ removePrefix(key: string): void;
18
+ }
19
+ export declare const cacheManager: CacheManager;
20
+ export declare const doCached: <T>(key: string, getter: () => T, ttl?: number) => T;
@@ -0,0 +1,51 @@
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.doCached = exports.cacheManager = exports.CacheManager = void 0;
11
+ const node_cache_1 = __importDefault(require("node-cache"));
12
+ const DEFAULT_CACHE_TTL = 60 * 1000; // 1 min
13
+ class CacheManager {
14
+ cache = new node_cache_1.default();
15
+ flush() {
16
+ this.cache.flushAll();
17
+ }
18
+ doCached(key, getter, ttl = DEFAULT_CACHE_TTL) {
19
+ const data = this.cache.get(key);
20
+ if (data !== undefined) {
21
+ return data;
22
+ }
23
+ const result = getter();
24
+ this.cache.set(key, result, ttl);
25
+ return result;
26
+ }
27
+ get(key) {
28
+ return this.cache.get(key);
29
+ }
30
+ set(key, data, ttl = DEFAULT_CACHE_TTL) {
31
+ this.cache.set(key, data, ttl);
32
+ }
33
+ has(key) {
34
+ return this.cache.has(key);
35
+ }
36
+ remove(key) {
37
+ return this.cache.del(key);
38
+ }
39
+ removePrefix(key) {
40
+ const keys = this.cache.keys();
41
+ for (const k of keys) {
42
+ if (k.startsWith(key)) {
43
+ this.remove(k);
44
+ }
45
+ }
46
+ }
47
+ }
48
+ exports.CacheManager = CacheManager;
49
+ exports.cacheManager = new CacheManager();
50
+ const doCached = (key, getter, ttl = DEFAULT_CACHE_TTL) => exports.cacheManager.doCached(key, getter, ttl);
51
+ exports.doCached = doCached;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ declare class ClusterService {
6
+ private _port;
7
+ private _currentPort;
8
+ private _initialized;
9
+ private _reservedPorts;
10
+ private _host;
11
+ constructor();
12
+ reservePort(port: number | string): void;
13
+ init(): Promise<void>;
14
+ _findClusterServicePort(): Promise<void>;
15
+ /**
16
+ * Gets next available port
17
+ * @return {Promise<number>}
18
+ */
19
+ getNextAvailablePort(): Promise<number>;
20
+ _checkIfPortIsUsed(port: number, host?: string): Promise<unknown>;
21
+ /**
22
+ * The port of this local cluster service itself
23
+ */
24
+ getClusterServicePort(): number;
25
+ getClusterServiceHost(): string;
26
+ /**
27
+ * Set the port to be used for this local service
28
+ * @param port
29
+ */
30
+ setClusterServicePort(port: number): void;
31
+ setClusterServiceHost(host: string): void;
32
+ /**
33
+ * Gets that proxy path of a given request
34
+ *
35
+ * @param systemId
36
+ * @param consumerInstanceId
37
+ * @param consumerResourceName
38
+ * @param portType
39
+ * @return {string}
40
+ */
41
+ getProxyPath(systemId: string, consumerInstanceId: string, consumerResourceName: string, portType: string): string;
42
+ }
43
+ export declare const clusterService: ClusterService;
44
+ export {};
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright 2023 Kapeta Inc.
4
+ * SPDX-License-Identifier: BUSL-1.1
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.clusterService = void 0;
8
+ const nodejs_utils_1 = require("@kapeta/nodejs-utils");
9
+ const net = require('net');
10
+ const DEFAULT_SERVER_PORT = 35100;
11
+ const DEFAULT_START_PORT = 40000;
12
+ const DEFAULT_HOST = '127.0.0.1';
13
+ class ClusterService {
14
+ _port;
15
+ _currentPort;
16
+ _initialized;
17
+ _reservedPorts;
18
+ _host;
19
+ constructor() {
20
+ this._port = DEFAULT_SERVER_PORT;
21
+ this._currentPort = DEFAULT_START_PORT;
22
+ this._initialized = false;
23
+ this._reservedPorts = [];
24
+ this._host = DEFAULT_HOST;
25
+ }
26
+ reservePort(port) {
27
+ const intPort = parseInt(port);
28
+ if (this._reservedPorts.indexOf(intPort) > -1) {
29
+ throw new Error('Port already reserved: ' + intPort);
30
+ }
31
+ this._reservedPorts.push(intPort);
32
+ }
33
+ async init() {
34
+ if (this._initialized) {
35
+ return;
36
+ }
37
+ this._initialized = true;
38
+ await this._findClusterServicePort();
39
+ }
40
+ async _findClusterServicePort() {
41
+ while (true) {
42
+ const isUsed = await this._checkIfPortIsUsed(this._port);
43
+ if (!isUsed) {
44
+ break;
45
+ }
46
+ this._port++;
47
+ }
48
+ }
49
+ /**
50
+ * Gets next available port
51
+ * @return {Promise<number>}
52
+ */
53
+ async getNextAvailablePort() {
54
+ while (true) {
55
+ while (this._reservedPorts.indexOf(this._currentPort) > -1) {
56
+ this._currentPort++;
57
+ }
58
+ const nextPort = this._currentPort++;
59
+ const isUsed = await this._checkIfPortIsUsed(nextPort);
60
+ if (!isUsed) {
61
+ return nextPort;
62
+ }
63
+ }
64
+ }
65
+ _checkIfPortIsUsed(port, host = this._host) {
66
+ return new Promise((resolve, reject) => {
67
+ const server = net.createServer();
68
+ server.once('error', function (err) {
69
+ if (err.code === 'EADDRINUSE') {
70
+ server.close();
71
+ resolve(true);
72
+ return;
73
+ }
74
+ server.close();
75
+ reject(err);
76
+ });
77
+ server.once('listening', function () {
78
+ server.close();
79
+ resolve(false);
80
+ });
81
+ server.listen(port, host);
82
+ });
83
+ }
84
+ /**
85
+ * The port of this local cluster service itself
86
+ */
87
+ getClusterServicePort() {
88
+ return this._port;
89
+ }
90
+ /*
91
+ *Gets the host name ( 127.0.0.1 ) on which Express JS is listening
92
+ */
93
+ getClusterServiceHost() {
94
+ return this._host;
95
+ }
96
+ /**
97
+ * Set the port to be used for this local service
98
+ * @param port
99
+ */
100
+ setClusterServicePort(port) {
101
+ this._port = port;
102
+ }
103
+ setClusterServiceHost(host) {
104
+ this._host = host;
105
+ }
106
+ /**
107
+ * Gets that proxy path of a given request
108
+ *
109
+ * @param systemId
110
+ * @param consumerInstanceId
111
+ * @param consumerResourceName
112
+ * @param portType
113
+ * @return {string}
114
+ */
115
+ getProxyPath(systemId, consumerInstanceId, consumerResourceName, portType) {
116
+ systemId = (0, nodejs_utils_1.normalizeKapetaUri)(systemId);
117
+ return `/proxy/${encodeURIComponent(systemId)}/${encodeURIComponent(consumerInstanceId)}/${encodeURIComponent(consumerResourceName)}/${encodeURIComponent(portType)}/`;
118
+ }
119
+ }
120
+ exports.clusterService = new ClusterService();
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ import { Definition } from '@kapeta/local-cluster-config';
6
+ declare class CodeGeneratorManager {
7
+ private ensureLanguageTargetInRegistry;
8
+ reload(): Promise<void>;
9
+ initialize(): Promise<void>;
10
+ canGenerateCode(yamlContent: Definition): Promise<boolean>;
11
+ generate(yamlFile: string, yamlContent: Definition): Promise<void>;
12
+ }
13
+ export declare const codeGeneratorManager: CodeGeneratorManager;
14
+ export {};
@@ -0,0 +1,93 @@
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.codeGeneratorManager = void 0;
11
+ const path_1 = __importDefault(require("path"));
12
+ const codegen_1 = require("@kapeta/codegen");
13
+ const definitionsManager_1 = require("./definitionsManager");
14
+ const assetManager_1 = require("./assetManager");
15
+ const nodejs_utils_1 = require("@kapeta/nodejs-utils");
16
+ const repositoryManager_1 = require("./repositoryManager");
17
+ const TARGET_KIND = 'core/language-target';
18
+ const BLOCK_TYPE_KIND = 'core/block-type';
19
+ class CodeGeneratorManager {
20
+ async ensureLanguageTargetInRegistry(path, version, definition) {
21
+ const key = `${definition.metadata.name}:${version}`;
22
+ try {
23
+ if (await codegen_1.registry.get(key)) {
24
+ return;
25
+ }
26
+ }
27
+ catch (e) { }
28
+ try {
29
+ const target = require(path);
30
+ if (target.default) {
31
+ codegen_1.registry.register(key, target.default);
32
+ }
33
+ else {
34
+ codegen_1.registry.register(key, target);
35
+ }
36
+ }
37
+ catch (e) {
38
+ console.error('Failed to load target: %s', key, e);
39
+ }
40
+ }
41
+ async reload() {
42
+ codegen_1.registry.reset();
43
+ const languageTargets = await definitionsManager_1.definitionsManager.getDefinitions(TARGET_KIND);
44
+ for (const languageTarget of languageTargets) {
45
+ await this.ensureLanguageTargetInRegistry(languageTarget.path, languageTarget.version, languageTarget.definition);
46
+ }
47
+ }
48
+ async initialize() {
49
+ await this.reload();
50
+ repositoryManager_1.repositoryManager.on('change', async () => {
51
+ // Reload code generators when the repository changes
52
+ try {
53
+ await this.reload();
54
+ }
55
+ catch (e) {
56
+ console.error('Failed to reload code generators', e);
57
+ }
58
+ });
59
+ }
60
+ async canGenerateCode(yamlContent) {
61
+ if (!yamlContent.spec?.target?.kind || !yamlContent.kind) {
62
+ //Not all block types have targets
63
+ return false;
64
+ }
65
+ const kindUri = (0, nodejs_utils_1.parseKapetaUri)(yamlContent.kind);
66
+ const blockTypes = await definitionsManager_1.definitionsManager.getDefinitions(BLOCK_TYPE_KIND);
67
+ const blockTypeKinds = blockTypes.map((blockType) => (0, nodejs_utils_1.parseKapetaUri)(blockType.definition.metadata.name).fullName);
68
+ return blockTypeKinds.includes(kindUri.fullName);
69
+ }
70
+ async generate(yamlFile, yamlContent) {
71
+ if (!yamlContent.spec.target?.kind) {
72
+ //Not all block types have targets
73
+ return;
74
+ }
75
+ const targetRef = (0, nodejs_utils_1.normalizeKapetaUri)(yamlContent.spec.target?.kind);
76
+ // Automatically downloads target if not available
77
+ const targetAsset = await assetManager_1.assetManager.getAsset(targetRef);
78
+ if (!targetAsset) {
79
+ console.error('Language target not found: %s', yamlContent.spec.target?.kind);
80
+ return;
81
+ }
82
+ await this.ensureLanguageTargetInRegistry(targetAsset?.path, targetAsset?.version, targetAsset?.data);
83
+ const baseDir = path_1.default.dirname(yamlFile);
84
+ console.log('Generating code for path: %s', baseDir);
85
+ const codeGenerator = new codegen_1.BlockCodeGenerator(yamlContent);
86
+ const output = await codeGenerator.generate();
87
+ const writer = new codegen_1.CodeWriter(baseDir, {});
88
+ const assets = writer.write(output);
89
+ await codeGenerator.postprocess(baseDir, assets);
90
+ console.log('Code generated for path: %s', baseDir);
91
+ }
92
+ }
93
+ exports.codeGeneratorManager = new CodeGeneratorManager();
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ /// <reference types="express" />
6
+ declare const router: import("express").Router;
7
+ export default router;