@plyaz/types 1.19.4 → 1.20.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 (50) hide show
  1. package/dist/api/client/types.d.ts +59 -0
  2. package/dist/api/index.cjs +29 -0
  3. package/dist/api/index.cjs.map +1 -1
  4. package/dist/api/index.js +29 -0
  5. package/dist/api/index.js.map +1 -1
  6. package/dist/core/auth/types.d.ts +1 -1
  7. package/dist/core/domain/index.d.ts +5 -0
  8. package/dist/core/domain/types.d.ts +123 -0
  9. package/dist/core/events/enums.d.ts +25 -1
  10. package/dist/core/events/index.d.ts +3 -3
  11. package/dist/core/events/payloads.d.ts +80 -1
  12. package/dist/core/featureFlag/types.d.ts +16 -16
  13. package/dist/core/frontend/featureFlags.d.ts +106 -0
  14. package/dist/core/frontend/index.d.ts +6 -0
  15. package/dist/core/frontend/types.d.ts +318 -0
  16. package/dist/core/index.d.ts +6 -2
  17. package/dist/core/init/index.d.ts +5 -0
  18. package/dist/core/init/types.d.ts +347 -0
  19. package/dist/core/modules.d.ts +19 -3
  20. package/dist/core/services/index.d.ts +5 -0
  21. package/dist/core/{services.d.ts → services/types.d.ts} +74 -6
  22. package/dist/errors/codes.d.ts +3 -0
  23. package/dist/errors/index.cjs +29 -0
  24. package/dist/errors/index.cjs.map +1 -1
  25. package/dist/errors/index.d.ts +2 -0
  26. package/dist/errors/index.js +29 -0
  27. package/dist/errors/index.js.map +1 -1
  28. package/dist/errors/middleware.d.ts +105 -0
  29. package/dist/errors/store.d.ts +140 -0
  30. package/dist/examples/index.d.ts +1 -1
  31. package/dist/examples/types.d.ts +64 -0
  32. package/dist/features/feature-flag/dto.types.d.ts +67 -0
  33. package/dist/features/feature-flag/index.d.ts +3 -0
  34. package/dist/features/feature-flag/service.types.d.ts +184 -0
  35. package/dist/features/feature-flag/store.types.d.ts +166 -0
  36. package/dist/features/feature-flag/types.d.ts +16 -4
  37. package/dist/globals.d.ts +23 -0
  38. package/dist/index.cjs +49 -0
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.js +49 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/store/index.cjs +13 -0
  43. package/dist/store/index.cjs.map +1 -1
  44. package/dist/store/index.d.ts +2 -0
  45. package/dist/store/index.js +11 -0
  46. package/dist/store/index.js.map +1 -1
  47. package/dist/store/keys.d.ts +23 -0
  48. package/dist/store/types.d.ts +62 -71
  49. package/dist/testing/features/feature-flags/types.d.ts +3 -3
  50. package/package.json +6 -2
@@ -8,7 +8,7 @@ declare const Role: {
8
8
  Publisher: string;
9
9
  Scout: string;
10
10
  };
