@wildo-ai/platform-config-lib 1.0.1

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 (230) hide show
  1. package/dist/esm/bootstrap/application-backend-env.contracts.d.ts +2 -0
  2. package/dist/esm/bootstrap/application-backend-env.contracts.d.ts.map +1 -0
  3. package/dist/esm/bootstrap/application-backend-env.contracts.js +2 -0
  4. package/dist/esm/bootstrap/application-backend-env.contracts.js.map +1 -0
  5. package/dist/esm/bootstrap/bootstrap-planner.d.ts +20 -0
  6. package/dist/esm/bootstrap/bootstrap-planner.d.ts.map +1 -0
  7. package/dist/esm/bootstrap/bootstrap-planner.js +26 -0
  8. package/dist/esm/bootstrap/bootstrap-planner.js.map +1 -0
  9. package/dist/esm/bootstrap/bootstrap.contracts.d.ts +120 -0
  10. package/dist/esm/bootstrap/bootstrap.contracts.d.ts.map +1 -0
  11. package/dist/esm/bootstrap/bootstrap.contracts.js +117 -0
  12. package/dist/esm/bootstrap/bootstrap.contracts.js.map +1 -0
  13. package/dist/esm/bootstrap/bootstrap.schemas.d.ts +485 -0
  14. package/dist/esm/bootstrap/bootstrap.schemas.d.ts.map +1 -0
  15. package/dist/esm/bootstrap/bootstrap.schemas.js +130 -0
  16. package/dist/esm/bootstrap/bootstrap.schemas.js.map +1 -0
  17. package/dist/esm/bootstrap/platform-runtime-env.contracts.d.ts +78 -0
  18. package/dist/esm/bootstrap/platform-runtime-env.contracts.d.ts.map +1 -0
  19. package/dist/esm/bootstrap/platform-runtime-env.contracts.js +98 -0
  20. package/dist/esm/bootstrap/platform-runtime-env.contracts.js.map +1 -0
  21. package/dist/esm/bootstrap/runtime-topology.contracts.d.ts +17 -0
  22. package/dist/esm/bootstrap/runtime-topology.contracts.d.ts.map +1 -0
  23. package/dist/esm/bootstrap/runtime-topology.contracts.js +60 -0
  24. package/dist/esm/bootstrap/runtime-topology.contracts.js.map +1 -0
  25. package/dist/esm/credentials/credential-generator.service.d.ts +11 -0
  26. package/dist/esm/credentials/credential-generator.service.d.ts.map +1 -0
  27. package/dist/esm/credentials/credential-generator.service.js +31 -0
  28. package/dist/esm/credentials/credential-generator.service.js.map +1 -0
  29. package/dist/esm/credentials/credentials-provisioner.service.d.ts +190 -0
  30. package/dist/esm/credentials/credentials-provisioner.service.d.ts.map +1 -0
  31. package/dist/esm/credentials/credentials-provisioner.service.js +278 -0
  32. package/dist/esm/credentials/credentials-provisioner.service.js.map +1 -0
  33. package/dist/esm/index.d.ts +16 -0
  34. package/dist/esm/index.d.ts.map +1 -0
  35. package/dist/esm/index.js +16 -0
  36. package/dist/esm/index.js.map +1 -0
  37. package/dist/esm/infra-managers/infra-manager.models.d.ts +146 -0
  38. package/dist/esm/infra-managers/infra-manager.models.d.ts.map +1 -0
  39. package/dist/esm/infra-managers/infra-manager.models.js +2 -0
  40. package/dist/esm/infra-managers/infra-manager.models.js.map +1 -0
  41. package/dist/esm/infra-managers/mongo-atlas-manager.service.d.ts +64 -0
  42. package/dist/esm/infra-managers/mongo-atlas-manager.service.d.ts.map +1 -0
  43. package/dist/esm/infra-managers/mongo-atlas-manager.service.js +307 -0
  44. package/dist/esm/infra-managers/mongo-atlas-manager.service.js.map +1 -0
  45. package/dist/esm/infra-managers/postgresql-manager.service.d.ts +115 -0
  46. package/dist/esm/infra-managers/postgresql-manager.service.d.ts.map +1 -0
  47. package/dist/esm/infra-managers/postgresql-manager.service.js +403 -0
  48. package/dist/esm/infra-managers/postgresql-manager.service.js.map +1 -0
  49. package/dist/esm/infra-managers/rabbitmq-manager.service.d.ts +64 -0
  50. package/dist/esm/infra-managers/rabbitmq-manager.service.d.ts.map +1 -0
  51. package/dist/esm/infra-managers/rabbitmq-manager.service.js +288 -0
  52. package/dist/esm/infra-managers/rabbitmq-manager.service.js.map +1 -0
  53. package/dist/esm/infra-managers/redis-manager.service.d.ts +78 -0
  54. package/dist/esm/infra-managers/redis-manager.service.d.ts.map +1 -0
  55. package/dist/esm/infra-managers/redis-manager.service.js +326 -0
  56. package/dist/esm/infra-managers/redis-manager.service.js.map +1 -0
  57. package/dist/esm/project-config/define-framework-config.d.ts +36 -0
  58. package/dist/esm/project-config/define-framework-config.d.ts.map +1 -0
  59. package/dist/esm/project-config/define-framework-config.js +30 -0
  60. package/dist/esm/project-config/define-framework-config.js.map +1 -0
  61. package/dist/esm/project-config/define-infra-config.d.ts +128 -0
  62. package/dist/esm/project-config/define-infra-config.d.ts.map +1 -0
  63. package/dist/esm/project-config/define-infra-config.js +87 -0
  64. package/dist/esm/project-config/define-infra-config.js.map +1 -0
  65. package/dist/esm/project-config/define-minion-config.d.ts +41 -0
  66. package/dist/esm/project-config/define-minion-config.d.ts.map +1 -0
  67. package/dist/esm/project-config/define-minion-config.js +24 -0
  68. package/dist/esm/project-config/define-minion-config.js.map +1 -0
  69. package/dist/esm/project-config/define-platform-config.d.ts +65 -0
  70. package/dist/esm/project-config/define-platform-config.d.ts.map +1 -0
  71. package/dist/esm/project-config/define-platform-config.js +22 -0
  72. package/dist/esm/project-config/define-platform-config.js.map +1 -0
  73. package/dist/esm/project-config/define-platform-env-config.d.ts +41 -0
  74. package/dist/esm/project-config/define-platform-env-config.d.ts.map +1 -0
  75. package/dist/esm/project-config/define-platform-env-config.js +45 -0
  76. package/dist/esm/project-config/define-platform-env-config.js.map +1 -0
  77. package/dist/esm/project-config/define-project-config.d.ts +38 -0
  78. package/dist/esm/project-config/define-project-config.d.ts.map +1 -0
  79. package/dist/esm/project-config/define-project-config.js +57 -0
  80. package/dist/esm/project-config/define-project-config.js.map +1 -0
  81. package/dist/esm/project-config/define-saas-config.d.ts +252 -0
  82. package/dist/esm/project-config/define-saas-config.d.ts.map +1 -0
  83. package/dist/esm/project-config/define-saas-config.js +137 -0
  84. package/dist/esm/project-config/define-saas-config.js.map +1 -0
  85. package/dist/esm/project-config/define-sharing-policy.d.ts +35 -0
  86. package/dist/esm/project-config/define-sharing-policy.d.ts.map +1 -0
  87. package/dist/esm/project-config/define-sharing-policy.js +30 -0
  88. package/dist/esm/project-config/define-sharing-policy.js.map +1 -0
  89. package/dist/esm/project-config/define-worker-config.d.ts +42 -0
  90. package/dist/esm/project-config/define-worker-config.d.ts.map +1 -0
  91. package/dist/esm/project-config/define-worker-config.js +24 -0
  92. package/dist/esm/project-config/define-worker-config.js.map +1 -0
  93. package/dist/esm/project-config/index.d.ts +22 -0
  94. package/dist/esm/project-config/index.d.ts.map +1 -0
  95. package/dist/esm/project-config/index.js +22 -0
  96. package/dist/esm/project-config/index.js.map +1 -0
  97. package/dist/esm/project-config/loader.d.ts +42 -0
  98. package/dist/esm/project-config/loader.d.ts.map +1 -0
  99. package/dist/esm/project-config/loader.js +164 -0
  100. package/dist/esm/project-config/loader.js.map +1 -0
  101. package/dist/esm/project-config/shared/application-modules.schemas.d.ts +10 -0
  102. package/dist/esm/project-config/shared/application-modules.schemas.d.ts.map +1 -0
  103. package/dist/esm/project-config/shared/application-modules.schemas.js +6 -0
  104. package/dist/esm/project-config/shared/application-modules.schemas.js.map +1 -0
  105. package/dist/esm/project-config/shared/application-modules.utils.d.ts +6 -0
  106. package/dist/esm/project-config/shared/application-modules.utils.d.ts.map +1 -0
  107. package/dist/esm/project-config/shared/application-modules.utils.js +26 -0
  108. package/dist/esm/project-config/shared/application-modules.utils.js.map +1 -0
  109. package/dist/esm/project-config/shared/backing-services.schemas.d.ts +68 -0
  110. package/dist/esm/project-config/shared/backing-services.schemas.d.ts.map +1 -0
  111. package/dist/esm/project-config/shared/backing-services.schemas.js +49 -0
  112. package/dist/esm/project-config/shared/backing-services.schemas.js.map +1 -0
  113. package/dist/esm/project-config/shared/data-services.schemas.d.ts +33 -0
  114. package/dist/esm/project-config/shared/data-services.schemas.d.ts.map +1 -0
  115. package/dist/esm/project-config/shared/data-services.schemas.js +47 -0
  116. package/dist/esm/project-config/shared/data-services.schemas.js.map +1 -0
  117. package/dist/esm/project-config/shared/env-example-defaults.d.ts +27 -0
  118. package/dist/esm/project-config/shared/env-example-defaults.d.ts.map +1 -0
  119. package/dist/esm/project-config/shared/env-example-defaults.js +30 -0
  120. package/dist/esm/project-config/shared/env-example-defaults.js.map +1 -0
  121. package/dist/esm/project-config/shared/environment.schemas.d.ts +106 -0
  122. package/dist/esm/project-config/shared/environment.schemas.d.ts.map +1 -0
  123. package/dist/esm/project-config/shared/environment.schemas.js +111 -0
  124. package/dist/esm/project-config/shared/environment.schemas.js.map +1 -0
  125. package/dist/esm/project-config/shared/infrastructure-defaults.schemas.d.ts +42 -0
  126. package/dist/esm/project-config/shared/infrastructure-defaults.schemas.d.ts.map +1 -0
  127. package/dist/esm/project-config/shared/infrastructure-defaults.schemas.js +42 -0
  128. package/dist/esm/project-config/shared/infrastructure-defaults.schemas.js.map +1 -0
  129. package/dist/esm/project-config/shared/k8s-utils.d.ts +36 -0
  130. package/dist/esm/project-config/shared/k8s-utils.d.ts.map +1 -0
  131. package/dist/esm/project-config/shared/k8s-utils.js +50 -0
  132. package/dist/esm/project-config/shared/k8s-utils.js.map +1 -0
  133. package/dist/esm/project-config/shared/platform-services.schemas.d.ts +30 -0
  134. package/dist/esm/project-config/shared/platform-services.schemas.d.ts.map +1 -0
  135. package/dist/esm/project-config/shared/platform-services.schemas.js +27 -0
  136. package/dist/esm/project-config/shared/platform-services.schemas.js.map +1 -0
  137. package/dist/esm/project-config/shared/service-definitions.schemas.d.ts +42 -0
  138. package/dist/esm/project-config/shared/service-definitions.schemas.d.ts.map +1 -0
  139. package/dist/esm/project-config/shared/service-definitions.schemas.js +29 -0
  140. package/dist/esm/project-config/shared/service-definitions.schemas.js.map +1 -0
  141. package/dist/esm/project-config/sharing-policy-validation.d.ts +40 -0
  142. package/dist/esm/project-config/sharing-policy-validation.d.ts.map +1 -0
  143. package/dist/esm/project-config/sharing-policy-validation.js +143 -0
  144. package/dist/esm/project-config/sharing-policy-validation.js.map +1 -0
  145. package/dist/esm/release/framework-release.constants.d.ts +3 -0
  146. package/dist/esm/release/framework-release.constants.d.ts.map +1 -0
  147. package/dist/esm/release/framework-release.constants.js +3 -0
  148. package/dist/esm/release/framework-release.constants.js.map +1 -0
  149. package/dist/esm/runtime-bridge/platform-runtime-bridge.contracts.d.ts +23 -0
  150. package/dist/esm/runtime-bridge/platform-runtime-bridge.contracts.d.ts.map +1 -0
  151. package/dist/esm/runtime-bridge/platform-runtime-bridge.contracts.js +13 -0
  152. package/dist/esm/runtime-bridge/platform-runtime-bridge.contracts.js.map +1 -0
  153. package/dist/esm/schemas/framework-info.schemas.d.ts +8 -0
  154. package/dist/esm/schemas/framework-info.schemas.d.ts.map +1 -0
  155. package/dist/esm/schemas/framework-info.schemas.js +8 -0
  156. package/dist/esm/schemas/framework-info.schemas.js.map +1 -0
  157. package/dist/esm/schemas/framework-secrets.schemas.d.ts +22 -0
  158. package/dist/esm/schemas/framework-secrets.schemas.d.ts.map +1 -0
  159. package/dist/esm/schemas/framework-secrets.schemas.js +14 -0
  160. package/dist/esm/schemas/framework-secrets.schemas.js.map +1 -0
  161. package/dist/esm/schemas/platform-application-config.schemas.d.ts +20 -0
  162. package/dist/esm/schemas/platform-application-config.schemas.d.ts.map +1 -0
  163. package/dist/esm/schemas/platform-application-config.schemas.js +19 -0
  164. package/dist/esm/schemas/platform-application-config.schemas.js.map +1 -0
  165. package/dist/esm/schemas/platform-application-secrets.schemas.d.ts +54 -0
  166. package/dist/esm/schemas/platform-application-secrets.schemas.d.ts.map +1 -0
  167. package/dist/esm/schemas/platform-application-secrets.schemas.js +67 -0
  168. package/dist/esm/schemas/platform-application-secrets.schemas.js.map +1 -0
  169. package/dist/esm/schemas/platform-config.schemas.d.ts +66 -0
  170. package/dist/esm/schemas/platform-config.schemas.d.ts.map +1 -0
  171. package/dist/esm/schemas/platform-config.schemas.js +28 -0
  172. package/dist/esm/schemas/platform-config.schemas.js.map +1 -0
  173. package/dist/esm/workspace-scope/index.d.ts +3 -0
  174. package/dist/esm/workspace-scope/index.d.ts.map +1 -0
  175. package/dist/esm/workspace-scope/index.js +3 -0
  176. package/dist/esm/workspace-scope/index.js.map +1 -0
  177. package/dist/esm/workspace-scope/workspace-scope-detector.d.ts +15 -0
  178. package/dist/esm/workspace-scope/workspace-scope-detector.d.ts.map +1 -0
  179. package/dist/esm/workspace-scope/workspace-scope-detector.js +87 -0
  180. package/dist/esm/workspace-scope/workspace-scope-detector.js.map +1 -0
  181. package/dist/esm/workspace-scope/workspace-scope.schemas.d.ts +118 -0
  182. package/dist/esm/workspace-scope/workspace-scope.schemas.d.ts.map +1 -0
  183. package/dist/esm/workspace-scope/workspace-scope.schemas.js +157 -0
  184. package/dist/esm/workspace-scope/workspace-scope.schemas.js.map +1 -0
  185. package/dist/tsconfig.build.tsbuildinfo +1 -0
  186. package/package.json +52 -0
  187. package/src/bootstrap/application-backend-env.contracts.ts +17 -0
  188. package/src/bootstrap/bootstrap-planner.ts +46 -0
  189. package/src/bootstrap/bootstrap.contracts.ts +251 -0
  190. package/src/bootstrap/bootstrap.schemas.ts +164 -0
  191. package/src/bootstrap/platform-runtime-env.contracts.ts +99 -0
  192. package/src/bootstrap/runtime-topology.contracts.ts +102 -0
  193. package/src/credentials/credential-generator.service.ts +39 -0
  194. package/src/index.ts +16 -0
  195. package/src/project-config/__tests__/application-modules.utils.test.ts +53 -0
  196. package/src/project-config/__tests__/define-framework-config.test.ts +43 -0
  197. package/src/project-config/__tests__/define-saas-config.test.ts +210 -0
  198. package/src/project-config/__tests__/loader.test.ts +100 -0
  199. package/src/project-config/define-framework-config.ts +44 -0
  200. package/src/project-config/define-infra-config.ts +168 -0
  201. package/src/project-config/define-minion-config.ts +27 -0
  202. package/src/project-config/define-platform-config.ts +28 -0
  203. package/src/project-config/define-platform-env-config.ts +59 -0
  204. package/src/project-config/define-project-config.ts +63 -0
  205. package/src/project-config/define-saas-config.ts +171 -0
  206. package/src/project-config/define-sharing-policy.ts +36 -0
  207. package/src/project-config/define-worker-config.ts +27 -0
  208. package/src/project-config/index.ts +23 -0
  209. package/src/project-config/loader.ts +220 -0
  210. package/src/project-config/shared/application-modules.schemas.ts +12 -0
  211. package/src/project-config/shared/application-modules.utils.ts +65 -0
  212. package/src/project-config/shared/backing-services.schemas.ts +59 -0
  213. package/src/project-config/shared/data-services.schemas.ts +58 -0
  214. package/src/project-config/shared/env-example-defaults.ts +50 -0
  215. package/src/project-config/shared/environment.schemas.ts +136 -0
  216. package/src/project-config/shared/infrastructure-defaults.schemas.ts +47 -0
  217. package/src/project-config/shared/k8s-utils.ts +56 -0
  218. package/src/project-config/shared/platform-services.schemas.ts +33 -0
  219. package/src/project-config/shared/service-definitions.schemas.ts +38 -0
  220. package/src/project-config/sharing-policy-validation.ts +159 -0
  221. package/src/release/framework-release.constants.ts +2 -0
  222. package/src/schemas/__tests__/platform-config.schemas.test.ts +90 -0
  223. package/src/schemas/framework-info.schemas.ts +13 -0
  224. package/src/schemas/framework-secrets.schemas.ts +19 -0
  225. package/src/schemas/platform-application-config.schemas.ts +25 -0
  226. package/src/schemas/platform-application-secrets.schemas.ts +78 -0
  227. package/src/schemas/platform-config.schemas.ts +45 -0
  228. package/src/workspace-scope/index.ts +2 -0
  229. package/src/workspace-scope/workspace-scope-detector.ts +98 -0
  230. package/src/workspace-scope/workspace-scope.schemas.ts +224 -0
