@plyaz/core 1.1.1 → 1.2.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 (243) hide show
  1. package/dist/adapters/index.d.ts +16 -0
  2. package/dist/adapters/index.d.ts.map +1 -0
  3. package/dist/adapters/nestjs.d.ts +79 -0
  4. package/dist/adapters/nestjs.d.ts.map +1 -0
  5. package/dist/adapters/nextjs.d.ts +28 -0
  6. package/dist/adapters/nextjs.d.ts.map +1 -0
  7. package/dist/backend/example/example.controller.d.ts +121 -0
  8. package/dist/backend/example/example.controller.d.ts.map +1 -0
  9. package/dist/backend/example/example.module.d.ts +29 -0
  10. package/dist/backend/example/example.module.d.ts.map +1 -0
  11. package/dist/backend/example/index.d.ts +8 -0
  12. package/dist/backend/example/index.d.ts.map +1 -0
  13. package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts +150 -0
  14. package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts.map +1 -0
  15. package/dist/backend/featureFlags/config/feature-flag.config.d.ts +89 -0
  16. package/dist/backend/featureFlags/config/feature-flag.config.d.ts.map +1 -0
  17. package/dist/backend/featureFlags/config/validation.d.ts +181 -0
  18. package/dist/backend/featureFlags/config/validation.d.ts.map +1 -0
  19. package/dist/backend/featureFlags/decorators/feature-disabled.decorator.d.ts +6 -0
  20. package/dist/backend/featureFlags/decorators/feature-disabled.decorator.d.ts.map +1 -0
  21. package/dist/backend/featureFlags/decorators/feature-enabled.decorator.d.ts +8 -0
  22. package/dist/backend/featureFlags/decorators/feature-enabled.decorator.d.ts.map +1 -0
  23. package/dist/backend/featureFlags/decorators/feature-flag.decorator.d.ts +11 -0
  24. package/dist/backend/featureFlags/decorators/feature-flag.decorator.d.ts.map +1 -0
  25. package/dist/backend/featureFlags/feature-flag.controller.d.ts +14 -56
  26. package/dist/backend/featureFlags/feature-flag.controller.d.ts.map +1 -1
  27. package/dist/backend/featureFlags/feature-flag.module.d.ts +36 -44
  28. package/dist/backend/featureFlags/feature-flag.module.d.ts.map +1 -1
  29. package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts +33 -0
  30. package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts.map +1 -0
  31. package/dist/backend/featureFlags/index.d.ts +14 -41
  32. package/dist/backend/featureFlags/index.d.ts.map +1 -1
  33. package/dist/backend/featureFlags/interceptors/error-handling-interceptor.d.ts +16 -0
  34. package/dist/backend/featureFlags/interceptors/error-handling-interceptor.d.ts.map +1 -0
  35. package/dist/backend/featureFlags/interceptors/feature-flag-logging-interceptor.d.ts +18 -0
  36. package/dist/backend/featureFlags/interceptors/feature-flag-logging-interceptor.d.ts.map +1 -0
  37. package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts +162 -0
  38. package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts.map +1 -0
  39. package/dist/backend/index.d.ts +5 -0
  40. package/dist/backend/index.d.ts.map +1 -1
  41. package/dist/base/cache/CacheKeyBuilder.d.ts +115 -0
  42. package/dist/base/cache/CacheKeyBuilder.d.ts.map +1 -0
  43. package/dist/base/cache/feature/caching.d.ts +16 -0
  44. package/dist/base/cache/feature/caching.d.ts.map +1 -0
  45. package/dist/base/cache/index.d.ts +2 -0
  46. package/dist/base/cache/index.d.ts.map +1 -1
  47. package/dist/base/cache/strategies/redis.d.ts.map +1 -1
  48. package/dist/base/observability/BaseAdapter.d.ts +79 -0
  49. package/dist/base/observability/BaseAdapter.d.ts.map +1 -0
  50. package/dist/base/observability/CompositeAdapter.d.ts +72 -0
  51. package/dist/base/observability/CompositeAdapter.d.ts.map +1 -0
  52. package/dist/base/observability/DatadogAdapter.d.ts +117 -0
  53. package/dist/base/observability/DatadogAdapter.d.ts.map +1 -0
  54. package/dist/base/observability/LoggerAdapter.d.ts +54 -0
  55. package/dist/base/observability/LoggerAdapter.d.ts.map +1 -0
  56. package/dist/base/observability/ObservabilityService.d.ts +160 -0
  57. package/dist/base/observability/ObservabilityService.d.ts.map +1 -0
  58. package/dist/base/observability/index.d.ts +17 -0
  59. package/dist/base/observability/index.d.ts.map +1 -0
  60. package/dist/domain/base/BaseBackendDomainService.d.ts +528 -0
  61. package/dist/domain/base/BaseBackendDomainService.d.ts.map +1 -0
  62. package/dist/domain/base/BaseDomainService.d.ts +284 -0
  63. package/dist/domain/base/BaseDomainService.d.ts.map +1 -0
  64. package/dist/domain/base/BaseFrontendDomainService.d.ts +493 -0
  65. package/dist/domain/base/BaseFrontendDomainService.d.ts.map +1 -0
  66. package/dist/domain/base/BaseMapper.d.ts +100 -0
  67. package/dist/domain/base/BaseMapper.d.ts.map +1 -0
  68. package/dist/domain/base/BaseValidator.d.ts +105 -0
  69. package/dist/domain/base/BaseValidator.d.ts.map +1 -0
  70. package/dist/domain/base/index.d.ts +10 -0
  71. package/dist/domain/base/index.d.ts.map +1 -0
  72. package/dist/domain/example/BackendExampleDomainService.d.ts +257 -0
  73. package/dist/domain/example/BackendExampleDomainService.d.ts.map +1 -0
  74. package/dist/domain/example/FrontendExampleDomainService.d.ts +164 -0
  75. package/dist/domain/example/FrontendExampleDomainService.d.ts.map +1 -0
  76. package/dist/domain/example/index.d.ts +10 -0
  77. package/dist/domain/example/index.d.ts.map +1 -0
  78. package/dist/domain/example/mappers/ExampleMapper.d.ts +67 -0
  79. package/dist/domain/example/mappers/ExampleMapper.d.ts.map +1 -0
  80. package/dist/domain/example/validators/ExampleValidator.d.ts +33 -0
  81. package/dist/domain/example/validators/ExampleValidator.d.ts.map +1 -0
  82. package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts +86 -0
  83. package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts.map +1 -0
  84. package/dist/domain/featureFlags/index.d.ts +10 -5
  85. package/dist/domain/featureFlags/index.d.ts.map +1 -1
  86. package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts +72 -0
  87. package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts.map +1 -0
  88. package/dist/domain/featureFlags/mappers/index.d.ts +8 -0
  89. package/dist/domain/featureFlags/mappers/index.d.ts.map +1 -0
  90. package/dist/domain/featureFlags/module.d.ts +20 -0
  91. package/dist/domain/featureFlags/module.d.ts.map +1 -0
  92. package/dist/domain/featureFlags/provider.d.ts +40 -1
  93. package/dist/domain/featureFlags/provider.d.ts.map +1 -1
  94. package/dist/domain/featureFlags/providers/api.d.ts +59 -34
  95. package/dist/domain/featureFlags/providers/api.d.ts.map +1 -1
  96. package/dist/domain/featureFlags/providers/database.d.ts +59 -52
  97. package/dist/domain/featureFlags/providers/database.d.ts.map +1 -1
  98. package/dist/domain/featureFlags/providers/factory.d.ts +50 -33
  99. package/dist/domain/featureFlags/providers/factory.d.ts.map +1 -1
  100. package/dist/domain/featureFlags/providers/file.d.ts +48 -1
  101. package/dist/domain/featureFlags/providers/file.d.ts.map +1 -1
  102. package/dist/domain/featureFlags/providers/memory.d.ts +32 -6
  103. package/dist/domain/featureFlags/providers/memory.d.ts.map +1 -1
  104. package/dist/domain/featureFlags/providers/redis.d.ts +6 -1
  105. package/dist/domain/featureFlags/providers/redis.d.ts.map +1 -1
  106. package/dist/domain/featureFlags/service.d.ts +112 -0
  107. package/dist/domain/featureFlags/service.d.ts.map +1 -0
  108. package/dist/domain/index.d.ts +2 -0
  109. package/dist/domain/index.d.ts.map +1 -1
  110. package/dist/engine/featureFlags/engine.d.ts +8 -0
  111. package/dist/engine/featureFlags/engine.d.ts.map +1 -1
  112. package/dist/entry-backend.d.ts +24 -0
  113. package/dist/entry-backend.d.ts.map +1 -0
  114. package/dist/entry-backend.js +15635 -0
  115. package/dist/entry-backend.js.map +1 -0
  116. package/dist/entry-backend.mjs +15506 -0
  117. package/dist/entry-backend.mjs.map +1 -0
  118. package/dist/entry-frontend.d.ts +23 -0
  119. package/dist/entry-frontend.d.ts.map +1 -0
  120. package/dist/entry-frontend.js +11152 -0
  121. package/dist/entry-frontend.js.map +1 -0
  122. package/dist/entry-frontend.mjs +11089 -0
  123. package/dist/entry-frontend.mjs.map +1 -0
  124. package/dist/events/CoreEventManager.d.ts +116 -0
  125. package/dist/events/CoreEventManager.d.ts.map +1 -0
  126. package/dist/events/index.d.ts +27 -0
  127. package/dist/events/index.d.ts.map +1 -0
  128. package/dist/frontend/base/index.d.ts +8 -0
  129. package/dist/frontend/base/index.d.ts.map +1 -0
  130. package/dist/frontend/components/InitializationError.d.ts +25 -0
  131. package/dist/frontend/components/InitializationError.d.ts.map +1 -0
  132. package/dist/frontend/components/InitializationLoading.d.ts +22 -0
  133. package/dist/frontend/components/InitializationLoading.d.ts.map +1 -0
  134. package/dist/frontend/components/index.d.ts +9 -0
  135. package/dist/frontend/components/index.d.ts.map +1 -0
  136. package/dist/frontend/example/index.d.ts +9 -0
  137. package/dist/frontend/example/index.d.ts.map +1 -0
  138. package/dist/frontend/featureFlags/index.d.ts +28 -7
  139. package/dist/frontend/featureFlags/index.d.ts.map +1 -1
  140. package/dist/frontend/index.d.ts +5 -0
  141. package/dist/frontend/index.d.ts.map +1 -1
  142. package/dist/frontend/providers/ApiProvider.d.ts +41 -0
  143. package/dist/frontend/providers/ApiProvider.d.ts.map +1 -0
  144. package/dist/frontend/providers/PlyazProvider.d.ts +305 -0
  145. package/dist/frontend/providers/PlyazProvider.d.ts.map +1 -0
  146. package/dist/frontend/providers/index.d.ts +8 -0
  147. package/dist/frontend/providers/index.d.ts.map +1 -0
  148. package/dist/frontend/store/feature-flags.d.ts +63 -0
  149. package/dist/frontend/store/feature-flags.d.ts.map +1 -0
  150. package/dist/frontend/store/index.d.ts +14 -0
  151. package/dist/frontend/store/index.d.ts.map +1 -0
  152. package/dist/frontend/store/integrations.d.ts +36 -0
  153. package/dist/frontend/store/integrations.d.ts.map +1 -0
  154. package/dist/frontend/store/service-accessors.d.ts +78 -0
  155. package/dist/frontend/store/service-accessors.d.ts.map +1 -0
  156. package/dist/index.d.ts +6 -2
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +15450 -0
  159. package/dist/index.js.map +1 -0
  160. package/dist/index.mjs +13461 -2440
  161. package/dist/index.mjs.map +1 -1
  162. package/dist/init/CoreInitializer.d.ts +582 -0
  163. package/dist/init/CoreInitializer.d.ts.map +1 -0
  164. package/dist/init/ServiceRegistry.d.ts +256 -0
  165. package/dist/init/ServiceRegistry.d.ts.map +1 -0
  166. package/dist/init/index.d.ts +14 -0
  167. package/dist/init/index.d.ts.map +1 -0
  168. package/dist/init/nestjs/CoreModule.d.ts +63 -0
  169. package/dist/init/nestjs/CoreModule.d.ts.map +1 -0
  170. package/dist/init/nestjs/index.d.ts +5 -0
  171. package/dist/init/nestjs/index.d.ts.map +1 -0
  172. package/dist/init/nestjs/index.js +9059 -0
  173. package/dist/init/nestjs/index.js.map +1 -0
  174. package/dist/init/nestjs/index.mjs +9055 -0
  175. package/dist/init/nestjs/index.mjs.map +1 -0
  176. package/dist/init/react.d.ts +33 -0
  177. package/dist/init/react.d.ts.map +1 -0
  178. package/dist/models/example/ExampleRepository.d.ts +124 -0
  179. package/dist/models/example/ExampleRepository.d.ts.map +1 -0
  180. package/dist/models/example/index.d.ts +7 -0
  181. package/dist/models/example/index.d.ts.map +1 -0
  182. package/dist/models/featureFlags/FeatureFlagRepository.d.ts +560 -0
  183. package/dist/models/featureFlags/FeatureFlagRepository.d.ts.map +1 -0
  184. package/dist/models/featureFlags/index.d.ts +7 -0
  185. package/dist/models/featureFlags/index.d.ts.map +1 -0
  186. package/dist/models/index.d.ts +9 -0
  187. package/dist/models/index.d.ts.map +1 -0
  188. package/dist/services/ApiClientService.d.ts +178 -0
  189. package/dist/services/ApiClientService.d.ts.map +1 -0
  190. package/dist/services/CacheService.d.ts +176 -0
  191. package/dist/services/CacheService.d.ts.map +1 -0
  192. package/dist/services/DbService.d.ts +391 -0
  193. package/dist/services/DbService.d.ts.map +1 -0
  194. package/dist/services/NotificationService.d.ts +151 -0
  195. package/dist/services/NotificationService.d.ts.map +1 -0
  196. package/dist/services/StorageService.d.ts +144 -0
  197. package/dist/services/StorageService.d.ts.map +1 -0
  198. package/dist/services/index.d.ts +12 -0
  199. package/dist/services/index.d.ts.map +1 -0
  200. package/dist/utils/common/id.d.ts +83 -0
  201. package/dist/utils/common/id.d.ts.map +1 -0
  202. package/dist/utils/common/index.d.ts +3 -1
  203. package/dist/utils/common/index.d.ts.map +1 -1
  204. package/dist/utils/common/object.d.ts +70 -0
  205. package/dist/utils/common/object.d.ts.map +1 -0
  206. package/dist/utils/common/validation.d.ts +20 -0
  207. package/dist/utils/common/validation.d.ts.map +1 -0
  208. package/dist/utils/featureFlags/conditions.d.ts.map +1 -1
  209. package/dist/utils/featureFlags/context.d.ts +0 -1
  210. package/dist/utils/featureFlags/context.d.ts.map +1 -1
  211. package/dist/utils/index.d.ts +1 -0
  212. package/dist/utils/index.d.ts.map +1 -1
  213. package/dist/utils/mapperUtils.d.ts +38 -0
  214. package/dist/utils/mapperUtils.d.ts.map +1 -0
  215. package/dist/utils/runtime.d.ts +15 -0
  216. package/dist/utils/runtime.d.ts.map +1 -0
  217. package/dist/version.d.ts +24 -0
  218. package/dist/version.d.ts.map +1 -0
  219. package/dist/web_app/auth/add_user.d.ts +3 -0
  220. package/dist/web_app/auth/add_user.d.ts.map +1 -0
  221. package/dist/web_app/auth/update_user.d.ts +2 -0
  222. package/dist/web_app/auth/update_user.d.ts.map +1 -0
  223. package/package.json +102 -15
  224. package/dist/backend/featureFlags/feature-flag.repository.d.ts +0 -85
  225. package/dist/backend/featureFlags/feature-flag.repository.d.ts.map +0 -1
  226. package/dist/backend/featureFlags/feature-flag.service.d.ts +0 -123
  227. package/dist/backend/featureFlags/feature-flag.service.d.ts.map +0 -1
  228. package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts +0 -103
  229. package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts.map +0 -1
  230. package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts +0 -35
  231. package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts.map +0 -1
  232. package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts +0 -55
  233. package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts.map +0 -1
  234. package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts +0 -57
  235. package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts.map +0 -1
  236. package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts +0 -99
  237. package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts.map +0 -1
  238. package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts +0 -31
  239. package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts.map +0 -1
  240. package/dist/frontend/featureFlags/providers/types.d.ts +0 -21
  241. package/dist/frontend/featureFlags/providers/types.d.ts.map +0 -1
  242. package/dist/index.cjs +0 -4383
  243. package/dist/index.cjs.map +0 -1
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Configuration Validation Utilities
3
+ *
4
+ * Validation utilities for feature flag configuration in NestJS applications.
5
+ * Provides error reporting and environment-specific validation.
6
+ *
7
+ */
8
+ import { type CoreFeatureFlagEnvironmentConfig, type CoreFeatureFlagValidationResult } from '@plyaz/types/core';
9
+ /**
10
+ * FeatureFlagConfigValidator - Comprehensive configuration validation for feature flags
11
+ *
12
+ * @description Validates feature flag configuration objects to ensure they meet system requirements
13
+ * and best practices. Provides detailed error reporting and warnings for potential issues.
14
+ *
15
+ * **Validation Categories:**
16
+ * - Provider validation (memory, file, redis, api, database)
17
+ * - Cache configuration validation
18
+ * - Database connection validation
19
+ * - Environment-specific settings validation
20
+ *
21
+ * **Usage Flow:**
22
+ * 1. Configuration is loaded from environment variables
23
+ * 2. Validator checks all settings for correctness
24
+ * 3. Errors prevent system startup
25
+ * 4. Warnings are logged but don't block startup
26
+ *
27
+ * @example Basic Validation
28
+ * ```typescript
29
+ * const config = {
30
+ * provider: 'database',
31
+ * isCacheEnabled: true,
32
+ * cacheTtl: 300,
33
+ * databaseConfig: {
34
+ * connectionString: 'https://project.supabase.co',
35
+ * tableName: 'feature_flags'
36
+ * }
37
+ * };
38
+ *
39
+ * const result = FeatureFlagConfigValidator.validate(config);
40
+ *
41
+ * if (result.isValid) {
42
+ * console.log('Configuration is valid!');
43
+ * } else {
44
+ * console.error('Configuration errors:', result.errors);
45
+ * }
46
+ * ```
47
+ *
48
+ * @example Error Handling
49
+ * ```typescript
50
+ * try {
51
+ * FeatureFlagConfigValidator.validateOrThrow(config);
52
+ * // Configuration is valid, proceed with initialization
53
+ * } catch (error) {
54
+ * console.error('Invalid configuration:', error.message);
55
+ * process.exit(1);
56
+ * }
57
+ * ```
58
+ */
59
+ export declare class FeatureFlagConfigValidator {
60
+ /**
61
+ * Validates feature flag configuration and returns detailed results
62
+ *
63
+ * @description Performs comprehensive validation of feature flag configuration,
64
+ * checking all aspects including provider settings, cache configuration,
65
+ * database connections, and environment-specific settings.
66
+ *
67
+ * @param {FeatureFlagEnvironmentConfig} config - Configuration object to validate
68
+ * @returns {ValidationResult} Validation result with errors and warnings
69
+ *
70
+ * @example Successful Validation
71
+ * ```typescript
72
+ * const validConfig = {
73
+ * provider: 'memory',
74
+ * isCacheEnabled: true,
75
+ * cacheTtl: 300,
76
+ * refreshInterval: 60
77
+ * };
78
+ *
79
+ * const result = FeatureFlagConfigValidator.validate(validConfig);
80
+ * // result.isValid = true
81
+ * // result.errors = []
82
+ * // result.warnings = []
83
+ * ```
84
+ *
85
+ * @example Validation with Errors
86
+ * ```typescript
87
+ * const invalidConfig = {
88
+ * provider: 'invalid_provider', // Error: invalid provider
89
+ * cacheTtl: -100, // Error: negative TTL
90
+ * databaseConfig: { // Error: missing connection string
91
+ * tableName: 'flags'
92
+ * }
93
+ * };
94
+ *
95
+ * const result = FeatureFlagConfigValidator.validate(invalidConfig);
96
+ * // result.isValid = false
97
+ * // result.errors = [
98
+ * // { field: 'provider', message: 'Invalid provider...', code: 'INVALID_PROVIDER' },
99
+ * // { field: 'cacheTtl', message: 'Cache TTL must be non-negative', code: 'INVALID_CACHE_TTL' }
100
+ * // ]
101
+ * ```
102
+ *
103
+ * @example Validation with Warnings
104
+ * ```typescript
105
+ * const configWithWarnings = {
106
+ * provider: 'database',
107
+ * cacheTtl: 7200, // Warning: very high TTL
108
+ * isLoggingEnabled: true, // Warning: logging in production
109
+ * databaseConfig: {
110
+ * connectionString: 'https://project.supabase.co',
111
+ * tableName: 'feature_flags'
112
+ * }
113
+ * };
114
+ *
115
+ * process.env.NODE_ENV = 'production';
116
+ * const result = FeatureFlagConfigValidator.validate(configWithWarnings);
117
+ * // result.isValid = true (warnings don't fail validation)
118
+ * // result.warnings = [
119
+ * // { field: 'cacheTtl', message: 'Cache TTL is very high...', code: 'HIGH_CACHE_TTL' },
120
+ * // { field: 'isLoggingEnabled', message: 'Logging is enabled in production...', code: 'PRODUCTION_LOGGING_ENABLED' }
121
+ * // ]
122
+ * ```
123
+ */
124
+ static validate(config: CoreFeatureFlagEnvironmentConfig): CoreFeatureFlagValidationResult;
125
+ private static validateProvider;
126
+ private static validateCacheSettings;
127
+ private static validateDatabaseConfig;
128
+ private static validateConnectionString;
129
+ private static validateTableName;
130
+ private static validatePoolSize;
131
+ private static validateTimeout;
132
+ private static getWarnings;
133
+ /**
134
+ * Validates configuration and throws error if validation fails
135
+ *
136
+ * @description Convenience method that validates configuration and throws a detailed
137
+ * error if validation fails. This is typically used during application startup
138
+ * to ensure the system doesn't start with invalid configuration.
139
+ *
140
+ * @param {FeatureFlagEnvironmentConfig} config - Configuration to validate
141
+ * @throws {DatabasePackageError} When validation fails with detailed error messages
142
+ *
143
+ * @example Startup Validation
144
+ * ```typescript
145
+ * // In FeatureFlagService.onModuleInit()
146
+ * try {
147
+ * const config = FeatureFlagConfigFactory.fromOptions();
148
+ * FeatureFlagConfigValidator.validateOrThrow(config);
149
+ *
150
+ * // Configuration is valid, proceed with initialization
151
+ * this.provider = FeatureFlagProviderFactory.create(config, FEATURES);
152
+ * await this.provider.initialize();
153
+ * } catch (error) {
154
+ * this.logger.error('Configuration validation failed:', error.message);
155
+ * throw error; // Prevent service from starting
156
+ * }
157
+ * ```
158
+ *
159
+ * @example Error Output
160
+ * ```typescript
161
+ * // When validation fails, throws DatabasePackageError with message:
162
+ * // "Configuration validation failed:
163
+ * // provider: Invalid provider: invalid_type. Must be one of: memory, file, redis, api, database
164
+ * // cacheTtl: Cache TTL must be non-negative
165
+ * // databaseConfig.connectionString: Database connection string is required"
166
+ * ```
167
+ *
168
+ * @example Environment Variable Validation
169
+ * ```bash
170
+ * # Missing required environment variables:
171
+ * # SUPABASE_URL= # Empty/missing
172
+ * # FEATURE_FLAG_PROVIDER=database
173
+ *
174
+ * # Results in error:
175
+ * # "Configuration validation failed:
176
+ * # databaseConfig.connectionString: Database connection string is required"
177
+ * ```
178
+ */
179
+ static validateOrThrow(config: CoreFeatureFlagEnvironmentConfig): void;
180
+ }
181
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/config/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACrC,MAAM,mBAAmB,CAAC;AAY3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,qBAAa,0BAA0B;IACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+DG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,GAAG,+BAA+B;IAiC1F,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAkBpC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiBrC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAoBvC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAa/B,OAAO,CAAC,MAAM,CAAC,eAAe;IAU9B,OAAO,CAAC,MAAM,CAAC,WAAW;IAqC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6CG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,gCAAgC,GAAG,IAAI;CAYvE"}
@@ -0,0 +1,6 @@
1
+ import type { FeatureFlagKey } from '@domain/types';
2
+ /**
3
+ * Shortcut decorator to require a feature flag to be disabled (false).
4
+ */
5
+ export declare function FeatureDisabled(key: FeatureFlagKey): MethodDecorator;
6
+ //# sourceMappingURL=feature-disabled.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-disabled.decorator.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/decorators/feature-disabled.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe,CAEpE"}
@@ -0,0 +1,8 @@
1
+ import type { FeatureFlagKey } from '@domain/types';
2
+ /**
3
+ * FeatureEnabled decorator
4
+ * Shorthand for enabling a feature flag with `true`
5
+ */
6
+ export declare function FeatureEnabled(key: FeatureFlagKey): MethodDecorator;
7
+ export {};
8
+ //# sourceMappingURL=feature-enabled.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-enabled.decorator.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/decorators/feature-enabled.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe,CAEnE;AAGD,OAAO,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { FeatureFlagValue } from '@plyaz/types';
2
+ import type { FeatureFlagKey } from '@domain/types';
3
+ /**
4
+ * Decorator to require a feature flag to be in a specific state
5
+ * before allowing access to the route handler.
6
+ *
7
+ * @param key - The feature flag key
8
+ * @param expected - Expected flag value (default: true)
9
+ */
10
+ export declare function FeatureFlag(key: FeatureFlagKey, expected?: FeatureFlagValue): MethodDecorator;
11
+ //# sourceMappingURL=feature-flag.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flag.decorator.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/decorators/feature-flag.decorator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,cAAc,EACnB,QAAQ,GAAE,gBAAuB,GAChC,eAAe,CAEjB"}
@@ -2,13 +2,12 @@
2
2
  * Feature Flag Controller
