@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,125 @@
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.socketManager = exports.SocketManager = exports.EVENT_LOG = exports.EVENT_SYSTEM_LOG = exports.EVENT_INSTANCE_LOG = exports.EVENT_INSTANCE_EXITED = exports.EVENT_INSTANCE_CREATED = exports.EVENT_STATUS_CHANGED = void 0;
11
+ const lodash_1 = __importDefault(require("lodash"));
12
+ const nodejs_utils_1 = require("@kapeta/nodejs-utils");
13
+ const containerManager_1 = require("./containerManager");
14
+ exports.EVENT_STATUS_CHANGED = 'status-changed';
15
+ exports.EVENT_INSTANCE_CREATED = 'instance-created';
16
+ exports.EVENT_INSTANCE_EXITED = 'instance-exited';
17
+ exports.EVENT_INSTANCE_LOG = 'instance-log';
18
+ exports.EVENT_SYSTEM_LOG = 'system-log';
19
+ exports.EVENT_LOG = 'log';
20
+ class SocketManager {
21
+ _io;
22
+ _sockets;
23
+ constructor() {
24
+ this._io = null;
25
+ this._sockets = [];
26
+ return this;
27
+ }
28
+ setIo(io) {
29
+ this._io = io;
30
+ this._bindIO();
31
+ }
32
+ isAlive() {
33
+ return !!this._io;
34
+ }
35
+ get io() {
36
+ if (!this._io) {
37
+ throw new Error('Socket server not ready');
38
+ }
39
+ return this._io;
40
+ }
41
+ emit(context, type, payload) {
42
+ if (!this._io) {
43
+ return;
44
+ }
45
+ this.io.to(context).emit(type, { context, payload });
46
+ }
47
+ emitGlobal(type, payload) {
48
+ if (!this._io) {
49
+ return;
50
+ }
51
+ this.io.emit(type, payload);
52
+ }
53
+ emitSystemEvent(systemId, type, payload) {
54
+ systemId = (0, nodejs_utils_1.normalizeKapetaUri)(systemId);
55
+ try {
56
+ const contextId = `system-events/${encodeURIComponent(systemId)}`;
57
+ this.emit(contextId, type, payload);
58
+ }
59
+ catch (e) {
60
+ console.warn('Failed to emit instance event: %s', e.message);
61
+ }
62
+ }
63
+ emitInstanceLog(systemId, instanceId, payload) {
64
+ systemId = (0, nodejs_utils_1.normalizeKapetaUri)(systemId);
65
+ try {
66
+ this.emit(`instance-logs/${encodeURIComponent(systemId)}/${encodeURIComponent(instanceId)}`, exports.EVENT_INSTANCE_LOG, payload);
67
+ }
68
+ catch (e) {
69
+ console.warn('Failed to emit instance event: %s', e.message);
70
+ }
71
+ }
72
+ emitSystemLog(systemId, payload) {
73
+ this.emitSystemEvent(systemId, exports.EVENT_SYSTEM_LOG, payload);
74
+ }
75
+ emitGlobalLog(payload) {
76
+ this.emitGlobal(exports.EVENT_LOG, payload);
77
+ }
78
+ _bindIO() {
79
+ this.io.on('connection', (socket) => this._handleSocketCreated(socket));
80
+ }
81
+ _handleSocketCreated(socket) {
82
+ this._bindSocket(socket);
83
+ this._sockets.push(socket);
84
+ }
85
+ _bindSocket(socket) {
86
+ socket.on('disconnect', () => {
87
+ lodash_1.default.pull(this._sockets, socket);
88
+ socket.rooms.forEach((roomId) => {
89
+ this.handleLeaveRoom(roomId);
90
+ });
91
+ });
92
+ socket.on('join', (id) => {
93
+ socket.join(id);
94
+ this.handleJoinRoom(id);
95
+ });
96
+ socket.on('leave', (id) => {
97
+ socket.leave(id);
98
+ this.handleLeaveRoom(id);
99
+ });
100
+ }
101
+ handleJoinRoom(id) {
102
+ if (id.startsWith('instance-logs/')) {
103
+ let [, systemId, instanceId] = id.split(/\//g);
104
+ systemId = decodeURIComponent(systemId);
105
+ instanceId = decodeURIComponent(instanceId);
106
+ console.log('Start listening for logs', systemId, instanceId);
107
+ containerManager_1.containerManager
108
+ .ensureLogListening(systemId, instanceId, (log) => {
109
+ this.emitInstanceLog(systemId, instanceId, log);
110
+ })
111
+ .catch((e) => { });
112
+ }
113
+ }
114
+ handleLeaveRoom(id) {
115
+ if (id.startsWith('instance-logs/')) {
116
+ let [, systemId, instanceId] = id.split(/\//g);
117
+ systemId = decodeURIComponent(systemId);
118
+ instanceId = decodeURIComponent(instanceId);
119
+ console.log('Stop listening for logs', systemId, instanceId);
120
+ containerManager_1.containerManager.stopLogListening(systemId, instanceId).catch((e) => { });
121
+ }
122
+ }
123
+ }
124
+ exports.SocketManager = SocketManager;
125
+ exports.socketManager = new SocketManager();
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ /**
6
+ * Class that handles reading and writing from local configuration file.
7
+ */
8
+ declare class StorageService {
9
+ private _data;
10
+ constructor();
11
+ getKapetaBasedir(): string;
12
+ _readConfig(): import("@kapeta/local-cluster-config").ClusterConfig;
13
+ _writeConfig(): void;
14
+ section<T = any>(section: string, defaultValue?: any): T;
15
+ put(section: string, property: string | any, value?: any): void;
16
+ get<T = any>(section: string, property?: string, defaultValue?: T): T | undefined;
17
+ contains(section: string, property: string): any;
18
+ ensure(section: string, property: string, value: any): any;
19
+ }
20
+ export declare const storageService: StorageService;
21
+ export {};
@@ -0,0 +1,81 @@
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.storageService = void 0;
11
+ const lodash_1 = __importDefault(require("lodash"));
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const fs_extra_1 = __importDefault(require("fs-extra"));
14
+ const yaml_1 = __importDefault(require("yaml"));
15
+ const local_cluster_config_1 = __importDefault(require("@kapeta/local-cluster-config"));
16
+ /**
17
+ * Class that handles reading and writing from local configuration file.
18
+ */
19
+ class StorageService {
20
+ _data;
21
+ constructor() {
22
+ this._data = this._readConfig();
23
+ }
24
+ getKapetaBasedir() {
25
+ return local_cluster_config_1.default.getKapetaBasedir();
26
+ }
27
+ _readConfig() {
28
+ return local_cluster_config_1.default.getClusterConfig();
29
+ }
30
+ _writeConfig() {
31
+ const configFile = local_cluster_config_1.default.getClusterConfigFile();
32
+ fs_extra_1.default.mkdirsSync(this.getKapetaBasedir());
33
+ fs_1.default.writeFileSync(configFile, yaml_1.default.stringify(this._data));
34
+ }
35
+ section(section, defaultValue) {
36
+ if (!defaultValue) {
37
+ defaultValue = {};
38
+ }
39
+ if (!this._data[section]) {
40
+ this._data[section] = defaultValue;
41
+ this._writeConfig();
42
+ }
43
+ return this._data[section];
44
+ }
45
+ put(section, property, value) {
46
+ if (!lodash_1.default.isString(property)) {
47
+ this._data[section] = property;
48
+ this._writeConfig();
49
+ return;
50
+ }
51
+ this.section(section)[property] = value;
52
+ this._writeConfig();
53
+ }
54
+ get(section, property, defaultValue) {
55
+ if (!property) {
56
+ return this.section(section);
57
+ }
58
+ if (!this.contains(section, property)) {
59
+ return defaultValue;
60
+ }
61
+ return this.section(section)[property];
62
+ }
63
+ contains(section, property) {
64
+ if (!this._data[section]) {
65
+ return false;
66
+ }
67
+ return this._data[section].hasOwnProperty(property);
68
+ }
69
+ ensure(section, property, value) {
70
+ if (this.contains(section, property)) {
71
+ return this.get(section, property);
72
+ }
73
+ let out = value;
74
+ if (typeof value === 'function') {
75
+ out = value();
76
+ }
77
+ this.put(section, property, out);
78
+ return out;
79
+ }
80
+ }
81
+ exports.storageService = new StorageService();
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ import { LogLevel } from './types';
6
+ export type TaskRunner<T> = (task: Task<T>) => Promise<T>;
7
+ export declare enum TaskStatus {
8
+ PENDING = "PENDING",
9
+ RUNNING = "RUNNING",
10
+ COMPLETED = "COMPLETED",
11
+ FAILED = "FAILED"
12
+ }
13
+ interface Future<T = void> {
14
+ promise: Promise<T>;
15
+ resolve: (result: T) => void;
16
+ reject: (e: any) => void;
17
+ }
18
+ interface TaskMetadata {
19
+ name: string;
20
+ /**
21
+ * A unique prefix for the task. If defined only 1 task with this ID prefix will be executed at a time
22
+ */
23
+ group?: string;
24
+ progress?: number;
25
+ [key: string]: any;
26
+ }
27
+ interface TaskData<T = void> {
28
+ id: string;
29
+ status: TaskStatus;
30
+ errorMessage?: string;
31
+ metadata: TaskMetadata;
32
+ future: Future<T>;
33
+ run: TaskRunner<T>;
34
+ }
35
+ export declare class Task<T = void> implements TaskData<T> {
36
+ private data;
37
+ constructor(task: TaskData<T>);
38
+ get id(): string;
39
+ get status(): TaskStatus;
40
+ get errorMessage(): string | undefined;
41
+ get metadata(): TaskMetadata;
42
+ get future(): Future<T>;
43
+ get run(): TaskRunner<T>;
44
+ set status(status: TaskStatus);
45
+ set errorMessage(errorMessage: string | undefined);
46
+ set metadata(metadata: TaskMetadata);
47
+ emitUpdate(): void;
48
+ addLog(log: string, level?: LogLevel): void;
49
+ wait(): Promise<T>;
50
+ toData(): {
51
+ id: string;
52
+ status: TaskStatus;
53
+ errorMessage?: string | undefined;
54
+ metadata: TaskMetadata;
55
+ future: Future<T>;
56
+ run: TaskRunner<T>;
57
+ };
58
+ }
59
+ declare class TaskManager {
60
+ private _tasks;
61
+ add<T>(id: string, runner: TaskRunner<T>, metadata: TaskMetadata): Task<T>;
62
+ waitFor(filter: (task: Task<any>) => boolean): Promise<void>;
63
+ get(taskId: string): Task<any> | undefined;
64
+ exists(taskId: string): boolean;
65
+ remove(taskId: string): void;
66
+ list(): TaskData[];
67
+ private invokeTask;
68
+ }
69
+ export declare const taskManager: TaskManager;
70
+ export {};
@@ -0,0 +1,181 @@
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.taskManager = exports.Task = exports.TaskStatus = void 0;
8
+ /**
9
+ * Class that handles processing background tasks.
10
+ */
11
+ const socketManager_1 = require("./socketManager");
12
+ const EVENT_TASK_UPDATED = 'task-updated';
13
+ const EVENT_TASK_ADDED = 'task-added';
14
+ const EVENT_TASK_REMOVED = 'task-removed';
15
+ const EVENT_TASK_LOG = 'task-log';
16
+ var TaskStatus;
17
+ (function (TaskStatus) {
18
+ TaskStatus["PENDING"] = "PENDING";
19
+ TaskStatus["RUNNING"] = "RUNNING";
20
+ TaskStatus["COMPLETED"] = "COMPLETED";
21
+ TaskStatus["FAILED"] = "FAILED";
22
+ })(TaskStatus || (exports.TaskStatus = TaskStatus = {}));
23
+ class Task {
24
+ data;
25
+ constructor(task) {
26
+ this.data = task;
27
+ }
28
+ get id() {
29
+ return this.data.id;
30
+ }
31
+ get status() {
32
+ return this.data.status;
33
+ }
34
+ get errorMessage() {
35
+ return this.data.errorMessage;
36
+ }
37
+ get metadata() {
38
+ return this.data.metadata;
39
+ }
40
+ get future() {
41
+ return this.data.future;
42
+ }
43
+ get run() {
44
+ return this.data.run;
45
+ }
46
+ set status(status) {
47
+ this.data.status = status;
48
+ }
49
+ set errorMessage(errorMessage) {
50
+ this.data.errorMessage = errorMessage;
51
+ }
52
+ set metadata(metadata) {
53
+ this.data.metadata = metadata;
54
+ }
55
+ emitUpdate() {
56
+ socketManager_1.socketManager.emitGlobal(EVENT_TASK_UPDATED, this.toData());
57
+ }
58
+ addLog(log, level = 'INFO') {
59
+ socketManager_1.socketManager.emitGlobal(EVENT_TASK_LOG, {
60
+ id: this.id,
61
+ message: log,
62
+ level,
63
+ time: Date.now(),
64
+ });
65
+ }
66
+ async wait() {
67
+ return this.future.promise;
68
+ }
69
+ toData() {
70
+ return { ...this.data };
71
+ }
72
+ }
73
+ exports.Task = Task;
74
+ function createFuture() {
75
+ let resolve = () => { };
76
+ let reject = () => { };
77
+ const promise = new Promise((res, rej) => {
78
+ resolve = res;
79
+ reject = rej;
80
+ });
81
+ // Ignore unhandled promise rejections
82
+ promise.catch(() => { });
83
+ return {
84
+ promise,
85
+ resolve,
86
+ reject,
87
+ };
88
+ }
89
+ class TaskManager {
90
+ _tasks = [];
91
+ add(id, runner, metadata) {
92
+ const existingTask = this.get(id);
93
+ if (existingTask) {
94
+ return existingTask;
95
+ }
96
+ const future = createFuture();
97
+ const task = new Task({
98
+ id,
99
+ status: TaskStatus.PENDING,
100
+ metadata,
101
+ future,
102
+ run: runner,
103
+ });
104
+ this._tasks.push(task);
105
+ socketManager_1.socketManager.emitGlobal(EVENT_TASK_ADDED, task.toData());
106
+ this.invokeTask(task).catch((err) => {
107
+ console.warn(`Task ${task.id} failed`, err);
108
+ });
109
+ return task;
110
+ }
111
+ async waitFor(filter) {
112
+ const tasks = this._tasks.filter(filter);
113
+ while (tasks.length > 0) {
114
+ const task = tasks.shift();
115
+ if (!task) {
116
+ continue;
117
+ }
118
+ try {
119
+ await task.wait();
120
+ }
121
+ catch (e) {
122
+ //Ignore
123
+ }
124
+ }
125
+ }
126
+ get(taskId) {
127
+ return this._tasks.find((t) => t.id === taskId);
128
+ }
129
+ exists(taskId) {
130
+ return !!this.get(taskId);
131
+ }
132
+ remove(taskId) {
133
+ const task = this.get(taskId);
134
+ if (!task) {
135
+ return;
136
+ }
137
+ if (task.status === TaskStatus.RUNNING) {
138
+ throw new Error('Cannot remove a running task');
139
+ }
140
+ this._tasks = this._tasks.filter((t) => t.id !== taskId);
141
+ socketManager_1.socketManager.emitGlobal(EVENT_TASK_REMOVED, task.toData());
142
+ }
143
+ list() {
144
+ return this._tasks.map((t) => t.toData());
145
+ }
146
+ async invokeTask(task) {
147
+ if (task.metadata.group) {
148
+ const existingTaskInGroup = this._tasks.find((t) => t.id !== task.id && t.metadata.group === task.metadata.group && t.status === TaskStatus.RUNNING);
149
+ if (existingTaskInGroup) {
150
+ return;
151
+ }
152
+ }
153
+ const startTime = Date.now();
154
+ try {
155
+ task.status = TaskStatus.RUNNING;
156
+ task.emitUpdate();
157
+ const result = await task.run(task);
158
+ task.status = TaskStatus.COMPLETED;
159
+ task.future.resolve(result);
160
+ task.emitUpdate();
161
+ }
162
+ catch (e) {
163
+ console.warn(`Task ${task.id} failed while waiting for it to resolve`, e);
164
+ task.errorMessage = e.message;
165
+ task.status = TaskStatus.FAILED;
166
+ task.future.reject(e);
167
+ task.emitUpdate();
168
+ }
169
+ finally {
170
+ this.remove(task.id);
171
+ console.log(`Task ${task.id} completed in ${Date.now() - startTime}ms`);
172
+ }
173
+ if (task.metadata.group) {
174
+ const nextTaskInGroup = this._tasks.find((t) => t.id !== task.id && t.metadata.group === task.metadata.group && t.status === TaskStatus.PENDING);
175
+ if (nextTaskInGroup) {
176
+ return this.invokeTask(nextTaskInGroup);
177
+ }
178
+ }
179
+ }
180
+ }
181
+ exports.taskManager = new TaskManager();
@@ -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,39 @@
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 cors_1 = require("../middleware/cors");
12
+ const taskManager_1 = require("../taskManager");
13
+ const router = (0, express_promise_router_1.default)();
14
+ router.use('/', cors_1.corsHandler);
15
+ /**
16
+ * Get all current tasks
17
+ */
18
+ router.get('/', (req, res) => {
19
+ res.send(taskManager_1.taskManager.list());
20
+ });
21
+ router.get('/:taskId', (req, res) => {
22
+ const task = taskManager_1.taskManager.get(req.params.taskId);
23
+ if (!task) {
24
+ res.status(404).send({ error: 'Task not found' });
25
+ return;
26
+ }
27
+ res.send(task.toData());
28
+ });
29
+ router.delete('/:taskId', (req, res) => {
30
+ try {
31
+ taskManager_1.taskManager.remove(req.params.taskId);
32
+ res.send({ ok: true });
33
+ }
34
+ catch (e) {
35
+ res.status(400).send({ error: e.message });
36
+ return;
37
+ }
38
+ });
39
+ 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,22 @@
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 networkManager_1 = require("../networkManager");
12
+ const router = (0, express_promise_router_1.default)();
13
+ router.get('/:systemId/target/:connectionId/', (req, res) => {
14
+ res.send(networkManager_1.networkManager.getTrafficForConnection(req.params.systemId, req.params.connectionId));
15
+ });
16
+ router.get('/:systemId/source/:blockInstanceId/', (req, res) => {
17
+ res.send(networkManager_1.networkManager.getTrafficForSource(req.params.systemId, req.params.blockInstanceId));
18
+ });
19
+ router.get('/:systemId/target/:blockInstanceId/', (req, res) => {
20
+ res.send(networkManager_1.networkManager.getTrafficForTarget(req.params.systemId, req.params.blockInstanceId));
21
+ });
22
+ exports.default = router;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ import express from 'express';
6
+ import { Connection, Resource } from '@kapeta/schemas';
7
+ import { StringBodyRequest } from './middleware/stringBody';
8
+ import { KapetaRequest } from './middleware/kapeta';
9
+ export declare const KIND_RESOURCE_OPERATOR = "core/resource-type-operator";
10
+ export declare const KIND_BLOCK_TYPE = "core/block-type";
11
+ export declare const KIND_BLOCK_TYPE_OPERATOR = "core/block-type-operator";
12
+ export declare const KIND_BLOCK_TYPE_EXECUTABLE = "core/block-type-executable";
13
+ export type StringMap = {
14
+ [key: string]: string;
15
+ };
16
+ export type AnyMap = {
17
+ [key: string]: any;
18
+ };
19
+ export type SourceOfChange = 'user' | 'filesystem';
20
+ export type WatchEventName = 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir';
21
+ export type LogLevel = 'ERROR' | 'WARN' | 'INFO' | 'DEBUG' | 'TRACE' | 'FATAL';
22
+ export type LogSource = 'stdout' | 'stderr';
23
+ export type EnvironmentType = 'docker' | 'process';
24
+ export declare const DOCKER_HOST_INTERNAL = "host.docker.internal";
25
+ export interface LogEntry {
26
+ source: LogSource;
27
+ level: LogLevel;
28
+ message: string;
29
+ time: number;
30
+ }
31
+ export interface BlockProcessParams {
32
+ id: string;
33
+ ref: string;
34
+ configuration?: AnyMap;
35
+ }
36
+ export declare enum InstanceType {
37
+ DOCKER = "docker",
38
+ LOCAL = "local",
39
+ UNKNOWN = "unknown"
40
+ }
41
+ export declare enum InstanceOwner {
42
+ INTERNAL = "internal",
43
+ EXTERNAL = "external"
44
+ }
45
+ export declare enum InstanceStatus {
46
+ STOPPED = "stopped",
47
+ STARTING = "starting",
48
+ BUSY = "busy",
49
+ READY = "ready",
50
+ STOPPING = "stopping",
51
+ UNHEALTHY = "unhealthy",
52
+ FAILED = "failed"
53
+ }
54
+ export declare enum DesiredInstanceStatus {
55
+ STOP = "stop",
56
+ RUN = "run",
57
+ EXTERNAL = "external"
58
+ }
59
+ export type ProcessInfo = {
60
+ type: InstanceType;
61
+ pid?: number | string | null;
62
+ portType?: string;
63
+ };
64
+ export type InstanceInfo = {
65
+ systemId: string;
66
+ instanceId: string;
67
+ ref: string;
68
+ name: string;
69
+ type: InstanceType;
70
+ owner: InstanceOwner;
71
+ status: InstanceStatus;
72
+ errorMessage?: string;
73
+ desiredStatus: DesiredInstanceStatus;
74
+ address?: string;
75
+ startedAt?: number;
76
+ health?: string | null;
77
+ pid?: number | string | null;
78
+ portType?: string;
79
+ };
80
+ export type ProxyRequestHandler = (req: StringBodyRequest, res: express.Response, info: ProxyRequestInfo) => void;
81
+ export interface ProxyRequestInfo {
82
+ address: string;
83
+ connection: Connection;
84
+ providerResource: Resource;
85
+ consumerResource: Resource;
86
+ consumerPath: string;
87
+ }
88
+ export interface SimpleResponse {
89
+ code: number;
90
+ headers: StringMap;
91
+ body: any;
92
+ }
93
+ export interface SimpleRequest {
94
+ method: string;
95
+ url: string;
96
+ headers: StringMap;
97
+ body: any;
98
+ }
99
+ export type KapetaBodyRequest = KapetaRequest & StringBodyRequest;