@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
package/LICENSE ADDED
@@ -0,0 +1,38 @@
1
+ License text copyright © 2023 MariaDB plc, All Rights Reserved. “Business Source License” is a trademark of MariaDB plc.
2
+
3
+ Licensor: Kapeta Inc.
4
+
5
+ Licensed Work: The Licensed Work is (c) 2023 Kapeta Inc.
6
+
7
+ Change Date: Four years from the date the Licensed Work is published
8
+
9
+ Change License: AGPLv1
10
+
11
+ Updated: Oct. 30, 2023
12
+
13
+ For information about alternative licensing arrangements for the Licensed Work, please contact licensing@kapeta.com.
14
+
15
+ Terms
16
+
17
+ The Licensor hereby grants you the right to copy, modify, create derivative works, redistribute, and make
18
+ non-production use of the Licensed Work. The Licensor may make an Additional Use Grant, above, permitting limited
19
+ production use.
20
+ Effective on the Change Date, or the fourth anniversary of the first publicly available distribution of a specific
21
+ version of the Licensed Work under this License, whichever comes first, the Licensor hereby grants you rights under the
22
+ terms of the Change License, and the rights granted in the paragraph above terminate.
23
+ If your use of the Licensed Work does not comply with the requirements currently in effect as described in this License,
24
+ you must purchase a commercial license from the Licensor, its affiliated entities, or authorized resellers, or you must
25
+ refrain from using the Licensed Work.
26
+ All copies of the original and modified Licensed Work, and derivative works of the Licensed Work, are subject to this
27
+ License. This License applies separately for each version of the Licensed Work and the Change Date may vary for each
28
+ version of the Licensed Work released by Licensor.
29
+ You must conspicuously display this License on each original or modified copy of the Licensed Work. If you receive the
30
+ Licensed Work in original or modified form from a third party, the terms and conditions set forth in this License apply
31
+ to your use of that work.
32
+ Any use of the Licensed Work in violation of this License will automatically terminate your rights under this License
33
+ for the current and all other versions of the Licensed Work.
34
+ This License does not grant you any right in any trademark or logo of Licensor or its affiliates (provided that you may
35
+ use a trademark or logo of Licensor as expressly required by this License).
36
+ TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS
37
+ ALL WARRANTIES AND CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY, FITNESS
38
+ FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE.
package/README.md ADDED
@@ -0,0 +1,36 @@
1
+ ## Local cluster service for Kapeta
2
+
3
+ This service is a multi-functional service for simulating a "real" cluster - specifically during
4
+ local development.
5
+
6
+ ### Features
7
+
8
+ #### Configuration Service
9
+ Provides configuration management for local services to simplify configuring local instances and
10
+ also auto-generates configuration as part of its service discovery and routing capabilities.
11
+
12
+ #### Service Discovery
13
+ Also provides simple service-discovery through its control over configuration - by simply controlling
14
+ where services find other services. This is also how it injects itself as a MITM proxy for all local
15
+ traffic and how we intend to achieve "local -> remote" and "remote -> local" tunneling in the future.
16
+
17
+ #### Local Proxy
18
+ The service also provides a local proxy server that enables fine-grained routing and traffic-inspection.
19
+ The only protocol currently supported is HTTP and REST-JSON but the intention is to add support for
20
+ several others such as MySQL, PostgreSQL, MongoDB, Redis and more.
21
+
22
+ #### Local Metrics (Not implemented)
23
+ The local cluster service should also support metrics reporting from the
24
+ local instances to make testing and checking metrics for your local environment straight-forward.
25
+
26
+ #### Remote Tunnel (Not implemented)
27
+ It's able to connect to a remote cluster and override certain endpoints conditionally in that cluster to
28
+ make them point to itself.
29
+
30
+ This is to allow these scenarios:
31
+ - Testing in production for a subset of users (Or just your own)
32
+ - Development against a team or private sandbox to avoid running every service locally
33
+
34
+ ## License
35
+
36
+ This project is licensed under the BUSL-1.1 License - see the [LICENSE](LICENSE) file for details
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+
6
+ declare module 'recursive-watch' {
7
+ export default function watch(path: string, callback: (filename: string) => void): () => void;
8
+ }
9
+
10
+ declare module '@kapeta/nodejs-registry-utils' {
11
+ import { Dependency, Kind } from '@kapeta/schemas';
12
+
13
+ export interface AssetVersion {
14
+ content: Kind;
15
+ dependencies: Dependency[];
16
+ version: string;
17
+ }
18
+
19
+ export class RegistryService {
20
+ constructor(url: string);
21
+
22
+ getVersion(fullName: string, version: string): Promise<AssetVersion>;
23
+ getLatestVersion(name): Promise<AssetVersion>;
24
+ }
25
+
26
+ export const Config: any;
27
+ export const Actions: any;
28
+
29
+ export const handlers: {
30
+ DockerHandler: ArtifactHandlerFactory;
31
+ NPMHandler: ArtifactHandlerFactory;
32
+ MavenHandler: ArtifactHandlerFactory;
33
+ YAMLHandler: ArtifactHandlerFactory;
34
+ };
35
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ /// <reference types="node" />
6
+ import HTTP from 'http';
7
+ export type LocalClusterService = HTTP.Server & {
8
+ host?: string;
9
+ port?: number;
10
+ };
11
+ export type StartResult = {
12
+ host: string;
13
+ port: number;
14
+ dockerStatus: boolean;
15
+ };
16
+ declare const _default: {
17
+ isRunning: () => boolean;
18
+ getCurrentPort: () => number | undefined;
19
+ ping: (host: string, port: number) => Promise<{
20
+ ok: boolean;
21
+ }>;
22
+ /**
23
+ * Starts the local cluster service.
24
+ * resolves when listening is done with port number. Rejects if listening failed.
25
+ */
26
+ start: () => Promise<StartResult>;
27
+ /**
28
+ * Stops any currently running cluster services.
29
+ * @return {Promise<boolean>} Returns true if the service was stopped - false if no service was running.
30
+ */
31
+ stop: () => Promise<unknown>;
32
+ getServices: () => any;
33
+ };
34
+ export default _default;
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright 2023 Kapeta Inc.
4
+ * SPDX-License-Identifier: BUSL-1.1
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ var __importDefault = (this && this.__importDefault) || function (mod) {
30
+ return (mod && mod.__esModule) ? mod : { "default": mod };
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ const clusterService_1 = require("./src/clusterService");
34
+ const storageService_1 = require("./src/storageService");
35
+ const serviceManager_1 = require("./src/serviceManager");
36
+ const socketManager_1 = require("./src/socketManager");
37
+ const containerManager_1 = require("./src/containerManager");
38
+ const express_1 = __importDefault(require("express"));
39
+ const http_1 = __importDefault(require("http"));
40
+ const socket_io_1 = require("socket.io");
41
+ const routes_1 = __importDefault(require("./src/traffic/routes"));
42
+ const routes_2 = __importDefault(require("./src/proxy/routes"));
43
+ const routes_3 = __importDefault(require("./src/config/routes"));
44
+ const routes_4 = __importDefault(require("./src/instances/routes"));
45
+ const routes_5 = __importDefault(require("./src/identities/routes"));
46
+ const routes_6 = __importDefault(require("./src/filesystem/routes"));
47
+ const routes_7 = __importDefault(require("./src/assets/routes"));
48
+ const routes_8 = __importDefault(require("./src/providers/routes"));
49
+ const routes_9 = __importDefault(require("./src/attachments/routes"));
50
+ const routes_10 = __importDefault(require("./src/tasks/routes"));
51
+ const api_1 = __importDefault(require("./src/api"));
52
+ const routes_11 = __importDefault(require("./src/ai/routes"));
53
+ const utils_1 = require("./src/utils/utils");
54
+ const request_1 = __importDefault(require("request"));
55
+ const repositoryManager_1 = require("./src/repositoryManager");
56
+ const taskManager_1 = require("./src/taskManager");
57
+ const commandLineUtils_1 = require("./src/utils/commandLineUtils");
58
+ const DefaultProviderInstaller_1 = require("./src/utils/DefaultProviderInstaller");
59
+ const authManager_1 = require("./src/authManager");
60
+ const codeGeneratorManager_1 = require("./src/codeGeneratorManager");
61
+ const Sentry = __importStar(require("@sentry/node"));
62
+ const assetManager_1 = require("./src/assetManager");
63
+ Sentry.init({
64
+ dsn: 'https://0b7cc946d82c591473d6f95fff5e210b@o4505820837249024.ingest.sentry.io/4506212692000768',
65
+ enabled: process.env.NODE_ENV !== 'development',
66
+ // Performance Monitoring on every ~20th request
67
+ tracesSampleRate: 0.05,
68
+ // Set sampling rate for profiling - this is relative to tracesSampleRate
69
+ profilesSampleRate: 1.0,
70
+ });
71
+ let currentServer = null;
72
+ function createServer() {
73
+ const app = (0, express_1.default)();
74
+ Sentry.addIntegration(new Sentry.Integrations.Http({ tracing: true }));
75
+ Sentry.addIntegration(new Sentry.Integrations.Express({ app }));
76
+ // This causes node < 20 to crash on request.
77
+ //app.use(Sentry.Handlers.requestHandler());
78
+ // TracingHandler creates a trace for every incoming request
79
+ app.use(Sentry.Handlers.tracingHandler());
80
+ app.use('/traffic', routes_1.default);
81
+ app.use('/proxy', routes_2.default);
82
+ app.use('/config', routes_3.default);
83
+ app.use('/instances', routes_4.default);
84
+ app.use('/identities', routes_5.default);
85
+ app.use('/files', routes_6.default);
86
+ app.use('/assets', routes_7.default);
87
+ app.use('/providers', routes_8.default);
88
+ app.use('/attachments', routes_9.default);
89
+ app.use('/tasks', routes_10.default);
90
+ app.use('/api', api_1.default);
91
+ app.use('/ai', routes_11.default);
92
+ app.get('/status', async (req, res) => {
93
+ res.send({
94
+ ok: true,
95
+ dockerStatus: await containerManager_1.containerManager.checkAlive(),
96
+ socketStatus: socketManager_1.socketManager.isAlive(),
97
+ });
98
+ });
99
+ app.get('/ping', async (req, res) => {
100
+ res.send({
101
+ ok: true,
102
+ });
103
+ });
104
+ app.use('/', (req, res) => {
105
+ console.error('Invalid request: %s %s', req.method, req.originalUrl);
106
+ res.status(400).json({
107
+ ok: false,
108
+ error: 'Unknown',
109
+ });
110
+ });
111
+ app.use(Sentry.Handlers.errorHandler());
112
+ /**
113
+ * Central error handler, allows us to return a consistent JSON response wrapper with the error.
114
+ */
115
+ app.use((err, req, res, next) => {
116
+ console.error('Error handling request: %s %s', req.method, req.originalUrl, err);
117
+ res.status(err.status || 500).json({
118
+ ok: false,
119
+ error: err.message || 'Unknown error',
120
+ stack: process.env.NODE_ENV !== 'production' ? err.stack : undefined,
121
+ });
122
+ });
123
+ const server = http_1.default.createServer(app);
124
+ //socket
125
+ const io = new socket_io_1.Server(server, {
126
+ cors: {
127
+ //TODO: This should'nt be hardcoded but also shouldn't be "*"
128
+ origin: 'http://localhost:8080',
129
+ },
130
+ });
131
+ socketManager_1.socketManager.setIo(io);
132
+ return server;
133
+ }
134
+ exports.default = {
135
+ isRunning: function () {
136
+ return !!currentServer;
137
+ },
138
+ getCurrentPort: function () {
139
+ if (!currentServer) {
140
+ return -1;
141
+ }
142
+ return currentServer.port;
143
+ },
144
+ ping: async function (host, port) {
145
+ return new Promise((resolve, reject) => {
146
+ request_1.default.get(`http://${host}:${port}/ping`, (err, res, body) => {
147
+ if (err) {
148
+ reject(err);
149
+ return;
150
+ }
151
+ resolve(JSON.parse(body));
152
+ });
153
+ });
154
+ },
155
+ /**
156
+ * Starts the local cluster service.
157
+ * resolves when listening is done with port number. Rejects if listening failed.
158
+ */
159
+ start: async function () {
160
+ if (currentServer) {
161
+ throw new Error('Server already started');
162
+ }
163
+ try {
164
+ console.log('Testing docker runtime...');
165
+ await containerManager_1.containerManager.initialize();
166
+ }
167
+ catch (e) {
168
+ console.error('Could not ping docker runtime: ' + e.toString() + '. Make sure docker is running and working.');
169
+ }
170
+ await DefaultProviderInstaller_1.defaultProviderInstaller.checkForDefault();
171
+ await codeGeneratorManager_1.codeGeneratorManager.initialize();
172
+ const clusterPort = storageService_1.storageService.get('cluster', 'port');
173
+ if (clusterPort) {
174
+ clusterService_1.clusterService.setClusterServicePort(clusterPort);
175
+ }
176
+ const clusterHost = storageService_1.storageService.get('cluster', 'host');
177
+ if (clusterHost) {
178
+ clusterService_1.clusterService.setClusterServiceHost(clusterHost);
179
+ }
180
+ let pingResult = undefined;
181
+ try {
182
+ pingResult = await this.ping(clusterHost, clusterPort);
183
+ }
184
+ catch (e) {
185
+ //Ignore - expected to not be running since we're starting it
186
+ }
187
+ if (pingResult?.ok) {
188
+ throw new Error(`Cluster service already running on: ${clusterHost}:${clusterPort}.`);
189
+ }
190
+ await clusterService_1.clusterService.init();
191
+ authManager_1.authManager.listenForChanges();
192
+ currentServer = createServer();
193
+ const port = clusterService_1.clusterService.getClusterServicePort();
194
+ const host = clusterService_1.clusterService.getClusterServiceHost();
195
+ if (clusterPort !== port) {
196
+ storageService_1.storageService.put('cluster', 'port', port);
197
+ }
198
+ if (clusterHost !== host) {
199
+ storageService_1.storageService.put('cluster', 'host', host);
200
+ }
201
+ return new Promise((resolve, reject) => {
202
+ if (!currentServer) {
203
+ reject(new Error(`Current server wasn't set`));
204
+ return;
205
+ }
206
+ currentServer.once('error', (err) => {
207
+ if (currentServer) {
208
+ currentServer.close();
209
+ currentServer = null;
210
+ }
211
+ reject(err);
212
+ });
213
+ // On Linux we need to bind to 0.0.0.0 to be able to connect to it from docker containers.
214
+ // TODO: This might pose a security risk - so we should authenticate all requests using a
215
+ // shared secret/nonce that we pass around.
216
+ const bindHost = (0, utils_1.isLinux)() ? '0.0.0.0' : host;
217
+ currentServer.listen(port, bindHost, async () => {
218
+ try {
219
+ const ensureCLITask = await (0, commandLineUtils_1.ensureCLI)();
220
+ if (ensureCLITask) {
221
+ await taskManager_1.taskManager.waitFor((t) => t === ensureCLITask);
222
+ }
223
+ }
224
+ catch (e) {
225
+ console.error('Failed to install CLI.', e);
226
+ }
227
+ try {
228
+ await (0, commandLineUtils_1.ensureCLICommands)();
229
+ }
230
+ catch (error) {
231
+ console.error('Failed to ensure default CLI commands', error);
232
+ }
233
+ try {
234
+ // Start installation process for all default providers
235
+ await repositoryManager_1.repositoryManager.ensureDefaultProviders();
236
+ }
237
+ catch (e) {
238
+ console.error('Failed to install default providers.', e);
239
+ }
240
+ assetManager_1.assetManager.startUpgradeInterval();
241
+ resolve({ host, port, dockerStatus: containerManager_1.containerManager.isAlive() });
242
+ });
243
+ currentServer.host = host;
244
+ currentServer.port = port;
245
+ });
246
+ },
247
+ /**
248
+ * Stops any currently running cluster services.
249
+ * @return {Promise<boolean>} Returns true if the service was stopped - false if no service was running.
250
+ */
251
+ stop: function () {
252
+ if (currentServer) {
253
+ return new Promise(function (resolve) {
254
+ if (currentServer) {
255
+ currentServer.close(() => resolve(true));
256
+ currentServer = null;
257
+ }
258
+ });
259
+ }
260
+ return Promise.resolve(false);
261
+ },
262
+ getServices: () => serviceManager_1.serviceManager.getServices(),
263
+ };
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Copyright 2023 Kapeta Inc.
3
+ * SPDX-License-Identifier: BUSL-1.1
4
+ */
5
+ /// <reference types="node" />
6
+ import { SourceOfChange } from './types';
7
+ import { EventEmitter } from 'node:events';
8
+ export declare class RepositoryWatcher extends EventEmitter {
9
+ private watcher?;
10
+ private disabled;
11
+ private readonly baseDir;
12
+ private allDefinitions;
13
+ private symbolicLinks;
14
+ private sourceOfChange;
15
+ constructor();
16
+ setDisabled(disabled: boolean): void;
17
+ watch(): void;
18
+ setSourceOfChangeFor(file: string, source: SourceOfChange): Promise<void>;
19
+ clearSourceOfChangeFor(file: string): Promise<void>;
20
+ unwatch(): Promise<void>;
21
+ private getAssetIdentity;
22
+ private handleFileChange;
23
+ private getRepositoryPath;
24
+ private checkForChange;
25
+ private exists;
26
+ private removeSymlinkTarget;
27
+ private updateSymlinkTarget;
28
+ private addSymlinkTarget;
29
+ private ignoreFile;
30
+ }