@tamyla/clodo-framework 1.0.0

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 (130) hide show
  1. package/CHANGELOG.md +564 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1393 -0
  4. package/bin/README.md +71 -0
  5. package/bin/clodo-service.js +416 -0
  6. package/bin/security/security-cli.js +96 -0
  7. package/bin/service-management/README.md +74 -0
  8. package/bin/service-management/create-service.js +129 -0
  9. package/bin/service-management/init-service.js +102 -0
  10. package/bin/service-management/init-service.js.backup +889 -0
  11. package/bin/shared/config/customer-cli.js +293 -0
  12. package/dist/config/ConfigurationManager.js +159 -0
  13. package/dist/config/CustomerConfigCLI.js +220 -0
  14. package/dist/config/FeatureManager.js +426 -0
  15. package/dist/config/customers.js +441 -0
  16. package/dist/config/domains.js +180 -0
  17. package/dist/config/features.js +225 -0
  18. package/dist/config/index.js +6 -0
  19. package/dist/database/database-orchestrator.js +730 -0
  20. package/dist/database/index.js +4 -0
  21. package/dist/deployment/auditor.js +971 -0
  22. package/dist/deployment/index.js +10 -0
  23. package/dist/deployment/rollback-manager.js +523 -0
  24. package/dist/deployment/testers/api-tester.js +80 -0
  25. package/dist/deployment/testers/auth-tester.js +129 -0
  26. package/dist/deployment/testers/core.js +217 -0
  27. package/dist/deployment/testers/database-tester.js +105 -0
  28. package/dist/deployment/testers/index.js +74 -0
  29. package/dist/deployment/testers/load-tester.js +120 -0
  30. package/dist/deployment/testers/performance-tester.js +105 -0
  31. package/dist/deployment/validator.js +558 -0
  32. package/dist/deployment/wrangler-deployer.js +574 -0
  33. package/dist/handlers/GenericRouteHandler.js +532 -0
  34. package/dist/index.js +39 -0
  35. package/dist/migration/MigrationAdapters.js +562 -0
  36. package/dist/modules/ModuleManager.js +668 -0
  37. package/dist/modules/security.js +98 -0
  38. package/dist/orchestration/cross-domain-coordinator.js +1083 -0
  39. package/dist/orchestration/index.js +5 -0
  40. package/dist/orchestration/modules/DeploymentCoordinator.js +258 -0
  41. package/dist/orchestration/modules/DomainResolver.js +196 -0
  42. package/dist/orchestration/modules/StateManager.js +332 -0
  43. package/dist/orchestration/multi-domain-orchestrator.js +255 -0
  44. package/dist/routing/EnhancedRouter.js +158 -0
  45. package/dist/schema/SchemaManager.js +778 -0
  46. package/dist/security/ConfigurationValidator.js +490 -0
  47. package/dist/security/DeploymentManager.js +208 -0
  48. package/dist/security/SecretGenerator.js +142 -0
  49. package/dist/security/SecurityCLI.js +228 -0
  50. package/dist/security/index.js +51 -0
  51. package/dist/security/patterns/environment-rules.js +66 -0
  52. package/dist/security/patterns/insecure-patterns.js +21 -0
  53. package/dist/service-management/ConfirmationEngine.js +411 -0
  54. package/dist/service-management/ErrorTracker.js +294 -0
  55. package/dist/service-management/GenerationEngine.js +3109 -0
  56. package/dist/service-management/InputCollector.js +237 -0
  57. package/dist/service-management/ServiceCreator.js +229 -0
  58. package/dist/service-management/ServiceInitializer.js +448 -0
  59. package/dist/service-management/ServiceOrchestrator.js +638 -0
  60. package/dist/service-management/handlers/ConfigMutator.js +130 -0
  61. package/dist/service-management/handlers/ConfirmationHandler.js +71 -0
  62. package/dist/service-management/handlers/GenerationHandler.js +80 -0
  63. package/dist/service-management/handlers/InputHandler.js +59 -0
  64. package/dist/service-management/handlers/ValidationHandler.js +203 -0
  65. package/dist/service-management/index.js +7 -0
  66. package/dist/services/GenericDataService.js +488 -0
  67. package/dist/shared/cloudflare/domain-discovery.js +562 -0
  68. package/dist/shared/cloudflare/domain-manager.js +912 -0
  69. package/dist/shared/cloudflare/index.js +8 -0
  70. package/dist/shared/cloudflare/ops.js +387 -0
  71. package/dist/shared/config/cache.js +1167 -0
  72. package/dist/shared/config/command-config-manager.js +174 -0
  73. package/dist/shared/config/customer-cli.js +258 -0
  74. package/dist/shared/config/index.js +9 -0
  75. package/dist/shared/config/manager.js +289 -0
  76. package/dist/shared/database/connection-manager.js +338 -0
  77. package/dist/shared/database/index.js +7 -0
  78. package/dist/shared/database/orchestrator.js +632 -0
  79. package/dist/shared/deployment/auditor.js +971 -0
  80. package/dist/shared/deployment/index.js +10 -0
  81. package/dist/shared/deployment/rollback-manager.js +523 -0
  82. package/dist/shared/deployment/validator.js +558 -0
  83. package/dist/shared/index.js +32 -0
  84. package/dist/shared/monitoring/health-checker.js +250 -0
  85. package/dist/shared/monitoring/index.js +8 -0
  86. package/dist/shared/monitoring/memory-manager.js +382 -0
  87. package/dist/shared/monitoring/production-monitor.js +390 -0
  88. package/dist/shared/production-tester/api-tester.js +80 -0
  89. package/dist/shared/production-tester/auth-tester.js +129 -0
  90. package/dist/shared/production-tester/core.js +217 -0
  91. package/dist/shared/production-tester/database-tester.js +105 -0
  92. package/dist/shared/production-tester/index.js +74 -0
  93. package/dist/shared/production-tester/load-tester.js +120 -0
  94. package/dist/shared/production-tester/performance-tester.js +105 -0
  95. package/dist/shared/security/api-token-manager.js +296 -0
  96. package/dist/shared/security/index.js +8 -0
  97. package/dist/shared/security/secret-generator.js +918 -0
  98. package/dist/shared/security/secure-token-manager.js +379 -0
  99. package/dist/shared/utils/error-recovery.js +240 -0
  100. package/dist/shared/utils/graceful-shutdown-manager.js +380 -0
  101. package/dist/shared/utils/index.js +9 -0
  102. package/dist/shared/utils/interactive-prompts.js +134 -0
  103. package/dist/shared/utils/rate-limiter.js +249 -0
  104. package/dist/utils/ErrorHandler.js +173 -0
  105. package/dist/utils/deployment/config-cache.js +1160 -0
  106. package/dist/utils/deployment/index.js +6 -0
  107. package/dist/utils/deployment/interactive-prompts.js +97 -0
  108. package/dist/utils/deployment/secret-generator.js +896 -0
  109. package/dist/utils/dirname-helper.js +35 -0
  110. package/dist/utils/domain-config.js +159 -0
  111. package/dist/utils/error-recovery.js +240 -0
  112. package/dist/utils/esm-helper.js +52 -0
  113. package/dist/utils/framework-config.js +481 -0
  114. package/dist/utils/graceful-shutdown-manager.js +379 -0
  115. package/dist/utils/health-checker.js +114 -0
  116. package/dist/utils/index.js +36 -0
  117. package/dist/utils/prompt-handler.js +98 -0
  118. package/dist/utils/usage-tracker.js +252 -0
  119. package/dist/utils/validation.js +112 -0
  120. package/dist/version/VersionDetector.js +723 -0
  121. package/dist/worker/index.js +4 -0
  122. package/dist/worker/integration.js +332 -0
  123. package/docs/FRAMEWORK-ARCHITECTURE-OVERVIEW.md +206 -0
  124. package/docs/INTEGRATION_GUIDE.md +2045 -0
  125. package/docs/README.md +82 -0
  126. package/docs/SECURITY.md +242 -0
  127. package/docs/deployment/deployment-guide.md +540 -0
  128. package/docs/overview.md +280 -0
  129. package/package.json +176 -0
  130. package/types/index.d.ts +575 -0