3
3
  *
4
4
  * NestJS controller for feature flag management.
5
- * Provides REST API endpoints for feature flag operations.
5
+ * Uses the domain FeatureFlagService directly.
6
6
  *
7
7
  * @fileoverview NestJS controller for feature flags
8
- * @version 1.0.0
9
8
  */
10
- import type { FeatureFlagValue, FeatureFlagContext, FeatureFlagEvaluation, FeatureFlag, FeatureFlagRule } from '@plyaz/types';
11
- import type { FeatureFlagService } from './feature-flag.service';
9
+ import type { FeatureFlagValue, FeatureFlagContext, FeatureFlagEvaluation, FeatureFlag, FeatureFlagRule, CreateFlagRequest } from '@plyaz/types';
10
+ import { FeatureFlagService } from '@domain/featureFlags';
12
11
  import type { FeatureFlagKey } from '@domain/types';
13
12
  /**
14
13
  * Request DTO for flag evaluation.
@@ -16,21 +15,11 @@ import type { FeatureFlagKey } from '@domain/types';
16
15
  interface EvaluateFlagRequest {
17
16
  context?: FeatureFlagContext;
18
17
  }
19
- /**
20
- * Request DTO for creating/updating flags.
21
- */
22
- interface CreateFlagRequest {
23
- name: string;
24
- description?: string;
25
- value: FeatureFlagValue;
26
- isEnabled?: boolean;
27
- environment?: 'all' | 'development' | 'staging' | 'production';
28
- rolloutPercentage?: number;
29
- }
30
18
  /**
31
19
  * Feature Flag Controller
32
20
  *
33
21
  * Provides REST endpoints for feature flag management and evaluation.
22
+ * Uses the domain FeatureFlagService directly.
34
23
  *
35
24
  * @example
36
25
  * ```typescript
@@ -41,87 +30,49 @@ interface CreateFlagRequest {
41
30
  */
