@ai.ntellect/core 0.7.7 → 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 (111) hide show
  1. package/README.md +158 -81
  2. package/index.ts +462 -22
  3. package/package copy.json +21 -0
  4. package/package.json +9 -44
  5. package/tsconfig.json +108 -22
  6. package/types.ts +62 -0
  7. package/utils/executor.ts +42 -0
  8. package/.mocharc.json +0 -5
  9. package/dist/graph/controller.d.ts +0 -31
  10. package/dist/graph/controller.d.ts.map +0 -1
  11. package/dist/graph/controller.js +0 -71
  12. package/dist/graph/controller.js.map +0 -1
  13. package/dist/graph/event-manager.d.ts +0 -92
  14. package/dist/graph/event-manager.d.ts.map +0 -1
  15. package/dist/graph/event-manager.js +0 -244
  16. package/dist/graph/event-manager.js.map +0 -1
  17. package/dist/graph/index.d.ts +0 -159
  18. package/dist/graph/index.d.ts.map +0 -1
  19. package/dist/graph/index.js +0 -303
  20. package/dist/graph/index.js.map +0 -1
  21. package/dist/graph/logger.d.ts +0 -46
  22. package/dist/graph/logger.d.ts.map +0 -1
  23. package/dist/graph/logger.js +0 -69
  24. package/dist/graph/logger.js.map +0 -1
  25. package/dist/graph/node.d.ts +0 -92
  26. package/dist/graph/node.d.ts.map +0 -1
  27. package/dist/graph/node.js +0 -249
  28. package/dist/graph/node.js.map +0 -1
  29. package/dist/graph/observer.d.ts +0 -113
  30. package/dist/graph/observer.d.ts.map +0 -1
  31. package/dist/graph/observer.js +0 -198
  32. package/dist/graph/observer.js.map +0 -1
  33. package/dist/index.d.ts +0 -26
  34. package/dist/index.d.ts.map +0 -1
  35. package/dist/index.js +0 -42
  36. package/dist/index.js.map +0 -1
  37. package/dist/interfaces/index.d.ts +0 -447
  38. package/dist/interfaces/index.d.ts.map +0 -1
  39. package/dist/interfaces/index.js +0 -75
  40. package/dist/interfaces/index.js.map +0 -1
  41. package/dist/modules/agenda/adapters/node-cron/index.d.ts +0 -17
  42. package/dist/modules/agenda/adapters/node-cron/index.d.ts.map +0 -1
  43. package/dist/modules/agenda/adapters/node-cron/index.js +0 -30
  44. package/dist/modules/agenda/adapters/node-cron/index.js.map +0 -1
  45. package/dist/modules/agenda/index.d.ts +0 -63
  46. package/dist/modules/agenda/index.d.ts.map +0 -1
  47. package/dist/modules/agenda/index.js +0 -141
  48. package/dist/modules/agenda/index.js.map +0 -1
  49. package/dist/modules/embedding/adapters/ai/index.d.ts +0 -29
  50. package/dist/modules/embedding/adapters/ai/index.d.ts.map +0 -1
  51. package/dist/modules/embedding/adapters/ai/index.js +0 -58
  52. package/dist/modules/embedding/adapters/ai/index.js.map +0 -1
  53. package/dist/modules/embedding/index.d.ts +0 -36
  54. package/dist/modules/embedding/index.d.ts.map +0 -1
  55. package/dist/modules/embedding/index.js +0 -60
  56. package/dist/modules/embedding/index.js.map +0 -1
  57. package/dist/modules/memory/adapters/in-memory/index.d.ts +0 -120
  58. package/dist/modules/memory/adapters/in-memory/index.d.ts.map +0 -1
  59. package/dist/modules/memory/adapters/in-memory/index.js +0 -211
  60. package/dist/modules/memory/adapters/in-memory/index.js.map +0 -1
  61. package/dist/modules/memory/adapters/meilisearch/index.d.ts +0 -110
  62. package/dist/modules/memory/adapters/meilisearch/index.d.ts.map +0 -1
  63. package/dist/modules/memory/adapters/meilisearch/index.js +0 -321
  64. package/dist/modules/memory/adapters/meilisearch/index.js.map +0 -1
  65. package/dist/modules/memory/adapters/redis/index.d.ts +0 -82
  66. package/dist/modules/memory/adapters/redis/index.d.ts.map +0 -1
  67. package/dist/modules/memory/adapters/redis/index.js +0 -159
  68. package/dist/modules/memory/adapters/redis/index.js.map +0 -1
  69. package/dist/modules/memory/index.d.ts +0 -67
  70. package/dist/modules/memory/index.d.ts.map +0 -1
  71. package/dist/modules/memory/index.js +0 -104
  72. package/dist/modules/memory/index.js.map +0 -1
  73. package/dist/types/index.d.ts +0 -166
  74. package/dist/types/index.d.ts.map +0 -1
  75. package/dist/types/index.js +0 -3
  76. package/dist/types/index.js.map +0 -1
  77. package/dist/utils/generate-action-schema.d.ts +0 -5
  78. package/dist/utils/generate-action-schema.d.ts.map +0 -1
  79. package/dist/utils/generate-action-schema.js +0 -44
  80. package/dist/utils/generate-action-schema.js.map +0 -1
  81. package/dist/utils/header-builder.d.ts +0 -12
  82. package/dist/utils/header-builder.d.ts.map +0 -1
  83. package/dist/utils/header-builder.js +0 -35
  84. package/dist/utils/header-builder.js.map +0 -1
  85. package/graph/controller.ts +0 -74
  86. package/graph/event-manager.ts +0 -295
  87. package/graph/index.ts +0 -397
  88. package/graph/logger.ts +0 -70
  89. package/graph/node.ts +0 -305
  90. package/graph/observer.ts +0 -368
  91. package/interfaces/index.ts +0 -545
  92. package/modules/agenda/adapters/node-cron/index.ts +0 -25
  93. package/modules/agenda/index.ts +0 -146
  94. package/modules/embedding/adapters/ai/index.ts +0 -42
  95. package/modules/embedding/index.ts +0 -45
  96. package/modules/memory/adapters/in-memory/index.ts +0 -207
  97. package/modules/memory/adapters/meilisearch/index.ts +0 -361
  98. package/modules/memory/adapters/redis/index.ts +0 -164
  99. package/modules/memory/index.ts +0 -93
  100. package/test/graph/controller.test.ts +0 -187
  101. package/test/graph/event-manager.test.ts +0 -72
  102. package/test/graph/index.test.ts +0 -768
  103. package/test/graph/node.test.ts +0 -510
  104. package/test/graph/observer.test.ts +0 -398
  105. package/test/modules/agenda/node-cron.test.ts +0 -307
  106. package/test/modules/memory/adapters/in-memory.test.ts +0 -153
  107. package/test/modules/memory/adapters/meilisearch.test.ts +0 -287
  108. package/test/modules/memory/base.test.ts +0 -230
  109. package/types/index.ts +0 -184
  110. package/utils/generate-action-schema.ts +0 -46
  111. package/utils/header-builder.ts +0 -40