@@ -0,0 +1,288 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import * as amqp from 'amqplib';
14
+ import { injectable, inject } from 'inversify';
15
+ import { WildoHeaderKeys } from '@wildo-ai/saas-models';
16
+ import axios from 'axios';
17
+ import { PLATFORM_RUNTIME_BRIDGE_TYPES, } from '../runtime-bridge/platform-runtime-bridge.contracts.js';
18
+ /**
19
+ * RabbitMQ Connection Manager Service
20
+ * Manages RabbitMQ connections for different applications and platform services
21
+ */
22
+ let RabbitMQConnectionManagerService = class RabbitMQConnectionManagerService {
23
+ logger;
24
+ connections = new Map();
25
+ channels = new Map();
26
+ adminClient = null;
27
+ logDebug;
28
+ constructor(logger) {
29
+ this.logger = logger;
30
+ this.logDebug = this.logger.debugByType('RabbitMQConnectionManagerService');
31
+ this.logger.setDebugTypeLogging('RabbitMQConnectionManagerService', true);
32
+ this.logDebug('RabbitMQ connection manager service initialized');
33
+ }
34
+ // =====================
35
+ // ADMIN (Management HTTP API)
36
+ // =====================
37
+ /**
38
+ * Check if RabbitMQ admin client is initialized and ready to use
39
+ * @returns true if initializeAdmin() has been called successfully
40
+ */
41
+ isAdminInitialized() {
42
+ return this.adminClient !== null;
43
+ }
44
+ /**
45
+ * Initialize RabbitMQ admin client and verify connection with retry logic.
46
+ * Waits for RabbitMQ to be ready before returning.
47
+ * @param config - RabbitMQ admin configuration
48
+ * @param maxRetries - Maximum number of retry attempts (default: 10)
49
+ * @param retryDelayMs - Delay between retries in milliseconds (default: 3000)
50
+ * @throws Error if connection cannot be established after all retries
51
+ */
52
+ async initializeAdmin(config, maxRetries = 10, retryDelayMs = 3000) {
53
+ if (this.adminClient)
54
+ return;
55
+ this.logDebug('Initializing RabbitMQ management API client');
56
+ this.adminClient = axios.create({
57
+ baseURL: config.managementUrl.replace(/\/$/, ''),
58
+ timeout: 15000,
59
+ auth: { username: config.adminUsername, password: config.adminPassword },
60
+ headers: { [WildoHeaderKeys.CONTENT_TYPE]: 'application/json', [WildoHeaderKeys.ACCEPT]: 'application/json' },
61
+ });
62
+ // Verify connection with retry logic - wait for RabbitMQ to be ready
63
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
64
+ try {
65
+ await this.adminClient.get('/api/overview');
66
+ this.logDebug('RabbitMQ management API connection verified', { attempt });
67
+ return;
68
+ }
69
+ catch (error) {
70
+ const errorMsg = error instanceof Error ? error.message : String(error);
71
+ const isConnectionError = errorMsg.includes('ECONNREFUSED') || errorMsg.includes('ETIMEDOUT');
72
+ if (attempt === maxRetries) {
73
+ this.adminClient = null; // Reset client on final failure
74
+ throw new Error(`RabbitMQ management API not reachable after ${maxRetries} attempts: ${errorMsg}`);
75
+ }
76
+ if (isConnectionError) {
77
+ this.logDebug(`RabbitMQ not ready (attempt ${attempt}/${maxRetries}), retrying in ${retryDelayMs}ms...`, { error: errorMsg });
78
+ await this.sleep(retryDelayMs);
79
+ }
80
+ else {
81
+ // Non-connection error (e.g., auth failure) - fail immediately
82
+ this.adminClient = null;
83
+ throw new Error(`RabbitMQ management API error: ${errorMsg}`);
84
+ }
85
+ }
86
+ }
87
+ }
88
+ sleep(ms) {
89
+ return new Promise(resolve => setTimeout(resolve, ms));
90
+ }
91
+ async upsertTenantUserPermissions(input) {
92
+ if (!this.adminClient)
93
+ throw new Error('RabbitMQ admin client not initialized');
94
+ const tags = (input.tags ?? []).join(',');
95
+ const vhostEncoded = encodeURIComponent(input.vhost);
96
+ // 0) Ensure vhost exists
97
+ try {
98
+ await this.adminClient.put(`/api/vhosts/${vhostEncoded}`, {});
99
+ }
100
+ catch (_) {
101
+ // Some servers require POST to create; try POST if PUT fails
102
+ try {
103
+ await this.adminClient.post(`/api/vhosts/${vhostEncoded}`, {});
104
+ }
105
+ catch { }
106
+ }
107
+ // 1) Create/update user (idempotent)
108
+ await this.adminClient.put(`/api/users/${encodeURIComponent(input.username)}`, { password: input.password, tags });
109
+ // 2) Set vhost permissions
110
+ // Write must include the default exchange because sendToQueue() publishes through it.
111
+ // - ^$ matches the empty-string exchange name (RabbitMQ 3.x)
112
+ // - amq\.default matches RabbitMQ 4.x default exchange name
113
+ const writeRegex = `(^$|amq\\.default|${input.resourceNameRegex})`;
114
+ await this.adminClient.put(`/api/permissions/${vhostEncoded}/${encodeURIComponent(input.username)}`, { configure: input.resourceNameRegex, write: writeRegex, read: input.resourceNameRegex });
115
+ // 3) Set topic permissions for routing keys
116
+ await this.adminClient.put(`/api/topic-permissions/${vhostEncoded}/${encodeURIComponent(input.username)}`, { exchange: input.topicExchange, write: input.routingKeyRegex, read: input.routingKeyRegex });
117
+ return { username: input.username, vhost: input.vhost, created: true, permissionsApplied: true, topicPermissionsApplied: true };
118
+ }
119
+ async deleteUser(username) {
120
+ if (!this.adminClient)
121
+ throw new Error('RabbitMQ admin client not initialized');
122
+ await this.adminClient.delete(`/api/users/${encodeURIComponent(username)}`);
123
+ return { username, deleted: true };
124
+ }
125
+ /**
126
+ * Create a new RabbitMQ connection
127
+ */
128
+ async createConnection(connectionName, amqpUrl, options) {
129
+ try {
130
+ if (this.connections.has(connectionName)) {
131
+ this.logDebug('Reusing existing RabbitMQ connection', { connectionName });
132
+ return this.connections.get(connectionName);
133
+ }
134
+ this.logDebug('Creating new RabbitMQ connection', { connectionName, amqpUrl });
135
+ const connection = await amqp.connect(amqpUrl, options);
136
+ // Handle connection errors
137
+ connection.on('error', (error) => {
138
+ this.logger.error('RabbitMQ connection error:', { connectionName, error: error.message });
139
+ this.connections.delete(connectionName);
140
+ });
141
+ connection.on('close', () => {
142
+ this.logDebug('RabbitMQ connection closed', { connectionName });
143
+ this.connections.delete(connectionName);
144
+ });
145
+ this.connections.set(connectionName, connection);
146
+ this.logDebug('RabbitMQ connection created successfully', { connectionName });
147
+ return connection;
148
+ }
149
+ catch (error) {
150
+ this.logger.error('Failed to create RabbitMQ connection:', {
151
+ connectionName,
152
+ amqpUrl,
153
+ error: error instanceof Error ? error.message : 'Unknown error'
154
+ });
155
+ throw error;
156
+ }
157
+ }
158
+ /**
159
+ * Create a new channel for a connection
160
+ */
161
+ async createChannel(connectionName, channelName) {
162
+ try {
163
+ const actualChannelName = channelName || `${connectionName}-default`;
164
+ if (this.channels.has(actualChannelName)) {
165
+ this.logDebug('Reusing existing RabbitMQ channel', { channelName: actualChannelName });
166
+ return this.channels.get(actualChannelName);
167
+ }
168
+ const connection = this.connections.get(connectionName);
169
+ if (!connection) {
170
+ throw new Error(`Connection ${connectionName} not found`);
171
+ }
172
+ this.logDebug('Creating new RabbitMQ channel', { connectionName, channelName: actualChannelName });
173
+ const channel = await connection.createChannel();
174
+ // Handle channel errors
175
+ channel.on('error', (error) => {
176
+ this.logger.error('RabbitMQ channel error:', { channelName: actualChannelName, error: error.message });
177
+ this.channels.delete(actualChannelName);
178
+ });
179
+ channel.on('close', () => {
180
+ this.logDebug('RabbitMQ channel closed', { channelName: actualChannelName });
181
+ this.channels.delete(actualChannelName);
182
+ });
183
+ this.channels.set(actualChannelName, channel);
184
+ this.logDebug('RabbitMQ channel created successfully', { channelName: actualChannelName });
185
+ return channel;
186
+ }
187
+ catch (error) {
188
+ this.logger.error('Failed to create RabbitMQ channel:', {
189
+ connectionName,
190
+ channelName,
191
+ error: error instanceof Error ? error.message : 'Unknown error'
192
+ });
193
+ throw error;
194
+ }
195
+ }
196
+ /**
197
+ * Get an existing connection
198
+ */
199
+ getConnection(connectionName) {
200
+ return this.connections.get(connectionName);
201
+ }
202
+ /**
203
+ * Get an existing channel
204
+ */
205
+ getChannel(channelName) {
206
+ return this.channels.get(channelName);
207
+ }
208
+ /**
209
+ * Close a specific connection and its channels
210
+ */
211
+ async closeConnection(connectionName) {
212
+ try {
213
+ // Close all channels for this connection
214
+ const channelsToClose = Array.from(this.channels.entries())
215
+ .filter(([name]) => name.startsWith(connectionName))
216
+ .map(([name, channel]) => ({ name, channel }));
217
+ for (const { name, channel } of channelsToClose) {
218
+ try {
219
+ await channel.close();
220
+ this.channels.delete(name);
221
+ this.logDebug('RabbitMQ channel closed', { channelName: name });
222
+ }
223
+ catch (error) {
224
+ this.logger.warn('Error closing RabbitMQ channel:', { channelName: name, error });
225
+ }
226
+ }
227
+ // Close the connection
228
+ const connection = this.connections.get(connectionName);
229
+ if (connection) {
230
+ await connection.close();
231
+ this.connections.delete(connectionName);
232
+ this.logDebug('RabbitMQ connection closed', { connectionName });
233
+ }
234
+ }
235
+ catch (error) {
236
+ this.logger.error('Failed to close RabbitMQ connection:', {
237
+ connectionName,
238
+ error: error instanceof Error ? error.message : 'Unknown error'
239
+ });
240
+ throw error;
241
+ }
242
+ }
243
+ /**
244
+ * Close all connections and channels
245
+ */
246
+ async closeAll() {
247
+ this.logDebug('Closing all RabbitMQ connections and channels');
248
+ // Close all channels
249
+ for (const [name, channel] of this.channels) {
250
+ try {
251
+ await channel.close();
252
+ this.logDebug('RabbitMQ channel closed', { channelName: name });
253
+ }
254
+ catch (error) {
255
+ this.logger.warn('Error closing RabbitMQ channel:', { channelName: name, error });
256
+ }
257
+ }
258
+ this.channels.clear();
259
+ // Close all connections
260
+ for (const [name, connection] of this.connections) {
261
+ try {
262
+ await connection.close();
263
+ this.logDebug('RabbitMQ connection closed', { connectionName: name });
264
+ }
265
+ catch (error) {
266
+ this.logger.warn('Error closing RabbitMQ connection:', { connectionName: name, error });
267
+ }
268
+ }
269
+ this.connections.clear();
270
+ this.logDebug('All RabbitMQ connections and channels closed');
271
+ }
272
+ /**
273
+ * Get connection status
274
+ */
275
+ getConnectionStatus() {
276
+ return {
277
+ connections: Array.from(this.connections.keys()),
278
+ channels: Array.from(this.channels.keys())
279
+ };
280
+ }
281
+ };
282
+ RabbitMQConnectionManagerService = __decorate([
283
+ injectable(),
284
+ __param(0, inject(PLATFORM_RUNTIME_BRIDGE_TYPES.Logger)),
285
+ __metadata("design:paramtypes", [Object])
286
+ ], RabbitMQConnectionManagerService);
287
+ export { RabbitMQConnectionManagerService };
288
+ //# sourceMappingURL=rabbitmq-manager.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbitmq-manager.service.js","sourceRoot":"","sources":["../../../src/infra-managers/rabbitmq-manager.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import Redis, { RedisOptions } from 'ioredis';
2
+ import { type PlatformRuntimeLogger } from '../runtime-bridge/platform-runtime-bridge.contracts.js';
3
+ import { RedisAclAdminConfig, RedisAclUserConfigInput, RedisAclUserConfigResult, RedisAclDeleteUserResult } from './infra-manager.models.js';
4
+ /**
5
+ * Redis Connection Manager Service
6
+ * Manages Redis connections for different applications and platform services
7
+ */
8
+ export declare class RedisConnectionManagerService {
9
+ private logger;
10
+ private connections;
11
+ private adminRedis;
12
+ protected logDebug: (message: string, context?: Record<string, unknown>) => void;
13
+ constructor(logger: PlatformRuntimeLogger);
14
+ /**
15
+ * Check if Redis ACL admin is initialized and ready to use
16
+ * @returns true if initializeAclAdmin() has been called successfully
17
+ */
18
+ isAclAdminInitialized(): boolean;
19
+ /**
20
+ * Initialize Redis ACL admin connection with retry logic.
21
+ * Waits for Redis to be ready before returning.
22
+ * @param config - Redis admin configuration
23
+ * @param maxRetries - Maximum number of retry attempts (default: 10)
24
+ * @param retryDelayMs - Delay between retries in milliseconds (default: 3000)
25
+ * @throws Error if connection cannot be established after all retries
26
+ */
27
+ initializeAclAdmin(config: RedisAclAdminConfig, maxRetries?: number, retryDelayMs?: number): Promise<void>;
28
+ private sleep;
29
+ upsertTenantUserAcl(input: RedisAclUserConfigInput): Promise<RedisAclUserConfigResult>;
30
+ deleteTenantUser(username: string): Promise<RedisAclDeleteUserResult>;
31
+ /**
32
+ * Persist ACL configuration to disk.
33
+ * This saves all ACL users (including tenant users) to the ACL file.
34
+ * Required for tenant users to survive Valkey/Redis restarts.
35
+ *
36
+ * IMPORTANT: The Valkey StatefulSet must have the ACL file on a
37
+ * persistent volume for this to be effective. See deployment.yaml.hbs.
38
+ */
39
+ aclSave(): Promise<void>;
40
+ /**
41
+ * Create a new Redis connection
42
+ */
43
+ createConnection(connectionName: string, redisUrl: string, options?: RedisOptions): Promise<Redis>;
44
+ /**
45
+ * Get an existing Redis connection by name
46
+ */
47
+ getConnection(connectionName: string): Redis | undefined;
48
+ /**
49
+ * Get all connection names
50
+ */
51
+ getConnectionNames(): string[];
52
+ /**
53
+ * Close a specific connection
54
+ */
55
+ closeConnection(connectionName: string): Promise<void>;
56
+ /**
57
+ * Close all connections
58
+ */
59
+ closeAllConnections(): Promise<void>;
60
+ /**
61
+ * Check if a connection exists and is ready
62
+ */
63
+ isConnectionReady(connectionName: string): Promise<boolean>;
64
+ /**
65
+ * Get connection health status
66
+ */
67
+ getConnectionHealth(): Promise<Record<string, {
68
+ status: string;
69
+ latency?: number;
70
+ }>>;
71
+ }
72
+ export declare enum PlatformRedisType {
73
+ PLATFORM_CACHE = "platform-cache",
74
+ SESSION_STORE = "session-store",
75
+ RATE_LIMITING = "rate-limiting",
76
+ PUB_SUB = "pub-sub"
77
+ }
78
+ //# sourceMappingURL=redis-manager.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-manager.service.d.ts","sourceRoot":"","sources":["../../../src/infra-managers/redis-manager.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,qBACa,6BAA6B;IAMQ,OAAO,CAAC,MAAM;IAL9D,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,UAAU,CAAsB;IACxC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;gBAGzB,MAAM,EAAE,qBAAqB;IAWrF;;;OAGG;IACI,qBAAqB,IAAI,OAAO;IAIvC;;;;;;;OAOG;IACU,kBAAkB,CAC7B,MAAM,EAAE,mBAAmB,EAC3B,UAAU,GAAE,MAAW,EACvB,YAAY,GAAE,MAAa,GAC1B,OAAO,CAAC,IAAI,CAAC;IAsDhB,OAAO,CAAC,KAAK;IAIA,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAsEtF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAOlF;;;;;;;OAOG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAarC;;OAEG;IACG,gBAAgB,CACpB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,KAAK,CAAC;IA0CjB;;OAEG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIxD;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACG,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1C;;OAEG;IACG,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYjE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAmB3F;AAGD,oBAAY,iBAAiB;IAC3B,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,OAAO,YAAY;CACpB"}