42
31
  export declare class FeatureFlagController {
43
32
  private readonly featureFlagService;
44
- constructor(featureFlagService: FeatureFlagService);
33
+ constructor(featureFlagService: FeatureFlagService<FeatureFlagKey>);
45
34
  /**
46
35
  * Evaluates a feature flag for the given context.
47
- *
48
- * @param key - Feature flag key
49
- * @param body - Evaluation context
50
- * @returns Feature flag evaluation result
51
36
  */
52
37
  evaluateFlag(key: FeatureFlagKey, body?: EvaluateFlagRequest): Promise<FeatureFlagEvaluation<FeatureFlagKey>>;
53
38
  /**
54
39
  * Checks if a feature flag is enabled.
55
- *
56
- * @param key - Feature flag key
57
- * @param body - Evaluation context
58
- * @returns Boolean indicating if flag is enabled
59
40
  */
60
41
  isEnabled(key: FeatureFlagKey, body?: EvaluateFlagRequest): Promise<{
61
42
  isEnabled: boolean;
62
43
  }>;
63
44
  /**
64
45
  * Gets all feature flags with their evaluations.
65
- *
66
- * @param body - Evaluation context
67
- * @returns All feature flag evaluations
68
46
  */
69
47
  evaluateAllFlags(body?: EvaluateFlagRequest): Promise<Record<string, FeatureFlagEvaluation<FeatureFlagKey>>>;
70
48
  /**
71
49
  * Creates a new feature flag.
72
- *
73
- * @param key - Feature flag key
74
- * @param createData - Flag creation data
75
- * @returns Created feature flag
76
50
  */
77
- createFlag(createData: CreateFlagRequest & {
78
- key: FeatureFlagKey;
79
- }): Promise<FeatureFlag<FeatureFlagKey>>;
51
+ createFlag(createData: CreateFlagRequest<FeatureFlagKey>): Promise<FeatureFlag<FeatureFlagKey>>;
80
52
  /**
81
53
  * Updates an existing feature flag.
82
- *
83
- * @param key - Feature flag key
84
- * @param updateData - Flag update data
85
- * @returns Updated feature flag
86
54
  */
87
- updateFlag(key: FeatureFlagKey, updateData: Partial<CreateFlagRequest>): Promise<FeatureFlag<FeatureFlagKey>>;
55
+ updateFlag(key: FeatureFlagKey, updateData: Partial<CreateFlagRequest<FeatureFlagKey>>): Promise<FeatureFlag<FeatureFlagKey>>;
88
56
  /**
89
57
  * Deletes a feature flag.
90
- *
91
- * @param key - Feature flag key
92
58
  */
93
59
  deleteFlag(key: FeatureFlagKey): Promise<{
94
60
  isSuccessful: boolean;
95
61
  }>;
96
62
  /**
97
63
  * Sets a manual override for a flag.
98
- *
99
- * @param key - Feature flag key
100
- * @param value - Override value
101
64
  */
102
65
  setOverride(key: FeatureFlagKey, value: FeatureFlagValue): Promise<{
103
66
  isSuccessful: boolean;
104
67
  }>;
105
68
  /**
106
69
  * Removes a manual override for a flag.
107
- *
108
- * @param key - Feature flag key
109
70
  */
110
71
  removeOverride(key: FeatureFlagKey): Promise<{
111
72
  isSuccessful: boolean;
112
73
  }>;
113
- /**
114
- * Gets all available feature flags.
115
- *
116
- * @param environment - Filter by environment
117
- * @returns List of feature flags
118
- */
119
- getAllFeatureFlags(environment?: string): Promise<FeatureFlag<FeatureFlagKey>[]>;
120
74
  /**
121
75
  * Gets all rules for a specific flag.
122
- *
123
- * @param key - Feature flag key
124
- * @returns List of rules for the flag
125
76
  */
126
77
  getFlagRules(key: FeatureFlagKey): Promise<FeatureFlagRule<FeatureFlagKey>[]>;
127
78
  /**
@@ -130,6 +81,13 @@ export declare class FeatureFlagController {
130
81
  refreshCache(): Promise<{
131
82
  isSuccessful: boolean;
132
83
  }>;
84
+ /**
85
+ * Gets service health status.
86
+ */
87
+ getHealth(): Promise<{
88
+ isInitialized: boolean;
89
+ provider: string;
90
+ }>;
133
91
  }