@@ -1,545 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { ZodSchema } from "zod";
3
- import {
4
- BaseMemoryType,
5
- CreateMemoryInput,
6
- GraphContext,
7
- GraphEvent,
8
- ScheduledRequest,
9
- } from "../types";
10
-
11
- /* ======================== EMBEDDING SERVICE ======================== */
12
-
13
- /**
14
- * Interface for an embedding service that processes text into vector representations.
15
- */
16
- export interface EmbeddingModule {
17
- /**
18
- * Generates an embedding for a single text.
19
- * @param {string} text - The input text to embed.
20
- * @returns {Promise<number[]>} - A vector representation of the text.
21
- */
22
- embedText(text: string): Promise<number[]>;
23
-
24
- /**
25
- * Generates embeddings for multiple texts at once.
26
- * @param {string[]} texts - The array of texts to embed.
27
- * @returns {Promise<number[][]>} - A list of vector representations.
28
- */
29
- embedMany(texts: string[]): Promise<number[][]>;
30
-
31
- /**
32
- * Calculates the similarity between two embeddings.
33
- * @param {number[]} embedding1 - First vector.
34
- * @param {number[]} embedding2 - Second vector.
35
- * @returns {number} - A similarity score between the two vectors.
36
- */
37
- calculateSimilarity(embedding1: number[], embedding2: number[]): number;
38
- }
39
-
40
- /* ======================== MEMORY SERVICE ======================== */
41
-
42
- /**
43
- * Interface for managing memory storage and retrieval.
44
- */
45
- export interface BaseMemoryService {
46
- /**
47
- * Initializes the memory storage connection.
48
- * @returns {Promise<void>} - Resolves when initialization is complete.
49
- */
50
- initializeConnection(): Promise<void>;
51
-
52
- /**
53
- * Stores a new memory entry.
54
- * @param {BaseMemoryType} memory - The memory data to store.
55
- * @param {number} [ttl] - Optional time-to-live in seconds.
56
- * @returns {Promise<void>}
57
- */
58
- createMemory(memory: BaseMemoryType, ttl?: number): Promise<void>;
59
-
60
- /**
61
- * Retrieves a memory entry by its unique ID.
62
- * @param {string} id - The memory entry identifier.
63
- * @returns {Promise<BaseMemoryType | null>} - The found memory or null.
64
- */
65
- getMemoryById(id: string): Promise<BaseMemoryType | null>;
66
-
67
- /**
68
- * Searches for memory entries based on a query and optional constraints.
69
- * @param {string} query - The search query.
70
- * @param {Object} options - Search options.
71
- * @param {string} options.roomId - The room identifier.
72
- * @param {number} [options.limit] - Maximum number of results (optional).
73
- * @returns {Promise<BaseMemoryType[]>} - A list of matched memory entries.
74
- */
75
- getMemoryByIndex(
76
- query: string,
77
- options: {
78
- roomId: string;
79
- limit?: number;
80
- }
81
- ): Promise<BaseMemoryType[]>;
82
-
83
- /**
84
- * Retrieves all stored memory entries.
85
- * @returns {Promise<BaseMemoryType[]>} - A list of all memory entries.
86
- */
87
- getAllMemories(): Promise<BaseMemoryType[]>;
88
-
89
- /**
90
- * Deletes a memory entry by its unique ID.
91
- * @param {string} id - The memory entry identifier.
92
- * @returns {Promise<void>}
93
- */
94
- clearMemoryById(id: string): Promise<void>;
95
-
96
- /**
97
- * Clears all stored memory entries.
98
- * @returns {Promise<void>}
99
- */
100
- clearAllMemories(): Promise<void>;
101
- }
102
-
103
- /**
104
- * Extended interface for memory service operations
105
- * @interface
106
- */
107
- export interface IMemoryService {
108
- /**
109
- * Initializes the memory service
110
- * @returns {Promise<void>}
111
- */
112
- init(): Promise<void>;
113
-
114
- /**
115
- * Creates a new memory entry with optional embedding
116
- * @param {CreateMemoryInput & { embedding?: number[] }} input - Memory data with optional embedding
117
- * @returns {Promise<BaseMemoryType | undefined>} Created memory or undefined
118
- */
119
- createMemory(
120
- input: CreateMemoryInput & { embedding?: number[] }
121
- ): Promise<BaseMemoryType | undefined>;
122
-
123
- /**
124
- * Retrieves a memory by ID and room ID
125
- * @param {string} id - Memory identifier
126
- * @param {string} roomId - Room identifier
127
- * @returns {Promise<BaseMemoryType | null>} Memory entry or null if not found
128
- */
129
- getMemoryById(id: string, roomId: string): Promise<BaseMemoryType | null>;
130
-
131
- /**
132
- * Searches for memories based on query and options
133
- * @param {string} query - Search query
134
- * @param {Object} options - Search options
135
- * @returns {Promise<BaseMemoryType[]>} Array of matching memories
136
- */
137
- getMemoryByIndex(
138
- query: string,
139
- options: { roomId: string; limit?: number }
140
- ): Promise<BaseMemoryType[]>;
141
-
142
- /**
143
- * Retrieves all memories for a specific room
144
- * @param {string} roomId - Room identifier
145
- * @returns {Promise<BaseMemoryType[]>} Array of all memories
146
- */
147
- getAllMemories(roomId: string): Promise<BaseMemoryType[]>;
148
-
149
- /**
150
- * Deletes a specific memory
151
- * @param {string} id - Memory identifier
152
- * @param {string} roomId - Room identifier
153
- * @returns {Promise<void>}
154
- */
155
- clearMemoryById(id: string, roomId: string): Promise<void>;
156
-
157
- /**
158
- * Clears all memories
159
- * @returns {Promise<void>}
160
- */
161
- clearAllMemories(): Promise<void>;
162
-
163
- saveJob(id: string, job: any): Promise<void>;
164
- saveRequest(id: string, request: any): Promise<void>;
165
- getJob(id: string): Promise<any>;
166
- getRequest(id: string): Promise<any>;
167
- deleteJob(id: string): Promise<void>;
168
- deleteRequest(id: string): Promise<void>;
169
- getAllRequests(): Promise<any[]>;
170
- clear(): Promise<void>;
171
- }
172
-
173
- /**
174
- * Interface for memory adapter implementations
175
- * @interface
176
- */
177
- export interface IMemoryAdapter {
178
- /**
179
- * Initializes the memory adapter for a specific room
180
- * @param {string} roomId - Room identifier
181
- * @returns {Promise<void>}
182
- */
183
- init(roomId?: string): Promise<void>;
184
-
185
- /**
186
- * Creates a new memory entry in the adapter
187
- * @param {CreateMemoryInput & { embedding?: number[] }} input - Memory data with optional embedding
188
- * @returns {Promise<BaseMemoryType | undefined>} Created memory or undefined
189
- */
190
- createMemory(
191
- input: CreateMemoryInput & { embedding?: number[] }
192
- ): Promise<BaseMemoryType | undefined>;
193
-
194
- /**
195
- * Stores a job in the adapter
196
- * @param {string} id - Job identifier
197
- * @param {ICronJob} job - Cron job instance
198
- * @returns {Promise<void>}
199
- */
200
- saveJob?(id: string, job: ICronJob): Promise<void>;
201
-
202
- /**
203
- * Stores a scheduled request in the adapter
204
- * @param {string} id - Request identifier
205
- * @param {ScheduledRequest} request - Scheduled request data
206
- * @returns {Promise<void>}
207
- */
208
- saveRequest?(id: string, request: ScheduledRequest): Promise<void>;
209
-
210
- /**
211
- * Retrieves a job by ID
212
- * @param {string} id - Job identifier
213
- * @returns {Promise<ICronJob | undefined>}
214
- */
215
- getJob?(id: string): Promise<ICronJob | undefined>;
216
-
217
- /**
218
- * Retrieves a scheduled request by ID
219
- * @param {string} id - Request identifier
220
- * @returns {Promise<ScheduledRequest | undefined>}
221
- */
222
- getRequest?(id: string): Promise<ScheduledRequest | undefined>;
223
-
224
- /**
225
- * Deletes a job by ID
226
- * @param {string} id - Job identifier
227
- * @returns {Promise<void>}
228
- */
229
- deleteJob?(id: string): Promise<void>;
230
-
231
- /**
232
- * Deletes a scheduled request by ID
233
- * @param {string} id - Request identifier
234
- * @returns {Promise<void>}
235
- */
236
- deleteRequest?(id: string): Promise<void>;
237
-
238
- /**
239
- * Retrieves all scheduled requests
240
- * @returns {Promise<ScheduledRequest[]>}
241
- */
242
- getAllRequests?(): Promise<ScheduledRequest[]>;
243
-
244
- /**
245
- * Retrieves a memory by ID and room ID from the adapter
246
- * @param {string} id - Memory identifier
247
- * @param {string} roomId - Room identifier
248
- * @returns {Promise<BaseMemoryType | null>} Memory entry or null if not found
249
- */
250
- getMemoryById(id: string, roomId: string): Promise<BaseMemoryType | null>;
251
-
252
- /**
253
- * Searches for memories in the adapter
254
- * @param {string} query - Search query
255
- * @param {Object} options - Search options
256
- * @returns {Promise<BaseMemoryType[]>} Array of matching memories
257
- */
258
- getMemoryByIndex(
259
- query: string,
260
- options: { roomId: string; limit?: number }
261
- ): Promise<BaseMemoryType[]>;
262
-
263
- /**
264
- * Retrieves all memories for a room from the adapter
265
- * @param {string} roomId - Room identifier
266
- * @returns {Promise<BaseMemoryType[]>} Array of all memories
267
- */
268
- getAllMemories(roomId: string): Promise<BaseMemoryType[]>;
269
-
270
- /**
271
- * Deletes a specific memory from the adapter
272
- * @param {string} id - Memory identifier
273
- * @param {string} roomId - Room identifier
274
- * @returns {Promise<void>}
275
- */
276
- clearMemoryById(id: string, roomId: string): Promise<void>;
277
-
278
- /**
279
- * Clears all memories from the adapter
280
- * @returns {Promise<void>}
281
- */
282
- clearAllMemories(): Promise<void>;
283
-
284
- /**
285
- * Clears all jobs and requests
286
- * @returns {Promise<void>}
287
- */
288
- clear?(): Promise<void>;
289
- }
290
-
291
- /**
292
- * Abstract base class for memory implementations
293
- * @abstract
294
- */
295
- export abstract class BaseMemory implements IMemoryService {
296
- /**
297
- * Creates an instance of BaseMemory
298
- * @param {IMemoryAdapter} adapter - Memory adapter implementation
299
- */
300
- constructor(protected readonly adapter: IMemoryAdapter) {}
301
-
302
- abstract init(): Promise<void>;
303
- abstract createMemory(
304
- input: CreateMemoryInput & { embedding?: number[] }
305
- ): Promise<BaseMemoryType | undefined>;
306
- abstract getMemoryById(
307
- id: string,
308
- roomId: string
309
- ): Promise<BaseMemoryType | null>;
310
- abstract getMemoryByIndex(
311
- query: string,
312
- options: { roomId: string; limit?: number }
313
- ): Promise<BaseMemoryType[]>;
314
- abstract getAllMemories(roomId: string): Promise<BaseMemoryType[]>;
315
- abstract clearMemoryById(id: string, roomId: string): Promise<void>;
316
- abstract clearAllMemories(): Promise<void>;
317
-
318
- async saveJob(id: string, job: any): Promise<void> {
319
- await this.adapter.saveJob?.(id, job);
320
- }
321
-
322
- async saveRequest(id: string, request: any): Promise<void> {
323
- await this.adapter.saveRequest?.(id, request);
324
- }
325
-
326
- async getJob(id: string): Promise<any> {
327
- return this.adapter.getJob?.(id);
328
- }
329
-
330
- async getRequest(id: string): Promise<any> {
331
- return this.adapter.getRequest?.(id);
332
- }
333
-
334
- async deleteJob(id: string): Promise<void> {
335
- await this.adapter.deleteJob?.(id);
336
- }
337
-
338
- async deleteRequest(id: string): Promise<void> {
339
- await this.adapter.deleteRequest?.(id);
340
- }
341
-
342
- async getAllRequests(): Promise<any[]> {
343
- return this.adapter.getAllRequests?.() || [];
344
- }
345
-
346
- async clear(): Promise<void> {
347
- await this.adapter.clear?.();
348
- }
349
- }
350
-
351
- /**
352
- * Interface for event emitter functionality
353
- * @interface
354
- */
355
- export interface IEventEmitter {
356
- /**
357
- * Emits an event with optional arguments
358
- * @param {string} event - Event name
359
- * @param {...any[]} args - Event arguments
360
- * @returns {boolean} Whether the event had listeners
361
- */
362
- emit(event: string, ...args: any[]): boolean;
363
-
364
- /**
365
- * Registers an event listener
366
- * @param {string} event - Event name
367
- * @param {Function} listener - Event handler
368
- */
369
- on(event: string, listener: (...args: any[]) => void): void;
370
-
371
- /**
372
- * Removes all listeners for an event
373
- * @param {string} [event] - Optional event name
374
- */
375
- removeAllListeners(event?: string): void;
376
-
377
- /**
378
- * Returns raw listeners for an event
379
- * @param {string} event - Event name
380
- * @returns {Function[]} Array of listener functions
381
- */
382
- rawListeners(event: string): Function[];
383
-
384
- /**
385
- * Registers an event listener that will be called only once
386
- * @param {string} event - Event name
387
- * @param {Function} listener - Event handler
388
- */
389
- once(event: string, listener: (...args: any[]) => void): void;
390
-
391
- /**
392
- * Removes a specific listener for an event
393
- * @param {string} event - Event name
394
- * @param {Function} listener - Event handler
395
- */
396
- removeListener(event: string, listener: (...args: any[]) => void): void;
397
- }
398
-
399
- /**
400
- * Interface for cron service functionality
401
- * @interface
402
- */
403
- export interface ICronService {
404
- /**
405
- * Schedules a job using cron expression
406
- * @param {string} expression - Cron expression
407
- * @param {Function} callback - Job callback
408
- * @returns {ICronJob} Cron job instance
409
- */
410
- schedule(expression: string, callback: () => void): ICronJob;
411
- }
412
-
413
- /**
414
- * Interface for cron job control
415
- * @interface
416
- */
417
- export interface ICronJob {
418
- /**
419
- * Starts the cron job
420
- */
421
- start(): void;
422
-
423
- /**
424
- * Stops the cron job
425
- */
426
- stop(): void;
427
- }
428
-
429
- /**
430
- * Interface for embedding model operations
431
- * @interface
432
- */
433
- export interface IEmbeddingModel {
434
- /**
435
- * Embeds a single text
436
- * @param {string} text - Text to embed
437
- * @returns {Promise<number[]>} Vector embedding
438
- */
439
- embed(text: string): Promise<number[]>;
440
-
441
- /**
442
- * Embeds multiple texts
443
- * @param {string[]} texts - Array of texts to embed
444
- * @returns {Promise<number[][]>} Array of vector embeddings
445
- */
446
- embedMany(texts: string[]): Promise<number[][]>;
447
- }
448
-
449
- /**
450
- * Interface for similarity calculations
451
- * @interface
452
- */
453
- export interface ISimilarityCalculator {
454
- /**
455
- * Calculates similarity between two embeddings
456
- * @param {number[]} embedding1 - First embedding
457
- * @param {number[]} embedding2 - Second embedding
458
- * @returns {number} Similarity score
459
- */
460
- calculate(embedding1: number[], embedding2: number[]): number;
461
- }
462
-
463
- /**
464
- * Interface for embedding module operations
465
- * @interface
466
- */
467
- export interface IEmbeddingModule {
468
- /**
469
- * Embeds a single text
470
- * @param {string} text - Text to embed
471
- * @returns {Promise<number[]>} Vector embedding
472
- */
473
- embedText(text: string): Promise<number[]>;
474
-
475
- /**
476
- * Embeds multiple texts
477
- * @param {string[]} texts - Array of texts to embed
478
- * @returns {Promise<number[][]>} Array of vector embeddings
479
- */
480
- embedMany(texts: string[]): Promise<number[][]>;
481
-
482
- /**
483
- * Calculates similarity between two embeddings
484
- * @param {number[]} embedding1 - First embedding
485
- * @param {number[]} embedding2 - Second embedding
486
- * @returns {number} Similarity score
487
- */
488
- calculateSimilarity(embedding1: number[], embedding2: number[]): number;
489
- }
490
-
491
- export interface IJobStorage {
492
- saveJob(id: string, job: ICronJob): Promise<void>;
493
- saveRequest(id: string, request: ScheduledRequest): Promise<void>;
494
- getJob(id: string): Promise<ICronJob | undefined>;
495
- getRequest(id: string): Promise<ScheduledRequest | undefined>;
496
- deleteJob(id: string): Promise<void>;
497
- deleteRequest(id: string): Promise<void>;
498
- getAllRequests(): Promise<ScheduledRequest[]>;
499
- clear(): Promise<void>;
500
- }
501
-
502
- /**
503
- * Interface defining the extended functionality of a graph observable
504
- * @template T - The Zod schema type that defines the structure of the graph data
505
- */
506
- export interface GraphObservable<T extends ZodSchema> extends Observable<any> {
507
- /**
508
- * Observes the entire graph state
509
- */
510
- state(): Observable<GraphContext<T>>;
511
-
512
- /**
513
- * Observes a specific node's state
514
- * @param nodeName - The name of the node to observe
515
- */
516
- node(nodeName: string): Observable<any>;
517
-
518
- /**
519
- * Observes multiple nodes' states
520
- * @param nodeNames - Array of node names to observe
521
- */
522
- nodes(nodeNames: string[]): Observable<any>;
523
-
524
- /**
525
- * Observes specific properties of the graph context
526
- * @param prop - Property or array of properties to observe
527
- */
528
- property(prop: string | string[]): Observable<any>;
529
-
530
- /**
531
- * Observes specific events in the graph
532
- * @param eventName - The name of the event to observe
533
- */
534
- event(eventName: string): Observable<GraphEvent<T>>;
535
-
536
- /**
537
- * Waits for a specific condition to be met
538
- * @param observable - The observable to watch
539
- * @param predicate - Function that determines when the condition is met
540
- */
541
- until(
542
- observable: Observable<any>,
543
- predicate: (state: any) => boolean
544
- ): Promise<any>;
545
- }
@@ -1,25 +0,0 @@
1
- import cron from "node-cron";
2
- import { ICronJob, ICronService } from "../../../../interfaces";
3
-
4
- /**
5
- * @module NodeCronAdapter
6
- * @description Adapter implementation for node-cron service.
7
- * Provides a bridge between the application's scheduling interface and the node-cron library.
8
- * @implements {ICronService}
9
- */
10
- export class NodeCronAdapter implements ICronService {
11
- /**
12
- * Schedules a new cron job
13
- * @param {string} expression - Cron expression defining the schedule
14
- * @param {Function} callback - Function to be executed when the schedule triggers
15
- * @returns {ICronJob} Interface for controlling the scheduled job
16
- */
17
- schedule(expression: string, callback: () => void): ICronJob {
18
- const job = cron.schedule(expression, callback);
19
-
20
- return {
21
- start: () => job.start(),
22
- stop: () => job.stop(),
23
- };
24
- }
25
- }
@@ -1,146 +0,0 @@
1
- import { ICronService, IMemoryService } from "../../interfaces";
2
- import { ScheduledRequest } from "../../types";
3
-
4
- /**
5
- * @module Agenda
6
- * @description A module for scheduling and managing cron-based tasks.
7
- * Provides functionality for scheduling requests, managing their lifecycle,
8
- * and handling recurring and one-time tasks.
9
- */
10
- export class Agenda {
11
- /**
12
- * Creates an instance of Agenda
13
- * @param {ICronService} cronService - The cron service implementation
14
- * @param {IMemoryService} storage - The storage service for jobs and requests
15
- */
16
- constructor(
17
- private readonly cronService: ICronService,
18
- private readonly storage: IMemoryService
19
- ) {}
20
-
21
- /**
22
- * Schedule a new request to be processed later
23
- * @param {Object} request - The request configuration
24
- * @param {string} request.originalRequest - The original request to be executed
25
- * @param {string} request.cronExpression - The cron expression for scheduling
26
- * @param {Object} [callbacks] - Optional callback functions
27
- * @param {Function} [callbacks.onScheduled] - Called when request is scheduled
28
- * @param {Function} [callbacks.onExecuted] - Called when request is executed
29
- * @returns {Promise<string>} The ID of the scheduled request
30
- */
31
- async scheduleRequest(
32
- request: {
33
- originalRequest: string;
34
- cronExpression: string;
35
- },
36
- callbacks?: {
37
- onScheduled?: (id: string) => void;
38
- onExecuted?: (id: string, originalRequest: string) => void;
39
- }
40
- ): Promise<string> {
41
- const id = crypto.randomUUID();
42
-
43
- const scheduledRequest: ScheduledRequest = {
44
- id,
45
- originalRequest: request.originalRequest,
46
- cronExpression: request.cronExpression,
47
- isRecurring: false,
48
- createdAt: new Date(),
49
- };
50
-
51
- // Create cron job using the injected service
52
- const cronJob = this.cronService.schedule(
53
- request.cronExpression,
54
- async () => {
55
- console.log(`🔄 Executing scheduled request: ${id}`);
56
-
57
- if (callbacks?.onExecuted) {
58
- callbacks.onExecuted(id, scheduledRequest.originalRequest);
59
- }
60
-
61
- console.log(`✅ Scheduled request executed successfully: ${id}`);
62
-
63
- // Auto-stop for non-recurring tasks
64
- if (!scheduledRequest.isRecurring) {
65
- await this.cancelScheduledRequest(id);
66
- }
67
- }
68
- );
69
-
70
- // Start job in non-running mode
71
- cronJob.stop();
72
-
73
- // Store request and job using storage service
74
- await this.storage.saveRequest(id, scheduledRequest);
75
- await this.storage.saveJob(id, cronJob);
76
-
77
- if (callbacks?.onScheduled) callbacks.onScheduled(id);
78
-
79
- // Start the job after storing
80
- cronJob.start();
81
-
82
- return id;
83
- }
84
-
85
- /**
86
- * Cancels a scheduled request by its ID
87
- * @param {string} requestId - The ID of the request to cancel
88
- * @returns {Promise<boolean>} True if the request was found and cancelled, false otherwise
89
- */
90
- async cancelScheduledRequest(requestId: string): Promise<boolean> {
91
- const cronJob = await this.storage.getJob(requestId);
92
- if (cronJob) {
93
- try {
94
- cronJob.stop();
95
- await this.storage.deleteJob(requestId);
96
- await this.storage.deleteRequest(requestId);
97
- return true;
98
- } catch (error) {
99
- console.error(`Failed to stop cron job ${requestId}:`, error);
100
- return false;
101
- }
102
- }
103
- return false;
104
- }
105
-
106
- /**
107
- * Retrieves all scheduled requests
108
- * @returns {Promise<ScheduledRequest[]>} Array of all scheduled requests
109
- */
110
- async getScheduledRequests(): Promise<ScheduledRequest[]> {
111
- return this.storage.getAllRequests();
112
- }
113
-
114
- /**
115
- * Stops all scheduled jobs
116
- * @returns {Promise<void>}
117
- */
118
- async stopAll(): Promise<void> {
119
- const requests = await this.getScheduledRequests();
120
-
121
- for (const request of requests) {
122
- await this.cancelScheduledRequest(request.id);
123
- }
124
-
125
- await this.storage.clear();
126
- }
127
-
128
- /**
129
- * Stops the agenda service
130
- * @returns {Promise<void>}
131
- */
132
- public async stop(): Promise<void> {
133
- await this.stopAll();
134
- await new Promise((resolve) => setTimeout(resolve, 100));
135
- }
136
-
137
- /**
138
- * Cancels requests matching the query
139
- * @param {Object} query - Query to match requests against
140
- * @returns {Promise<void>}
141
- */
142
- public async cancel(query: {}): Promise<void> {
143
- await this.stopAll();
144
- await new Promise((resolve) => setTimeout(resolve, 100));
145
- }
146
- }