@plyaz/core 1.2.0 → 1.3.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 (240) hide show
  1. package/README.md +248 -183
  2. package/dist/adapters/index.d.ts +16 -0
  3. package/dist/adapters/index.d.ts.map +1 -0
  4. package/dist/adapters/nestjs.d.ts +79 -0
  5. package/dist/adapters/nestjs.d.ts.map +1 -0
  6. package/dist/adapters/nextjs.d.ts +28 -0
  7. package/dist/adapters/nextjs.d.ts.map +1 -0
  8. package/dist/backend/example/example.controller.d.ts +121 -0
  9. package/dist/backend/example/example.controller.d.ts.map +1 -0
  10. package/dist/backend/example/example.module.d.ts +29 -0
  11. package/dist/backend/example/example.module.d.ts.map +1 -0
  12. package/dist/backend/example/index.d.ts +8 -0
  13. package/dist/backend/example/index.d.ts.map +1 -0
  14. package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts +150 -0
  15. package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts.map +1 -0
  16. package/dist/backend/featureFlags/config/feature-flag.config.d.ts +28 -50
  17. package/dist/backend/featureFlags/config/feature-flag.config.d.ts.map +1 -1
  18. package/dist/backend/featureFlags/config/validation.d.ts +6 -6
  19. package/dist/backend/featureFlags/config/validation.d.ts.map +1 -1
  20. package/dist/backend/featureFlags/feature-flag.controller.d.ts +14 -55
  21. package/dist/backend/featureFlags/feature-flag.controller.d.ts.map +1 -1
  22. package/dist/backend/featureFlags/feature-flag.module.d.ts +36 -43
  23. package/dist/backend/featureFlags/feature-flag.module.d.ts.map +1 -1
  24. package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts +16 -2
  25. package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts.map +1 -1
  26. package/dist/backend/featureFlags/index.d.ts +6 -7
  27. package/dist/backend/featureFlags/index.d.ts.map +1 -1
  28. package/dist/backend/featureFlags/interceptors/error-handling-interceptor.d.ts.map +1 -1
  29. package/dist/backend/featureFlags/interceptors/feature-flag-logging-interceptor.d.ts.map +1 -1
  30. package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts +6 -11
  31. package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts.map +1 -1
  32. package/dist/backend/index.d.ts +5 -0
  33. package/dist/backend/index.d.ts.map +1 -1
  34. package/dist/base/cache/CacheKeyBuilder.d.ts +115 -0
  35. package/dist/base/cache/CacheKeyBuilder.d.ts.map +1 -0
  36. package/dist/base/cache/index.d.ts +1 -0
  37. package/dist/base/cache/index.d.ts.map +1 -1
  38. package/dist/base/cache/strategies/redis.d.ts.map +1 -1
  39. package/dist/base/observability/BaseAdapter.d.ts +79 -0
  40. package/dist/base/observability/BaseAdapter.d.ts.map +1 -0
  41. package/dist/base/observability/CompositeAdapter.d.ts +72 -0
  42. package/dist/base/observability/CompositeAdapter.d.ts.map +1 -0
  43. package/dist/base/observability/DatadogAdapter.d.ts +117 -0
  44. package/dist/base/observability/DatadogAdapter.d.ts.map +1 -0
  45. package/dist/base/observability/LoggerAdapter.d.ts +54 -0
  46. package/dist/base/observability/LoggerAdapter.d.ts.map +1 -0
  47. package/dist/base/observability/ObservabilityService.d.ts +160 -0
  48. package/dist/base/observability/ObservabilityService.d.ts.map +1 -0
  49. package/dist/base/observability/index.d.ts +17 -0
  50. package/dist/base/observability/index.d.ts.map +1 -0
  51. package/dist/domain/base/BaseBackendDomainService.d.ts +528 -0
  52. package/dist/domain/base/BaseBackendDomainService.d.ts.map +1 -0
  53. package/dist/domain/base/BaseDomainService.d.ts +284 -0
  54. package/dist/domain/base/BaseDomainService.d.ts.map +1 -0
  55. package/dist/domain/base/BaseFrontendDomainService.d.ts +493 -0
  56. package/dist/domain/base/BaseFrontendDomainService.d.ts.map +1 -0
  57. package/dist/domain/base/BaseMapper.d.ts +100 -0
  58. package/dist/domain/base/BaseMapper.d.ts.map +1 -0
  59. package/dist/domain/base/BaseValidator.d.ts +105 -0
  60. package/dist/domain/base/BaseValidator.d.ts.map +1 -0
  61. package/dist/domain/base/index.d.ts +10 -0
  62. package/dist/domain/base/index.d.ts.map +1 -0
  63. package/dist/domain/example/BackendExampleDomainService.d.ts +257 -0
  64. package/dist/domain/example/BackendExampleDomainService.d.ts.map +1 -0
  65. package/dist/domain/example/FrontendExampleDomainService.d.ts +164 -0
  66. package/dist/domain/example/FrontendExampleDomainService.d.ts.map +1 -0
  67. package/dist/domain/example/index.d.ts +10 -0
  68. package/dist/domain/example/index.d.ts.map +1 -0
  69. package/dist/domain/example/mappers/ExampleMapper.d.ts +67 -0
  70. package/dist/domain/example/mappers/ExampleMapper.d.ts.map +1 -0
  71. package/dist/domain/example/validators/ExampleValidator.d.ts +33 -0
  72. package/dist/domain/example/validators/ExampleValidator.d.ts.map +1 -0
  73. package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts +86 -0
  74. package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts.map +1 -0
  75. package/dist/domain/featureFlags/index.d.ts +10 -5
  76. package/dist/domain/featureFlags/index.d.ts.map +1 -1
  77. package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts +72 -0
  78. package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts.map +1 -0
  79. package/dist/domain/featureFlags/mappers/index.d.ts +8 -0
  80. package/dist/domain/featureFlags/mappers/index.d.ts.map +1 -0
  81. package/dist/domain/featureFlags/module.d.ts +20 -0
  82. package/dist/domain/featureFlags/module.d.ts.map +1 -0
  83. package/dist/domain/featureFlags/provider.d.ts +40 -1
  84. package/dist/domain/featureFlags/provider.d.ts.map +1 -1
  85. package/dist/domain/featureFlags/providers/api.d.ts +59 -34
  86. package/dist/domain/featureFlags/providers/api.d.ts.map +1 -1
  87. package/dist/domain/featureFlags/providers/database.d.ts +54 -47
  88. package/dist/domain/featureFlags/providers/database.d.ts.map +1 -1
  89. package/dist/domain/featureFlags/providers/factory.d.ts +50 -33
  90. package/dist/domain/featureFlags/providers/factory.d.ts.map +1 -1
  91. package/dist/domain/featureFlags/providers/file.d.ts +48 -1
  92. package/dist/domain/featureFlags/providers/file.d.ts.map +1 -1
  93. package/dist/domain/featureFlags/providers/memory.d.ts +32 -6
  94. package/dist/domain/featureFlags/providers/memory.d.ts.map +1 -1
  95. package/dist/domain/featureFlags/providers/redis.d.ts +6 -1
  96. package/dist/domain/featureFlags/providers/redis.d.ts.map +1 -1
  97. package/dist/domain/featureFlags/service.d.ts +112 -0
  98. package/dist/domain/featureFlags/service.d.ts.map +1 -0
  99. package/dist/domain/index.d.ts +2 -0
  100. package/dist/domain/index.d.ts.map +1 -1
  101. package/dist/engine/featureFlags/engine.d.ts +8 -0
  102. package/dist/engine/featureFlags/engine.d.ts.map +1 -1
  103. package/dist/entry-backend.d.ts +26 -0
  104. package/dist/entry-backend.d.ts.map +1 -0
  105. package/dist/entry-backend.js +15455 -0
  106. package/dist/entry-backend.js.map +1 -0
  107. package/dist/entry-backend.mjs +15339 -0
  108. package/dist/entry-backend.mjs.map +1 -0
  109. package/dist/entry-frontend.d.ts +23 -0
  110. package/dist/entry-frontend.d.ts.map +1 -0
  111. package/dist/entry-frontend.js +11340 -0
  112. package/dist/entry-frontend.js.map +1 -0
  113. package/dist/entry-frontend.mjs +11278 -0
  114. package/dist/entry-frontend.mjs.map +1 -0
  115. package/dist/events/CoreEventManager.d.ts +116 -0
  116. package/dist/events/CoreEventManager.d.ts.map +1 -0
  117. package/dist/events/index.d.ts +27 -0
  118. package/dist/events/index.d.ts.map +1 -0
  119. package/dist/frontend/base/index.d.ts +8 -0
  120. package/dist/frontend/base/index.d.ts.map +1 -0
  121. package/dist/frontend/components/InitializationError.d.ts +25 -0
  122. package/dist/frontend/components/InitializationError.d.ts.map +1 -0
  123. package/dist/frontend/components/InitializationLoading.d.ts +22 -0
  124. package/dist/frontend/components/InitializationLoading.d.ts.map +1 -0
  125. package/dist/frontend/components/index.d.ts +9 -0
  126. package/dist/frontend/components/index.d.ts.map +1 -0
  127. package/dist/frontend/example/index.d.ts +9 -0
  128. package/dist/frontend/example/index.d.ts.map +1 -0
  129. package/dist/frontend/featureFlags/index.d.ts +28 -7
  130. package/dist/frontend/featureFlags/index.d.ts.map +1 -1
  131. package/dist/frontend/index.d.ts +4 -0
  132. package/dist/frontend/index.d.ts.map +1 -1
  133. package/dist/frontend/providers/ApiProvider.d.ts +2 -2
  134. package/dist/frontend/providers/ApiProvider.d.ts.map +1 -1
  135. package/dist/frontend/providers/PlyazProvider.d.ts +305 -0
  136. package/dist/frontend/providers/PlyazProvider.d.ts.map +1 -0
  137. package/dist/frontend/providers/index.d.ts +1 -0
  138. package/dist/frontend/providers/index.d.ts.map +1 -1
  139. package/dist/frontend/store/feature-flags.d.ts +63 -0
  140. package/dist/frontend/store/feature-flags.d.ts.map +1 -0
  141. package/dist/frontend/store/index.d.ts +14 -0
  142. package/dist/frontend/store/index.d.ts.map +1 -0
  143. package/dist/frontend/store/integrations.d.ts +36 -0
  144. package/dist/frontend/store/integrations.d.ts.map +1 -0
  145. package/dist/frontend/store/service-accessors.d.ts +78 -0
  146. package/dist/frontend/store/service-accessors.d.ts.map +1 -0
  147. package/dist/index.d.ts +5 -2
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +15262 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/index.mjs +13667 -4861
  152. package/dist/index.mjs.map +1 -1
  153. package/dist/init/CoreInitializer.d.ts +583 -0
  154. package/dist/init/CoreInitializer.d.ts.map +1 -0
  155. package/dist/init/ServiceRegistry.d.ts +256 -0
  156. package/dist/init/ServiceRegistry.d.ts.map +1 -0
  157. package/dist/init/index.d.ts +14 -0
  158. package/dist/init/index.d.ts.map +1 -0
  159. package/dist/init/nestjs/CoreModule.d.ts +63 -0
  160. package/dist/init/nestjs/CoreModule.d.ts.map +1 -0
  161. package/dist/init/nestjs/index.d.ts +5 -0
  162. package/dist/init/nestjs/index.d.ts.map +1 -0
  163. package/dist/init/nestjs/index.js +9234 -0
  164. package/dist/init/nestjs/index.js.map +1 -0
  165. package/dist/init/nestjs/index.mjs +9230 -0
  166. package/dist/init/nestjs/index.mjs.map +1 -0
  167. package/dist/init/react.d.ts +33 -0
  168. package/dist/init/react.d.ts.map +1 -0
  169. package/dist/models/example/ExampleRepository.d.ts +166 -0
  170. package/dist/models/example/ExampleRepository.d.ts.map +1 -0
  171. package/dist/models/example/index.d.ts +7 -0
  172. package/dist/models/example/index.d.ts.map +1 -0
  173. package/dist/models/featureFlags/FeatureFlagRepository.d.ts +161 -0
  174. package/dist/models/featureFlags/FeatureFlagRepository.d.ts.map +1 -0
  175. package/dist/models/featureFlags/index.d.ts +7 -0
  176. package/dist/models/featureFlags/index.d.ts.map +1 -0
  177. package/dist/models/index.d.ts +9 -0
  178. package/dist/models/index.d.ts.map +1 -0
  179. package/dist/services/ApiClientService.d.ts +92 -4
  180. package/dist/services/ApiClientService.d.ts.map +1 -1
  181. package/dist/services/CacheService.d.ts +176 -0
  182. package/dist/services/CacheService.d.ts.map +1 -0
  183. package/dist/services/DbService.d.ts +393 -0
  184. package/dist/services/DbService.d.ts.map +1 -0
  185. package/dist/services/NotificationService.d.ts +153 -0
  186. package/dist/services/NotificationService.d.ts.map +1 -0
  187. package/dist/services/StorageService.d.ts +146 -0
  188. package/dist/services/StorageService.d.ts.map +1 -0
  189. package/dist/services/index.d.ts +4 -0
  190. package/dist/services/index.d.ts.map +1 -1
  191. package/dist/utils/common/id.d.ts +83 -0
  192. package/dist/utils/common/id.d.ts.map +1 -0
  193. package/dist/utils/common/index.d.ts +2 -0
  194. package/dist/utils/common/index.d.ts.map +1 -1
  195. package/dist/utils/common/object.d.ts +70 -0
  196. package/dist/utils/common/object.d.ts.map +1 -0
  197. package/dist/utils/featureFlags/conditions.d.ts.map +1 -1
  198. package/dist/utils/featureFlags/context.d.ts +0 -1
  199. package/dist/utils/featureFlags/context.d.ts.map +1 -1
  200. package/dist/utils/index.d.ts +1 -0
  201. package/dist/utils/index.d.ts.map +1 -1
  202. package/dist/utils/mapperUtils.d.ts +38 -0
  203. package/dist/utils/mapperUtils.d.ts.map +1 -0
  204. package/dist/utils/runtime.d.ts +15 -0
  205. package/dist/utils/runtime.d.ts.map +1 -0
  206. package/dist/version.d.ts +24 -0
  207. package/dist/version.d.ts.map +1 -0
  208. package/dist/web_app/auth/add_user.d.ts +2 -2
  209. package/dist/web_app/auth/add_user.d.ts.map +1 -1
  210. package/dist/web_app/auth/update_user.d.ts +1 -1
  211. package/dist/web_app/auth/update_user.d.ts.map +1 -1
  212. package/package.json +89 -15
  213. package/dist/backend/featureFlags/database/connection.d.ts +0 -321
  214. package/dist/backend/featureFlags/database/connection.d.ts.map +0 -1
  215. package/dist/backend/featureFlags/database/repository.d.ts +0 -518
  216. package/dist/backend/featureFlags/database/repository.d.ts.map +0 -1
  217. package/dist/backend/featureFlags/feature-flag.repository.d.ts +0 -85
  218. package/dist/backend/featureFlags/feature-flag.repository.d.ts.map +0 -1
  219. package/dist/backend/featureFlags/feature-flag.service.d.ts +0 -264
  220. package/dist/backend/featureFlags/feature-flag.service.d.ts.map +0 -1
  221. package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts +0 -103
  222. package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts.map +0 -1
  223. package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts +0 -35
  224. package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts.map +0 -1
  225. package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts +0 -55
  226. package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts.map +0 -1
  227. package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts +0 -57
  228. package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts.map +0 -1
  229. package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts +0 -99
  230. package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts.map +0 -1
  231. package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts +0 -31
  232. package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts.map +0 -1
  233. package/dist/frontend/featureFlags/providers/types.d.ts +0 -21
  234. package/dist/frontend/featureFlags/providers/types.d.ts.map +0 -1
  235. package/dist/index.cjs +0 -6435
  236. package/dist/index.cjs.map +0 -1
  237. package/dist/utils/db/databaseService.d.ts +0 -6
  238. package/dist/utils/db/databaseService.d.ts.map +0 -1
  239. package/dist/utils/db/index.d.ts +0 -2
  240. package/dist/utils/db/index.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,230 +1,295 @@