@@ -0,0 +1,225 @@
1
+ import { createLogger } from '../utils/index.js';
2
+ const logger = createLogger('FeatureFlags');
3
+
4
+ /**
5
+ * Feature Flag Manager Class
6
+ * Manages feature flags for domain-specific functionality
7
+ */
8
+ export class FeatureFlagManager {
9
+ constructor() {
10
+ this.currentDomain = null;
11
+ this.globalOverrides = new Map();
12
+ this.listeners = new Set();
13
+ }
14
+
15
+ /**
16
+ * Sets the current domain configuration
17
+ * @param {Object} domainConfig - Domain configuration object
18
+ */
19
+ setDomain(domainConfig) {
20
+ if (!domainConfig) {
21
+ throw new Error('Domain configuration is required');
22
+ }
23
+ this.currentDomain = domainConfig;
24
+ logger.info(`Domain set for feature flags: ${domainConfig.name}`);
25
+
26
+ // Notify listeners of domain change
27
+ this._notifyListeners('domainChanged', {
28
+ domain: domainConfig.name
29
+ });
30
+ }
31
+
32
+ /**
33
+ * Checks if a feature is enabled
34
+ * @param {string} featureName - Name of the feature to check
35
+ * @param {boolean} defaultValue - Default value if feature not configured
36
+ * @returns {boolean} Whether the feature is enabled
37
+ */
38
+ isEnabled(featureName, defaultValue = false) {
39
+ if (!this.currentDomain) {
40
+ logger.warn('No domain set, using default value for feature check');
41
+ return defaultValue;
42
+ }
43
+
44
+ // Check global overrides first
45
+ if (this.globalOverrides.has(featureName)) {
46
+ return this.globalOverrides.get(featureName);
47
+ }
48
+
49
+ // Check domain-specific features
50
+ const features = this.currentDomain.features || {};
51
+ const enabled = features[featureName] ?? defaultValue;
52
+ logger.debug(`Feature ${featureName}: ${enabled ? 'enabled' : 'disabled'}`);
53
+ return enabled;
54
+ }
55
+
56
+ /**
57
+ * Gets all enabled features for current domain
58
+ * @returns {string[]} Array of enabled feature names
59
+ */
60
+ getEnabledFeatures() {
61
+ if (!this.currentDomain?.features) {
62
+ return [];
63
+ }
64
+ return Object.entries(this.currentDomain.features).filter(([, enabled]) => enabled === true).map(([feature]) => feature);
65
+ }
66
+
67
+ /**
68
+ * Gets all disabled features for current domain
69
+ * @returns {string[]} Array of disabled feature names
70
+ */
71
+ getDisabledFeatures() {
72
+ if (!this.currentDomain?.features) {
73
+ return [];
74
+ }
75
+ return Object.entries(this.currentDomain.features).filter(([, enabled]) => enabled === false).map(([feature]) => feature);
76
+ }
77
+
78
+ /**
79
+ * Gets all configured features with their status
80
+ * @returns {Object} Object mapping feature names to enabled status
81
+ */
82
+ getAllFeatures() {
83
+ return this.currentDomain?.features || {};
84
+ }
85
+
86
+ /**
87
+ * Sets a global feature override
88
+ * @param {string} featureName - Name of the feature
89
+ * @param {boolean} enabled - Whether to enable the feature
90
+ */
91
+ setGlobalOverride(featureName, enabled) {
92
+ this.globalOverrides.set(featureName, enabled);
93
+ logger.info(`Global override set: ${featureName} = ${enabled}`);
94
+ this._notifyListeners('overrideChanged', {
95
+ feature: featureName,
96
+ enabled
97
+ });
98
+ }
99
+
100
+ /**
101
+ * Removes a global feature override
102
+ * @param {string} featureName - Name of the feature
103
+ */
104
+ removeGlobalOverride(featureName) {
105
+ const hadOverride = this.globalOverrides.has(featureName);
106
+ this.globalOverrides.delete(featureName);
107
+ if (hadOverride) {
108
+ logger.info(`Global override removed: ${featureName}`);
109
+ this._notifyListeners('overrideChanged', {
110
+ feature: featureName,
111
+ removed: true
112
+ });
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Clears all global overrides
118
+ */
119
+ clearGlobalOverrides() {
120
+ const count = this.globalOverrides.size;
121
+ this.globalOverrides.clear();
122
+ if (count > 0) {
123
+ logger.info(`Cleared ${count} global overrides`);
124
+ this._notifyListeners('overridesCleared', {
125
+ count
126
+ });
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Adds a listener for feature flag changes
132
+ * @param {Function} listener - Callback function
133
+ */
134
+ addListener(listener) {
135
+ this.listeners.add(listener);
136
+ }
137
+
138
+ /**
139
+ * Removes a listener
140
+ * @param {Function} listener - Callback function to remove
141
+ */
142
+ removeListener(listener) {
143
+ this.listeners.delete(listener);
144
+ }
145
+
146
+ /**
147
+ * Gets feature flag status with metadata
148
+ * @param {string} featureName - Name of the feature
149
+ * @returns {Object} Feature status information
150
+ */
151
+ getFeatureInfo(featureName) {
152
+ const domainEnabled = this.currentDomain?.features?.[featureName] ?? null;
153
+ const globalOverride = this.globalOverrides.get(featureName);
154
+ const effectiveEnabled = this.isEnabled(featureName);
155
+ return {
156
+ name: featureName,
157
+ domainEnabled,
158
+ globalOverride,
159
+ effectiveEnabled,
160
+ hasOverride: globalOverride !== undefined,
161
+ domain: this.currentDomain?.name
162
+ };
163
+ }
164
+
165
+ /**
166
+ * Creates a feature toggle function
167
+ * @param {string} featureName - Name of the feature
168
+ * @param {Function} enabledHandler - Function to call when enabled
169
+ * @param {Function} disabledHandler - Function to call when disabled
170
+ * @returns {Function} Toggle function
171
+ */
172
+ createToggle(featureName, enabledHandler, disabledHandler) {
173
+ return (...args) => {
174
+ if (this.isEnabled(featureName)) {
175
+ return enabledHandler?.(...args);
176
+ } else {
177
+ return disabledHandler?.(...args);
178
+ }
179
+ };
180
+ }
181
+
182
+ /**
183
+ * Notifies all listeners of changes
184
+ * @private
185
+ */
186
+ _notifyListeners(event, data) {
187
+ this.listeners.forEach(listener => {
188
+ try {
189
+ listener(event, data);
190
+ } catch (error) {
191
+ logger.error(`Error in feature flag listener: ${error.message}`);
192
+ }
193
+ });
194
+ }
195
+ }
196
+
197
+ // Default singleton instance
198
+ export const featureManager = new FeatureFlagManager();
199
+
200
+ // Convenience functions for common operations
201
+ export const isFeatureEnabled = (featureName, defaultValue = false) => featureManager.isEnabled(featureName, defaultValue);
202
+ export const getEnabledFeatures = () => featureManager.getEnabledFeatures();
203
+ export const setFeatureOverride = (featureName, enabled) => featureManager.setGlobalOverride(featureName, enabled);
204
+
205
+ // Feature flag constants for common features
206
+ export const COMMON_FEATURES = {
207
+ AUTHENTICATION: 'authentication',
208
+ AUTHORIZATION: 'authorization',
209
+ LOGGING: 'logging',
210
+ MONITORING: 'monitoring',
211
+ ANALYTICS: 'analytics',
212
+ CACHING: 'caching',
213
+ RATE_LIMITING: 'rateLimiting',
214
+ FILE_STORAGE: 'fileStorage',
215
+ EMAIL_NOTIFICATIONS: 'emailNotifications',
216
+ PUSH_NOTIFICATIONS: 'pushNotifications',
217
+ SEARCH: 'search',
218
+ FILTERING: 'filtering',
219
+ SORTING: 'sorting',
220
+ PAGINATION: 'pagination',
221
+ EXPORT: 'export',
222
+ IMPORT: 'import',
223
+ BACKUP: 'backup',
224
+ RESTORE: 'restore'
225
+ };
@@ -0,0 +1,6 @@
1
+ // Configuration Framework
2
+ // Domain configuration and feature flag management
3
+
4
+ export * from './domains.js';
5
+ export * from './features.js';
6
+ export * from './customers.js';