134
92
  export {};
135
93
  //# sourceMappingURL=feature-flag.controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flag.controller.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/feature-flag.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;GAEG;AACH,UAAU,mBAAmB;IAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,KAAK,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,qBACa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,kBAAkB;IAEnE;;;;;;OAMG;IAEG,YAAY,CACF,GAAG,EAAE,cAAc,EACzB,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAWjD;;;;;;OAMG;IAEG,SAAS,CACC,GAAG,EAAE,cAAc,EACzB,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAYlC;;;;;OAKG;IAEG,gBAAgB,CACZ,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC;IAWjE;;;;;;OAMG;IAEG,UAAU,CACN,UAAU,EAAE,iBAAiB,GAAG;QAAE,GAAG,EAAE,cAAc,CAAA;KAAE,GAC9D,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAWvC;;;;;;OAMG;IAEG,UAAU,CACA,GAAG,EAAE,cAAc,EACzB,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC7C,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAWvC;;;;OAIG;IAEG,UAAU,CAAe,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAYvF;;;;;OAKG;IAEG,WAAW,CACD,GAAG,EAAE,cAAc,EAClB,KAAK,EAAE,gBAAgB,GACrC,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAYrC;;;;OAIG;IAEG,cAAc,CAAe,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAY3F;;;;;OAKG;IAEG,kBAAkB,CACA,WAAW,CAAC,EAAE,MAAM,GACzC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;IAWzC;;;;;OAKG;IAEG,YAAY,CACF,GAAG,EAAE,cAAc,GAChC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;IAW7C;;OAEG;IAEG,YAAY,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;CAWzD"}
