@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.
- package/README.md +248 -183
- package/dist/adapters/index.d.ts +16 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/nestjs.d.ts +79 -0
- package/dist/adapters/nestjs.d.ts.map +1 -0
- package/dist/adapters/nextjs.d.ts +28 -0
- package/dist/adapters/nextjs.d.ts.map +1 -0
- package/dist/backend/example/example.controller.d.ts +121 -0
- package/dist/backend/example/example.controller.d.ts.map +1 -0
- package/dist/backend/example/example.module.d.ts +29 -0
- package/dist/backend/example/example.module.d.ts.map +1 -0
- package/dist/backend/example/index.d.ts +8 -0
- package/dist/backend/example/index.d.ts.map +1 -0
- package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts +150 -0
- package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts.map +1 -0
- package/dist/backend/featureFlags/config/feature-flag.config.d.ts +28 -50
- package/dist/backend/featureFlags/config/feature-flag.config.d.ts.map +1 -1
- package/dist/backend/featureFlags/config/validation.d.ts +6 -6
- package/dist/backend/featureFlags/config/validation.d.ts.map +1 -1
- package/dist/backend/featureFlags/feature-flag.controller.d.ts +14 -55
- package/dist/backend/featureFlags/feature-flag.controller.d.ts.map +1 -1
- package/dist/backend/featureFlags/feature-flag.module.d.ts +36 -43
- package/dist/backend/featureFlags/feature-flag.module.d.ts.map +1 -1
- package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts +16 -2
- package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts.map +1 -1
- package/dist/backend/featureFlags/index.d.ts +6 -7
- package/dist/backend/featureFlags/index.d.ts.map +1 -1
- package/dist/backend/featureFlags/interceptors/error-handling-interceptor.d.ts.map +1 -1
- package/dist/backend/featureFlags/interceptors/feature-flag-logging-interceptor.d.ts.map +1 -1
- package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts +6 -11
- package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts.map +1 -1
- package/dist/backend/index.d.ts +5 -0
- package/dist/backend/index.d.ts.map +1 -1
- package/dist/base/cache/CacheKeyBuilder.d.ts +115 -0
- package/dist/base/cache/CacheKeyBuilder.d.ts.map +1 -0
- package/dist/base/cache/index.d.ts +1 -0
- package/dist/base/cache/index.d.ts.map +1 -1
- package/dist/base/cache/strategies/redis.d.ts.map +1 -1
- package/dist/base/observability/BaseAdapter.d.ts +79 -0
- package/dist/base/observability/BaseAdapter.d.ts.map +1 -0
- package/dist/base/observability/CompositeAdapter.d.ts +72 -0
- package/dist/base/observability/CompositeAdapter.d.ts.map +1 -0
- package/dist/base/observability/DatadogAdapter.d.ts +117 -0
- package/dist/base/observability/DatadogAdapter.d.ts.map +1 -0
- package/dist/base/observability/LoggerAdapter.d.ts +54 -0
- package/dist/base/observability/LoggerAdapter.d.ts.map +1 -0
- package/dist/base/observability/ObservabilityService.d.ts +160 -0
- package/dist/base/observability/ObservabilityService.d.ts.map +1 -0
- package/dist/base/observability/index.d.ts +17 -0
- package/dist/base/observability/index.d.ts.map +1 -0
- package/dist/domain/base/BaseBackendDomainService.d.ts +528 -0
- package/dist/domain/base/BaseBackendDomainService.d.ts.map +1 -0
- package/dist/domain/base/BaseDomainService.d.ts +284 -0
- package/dist/domain/base/BaseDomainService.d.ts.map +1 -0
- package/dist/domain/base/BaseFrontendDomainService.d.ts +493 -0
- package/dist/domain/base/BaseFrontendDomainService.d.ts.map +1 -0
- package/dist/domain/base/BaseMapper.d.ts +100 -0
- package/dist/domain/base/BaseMapper.d.ts.map +1 -0
- package/dist/domain/base/BaseValidator.d.ts +105 -0
- package/dist/domain/base/BaseValidator.d.ts.map +1 -0
- package/dist/domain/base/index.d.ts +10 -0
- package/dist/domain/base/index.d.ts.map +1 -0
- package/dist/domain/example/BackendExampleDomainService.d.ts +257 -0
- package/dist/domain/example/BackendExampleDomainService.d.ts.map +1 -0
- package/dist/domain/example/FrontendExampleDomainService.d.ts +164 -0
- package/dist/domain/example/FrontendExampleDomainService.d.ts.map +1 -0
- package/dist/domain/example/index.d.ts +10 -0
- package/dist/domain/example/index.d.ts.map +1 -0
- package/dist/domain/example/mappers/ExampleMapper.d.ts +67 -0
- package/dist/domain/example/mappers/ExampleMapper.d.ts.map +1 -0
- package/dist/domain/example/validators/ExampleValidator.d.ts +33 -0
- package/dist/domain/example/validators/ExampleValidator.d.ts.map +1 -0
- package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts +86 -0
- package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts.map +1 -0
- package/dist/domain/featureFlags/index.d.ts +10 -5
- package/dist/domain/featureFlags/index.d.ts.map +1 -1
- package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts +72 -0
- package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts.map +1 -0
- package/dist/domain/featureFlags/mappers/index.d.ts +8 -0
- package/dist/domain/featureFlags/mappers/index.d.ts.map +1 -0
- package/dist/domain/featureFlags/module.d.ts +20 -0
- package/dist/domain/featureFlags/module.d.ts.map +1 -0
- package/dist/domain/featureFlags/provider.d.ts +40 -1
- package/dist/domain/featureFlags/provider.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/api.d.ts +59 -34
- package/dist/domain/featureFlags/providers/api.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/database.d.ts +54 -47
- package/dist/domain/featureFlags/providers/database.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/factory.d.ts +50 -33
- package/dist/domain/featureFlags/providers/factory.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/file.d.ts +48 -1
- package/dist/domain/featureFlags/providers/file.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/memory.d.ts +32 -6
- package/dist/domain/featureFlags/providers/memory.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/redis.d.ts +6 -1
- package/dist/domain/featureFlags/providers/redis.d.ts.map +1 -1
- package/dist/domain/featureFlags/service.d.ts +112 -0
- package/dist/domain/featureFlags/service.d.ts.map +1 -0
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/engine/featureFlags/engine.d.ts +8 -0
- package/dist/engine/featureFlags/engine.d.ts.map +1 -1
- package/dist/entry-backend.d.ts +26 -0
- package/dist/entry-backend.d.ts.map +1 -0
- package/dist/entry-backend.js +15455 -0
- package/dist/entry-backend.js.map +1 -0
- package/dist/entry-backend.mjs +15339 -0
- package/dist/entry-backend.mjs.map +1 -0
- package/dist/entry-frontend.d.ts +23 -0
- package/dist/entry-frontend.d.ts.map +1 -0
- package/dist/entry-frontend.js +11340 -0
- package/dist/entry-frontend.js.map +1 -0
- package/dist/entry-frontend.mjs +11278 -0
- package/dist/entry-frontend.mjs.map +1 -0
- package/dist/events/CoreEventManager.d.ts +116 -0
- package/dist/events/CoreEventManager.d.ts.map +1 -0
- package/dist/events/index.d.ts +27 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/frontend/base/index.d.ts +8 -0
- package/dist/frontend/base/index.d.ts.map +1 -0
- package/dist/frontend/components/InitializationError.d.ts +25 -0
- package/dist/frontend/components/InitializationError.d.ts.map +1 -0
- package/dist/frontend/components/InitializationLoading.d.ts +22 -0
- package/dist/frontend/components/InitializationLoading.d.ts.map +1 -0
- package/dist/frontend/components/index.d.ts +9 -0
- package/dist/frontend/components/index.d.ts.map +1 -0
- package/dist/frontend/example/index.d.ts +9 -0
- package/dist/frontend/example/index.d.ts.map +1 -0
- package/dist/frontend/featureFlags/index.d.ts +28 -7
- package/dist/frontend/featureFlags/index.d.ts.map +1 -1
- package/dist/frontend/index.d.ts +4 -0
- package/dist/frontend/index.d.ts.map +1 -1
- package/dist/frontend/providers/ApiProvider.d.ts +2 -2
- package/dist/frontend/providers/ApiProvider.d.ts.map +1 -1
- package/dist/frontend/providers/PlyazProvider.d.ts +305 -0
- package/dist/frontend/providers/PlyazProvider.d.ts.map +1 -0
- package/dist/frontend/providers/index.d.ts +1 -0
- package/dist/frontend/providers/index.d.ts.map +1 -1
- package/dist/frontend/store/feature-flags.d.ts +63 -0
- package/dist/frontend/store/feature-flags.d.ts.map +1 -0
- package/dist/frontend/store/index.d.ts +14 -0
- package/dist/frontend/store/index.d.ts.map +1 -0
- package/dist/frontend/store/integrations.d.ts +36 -0
- package/dist/frontend/store/integrations.d.ts.map +1 -0
- package/dist/frontend/store/service-accessors.d.ts +78 -0
- package/dist/frontend/store/service-accessors.d.ts.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15262 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +13667 -4861
- package/dist/index.mjs.map +1 -1
- package/dist/init/CoreInitializer.d.ts +583 -0
- package/dist/init/CoreInitializer.d.ts.map +1 -0
- package/dist/init/ServiceRegistry.d.ts +256 -0
- package/dist/init/ServiceRegistry.d.ts.map +1 -0
- package/dist/init/index.d.ts +14 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/nestjs/CoreModule.d.ts +63 -0
- package/dist/init/nestjs/CoreModule.d.ts.map +1 -0
- package/dist/init/nestjs/index.d.ts +5 -0
- package/dist/init/nestjs/index.d.ts.map +1 -0
- package/dist/init/nestjs/index.js +9234 -0
- package/dist/init/nestjs/index.js.map +1 -0
- package/dist/init/nestjs/index.mjs +9230 -0
- package/dist/init/nestjs/index.mjs.map +1 -0
- package/dist/init/react.d.ts +33 -0
- package/dist/init/react.d.ts.map +1 -0
- package/dist/models/example/ExampleRepository.d.ts +166 -0
- package/dist/models/example/ExampleRepository.d.ts.map +1 -0
- package/dist/models/example/index.d.ts +7 -0
- package/dist/models/example/index.d.ts.map +1 -0
- package/dist/models/featureFlags/FeatureFlagRepository.d.ts +161 -0
- package/dist/models/featureFlags/FeatureFlagRepository.d.ts.map +1 -0
- package/dist/models/featureFlags/index.d.ts +7 -0
- package/dist/models/featureFlags/index.d.ts.map +1 -0
- package/dist/models/index.d.ts +9 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/services/ApiClientService.d.ts +92 -4
- package/dist/services/ApiClientService.d.ts.map +1 -1
- package/dist/services/CacheService.d.ts +176 -0
- package/dist/services/CacheService.d.ts.map +1 -0
- package/dist/services/DbService.d.ts +393 -0
- package/dist/services/DbService.d.ts.map +1 -0
- package/dist/services/NotificationService.d.ts +153 -0
- package/dist/services/NotificationService.d.ts.map +1 -0
- package/dist/services/StorageService.d.ts +146 -0
- package/dist/services/StorageService.d.ts.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/utils/common/id.d.ts +83 -0
- package/dist/utils/common/id.d.ts.map +1 -0
- package/dist/utils/common/index.d.ts +2 -0
- package/dist/utils/common/index.d.ts.map +1 -1
- package/dist/utils/common/object.d.ts +70 -0
- package/dist/utils/common/object.d.ts.map +1 -0
- package/dist/utils/featureFlags/conditions.d.ts.map +1 -1
- package/dist/utils/featureFlags/context.d.ts +0 -1
- package/dist/utils/featureFlags/context.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/mapperUtils.d.ts +38 -0
- package/dist/utils/mapperUtils.d.ts.map +1 -0
- package/dist/utils/runtime.d.ts +15 -0
- package/dist/utils/runtime.d.ts.map +1 -0
- package/dist/version.d.ts +24 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/web_app/auth/add_user.d.ts +2 -2
- package/dist/web_app/auth/add_user.d.ts.map +1 -1
- package/dist/web_app/auth/update_user.d.ts +1 -1
- package/dist/web_app/auth/update_user.d.ts.map +1 -1
- package/package.json +89 -15
- package/dist/backend/featureFlags/database/connection.d.ts +0 -321
- package/dist/backend/featureFlags/database/connection.d.ts.map +0 -1
- package/dist/backend/featureFlags/database/repository.d.ts +0 -518
- package/dist/backend/featureFlags/database/repository.d.ts.map +0 -1
- package/dist/backend/featureFlags/feature-flag.repository.d.ts +0 -85
- package/dist/backend/featureFlags/feature-flag.repository.d.ts.map +0 -1
- package/dist/backend/featureFlags/feature-flag.service.d.ts +0 -264
- package/dist/backend/featureFlags/feature-flag.service.d.ts.map +0 -1
- package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts +0 -103
- package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts.map +0 -1
- package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts +0 -35
- package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts.map +0 -1
- package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts +0 -55
- package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts.map +0 -1
- package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts +0 -57
- package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts.map +0 -1
- package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts +0 -99
- package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts.map +0 -1
- package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts +0 -31
- package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts.map +0 -1
- package/dist/frontend/featureFlags/providers/types.d.ts +0 -21
- package/dist/frontend/featureFlags/providers/types.d.ts.map +0 -1
- package/dist/index.cjs +0 -6435
- package/dist/index.cjs.map +0 -1
- package/dist/utils/db/databaseService.d.ts +0 -6
- package/dist/utils/db/databaseService.d.ts.map +0 -1
- package/dist/utils/db/index.d.ts +0 -2
- package/dist/utils/db/index.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_user.d.ts","sourceRoot":"","sources":["../../../src/web_app/auth/update_user.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update_user.d.ts","sourceRoot":"","sources":["../../../src/web_app/auth/update_user.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,OAAO,MAAM,EACb,IAAI,MAAM,EACV,OAAO,CAAC,KACP,OAAO,CAAC,OAAO,CAIjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plyaz/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Shared core logic and utilities for Plyaz apps, services, and future SDKs – centralized, reusable, and scalable.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,11 +15,29 @@
|
|
|
15
15
|
"require": "./dist/index.js",
|
|
16
16
|
"default": "./dist/index.mjs"
|
|
17
17
|
},
|
|
18
|
+
"./frontend": {
|
|
19
|
+
"types": "./dist/entry-frontend.d.ts",
|
|
20
|
+
"import": "./dist/entry-frontend.mjs",
|
|
21
|
+
"require": "./dist/entry-frontend.js",
|
|
22
|
+
"default": "./dist/entry-frontend.mjs"
|
|
23
|
+
},
|
|
24
|
+
"./backend": {
|
|
25
|
+
"types": "./dist/entry-backend.d.ts",
|
|
26
|
+
"import": "./dist/entry-backend.mjs",
|
|
27
|
+
"require": "./dist/entry-backend.js",
|
|
28
|
+
"default": "./dist/entry-backend.mjs"
|
|
29
|
+
},
|
|
30
|
+
"./nestjs": {
|
|
31
|
+
"types": "./dist/init/nestjs/index.d.ts",
|
|
32
|
+
"import": "./dist/init/nestjs/index.mjs",
|
|
33
|
+
"require": "./dist/init/nestjs/index.js",
|
|
34
|
+
"default": "./dist/init/nestjs/index.mjs"
|
|
35
|
+
},
|
|
18
36
|
"./package.json": "./package.json"
|
|
19
37
|
},
|
|
20
38
|
"engines": {
|
|
21
|
-
"node": ">=
|
|
22
|
-
"pnpm": ">=8.
|
|
39
|
+
"node": ">=23.0.0",
|
|
40
|
+
"pnpm": ">=8.10.0"
|
|
23
41
|
},
|
|
24
42
|
"author": "Redeemer Pace",
|
|
25
43
|
"license": "ISC",
|
|
@@ -29,24 +47,33 @@
|
|
|
29
47
|
"dependencies": {
|
|
30
48
|
"@nestjs/common": "^11.1.3",
|
|
31
49
|
"@nestjs/core": "^11.1.6",
|
|
32
|
-
"@
|
|
33
|
-
"@plyaz/
|
|
34
|
-
"@plyaz/
|
|
35
|
-
"@plyaz/
|
|
36
|
-
"@plyaz/
|
|
50
|
+
"@nestjs/platform-express": "^11.1.9",
|
|
51
|
+
"@plyaz/api": "^1.5.5",
|
|
52
|
+
"@plyaz/config": "^1.9.0",
|
|
53
|
+
"@plyaz/db": "^0.5.0",
|
|
54
|
+
"@plyaz/errors": "^1.5.1",
|
|
55
|
+
"@plyaz/logger": "^1.4.1",
|
|
56
|
+
"@plyaz/notifications": "^1.0.1",
|
|
57
|
+
"@plyaz/storage": "^1.0.1",
|
|
58
|
+
"@plyaz/store": "^1.1.3",
|
|
37
59
|
"@plyaz/translations": "^1.4.5",
|
|
38
|
-
"@plyaz/types": "^1.
|
|
60
|
+
"@plyaz/types": "^1.24.0",
|
|
39
61
|
"@supabase/supabase-js": "^2.79.0",
|
|
62
|
+
"dd-trace": "^5.80.0",
|
|
40
63
|
"dotenv": "^17.2.3",
|
|
41
64
|
"drizzle-orm": "^0.36.4",
|
|
65
|
+
"fetchff": "^4.1.0",
|
|
66
|
+
"hot-shots": "^11.4.0",
|
|
42
67
|
"ioredis": "^5.6.1",
|
|
43
68
|
"next": "15.4.7",
|
|
44
69
|
"postgres": "^3.4.7",
|
|
45
|
-
"react": "^19.
|
|
46
|
-
"react-dom": "^19.
|
|
70
|
+
"react": "^19.2.0",
|
|
71
|
+
"react-dom": "^19.2.0",
|
|
47
72
|
"rxjs": "^7.8.2",
|
|
48
73
|
"viem": "^2.31.7",
|
|
49
|
-
"yaml": "^2.8.0"
|
|
74
|
+
"yaml": "^2.8.0",
|
|
75
|
+
"zod": "4.1.5",
|
|
76
|
+
"zustand": "^5.0.9"
|
|
50
77
|
},
|
|
51
78
|
"devDependencies": {
|
|
52
79
|
"@changesets/cli": "^2.29.5",
|
|
@@ -54,6 +81,8 @@
|
|
|
54
81
|
"@eslint/eslintrc": "^3.2.0",
|
|
55
82
|
"@eslint/js": "^9.15.0",
|
|
56
83
|
"@eslint/markdown": "^6.5.0",
|
|
84
|
+
"@nestjs/cli": "^11.0.7",
|
|
85
|
+
"@nestjs/schematics": "^11.0.5",
|
|
57
86
|
"@next/eslint-plugin-next": "^15.0.3",
|
|
58
87
|
"@plyaz/devtools": "^1.9.4",
|
|
59
88
|
"@plyaz/testing": "^1.5.1",
|
|
@@ -62,13 +91,15 @@
|
|
|
62
91
|
"@testing-library/user-event": "^14.6.1",
|
|
63
92
|
"@types/express": "^5.0.5",
|
|
64
93
|
"@types/node": "^22.14.0",
|
|
65
|
-
"@types/react": "^19.
|
|
66
|
-
"@types/react-dom": "^19.
|
|
94
|
+
"@types/react": "^19.2.2",
|
|
95
|
+
"@types/react-dom": "^19.2.2",
|
|
67
96
|
"@typescript-eslint/eslint-plugin": "^8.15.0",
|
|
68
97
|
"@typescript-eslint/parser": "^8.15.0",
|
|
69
98
|
"@vitest/coverage-istanbul": "3.2.4",
|
|
70
99
|
"@vitest/coverage-v8": "^3.1.3",
|
|
71
100
|
"chalk": "^5.4.1",
|
|
101
|
+
"commander": "^12.1.0",
|
|
102
|
+
"cross-env": "^10.1.0",
|
|
72
103
|
"eslint": "^9.29.0",
|
|
73
104
|
"eslint-config-next": "^15.3.3",
|
|
74
105
|
"eslint-config-prettier": "^9.1.0",
|
|
@@ -108,6 +139,8 @@
|
|
|
108
139
|
"standard-version": "^9.5.0",
|
|
109
140
|
"tailwindcss": "^4.1.8",
|
|
110
141
|
"ts-morph": "^26.0.0",
|
|
142
|
+
"ts-node": "^10.9.2",
|
|
143
|
+
"tsconfig-paths": "^4.2.0",
|
|
111
144
|
"tsup": "8.5.0",
|
|
112
145
|
"typescript": "^5",
|
|
113
146
|
"typescript-eslint": "^8.34.0",
|
|
@@ -135,13 +168,54 @@
|
|
|
135
168
|
"lint:fix": "eslint ./src ./tests --fix",
|
|
136
169
|
"format": "prettier --write './**/*.{ts,tsx,js,jsx}'",
|
|
137
170
|
"format:check": "prettier --check './**/*.{ts,tsx,js,jsx}'",
|
|
138
|
-
"type:check": "tsc --noEmit",
|
|
171
|
+
"type:check": "node --max-old-space-size=8192 node_modules/typescript/bin/tsc --noEmit",
|
|
139
172
|
"test": "vitest run --no-watch",
|
|
140
173
|
"test:ci": "vitest run --no-watch",
|
|
141
174
|
"test:watch": "vitest --watch",
|
|
142
175
|
"test:coverage": "vitest run --coverage",
|
|
143
176
|
"test:ui": "vitest --ui",
|
|
144
177
|
"clean": "rm -rf dist",
|
|
178
|
+
"example:db": "npx tsx examples/db-service.ts",
|
|
179
|
+
"nest:dev": "npx tsx --watch server/main.ts",
|
|
180
|
+
"nest:start": "npx tsx server/main.ts",
|
|
181
|
+
"nest:start:debug": "npx tsx --inspect server/main.ts",
|
|
182
|
+
"nest:start:prod": "node dist/server/main.js",
|
|
183
|
+
"nest:generate": "nest generate",
|
|
184
|
+
"generate": "npx tsx bin/generate.ts",
|
|
185
|
+
"generate:feature": "npx tsx bin/generate.ts feature",
|
|
186
|
+
"generate:list": "npx tsx bin/generate.ts list --files",
|
|
187
|
+
"generate:info": "npx tsx bin/generate.ts info",
|
|
188
|
+
"generate:init": "npx tsx bin/generate.ts init",
|
|
189
|
+
"generate:undo": "npx tsx bin/generate.ts undo",
|
|
190
|
+
"generate:history": "npx tsx bin/generate.ts history",
|
|
191
|
+
"generate:no-author": "npx tsx bin/generate.ts feature --no-author",
|
|
192
|
+
"g": "npx tsx bin/generate.ts",
|
|
193
|
+
"g:f": "npx tsx bin/generate.ts feature",
|
|
194
|
+
"g:f:na": "npx tsx bin/generate.ts feature --no-author",
|
|
195
|
+
"g:u": "npx tsx bin/generate.ts undo",
|
|
196
|
+
"db:init": "plyaz-db init",
|
|
197
|
+
"db:version": "plyaz-db version",
|
|
198
|
+
"db:migrate": "plyaz-db migrate up",
|
|
199
|
+
"db:migrate:down": "plyaz-db migrate down",
|
|
200
|
+
"db:migrate:down:all": "plyaz-db migrate reset --confirm",
|
|
201
|
+
"db:migrate:status": "plyaz-db migrate status",
|
|
202
|
+
"db:migrate:verify": "plyaz-db migrate verify",
|
|
203
|
+
"db:migrate:generate-down": "plyaz-db migrate generate-down",
|
|
204
|
+
"db:migrate:generate-down:write": "plyaz-db migrate generate-down --write",
|
|
205
|
+
"db:seed": "plyaz-db seed run",
|
|
206
|
+
"db:seed:status": "plyaz-db seed status",
|
|
207
|
+
"db:seed:reset": "plyaz-db seed reset --confirm",
|
|
208
|
+
"db:health": "plyaz-db health",
|
|
209
|
+
"db:create:migration": "plyaz-db create migration",
|
|
210
|
+
"db:create:migration:ts": "plyaz-db create migration -t ts",
|
|
211
|
+
"db:create:migration:i": "plyaz-db create migration -i",
|
|
212
|
+
"db:create:seed": "plyaz-db create seed",
|
|
213
|
+
"db:create:seed:sql": "plyaz-db create seed -t sql",
|
|
214
|
+
"db:create:seed:csv": "plyaz-db create seed -t csv",
|
|
215
|
+
"db:create:seed:i": "plyaz-db create seed -i",
|
|
216
|
+
"db:reset": "plyaz-db reset --confirm --drop-schemas --migrate --schemas public,backoffice ",
|
|
217
|
+
"db:clear": "plyaz-db clear --confirm --schemas public,backoffice,audit",
|
|
218
|
+
"db:drop": "plyaz-db drop --confirm --all --schemas public,backoffice,audit",
|
|
145
219
|
"audit": "pnpm audit",
|
|
146
220
|
"audit:moderate": "pnpm audit --audit-level moderate",
|
|
147
221
|
"audit:high": "pnpm audit --audit-level high",
|
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
import { type DatabaseServiceInterface, type Transaction } from '@plyaz/types/db';
|
|
2
|
-
/**
|
|
3
|
-
* DatabaseConnectionManager - Singleton manager for feature flag database connections
|
|
4
|
-
*
|
|
5
|
-
* @description Manages Supabase database connections for the feature flag system using a singleton pattern.
|
|
6
|
-
* Handles connection initialization, table registration, transactions, and cleanup. This is the core
|
|
7
|
-
* database layer that all feature flag operations depend on.
|
|
8
|
-
*
|
|
9
|
-
* **Initialization Flow:**
|
|
10
|
-
* 1. FeatureFlagService calls initialize() during onModuleInit()
|
|
11
|
-
* 2. Reads Supabase credentials from environment variables
|
|
12
|
-
* 3. Creates database service with @plyaz/db
|
|
13
|
-
* 4. Registers feature flag tables
|
|
14
|
-
* 5. Enables caching and other optimizations
|
|
15
|
-
*
|
|
16
|
-
* **Required Environment Variables:**
|
|
17
|
-
* - SUPABASE_URL: Your Supabase project URL
|
|
18
|
-
* - SUPABASE_SERVICE_ROLE_KEY: Service role key for admin operations
|
|
19
|
-
* - SUPABASE_ANON_PUBLIC_KEY: Anonymous key for public operations
|
|
20
|
-
*
|
|
21
|
-
* @example Environment Setup (.env.local)
|
|
22
|
-
* ```bash
|
|
23
|
-
* SUPABASE_URL=https://your-project.supabase.co
|
|
24
|
-
* SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|
25
|
-
* SUPABASE_ANON_PUBLIC_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* @example Basic Usage (Internal - called by FeatureFlagService)
|
|
29
|
-
* ```typescript
|
|
30
|
-
* // During system initialization:
|
|
31
|
-
* const manager = DatabaseConnectionManager.getInstance();
|
|
32
|
-
* await manager.initialize();
|
|
33
|
-
*
|
|
34
|
-
* // During runtime operations:
|
|
35
|
-
* const db = manager.getDatabase();
|
|
36
|
-
* const flags = await db.query('feature_flags', { limit: 100 });
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* @example Transaction Usage
|
|
40
|
-
* ```typescript
|
|
41
|
-
* const manager = DatabaseConnectionManager.getInstance();
|
|
42
|
-
*
|
|
43
|
-
* // Atomic flag creation with rules
|
|
44
|
-
* const result = await manager.transaction(async (tx) => {
|
|
45
|
-
* // Create flag
|
|
46
|
-
* const flag = await tx.create('feature_flags', {
|
|
47
|
-
* key: 'NEW_FEATURE',
|
|
48
|
-
* value: true,
|
|
49
|
-
* is_enabled: true
|
|
50
|
-
* });
|
|
51
|
-
*
|
|
52
|
-
* // Create associated rule
|
|
53
|
-
* const rule = await tx.create('feature_flag_rules', {
|
|
54
|
-
* flag_key: 'NEW_FEATURE',
|
|
55
|
-
* name: 'Premium Users Only',
|
|
56
|
-
* conditions: [{ field: 'userRole', operator: 'equals', value: 'premium' }]
|
|
57
|
-
* });
|
|
58
|
-
*
|
|
59
|
-
* return { flag, rule };
|
|
60
|
-
* });
|
|
61
|
-
* ```
|
|
62
|
-
*
|
|
63
|
-
*/
|
|
64
|
-
export declare class DatabaseConnectionManager {
|
|
65
|
-
private static instance;
|
|
66
|
-
private databaseService;
|
|
67
|
-
private constructor();
|
|
68
|
-
/**
|
|
69
|
-
* Gets the singleton instance of DatabaseConnectionManager
|
|
70
|
-
*
|
|
71
|
-
* @description Returns the single instance of the connection manager, creating it if it doesn't exist.
|
|
72
|
-
* This ensures only one database connection pool is maintained across the application.
|
|
73
|
-
*
|
|
74
|
-
* @returns {DatabaseConnectionManager} The singleton instance
|
|
75
|
-
*
|
|
76
|
-
* @example Getting the Instance
|
|
77
|
-
* ```typescript
|
|
78
|
-
* // Always returns the same instance
|
|
79
|
-
* const manager1 = DatabaseConnectionManager.getInstance();
|
|
80
|
-
* const manager2 = DatabaseConnectionManager.getInstance();
|
|
81
|
-
* console.log(manager1 === manager2); // true
|
|
82
|
-
*
|
|
83
|
-
* // Use in services
|
|
84
|
-
* class FeatureFlagRepository {
|
|
85
|
-
* private connectionManager = DatabaseConnectionManager.getInstance();
|
|
86
|
-
*
|
|
87
|
-
* async getFlags() {
|
|
88
|
-
* const db = this.connectionManager.getDatabase();
|
|
89
|
-
* return db.query('feature_flags');
|
|
90
|
-
* }
|
|
91
|
-
* }
|
|
92
|
-
* ```
|
|
93
|
-
*/
|
|
94
|
-
static getInstance(): DatabaseConnectionManager;
|
|
95
|
-
/**
|
|
96
|
-
* Initializes the database connection and registers feature flag tables
|
|
97
|
-
*
|
|
98
|
-
* @description Sets up the Supabase connection using environment variables and registers
|
|
99
|
-
* all feature flag related tables. This method is idempotent - calling it multiple
|
|
100
|
-
* times won't create additional connections.
|
|
101
|
-
*
|
|
102
|
-
* **What it does:**
|
|
103
|
-
* 1. Validates required environment variables
|
|
104
|
-
* 2. Creates Supabase database service
|
|
105
|
-
* 3. Configures caching (5-minute TTL)
|
|
106
|
-
* 4. Registers feature flag tables with proper ID columns
|
|
107
|
-
* 5. Disables audit logging (until tables are created)
|
|
108
|
-
*
|
|
109
|
-
* @throws {DatabaseError} When environment variables are missing or connection fails
|
|
110
|
-
*
|
|
111
|
-
* @example Initialization Process
|
|
112
|
-
* ```typescript
|
|
113
|
-
* // Called automatically by FeatureFlagService.onModuleInit()
|
|
114
|
-
* const manager = DatabaseConnectionManager.getInstance();
|
|
115
|
-
*
|
|
116
|
-
* try {
|
|
117
|
-
* await manager.initialize();
|
|
118
|
-
* console.log('Database connection established');
|
|
119
|
-
* } catch (error) {
|
|
120
|
-
* console.error('Failed to connect to database:', error.message);
|
|
121
|
-
* // Error: Missing environment variables for Supabase connection
|
|
122
|
-
* }
|
|
123
|
-
* ```
|
|
124
|
-
*
|
|
125
|
-
* @example Environment Variable Validation
|
|
126
|
-
* ```typescript
|
|
127
|
-
* // If any of these are missing, initialization fails:
|
|
128
|
-
* // SUPABASE_URL=undefined
|
|
129
|
-
* // SUPABASE_SERVICE_ROLE_KEY=undefined
|
|
130
|
-
* // SUPABASE_ANON_PUBLIC_KEY=undefined
|
|
131
|
-
*
|
|
132
|
-
* // Throws: DatabaseError with code CONFIG_REQUIRED
|
|
133
|
-
* ```
|
|
134
|
-
*
|
|
135
|
-
* @example Registered Tables
|
|
136
|
-
* ```typescript
|
|
137
|
-
* // These tables are automatically registered:
|
|
138
|
-
* // - feature_flags (ID: key)
|
|
139
|
-
* // - feature_flag_rules (ID: id)
|
|
140
|
-
* // - feature_flag_overrides (ID: id)
|
|
141
|
-
* // - feature_flag_evaluations (ID: id)
|
|
142
|
-
* ```
|
|
143
|
-
*/
|
|
144
|
-
initialize(): Promise<void>;
|
|
145
|
-
/**
|
|
146
|
-
* Gets the initialized database service instance
|
|
147
|
-
*
|
|
148
|
-
* @description Returns the database service for performing queries. The database must be
|
|
149
|
-
* initialized first using initialize() method, otherwise this will throw an error.
|
|
150
|
-
*
|
|
151
|
-
* @returns {DatabaseServiceInterface} The database service instance
|
|
152
|
-
* @throws {DatabaseError} When database is not initialized
|
|
153
|
-
*
|
|
154
|
-
* @example Basic Usage
|
|
155
|
-
* ```typescript
|
|
156
|
-
* const manager = DatabaseConnectionManager.getInstance();
|
|
157
|
-
* await manager.initialize(); // Must initialize first
|
|
158
|
-
*
|
|
159
|
-
* const db = manager.getDatabase();
|
|
160
|
-
*
|
|
161
|
-
* // Query feature flags
|
|
162
|
-
* const result = await db.query('feature_flags', {
|
|
163
|
-
* filters: [{ field: 'is_enabled', operator: 'eq', value: true }],
|
|
164
|
-
* sort: [{ field: 'key', direction: 'asc' }]
|
|
165
|
-
* });
|
|
166
|
-
*
|
|
167
|
-
* if (result.success) {
|
|
168
|
-
* console.log('Found flags:', result.value.data);
|
|
169
|
-
* }
|
|
170
|
-
* ```
|
|
171
|
-
*
|
|
172
|
-
* @example Error Handling
|
|
173
|
-
* ```typescript
|
|
174
|
-
* const manager = DatabaseConnectionManager.getInstance();
|
|
175
|
-
* // Don't call initialize()
|
|
176
|
-
*
|
|
177
|
-
* try {
|
|
178
|
-
* const db = manager.getDatabase();
|
|
179
|
-
* } catch (error) {
|
|
180
|
-
* console.error(error.message);
|
|
181
|
-
* // "Database not initialized. Call initialize() first."
|
|
182
|
-
* }
|
|
183
|
-
* ```
|
|
184
|
-
*
|
|
185
|
-
* @example CRUD Operations
|
|
186
|
-
* ```typescript
|
|
187
|
-
* const db = manager.getDatabase();
|
|
188
|
-
*
|
|
189
|
-
* // Create a flag
|
|
190
|
-
* const createResult = await db.create('feature_flags', {
|
|
191
|
-
* key: 'NEW_FEATURE',
|
|
192
|
-
* value: true,
|
|
193
|
-
* is_enabled: true
|
|
194
|
-
* });
|
|
195
|
-
*
|
|
196
|
-
* // Update a flag
|
|
197
|
-
* const updateResult = await db.update('feature_flags', 'NEW_FEATURE', {
|
|
198
|
-
* value: false
|
|
199
|
-
* });
|
|
200
|
-
*
|
|
201
|
-
* // Delete a flag
|
|
202
|
-
* const deleteResult = await db.delete('feature_flags', 'NEW_FEATURE');
|
|
203
|
-
* ```
|
|
204
|
-
*/
|
|
205
|
-
getDatabase(): DatabaseServiceInterface;
|
|
206
|
-
/**
|
|
207
|
-
* Executes a database transaction with automatic rollback on failure
|
|
208
|
-
*
|
|
209
|
-
* @description Provides atomic database operations by wrapping multiple queries in a transaction.
|
|
210
|
-
* If any operation fails, all changes are rolled back automatically. This is essential for
|
|
211
|
-
* maintaining data consistency when creating flags with rules or performing bulk operations.
|
|
212
|
-
*
|
|
213
|
-
* @template T The return type of the transaction callback
|
|
214
|
-
* @param {Function} callback - Function that receives transaction object and performs operations
|
|
215
|
-
* @returns {Promise<T>} The result of the transaction callback
|
|
216
|
-
* @throws {DatabaseError} When transaction fails or returns no value
|
|
217
|
-
*
|
|
218
|
-
* @example Atomic Flag Creation with Rules
|
|
219
|
-
* ```typescript
|
|
220
|
-
* const manager = DatabaseConnectionManager.getInstance();
|
|
221
|
-
*
|
|
222
|
-
* const result = await manager.transaction(async (tx) => {
|
|
223
|
-
* // Create the flag
|
|
224
|
-
* const flag = await tx.create('feature_flags', {
|
|
225
|
-
* key: 'PREMIUM_CHECKOUT',
|
|
226
|
-
* value: true,
|
|
227
|
-
* is_enabled: true,
|
|
228
|
-
* description: 'Premium checkout flow'
|
|
229
|
-
* });
|
|
230
|
-
*
|
|
231
|
-
* // Create targeting rule
|
|
232
|
-
* const rule = await tx.create('feature_flag_rules', {
|
|
233
|
-
* flag_key: 'PREMIUM_CHECKOUT',
|
|
234
|
-
* name: 'Premium Users Only',
|
|
235
|
-
* conditions: [
|
|
236
|
-
* { field: 'userRole', operator: 'equals', value: 'premium' },
|
|
237
|
-
* { field: 'subscriptionActive', operator: 'equals', value: true }
|
|
238
|
-
* ],
|
|
239
|
-
* value: true,
|
|
240
|
-
* priority: 100
|
|
241
|
-
* });
|
|
242
|
-
*
|
|
243
|
-
* return { flag, rule };
|
|
244
|
-
* });
|
|
245
|
-
*
|
|
246
|
-
* console.log('Created flag and rule:', result);
|
|
247
|
-
* ```
|
|
248
|
-
*
|
|
249
|
-
* @example Bulk Flag Updates
|
|
250
|
-
* ```typescript
|
|
251
|
-
* const flagsToUpdate = ['FEATURE_A', 'FEATURE_B', 'FEATURE_C'];
|
|
252
|
-
*
|
|
253
|
-
* await manager.transaction(async (tx) => {
|
|
254
|
-
* for (const flagKey of flagsToUpdate) {
|
|
255
|
-
* await tx.update('feature_flags', flagKey, {
|
|
256
|
-
* is_enabled: false,
|
|
257
|
-
* updated_at: new Date().toISOString()
|
|
258
|
-
* });
|
|
259
|
-
* }
|
|
260
|
-
*
|
|
261
|
-
* // Log the bulk update
|
|
262
|
-
* await tx.create('feature_flag_evaluations', {
|
|
263
|
-
* flag_key: 'BULK_UPDATE',
|
|
264
|
-
* result: { updatedFlags: flagsToUpdate },
|
|
265
|
-
* reason: 'bulk_disable',
|
|
266
|
-
* evaluated_at: new Date().toISOString()
|
|
267
|
-
* });
|
|
268
|
-
* });
|
|
269
|
-
* ```
|
|
270
|
-
*
|
|
271
|
-
* @example Error Handling and Rollback
|
|
272
|
-
* ```typescript
|
|
273
|
-
* try {
|
|
274
|
-
* await manager.transaction(async (tx) => {
|
|
275
|
-
* await tx.create('feature_flags', { key: 'TEST_FLAG', value: true });
|
|
276
|
-
*
|
|
277
|
-
* // This will cause the entire transaction to rollback
|
|
278
|
-
* throw new Error('Something went wrong');
|
|
279
|
-
*
|
|
280
|
-
* // This won't execute, and the flag creation above will be rolled back
|
|
281
|
-
* await tx.create('feature_flag_rules', { flag_key: 'TEST_FLAG' });
|
|
282
|
-
* });
|
|
283
|
-
* } catch (error) {
|
|
284
|
-
* console.log('Transaction failed, all changes rolled back');
|
|
285
|
-
* }
|
|
286
|
-
* ```
|
|
287
|
-
*/
|
|
288
|
-
transaction<T>(callback: (tx: Transaction) => Promise<T>): Promise<T>;
|
|
289
|
-
/**
|
|
290
|
-
* Closes the database connection and cleans up resources
|
|
291
|
-
*
|
|
292
|
-
* @description Properly closes the database connection and resets the singleton instance.
|
|
293
|
-
* This is typically called during application shutdown or in tests that need to reset
|
|
294
|
-
* the connection state.
|
|
295
|
-
*
|
|
296
|
-
* @example Application Shutdown
|
|
297
|
-
* ```typescript
|
|
298
|
-
* // In your NestJS module's onModuleDestroy
|
|
299
|
-
* export class FeatureFlagModule implements OnModuleDestroy {
|
|
300
|
-
* async onModuleDestroy() {
|
|
301
|
-
* const manager = DatabaseConnectionManager.getInstance();
|
|
302
|
-
* await manager.close();
|
|
303
|
-
* console.log('Database connection closed');
|
|
304
|
-
* }
|
|
305
|
-
* }
|
|
306
|
-
* ```
|
|
307
|
-
*
|
|
308
|
-
* @example Test Cleanup
|
|
309
|
-
* ```typescript
|
|
310
|
-
* describe('Feature Flag Tests', () => {
|
|
311
|
-
* afterEach(async () => {
|
|
312
|
-
* // Clean up connection between tests
|
|
313
|
-
* const manager = DatabaseConnectionManager.getInstance();
|
|
314
|
-
* await manager.close();
|
|
315
|
-
* });
|
|
316
|
-
* });
|
|
317
|
-
* ```
|
|
318
|
-
*/
|
|
319
|
-
close(): Promise<void>;
|
|
320
|
-
}
|
|
321
|
-
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/database/connection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,wBAAwB,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEjG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IACnD,OAAO,CAAC,eAAe,CAAyC;IAEhE,OAAO;IAEP;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4DjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2DG;IACH,WAAW,IAAI,wBAAwB;IAUvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiFG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAe3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
|