11
- export interface DBUser {
11
+ export interface CoreDBUser {
12
12
  email: string;
13
13
  password_hash: string;
14
14
  clerk_user_id: string;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Core Domain Types
3
+ * Type definitions for @plyaz/core domain services
4
+ */
5
+ export type { CoreBaseDomainServiceInterface, CoreEventSubscribable, CoreProviderSubscribable, CoreValidationResult, CoreValidatorConfig, CoreBaseValidatorInstance, CoreBaseMapperInstance, CoreBaseDomainServiceConfig, CoreMapperClass, CoreValidatorClass, CoreBaseServiceConfig, } from './types';
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Base Domain Service Interfaces
3
+ *
4
+ * Interfaces for domain services that consumers can code against.
5
+ * Use these for dependency injection and type-checking.
6
+ */
7
+ import type { ValidationIssue, InternalValidationSchema } from '../../errors';
8
+ import type { FeatureFlagValue } from '../../features';
9
+ import type { CoreServiceRuntime } from '../modules';
10
+ import type { ApiClientOptions } from '../../api';
11
+ /**
12
+ * Base interface for all domain services.
13
+ *
14
+ * Provides lifecycle management and configuration access.
15
+ * All domain services (backend and frontend) implement this.
16
+ */
17
+ export interface CoreBaseDomainServiceInterface {
18
+ /** Check if service is available and ready to use */
19
+ isAvailable(): boolean;
20
+ /** Dispose/cleanup the service and release resources */
21
+ dispose(): void;
22
+ /** Whether the service is enabled via config */
23
+ readonly isServiceEnabled: boolean;
24
+ /** Whether the service has been initialized */
25
+ readonly isInitialized: boolean;
26
+ }
27
+ /**
28
+ * Interface for services that support event subscription.
29
+ */
30
+ export interface CoreEventSubscribable<TEventType extends string = string> {
31
+ /** Subscribe to service events */
32
+ on(event: TEventType, handler: (data: unknown) => void): () => void;
33
+ }
34
+ /**
35
+ * Interface for services that support provider subscription.
36
+ */
37
+ export interface CoreProviderSubscribable {
38
+ /** Subscribe to provider/data changes */
39
+ subscribe(callback: () => void): () => void;
40
+ }
41
+ /**
42
+ * Validation result type
43
+ */
44
+ export interface CoreValidationResult<T> {
45
+ success: boolean;
46
+ data?: T;
47
+ errors?: ValidationIssue[];
48
+ }
49
+ /**
50
+ * Validator configuration
51
+ */
52
+ export interface CoreValidatorConfig<TCreate = unknown, TUpdate = unknown, TPatch = unknown, TDelete = unknown, TQuery = unknown> {
53
+ createSchema?: InternalValidationSchema<TCreate>;
54
+ updateSchema?: InternalValidationSchema<TUpdate>;
55
+ patchSchema?: InternalValidationSchema<TPatch>;
56
+ deleteSchema?: InternalValidationSchema<TDelete>;
57
+ querySchema?: InternalValidationSchema<TQuery>;
58
+ }
59
+ /**
60
+ * Base Validator interface
61
+ */
62
+ export interface CoreBaseValidatorInstance<TCreate = unknown, TUpdate = unknown, TPatch = unknown, TDelete = unknown, TQuery = unknown> {
63
+ validateCreate(data: unknown): CoreValidationResult<TCreate>;
64
+ validateUpdate(data: unknown): CoreValidationResult<TUpdate>;
65
+ validatePatch(data: unknown): CoreValidationResult<TPatch>;
66
+ validateDelete(data: unknown): CoreValidationResult<TDelete>;
67
+ validateQuery(data: unknown): CoreValidationResult<TQuery>;
68
+ validateCreateOrThrow(data: unknown): TCreate;
69
+ validateUpdateOrThrow(data: unknown): TUpdate;
70
+ validatePatchOrThrow(data: unknown): TPatch;
71
+ validateDeleteOrThrow(data: unknown): TDelete;
72
+ validateQueryOrThrow(data: unknown): TQuery;
73
+ }
74
+ /**
75
+ * Base mapper interface defining all mapping concerns
76
+ */
77
+ export interface CoreBaseMapperInstance<TDomain = unknown, TResponseDTO = unknown, TCreateDTO = unknown, TUpdateDTO = TCreateDTO, TPatchDTO = Partial<TCreateDTO>, TQueryDTO = unknown, TStoreState = TDomain> {
78
+ toDomain(dto: TResponseDTO): TDomain;
79
+ toDomainList(dtos: TResponseDTO[]): TDomain[];
80
+ toCreateDTO?(data: Partial<TDomain>): TCreateDTO;
81
+ toUpdateDTO?(data: Partial<TDomain>): TUpdateDTO;
82
+ toPatchDTO?(data: Partial<TDomain>): TPatchDTO;
83
+ toQueryDTO?(filters: Partial<TQueryDTO>): TQueryDTO;
84
+ toStoreState(domain: TDomain): TStoreState;
85
+ toStoreStateList?(domains: TDomain[]): Partial<TStoreState>;
86
+ fromStoreState(state: TStoreState): TDomain;
87
+ }
88
+ /**
89
+ * Base configuration interface for all domain services
90
+ */
91
+ export interface CoreBaseDomainServiceConfig {
92
+ /** Whether the service is enabled (default: true) */
93
+ enabled?: boolean;
94
+ /** Default values for feature flags or other defaults */
95
+ defaults?: Record<string, FeatureFlagValue>;
96
+ }
97
+ /**
98
+ * Type for mapper class constructor
99
+ */
100
+ export type CoreMapperClass<T extends CoreBaseMapperInstance<unknown, unknown> = CoreBaseMapperInstance<unknown, unknown>> = new () => T;
101
+ /**
102
+ * Type for validator class constructor
103
+ */
104
+ export type CoreValidatorClass<T extends CoreBaseValidatorInstance = CoreBaseValidatorInstance> = new () => T;
105
+ /**
106
+ * Base service configuration passed to constructor
107
+ */
108
+ export interface CoreBaseServiceConfig<TConfig extends CoreBaseDomainServiceConfig = CoreBaseDomainServiceConfig, TMapper extends CoreBaseMapperInstance<unknown, unknown> = CoreBaseMapperInstance<unknown, unknown>, TValidator extends CoreBaseValidatorInstance = CoreBaseValidatorInstance> {
109
+ /** Service name for logging and error messages */
110
+ serviceName: string;
111
+ /** Supported runtimes for this service */
112
+ supportedRuntimes: readonly CoreServiceRuntime[];
113
+ /** Service-specific configuration */
114
+ serviceConfig: TConfig;
115
+ /** API client configuration (optional - for frontend services) */
116
+ apiClientConfig?: ApiClientOptions;
117
+ /** Set this API client as the default for all fetchers */
118
+ setAsDefaultClient?: boolean;
119
+ /** Mapper class for API response transformations */
120
+ mapperClass?: CoreMapperClass<TMapper>;
121
+ /** Validator class for input validation */
122
+ validatorClass?: CoreValidatorClass<TValidator>;
123
+ }
@@ -26,6 +26,7 @@ export declare const CoreEventScope: {
26
26
  readonly API: "api";
27
27
  readonly CACHE: "cache";
28
28
  readonly AUTH: "auth";
29
+ readonly DATABASE: "database";
29
30
  readonly FEATURE_FLAG: "featureFlag";
30
31
  readonly STORE: "store";
31
32
  };
@@ -104,6 +105,18 @@ export declare const AuthEventAction: {
104
105
  readonly SESSION_EXPIRED: "sessionExpired";
105
106
  readonly UNAUTHORIZED: "unauthorized";
106
107
  };
108
+ /**
109
+ * Database event actions
110
+ */
111
+ export declare const DatabaseEventAction: {
112
+ readonly CONNECTED: "connected";
113
+ readonly DISCONNECTED: "disconnected";
114
+ readonly QUERY: "query";
115
+ readonly ERROR: "error";
116
+ readonly TRANSACTION_START: "transactionStart";
117
+ readonly TRANSACTION_COMMIT: "transactionCommit";
118
+ readonly TRANSACTION_ROLLBACK: "transactionRollback";
119
+ };
107
120
  /**
108
121
  * Feature flag event actions
109
122
  */
@@ -183,6 +196,15 @@ export declare const CORE_EVENTS: {
183
196
  readonly SESSION_EXPIRED: "auth:sessionExpired";
184
197
  readonly UNAUTHORIZED: "auth:unauthorized";
185
198
  };
199
+ readonly DATABASE: {
200
+ readonly CONNECTED: "database:connected";
201
+ readonly DISCONNECTED: "database:disconnected";
202
+ readonly QUERY: "database:query";
203
+ readonly ERROR: "database:error";
204
+ readonly TRANSACTION_START: "database:transactionStart";
205
+ readonly TRANSACTION_COMMIT: "database:transactionCommit";
206
+ readonly TRANSACTION_ROLLBACK: "database:transactionRollback";
207
+ };
186
208
  readonly FEATURE_FLAG: {
187
209
  readonly CHANGED: "featureFlag:changed";
188
210
  readonly EVALUATED: "featureFlag:evaluated";
@@ -208,6 +230,8 @@ export type ApiEventType = (typeof CORE_EVENTS.API)[keyof typeof CORE_EVENTS.API
208
230
  export type CacheEventType = (typeof CORE_EVENTS.CACHE)[keyof typeof CORE_EVENTS.CACHE];
209
231
  /** All auth event types */
210
232
  export type AuthEventType = (typeof CORE_EVENTS.AUTH)[keyof typeof CORE_EVENTS.AUTH];
233
+ /** All database event types */
234
+ export type DatabaseEventType = (typeof CORE_EVENTS.DATABASE)[keyof typeof CORE_EVENTS.DATABASE];
211
235
  /** All feature flag event types */
212
236
  export type FeatureFlagEventType = (typeof CORE_EVENTS.FEATURE_FLAG)[keyof typeof CORE_EVENTS.FEATURE_FLAG];
213
237
  /** All store event types */
@@ -215,4 +239,4 @@ export type StoreEventType = (typeof CORE_EVENTS.STORE)[keyof typeof CORE_EVENTS
215
239
  /**
216
240
  * Union of all core event types
217
241
  */
218
- export type CoreEventType = SystemEventType | EntityEventType | ValidationEventType | SanitizationEventType | ApiEventType | CacheEventType | AuthEventType | FeatureFlagEventType | StoreEventType;
242
+ export type CoreEventType = SystemEventType | EntityEventType | ValidationEventType | SanitizationEventType | ApiEventType | CacheEventType | AuthEventType | DatabaseEventType | FeatureFlagEventType | StoreEventType;
@@ -17,6 +17,6 @@
17
17
  * );
18
18
  * ```
19
19
  */
20
- export { CoreEventScope, SystemEventAction, EntityEventAction, ValidationEventAction, SanitizationEventAction, ApiEventAction, CacheEventAction, AuthEventAction, FeatureFlagEventAction, StoreEventAction, CORE_EVENTS, } from './enums';
21
- export type { CoreEventScopeType, SystemEventType, EntityEventType, ValidationEventType, SanitizationEventType, ApiEventType, CacheEventType, AuthEventType, FeatureFlagEventType, StoreEventType, CoreEventType, } from './enums';
22
- export type { CoreCrudOperation, CoreValidationStartedPayload, CoreValidationSuccessPayload, CoreValidationFailedPayload, CoreSanitizationStartedPayload, CoreSanitizationSuccessPayload, CoreSanitizationFailedPayload, CoreEntityCreatedPayload, CoreEntityUpdatedPayload, CoreEntityPatchedPayload, CoreEntityDeletedPayload, CoreEntityCreatingPayload, CoreEntityUpdatingPayload, CoreEntityPatchingPayload, CoreEntityDeletingPayload, CoreEntityErrorPayload, CoreEntityCompletePayload, CoreBulkCreatedPayload, CoreBulkDeletedPayload, CoreSystemInitializedPayload, CoreSystemReadyPayload, CoreSystemShutdownPayload, CoreSystemErrorPayload, CoreSystemWarningPayload, CoreApiRequestStartPayload, CoreApiRequestSuccessPayload, CoreApiRequestErrorPayload, CoreApiRetryPayload, CoreApiTimeoutPayload, CoreCacheHitPayload, CoreCacheMissPayload, CoreCacheSetPayload, CoreCacheDeletePayload, CoreCacheClearPayload, CoreCacheExpiredPayload, CoreAuthLoginPayload, CoreAuthLogoutPayload, CoreAuthTokenRefreshPayload, CoreAuthSessionExpiredPayload, CoreAuthUnauthorizedPayload, CoreFeatureFlagChangedPayload, CoreFeatureFlagEvaluatedPayload, CoreFeatureFlagRefreshedPayload, CoreStoreUpdatedPayload, CoreStoreResetPayload, CoreStoreHydratedPayload, CoreEventPayloadMap, } from './payloads';
20
+ export { CoreEventScope, SystemEventAction, EntityEventAction, ValidationEventAction, SanitizationEventAction, ApiEventAction, CacheEventAction, AuthEventAction, DatabaseEventAction, FeatureFlagEventAction, StoreEventAction, CORE_EVENTS, } from './enums';
21
+ export type { CoreEventScopeType, SystemEventType, EntityEventType, ValidationEventType, SanitizationEventType, ApiEventType, CacheEventType, AuthEventType, DatabaseEventType, FeatureFlagEventType, StoreEventType, CoreEventType, } from './enums';
22
+ export type { CoreEvent, CoreCrudOperation, CoreValidationStartedPayload, CoreValidationSuccessPayload, CoreValidationFailedPayload, CoreSanitizationStartedPayload, CoreSanitizationSuccessPayload, CoreSanitizationFailedPayload, CoreEntityCreatedPayload, CoreEntityUpdatedPayload, CoreEntityPatchedPayload, CoreEntityDeletedPayload, CoreEntityCreatingPayload, CoreEntityUpdatingPayload, CoreEntityPatchingPayload, CoreEntityDeletingPayload, CoreEntityErrorPayload, CoreEntityCompletePayload, CoreBulkCreatedPayload, CoreBulkDeletedPayload, CoreSystemInitializedPayload, CoreSystemReadyPayload, CoreSystemShutdownPayload, CoreSystemErrorPayload, CoreSystemWarningPayload, CoreApiRequestStartPayload, CoreApiRequestSuccessPayload, CoreApiRequestErrorPayload, CoreApiRetryPayload, CoreApiTimeoutPayload, CoreCacheHitPayload, CoreCacheMissPayload, CoreCacheSetPayload, CoreCacheDeletePayload, CoreCacheClearPayload, CoreCacheExpiredPayload, CoreDatabaseConnectedPayload, CoreDatabaseDisconnectedPayload, CoreDatabaseQueryPayload, CoreDatabaseErrorPayload, CoreDatabaseTransactionStartPayload, CoreDatabaseTransactionCommitPayload, CoreDatabaseTransactionRollbackPayload, CoreAuthLoginPayload, CoreAuthLogoutPayload, CoreAuthTokenRefreshPayload, CoreAuthSessionExpiredPayload, CoreAuthUnauthorizedPayload, CoreFeatureFlagChangedPayload, CoreFeatureFlagEvaluatedPayload, CoreFeatureFlagRefreshedPayload, CoreStoreUpdatedPayload, CoreStoreResetPayload, CoreStoreHydratedPayload, CoreEventPayloadMap, } from './payloads';
@@ -12,6 +12,21 @@
12
12
  * }
13
13
  * ```
14
14
  */
15
+ import type { CORE_EVENTS } from './enums';
16
+ import type { PackageErrorLike } from '../../errors';
17
+ /**
18
+ * Core event structure
19
+ *
20
+ * @typeParam TData - Event payload type
21
+ * @typeParam TScope - Event scope type
22
+ */
23
+ export interface CoreEvent<TData = unknown, TScope extends string = string> {
24
+ type: string;
25
+ scope: TScope;
26
+ timestamp: number;
27
+ correlationId: string;
28
+ data: TData;
29
+ }
15
30
  /**
16
31
  * CRUD operation types
17
32
  */
@@ -289,6 +304,62 @@ export interface CoreCacheClearPayload {
289
304
  export interface CoreCacheExpiredPayload {
290
305
  key: string;
291
306
  }
307
+ /**
308
+ * Payload for database:connected events
309
+ */
310
+ export interface CoreDatabaseConnectedPayload {
311
+ adapter: string;
312
+ connectionTime: number;
313
+ }
314
+ /**
315
+ * Payload for database:disconnected events
316
+ */
317
+ export interface CoreDatabaseDisconnectedPayload {
318
+ adapter: string;
319
+ reason?: string;
320
+ graceful: boolean;
321
+ }
322
+ /**
323
+ * Payload for database:query events
324
+ */
325
+ export interface CoreDatabaseQueryPayload {
326
+ query: string;
327
+ table?: string;
328
+ operation: 'select' | 'insert' | 'update' | 'delete' | 'other';
329
+ duration: number;
330
+ rowCount?: number;
331
+ }
332
+ /**
333
+ * Payload for database:error events
334
+ */
335
+ export interface CoreDatabaseErrorPayload {
336
+ error: unknown;
337
+ query?: string;
338
+ table?: string;
339
+ operation?: string;
340
+ recoverable: boolean;
341
+ }
342
+ /**
343
+ * Payload for database:transactionStart events
344
+ */
345
+ export interface CoreDatabaseTransactionStartPayload {
346
+ transactionId: string;
347
+ }
348
+ /**
349
+ * Payload for database:transactionCommit events
350
+ */
351
+ export interface CoreDatabaseTransactionCommitPayload {
352
+ transactionId: string;
353
+ duration: number;
354
+ }
355
+ /**
356
+ * Payload for database:transactionRollback events
357
+ */
358
+ export interface CoreDatabaseTransactionRollbackPayload {
359
+ transactionId: string;
360
+ reason?: string;
361
+ error?: unknown;
362
+ }
292
363
  /**
293
364
  * Payload for auth:login events
294
365
  */
@@ -316,6 +387,7 @@ export interface CoreAuthTokenRefreshPayload {
316
387
  export interface CoreAuthSessionExpiredPayload {
317
388
  userId?: string;
318
389
  expiredAt: number;
390
+ error?: PackageErrorLike;
319
391
  }
320
392
  /**
321
393
  * Payload for auth:unauthorized events
@@ -323,6 +395,7 @@ export interface CoreAuthSessionExpiredPayload {
323
395
  export interface CoreAuthUnauthorizedPayload {
324
396
  resource?: string;
325
397
  action?: string;
398
+ error?: PackageErrorLike;
326
399
  }
327
400
  /**
328
401
  * Payload for featureFlag:changed events
@@ -369,7 +442,6 @@ export interface CoreStoreHydratedPayload {
369
442
  storeName: string;
370
443
  source: string;
371
444
  }
372
- import type { CORE_EVENTS } from './enums';
373
445
  /**
374
446
  * Maps event types to their payload types for type-safe event handling.
375
447
  *
@@ -422,6 +494,13 @@ export interface CoreEventPayloadMap {
422
494
  [CORE_EVENTS.CACHE.DELETE]: CoreCacheDeletePayload;
423
495
  [CORE_EVENTS.CACHE.CLEAR]: CoreCacheClearPayload;
424
496
  [CORE_EVENTS.CACHE.EXPIRED]: CoreCacheExpiredPayload;
497
+ [CORE_EVENTS.DATABASE.CONNECTED]: CoreDatabaseConnectedPayload;
498
+ [CORE_EVENTS.DATABASE.DISCONNECTED]: CoreDatabaseDisconnectedPayload;
499
+ [CORE_EVENTS.DATABASE.QUERY]: CoreDatabaseQueryPayload;
500
+ [CORE_EVENTS.DATABASE.ERROR]: CoreDatabaseErrorPayload;
501
+ [CORE_EVENTS.DATABASE.TRANSACTION_START]: CoreDatabaseTransactionStartPayload;
502
+ [CORE_EVENTS.DATABASE.TRANSACTION_COMMIT]: CoreDatabaseTransactionCommitPayload;
503
+ [CORE_EVENTS.DATABASE.TRANSACTION_ROLLBACK]: CoreDatabaseTransactionRollbackPayload;
425
504
  [CORE_EVENTS.AUTH.LOGIN]: CoreAuthLoginPayload;
426
505
  [CORE_EVENTS.AUTH.LOGOUT]: CoreAuthLogoutPayload;
427
506
  [CORE_EVENTS.AUTH.TOKEN_REFRESH]: CoreAuthTokenRefreshPayload;
@@ -5,7 +5,7 @@
5
5
  * including table schemas, query interfaces, and data transformation types.
6
6
  * These types ensure type safety across the entire database layer.
7
7
  */
8
- import type { FeatureFlagCondition, FeatureFlagConfig, FeatureFlagValue } from '../../features';
8
+ import type { FeatureFlagCondition, FeatureFlagConfig, FeatureFlagProviderType, FeatureFlagValue } from '../../features';
9
9
  import type { ApiClientWithEvents } from '../../api';
10
10
  /**
11
11
  * Feature flags for authentication providers and other features
@@ -31,7 +31,7 @@ export declare const FEATURES: {
31
31
  /**
32
32
  * Raw database row interface for feature flags table
33
33
  */
34
- export interface DatabaseFeatureFlagRow {
34
+ export interface CoreDatabaseFeatureFlagRow {
35
35
  key: string;
36
36
  value: FeatureFlagValue;
37
37
  isEnabled?: boolean;
@@ -46,7 +46,7 @@ export interface DatabaseFeatureFlagRow {
46
46
  /**
47
47
  * Raw database row interface for feature flag rules
48
48
  */
49
- export interface DatabaseFeatureFlagRuleRow {
49
+ export interface CoreDatabaseFeatureFlagRuleRow {
50
50
  id: string;
51
51
  flagKey: string;
52
52
  flag_key?: string;
@@ -60,7 +60,7 @@ export interface DatabaseFeatureFlagRuleRow {
60
60
  /**
61
61
  * Database override row interface
62
62
  */
63
- export interface DatabaseOverrideRow {
63
+ export interface CoreDatabaseOverrideRow {
64
64
  id: string;
65
65
  flag_key: string;
66
66
  user_id: string;
@@ -71,7 +71,7 @@ export interface DatabaseOverrideRow {
71
71
  /**
72
72
  * Database evaluation log row interface
73
73
  */
74
- export interface DatabaseEvaluationRow {
74
+ export interface CoreDatabaseEvaluationRow {
75
75
  id: string;
76
76
  flag_key: string;
77
77
  user_id?: string;
@@ -85,21 +85,21 @@ export interface DatabaseEvaluationRow {
85
85
  /**
86
86
  * Environment filter interface
87
87
  */
88
- export interface EnvironmentFilterRow {
88
+ export interface CoreEnvironmentFilterRow {
89
89
  environments?: string[];
90
90
  }
91
91
  /**
92
92
  * Validation result interface
93
93
  */
94
- export interface FeatureFlagValidationResult {
94
+ export interface CoreFeatureFlagValidationResult {
95
95
  isValid: boolean;
96
- errors: ValidationError[];
97
- warnings: ValidationWarning[];
96
+ errors: CoreFeatureFlagValidationError[];
97
+ warnings: CoreFeatureFlagValidationWarning[];
98
98
  }
99
99
  /**
100
100
  * Validation error interface
101
101
  */
102
- export interface ValidationError {
102
+ export interface CoreFeatureFlagValidationError {
103
103
  field: string;
104
104
  message: string;
105
105
  code: string;
@@ -107,7 +107,7 @@ export interface ValidationError {
107
107
  /**
108
108
  * Validation warning interface
109
109
  */
110
- export interface ValidationWarning {
110
+ export interface CoreFeatureFlagValidationWarning {
111
111
  field: string;
112
112
  message: string;
113
113
  code: string;
@@ -115,7 +115,7 @@ export interface ValidationWarning {
115
115
  /**
116
116
  * Database configuration interface
117
117
  */
118
- export interface FeatureFlagDatabaseConfig {
118
+ export interface CoreFeatureFlagDatabaseConfig {
119
119
  connectionString: string;
120
120
  tableName: string;
121
121
  poolSize?: number;
@@ -124,8 +124,8 @@ export interface FeatureFlagDatabaseConfig {
124
124
  /**
125
125
  * Environment-specific feature flag configuration
126
126
  */
127
- export interface FeatureFlagEnvironmentConfig extends Omit<FeatureFlagConfig<FeatureFlagKey>, 'databaseConfig'> {
128
- databaseConfig?: FeatureFlagDatabaseConfig;
127
+ export interface CoreFeatureFlagEnvironmentConfig extends Omit<FeatureFlagConfig<FeatureFlagKey>, 'databaseConfig'> {
128
+ databaseConfig?: CoreFeatureFlagDatabaseConfig;
129
129
  }
130
130
  /**
131
131
  * Union type of all available feature flag keys.
@@ -138,7 +138,7 @@ export type FeatureFlags = typeof FEATURES extends Record<FeatureFlagKey, Featur
138
138
  */
139
139
  export interface CoreFeatureFlagModuleConfig {
140
140
  /** Provider type for flag storage */
141
- provider?: 'memory' | 'database' | 'redis' | 'api' | 'file';
141
+ provider?: FeatureFlagProviderType;
142
142
  /** How often to refresh flag data in seconds (0 = no auto-refresh) */
143
143
  refreshInterval?: number;
144
144
  /** Enable debug logging */
@@ -253,7 +253,7 @@ export interface CoreFeatureFlagModuleConfig {
253
253
  * Configuration for database table names.
254
254
  * Allows customization of table names for different environments (dev, test, prod).
255
255
  */
256
- export interface FeatureFlagTableConfig {
256
+ export interface CoreFeatureFlagTableConfig {
257
257
  /** Table name for feature flags (default: 'feature_flags') */
258
258
  flagsTable: string;
259
259
  /** Table name for feature flag rules (default: 'feature_flag_rules') */
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Feature Flag Types (Frontend)
3
+ *
4
+ * Type definitions for the frontend FeatureFlagDomainService.
5
+ */
6
+ import type { FeatureFlagContext, FeatureFlagValue, FeatureFlagEvaluation, CreateFlagRequest, FeatureFlag, FeatureFlagRule, FeatureFlagProvider } from '../../features';
7
+ import type { CoreBaseDomainServiceInterface, CoreEventSubscribable, CoreProviderSubscribable } from '../domain';
8
+ import type { CoreBaseFrontendStore, CoreBaseFrontendServiceConfig } from './types';
9
+ import type { CoreServiceInitConfig } from '../init';
10
+ /**
11
+ * Feature flag event types (frontend)
12
+ */
13
+ export type CoreFrontendFeatureFlagEventType = 'featureFlag:evaluating' | 'featureFlag:evaluated' | 'featureFlag:evaluate:error' | 'featureFlag:creating' | 'featureFlag:created' | 'featureFlag:create:error' | 'featureFlag:updating' | 'featureFlag:updated' | 'featureFlag:update:error' | 'featureFlag:deleting' | 'featureFlag:deleted' | 'featureFlag:delete:error' | 'featureFlag:override:setting' | 'featureFlag:override:set' | 'featureFlag:override:removing' | 'featureFlag:override:removed' | 'featureFlag:provider:initialized' | 'featureFlag:provider:refreshed' | 'featureFlag:provider:disposed';
14
+ /**
15
+ * Store interface for feature flag state.
16
+ * Compatible with @plyaz/store's FeatureFlagStoreSlice.
17
+ */
18
+ export interface CoreFeatureFlagStore extends CoreBaseFrontendStore<Record<string, FeatureFlagValue>> {
19
+ /** Replace all flags in the store */
20
+ setFlags(flags: Record<string, FeatureFlagValue>): void;
21
+ /** Update/merge flags in the store */
22
+ updateFlags?(flags: Record<string, FeatureFlagValue>): void;
23
+ }
24
+ /**
25
+ * Service configuration (when creating manually with provider)
26
+ */
27
+ export interface CoreFeatureFlagServiceConfig extends CoreBaseFrontendServiceConfig<Record<string, FeatureFlagValue>, CoreFeatureFlagStore> {
28
+ /** Default context for evaluations */
29
+ defaultContext?: FeatureFlagContext;
30
+ /** Feature flag provider (ApiFeatureFlagProvider for frontend) */
31
+ provider: FeatureFlagProvider<string>;
32
+ /** Required flags that must be enabled for the service to work */
33
+ requiredFlags?: string[];
34
+ }
35
+ /**
36
+ * Service init configuration (for ServiceRegistry auto-initialization)
37
+ */
38
+ export interface CoreFeatureFlagServiceInitConfig extends CoreBaseFrontendServiceConfig<Record<string, FeatureFlagValue>, CoreFeatureFlagStore>, CoreServiceInitConfig {
39
+ /** API base path for feature flag endpoints (default: '/feature-flags') */
40
+ apiBasePath?: string;
41
+ /** Default context for evaluations */
42
+ defaultContext?: FeatureFlagContext;
43
+ /** Cache TTL in seconds (default: 300) */
44
+ cacheTtl?: number;
45
+ /** Refresh interval in milliseconds (default: 60000) */
46
+ refreshInterval?: number;
47
+ /** Whether to fallback to default values when flags are not found (default: true) */
48
+ shouldFallbackToDefaults?: boolean;
49
+ /** Default flag values */
50
+ defaults?: Record<string, FeatureFlagValue>;
51
+ /** Known feature flag keys (for type safety in provider) */
52
+ featureKeys?: Record<string, FeatureFlagValue>;
53
+ }
54
+ /**
55
+ * Base interface for frontend services with store integration
56
+ */
57
+ export interface CoreBaseFrontendServiceInterface<TStore extends CoreBaseFrontendStore = CoreBaseFrontendStore> extends CoreBaseDomainServiceInterface {
58
+ /** Connect a store to receive updates */
59
+ connectStore(store: TStore): void;
60
+ /** Disconnect a store from receiving updates */
61
+ disconnectStore(store: TStore): void;
62
+ /** Disconnect all connected stores */
63
+ disconnectAllStores(): void;
64
+ /** Number of connected stores */
65
+ readonly connectedStoreCount: number;
66
+ /** Whether any stores are connected */
67
+ readonly hasConnectedStores: boolean;
68
+ }
69
+ /**
70
+ * Public interface for FeatureFlagDomainService.
71
+ *
72
+ * Extends:
73
+ * - BaseFrontendServiceInterface<FeatureFlagStore> - Lifecycle + store management
74
+ * - ProviderSubscribable - Provider subscription
75
+ * - EventSubscribable<FeatureFlagEventType> - Event subscription
76
+ */
77
+ export interface CoreFeatureFlagServiceInterface extends CoreBaseFrontendServiceInterface<CoreFeatureFlagStore>, CoreProviderSubscribable, CoreEventSubscribable<CoreFrontendFeatureFlagEventType> {
78
+ /** Refresh the provider cache and sync to stores */
79
+ refresh(): Promise<void>;
80
+ /** Evaluate a single flag */
81
+ evaluate<TKey extends string = string>(key: TKey, context?: FeatureFlagContext): Promise<FeatureFlagEvaluation<TKey>>;
82
+ /** Check if a flag is enabled */
83
+ isEnabled<TKey extends string = string>(key: TKey, context?: FeatureFlagContext): Promise<boolean>;
84
+ /** Get flag value */
85
+ getValue<T = FeatureFlagValue, TKey extends string = string>(key: TKey, context?: FeatureFlagContext): Promise<T>;
86
+ /** Evaluate all flags */
87
+ evaluateAll<TKey extends string = string>(context?: FeatureFlagContext): Promise<Record<string, FeatureFlagEvaluation<TKey>>>;
88
+ /** Fetch all flags and sync to stores */
89
+ fetchAndSyncAll(context?: FeatureFlagContext): Promise<Record<string, FeatureFlagValue>>;
90
+ /** Create a new flag */
91
+ create<TKey extends string = string>(data: CreateFlagRequest<TKey>): Promise<FeatureFlag<TKey>>;
92
+ /** Update an existing flag */
93
+ update<TKey extends string = string>(key: TKey, data: Partial<CreateFlagRequest<TKey>>): Promise<FeatureFlag<TKey>>;
94
+ /** Delete a flag */
95
+ delete<TKey extends string = string>(key: TKey): Promise<void>;
96
+ /** Get rules for a flag */
97
+ getRules<TKey extends string = string>(key: TKey): Promise<FeatureFlagRule<TKey>[]>;
98
+ /** Get all rules */
99
+ getAllRules<TKey extends string = string>(): Promise<FeatureFlagRule<TKey>[]>;
100
+ /** Set a runtime override */
101
+ setOverride<TKey extends string = string>(key: TKey, value: FeatureFlagValue): void;
102
+ /** Remove a runtime override */
103
+ removeOverride<TKey extends string = string>(key: TKey): void;
104
+ /** Clear all overrides */
105
+ clearOverrides(): void;
106
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core Frontend Types
3
+ * Type definitions for @plyaz/core frontend services
4
+ */
5
+ export type { CoreBaseFrontendStore, CoreBaseFrontendServiceConfig, CoreBaseFrontendServiceInterface, CorePlyazApiConfig, FrontendFeatureFlagProvider, CorePlyazFeatureFlagConfig, CorePlyazStoreConfig, CorePlyazConfig, CoreFeatureFlagServiceLike, CoreFeatureFlagFetcherOptions, CoreFeatureFlagStoreInitConfig, CoreBaseFrontendServiceConstructorConfig, CoreInitializationErrorProps, CoreInitializationLoadingProps, CorePlyazServices, CorePlyazContextValue, CorePlyazProviderProps, } from './types';
6
+ export type { CoreFrontendFeatureFlagEventType, CoreFeatureFlagStore, CoreFeatureFlagServiceConfig, CoreFeatureFlagServiceInitConfig, CoreFeatureFlagServiceInterface, } from './featureFlags';