1
+ {"version":3,"file":"feature-flag.controller.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/feature-flag.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAwB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;GAEG;AACH,UAAU,mBAAmB;IAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,qBACa,qBAAqB;IAG9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,kBAAkB,CAAC,cAAc,CAAC;IAGzE;;OAEG;IAEG,YAAY,CACF,GAAG,EAAE,cAAc,EACzB,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAYjD;;OAEG;IAEG,SAAS,CACC,GAAG,EAAE,cAAc,EACzB,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAalC;;OAEG;IAEG,gBAAgB,CACZ,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC;IAYjE;;OAEG;IAEG,UAAU,CACN,UAAU,EAAE,iBAAiB,CAAC,cAAc,CAAC,GACpD,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAYvC;;OAEG;IAEG,UAAU,CACA,GAAG,EAAE,cAAc,EACzB,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,GAC7D,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAYvC;;OAEG;IAEG,UAAU,CAAe,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAavF;;OAEG;IAEG,WAAW,CACD,GAAG,EAAE,cAAc,EAClB,KAAK,EAAE,gBAAgB,GACrC,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAarC;;OAEG;IAEG,cAAc,CAAe,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAa3F;;OAEG;IAEG,YAAY,CACF,GAAG,EAAE,cAAc,GAChC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;IAY7C;;OAEG;IAEG,YAAY,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAaxD;;OAEG;IAEG,SAAS,IAAI,OAAO,CAAC;QACzB,aAAa,EAAE,OAAO,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CAMH"}
@@ -1,62 +1,69 @@
1
1
  /**
2
- * Feature Flag Module
2
+ * Feature Flag NestJS Module
3
3
  *
4
- * NestJS module for feature flag functionality.
5
- * Configures providers, controllers, and dependencies.
4
+ * NestJS wrapper around the unified FeatureFlagModule.
5
+ * Adds the controller for REST API endpoints.
6
6
  *
7
- * @fileoverview NestJS module for feature flags
8
- * @version 1.0.0
7
+ * @example
8
+ * ```typescript
9
+ * import { FeatureFlagModule } from '@plyaz/core/backend/featureFlags';
10
+ *
11
+ * @Module({
12
+ * imports: [FeatureFlagModule.forRoot({ provider: 'database' })],
13
+ * })
14
+ * export class AppModule {}
15
+ * ```
9
16
  */
