@cmdoss/memwal-sdk 0.8.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +522 -160
  2. package/dist/client/ClientMemoryManager.d.ts.map +1 -1
  3. package/dist/client/ClientMemoryManager.js +25 -8
  4. package/dist/client/ClientMemoryManager.js.map +1 -1
  5. package/dist/client/PersonalDataWallet.d.ts.map +1 -1
  6. package/dist/client/SimplePDWClient.d.ts +62 -2
  7. package/dist/client/SimplePDWClient.d.ts.map +1 -1
  8. package/dist/client/SimplePDWClient.js +96 -11
  9. package/dist/client/SimplePDWClient.js.map +1 -1
  10. package/dist/client/namespaces/IndexNamespace.d.ts +1 -1
  11. package/dist/client/namespaces/IndexNamespace.d.ts.map +1 -1
  12. package/dist/client/namespaces/IndexNamespace.js +7 -4
  13. package/dist/client/namespaces/IndexNamespace.js.map +1 -1
  14. package/dist/client/namespaces/MemoryNamespace.d.ts +47 -0
  15. package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
  16. package/dist/client/namespaces/MemoryNamespace.js +257 -27
  17. package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
  18. package/dist/client/namespaces/consolidated/AdvancedNamespace.d.ts +215 -0
  19. package/dist/client/namespaces/consolidated/AdvancedNamespace.d.ts.map +1 -0
  20. package/dist/client/namespaces/consolidated/AdvancedNamespace.js +214 -0
  21. package/dist/client/namespaces/consolidated/AdvancedNamespace.js.map +1 -0
  22. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +3 -1
  23. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
  24. package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
  25. package/dist/client/namespaces/consolidated/index.d.ts +1 -0
  26. package/dist/client/namespaces/consolidated/index.d.ts.map +1 -1
  27. package/dist/client/namespaces/consolidated/index.js +1 -0
  28. package/dist/client/namespaces/consolidated/index.js.map +1 -1
  29. package/dist/config/ConfigurationHelper.js +61 -61
  30. package/dist/config/defaults.d.ts.map +1 -1
  31. package/dist/config/defaults.js +9 -4
  32. package/dist/config/defaults.js.map +1 -1
  33. package/dist/config/index.d.ts +1 -0
  34. package/dist/config/index.d.ts.map +1 -1
  35. package/dist/config/index.js +2 -0
  36. package/dist/config/index.js.map +1 -1
  37. package/dist/config/modelDefaults.d.ts +67 -0
  38. package/dist/config/modelDefaults.d.ts.map +1 -0
  39. package/dist/config/modelDefaults.js +91 -0
  40. package/dist/config/modelDefaults.js.map +1 -0
  41. package/dist/core/types/index.d.ts +4 -0
  42. package/dist/core/types/index.d.ts.map +1 -1
  43. package/dist/core/types/index.js.map +1 -1
  44. package/dist/graph/GraphService.d.ts.map +1 -1
  45. package/dist/graph/GraphService.js +22 -21
  46. package/dist/graph/GraphService.js.map +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +1 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/infrastructure/walrus/WalrusStorageService.d.ts +6 -0
  52. package/dist/infrastructure/walrus/WalrusStorageService.d.ts.map +1 -1
  53. package/dist/infrastructure/walrus/WalrusStorageService.js +23 -4
  54. package/dist/infrastructure/walrus/WalrusStorageService.js.map +1 -1
  55. package/dist/langchain/createPDWRAG.js +30 -30
  56. package/dist/pipeline/MemoryPipeline.d.ts.map +1 -1
  57. package/dist/pipeline/MemoryPipeline.js +2 -1
  58. package/dist/pipeline/MemoryPipeline.js.map +1 -1
  59. package/dist/services/EmbeddingService.d.ts +9 -0
  60. package/dist/services/EmbeddingService.d.ts.map +1 -1
  61. package/dist/services/EmbeddingService.js +31 -10
  62. package/dist/services/EmbeddingService.js.map +1 -1
  63. package/dist/services/GeminiAIService.d.ts.map +1 -1
  64. package/dist/services/GeminiAIService.js +311 -310
  65. package/dist/services/GeminiAIService.js.map +1 -1
  66. package/dist/services/MemoryIndexService.d.ts +2 -0
  67. package/dist/services/MemoryIndexService.d.ts.map +1 -1
  68. package/dist/services/MemoryIndexService.js +11 -4
  69. package/dist/services/MemoryIndexService.js.map +1 -1
  70. package/dist/services/StorageService.d.ts +4 -1
  71. package/dist/services/StorageService.d.ts.map +1 -1
  72. package/dist/services/StorageService.js.map +1 -1
  73. package/dist/services/VectorService.js +1 -1
  74. package/dist/services/VectorService.js.map +1 -1
  75. package/dist/services/storage/QuiltBatchManager.d.ts +7 -0
  76. package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
  77. package/dist/services/storage/QuiltBatchManager.js +24 -5
  78. package/dist/services/storage/QuiltBatchManager.js.map +1 -1
  79. package/dist/services/storage/WalrusStorageManager.d.ts +10 -1
  80. package/dist/services/storage/WalrusStorageManager.d.ts.map +1 -1
  81. package/dist/services/storage/WalrusStorageManager.js +53 -12
  82. package/dist/services/storage/WalrusStorageManager.js.map +1 -1
  83. package/dist/vector/BrowserHnswIndexService.js +3 -3
  84. package/dist/vector/BrowserHnswIndexService.js.map +1 -1
  85. package/dist/vector/HnswWasmService.js +1 -1
  86. package/dist/vector/HnswWasmService.js.map +1 -1
  87. package/dist/vector/NodeHnswService.js +5 -5
  88. package/dist/vector/NodeHnswService.js.map +1 -1
  89. package/dist/vector/createHnswService.d.ts +4 -0
  90. package/dist/vector/createHnswService.d.ts.map +1 -1
  91. package/dist/vector/createHnswService.js +15 -3
  92. package/dist/vector/createHnswService.js.map +1 -1
  93. package/package.json +1 -1
  94. package/src/access/PermissionService.ts +635 -635
  95. package/src/aggregation/AggregationService.ts +389 -389
  96. package/src/ai-sdk/PDWVectorStore.ts +715 -715
  97. package/src/ai-sdk/index.ts +65 -65
  98. package/src/ai-sdk/tools.ts +460 -460
  99. package/src/ai-sdk/types.ts +404 -404
  100. package/src/batch/BatchManager.ts +597 -597
  101. package/src/batch/BatchingService.ts +429 -429
  102. package/src/batch/MemoryProcessingCache.ts +492 -492
  103. package/src/batch/index.ts +30 -30
  104. package/src/browser.ts +200 -200
  105. package/src/client/ClientMemoryManager.ts +1004 -987
  106. package/src/client/PersonalDataWallet.ts +345 -345
  107. package/src/client/SimplePDWClient.ts +1387 -1289
  108. package/src/client/factory.ts +154 -154
  109. package/src/client/namespaces/AnalyticsNamespace.ts +377 -377
  110. package/src/client/namespaces/BatchNamespace.ts +356 -356
  111. package/src/client/namespaces/CacheNamespace.ts +123 -123
  112. package/src/client/namespaces/CapabilityNamespace.ts +217 -217
  113. package/src/client/namespaces/ClassifyNamespace.ts +169 -169
  114. package/src/client/namespaces/ContextNamespace.ts +297 -297
  115. package/src/client/namespaces/EncryptionNamespace.ts +221 -221
  116. package/src/client/namespaces/GraphNamespace.ts +468 -468
  117. package/src/client/namespaces/IndexNamespace.ts +364 -361
  118. package/src/client/namespaces/MemoryNamespace.ts +1704 -1422
  119. package/src/client/namespaces/PermissionsNamespace.ts +254 -254
  120. package/src/client/namespaces/PipelineNamespace.ts +220 -220
  121. package/src/client/namespaces/StorageNamespace.ts +458 -458
  122. package/src/client/namespaces/TxNamespace.ts +260 -260
  123. package/src/client/namespaces/WalletNamespace.ts +243 -243
  124. package/src/client/namespaces/consolidated/AdvancedNamespace.ts +264 -0
  125. package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -607
  126. package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
  127. package/src/client/namespaces/consolidated/StorageNamespace.ts +1143 -1141
  128. package/src/client/namespaces/consolidated/index.ts +41 -39
  129. package/src/client/signers/KeypairSigner.ts +108 -108
  130. package/src/client/signers/UnifiedSigner.ts +110 -110
  131. package/src/client/signers/WalletAdapterSigner.ts +159 -159
  132. package/src/client/signers/index.ts +26 -26
  133. package/src/config/ConfigurationHelper.ts +412 -412
  134. package/src/config/defaults.ts +56 -51
  135. package/src/config/index.ts +16 -9
  136. package/src/config/modelDefaults.ts +103 -0
  137. package/src/config/validation.ts +70 -70
  138. package/src/core/index.ts +14 -14
  139. package/src/core/interfaces/IService.ts +307 -307
  140. package/src/core/interfaces/index.ts +8 -8
  141. package/src/core/types/capability.ts +297 -297
  142. package/src/core/types/index.ts +874 -870
  143. package/src/core/types/wallet.ts +270 -270
  144. package/src/core/types.ts +9 -9
  145. package/src/core/wallet.ts +222 -222
  146. package/src/embedding/index.ts +19 -19
  147. package/src/embedding/types.ts +357 -357
  148. package/src/errors/index.ts +602 -602
  149. package/src/errors/recovery.ts +461 -461
  150. package/src/errors/validation.ts +567 -567
  151. package/src/generated/pdw/capability.ts +319 -319
  152. package/src/graph/GraphService.ts +888 -887
  153. package/src/graph/KnowledgeGraphManager.ts +728 -728
  154. package/src/graph/index.ts +25 -25
  155. package/src/index.ts +498 -498
  156. package/src/infrastructure/index.ts +22 -22
  157. package/src/infrastructure/seal/EncryptionService.ts +628 -628
  158. package/src/infrastructure/seal/SealService.ts +613 -613
  159. package/src/infrastructure/seal/index.ts +9 -9
  160. package/src/infrastructure/sui/BlockchainManager.ts +627 -627
  161. package/src/infrastructure/sui/SuiService.ts +888 -888
  162. package/src/infrastructure/sui/index.ts +9 -9
  163. package/src/infrastructure/walrus/StorageManager.ts +604 -604
  164. package/src/infrastructure/walrus/WalrusStorageService.ts +637 -612
  165. package/src/infrastructure/walrus/index.ts +9 -9
  166. package/src/langchain/createPDWRAG.ts +303 -303
  167. package/src/langchain/index.ts +47 -47
  168. package/src/permissions/ConsentRepository.browser.ts +249 -249
  169. package/src/permissions/ConsentRepository.ts +364 -364
  170. package/src/pipeline/MemoryPipeline.ts +863 -862
  171. package/src/pipeline/PipelineManager.ts +683 -683
  172. package/src/pipeline/index.ts +26 -26
  173. package/src/retrieval/AdvancedSearchService.ts +629 -629
  174. package/src/retrieval/MemoryAnalyticsService.ts +711 -711
  175. package/src/retrieval/MemoryDecryptionPipeline.ts +825 -825
  176. package/src/retrieval/index.ts +42 -42
  177. package/src/services/BatchService.ts +352 -352
  178. package/src/services/CapabilityService.ts +464 -464
  179. package/src/services/ClassifierService.ts +465 -465
  180. package/src/services/CrossContextPermissionService.ts +486 -486
  181. package/src/services/EmbeddingService.ts +796 -771
  182. package/src/services/EncryptionService.ts +712 -712
  183. package/src/services/GeminiAIService.ts +754 -753
  184. package/src/services/MemoryIndexService.ts +1009 -1003
  185. package/src/services/MemoryService.ts +369 -369
  186. package/src/services/QueryService.ts +890 -890
  187. package/src/services/StorageService.ts +1185 -1182
  188. package/src/services/TransactionService.ts +838 -838
  189. package/src/services/VectorService.ts +462 -462
  190. package/src/services/ViewService.ts +484 -484
  191. package/src/services/index.ts +25 -25
  192. package/src/services/storage/BlobAttributesManager.ts +333 -333
  193. package/src/services/storage/KnowledgeGraphManager.ts +425 -425
  194. package/src/services/storage/MemorySearchManager.ts +387 -387
  195. package/src/services/storage/QuiltBatchManager.ts +1157 -1130
  196. package/src/services/storage/WalrusMetadataManager.ts +268 -268
  197. package/src/services/storage/WalrusStorageManager.ts +333 -287
  198. package/src/services/storage/index.ts +57 -57
  199. package/src/types/index.ts +13 -13
  200. package/src/utils/index.ts +76 -76
  201. package/src/utils/memoryIndexOnChain.ts +507 -507
  202. package/src/vector/BrowserHnswIndexService.ts +758 -758
  203. package/src/vector/HnswWasmService.ts +731 -731
  204. package/src/vector/IHnswService.ts +233 -233
  205. package/src/vector/NodeHnswService.ts +833 -833
  206. package/src/vector/createHnswService.ts +147 -135
  207. package/src/vector/index.ts +56 -56
  208. package/src/wallet/ContextWalletService.ts +656 -656
  209. 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
+