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