17
+ import { type DynamicModule, type OnModuleDestroy, type Type, type ForwardReference, type InjectionToken } from '@nestjs/common';
18
+ import { CoreFeatureFlagModuleConfig } from '@plyaz/types/core';
10
19
  /**
11
20
  * Feature Flag Module
12
21
  *
13
22
  * Provides feature flag functionality as a NestJS module.
14
- * Can be imported by other modules to access feature flag services.
23
+ * Uses the domain FeatureFlagService directly - no NestJS wrapper needed.
15
24
  *
16
25
  * @example
17
26
  * ```typescript
18
27
  * // In your app.module.ts
19
- * import { FeatureFlagModule } from '@plyaz/config/backend/featureFlags';
20
- *
21
28
  * @Module({
22
- * imports: [FeatureFlagModule],
23
- * // ... other module configuration
29
+ * imports: [
30
+ * FeatureFlagModule.forRoot({ provider: 'database' })
31
+ * ],
24
32
  * })
25
33
  * export class AppModule {}
26
34
  * ```
27
35
  *
28
36
  * @example
29
37
  * ```typescript
30
- * // In your service
31
- * import { FeatureFlagService } from '@plyaz/config/backend/featureFlags';
32
- *
38
+ * // In your service - inject the domain service
33
39
  * @Injectable()
34
40
  * export class MyService {
35
- * constructor(private readonly featureFlagService: FeatureFlagService) {}
41
+ * constructor(
42
+ * @Inject(FEATURE_FLAG_SERVICE)
43
+ * private readonly featureFlagService: FeatureFlagService<FeatureFlagKey>
44
+ * ) {}
36
45
  *
37
46
  * async doSomething() {
38
47
  * const isEnabled = await this.featureFlagService.isEnabled('MY_FEATURE');
39
- * if (isEnabled) {
40
- * // Execute new feature logic
41
- * }
42
48
  * }
43
49
  * }
44
50
  * ```
45
51
  */
