@plyaz/types 1.22.9 → 1.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/domain/types.d.ts +191 -1
- package/dist/core/frontend/index.d.ts +1 -1
- package/dist/core/frontend/types.d.ts +80 -0
- package/dist/core/init/index.d.ts +1 -1
- package/dist/core/init/types.d.ts +126 -1
- package/dist/index.cjs +42 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +41 -1
- package/dist/index.js.map +1 -1
- package/dist/observability/datadog-sdk.d.ts +138 -0
- package/dist/observability/index.cjs +48 -0
- package/dist/observability/index.cjs.map +1 -0
- package/dist/observability/index.d.ts +10 -0
- package/dist/observability/index.js +45 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/types.d.ts +548 -0
- package/package.json +6 -1
|
@@ -126,7 +126,7 @@ export type CoreValidatorClass<T extends CoreBaseValidatorInstance = CoreBaseVal
|
|
|
126
126
|
* interface BasicInjectedServices extends CoreInjectedServices {}
|
|
127
127
|
* ```
|
|
128
128
|
*/
|
|
129
|
-
export interface CoreInjectedServices<TCache = unknown, TDb = unknown, TApi = unknown, TStores = unknown> {
|
|
129
|
+
export interface CoreInjectedServices<TCache = unknown, TDb = unknown, TApi = unknown, TStores = unknown, TObservability = unknown> {
|
|
130
130
|
/** Cache manager instance */
|
|
131
131
|
cache?: TCache;
|
|
132
132
|
/** Database service instance */
|
|
@@ -139,6 +139,11 @@ export interface CoreInjectedServices<TCache = unknown, TDb = unknown, TApi = un
|
|
|
139
139
|
* @example { example: ExampleStoreSlice, errors: ErrorStoreSlice }
|
|
140
140
|
*/
|
|
141
141
|
stores?: TStores extends Record<string, unknown> ? Partial<TStores> : Record<string, TStores>;
|
|
142
|
+
/**
|
|
143
|
+
* Observability service instance for metrics, tracing, and logging.
|
|
144
|
+
* Supports adapter-based providers (Datadog, Grafana, OpenTelemetry, etc.)
|
|
145
|
+
*/
|
|
146
|
+
observability?: TObservability;
|
|
142
147
|
}
|
|
143
148
|
/**
|
|
144
149
|
* Base service configuration passed to constructor
|
|
@@ -180,3 +185,188 @@ export interface CoreBaseBackendServiceConfig extends CoreBaseDomainServiceConfi
|
|
|
180
185
|
defaultTtl?: number;
|
|
181
186
|
};
|
|
182
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Base interface for service type bundles.
|
|
190
|
+
* Define your concrete types by implementing this interface.
|
|
191
|
+
*
|
|
192
|
+
* This reduces the number of generic parameters from 13 to 5:
|
|
193
|
+
* - TConfig (service config)
|
|
194
|
+
* - TTypes (this bundle)
|
|
195
|
+
* - TRepository
|
|
196
|
+
* - TMapper
|
|
197
|
+
* - TValidator
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* // Define your service types bundle (no extends needed!)
|
|
202
|
+
* interface UserServiceTypes {
|
|
203
|
+
* Entity: User;
|
|
204
|
+
* ResponseDTO: UserResponseDTO;
|
|
205
|
+
* CreateDTO: CreateUserDTO;
|
|
206
|
+
* UpdateDTO: UpdateUserDTO;
|
|
207
|
+
* PatchDTO: PatchUserDTO;
|
|
208
|
+
* QueryDTO: QueryUserDTO;
|
|
209
|
+
* DeleteOptions: { soft: boolean };
|
|
210
|
+
* DatabaseRow: UserDatabaseRow;
|
|
211
|
+
* StoreState: UserStoreItem;
|
|
212
|
+
* }
|
|
213
|
+
*
|
|
214
|
+
* // Use in service (5 generics instead of 13!)
|
|
215
|
+
* class UserService extends BaseBackendDomainServiceV2<
|
|
216
|
+
* UserServiceConfig,
|
|
217
|
+
* UserServiceTypes,
|
|
218
|
+
* UserRepository,
|
|
219
|
+
* UserMapper,
|
|
220
|
+
* UserValidator
|
|
221
|
+
* > {}
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
export interface BackendServiceTypesShape {
|
|
225
|
+
/** Domain entity type */
|
|
226
|
+
Entity: unknown;
|
|
227
|
+
/** API response DTO type */
|
|
228
|
+
ResponseDTO: unknown;
|
|
229
|
+
/** Create input DTO type (POST body) - must be Record<string, unknown> */
|
|
230
|
+
CreateDTO: Record<string, unknown>;
|
|
231
|
+
/** Update input DTO type (PUT body) - must be Record<string, unknown> */
|
|
232
|
+
UpdateDTO: Record<string, unknown>;
|
|
233
|
+
/** Patch input DTO type (PATCH body) */
|
|
234
|
+
PatchDTO: Partial<Record<string, unknown>>;
|
|
235
|
+
/** Query params DTO type */
|
|
236
|
+
QueryDTO: Record<string, unknown>;
|
|
237
|
+
/** Delete options type */
|
|
238
|
+
DeleteOptions: unknown;
|
|
239
|
+
/** Database row type - must be Record<string, unknown> */
|
|
240
|
+
DatabaseRow: Record<string, unknown>;
|
|
241
|
+
/** Store state type (serializable) */
|
|
242
|
+
StoreState: unknown;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Frontend service types shape (without database-specific types)
|
|
246
|
+
*/
|
|
247
|
+
export interface FrontendServiceTypesShape {
|
|
248
|
+
/** Domain entity type */
|
|
249
|
+
Entity: unknown;
|
|
250
|
+
/** API response DTO type */
|
|
251
|
+
ResponseDTO: unknown;
|
|
252
|
+
/** Create input DTO type */
|
|
253
|
+
CreateDTO: unknown;
|
|
254
|
+
/** Update input DTO type */
|
|
255
|
+
UpdateDTO: unknown;
|
|
256
|
+
/** Patch input DTO type */
|
|
257
|
+
PatchDTO: unknown;
|
|
258
|
+
/** Query params DTO type */
|
|
259
|
+
QueryDTO: unknown;
|
|
260
|
+
/** Store state type */
|
|
261
|
+
StoreState: unknown;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Helper to create a backend service types bundle with defaults.
|
|
265
|
+
* Use this when you want type inference with sensible defaults.
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* type UserTypes = DefineBackendServiceTypes<{
|
|
270
|
+
* Entity: User;
|
|
271
|
+
* ResponseDTO: UserResponseDTO;
|
|
272
|
+
* CreateDTO: CreateUserDTO;
|
|
273
|
+
* // UpdateDTO defaults to CreateDTO
|
|
274
|
+
* // PatchDTO defaults to Partial<CreateDTO>
|
|
275
|
+
* QueryDTO: QueryUserDTO;
|
|
276
|
+
* DatabaseRow: UserDatabaseRow;
|
|
277
|
+
* }>;
|
|
278
|
+
* ```
|
|
279
|
+
*/
|
|
280
|
+
export type DefineBackendServiceTypes<T extends Partial<BackendServiceTypesShape> & {
|
|
281
|
+
Entity: unknown;
|
|
282
|
+
CreateDTO: Record<string, unknown>;
|
|
283
|
+
}> = {
|
|
284
|
+
Entity: T['Entity'];
|
|
285
|
+
ResponseDTO: T extends {
|
|
286
|
+
ResponseDTO: infer R;
|
|
287
|
+
} ? R : T['Entity'];
|
|
288
|
+
CreateDTO: T['CreateDTO'];
|
|
289
|
+
UpdateDTO: T extends {
|
|
290
|
+
UpdateDTO: infer U;
|
|
291
|
+
} ? U : T['CreateDTO'];
|
|
292
|
+
PatchDTO: T extends {
|
|
293
|
+
PatchDTO: infer P;
|
|
294
|
+
} ? P : Partial<T['CreateDTO']>;
|
|
295
|
+
QueryDTO: T extends {
|
|
296
|
+
QueryDTO: infer Q;
|
|
297
|
+
} ? Q : Record<string, unknown>;
|
|
298
|
+
DeleteOptions: T extends {
|
|
299
|
+
DeleteOptions: infer D;
|
|
300
|
+
} ? D : {
|
|
301
|
+
soft: boolean;
|
|
302
|
+
};
|
|
303
|
+
DatabaseRow: T extends {
|
|
304
|
+
DatabaseRow: infer DB;
|
|
305
|
+
} ? DB : T['CreateDTO'] & {
|
|
306
|
+
id: string;
|
|
307
|
+
};
|
|
308
|
+
StoreState: T extends {
|
|
309
|
+
StoreState: infer S;
|
|
310
|
+
} ? S : T['Entity'];
|
|
311
|
+
};
|
|
312
|
+
/**
|
|
313
|
+
* Helper to create a frontend service types bundle with defaults.
|
|
314
|
+
*/
|
|
315
|
+
export type DefineFrontendServiceTypes<T extends Partial<FrontendServiceTypesShape> & {
|
|
316
|
+
Entity: unknown;
|
|
317
|
+
}> = {
|
|
318
|
+
Entity: T['Entity'];
|
|
319
|
+
ResponseDTO: T extends {
|
|
320
|
+
ResponseDTO: infer R;
|
|
321
|
+
} ? R : T['Entity'];
|
|
322
|
+
CreateDTO: T extends {
|
|
323
|
+
CreateDTO: infer C;
|
|
324
|
+
} ? C : Record<string, unknown>;
|
|
325
|
+
UpdateDTO: T extends {
|
|
326
|
+
UpdateDTO: infer U;
|
|
327
|
+
} ? U : T extends {
|
|
328
|
+
CreateDTO: infer C;
|
|
329
|
+
} ? C : Record<string, unknown>;
|
|
330
|
+
PatchDTO: T extends {
|
|
331
|
+
PatchDTO: infer P;
|
|
332
|
+
} ? P : Partial<T extends {
|
|
333
|
+
CreateDTO: infer C;
|
|
334
|
+
} ? C : Record<string, unknown>>;
|
|
335
|
+
QueryDTO: T extends {
|
|
336
|
+
QueryDTO: infer Q;
|
|
337
|
+
} ? Q : Record<string, unknown>;
|
|
338
|
+
StoreState: T extends {
|
|
339
|
+
StoreState: infer S;
|
|
340
|
+
} ? S : T['Entity'];
|
|
341
|
+
};
|
|
342
|
+
/**
|
|
343
|
+
* Type-safe extraction helpers for service type bundles.
|
|
344
|
+
* These work with any object that has the expected shape.
|
|
345
|
+
*/
|
|
346
|
+
export type ExtractEntity<T extends {
|
|
347
|
+
Entity: unknown;
|
|
348
|
+
}> = T['Entity'];
|
|
349
|
+
export type ExtractResponseDTO<T extends {
|
|
350
|
+
ResponseDTO: unknown;
|
|
351
|
+
}> = T['ResponseDTO'];
|
|
352
|
+
export type ExtractCreateDTO<T extends {
|
|
353
|
+
CreateDTO: unknown;
|
|
354
|
+
}> = T['CreateDTO'];
|
|
355
|
+
export type ExtractUpdateDTO<T extends {
|
|
356
|
+
UpdateDTO: unknown;
|
|
357
|
+
}> = T['UpdateDTO'];
|
|
358
|
+
export type ExtractPatchDTO<T extends {
|
|
359
|
+
PatchDTO: unknown;
|
|
360
|
+
}> = T['PatchDTO'];
|
|
361
|
+
export type ExtractQueryDTO<T extends {
|
|
362
|
+
QueryDTO: unknown;
|
|
363
|
+
}> = T['QueryDTO'];
|
|
364
|
+
export type ExtractDeleteOptions<T extends {
|
|
365
|
+
DeleteOptions: unknown;
|
|
366
|
+
}> = T['DeleteOptions'];
|
|
367
|
+
export type ExtractDatabaseRow<T extends {
|
|
368
|
+
DatabaseRow: unknown;
|
|
369
|
+
}> = T['DatabaseRow'];
|
|
370
|
+
export type ExtractStoreState<T extends {
|
|
371
|
+
StoreState: unknown;
|
|
372
|
+
}> = T['StoreState'];
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Core Frontend Types
|
|
3
3
|
* Type definitions for @plyaz/core frontend services
|
|
4
4
|
*/
|
|
5
|
-
export type { CoreBaseFrontendStore, CoreBaseFrontendServiceConfig, CoreBaseFrontendServiceInterface, CoreStoreHandlers, CoreFetcherFunction, CoreServiceFetchers, CorePlyazApiConfig, FrontendFeatureFlagProvider, CorePlyazFeatureFlagConfig, CorePlyazStoreConfig, CorePlyazConfig, CoreFeatureFlagServiceLike, CoreFeatureFlagFetcherOptions, CoreFeatureFlagStoreInitConfig, CoreBaseFrontendServiceConstructorConfig, CoreInitializationErrorProps, CoreInitializationLoadingProps, CorePlyazServices, CorePlyazContextValue, CorePlyazProviderProps, } from './types';
|
|
5
|
+
export type { CoreBaseFrontendStore, CoreBaseFrontendServiceConfig, CoreBaseFrontendServiceInterface, CoreStoreHandlers, CoreOptimisticUpdateConfig, OptimisticConflictResolution, CoreFetcherFunction, CoreServiceFetchers, CorePlyazApiConfig, FrontendFeatureFlagProvider, CorePlyazFeatureFlagConfig, CorePlyazStoreConfig, CorePlyazConfig, CoreFeatureFlagServiceLike, CoreFeatureFlagFetcherOptions, CoreFeatureFlagStoreInitConfig, CoreBaseFrontendServiceConstructorConfig, CoreInitializationErrorProps, CoreInitializationLoadingProps, CorePlyazServices, CorePlyazContextValue, CorePlyazProviderProps, } from './types';
|
|
6
6
|
export type { CoreFrontendFeatureFlagEventType, CoreFeatureFlagStore, CoreFeatureFlagServiceConfig, CoreFeatureFlagServiceInitConfig, CoreFeatureFlagServiceInterface, } from './featureFlags';
|
|
@@ -638,6 +638,68 @@ export interface CoreStoreHandlers<TData = Record<string, unknown>, TStore exten
|
|
|
638
638
|
*/
|
|
639
639
|
removeData?: (store: TStore, id: string) => void;
|
|
640
640
|
}
|
|
641
|
+
/**
|
|
642
|
+
* Conflict resolution strategy for optimistic updates
|
|
643
|
+
*/
|
|
644
|
+
export type OptimisticConflictResolution = 'server-wins' | 'client-wins' | 'merge' | 'manual';
|
|
645
|
+
/**
|
|
646
|
+
* Optimistic update configuration
|
|
647
|
+
*
|
|
648
|
+
* When enabled, store updates happen immediately before API call completes.
|
|
649
|
+
* If the API call fails, changes are rolled back automatically.
|
|
650
|
+
*
|
|
651
|
+
* @example
|
|
652
|
+
* ```typescript
|
|
653
|
+
* optimisticUpdates: {
|
|
654
|
+
* enabled: true,
|
|
655
|
+
* rollbackOnError: true,
|
|
656
|
+
* conflictResolution: 'server-wins',
|
|
657
|
+
* }
|
|
658
|
+
* ```
|
|
659
|
+
*/
|
|
660
|
+
export interface CoreOptimisticUpdateConfig {
|
|
661
|
+
/**
|
|
662
|
+
* Enable optimistic updates for CRUD operations.
|
|
663
|
+
* When true, store is updated before API response.
|
|
664
|
+
* @default false
|
|
665
|
+
*/
|
|
666
|
+
enabled?: boolean;
|
|
667
|
+
/**
|
|
668
|
+
* Automatically rollback on API error.
|
|
669
|
+
* When true, reverts store to previous state if API fails.
|
|
670
|
+
* @default true
|
|
671
|
+
*/
|
|
672
|
+
rollbackOnError?: boolean;
|
|
673
|
+
/**
|
|
674
|
+
* How to resolve conflicts when server response differs from optimistic state.
|
|
675
|
+
* - 'server-wins': Always use server response (default, safest)
|
|
676
|
+
* - 'client-wins': Keep client changes, ignore server differences
|
|
677
|
+
* - 'merge': Deep merge server and client data
|
|
678
|
+
* - 'manual': Call onConflict handler for resolution
|
|
679
|
+
* @default 'server-wins'
|
|
680
|
+
*/
|
|
681
|
+
conflictResolution?: OptimisticConflictResolution;
|
|
682
|
+
/**
|
|
683
|
+
* Delay before applying optimistic update (ms).
|
|
684
|
+
* Useful for debouncing rapid updates.
|
|
685
|
+
* @default 0
|
|
686
|
+
*/
|
|
687
|
+
debounceMs?: number;
|
|
688
|
+
/**
|
|
689
|
+
* Operations to enable optimistic updates for.
|
|
690
|
+
* @default ['create', 'update', 'delete']
|
|
691
|
+
*/
|
|
692
|
+
operations?: ('create' | 'update' | 'delete')[];
|
|
693
|
+
/**
|
|
694
|
+
* Called when conflict detected (only when conflictResolution is 'manual').
|
|
695
|
+
* Return the resolved data to use.
|
|
696
|
+
*/
|
|
697
|
+
onConflict?: <T>(optimistic: T, server: T) => T;
|
|
698
|
+
/**
|
|
699
|
+
* Called when rollback occurs due to error.
|
|
700
|
+
*/
|
|
701
|
+
onRollback?: (operation: string, error: Error, previousState: unknown) => void;
|
|
702
|
+
}
|
|
641
703
|
/**
|
|
642
704
|
* Configuration for frontend domain services
|
|
643
705
|
*/
|
|
@@ -684,6 +746,24 @@ export interface CoreBaseFrontendServiceConfig<TData = Record<string, unknown>,
|
|
|
684
746
|
* ```
|
|
685
747
|
*/
|
|
686
748
|
storeHandlers?: CoreStoreHandlers<TData, TStore>;
|
|
749
|
+
/**
|
|
750
|
+
* Optimistic update configuration.
|
|
751
|
+
*
|
|
752
|
+
* When enabled, store updates happen immediately before API completes.
|
|
753
|
+
* If API fails, changes are automatically rolled back.
|
|
754
|
+
*
|
|
755
|
+
* @see {@link CoreOptimisticUpdateConfig} for options
|
|
756
|
+
*
|
|
757
|
+
* @example
|
|
758
|
+
* ```typescript
|
|
759
|
+
* optimisticUpdates: {
|
|
760
|
+
* enabled: true,
|
|
761
|
+
* rollbackOnError: true,
|
|
762
|
+
* conflictResolution: 'server-wins',
|
|
763
|
+
* }
|
|
764
|
+
* ```
|
|
765
|
+
*/
|
|
766
|
+
optimisticUpdates?: CoreOptimisticUpdateConfig;
|
|
687
767
|
}
|
|
688
768
|
/**
|
|
689
769
|
* Base interface for frontend domain services with store integration.
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Core Init Types
|
|
3
3
|
* Service registry and initialization type definitions
|
|
4
4
|
*/
|
|
5
|
-
export type { CoreDomainServiceInstance, CoreServiceInitConfig, CoreServiceCreateOptions, CoreInitializableDomainService, CoreServiceEntry, CoreServiceRegistryConfig, CoreExtractServiceConfig, CoreExtractServiceInstance, CoreFeatureFlagInitConfig, CoreErrorHandlerInitConfig, CoreCacheConfig, CoreInitOptionsBase, CoreServicesResultBase, } from './types';
|
|
5
|
+
export type { CoreDomainServiceInstance, CoreServiceInitConfig, CoreServiceCreateOptions, CoreInitializableDomainService, CoreServiceEntry, CoreServiceRegistryConfig, CoreExtractServiceConfig, CoreExtractServiceInstance, CoreFeatureFlagInitConfig, CoreErrorHandlerInitConfig, CoreCacheConfig, CoreObservabilityConfig, CoreInitOptionsBase, CoreServicesResultBase, } from './types';
|
|
@@ -213,6 +213,38 @@ export interface CoreServiceInitConfig {
|
|
|
213
213
|
/** Default TTL in seconds for cached operations */
|
|
214
214
|
defaultTtl?: number;
|
|
215
215
|
};
|
|
216
|
+
/**
|
|
217
|
+
* Create a dedicated observability instance for this service.
|
|
218
|
+
*
|
|
219
|
+
* By default, services share the global observability adapter. Use this when
|
|
220
|
+
* a service needs its own isolated observability (e.g., different provider,
|
|
221
|
+
* custom tags, separate sampling).
|
|
222
|
+
*
|
|
223
|
+
* - `false` or `undefined`: Use global shared observability (default)
|
|
224
|
+
* - `true`: Create dedicated instance using global config
|
|
225
|
+
* - `ObservabilityAdapterConfig`: Create dedicated instance with custom config
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* ```typescript
|
|
229
|
+
* // Use global shared observability (default)
|
|
230
|
+
* { service: UserService, config: { enabled: true } }
|
|
231
|
+
*
|
|
232
|
+
* // Create dedicated observability with global config
|
|
233
|
+
* { service: PaymentService, config: { dedicatedObservability: true } }
|
|
234
|
+
*
|
|
235
|
+
* // Create dedicated observability with custom config
|
|
236
|
+
* {
|
|
237
|
+
* service: CriticalService,
|
|
238
|
+
* config: {
|
|
239
|
+
* dedicatedObservability: {
|
|
240
|
+
* serviceName: 'critical-service',
|
|
241
|
+
* samplingRate: 1.0, // 100% sampling for critical operations
|
|
242
|
+
* },
|
|
243
|
+
* },
|
|
244
|
+
* }
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
dedicatedObservability?: boolean | CoreObservabilityConfig;
|
|
216
248
|
}
|
|
217
249
|
/**
|
|
218
250
|
* Options passed to the service factory method
|
|
@@ -304,6 +336,27 @@ export interface CoreServiceCreateOptions<TConfig = unknown, TMapper = unknown,
|
|
|
304
336
|
*/
|
|
305
337
|
instance?: unknown;
|
|
306
338
|
};
|
|
339
|
+
/**
|
|
340
|
+
* Observability configuration and mode.
|
|
341
|
+
*/
|
|
342
|
+
observability?: {
|
|
343
|
+
/**
|
|
344
|
+
* Whether to use a dedicated (isolated) observability instance.
|
|
345
|
+
* - `false`: Use global shared instance (default)
|
|
346
|
+
* - `true`: Create dedicated instance
|
|
347
|
+
*/
|
|
348
|
+
dedicated: boolean;
|
|
349
|
+
/**
|
|
350
|
+
* Observability config (merged global + per-service config).
|
|
351
|
+
* Used to create dedicated instance or configure global.
|
|
352
|
+
*/
|
|
353
|
+
config?: CoreObservabilityConfig;
|
|
354
|
+
/**
|
|
355
|
+
* Actual ObservabilityAdapter instance to use.
|
|
356
|
+
* Injected by ServiceRegistry, not created by service.
|
|
357
|
+
*/
|
|
358
|
+
instance?: unknown;
|
|
359
|
+
};
|
|
307
360
|
/** Logger prefix */
|
|
308
361
|
loggerPrefix?: string;
|
|
309
362
|
/** Whether this is a singleton instance */
|
|
@@ -387,6 +440,8 @@ export interface CoreServiceRegistryConfig {
|
|
|
387
440
|
db?: Partial<CoreDbServiceConfig>;
|
|
388
441
|
/** Global cache config (shared by all services unless overridden) */
|
|
389
442
|
cache?: CoreCacheConfig;
|
|
443
|
+
/** Global observability config (shared by all services unless overridden) */
|
|
444
|
+
observability?: CoreObservabilityConfig;
|
|
390
445
|
/**
|
|
391
446
|
* Store registry interface for injecting stores into services.
|
|
392
447
|
* Provides type-safe store access via store keys.
|
|
@@ -519,6 +574,70 @@ export interface CoreCacheConfig {
|
|
|
519
574
|
keyPrefix?: string;
|
|
520
575
|
};
|
|
521
576
|
}
|
|
577
|
+
/**
|
|
578
|
+
* Observability initialization configuration
|
|
579
|
+
*/
|
|
580
|
+
export interface CoreObservabilityConfig {
|
|
581
|
+
/** Enable/disable observability (default: true) */
|
|
582
|
+
enabled?: boolean;
|
|
583
|
+
/** Service name for tagging */
|
|
584
|
+
serviceName?: string;
|
|
585
|
+
/** Environment (production, staging, development) */
|
|
586
|
+
environment?: string;
|
|
587
|
+
/** Default tags to add to all metrics/spans */
|
|
588
|
+
defaultTags?: Record<string, string>;
|
|
589
|
+
/** Sampling rate for traces (0.0 to 1.0) */
|
|
590
|
+
samplingRate?: number;
|
|
591
|
+
/** Flush interval in milliseconds */
|
|
592
|
+
flushInterval?: number;
|
|
593
|
+
/** Buffer size before auto-flush */
|
|
594
|
+
bufferSize?: number;
|
|
595
|
+
/**
|
|
596
|
+
* Provider type
|
|
597
|
+
* Currently supported: 'datadog', 'console', 'noop'
|
|
598
|
+
* Planned: 'grafana', 'opentelemetry', 'prometheus', 'newrelic', 'custom'
|
|
599
|
+
*/
|
|
600
|
+
provider?: 'datadog' | 'console' | 'noop';
|
|
601
|
+
/** Mode for multi-provider: 'parallel' sends to all, 'priority' falls back on error */
|
|
602
|
+
mode?: 'single' | 'parallel' | 'priority';
|
|
603
|
+
/** Datadog-specific configuration */
|
|
604
|
+
datadog?: {
|
|
605
|
+
/** Datadog API key */
|
|
606
|
+
apiKey?: string;
|
|
607
|
+
/** Datadog site (e.g., 'datadoghq.com', 'datadoghq.eu') */
|
|
608
|
+
site?: string;
|
|
609
|
+
/** Enable APM tracing */
|
|
610
|
+
apmEnabled?: boolean;
|
|
611
|
+
/** Enable RUM */
|
|
612
|
+
rumEnabled?: boolean;
|
|
613
|
+
/** RUM application ID */
|
|
614
|
+
rumApplicationId?: string;
|
|
615
|
+
/** RUM client token */
|
|
616
|
+
rumClientToken?: string;
|
|
617
|
+
};
|
|
618
|
+
/** Grafana-specific configuration */
|
|
619
|
+
grafana?: {
|
|
620
|
+
/** Push gateway URL (for Prometheus) */
|
|
621
|
+
pushGatewayUrl?: string;
|
|
622
|
+
/** Grafana Cloud user */
|
|
623
|
+
grafanaCloudUser?: string;
|
|
624
|
+
/** Grafana Cloud API key */
|
|
625
|
+
grafanaCloudApiKey?: string;
|
|
626
|
+
/** Loki endpoint for logs */
|
|
627
|
+
lokiEndpoint?: string;
|
|
628
|
+
/** Tempo endpoint for traces */
|
|
629
|
+
tempoEndpoint?: string;
|
|
630
|
+
};
|
|
631
|
+
/** OpenTelemetry-specific configuration */
|
|
632
|
+
opentelemetry?: {
|
|
633
|
+
/** OTLP endpoint URL */
|
|
634
|
+
endpoint?: string;
|
|
635
|
+
/** Headers for OTLP exporter */
|
|
636
|
+
headers?: Record<string, string>;
|
|
637
|
+
/** Export interval in milliseconds */
|
|
638
|
+
exportInterval?: number;
|
|
639
|
+
};
|
|
640
|
+
}
|
|
522
641
|
/**
|
|
523
642
|
* Base core initialization options
|
|
524
643
|
* Extended by @plyaz/core's CoreInitOptions with specific types
|
|
@@ -538,12 +657,16 @@ export interface CoreInitOptionsBase<TDb = unknown, TApi = unknown> {
|
|
|
538
657
|
api?: TApi;
|
|
539
658
|
/** Cache configuration */
|
|
540
659
|
cache?: CoreCacheConfig;
|
|
660
|
+
/** Observability configuration */
|
|
661
|
+
observability?: CoreObservabilityConfig;
|
|
541
662
|
/** Skip database initialization */
|
|
542
663
|
skipDb?: boolean;
|
|
543
664
|
/** Skip API client initialization */
|
|
544
665
|
skipApi?: boolean;
|
|
545
666
|
/** Skip cache initialization */
|
|
546
667
|
skipCache?: boolean;
|
|
668
|
+
/** Skip observability initialization */
|
|
669
|
+
skipObservability?: boolean;
|
|
547
670
|
/** Enable verbose logging */
|
|
548
671
|
verbose?: boolean;
|
|
549
672
|
/** Error handler configuration */
|
|
@@ -556,13 +679,15 @@ export interface CoreInitOptionsBase<TDb = unknown, TApi = unknown> {
|
|
|
556
679
|
/**
|
|
557
680
|
* Core services result from initialization
|
|
558
681
|
*/
|
|
559
|
-
export interface CoreServicesResultBase<TDb = unknown, TApi = unknown, TCache = unknown> {
|
|
682
|
+
export interface CoreServicesResultBase<TDb = unknown, TApi = unknown, TCache = unknown, TObservability = unknown> {
|
|
560
683
|
/** Database service instance (null if skipped or on frontend) */
|
|
561
684
|
db: TDb | null;
|
|
562
685
|
/** API client service class */
|
|
563
686
|
api: TApi | null;
|
|
564
687
|
/** Cache service instance (null if skipped or on frontend) */
|
|
565
688
|
cache: TCache | null;
|
|
689
|
+
/** Observability adapter instance (null if skipped) */
|
|
690
|
+
observability: TObservability | null;
|
|
566
691
|
/** Loaded environment variables */
|
|
567
692
|
env: Record<string, string | undefined>;
|
|
568
693
|
/** Detected runtime environment */
|
package/dist/index.cjs
CHANGED
|
@@ -7306,6 +7306,46 @@ var CORRELATION_TYPE = /* @__PURE__ */ ((CORRELATION_TYPE2) => {
|
|
|
7306
7306
|
return CORRELATION_TYPE2;
|
|
7307
7307
|
})(CORRELATION_TYPE || {});
|
|
7308
7308
|
|
|
7309
|
+
// src/observability/types.ts
|
|
7310
|
+
var OBSERVABILITY_METRICS = {
|
|
7311
|
+
// Service metrics
|
|
7312
|
+
SERVICE_OPERATION_DURATION: "service.operation.duration",
|
|
7313
|
+
SERVICE_OPERATION_COUNT: "service.operation.count",
|
|
7314
|
+
SERVICE_OPERATION_ERROR: "service.operation.error",
|
|
7315
|
+
// Database metrics
|
|
7316
|
+
DB_QUERY_DURATION: "db.query.duration",
|
|
7317
|
+
DB_QUERY_COUNT: "db.query.count",
|
|
7318
|
+
DB_CONNECTION_POOL_SIZE: "db.connection.pool.size",
|
|
7319
|
+
DB_CONNECTION_POOL_USED: "db.connection.pool.used",
|
|
7320
|
+
// Cache metrics
|
|
7321
|
+
CACHE_HIT: "cache.hit",
|
|
7322
|
+
CACHE_MISS: "cache.miss",
|
|
7323
|
+
CACHE_SET: "cache.set",
|
|
7324
|
+
CACHE_DELETE: "cache.delete",
|
|
7325
|
+
// API metrics
|
|
7326
|
+
API_REQUEST_DURATION: "api.request.duration",
|
|
7327
|
+
API_REQUEST_COUNT: "api.request.count",
|
|
7328
|
+
API_REQUEST_ERROR: "api.request.error",
|
|
7329
|
+
// Transaction metrics
|
|
7330
|
+
TRANSACTION_DURATION: "transaction.duration",
|
|
7331
|
+
TRANSACTION_COUNT: "transaction.count",
|
|
7332
|
+
TRANSACTION_ROLLBACK: "transaction.rollback"
|
|
7333
|
+
};
|
|
7334
|
+
var OBSERVABILITY_SPANS = {
|
|
7335
|
+
SERVICE_CREATE: "service.create",
|
|
7336
|
+
SERVICE_UPDATE: "service.update",
|
|
7337
|
+
SERVICE_DELETE: "service.delete",
|
|
7338
|
+
SERVICE_GET: "service.get",
|
|
7339
|
+
SERVICE_LIST: "service.list",
|
|
7340
|
+
SERVICE_BULK_CREATE: "service.bulk_create",
|
|
7341
|
+
SERVICE_BULK_DELETE: "service.bulk_delete",
|
|
7342
|
+
SERVICE_TRANSACTION: "service.transaction",
|
|
7343
|
+
DB_QUERY: "db.query",
|
|
7344
|
+
CACHE_GET: "cache.get",
|
|
7345
|
+
CACHE_SET: "cache.set",
|
|
7346
|
+
API_REQUEST: "api.request"
|
|
7347
|
+
};
|
|
7348
|
+
|
|
7309
7349
|
// src/api/events/enum.ts
|
|
7310
7350
|
var EVENT_NAMESPACES = {
|
|
7311
7351
|
HEADERS: "headers",
|
|
@@ -8656,6 +8696,8 @@ exports.NOTIFICATION_ERROR_CODES = NOTIFICATION_ERROR_CODES;
|
|
|
8656
8696
|
exports.NOTIFICATION_PROVIDERS = NOTIFICATION_PROVIDERS;
|
|
8657
8697
|
exports.NetworkPresetNames = NetworkPresetNames;
|
|
8658
8698
|
exports.NotificationCategorySchema = NotificationCategorySchema;
|
|
8699
|
+
exports.OBSERVABILITY_METRICS = OBSERVABILITY_METRICS;
|
|
8700
|
+
exports.OBSERVABILITY_SPANS = OBSERVABILITY_SPANS;
|
|
8659
8701
|
exports.OPERATIONS = COMMON_OPERATIONS;
|
|
8660
8702
|
exports.ORGANIZATION_TIER = ORGANIZATION_TIER;
|
|
8661
8703
|
exports.OUTPUT_FORMAT = OUTPUT_FORMAT;
|