@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,278 @@
1
+ /**
2
+ * Credentials Provisioner Service
3
+ *
4
+ * Consolidates Redis ACL and RabbitMQ user management into a single service.
5
+ * Used by apps-manager to provision credentials for platform services.
6
+ *
7
+ * This service provides idempotent operations:
8
+ * - Creating/updating Redis ACL users
9
+ * - Creating/updating RabbitMQ users with permissions
10
+ * - Generating secure passwords
11
+ * - Generating EC key pairs for JWT signing
12
+ */
13
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
14
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
15
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16
+ 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;
17
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
18
+ };
19
+ var __metadata = (this && this.__metadata) || function (k, v) {
20
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
21
+ };
22
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
23
+ return function (target, key) { decorator(target, key, paramIndex); }
24
+ };
25
+ import { injectable, inject } from 'inversify';
26
+ import * as crypto from 'crypto';
27
+ import { PLATFORM_RUNTIME_BRIDGE_TYPES, } from '../runtime-bridge/platform-runtime-bridge.contracts.js';
28
+ /**
29
+ * Service to provision Redis ACL and RabbitMQ users
30
+ */
31
+ let CredentialsProvisionerService = class CredentialsProvisionerService {
32
+ logger;
33
+ logDebug;
34
+ redisClient;
35
+ rabbitMQClient;
36
+ constructor(logger) {
37
+ this.logger = logger;
38
+ this.logDebug = this.logger.debugByType('CredentialsProvisionerService');
39
+ }
40
+ // =====================================================
41
+ // CLIENT INITIALIZATION
42
+ // =====================================================
43
+ /**
44
+ * Set the Redis admin client
45
+ * Must be called before any Redis operations
46
+ */
47
+ setRedisClient(client) {
48
+ this.redisClient = client;
49
+ this.logDebug('Redis admin client set');
50
+ }
51
+ /**
52
+ * Set the RabbitMQ management client
53
+ * Must be called before any RabbitMQ operations
54
+ */
55
+ setRabbitMQClient(client) {
56
+ this.rabbitMQClient = client;
57
+ this.logDebug('RabbitMQ management client set');
58
+ }
59
+ /**
60
+ * Check if both clients are configured
61
+ */
62
+ isConfigured() {
63
+ return !!this.redisClient && !!this.rabbitMQClient;
64
+ }
65
+ // =====================================================
66
+ // REDIS ACL OPERATIONS
67
+ // =====================================================
68
+ /**
69
+ * Provision a Redis ACL user (create or update)
70
+ * This is an idempotent operation.
71
+ */
72
+ async provisionRedisUser(config) {
73
+ if (!this.redisClient) {
74
+ return { success: false, created: false, updated: false, error: 'Redis client not configured' };
75
+ }
76
+ try {
77
+ this.logDebug('Provisioning Redis user', { username: config.username, keyPattern: config.keyPattern });
78
+ // Build ACL rules
79
+ const commands = config.commands || ['GET', 'SET', 'DEL', 'KEYS', 'EXISTS', 'EXPIRE', 'TTL', 'HSET', 'HGET', 'HDEL', 'HGETALL', 'HMSET', 'HMGET', 'SCAN', 'HSCAN'];
80
+ const rules = [
81
+ 'on', // Enable user
82
+ `>${config.password}`, // Set password
83
+ `~${config.keyPattern}`, // Key pattern
84
+ '&*', // Pub/sub channels (allow all for now)
85
+ ...commands.map(cmd => `+${cmd.toLowerCase()}`),
86
+ ];
87
+ await this.redisClient.aclSetUser(config.username, rules);
88
+ this.logger.info(`✅ Redis ACL user provisioned: ${config.username}`);
89
+ return { success: true, created: true, updated: false };
90
+ }
91
+ catch (error) {
92
+ const errorMessage = error instanceof Error ? error.message : String(error);
93
+ this.logger.error(`Failed to provision Redis user: ${config.username}`, { error: errorMessage });
94
+ return { success: false, created: false, updated: false, error: errorMessage };
95
+ }
96
+ }
97
+ /**
98
+ * Delete a Redis ACL user
99
+ */
100
+ async deleteRedisUser(username) {
101
+ if (!this.redisClient) {
102
+ return { success: false, created: false, updated: false, error: 'Redis client not configured' };
103
+ }
104
+ try {
105
+ this.logDebug('Deleting Redis user', { username });
106
+ await this.redisClient.aclDelUser(username);
107
+ this.logger.info(`✅ Redis ACL user deleted: ${username}`);
108
+ return { success: true, created: false, updated: false };
109
+ }
110
+ catch (error) {
111
+ const errorMessage = error instanceof Error ? error.message : String(error);
112
+ this.logger.error(`Failed to delete Redis user: ${username}`, { error: errorMessage });
113
+ return { success: false, created: false, updated: false, error: errorMessage };
114
+ }
115
+ }
116
+ // =====================================================
117
+ // RABBITMQ OPERATIONS
118
+ // =====================================================
119
+ /**
120
+ * Provision a RabbitMQ user (create or update)
121
+ * This is an idempotent operation.
122
+ */
123
+ async provisionRabbitMQUser(config) {
124
+ if (!this.rabbitMQClient) {
125
+ return { success: false, created: false, updated: false, error: 'RabbitMQ client not configured' };
126
+ }
127
+ try {
128
+ this.logDebug('Provisioning RabbitMQ user', { username: config.username, vhost: config.vhost });
129
+ // Create/update user
130
+ const tags = config.tags || [];
131
+ await this.rabbitMQClient.putUser(config.username, config.password, tags);
132
+ // Set permissions on vhost
133
+ await this.rabbitMQClient.setPermissions(config.username, config.vhost, config.permissions.configure, config.permissions.write, config.permissions.read);
134
+ this.logger.info(`✅ RabbitMQ user provisioned: ${config.username}`);
135
+ return { success: true, created: true, updated: false };
136
+ }
137
+ catch (error) {
138
+ const errorMessage = error instanceof Error ? error.message : String(error);
139
+ this.logger.error(`Failed to provision RabbitMQ user: ${config.username}`, { error: errorMessage });
140
+ return { success: false, created: false, updated: false, error: errorMessage };
141
+ }
142
+ }
143
+ /**
144
+ * Set topic permissions for a RabbitMQ user
145
+ */
146
+ async setRabbitMQTopicPermissions(username, vhost, permissions) {
147
+ if (!this.rabbitMQClient) {
148
+ return { success: false, created: false, updated: false, error: 'RabbitMQ client not configured' };
149
+ }
150
+ try {
151
+ this.logDebug('Setting RabbitMQ topic permissions', { username, vhost, exchange: permissions.exchange });
152
+ await this.rabbitMQClient.setTopicPermissions(username, vhost, permissions.exchange, permissions.write, permissions.read);
153
+ this.logger.info(`✅ RabbitMQ topic permissions set for: ${username}`);
154
+ return { success: true, created: false, updated: true };
155
+ }
156
+ catch (error) {
157
+ const errorMessage = error instanceof Error ? error.message : String(error);
158
+ this.logger.error(`Failed to set RabbitMQ topic permissions for: ${username}`, { error: errorMessage });
159
+ return { success: false, created: false, updated: false, error: errorMessage };
160
+ }
161
+ }
162
+ /**
163
+ * Delete a RabbitMQ user
164
+ */
165
+ async deleteRabbitMQUser(username) {
166
+ if (!this.rabbitMQClient) {
167
+ return { success: false, created: false, updated: false, error: 'RabbitMQ client not configured' };
168
+ }
169
+ try {
170
+ this.logDebug('Deleting RabbitMQ user', { username });
171
+ await this.rabbitMQClient.deleteUser(username);
172
+ this.logger.info(`✅ RabbitMQ user deleted: ${username}`);
173
+ return { success: true, created: false, updated: false };
174
+ }
175
+ catch (error) {
176
+ const errorMessage = error instanceof Error ? error.message : String(error);
177
+ this.logger.error(`Failed to delete RabbitMQ user: ${username}`, { error: errorMessage });
178
+ return { success: false, created: false, updated: false, error: errorMessage };
179
+ }
180
+ }
181
+ // =====================================================
182
+ // COMBINED OPERATIONS
183
+ // =====================================================
184
+ /**
185
+ * Provision a platform service with both Redis and RabbitMQ credentials
186
+ */
187
+ async provisionServiceCredentials(serviceName, redisConfig, rabbitMQConfig, topicPermissions) {
188
+ this.logDebug('Provisioning service credentials', { serviceName });
189
+ const redisResult = await this.provisionRedisUser(redisConfig);
190
+ const rabbitResult = await this.provisionRabbitMQUser(rabbitMQConfig);
191
+ let topicsResult;
192
+ if (topicPermissions && rabbitResult.success) {
193
+ topicsResult = await this.setRabbitMQTopicPermissions(rabbitMQConfig.username, rabbitMQConfig.vhost, topicPermissions);
194
+ }
195
+ const allSuccess = redisResult.success && rabbitResult.success && (!topicsResult || topicsResult.success);
196
+ if (allSuccess) {
197
+ this.logger.info(`✅ All credentials provisioned for: ${serviceName}`);
198
+ }
199
+ else {
200
+ this.logger.warn(`⚠️ Some credentials failed for: ${serviceName}`, {
201
+ redis: redisResult.success,
202
+ rabbitmq: rabbitResult.success,
203
+ topics: topicsResult?.success,
204
+ });
205
+ }
206
+ return { redis: redisResult, rabbitmq: rabbitResult, topics: topicsResult };
207
+ }
208
+ // =====================================================
209
+ // CREDENTIAL GENERATION
210
+ // =====================================================
211
+ /**
212
+ * Generate a cryptographically secure random password
213
+ */
214
+ generateSecurePassword(length = 32) {
215
+ return crypto.randomBytes(length)
216
+ .toString('base64')
217
+ .replace(/[+/=]/g, '')
218
+ .slice(0, length);
219
+ }
220
+ /**
221
+ * Generate an EC key pair for JWT signing (P-256 curve)
222
+ */
223
+ generateECKeyPair() {
224
+ const { privateKey, publicKey } = crypto.generateKeyPairSync('ec', {
225
+ namedCurve: 'P-256',
226
+ publicKeyEncoding: {
227
+ type: 'spki',
228
+ format: 'pem',
229
+ },
230
+ privateKeyEncoding: {
231
+ type: 'sec1',
232
+ format: 'pem',
233
+ },
234
+ });
235
+ return { privateKey, publicKey };
236
+ }
237
+ // =====================================================
238
+ // DEFAULT PERMISSION HELPERS
239
+ // =====================================================
240
+ /**
241
+ * Get default RabbitMQ permissions for a platform service
242
+ */
243
+ getDefaultRabbitMQPermissions(serviceName) {
244
+ const serviceSlug = serviceName.replace('platform_', '');
245
+ return {
246
+ // Can declare queues/exchanges with their service prefix
247
+ configure: `^wildo\\.platform\\.${serviceSlug}\\..*`,
248
+ // Can publish to their own queues/exchanges
249
+ write: `^wildo\\.platform\\.${serviceSlug}\\..*`,
250
+ // Can consume from their own queues and broadcast
251
+ read: `^(wildo\\.platform\\.${serviceSlug}\\..*|wildo\\.platform\\.broadcast\\..*)`,
252
+ };
253
+ }
254
+ /**
255
+ * Get default RabbitMQ topic permissions for a platform service
256
+ */
257
+ getDefaultTopicPermissions(serviceName) {
258
+ const serviceSlug = serviceName.replace('platform_', '');
259
+ return {
260
+ exchange: 'amq.topic',
261
+ write: `wildo.platform.${serviceSlug}.*`,
262
+ read: `wildo.platform.${serviceSlug}.*`,
263
+ };
264
+ }
265
+ /**
266
+ * Get default Redis key pattern for a platform service
267
+ */
268
+ getDefaultRedisKeyPattern(serviceName) {
269
+ return `${serviceName}:*`;
270
+ }
271
+ };
272
+ CredentialsProvisionerService = __decorate([
273
+ injectable(),
274
+ __param(0, inject(PLATFORM_RUNTIME_BRIDGE_TYPES.Logger)),
275
+ __metadata("design:paramtypes", [Object])
276
+ ], CredentialsProvisionerService);
277
+ export { CredentialsProvisionerService };
278
+ //# sourceMappingURL=credentials-provisioner.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials-provisioner.service.js","sourceRoot":"","sources":["../../../src/credentials/credentials-provisioner.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export * from './project-config/index.js';
2
+ export * from './workspace-scope/index.js';
3
+ export * from './credentials/credential-generator.service.js';
4
+ export * from './schemas/platform-application-config.schemas.js';
5
+ export * from './schemas/platform-application-secrets.schemas.js';
6
+ export * from './schemas/platform-config.schemas.js';
7
+ export * from './schemas/framework-info.schemas.js';
8
+ export * from './schemas/framework-secrets.schemas.js';
9
+ export * from './release/framework-release.constants.js';
10
+ export * from './bootstrap/bootstrap.schemas.js';
11
+ export * from './bootstrap/bootstrap.contracts.js';
12
+ export * from './bootstrap/bootstrap-planner.js';
13
+ export * from './bootstrap/application-backend-env.contracts.js';
14
+ export * from './bootstrap/platform-runtime-env.contracts.js';
15
+ export * from './bootstrap/runtime-topology.contracts.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4CAA4C,CAAC;AAE3D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export * from './project-config/index.js';
2
+ export * from './workspace-scope/index.js';
3
+ export * from './credentials/credential-generator.service.js';
4
+ export * from './schemas/platform-application-config.schemas.js';
5
+ export * from './schemas/platform-application-secrets.schemas.js';
6
+ export * from './schemas/platform-config.schemas.js';
7
+ export * from './schemas/framework-info.schemas.js';
8
+ export * from './schemas/framework-secrets.schemas.js';
9
+ export * from './release/framework-release.constants.js';
10
+ export * from './bootstrap/bootstrap.schemas.js';
11
+ export * from './bootstrap/bootstrap.contracts.js';
12
+ export * from './bootstrap/bootstrap-planner.js';
13
+ export * from './bootstrap/application-backend-env.contracts.js';
14
+ export * from './bootstrap/platform-runtime-env.contracts.js';
15
+ export * from './bootstrap/runtime-topology.contracts.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4CAA4C,CAAC;AAE3D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC"}
@@ -0,0 +1,146 @@
1
+ export interface AtlasApiConfig {
2
+ baseUrl: string;
3
+ publicKey: string;
4
+ privateKey: string;
5
+ projectId: string;
6
+ }
7
+ export interface CreateDatabaseUserInput {
8
+ clusterName: string;
9
+ databaseName: string;
10
+ username: string;
11
+ password: string;
12
+ }
13
+ export interface CreateDatabaseUserResponse {
14
+ username: string;
15
+ groupId: string;
16
+ roles: Array<{
17
+ roleName: string;
18
+ databaseName: string;
19
+ }>;
20
+ scopes?: Array<{
21
+ name: string;
22
+ type: 'CLUSTER';
23
+ }>;
24
+ }
25
+ export interface ClusterConnectionStringInput {
26
+ clusterName: string;
27
+ type?: 'srv' | 'standard';
28
+ }
29
+ export interface ClusterConnectionString {
30
+ connectionString: string;
31
+ }
32
+ export interface ClusterStatusResult {
33
+ state: string;
34
+ healthy: boolean;
35
+ }
36
+ export interface CreateApplicationDatabaseInput {
37
+ clusterName: string;
38
+ databaseName: string;
39
+ username: string;
40
+ password: string;
41
+ }
42
+ export interface CreateApplicationDatabaseResult {
43
+ databaseName: string;
44
+ username: string;
45
+ connectionString: string;
46
+ }
47
+ export interface AtlasClusterInfo {
48
+ name: string;
49
+ stateName: string;
50
+ srvAddress?: string;
51
+ mongoURI?: string;
52
+ mongoURIWithOptions?: string;
53
+ }
54
+ export interface RedisAclAdminConfig {
55
+ adminUrl: string;
56
+ }
57
+ export interface RedisAclUserConfigInput {
58
+ username: string;
59
+ password: string;
60
+ keyPattern: string;
61
+ channelPattern?: string;
62
+ allowCategories?: string[];
63
+ denyCategories?: string[];
64
+ denyCommands?: string[];
65
+ }
66
+ export interface RedisAclUserConfigResult {
67
+ username: string;
68
+ configured: boolean;
69
+ }
70
+ export interface RedisAclDeleteUserResult {
71
+ username: string;
72
+ deleted: boolean;
73
+ }
74
+ export interface RabbitMQAdminConfig {
75
+ managementUrl: string;
76
+ adminUsername: string;
77
+ adminPassword: string;
78
+ }
79
+ export interface RabbitMQUserPermissionsInput {
80
+ vhost: string;
81
+ username: string;
82
+ password: string;
83
+ resourceNameRegex: string;
84
+ topicExchange: string;
85
+ routingKeyRegex: string;
86
+ tags?: string[];
87
+ }
88
+ export interface RabbitMQUserPermissionsResult {
89
+ username: string;
90
+ vhost: string;
91
+ created: boolean;
92
+ permissionsApplied: boolean;
93
+ topicPermissionsApplied: boolean;
94
+ }
95
+ export interface RabbitMQDeleteUserResult {
96
+ username: string;
97
+ deleted: boolean;
98
+ }
99
+ import { PostgreSQLSSLMode } from '@wildo-ai/saas-models';
100
+ export interface PostgreSQLAdminConfig {
101
+ /** Admin connection URL (e.g., postgresql://admin:password@host:5432/postgres) */
102
+ adminUrl: string;
103
+ /** PostgreSQL host (extracted from URL for building app connection strings) */
104
+ host: string;
105
+ /** PostgreSQL port (default: 5432) */
106
+ port?: number;
107
+ /** SSL mode for connections */
108
+ sslMode?: PostgreSQLSSLMode;
109
+ }
110
+ export interface PostgreSQLCreateDatabaseInput {
111
+ /** Database name to create */
112
+ databaseName: string;
113
+ /** Username for the database owner */
114
+ username: string;
115
+ /** Password for the database user */
116
+ password: string;
117
+ /** SSL mode for the generated connection URL */
118
+ sslMode?: PostgreSQLSSLMode;
119
+ }
120
+ export interface PostgreSQLCreateDatabaseResult {
121
+ /** Database name that was created */
122
+ databaseName: string;
123
+ /** Username that was created/updated */
124
+ username: string;
125
+ /** Full PostgreSQL connection URL for the application */
126
+ connectionUrl: string;
127
+ /** Whether the database was newly created (false if it already existed) */
128
+ created: boolean;
129
+ }
130
+ export interface PostgreSQLDeleteDatabaseInput {
131
+ /** Database name to delete */
132
+ databaseName: string;
133
+ /** Username to delete */
134
+ username: string;
135
+ }
136
+ export interface PostgreSQLDeleteDatabaseResult {
137
+ /** Database name */
138
+ databaseName: string;
139
+ /** Username */
140
+ username: string;
141
+ /** Whether the database was deleted */
142
+ databaseDeleted: boolean;
143
+ /** Whether the user was deleted */
144
+ userDeleted: boolean;
145
+ }
146
+ //# sourceMappingURL=infra-manager.models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra-manager.models.d.ts","sourceRoot":"","sources":["../../../src/infra-managers/infra-manager.models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ // Centralized types for Mongo Atlas manager service
2
+ //# sourceMappingURL=infra-manager.models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra-manager.models.js","sourceRoot":"","sources":["../../../src/infra-managers/infra-manager.models.ts"],"names":[],"mappings":"AAAA,oDAAoD"}
@@ -0,0 +1,64 @@
1
+ import { type PlatformRuntimeLogger } from '../runtime-bridge/platform-runtime-bridge.contracts.js';
2
+ import { AtlasApiConfig, AtlasClusterInfo, ClusterConnectionString, ClusterConnectionStringInput, ClusterStatusResult, CreateApplicationDatabaseInput, CreateApplicationDatabaseResult, CreateDatabaseUserInput, CreateDatabaseUserResponse } from './infra-manager.models.js';
3
+ /**
4
+ * MongoDB Atlas Manager Service
5
+ * Manages MongoDB Atlas clusters, databases, and users via Atlas API
6
+ */
7
+ export declare class MongoAtlasManagerService {
8
+ private logger;
9
+ private apiClient;
10
+ private config;
11
+ protected logDebug: (message: string, context?: Record<string, unknown>) => void;
12
+ constructor(logger: PlatformRuntimeLogger);
13
+ /**
14
+ * Initialize Atlas API configuration
15
+ */
16
+ initialize(config: AtlasApiConfig): void;
17
+ /**
18
+ * Check if Atlas API is configured and ready to use
19
+ * @returns true if initialize() has been called with valid config
20
+ */
21
+ isConfigured(): boolean;
22
+ /**
23
+ * Get cluster information
24
+ */
25
+ getCluster(clusterName: string): Promise<AtlasClusterInfo>;
26
+ /**
27
+ * List clusters in the Atlas project
28
+ */
29
+ listClusters(): Promise<AtlasClusterInfo[]>;
30
+ /**
31
+ * Create a database-scoped user with readWrite role on a specific database
32
+ */
33
+ createDatabaseUser(input: CreateDatabaseUserInput): Promise<CreateDatabaseUserResponse>;
34
+ private ensureUserRoleOnDb;
35
+ /**
36
+ * Delete a database user
37
+ */
38
+ deleteDatabaseUser(username: string): Promise<void>;
39
+ /**
40
+ * Get connection string for a cluster
41
+ */
42
+ getConnectionString(input: ClusterConnectionStringInput): Promise<ClusterConnectionString>;
43
+ /**
44
+ * Check cluster status
45
+ */
46
+ getClusterStatus(clusterName: string): Promise<ClusterStatusResult>;
47
+ /**
48
+ * High-level helper: create per-application database user and return connection string
49
+ * Atlas does not require an explicit DB create; creating a collection or inserting first document creates it.
50
+ * Here we only create the user scoped to the cluster and database.
51
+ */
52
+ createApplicationDatabase(input: CreateApplicationDatabaseInput): Promise<CreateApplicationDatabaseResult>;
53
+ }
54
+ export interface DigestChallenge {
55
+ realm: string;
56
+ nonce: string;
57
+ qop?: string;
58
+ opaque?: string;
59
+ algorithm?: string;
60
+ }
61
+ export interface MongoAtlasManagerService {
62
+ digestRequest<T = any>(method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH', path: string, body?: any): Promise<T>;
63
+ }
64
+ //# sourceMappingURL=mongo-atlas-manager.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-atlas-manager.service.d.ts","sourceRoot":"","sources":["../../../src/infra-managers/mongo-atlas-manager.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,4BAA4B,EAC5B,mBAAmB,EACnB,8BAA8B,EAC9B,+BAA+B,EAC/B,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAIhC;;;GAGG;AACH,qBACa,wBAAwB;IAOa,OAAO,CAAC,MAAM;IAN9D,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,MAAM,CAA+B;IAE7C,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;IAerF;;OAEG;IACI,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAW/C;;;OAGG;IACI,YAAY,IAAI,OAAO;IAI9B;;OAEG;IACU,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOvE;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOxD;;OAEG;IACU,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,0BAA0B,CAAC;YA0CtF,kBAAkB;IAehC;;OAEG;IACU,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE;;OAEG;IACU,mBAAmB,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAYvG;;OAEG;IACU,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAehF;;;;OAIG;IACU,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,+BAA+B,CAAC;CAgCxH;AAUD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuDD,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,KAAK,GAAC,MAAM,GAAC,KAAK,GAAC,QAAQ,GAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3G"}