@plyaz/types 1.19.3 → 1.19.5
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/dist/api/index.cjs +29 -0
- package/dist/api/index.cjs.map +1 -1
- package/dist/api/index.js +29 -0
- package/dist/api/index.js.map +1 -1
- package/dist/core/auth/types.d.ts +1 -1
- package/dist/core/domain/index.d.ts +5 -0
- package/dist/core/domain/types.d.ts +123 -0
- package/dist/core/events/enums.d.ts +25 -1
- package/dist/core/events/index.d.ts +3 -3
- package/dist/core/events/payloads.d.ts +80 -1
- package/dist/core/featureFlag/types.d.ts +37 -17
- package/dist/core/frontend/featureFlags.d.ts +106 -0
- package/dist/core/frontend/index.d.ts +6 -0
- package/dist/core/frontend/types.d.ts +318 -0
- package/dist/core/index.d.ts +6 -2
- package/dist/core/init/index.d.ts +5 -0
- package/dist/core/init/types.d.ts +347 -0
- package/dist/core/modules.d.ts +19 -3
- package/dist/core/services/index.d.ts +5 -0
- package/dist/core/{services.d.ts → services/types.d.ts} +74 -6
- package/dist/errors/codes.d.ts +3 -0
- package/dist/errors/index.cjs +29 -0
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.js +29 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/middleware.d.ts +105 -0
- package/dist/errors/store.d.ts +140 -0
- package/dist/examples/index.d.ts +1 -1
- package/dist/examples/types.d.ts +64 -0
- package/dist/features/feature-flag/dto.types.d.ts +67 -0
- package/dist/features/feature-flag/index.d.ts +3 -0
- package/dist/features/feature-flag/service.types.d.ts +184 -0
- package/dist/features/feature-flag/store.types.d.ts +166 -0
- package/dist/features/feature-flag/types.d.ts +16 -4
- package/dist/globals.d.ts +23 -0
- package/dist/index.cjs +49 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +49 -1
- package/dist/index.js.map +1 -1
- package/dist/store/index.cjs +13 -0
- package/dist/store/index.cjs.map +1 -1
- package/dist/store/index.d.ts +2 -0
- package/dist/store/index.js +11 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/keys.d.ts +23 -0
- package/dist/store/types.d.ts +62 -71
- package/dist/testing/features/feature-flags/types.d.ts +3 -3
- package/package.json +6 -3
|
@@ -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,13 +5,33 @@
|
|
|
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 {
|
|
9
|
-
import type { FeatureFlagCondition, FeatureFlagConfig, FeatureFlagValue } from '../../features';
|
|
8
|
+
import type { FeatureFlagCondition, FeatureFlagConfig, FeatureFlagProviderType, FeatureFlagValue } from '../../features';
|
|
10
9
|
import type { ApiClientWithEvents } from '../../api';
|
|
10
|
+
/**
|
|
11
|
+
* Feature flags for authentication providers and other features
|
|
12
|
+
*/
|
|
13
|
+
export declare const FEATURES: {
|
|
14
|
+
/**
|
|
15
|
+
* Enable Google OAuth authentication
|
|
16
|
+
*/
|
|
17
|
+
readonly AUTH_GOOGLE: true;
|
|
18
|
+
/**
|
|
19
|
+
* Enable Discord OAuth authentication (dev only)
|
|
20
|
+
*/
|
|
21
|
+
readonly AUTH_DISCORD: false;
|
|
22
|
+
/**
|
|
23
|
+
* Enable Facebook OAuth authentication
|
|
24
|
+
*/
|
|
25
|
+
readonly AUTH_FACEBOOK: false;
|
|
26
|
+
/**
|
|
27
|
+
* Enable GitHub OAuth authentication
|
|
28
|
+
*/
|
|
29
|
+
readonly AUTH_GITHUB: true;
|
|
30
|
+
};
|
|
11
31
|
/**
|
|
12
32
|
* Raw database row interface for feature flags table
|
|
13
33
|
*/
|
|
14
|
-
export interface
|
|
34
|
+
export interface CoreDatabaseFeatureFlagRow {
|
|
15
35
|
key: string;
|
|
16
36
|
value: FeatureFlagValue;
|
|
17
37
|
isEnabled?: boolean;
|
|
@@ -26,7 +46,7 @@ export interface DatabaseFeatureFlagRow {
|
|
|
26
46
|
/**
|
|
27
47
|
* Raw database row interface for feature flag rules
|
|
28
48
|
*/
|
|
29
|
-
export interface
|
|
49
|
+
export interface CoreDatabaseFeatureFlagRuleRow {
|
|
30
50
|
id: string;
|
|
31
51
|
flagKey: string;
|
|
32
52
|
flag_key?: string;
|
|
@@ -40,7 +60,7 @@ export interface DatabaseFeatureFlagRuleRow {
|
|
|
40
60
|
/**
|
|
41
61
|
* Database override row interface
|
|
42
62
|
*/
|
|
43
|
-
export interface
|
|
63
|
+
export interface CoreDatabaseOverrideRow {
|
|
44
64
|
id: string;
|
|
45
65
|
flag_key: string;
|
|
46
66
|
user_id: string;
|
|
@@ -51,7 +71,7 @@ export interface DatabaseOverrideRow {
|
|
|
51
71
|
/**
|
|
52
72
|
* Database evaluation log row interface
|
|
53
73
|
*/
|
|
54
|
-
export interface
|
|
74
|
+
export interface CoreDatabaseEvaluationRow {
|
|
55
75
|
id: string;
|
|
56
76
|
flag_key: string;
|
|
57
77
|
user_id?: string;
|
|
@@ -65,21 +85,21 @@ export interface DatabaseEvaluationRow {
|
|
|
65
85
|
/**
|
|
66
86
|
* Environment filter interface
|
|
67
87
|
*/
|
|
68
|
-
export interface
|
|
88
|
+
export interface CoreEnvironmentFilterRow {
|
|
69
89
|
environments?: string[];
|
|
70
90
|
}
|
|
71
91
|
/**
|
|
72
92
|
* Validation result interface
|
|
73
93
|
*/
|
|
74
|
-
export interface
|
|
94
|
+
export interface CoreFeatureFlagValidationResult {
|
|
75
95
|
isValid: boolean;
|
|
76
|
-
errors:
|
|
77
|
-
warnings:
|
|
96
|
+
errors: CoreFeatureFlagValidationError[];
|
|
97
|
+
warnings: CoreFeatureFlagValidationWarning[];
|
|
78
98
|
}
|
|
79
99
|
/**
|
|
80
100
|
* Validation error interface
|
|
81
101
|
*/
|
|
82
|
-
export interface
|
|
102
|
+
export interface CoreFeatureFlagValidationError {
|
|
83
103
|
field: string;
|
|
84
104
|
message: string;
|
|
85
105
|
code: string;
|
|
@@ -87,7 +107,7 @@ export interface ValidationError {
|
|
|
87
107
|
/**
|
|
88
108
|
* Validation warning interface
|
|
89
109
|
*/
|
|
90
|
-
export interface
|
|
110
|
+
export interface CoreFeatureFlagValidationWarning {
|
|
91
111
|
field: string;
|
|
92
112
|
message: string;
|
|
93
113
|
code: string;
|
|
@@ -95,7 +115,7 @@ export interface ValidationWarning {
|
|
|
95
115
|
/**
|
|
96
116
|
* Database configuration interface
|
|
97
117
|
*/
|
|
98
|
-
export interface
|
|
118
|
+
export interface CoreFeatureFlagDatabaseConfig {
|
|
99
119
|
connectionString: string;
|
|
100
120
|
tableName: string;
|
|
101
121
|
poolSize?: number;
|
|
@@ -104,8 +124,8 @@ export interface FeatureFlagDatabaseConfig {
|
|
|
104
124
|
/**
|
|
105
125
|
* Environment-specific feature flag configuration
|
|
106
126
|
*/
|
|
107
|
-
export interface
|
|
108
|
-
databaseConfig?:
|
|
127
|
+
export interface CoreFeatureFlagEnvironmentConfig extends Omit<FeatureFlagConfig<FeatureFlagKey>, 'databaseConfig'> {
|
|
128
|
+
databaseConfig?: CoreFeatureFlagDatabaseConfig;
|
|
109
129
|
}
|
|
110
130
|
/**
|
|
111
131
|
* Union type of all available feature flag keys.
|
|
@@ -118,7 +138,7 @@ export type FeatureFlags = typeof FEATURES extends Record<FeatureFlagKey, Featur
|
|
|
118
138
|
*/
|
|
119
139
|
export interface CoreFeatureFlagModuleConfig {
|
|
120
140
|
/** Provider type for flag storage */
|
|
121
|
-
provider?:
|
|
141
|
+
provider?: FeatureFlagProviderType;
|
|
122
142
|
/** How often to refresh flag data in seconds (0 = no auto-refresh) */
|
|
123
143
|
refreshInterval?: number;
|
|
124
144
|
/** Enable debug logging */
|
|
@@ -233,7 +253,7 @@ export interface CoreFeatureFlagModuleConfig {
|
|
|
233
253
|
* Configuration for database table names.
|
|
234
254
|
* Allows customization of table names for different environments (dev, test, prod).
|
|
235
255
|
*/
|
|
236
|
-
export interface
|
|
256
|
+
export interface CoreFeatureFlagTableConfig {
|
|
237
257
|
/** Table name for feature flags (default: 'feature_flags') */
|
|
238
258
|
flagsTable: string;
|
|
239
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';
|