@cmdoss/memwal-sdk 0.6.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +547 -547
- package/BENCHMARKS.md +238 -238
- package/README.md +310 -181
- package/dist/ai-sdk/tools.d.ts +2 -2
- package/dist/ai-sdk/tools.js +2 -2
- package/dist/client/ClientMemoryManager.js +2 -2
- package/dist/client/ClientMemoryManager.js.map +1 -1
- package/dist/client/PersonalDataWallet.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.d.ts +29 -1
- package/dist/client/SimplePDWClient.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.js +45 -13
- package/dist/client/SimplePDWClient.js.map +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.d.ts +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.js +1 -1
- package/dist/client/namespaces/MemoryNamespace.d.ts +31 -0
- package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.js +272 -39
- package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/AINamespace.d.ts +2 -2
- package/dist/client/namespaces/consolidated/AINamespace.js +2 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts +12 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js +62 -4
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +67 -2
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.js +549 -16
- package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
- package/dist/config/ConfigurationHelper.js +61 -61
- package/dist/config/defaults.js +2 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/graph/GraphService.js +21 -21
- package/dist/graph/GraphService.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/seal/EncryptionService.d.ts +9 -5
- package/dist/infrastructure/seal/EncryptionService.d.ts.map +1 -1
- package/dist/infrastructure/seal/EncryptionService.js +37 -15
- package/dist/infrastructure/seal/EncryptionService.js.map +1 -1
- package/dist/infrastructure/seal/SealService.d.ts +13 -5
- package/dist/infrastructure/seal/SealService.d.ts.map +1 -1
- package/dist/infrastructure/seal/SealService.js +36 -34
- package/dist/infrastructure/seal/SealService.js.map +1 -1
- package/dist/langchain/createPDWRAG.js +30 -30
- package/dist/retrieval/MemoryDecryptionPipeline.d.ts.map +1 -1
- package/dist/retrieval/MemoryDecryptionPipeline.js +2 -1
- package/dist/retrieval/MemoryDecryptionPipeline.js.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.d.ts +31 -0
- package/dist/retrieval/MemoryRetrievalService.d.ts.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.js +44 -4
- package/dist/retrieval/MemoryRetrievalService.js.map +1 -1
- package/dist/services/CapabilityService.d.ts.map +1 -1
- package/dist/services/CapabilityService.js +30 -14
- package/dist/services/CapabilityService.js.map +1 -1
- package/dist/services/CrossContextPermissionService.d.ts.map +1 -1
- package/dist/services/CrossContextPermissionService.js +9 -7
- package/dist/services/CrossContextPermissionService.js.map +1 -1
- package/dist/services/EmbeddingService.d.ts +28 -1
- package/dist/services/EmbeddingService.d.ts.map +1 -1
- package/dist/services/EmbeddingService.js +54 -0
- package/dist/services/EmbeddingService.js.map +1 -1
- package/dist/services/EncryptionService.d.ts.map +1 -1
- package/dist/services/EncryptionService.js +6 -5
- package/dist/services/EncryptionService.js.map +1 -1
- package/dist/services/GeminiAIService.js +309 -309
- package/dist/services/IndexManager.d.ts +5 -1
- package/dist/services/IndexManager.d.ts.map +1 -1
- package/dist/services/IndexManager.js +17 -40
- package/dist/services/IndexManager.js.map +1 -1
- package/dist/services/QueryService.js +1 -1
- package/dist/services/QueryService.js.map +1 -1
- package/dist/services/StorageService.d.ts +11 -0
- package/dist/services/StorageService.d.ts.map +1 -1
- package/dist/services/StorageService.js +73 -10
- package/dist/services/StorageService.js.map +1 -1
- package/dist/services/TransactionService.d.ts +20 -0
- package/dist/services/TransactionService.d.ts.map +1 -1
- package/dist/services/TransactionService.js +43 -0
- package/dist/services/TransactionService.js.map +1 -1
- package/dist/services/ViewService.js +2 -2
- package/dist/services/ViewService.js.map +1 -1
- package/dist/services/storage/QuiltBatchManager.d.ts +101 -1
- package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
- package/dist/services/storage/QuiltBatchManager.js +410 -20
- package/dist/services/storage/QuiltBatchManager.js.map +1 -1
- package/dist/services/storage/index.d.ts +1 -1
- package/dist/services/storage/index.d.ts.map +1 -1
- package/dist/services/storage/index.js.map +1 -1
- package/dist/utils/LRUCache.d.ts +106 -0
- package/dist/utils/LRUCache.d.ts.map +1 -0
- package/dist/utils/LRUCache.js +281 -0
- package/dist/utils/LRUCache.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/memoryIndexOnChain.d.ts +212 -0
- package/dist/utils/memoryIndexOnChain.d.ts.map +1 -0
- package/dist/utils/memoryIndexOnChain.js +312 -0
- package/dist/utils/memoryIndexOnChain.js.map +1 -0
- package/dist/utils/rebuildIndexNode.d.ts +29 -0
- package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
- package/dist/utils/rebuildIndexNode.js +366 -98
- package/dist/utils/rebuildIndexNode.js.map +1 -1
- package/dist/vector/HnswWasmService.d.ts +20 -5
- package/dist/vector/HnswWasmService.d.ts.map +1 -1
- package/dist/vector/HnswWasmService.js +73 -40
- package/dist/vector/HnswWasmService.js.map +1 -1
- package/dist/vector/IHnswService.d.ts +10 -1
- package/dist/vector/IHnswService.d.ts.map +1 -1
- package/dist/vector/IHnswService.js.map +1 -1
- package/dist/vector/NodeHnswService.d.ts +16 -0
- package/dist/vector/NodeHnswService.d.ts.map +1 -1
- package/dist/vector/NodeHnswService.js +84 -5
- package/dist/vector/NodeHnswService.js.map +1 -1
- package/dist/vector/createHnswService.d.ts +1 -1
- package/dist/vector/createHnswService.js +1 -1
- package/dist/vector/index.d.ts +1 -1
- package/dist/vector/index.js +1 -1
- package/package.json +157 -157
- package/src/access/PermissionService.ts +635 -635
- package/src/aggregation/AggregationService.ts +389 -389
- package/src/ai-sdk/PDWVectorStore.ts +715 -715
- package/src/ai-sdk/index.ts +65 -65
- package/src/ai-sdk/tools.ts +460 -460
- package/src/ai-sdk/types.ts +404 -404
- package/src/batch/BatchManager.ts +597 -597
- package/src/batch/BatchingService.ts +429 -429
- package/src/batch/MemoryProcessingCache.ts +492 -492
- package/src/batch/index.ts +30 -30
- package/src/browser.ts +200 -200
- package/src/client/ClientMemoryManager.ts +987 -987
- package/src/client/PersonalDataWallet.ts +345 -345
- package/src/client/SimplePDWClient.ts +1289 -1222
- package/src/client/factory.ts +154 -154
- package/src/client/namespaces/AnalyticsNamespace.ts +377 -377
- package/src/client/namespaces/BatchNamespace.ts +356 -356
- package/src/client/namespaces/CacheNamespace.ts +123 -123
- package/src/client/namespaces/CapabilityNamespace.ts +217 -217
- package/src/client/namespaces/ClassifyNamespace.ts +169 -169
- package/src/client/namespaces/ContextNamespace.ts +297 -297
- package/src/client/namespaces/EmbeddingsNamespace.ts +99 -99
- package/src/client/namespaces/EncryptionNamespace.ts +221 -221
- package/src/client/namespaces/GraphNamespace.ts +468 -468
- package/src/client/namespaces/IndexNamespace.ts +361 -361
- package/src/client/namespaces/MemoryNamespace.ts +1422 -1135
- package/src/client/namespaces/PermissionsNamespace.ts +254 -254
- package/src/client/namespaces/PipelineNamespace.ts +220 -220
- package/src/client/namespaces/SearchNamespace.ts +1049 -1049
- package/src/client/namespaces/StorageNamespace.ts +458 -458
- package/src/client/namespaces/TxNamespace.ts +260 -260
- package/src/client/namespaces/WalletNamespace.ts +243 -243
- package/src/client/namespaces/consolidated/AINamespace.ts +449 -449
- package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -546
- package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
- package/src/client/namespaces/consolidated/StorageNamespace.ts +1141 -497
- package/src/client/namespaces/consolidated/index.ts +39 -39
- package/src/client/signers/KeypairSigner.ts +108 -108
- package/src/client/signers/UnifiedSigner.ts +110 -110
- package/src/client/signers/WalletAdapterSigner.ts +159 -159
- package/src/client/signers/index.ts +26 -26
- package/src/config/ConfigurationHelper.ts +412 -412
- package/src/config/defaults.ts +51 -51
- package/src/config/index.ts +8 -8
- package/src/config/validation.ts +70 -70
- package/src/core/index.ts +14 -14
- package/src/core/interfaces/IService.ts +307 -307
- package/src/core/interfaces/index.ts +8 -8
- package/src/core/types/capability.ts +297 -297
- package/src/core/types/index.ts +870 -870
- package/src/core/types/wallet.ts +270 -270
- package/src/core/types.ts +9 -9
- package/src/core/wallet.ts +222 -222
- package/src/embedding/index.ts +19 -19
- package/src/embedding/types.ts +357 -357
- package/src/errors/index.ts +602 -602
- package/src/errors/recovery.ts +461 -461
- package/src/errors/validation.ts +567 -567
- package/src/generated/pdw/capability.ts +319 -319
- package/src/graph/GraphService.ts +887 -887
- package/src/graph/KnowledgeGraphManager.ts +728 -728
- package/src/graph/index.ts +25 -25
- package/src/index.ts +498 -474
- package/src/infrastructure/index.ts +22 -22
- package/src/infrastructure/seal/EncryptionService.ts +628 -603
- package/src/infrastructure/seal/SealService.ts +613 -615
- package/src/infrastructure/seal/index.ts +9 -9
- package/src/infrastructure/sui/BlockchainManager.ts +627 -627
- package/src/infrastructure/sui/SuiService.ts +888 -888
- package/src/infrastructure/sui/index.ts +9 -9
- package/src/infrastructure/walrus/StorageManager.ts +604 -604
- package/src/infrastructure/walrus/WalrusStorageService.ts +612 -612
- package/src/infrastructure/walrus/index.ts +9 -9
- package/src/langchain/PDWEmbeddings.ts +145 -145
- package/src/langchain/PDWVectorStore.ts +456 -456
- package/src/langchain/createPDWRAG.ts +303 -303
- package/src/langchain/index.ts +47 -47
- package/src/permissions/ConsentRepository.browser.ts +249 -249
- package/src/permissions/ConsentRepository.ts +364 -364
- package/src/pipeline/MemoryPipeline.ts +862 -862
- package/src/pipeline/PipelineManager.ts +683 -683
- package/src/pipeline/index.ts +26 -26
- package/src/retrieval/AdvancedSearchService.ts +629 -629
- package/src/retrieval/MemoryAnalyticsService.ts +711 -711
- package/src/retrieval/MemoryDecryptionPipeline.ts +825 -824
- package/src/retrieval/MemoryRetrievalService.ts +904 -830
- package/src/retrieval/index.ts +42 -42
- package/src/services/BatchService.ts +352 -352
- package/src/services/CapabilityService.ts +464 -448
- package/src/services/ClassifierService.ts +465 -465
- package/src/services/CrossContextPermissionService.ts +486 -484
- package/src/services/EmbeddingService.ts +771 -706
- package/src/services/EncryptionService.ts +712 -711
- package/src/services/GeminiAIService.ts +753 -753
- package/src/services/IndexManager.ts +977 -1004
- package/src/services/MemoryIndexService.ts +1003 -1003
- package/src/services/MemoryService.ts +369 -369
- package/src/services/QueryService.ts +890 -890
- package/src/services/StorageService.ts +1182 -1111
- package/src/services/TransactionService.ts +838 -790
- package/src/services/VectorService.ts +462 -462
- package/src/services/ViewService.ts +484 -484
- package/src/services/index.ts +25 -25
- package/src/services/storage/BlobAttributesManager.ts +333 -333
- package/src/services/storage/KnowledgeGraphManager.ts +425 -425
- package/src/services/storage/MemorySearchManager.ts +387 -387
- package/src/services/storage/QuiltBatchManager.ts +1130 -660
- package/src/services/storage/WalrusMetadataManager.ts +268 -268
- package/src/services/storage/WalrusStorageManager.ts +287 -287
- package/src/services/storage/index.ts +57 -52
- package/src/types/index.ts +13 -13
- package/src/utils/LRUCache.ts +378 -0
- package/src/utils/index.ts +76 -68
- package/src/utils/memoryIndexOnChain.ts +507 -0
- package/src/utils/rebuildIndex.ts +290 -290
- package/src/utils/rebuildIndexNode.ts +771 -424
- package/src/vector/BrowserHnswIndexService.ts +758 -758
- package/src/vector/HnswWasmService.ts +731 -679
- package/src/vector/IHnswService.ts +233 -224
- package/src/vector/NodeHnswService.ts +833 -735
- package/src/vector/VectorManager.ts +478 -478
- package/src/vector/createHnswService.ts +135 -135
- package/src/vector/index.ts +56 -56
- package/src/wallet/ContextWalletService.ts +656 -656
- package/src/wallet/MainWalletService.ts +317 -317
|
@@ -1,307 +1,307 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base Service Interface
|
|
3
|
-
*
|
|
4
|
-
* Defines the standard interface that all services in the PDW SDK should implement.
|
|
5
|
-
* Provides consistent lifecycle management, error handling, logging, and metrics.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Service lifecycle states
|
|
10
|
-
*/
|
|
11
|
-
export enum ServiceState {
|
|
12
|
-
UNINITIALIZED = 'uninitialized',
|
|
13
|
-
INITIALIZING = 'initializing',
|
|
14
|
-
READY = 'ready',
|
|
15
|
-
ERROR = 'error',
|
|
16
|
-
DESTROYED = 'destroyed',
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Service configuration base interface
|
|
21
|
-
*/
|
|
22
|
-
export interface IServiceConfig {
|
|
23
|
-
/** Service name for logging and metrics */
|
|
24
|
-
name?: string;
|
|
25
|
-
/** Enable debug logging */
|
|
26
|
-
debug?: boolean;
|
|
27
|
-
/** Enable metrics collection */
|
|
28
|
-
enableMetrics?: boolean;
|
|
29
|
-
/** Custom logger instance */
|
|
30
|
-
logger?: ILogger;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Logger interface for consistent logging across services
|
|
35
|
-
*/
|
|
36
|
-
export interface ILogger {
|
|
37
|
-
debug(message: string, context?: Record<string, any>): void;
|
|
38
|
-
info(message: string, context?: Record<string, any>): void;
|
|
39
|
-
warn(message: string, context?: Record<string, any>): void;
|
|
40
|
-
error(message: string, error?: Error, context?: Record<string, any>): void;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Service metrics interface
|
|
45
|
-
*/
|
|
46
|
-
export interface IServiceMetrics {
|
|
47
|
-
/** Total number of operations performed */
|
|
48
|
-
operationCount: number;
|
|
49
|
-
/** Total number of errors encountered */
|
|
50
|
-
errorCount: number;
|
|
51
|
-
/** Average operation duration in milliseconds */
|
|
52
|
-
averageDuration: number;
|
|
53
|
-
/** Last operation timestamp */
|
|
54
|
-
lastOperationTime?: number;
|
|
55
|
-
/** Service uptime in milliseconds */
|
|
56
|
-
uptime: number;
|
|
57
|
-
/** Custom metrics specific to the service */
|
|
58
|
-
custom?: Record<string, number>;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Base service interface that all services should implement
|
|
63
|
-
*/
|
|
64
|
-
export interface IService {
|
|
65
|
-
/**
|
|
66
|
-
* Service name for identification
|
|
67
|
-
*/
|
|
68
|
-
readonly name: string;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Current service state
|
|
72
|
-
*/
|
|
73
|
-
readonly state: ServiceState;
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Initialize the service
|
|
77
|
-
* Should be called before using the service
|
|
78
|
-
* @returns Promise that resolves when initialization is complete
|
|
79
|
-
*/
|
|
80
|
-
initialize?(): Promise<void>;
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Destroy the service and cleanup resources
|
|
84
|
-
* Should be called when the service is no longer needed
|
|
85
|
-
* @returns Promise that resolves when cleanup is complete
|
|
86
|
-
*/
|
|
87
|
-
destroy?(): Promise<void>;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Reset the service to initial state
|
|
91
|
-
* Useful for testing or recovering from errors
|
|
92
|
-
* @returns Promise that resolves when reset is complete
|
|
93
|
-
*/
|
|
94
|
-
reset?(): Promise<void>;
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Get service health status
|
|
98
|
-
* @returns Health check result
|
|
99
|
-
*/
|
|
100
|
-
getHealth?(): Promise<ServiceHealth>;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Get service metrics
|
|
104
|
-
* @returns Current service metrics
|
|
105
|
-
*/
|
|
106
|
-
getMetrics?(): IServiceMetrics;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Service health check result
|
|
111
|
-
*/
|
|
112
|
-
export interface ServiceHealth {
|
|
113
|
-
/** Whether the service is healthy */
|
|
114
|
-
healthy: boolean;
|
|
115
|
-
/** Service state */
|
|
116
|
-
state: ServiceState;
|
|
117
|
-
/** Health check timestamp */
|
|
118
|
-
timestamp: number;
|
|
119
|
-
/** Optional error message if unhealthy */
|
|
120
|
-
error?: string;
|
|
121
|
-
/** Additional health details */
|
|
122
|
-
details?: Record<string, any>;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Default console logger implementation
|
|
127
|
-
*/
|
|
128
|
-
export class ConsoleLogger implements ILogger {
|
|
129
|
-
constructor(private serviceName: string, private debugEnabled: boolean = false) {}
|
|
130
|
-
|
|
131
|
-
debug(message: string, context?: Record<string, any>): void {
|
|
132
|
-
if (this.debugEnabled) {
|
|
133
|
-
console.debug(`[${this.serviceName}] ${message}`, context || '');
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
info(message: string, context?: Record<string, any>): void {
|
|
138
|
-
console.log(`[${this.serviceName}] ${message}`, context || '');
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
warn(message: string, context?: Record<string, any>): void {
|
|
142
|
-
console.warn(`[${this.serviceName}] ${message}`, context || '');
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
error(message: string, error?: Error, context?: Record<string, any>): void {
|
|
146
|
-
console.error(`[${this.serviceName}] ${message}`, error, context || '');
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Abstract base service class with common functionality
|
|
152
|
-
*/
|
|
153
|
-
export abstract class BaseService implements IService {
|
|
154
|
-
protected _state: ServiceState = ServiceState.UNINITIALIZED;
|
|
155
|
-
protected _logger: ILogger;
|
|
156
|
-
protected _metrics: IServiceMetrics;
|
|
157
|
-
protected _startTime: number;
|
|
158
|
-
|
|
159
|
-
constructor(protected config: IServiceConfig) {
|
|
160
|
-
this._logger = config.logger || new ConsoleLogger(
|
|
161
|
-
config.name || this.constructor.name,
|
|
162
|
-
config.debug || false
|
|
163
|
-
);
|
|
164
|
-
|
|
165
|
-
this._startTime = Date.now();
|
|
166
|
-
|
|
167
|
-
this._metrics = {
|
|
168
|
-
operationCount: 0,
|
|
169
|
-
errorCount: 0,
|
|
170
|
-
averageDuration: 0,
|
|
171
|
-
uptime: 0,
|
|
172
|
-
custom: {},
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
get name(): string {
|
|
177
|
-
return this.config.name || this.constructor.name;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
get state(): ServiceState {
|
|
181
|
-
return this._state;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
async initialize(): Promise<void> {
|
|
185
|
-
if (this._state !== ServiceState.UNINITIALIZED) {
|
|
186
|
-
this._logger.warn('Service already initialized', { state: this._state });
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
this._state = ServiceState.INITIALIZING;
|
|
191
|
-
this._logger.info('Initializing service...');
|
|
192
|
-
|
|
193
|
-
try {
|
|
194
|
-
await this.onInitialize();
|
|
195
|
-
this._state = ServiceState.READY;
|
|
196
|
-
this._logger.info('Service initialized successfully');
|
|
197
|
-
} catch (error) {
|
|
198
|
-
this._state = ServiceState.ERROR;
|
|
199
|
-
this._logger.error('Service initialization failed', error as Error);
|
|
200
|
-
throw error;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
async destroy(): Promise<void> {
|
|
205
|
-
this._logger.info('Destroying service...');
|
|
206
|
-
|
|
207
|
-
try {
|
|
208
|
-
await this.onDestroy();
|
|
209
|
-
this._state = ServiceState.DESTROYED;
|
|
210
|
-
this._logger.info('Service destroyed successfully');
|
|
211
|
-
} catch (error) {
|
|
212
|
-
this._logger.error('Service destruction failed', error as Error);
|
|
213
|
-
throw error;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
async reset(): Promise<void> {
|
|
218
|
-
this._logger.info('Resetting service...');
|
|
219
|
-
|
|
220
|
-
try {
|
|
221
|
-
await this.onReset();
|
|
222
|
-
this._metrics = {
|
|
223
|
-
operationCount: 0,
|
|
224
|
-
errorCount: 0,
|
|
225
|
-
averageDuration: 0,
|
|
226
|
-
uptime: 0,
|
|
227
|
-
custom: {},
|
|
228
|
-
};
|
|
229
|
-
this._logger.info('Service reset successfully');
|
|
230
|
-
} catch (error) {
|
|
231
|
-
this._logger.error('Service reset failed', error as Error);
|
|
232
|
-
throw error;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
async getHealth(): Promise<ServiceHealth> {
|
|
237
|
-
return {
|
|
238
|
-
healthy: this._state === ServiceState.READY,
|
|
239
|
-
state: this._state,
|
|
240
|
-
timestamp: Date.now(),
|
|
241
|
-
details: {
|
|
242
|
-
uptime: Date.now() - this._startTime,
|
|
243
|
-
operationCount: this._metrics.operationCount,
|
|
244
|
-
errorCount: this._metrics.errorCount,
|
|
245
|
-
},
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
getMetrics(): IServiceMetrics {
|
|
250
|
-
return {
|
|
251
|
-
...this._metrics,
|
|
252
|
-
uptime: Date.now() - this._startTime,
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Track an operation for metrics
|
|
258
|
-
*/
|
|
259
|
-
protected async trackOperation<T>(
|
|
260
|
-
operationName: string,
|
|
261
|
-
operation: () => Promise<T>
|
|
262
|
-
): Promise<T> {
|
|
263
|
-
const startTime = performance.now();
|
|
264
|
-
|
|
265
|
-
try {
|
|
266
|
-
this._logger.debug(`Starting operation: ${operationName}`);
|
|
267
|
-
const result = await operation();
|
|
268
|
-
|
|
269
|
-
const duration = performance.now() - startTime;
|
|
270
|
-
this.updateMetrics(duration);
|
|
271
|
-
|
|
272
|
-
this._logger.debug(`Completed operation: ${operationName}`, { duration });
|
|
273
|
-
return result;
|
|
274
|
-
} catch (error) {
|
|
275
|
-
this._metrics.errorCount++;
|
|
276
|
-
this._logger.error(`Operation failed: ${operationName}`, error as Error);
|
|
277
|
-
throw error;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/**
|
|
282
|
-
* Update metrics with operation duration
|
|
283
|
-
*/
|
|
284
|
-
private updateMetrics(duration: number): void {
|
|
285
|
-
this._metrics.operationCount++;
|
|
286
|
-
|
|
287
|
-
// Calculate rolling average
|
|
288
|
-
const totalDuration = this._metrics.averageDuration * (this._metrics.operationCount - 1);
|
|
289
|
-
this._metrics.averageDuration = (totalDuration + duration) / this._metrics.operationCount;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Hook for service-specific initialization
|
|
294
|
-
*/
|
|
295
|
-
protected abstract onInitialize(): Promise<void>;
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Hook for service-specific destruction
|
|
299
|
-
*/
|
|
300
|
-
protected abstract onDestroy(): Promise<void>;
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* Hook for service-specific reset
|
|
304
|
-
*/
|
|
305
|
-
protected abstract onReset(): Promise<void>;
|
|
306
|
-
}
|
|
307
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Base Service Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the standard interface that all services in the PDW SDK should implement.
|
|
5
|
+
* Provides consistent lifecycle management, error handling, logging, and metrics.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Service lifecycle states
|
|
10
|
+
*/
|
|
11
|
+
export enum ServiceState {
|
|
12
|
+
UNINITIALIZED = 'uninitialized',
|
|
13
|
+
INITIALIZING = 'initializing',
|
|
14
|
+
READY = 'ready',
|
|
15
|
+
ERROR = 'error',
|
|
16
|
+
DESTROYED = 'destroyed',
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Service configuration base interface
|
|
21
|
+
*/
|
|
22
|
+
export interface IServiceConfig {
|
|
23
|
+
/** Service name for logging and metrics */
|
|
24
|
+
name?: string;
|
|
25
|
+
/** Enable debug logging */
|
|
26
|
+
debug?: boolean;
|
|
27
|
+
/** Enable metrics collection */
|
|
28
|
+
enableMetrics?: boolean;
|
|
29
|
+
/** Custom logger instance */
|
|
30
|
+
logger?: ILogger;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Logger interface for consistent logging across services
|
|
35
|
+
*/
|
|
36
|
+
export interface ILogger {
|
|
37
|
+
debug(message: string, context?: Record<string, any>): void;
|
|
38
|
+
info(message: string, context?: Record<string, any>): void;
|
|
39
|
+
warn(message: string, context?: Record<string, any>): void;
|
|
40
|
+
error(message: string, error?: Error, context?: Record<string, any>): void;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Service metrics interface
|
|
45
|
+
*/
|
|
46
|
+
export interface IServiceMetrics {
|
|
47
|
+
/** Total number of operations performed */
|
|
48
|
+
operationCount: number;
|
|
49
|
+
/** Total number of errors encountered */
|
|
50
|
+
errorCount: number;
|
|
51
|
+
/** Average operation duration in milliseconds */
|
|
52
|
+
averageDuration: number;
|
|
53
|
+
/** Last operation timestamp */
|
|
54
|
+
lastOperationTime?: number;
|
|
55
|
+
/** Service uptime in milliseconds */
|
|
56
|
+
uptime: number;
|
|
57
|
+
/** Custom metrics specific to the service */
|
|
58
|
+
custom?: Record<string, number>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Base service interface that all services should implement
|
|
63
|
+
*/
|
|
64
|
+
export interface IService {
|
|
65
|
+
/**
|
|
66
|
+
* Service name for identification
|
|
67
|
+
*/
|
|
68
|
+
readonly name: string;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Current service state
|
|
72
|
+
*/
|
|
73
|
+
readonly state: ServiceState;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Initialize the service
|
|
77
|
+
* Should be called before using the service
|
|
78
|
+
* @returns Promise that resolves when initialization is complete
|
|
79
|
+
*/
|
|
80
|
+
initialize?(): Promise<void>;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Destroy the service and cleanup resources
|
|
84
|
+
* Should be called when the service is no longer needed
|
|
85
|
+
* @returns Promise that resolves when cleanup is complete
|
|
86
|
+
*/
|
|
87
|
+
destroy?(): Promise<void>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Reset the service to initial state
|
|
91
|
+
* Useful for testing or recovering from errors
|
|
92
|
+
* @returns Promise that resolves when reset is complete
|
|
93
|
+
*/
|
|
94
|
+
reset?(): Promise<void>;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Get service health status
|
|
98
|
+
* @returns Health check result
|
|
99
|
+
*/
|
|
100
|
+
getHealth?(): Promise<ServiceHealth>;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Get service metrics
|
|
104
|
+
* @returns Current service metrics
|
|
105
|
+
*/
|
|
106
|
+
getMetrics?(): IServiceMetrics;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Service health check result
|
|
111
|
+
*/
|
|
112
|
+
export interface ServiceHealth {
|
|
113
|
+
/** Whether the service is healthy */
|
|
114
|
+
healthy: boolean;
|
|
115
|
+
/** Service state */
|
|
116
|
+
state: ServiceState;
|
|
117
|
+
/** Health check timestamp */
|
|
118
|
+
timestamp: number;
|
|
119
|
+
/** Optional error message if unhealthy */
|
|
120
|
+
error?: string;
|
|
121
|
+
/** Additional health details */
|
|
122
|
+
details?: Record<string, any>;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Default console logger implementation
|
|
127
|
+
*/
|
|
128
|
+
export class ConsoleLogger implements ILogger {
|
|
129
|
+
constructor(private serviceName: string, private debugEnabled: boolean = false) {}
|
|
130
|
+
|
|
131
|
+
debug(message: string, context?: Record<string, any>): void {
|
|
132
|
+
if (this.debugEnabled) {
|
|
133
|
+
console.debug(`[${this.serviceName}] ${message}`, context || '');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
info(message: string, context?: Record<string, any>): void {
|
|
138
|
+
console.log(`[${this.serviceName}] ${message}`, context || '');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
warn(message: string, context?: Record<string, any>): void {
|
|
142
|
+
console.warn(`[${this.serviceName}] ${message}`, context || '');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
error(message: string, error?: Error, context?: Record<string, any>): void {
|
|
146
|
+
console.error(`[${this.serviceName}] ${message}`, error, context || '');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Abstract base service class with common functionality
|
|
152
|
+
*/
|
|
153
|
+
export abstract class BaseService implements IService {
|
|
154
|
+
protected _state: ServiceState = ServiceState.UNINITIALIZED;
|
|
155
|
+
protected _logger: ILogger;
|
|
156
|
+
protected _metrics: IServiceMetrics;
|
|
157
|
+
protected _startTime: number;
|
|
158
|
+
|
|
159
|
+
constructor(protected config: IServiceConfig) {
|
|
160
|
+
this._logger = config.logger || new ConsoleLogger(
|
|
161
|
+
config.name || this.constructor.name,
|
|
162
|
+
config.debug || false
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
this._startTime = Date.now();
|
|
166
|
+
|
|
167
|
+
this._metrics = {
|
|
168
|
+
operationCount: 0,
|
|
169
|
+
errorCount: 0,
|
|
170
|
+
averageDuration: 0,
|
|
171
|
+
uptime: 0,
|
|
172
|
+
custom: {},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
get name(): string {
|
|
177
|
+
return this.config.name || this.constructor.name;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
get state(): ServiceState {
|
|
181
|
+
return this._state;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async initialize(): Promise<void> {
|
|
185
|
+
if (this._state !== ServiceState.UNINITIALIZED) {
|
|
186
|
+
this._logger.warn('Service already initialized', { state: this._state });
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
this._state = ServiceState.INITIALIZING;
|
|
191
|
+
this._logger.info('Initializing service...');
|
|
192
|
+
|
|
193
|
+
try {
|
|
194
|
+
await this.onInitialize();
|
|
195
|
+
this._state = ServiceState.READY;
|
|
196
|
+
this._logger.info('Service initialized successfully');
|
|
197
|
+
} catch (error) {
|
|
198
|
+
this._state = ServiceState.ERROR;
|
|
199
|
+
this._logger.error('Service initialization failed', error as Error);
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async destroy(): Promise<void> {
|
|
205
|
+
this._logger.info('Destroying service...');
|
|
206
|
+
|
|
207
|
+
try {
|
|
208
|
+
await this.onDestroy();
|
|
209
|
+
this._state = ServiceState.DESTROYED;
|
|
210
|
+
this._logger.info('Service destroyed successfully');
|
|
211
|
+
} catch (error) {
|
|
212
|
+
this._logger.error('Service destruction failed', error as Error);
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
async reset(): Promise<void> {
|
|
218
|
+
this._logger.info('Resetting service...');
|
|
219
|
+
|
|
220
|
+
try {
|
|
221
|
+
await this.onReset();
|
|
222
|
+
this._metrics = {
|
|
223
|
+
operationCount: 0,
|
|
224
|
+
errorCount: 0,
|
|
225
|
+
averageDuration: 0,
|
|
226
|
+
uptime: 0,
|
|
227
|
+
custom: {},
|
|
228
|
+
};
|
|
229
|
+
this._logger.info('Service reset successfully');
|
|
230
|
+
} catch (error) {
|
|
231
|
+
this._logger.error('Service reset failed', error as Error);
|
|
232
|
+
throw error;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
async getHealth(): Promise<ServiceHealth> {
|
|
237
|
+
return {
|
|
238
|
+
healthy: this._state === ServiceState.READY,
|
|
239
|
+
state: this._state,
|
|
240
|
+
timestamp: Date.now(),
|
|
241
|
+
details: {
|
|
242
|
+
uptime: Date.now() - this._startTime,
|
|
243
|
+
operationCount: this._metrics.operationCount,
|
|
244
|
+
errorCount: this._metrics.errorCount,
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
getMetrics(): IServiceMetrics {
|
|
250
|
+
return {
|
|
251
|
+
...this._metrics,
|
|
252
|
+
uptime: Date.now() - this._startTime,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Track an operation for metrics
|
|
258
|
+
*/
|
|
259
|
+
protected async trackOperation<T>(
|
|
260
|
+
operationName: string,
|
|
261
|
+
operation: () => Promise<T>
|
|
262
|
+
): Promise<T> {
|
|
263
|
+
const startTime = performance.now();
|
|
264
|
+
|
|
265
|
+
try {
|
|
266
|
+
this._logger.debug(`Starting operation: ${operationName}`);
|
|
267
|
+
const result = await operation();
|
|
268
|
+
|
|
269
|
+
const duration = performance.now() - startTime;
|
|
270
|
+
this.updateMetrics(duration);
|
|
271
|
+
|
|
272
|
+
this._logger.debug(`Completed operation: ${operationName}`, { duration });
|
|
273
|
+
return result;
|
|
274
|
+
} catch (error) {
|
|
275
|
+
this._metrics.errorCount++;
|
|
276
|
+
this._logger.error(`Operation failed: ${operationName}`, error as Error);
|
|
277
|
+
throw error;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Update metrics with operation duration
|
|
283
|
+
*/
|
|
284
|
+
private updateMetrics(duration: number): void {
|
|
285
|
+
this._metrics.operationCount++;
|
|
286
|
+
|
|
287
|
+
// Calculate rolling average
|
|
288
|
+
const totalDuration = this._metrics.averageDuration * (this._metrics.operationCount - 1);
|
|
289
|
+
this._metrics.averageDuration = (totalDuration + duration) / this._metrics.operationCount;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Hook for service-specific initialization
|
|
294
|
+
*/
|
|
295
|
+
protected abstract onInitialize(): Promise<void>;
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Hook for service-specific destruction
|
|
299
|
+
*/
|
|
300
|
+
protected abstract onDestroy(): Promise<void>;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Hook for service-specific reset
|
|
304
|
+
*/
|
|
305
|
+
protected abstract onReset(): Promise<void>;
|
|
306
|
+
}
|
|
307
|
+
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core Interfaces - Barrel Export
|
|
3
|
-
*
|
|
4
|
-
* Exports all core interfaces and base classes for the PDW SDK.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export * from './IService';
|
|
8
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Core Interfaces - Barrel Export
|
|
3
|
+
*
|
|
4
|
+
* Exports all core interfaces and base classes for the PDW SDK.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export * from './IService';
|
|
8
|
+
|