46
- export declare class FeatureFlagModule {
52
+ export declare class FeatureFlagModule implements OnModuleDestroy {
53
+ private static serviceInstance;
54
+ onModuleDestroy(): void;
47
55
  /**
48
- * Static method for importing the module with configuration.
49
- * This allows customization of the feature flag system.
56
+ * Creates the module with configuration.
50
57
  *
51
58
  * @param options - Module configuration options
52
- * @returns Configured module
59
+ * @returns Configured dynamic module
53
60
  *
54
61
  * @example
55
62
  * ```typescript
56
63
  * @Module({
57
64
  * imports: [
58
65
  * FeatureFlagModule.forRoot({
59
- * provider: 'redis',
66
+ * provider: 'database',
60
67
  * cacheEnabled: true,
61
68
  * cacheTtl: 600,
62
69
  * })
@@ -65,23 +72,13 @@ export declare class FeatureFlagModule {
65
72
  * export class AppModule {}
66
73
  * ```
67
74
  */
68
- static forRoot(options?: {
69
- provider?: 'memory' | 'database' | 'redis' | 'api' | 'file';
70
- isCacheEnabled?: boolean;
71
- cacheTtl?: number;
72
- refreshInterval?: number;
73
- isLoggingEnabled?: boolean;
74
- }): {
75
- module: typeof FeatureFlagModule;
76
- providers: unknown[];
77
- exports: unknown[];
78
- };
75
+ static forRoot(options?: CoreFeatureFlagModuleConfig): DynamicModule;
79
76
  /**
80
- * Static method for importing the module asynchronously.
77
+ * Creates the module with async configuration.
81
78
  * Useful when configuration depends on other services.
82
79
  *
83
80
  * @param options - Async module configuration options
84
- * @returns Configured async module
81
+ * @returns Configured async dynamic module
85
82
  *
86
83
  * @example
87
84
  * ```typescript
@@ -101,14 +98,9 @@ export declare class FeatureFlagModule {
101
98
  * ```
102
99
  */
103
100
  static forRootAsync(options: {
104
- imports?: unknown[];
105
- inject?: unknown[];
106
- useFactory?: (...args: unknown[]) => unknown;
107
- }): {
108
- module: typeof FeatureFlagModule;
109
- imports: unknown[];
110
- providers: unknown[];
111
- exports: unknown[];
112
- };
101
+ imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
102
+ inject?: InjectionToken[];
103
+ useFactory: (...args: unknown[]) => CoreFeatureFlagModuleConfig | Promise<CoreFeatureFlagModuleConfig>;
104
+ }): DynamicModule;
113
105
  }
114
106
  //# sourceMappingURL=feature-flag.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flag.module.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/feature-flag.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAMa,iBAAiB;IAC5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACvB,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;QAC5D,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GAAG;QACF,MAAM,EAAE,OAAO,iBAAiB,CAAC;QACjC,SAAS,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,CAAC;KACpB;IAiBD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;QAC3B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;QACnB,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;KAC9C,GAAG;QACF,MAAM,EAAE,OAAO,iBAAiB,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,CAAC;QACnB,SAAS,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,CAAC;KACpB;CAgBF"}