1
1
  # @plyaz/core
2
2
 
3
- > Foundational full-stack package for the Plyaz ecosystem
3
+ > Foundational full-stack framework for the Plyaz ecosystem
4
4
 
5
- The `@plyaz/core` package serves as the orchestration layer that combines functionality from specialized packages to provide core business logic, domain models, and SDK foundations.
5
+ The `@plyaz/core` package serves as the orchestration layer that provides domain service infrastructure, automatic dependency injection, and unified service management across frontend and backend environments.
6
6
 
7
- 📚 **Full Documentation**:
8
- - [Core Package Overview](https://plyaz.atlassian.net/wiki/spaces/SD/pages/37257227/Core+Package)
9
- - [Feature Flag System](https://plyaz.atlassian.net/wiki/spaces/SD/pages/44859395)
10
- - [Cache System](https://plyaz.atlassian.net/wiki/spaces/SD/pages/44892180)
7
+ ## Key Features
11
8
 
12
- ## 🎯 Key Objectives
9
+ - **Domain Service Framework** - Base classes for backend and frontend services with automatic CRUD, validation, and lifecycle hooks
10
+ - **Service Registry** - Centralized service management with automatic dependency injection
11
+ - **Unified Infrastructure** - Single initialization for DB, API, Cache, Storage, Notifications, and Observability
12
+ - **Multi-Runtime Support** - Node.js, Next.js, NestJS, Browser, Edge, Bun, Deno
13
+ - **Event-Driven Architecture** - Typed events with CoreEventManager
14
+ - **Feature Flags** - Rule-based evaluation with targeting and rollouts
15
+ - **CLI Tooling** - Interactive feature generation with `plyaz-core`
13
16
 
14
- - **Business Logic Orchestration**: Centralize core business logic that coordinates between specialized packages
15
- - **Full-Stack Support**: Environment-aware conditional loading for frontend, backend, and B2B integrations
16
- - **SDK Foundations**: Standardized interfaces for B2B partnerships and external integrations
17
- - **Type Safety**: Maintain strict architectural boundaries across all environments
17
+ ## Quick Start
18
18
 
19
- ## 🏗️ Architecture Philosophy
19
+ ### Backend Service
20
20
 
21
- `@plyaz/core` acts as the **orchestration layer** - while it primarily coordinates between specialized packages, it also implements core business logic, domain models, and foundational utilities that are central to the Plyaz ecosystem:
21
+ ```typescript
22
+ import { Core, ServiceRegistry } from '@plyaz/core';
23
+
24
+ // Initialize all services at once
25
+ await Core.initialize({
26
+ db: {
27
+ adapter: 'sql',
28
+ sql: { connectionString: process.env.DATABASE_URL },
29
+ },
30
+ api: {
31
+ baseUrl: process.env.API_BASE_URL,
32
+ },
33
+ cache: {
34
+ provider: 'memory',
35
+ ttl: 300,
36
+ },
37
+ });
38
+
39
+ // Register domain services
40
+ ServiceRegistry.register({
41
+ key: 'users',
42
+ serviceClass: UserDomainService,
43
+ config: { enabled: true },
44
+ });
45
+
46
+ // Get service instance with injected dependencies
47
+ const userService = await ServiceRegistry.getAsync<UserDomainService>('users');
48
+ const user = await userService.getById('user-123');
49
+ ```
50
+
51
+ ### Creating Domain Services
22
52
 
23
53
  ```typescript
24
- // Core orchestrates other packages
25
- import { getUser, createTransaction } from '@plyaz/api';
26
- import { executeSmartContract, getWalletBalance } from '@plyaz/web3';
27
- import { validateUser, checkPermissions } from '@plyaz/auth';
28
- import { trackBusinessMetric } from '@plyaz/monitoring';
29
- import { FEATURE_FLAGS } from '@plyaz/config';
30
- import { createLogger } from '@plyaz/logger';
54
+ import { BaseBackendDomainService } from '@plyaz/core/backend';
55
+
56
+ class UserDomainService extends BaseBackendDomainService<
57
+ UserConfig,
58
+ UserRepository,
59
+ User,
60
+ CreateUserDTO,
61
+ UpdateUserDTO
62
+ > {
63
+ protected eventPrefix = 'user';
64
+
65
+ // Fluent queries via repository.query()
66
+ async findActiveAdmins() {
67
+ return this.repository.query()
68
+ .where('status', 'eq', 'active')
69
+ .andWhere('role', 'eq', 'admin')
70
+ .orderByDesc('createdAt')
71
+ .getMany();
72
+ }
73
+
74
+ // Lifecycle hooks
75
+ protected async afterCreate(entity: User) {
76
+ await this.sendWelcomeEmail(entity);
77
+ }
78
+ }
31
79
  ```
32
80
 
33
- ## 📁 Package Structure
81
+ ## Architecture
34
82
 
35
83
  ```
36
- @plyaz/core/
37
- ├── src/
38
- ├── base/ # Generic functionalities used across domain, engine, and other layers
39
- │ └── cache/ # Caching system for performance optimization
40
- │ ├── domain/ # Pure business domain logic
41
- ├── user/ # User entity models and business rules
42
- ├── asset/ # Digital asset models and economics
43
- ├── transaction/ # Transaction domain and validation
44
- └── community/ # Community governance and interaction
45
- │ │ └── featureFlags/ # Domain logic feature flag system
46
- │ ├── engine/ # Core computational engines
47
- ├── calculation/ # Mathematical computation algorithms
48
- │ ├── incentive/ # Reward and incentive systems
49
- │ │ ├── validation/ # Business rule validation engines
50
- │ │ └── insights/ # Data analysis and pattern recognition
51
- │ │ └── featureFlags/ # Engine feature flag system
52
- │ ├── frontend/ # Frontend-specific implementations
53
- │ │ └── featureFlags/ # Frontend hooks, providers of feature flag system
54
- │ ├── backend/ # Backend-specific implementations
55
- │ │ └── featureFlags/ # Backend service, module, controller, repository of feature flag system. Generally in NestJs, but should be compatible without NestJs.
56
- │ ├── sdk/ # B2B SDK foundation
57
- │ └── contracts/ # External service contracts
84
+ @plyaz/core
85
+ ├── init/ # Core initialization & ServiceRegistry
86
+ ├── services/ # Infrastructure services
87
+ ├── DbService # Database (wraps @plyaz/db)
88
+ │ ├── ApiClientService # HTTP client (wraps @plyaz/api)
89
+ │ ├── CacheService # Caching (memory/redis)
90
+ │ ├── StorageService # File storage (Supabase/R2)
91
+ │ ├── NotificationService # Email/SMS/Push (Infobip/SendGrid)
92
+ │ └── ObservabilityService # Metrics, tracing, logging
93
+ ├── domain/ # Base domain service classes
94
+ │ ├── BaseDomainService
95
+ │ ├── BaseBackendDomainService
96
+ └── BaseFrontendDomainService
97
+ ├── events/ # CoreEventManager
98
+ ├── models/ # Repositories & data access
99
+ └── adapters/ # NestJS, Next.js integrations
58
100
  ```
59
101
 
60
- ## 🚀 Currently Implemented Features
61
-
62
- > **Note**: The @plyaz/core package currently has two main features implemented. Additional providers and backend integrations are in development.
63
-
64
- ### ✅ Feature Flag System (Most Complete)
65
- - **Implemented Providers**:
66
- - ✅ Memory Provider - Fully functional with FEATURES constant
67
- - File Provider - JSON/YAML support with hot reload capability
68
- - ⏳ Redis Provider - Stub only (pending implementation)
69
- - API Provider - Stub only (pending implementation)
70
- - ⏳ Database Provider - Stub only (pending implementation)
71
- - **Frontend Support**: React hooks and context providers (working)
72
- - **Backend Support**: NestJS module structure (partial - not fully integrated)
73
- - **Engine**: Complete rule-based evaluation with targeting and rollouts
74
- - **Testing**: Full override capabilities for test scenarios
75
-
76
- ### ✅ Cache System (Partially Complete)
77
- - **Implemented Strategies**:
78
- - ✅ Memory Strategy - LRU eviction with TTL management
79
- - ⏳ Redis Strategy - Stub only (pending implementation)
80
- - **Features**: Statistics tracking, automatic cleanup, TTL management
81
- - **Integration**: Currently used by feature flag system
82
-
83
- ### 🚧 Pending Implementation
84
- - **Backend Integration**: Full NestJS module integration
85
- - **Additional Engines**: Calculation, Incentive, Validation, Insights
86
- - **SDK Layer**: B2B partner SDK foundation
87
- - **External Providers**: Redis, API, and Database connections
88
-
89
- ### File Provider Configuration
90
-
91
- The file provider supports JSON and YAML formats with hot reload:
92
-
93
- ```json
94
- // src/config/feature-provider.json
95
- {
96
- "flags": [
97
- {
98
- "key": "FEATURE_NAME",
99
- "value": true,
100
- "isEnabled": true,
101
- "environments": ["production", "staging"]
102
- }
103
- ],
104
- "rules": [
105
- {
106
- "id": "rule-id",
107
- "flagKey": "FEATURE_NAME",
108
- "name": "Rule Description",
109
- "conditions": [
110
- {
111
- "field": "userRole",
112
- "operator": "equals",
113
- "value": "premium"
114
- }
115
- ],
116
- "value": true,
117
- "priority": 100,
118
- "isEnabled": true
119
- }
120
- ]
121
- }
102
+ ## Service Injection Flow
103
+
104
+ ```
105
+ Core.initialize(config)
106
+
107
+ ServiceRegistry.initialize()
108
+
109
+ Build service configs (db, api, cache, storage, notifications)
110
+
111
+ ServiceRegistry.register({ key, serviceClass, config })
112
+
113
+ DomainService.create(config, { injected: { db, api, cache, storage, notifications } })
114
+
115
+ Access via this.config.injected?.db / storage / notifications
122
116
  ```
123
117
 
124
- See `src/config/feature-provider.json.example` and `src/config/feature-provider.yaml.example` for complete examples.
118
+ ## Infrastructure Services
125
119
 
126
- ## 🔧 Key Capabilities
120
+ ### DbService
127
121
 
128
- - **Environment Isolation**: Complete separation of frontend and backend code
129
- - **Type Safety**: Full TypeScript support with strict boundaries
130
- - **Domain-Driven Design**: Clear bounded contexts for business domains
131
- - **Extensible Architecture**: Provider pattern for easy extension
132
- - **Performance Optimized**: Built-in caching and efficient evaluation
133
- - **Testing Support**: Override capabilities and test utilities
122
+ Database connection manager with adapter chain (soft delete, caching, audit, encryption):
134
123
 
135
- ## 📚 Documentation
124
+ ```typescript
125
+ import { DbService } from '@plyaz/core';
136
126
 
137
- For detailed architecture information, implementation guides, and examples:
127
+ await DbService.initialize({
128
+ adapter: 'sql',
129
+ sql: { connectionString: process.env.DATABASE_URL },
130
+ softDelete: { enabled: true },
131
+ cache: { enabled: true, ttl: 300 },
132
+ });
138
133
 
139
- **[📖 Full Documentation](https://plyaz.atlassian.net/wiki/spaces/SD/pages/37257227/Core+Package?atlOrigin=eyJpIjoiNmQxZmNhYTllYmZjNDU2Njk0YmRhYWI2M2JkNTA3NDMiLCJwIjoiYyJ9)**
134
+ const db = DbService.getInstance().getDatabase();
135
+ ```
140
136
 
141
- ### 📄 Confluence Documentation
137
+ ### CacheService (Backend-only)
142
138
 
143
- - **[Feature Flag System](https://plyaz.atlassian.net/wiki/spaces/SD/pages/44859395/Feature+Flag+System+plyaz+core?atlOrigin=eyJpIjoiNjEyMWY3N2ViZDUxNDIxZTgxNGRmZWMwNjQwMzhiOTQiLCJwIjoiYyJ9)** - Complete feature flag implementation guide
144
- - **[Engine Layer](https://plyaz.atlassian.net/wiki/spaces/SD/pages/44892169/Engine+Layer+plyaz+core?atlOrigin=eyJpIjoiYTI5M2JhOTA5M2Q4NDY1ZjkzZjM2Yzk5M2U5MTZlMzUiLCJwIjoiYyJ9)** - Core computational engines documentation
145
- - **[Cache System](https://plyaz.atlassian.net/wiki/spaces/SD/pages/44892180/Cache+System+plyaz+core?atlOrigin=eyJpIjoiNDU2MTU5MWU0NTQ1NDIyMzk0MzJkNjE3MDkyOWVkZDQiLCJwIjoiYyJ9)** - Caching strategies and implementation
139
+ Server-side caching with Redis or in-memory providers:
146
140
 
147
- ## 🔗 Related Packages
141
+ ```typescript
142
+ import { CacheService } from '@plyaz/core';
143
+
144
+ await CacheService.initialize({
145
+ strategy: 'redis',
146
+ ttl: 300,
147
+ redisConfig: {
148
+ url: process.env.REDIS_URL,
149
+ keyPrefix: 'app:',
150
+ },
151
+ });
152
+
153
+ const cache = CacheService.getInstance();
154
+ await cache.set('user:123', userData, 600); // 10 minute TTL
155
+ const cached = await cache.get('user:123');
156
+ ```
148
157
 
149
- | Package | Purpose | Core Usage |
150
- |---------|---------|------------|
151
- | `@plyaz/api` | HTTP/REST API calls | Business data operations |
152
- | `@plyaz/web3` | Blockchain interactions | Asset operations, smart contracts |
153
- | `@plyaz/auth` | Authentication & authorization | User validation, permissions |
154
- | `@plyaz/config` | Configuration & feature flags | Business rules, environment settings |
155
- | `@plyaz/monitoring` | Metrics & performance tracking | Business KPI tracking |
156
- | `@plyaz/logger` | Logging infrastructure | Business operation logging |
157
- | `@plyaz/events` | Event-driven communication | Business event coordination |
158
+ ### StorageService (Backend-only)
158
159
 
159
- ## 🛡️ Security & Performance
160
+ Multi-provider file storage with automatic routing:
160
161
 
161
- - **Authentication Integration**: Built-in security via `@plyaz/auth`
162
- - **Input Validation**: Comprehensive validation using `@plyaz/errors`
163
- - **Audit Logging**: Full audit trail via `@plyaz/logger`
164
- - **Intelligent Caching**: Business-aware caching strategies
165
- - **Tree Shaking**: Environment-specific code loading
162
+ ```typescript
163
+ import { StorageService } from '@plyaz/core';
164
+
165
+ const storage = StorageService.getInstance().getStorage();
166
+ await storage.uploadFile({
167
+ file: buffer,
168
+ filename: 'document.pdf',
169
+ bucket: 'documents',
170
+ });
171
+ ```
166
172
 
167
- ## 🏗️ Development
173
+ ### NotificationService (Backend-only)
168
174
 
169
- ```bash
170
- # Install dependencies
171
- pnpm install
175
+ Multi-channel notifications with provider failover:
172
176
 
173
- # Development with watch mode
174
- pnpm dev
177
+ ```typescript
178
+ import { NotificationService } from '@plyaz/core';
179
+
180
+ const notifications = NotificationService.getInstance().getNotifications();
181
+ await notifications.sendEmail({
182
+ to: 'user@example.com',
183
+ templateId: 'welcome',
184
+ templateData: { name: 'John' },
185
+ });
186
+ ```
175
187
 
176
- # Build package
177
- pnpm build
188
+ ## QueryBuilder Integration
178
189
 
179
- # Testing
180
- pnpm test # Run tests once
181
- pnpm test:watch # Run tests in watch mode
182
- pnpm test:coverage # Run tests with coverage
183
- pnpm test:ui # Run tests with UI
190
+ Fluent query API via `@plyaz/db` integrated with BaseRepository:
184
191
 
185
- # Code quality
186
- pnpm lint # Lint code
187
- pnpm lint:fix # Lint and fix issues
188
- pnpm format # Format code
189
- pnpm format:check # Check formatting
190
- pnpm type:check # Type checking
191
-
192
- # Security
193
- pnpm security:check # Run security audit
194
- pnpm audit:fix # Fix security issues
195
-
196
- # Clean build artifacts
197
- pnpm clean
192
+ ```typescript
193
+ // In domain service
194
+ const users = await this.repository.query()
195
+ .where('status', 'eq', 'active')
196
+ .andWhere('tier', 'eq', 'premium')
197
+ .whereNotNull('verifiedAt')
198
+ .orderByDesc('createdAt')
199
+ .paginate(1, 25)
200
+ .getMany();
201
+
202
+ // Raw SQL for complex queries
203
+ const results = await this.repository.query()
204
+ .where('status', 'eq', 'active')
205
+ .whereRaw('"metadata"->\'score\' > $1', [80])
206
+ .getMany();
198
207
  ```
199
208
 
200
- ### TypeScript Path Aliases
209
+ ## CLI
201
210
 
202
- The package uses TypeScript path aliases for cleaner imports:
211
+ Generate features interactively:
203
212
 
204
- **Before:**
205
- ```typescript
206
- import { CacheManager } from '../../base/cache';
207
- import { FeatureFlagEngine } from '../../../engine/featureFlags/engine';
213
+ ```bash
214
+ # Interactive mode
215
+ pnpm plyaz-core generate
216
+
217
+ # Direct generation
218
+ pnpm plyaz-core generate user --type backend
219
+
220
+ # Options
221
+ --type backend|frontend|universal
222
+ --skip-validator
223
+ --skip-mapper
224
+ --dry-run
208
225
  ```
209
226
 
210
- **After:**
227
+ ## Feature Flags
228
+
211
229
  ```typescript
212
- import { CacheManager } from '@base/cache/index';
213
- import { FeatureFlagEngine } from '@engine/featureFlags/engine';
230
+ import { useFeatureFlag } from '@plyaz/core/frontend';
231
+
232
+ // React hook
233
+ const isEnabled = useFeatureFlag('DARK_MODE');
234
+
235
+ // Backend check
236
+ const flags = await FeatureFlagService.getFlags();
237
+ if (flags.PREMIUM_FEATURES) {
238
+ // Premium logic
239
+ }
214
240
  ```
215
241
 
216
- **Available aliases:**
217
- - `@/*` → `src/*`
218
- - `@domain/*` `src/domain/*`
219
- - `@engine/*` → `src/engine/*`
220
- - `@backend/*` `src/backend/*`
221
- - `@frontend/*` `src/frontend/*`
222
- - `@base/*` → `src/base/*` (generic functionalities for cross-layer use)
223
- - `@utils/*` `src/utils/*`
224
- - `@tests/*` `tests/*`
242
+ ## Documentation
243
+
244
+ | Guide | Description |
245
+ |-------|-------------|
246
+ | [Quick Start](./docs/guides/01-QUICK-START.md) | Get started in 5 minutes |
247
+ | [Architecture](./docs/guides/02-ARCHITECTURE.md) | System design overview |
248
+ | [Initialization](./docs/guides/03-INITIALIZATION.md) | Configuration options |
249
+ | [Services](./docs/guides/05-SERVICES.md) | Domain service patterns |
250
+ | [Base Classes API](./docs/guides/09-BASE-CLASSES-API.md) | Full API reference |
251
+ | [DbService Guide](./docs/DbService-Usage-Guide.md) | Database integration |
252
+ | [CacheService Guide](./docs/CacheService-Usage-Guide.md) | Caching (Redis/in-memory) |
253
+ | [StorageService Guide](./docs/StorageService-Usage-Guide.md) | File storage |
254
+ | [NotificationService Guide](./docs/NotificationService-Usage-Guide.md) | Notifications |
255
+
256
+ ## Related Packages
257
+
258
+ | Package | Purpose |
259
+ |---------|---------|
260
+ | `@plyaz/db` | Database adapters, repositories, QueryBuilder |
261
+ | `@plyaz/api` | HTTP client, fetchers, request handling |
262
+ | `@plyaz/storage` | File storage providers (Supabase, R2) |
263
+ | `@plyaz/notifications` | Email/SMS/Push providers |
264
+ | `@plyaz/types` | Shared TypeScript types |
265
+ | `@plyaz/errors` | Error handling utilities |
266
+
267
+ ## Development
225
268
 
226
- **Important:** When importing from index files, always specify `/index` explicitly (e.g., `@base/cache/index` not `@base/cache`).
269
+ ```bash
270
+ # Install dependencies
271
+ pnpm install
272
+
273
+ # Development
274
+ pnpm dev # Watch mode
275
+ pnpm build # Build package
276
+ pnpm type:check # Type checking
277
+
278
+ # Testing
279
+ pnpm test # Run tests
280
+ pnpm test:watch # Watch mode
281
+ pnpm test:coverage # With coverage
282
+
283
+ # Code quality
284
+ pnpm lint # Lint code
285
+ pnpm lint:fix # Fix issues
286
+ pnpm format # Format code
287
+
288
+ # NestJS server (if configured)
289
+ pnpm nest:dev # Development server
290
+ pnpm nest:start # Production server
291
+ ```
227
292
 
228
- ---
293
+ ## License
229
294
 
230
- **Note**: This package is part of the Plyaz monorepo architecture. See the [full documentation](https://plyaz.atlassian.net/wiki/spaces/SD/pages/37257227/Core+Package) for complete implementation details and architectural decisions.
295
+ MIT
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Framework Adapters
3
+ *
4
+ * Adapters for different HTTP frameworks and runtimes.
5
+ *
6
+ * Available:
7
+ * - createHandler: Next.js API route handler with service injection
8
+ * - CoreModule: NestJS DI integration
9
+ *
10
+ * Types are available from '@plyaz/types/core':
11
+ * - CoreNextJsHandlerContext, CoreNextJsHandler, etc.
12
+ * - CoreNestJsModuleOptions, CoreNestJsModuleAsyncOptions
13
+ */
14
+ export { createHandler, nextHandler } from './nextjs';
15
+ export { CoreModule, CORE_DB_SERVICE, CORE_ENV, CORE_OPTIONS } from './nestjs';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * NestJS Framework Adapter
3
+ *
4
+ * Provides CoreModule for NestJS dependency injection.
5
+ * Initializes core services (db, env) for use across NestJS modules.
6
+ */
7
+ import type { DynamicModule } from '@nestjs/common';
8
+ import type { CoreDbServiceConfig } from '../services/DbService';
9
+ import type { CoreNestJsModuleOptions, CoreNestJsModuleAsyncOptions } from '@plyaz/types/core';
10
+ /**
11
+ * Core module options for NestJS
12
+ * Extended with specific DbServiceConfig type
13
+ */
14
+ interface CoreModuleOptions extends Omit<CoreNestJsModuleOptions, 'db'> {
15
+ /** Database configuration */
16
+ db?: CoreDbServiceConfig;
17
+ }
18
+ /**
19
+ * Async options for CoreModule
20
+ * Extended with specific CoreModuleOptions type
21
+ */
22
+ interface CoreModuleAsyncOptions extends Omit<CoreNestJsModuleAsyncOptions, 'useFactory'> {
23
+ useFactory: (...args: unknown[]) => CoreModuleOptions | Promise<CoreModuleOptions>;
24
+ }
25
+ /**
26
+ * Injection tokens for Core services
27
+ */
28
+ export declare const CORE_DB_SERVICE = "CORE_DB_SERVICE";
29
+ export declare const CORE_ENV = "CORE_ENV";
30
+ export declare const CORE_OPTIONS = "CORE_OPTIONS";
31
+ /**
32
+ * CoreModule for NestJS
33
+ *
34
+ * Provides Core services (DbService, etc.) via NestJS dependency injection.
35
+ * Import additional modules (FeatureFlagModule, etc.) separately.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * import { Module } from '@nestjs/common';
40
+ * import { CoreModule } from '@plyaz/core/adapters';
41
+ * import { FeatureFlagModule } from '@plyaz/core/backend/featureFlags';
42
+ *
43
+ * @Module({
44
+ * imports: [
45
+ * CoreModule.forRoot({ envPath: '.env' }),
46
+ * FeatureFlagModule.forRoot({ provider: 'database' }), // Auto-receives DbService
47
+ * ],
48
+ * })
49
+ * export class AppModule {}
50
+ * ```
51
+ *
52
+ * @example Async configuration
53
+ * ```typescript
54
+ * CoreModule.forRootAsync({
55
+ * imports: [ConfigModule],
56
+ * inject: [ConfigService],
57
+ * useFactory: (config: ConfigService) => ({
58
+ * db: {
59
+ * adapter: 'drizzle',
60
+ * drizzle: {
61
+ * connectionString: config.get('DATABASE_URL'),
62
+ * },
63
+ * },
64
+ * }),
65
+ * })
66
+ * ```
67
+ */
68
+ export declare const CoreModule: {
69
+ /**
70
+ * Register CoreModule with static configuration
71
+ */
72
+ forRoot(options?: CoreModuleOptions): DynamicModule;
73
+ /**
74
+ * Register CoreModule with async configuration
75
+ */
76
+ forRootAsync(options: CoreModuleAsyncOptions): DynamicModule;
77
+ };
78
+ export {};
79
+ //# sourceMappingURL=nestjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nestjs.d.ts","sourceRoot":"","sources":["../../src/adapters/nestjs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAG/F;;;GAGG;AACH,UAAU,iBAAkB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC;IACrE,6BAA6B;IAC7B,EAAE,CAAC,EAAE,mBAAmB,CAAC;CAC1B;AAED;;;GAGG;AACH,UAAU,sBAAuB,SAAQ,IAAI,CAAC,4BAA4B,EAAE,YAAY,CAAC;IACvF,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpF;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;sBACc,iBAAiB,GAAQ,aAAa;IAsCvD;;OAEG;0BACmB,sBAAsB,GAAG,aAAa;CAyC7D,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Next.js Adapter
3
+ *
4
+ * Provides utilities for Next.js API routes with auto-initialization
5
+ * and service injection.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // app/api/users/route.ts
10
+ * import { createHandler } from '@plyaz/core/adapters';
11
+ *
12
+ * export const GET = createHandler(async ({ db, query }) => {
13
+ * const users = await db.list('users');
14
+ * return { users };
15
+ * });
16
+ *
17
+ * export const POST = createHandler(async ({ db, body }) => {
18
+ * const user = await db.create('users', body);
19
+ * return { user, status: 201 };
20
+ * });
21
+ * ```
22
+ */
23
+ import type { CoreNextJsHandler, CoreNextJsHandlerOptions } from '@plyaz/types/core';
24
+ export declare function createHandler(handler: CoreNextJsHandler, options?: CoreNextJsHandlerOptions): (request: Request, context?: {
25
+ params?: Record<string, string>;
26
+ }) => Promise<Response>;
27
+ export { createHandler as nextHandler };
28
+ //# sourceMappingURL=nextjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAEV,iBAAiB,EACjB,wBAAwB,EAEzB,MAAM,mBAAmB,CAAC;AAgI3B,wBAAgB,aAAa,CAC3B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,wBAAwB,GACjC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAcxF;AAGD,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,CAAC"}