@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.
- package/dist/esm/bootstrap/application-backend-env.contracts.d.ts +2 -0
- package/dist/esm/bootstrap/application-backend-env.contracts.d.ts.map +1 -0
- package/dist/esm/bootstrap/application-backend-env.contracts.js +2 -0
- package/dist/esm/bootstrap/application-backend-env.contracts.js.map +1 -0
- package/dist/esm/bootstrap/bootstrap-planner.d.ts +20 -0
- package/dist/esm/bootstrap/bootstrap-planner.d.ts.map +1 -0
- package/dist/esm/bootstrap/bootstrap-planner.js +26 -0
- package/dist/esm/bootstrap/bootstrap-planner.js.map +1 -0
- package/dist/esm/bootstrap/bootstrap.contracts.d.ts +120 -0
- package/dist/esm/bootstrap/bootstrap.contracts.d.ts.map +1 -0
- package/dist/esm/bootstrap/bootstrap.contracts.js +117 -0
- package/dist/esm/bootstrap/bootstrap.contracts.js.map +1 -0
- package/dist/esm/bootstrap/bootstrap.schemas.d.ts +485 -0
- package/dist/esm/bootstrap/bootstrap.schemas.d.ts.map +1 -0
- package/dist/esm/bootstrap/bootstrap.schemas.js +130 -0
- package/dist/esm/bootstrap/bootstrap.schemas.js.map +1 -0
- package/dist/esm/bootstrap/platform-runtime-env.contracts.d.ts +78 -0
- package/dist/esm/bootstrap/platform-runtime-env.contracts.d.ts.map +1 -0
- package/dist/esm/bootstrap/platform-runtime-env.contracts.js +98 -0
- package/dist/esm/bootstrap/platform-runtime-env.contracts.js.map +1 -0
- package/dist/esm/bootstrap/runtime-topology.contracts.d.ts +17 -0
- package/dist/esm/bootstrap/runtime-topology.contracts.d.ts.map +1 -0
- package/dist/esm/bootstrap/runtime-topology.contracts.js +60 -0
- package/dist/esm/bootstrap/runtime-topology.contracts.js.map +1 -0
- package/dist/esm/credentials/credential-generator.service.d.ts +11 -0
- package/dist/esm/credentials/credential-generator.service.d.ts.map +1 -0
- package/dist/esm/credentials/credential-generator.service.js +31 -0
- package/dist/esm/credentials/credential-generator.service.js.map +1 -0
- package/dist/esm/credentials/credentials-provisioner.service.d.ts +190 -0
- package/dist/esm/credentials/credentials-provisioner.service.d.ts.map +1 -0
- package/dist/esm/credentials/credentials-provisioner.service.js +278 -0
- package/dist/esm/credentials/credentials-provisioner.service.js.map +1 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/infra-managers/infra-manager.models.d.ts +146 -0
- package/dist/esm/infra-managers/infra-manager.models.d.ts.map +1 -0
- package/dist/esm/infra-managers/infra-manager.models.js +2 -0
- package/dist/esm/infra-managers/infra-manager.models.js.map +1 -0
- package/dist/esm/infra-managers/mongo-atlas-manager.service.d.ts +64 -0
- package/dist/esm/infra-managers/mongo-atlas-manager.service.d.ts.map +1 -0
- package/dist/esm/infra-managers/mongo-atlas-manager.service.js +307 -0
- package/dist/esm/infra-managers/mongo-atlas-manager.service.js.map +1 -0
- package/dist/esm/infra-managers/postgresql-manager.service.d.ts +115 -0
- package/dist/esm/infra-managers/postgresql-manager.service.d.ts.map +1 -0
- package/dist/esm/infra-managers/postgresql-manager.service.js +403 -0
- package/dist/esm/infra-managers/postgresql-manager.service.js.map +1 -0
- package/dist/esm/infra-managers/rabbitmq-manager.service.d.ts +64 -0
- package/dist/esm/infra-managers/rabbitmq-manager.service.d.ts.map +1 -0
- package/dist/esm/infra-managers/rabbitmq-manager.service.js +288 -0
- package/dist/esm/infra-managers/rabbitmq-manager.service.js.map +1 -0
- package/dist/esm/infra-managers/redis-manager.service.d.ts +78 -0
- package/dist/esm/infra-managers/redis-manager.service.d.ts.map +1 -0
- package/dist/esm/infra-managers/redis-manager.service.js +326 -0
- package/dist/esm/infra-managers/redis-manager.service.js.map +1 -0
- package/dist/esm/project-config/define-framework-config.d.ts +36 -0
- package/dist/esm/project-config/define-framework-config.d.ts.map +1 -0
- package/dist/esm/project-config/define-framework-config.js +30 -0
- package/dist/esm/project-config/define-framework-config.js.map +1 -0
- package/dist/esm/project-config/define-infra-config.d.ts +128 -0
- package/dist/esm/project-config/define-infra-config.d.ts.map +1 -0
- package/dist/esm/project-config/define-infra-config.js +87 -0
- package/dist/esm/project-config/define-infra-config.js.map +1 -0
- package/dist/esm/project-config/define-minion-config.d.ts +41 -0
- package/dist/esm/project-config/define-minion-config.d.ts.map +1 -0
- package/dist/esm/project-config/define-minion-config.js +24 -0
- package/dist/esm/project-config/define-minion-config.js.map +1 -0
- package/dist/esm/project-config/define-platform-config.d.ts +65 -0
- package/dist/esm/project-config/define-platform-config.d.ts.map +1 -0
- package/dist/esm/project-config/define-platform-config.js +22 -0
- package/dist/esm/project-config/define-platform-config.js.map +1 -0
- package/dist/esm/project-config/define-platform-env-config.d.ts +41 -0
- package/dist/esm/project-config/define-platform-env-config.d.ts.map +1 -0
- package/dist/esm/project-config/define-platform-env-config.js +45 -0
- package/dist/esm/project-config/define-platform-env-config.js.map +1 -0
- package/dist/esm/project-config/define-project-config.d.ts +38 -0
- package/dist/esm/project-config/define-project-config.d.ts.map +1 -0
- package/dist/esm/project-config/define-project-config.js +57 -0
- package/dist/esm/project-config/define-project-config.js.map +1 -0
- package/dist/esm/project-config/define-saas-config.d.ts +252 -0
- package/dist/esm/project-config/define-saas-config.d.ts.map +1 -0
- package/dist/esm/project-config/define-saas-config.js +137 -0
- package/dist/esm/project-config/define-saas-config.js.map +1 -0
- package/dist/esm/project-config/define-sharing-policy.d.ts +35 -0
- package/dist/esm/project-config/define-sharing-policy.d.ts.map +1 -0
- package/dist/esm/project-config/define-sharing-policy.js +30 -0
- package/dist/esm/project-config/define-sharing-policy.js.map +1 -0
- package/dist/esm/project-config/define-worker-config.d.ts +42 -0
- package/dist/esm/project-config/define-worker-config.d.ts.map +1 -0
- package/dist/esm/project-config/define-worker-config.js +24 -0
- package/dist/esm/project-config/define-worker-config.js.map +1 -0
- package/dist/esm/project-config/index.d.ts +22 -0
- package/dist/esm/project-config/index.d.ts.map +1 -0
- package/dist/esm/project-config/index.js +22 -0
- package/dist/esm/project-config/index.js.map +1 -0
- package/dist/esm/project-config/loader.d.ts +42 -0
- package/dist/esm/project-config/loader.d.ts.map +1 -0
- package/dist/esm/project-config/loader.js +164 -0
- package/dist/esm/project-config/loader.js.map +1 -0
- package/dist/esm/project-config/shared/application-modules.schemas.d.ts +10 -0
- package/dist/esm/project-config/shared/application-modules.schemas.d.ts.map +1 -0
- package/dist/esm/project-config/shared/application-modules.schemas.js +6 -0
- package/dist/esm/project-config/shared/application-modules.schemas.js.map +1 -0
- package/dist/esm/project-config/shared/application-modules.utils.d.ts +6 -0
- package/dist/esm/project-config/shared/application-modules.utils.d.ts.map +1 -0
- package/dist/esm/project-config/shared/application-modules.utils.js +26 -0
- package/dist/esm/project-config/shared/application-modules.utils.js.map +1 -0
- package/dist/esm/project-config/shared/backing-services.schemas.d.ts +68 -0
- package/dist/esm/project-config/shared/backing-services.schemas.d.ts.map +1 -0
- package/dist/esm/project-config/shared/backing-services.schemas.js +49 -0
- package/dist/esm/project-config/shared/backing-services.schemas.js.map +1 -0
- package/dist/esm/project-config/shared/data-services.schemas.d.ts +33 -0
- package/dist/esm/project-config/shared/data-services.schemas.d.ts.map +1 -0
- package/dist/esm/project-config/shared/data-services.schemas.js +47 -0
- package/dist/esm/project-config/shared/data-services.schemas.js.map +1 -0
- package/dist/esm/project-config/shared/env-example-defaults.d.ts +27 -0
- package/dist/esm/project-config/shared/env-example-defaults.d.ts.map +1 -0
- package/dist/esm/project-config/shared/env-example-defaults.js +30 -0
- package/dist/esm/project-config/shared/env-example-defaults.js.map +1 -0
- package/dist/esm/project-config/shared/environment.schemas.d.ts +106 -0
- package/dist/esm/project-config/shared/environment.schemas.d.ts.map +1 -0
- package/dist/esm/project-config/shared/environment.schemas.js +111 -0
- package/dist/esm/project-config/shared/environment.schemas.js.map +1 -0
- package/dist/esm/project-config/shared/infrastructure-defaults.schemas.d.ts +42 -0
- package/dist/esm/project-config/shared/infrastructure-defaults.schemas.d.ts.map +1 -0
- package/dist/esm/project-config/shared/infrastructure-defaults.schemas.js +42 -0
- package/dist/esm/project-config/shared/infrastructure-defaults.schemas.js.map +1 -0
- package/dist/esm/project-config/shared/k8s-utils.d.ts +36 -0
- package/dist/esm/project-config/shared/k8s-utils.d.ts.map +1 -0
- package/dist/esm/project-config/shared/k8s-utils.js +50 -0
- package/dist/esm/project-config/shared/k8s-utils.js.map +1 -0
- package/dist/esm/project-config/shared/platform-services.schemas.d.ts +30 -0
- package/dist/esm/project-config/shared/platform-services.schemas.d.ts.map +1 -0
- package/dist/esm/project-config/shared/platform-services.schemas.js +27 -0
- package/dist/esm/project-config/shared/platform-services.schemas.js.map +1 -0
- package/dist/esm/project-config/shared/service-definitions.schemas.d.ts +42 -0
- package/dist/esm/project-config/shared/service-definitions.schemas.d.ts.map +1 -0
- package/dist/esm/project-config/shared/service-definitions.schemas.js +29 -0
- package/dist/esm/project-config/shared/service-definitions.schemas.js.map +1 -0
- package/dist/esm/project-config/sharing-policy-validation.d.ts +40 -0
- package/dist/esm/project-config/sharing-policy-validation.d.ts.map +1 -0
- package/dist/esm/project-config/sharing-policy-validation.js +143 -0
- package/dist/esm/project-config/sharing-policy-validation.js.map +1 -0
- package/dist/esm/release/framework-release.constants.d.ts +3 -0
- package/dist/esm/release/framework-release.constants.d.ts.map +1 -0
- package/dist/esm/release/framework-release.constants.js +3 -0
- package/dist/esm/release/framework-release.constants.js.map +1 -0
- package/dist/esm/runtime-bridge/platform-runtime-bridge.contracts.d.ts +23 -0
- package/dist/esm/runtime-bridge/platform-runtime-bridge.contracts.d.ts.map +1 -0
- package/dist/esm/runtime-bridge/platform-runtime-bridge.contracts.js +13 -0
- package/dist/esm/runtime-bridge/platform-runtime-bridge.contracts.js.map +1 -0
- package/dist/esm/schemas/framework-info.schemas.d.ts +8 -0
- package/dist/esm/schemas/framework-info.schemas.d.ts.map +1 -0
- package/dist/esm/schemas/framework-info.schemas.js +8 -0
- package/dist/esm/schemas/framework-info.schemas.js.map +1 -0
- package/dist/esm/schemas/framework-secrets.schemas.d.ts +22 -0
- package/dist/esm/schemas/framework-secrets.schemas.d.ts.map +1 -0
- package/dist/esm/schemas/framework-secrets.schemas.js +14 -0
- package/dist/esm/schemas/framework-secrets.schemas.js.map +1 -0
- package/dist/esm/schemas/platform-application-config.schemas.d.ts +20 -0
- package/dist/esm/schemas/platform-application-config.schemas.d.ts.map +1 -0
- package/dist/esm/schemas/platform-application-config.schemas.js +19 -0
- package/dist/esm/schemas/platform-application-config.schemas.js.map +1 -0
- package/dist/esm/schemas/platform-application-secrets.schemas.d.ts +54 -0
- package/dist/esm/schemas/platform-application-secrets.schemas.d.ts.map +1 -0
- package/dist/esm/schemas/platform-application-secrets.schemas.js +67 -0
- package/dist/esm/schemas/platform-application-secrets.schemas.js.map +1 -0
- package/dist/esm/schemas/platform-config.schemas.d.ts +66 -0
- package/dist/esm/schemas/platform-config.schemas.d.ts.map +1 -0
- package/dist/esm/schemas/platform-config.schemas.js +28 -0
- package/dist/esm/schemas/platform-config.schemas.js.map +1 -0
- package/dist/esm/workspace-scope/index.d.ts +3 -0
- package/dist/esm/workspace-scope/index.d.ts.map +1 -0
- package/dist/esm/workspace-scope/index.js +3 -0
- package/dist/esm/workspace-scope/index.js.map +1 -0
- package/dist/esm/workspace-scope/workspace-scope-detector.d.ts +15 -0
- package/dist/esm/workspace-scope/workspace-scope-detector.d.ts.map +1 -0
- package/dist/esm/workspace-scope/workspace-scope-detector.js +87 -0
- package/dist/esm/workspace-scope/workspace-scope-detector.js.map +1 -0
- package/dist/esm/workspace-scope/workspace-scope.schemas.d.ts +118 -0
- package/dist/esm/workspace-scope/workspace-scope.schemas.d.ts.map +1 -0
- package/dist/esm/workspace-scope/workspace-scope.schemas.js +157 -0
- package/dist/esm/workspace-scope/workspace-scope.schemas.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +52 -0
- package/src/bootstrap/application-backend-env.contracts.ts +17 -0
- package/src/bootstrap/bootstrap-planner.ts +46 -0
- package/src/bootstrap/bootstrap.contracts.ts +251 -0
- package/src/bootstrap/bootstrap.schemas.ts +164 -0
- package/src/bootstrap/platform-runtime-env.contracts.ts +99 -0
- package/src/bootstrap/runtime-topology.contracts.ts +102 -0
- package/src/credentials/credential-generator.service.ts +39 -0
- package/src/index.ts +16 -0
- package/src/project-config/__tests__/application-modules.utils.test.ts +53 -0
- package/src/project-config/__tests__/define-framework-config.test.ts +43 -0
- package/src/project-config/__tests__/define-saas-config.test.ts +210 -0
- package/src/project-config/__tests__/loader.test.ts +100 -0
- package/src/project-config/define-framework-config.ts +44 -0
- package/src/project-config/define-infra-config.ts +168 -0
- package/src/project-config/define-minion-config.ts +27 -0
- package/src/project-config/define-platform-config.ts +28 -0
- package/src/project-config/define-platform-env-config.ts +59 -0
- package/src/project-config/define-project-config.ts +63 -0
- package/src/project-config/define-saas-config.ts +171 -0
- package/src/project-config/define-sharing-policy.ts +36 -0
- package/src/project-config/define-worker-config.ts +27 -0
- package/src/project-config/index.ts +23 -0
- package/src/project-config/loader.ts +220 -0
- package/src/project-config/shared/application-modules.schemas.ts +12 -0
- package/src/project-config/shared/application-modules.utils.ts +65 -0
- package/src/project-config/shared/backing-services.schemas.ts +59 -0
- package/src/project-config/shared/data-services.schemas.ts +58 -0
- package/src/project-config/shared/env-example-defaults.ts +50 -0
- package/src/project-config/shared/environment.schemas.ts +136 -0
- package/src/project-config/shared/infrastructure-defaults.schemas.ts +47 -0
- package/src/project-config/shared/k8s-utils.ts +56 -0
- package/src/project-config/shared/platform-services.schemas.ts +33 -0
- package/src/project-config/shared/service-definitions.schemas.ts +38 -0
- package/src/project-config/sharing-policy-validation.ts +159 -0
- package/src/release/framework-release.constants.ts +2 -0
- package/src/schemas/__tests__/platform-config.schemas.test.ts +90 -0
- package/src/schemas/framework-info.schemas.ts +13 -0
- package/src/schemas/framework-secrets.schemas.ts +19 -0
- package/src/schemas/platform-application-config.schemas.ts +25 -0
- package/src/schemas/platform-application-secrets.schemas.ts +78 -0
- package/src/schemas/platform-config.schemas.ts +45 -0
- package/src/workspace-scope/index.ts +2 -0
- package/src/workspace-scope/workspace-scope-detector.ts +98 -0
- 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"}
|