1
+ {"version":3,"file":"feature-flag.module.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/feature-flag.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAIa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAmD;IAEjF,eAAe,IAAI,IAAI;IAOvB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,2BAAgC,GAAG,aAAa;IAgBxE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;QAC3B,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAC3F,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;QAC1B,UAAU,EAAE,CACV,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;KACzE,GAAG,aAAa;CAkBlB"}
@@ -0,0 +1,33 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import type { FeatureFlagKey } from '@domain/types';
4
+ import { FeatureFlagService } from '@domain/featureFlags';
5
+ /**
6
+ * Guard that ensures a feature flag is in the expected state
7
+ * before allowing access to a route handler.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * @Controller('premium')
12
+ * @UseGuards(FeatureFlagGuard)
13
+ * export class PremiumController {
14
+ * @Get()
15
+ * @FeatureEnabled('PREMIUM_FEATURE')
16
+ * getPremiumData() {
17
+ * // Only accessible if PREMIUM_FEATURE is enabled
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ export declare class FeatureFlagGuard implements CanActivate {
23
+ private readonly reflector;
24
+ private readonly featureFlagService;
25
+ private readonly logger;
26
+ constructor(reflector: Reflector, featureFlagService: FeatureFlagService<FeatureFlagKey>);
27
+ canActivate(context: ExecutionContext): Promise<boolean>;
28
+ /**
29
+ * Compare expected vs actual values.
30
+ */
31
+ private matches;
32
+ }
33
+ //# sourceMappingURL=feature-flag.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flag.guard.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/guards/feature-flag.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,gBAAgB,EAAU,MAAM,gBAAgB,CAAC;AAEnF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAwB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGhF;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,gBAAiB,YAAW,WAAW;IAOhD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IARrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAGpB;gBAGgB,SAAS,EAAE,SAAS,EAEpB,kBAAkB,EAAE,kBAAkB,CAAC,cAAc,CAAC;IAGnE,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B9D;;OAEG;IACH,OAAO,CAAC,OAAO;CAUhB"}
@@ -1,49 +1,22 @@
1
1
  /**
2
- * Feature Flag Backend - Main Exports
2
+ * Feature Flag Backend - NestJS Exports
3
3
  *
4
- * NestJS backend exports for feature flag functionality.
5
- * Provides controllers, services, repositories, and module for easy integration.
4
+ * NestJS module with controller, guards, decorators, and interceptors.
5
+ * Uses shared service factory from domain.
6
6
  *
7
7
  * @fileoverview Backend feature flags exports
8
- * @version 1.0.0
9
8
  */
9
+ export { FeatureFlagDomainService } from './FeatureFlagDomainService';
10
10
  export { FeatureFlagModule } from './feature-flag.module';
11
- export { FeatureFlagService } from './feature-flag.service';
12
- export { FeatureFlagRepository } from './feature-flag.repository';
13
11
  export { FeatureFlagController } from './feature-flag.controller';
14
- /**
15
- * NestJS Guard for feature flag protection.
16
- * Use this to protect routes based on feature flag status.
17
- *
18
- * @example
19
- * ```typescript
20
- * import { UseGuards } from '@nestjs/common';
21
- * import { FeatureFlagGuard } from '@plyaz/config/backend/featureFlags';
22
- *
23
- * @UseGuards(FeatureFlagGuard('BETA_API'))
24
- * @Get('beta-endpoint')
25
- * async betaEndpoint() {
26
- * // This endpoint is only accessible when BETA_API flag is enabled
27
- * }
28
- * ```
29
- */
30
- export declare function FeatureFlagGuard(): (_target: object, _propertyName: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
31
- /**
32
- * NestJS Decorator for feature flag checking.
33
- * Use this to check feature flags within methods.
34
- *
35
- * @example
36
- * ```typescript
37
- * import { FeatureFlag } from '@plyaz/config/backend/featureFlags';
38
- *
39
- * @Injectable()
40
- * export class MyService {
41
- * @FeatureFlag('NEW_ALGORITHM')
42
- * async processData(data: any) {
43
- * // This method behavior can be controlled by the NEW_ALGORITHM flag
44
- * }
45
- * }
46
- * ```
47
- */
48
- export declare function FeatureFlag(): (_target: object, _propertyName: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
12
+ export { FeatureFlagService, FeatureFlagServiceFactory } from '@domain/featureFlags';
13
+ export { FeatureDisabled } from './decorators/feature-disabled.decorator';
14
+ export { FeatureEnabled } from './decorators/feature-enabled.decorator';
15
+ export { FeatureFlagGuard } from './guards/feature-flag.guard';
16
+ export { FeatureFlagMiddleware } from './middleware/feature-flag-middleware';
17
+ export { FeatureFlagLoggingInterceptor } from './interceptors/feature-flag-logging-interceptor';
18
+ export { ErrorHandlingInterceptor } from './interceptors/error-handling-interceptor';
19
+ export { FeatureFlagConfigFactory } from './config/feature-flag.config';
20
+ export { FeatureFlagConfigValidator } from './config/validation';
21
+ export { FeatureFlagDatabaseRepository } from '@models/featureFlags';
49
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,KAI5B,SAAS,MAAM,EACf,eAAe,MAAM,EACrB,YAAY,kBAAkB,KAC7B,kBAAkB,CAKtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,KAIvB,SAAS,MAAM,EACf,eAAe,MAAM,EACrB,YAAY,kBAAkB,KAC7B,kBAAkB,CAKtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAGrF,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAGxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAGrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ /**
4
+ * Interceptor to enforce feature flag rules in real-time.
5
+ *
6
+ * FLOW:
7
+ * 1. Runs AFTER middleware has attached feature flags to the request.
8
+ * 2. Checks if the requested feature is enabled.
9
+ * 3. If disabled, blocks the request with an HTTP 403.
10
+ * 4. If enabled, passes the request to the controller/service.
11
+ */
12
+ export declare class ErrorHandlingInterceptor implements NestInterceptor {
13
+ private readonly logger;
14
+ intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
15
+ }
16
+ //# sourceMappingURL=error-handling-interceptor.d.ts.map