axiodb 12.10.26 → 13.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 (87) hide show
  1. package/README.md +15 -45
  2. package/lib/Helper/DocumentLoader.helper.d.ts +1 -1
  3. package/lib/Helper/DocumentLoader.helper.js +3 -3
  4. package/lib/Helper/DocumentLoader.helper.js.map +1 -1
  5. package/lib/Helper/SortedIndexValues.helper.d.ts +45 -0
  6. package/lib/Helper/SortedIndexValues.helper.js +105 -0
  7. package/lib/Helper/SortedIndexValues.helper.js.map +1 -0
  8. package/lib/Services/Aggregation/Aggregation.Operation.d.ts +3 -8
  9. package/lib/Services/Aggregation/Aggregation.Operation.js +4 -11
  10. package/lib/Services/Aggregation/Aggregation.Operation.js.map +1 -1
  11. package/lib/Services/CRUD Operation/Create.operation.js +14 -2
  12. package/lib/Services/CRUD Operation/Create.operation.js.map +1 -1
  13. package/lib/Services/CRUD Operation/Delete.operation.d.ts +3 -7
  14. package/lib/Services/CRUD Operation/Delete.operation.js +37 -24
  15. package/lib/Services/CRUD Operation/Delete.operation.js.map +1 -1
  16. package/lib/Services/CRUD Operation/Reader.operation.d.ts +3 -8
  17. package/lib/Services/CRUD Operation/Reader.operation.js +8 -12
  18. package/lib/Services/CRUD Operation/Reader.operation.js.map +1 -1
  19. package/lib/Services/CRUD Operation/Update.operation.d.ts +3 -18
  20. package/lib/Services/CRUD Operation/Update.operation.js +68 -50
  21. package/lib/Services/CRUD Operation/Update.operation.js.map +1 -1
  22. package/lib/Services/Collection/collection.operation.d.ts +14 -7
  23. package/lib/Services/Collection/collection.operation.js +52 -53
  24. package/lib/Services/Collection/collection.operation.js.map +1 -1
  25. package/lib/Services/Database/database.operation.d.ts +1 -3
  26. package/lib/Services/Database/database.operation.js +14 -59
  27. package/lib/Services/Database/database.operation.js.map +1 -1
  28. package/lib/Services/Index/DeleteIndex.service.js +11 -1
  29. package/lib/Services/Index/DeleteIndex.service.js.map +1 -1
  30. package/lib/Services/Index/Index.service.js +1 -0
  31. package/lib/Services/Index/Index.service.js.map +1 -1
  32. package/lib/Services/Index/IndexCache.service.d.ts +39 -12
  33. package/lib/Services/Index/IndexCache.service.js +64 -24
  34. package/lib/Services/Index/IndexCache.service.js.map +1 -1
  35. package/lib/Services/Index/InsertIndex.service.js +13 -1
  36. package/lib/Services/Index/InsertIndex.service.js.map +1 -1
  37. package/lib/Services/Index/ReadIndex.service.d.ts +31 -0
  38. package/lib/Services/Index/ReadIndex.service.js +50 -1
  39. package/lib/Services/Index/ReadIndex.service.js.map +1 -1
  40. package/lib/Services/Transaction/LockManager.service.d.ts +6 -1
  41. package/lib/Services/Transaction/LockManager.service.js +36 -26
  42. package/lib/Services/Transaction/LockManager.service.js.map +1 -1
  43. package/lib/Services/Transaction/Session.service.d.ts +1 -3
  44. package/lib/Services/Transaction/Session.service.js +2 -4
  45. package/lib/Services/Transaction/Session.service.js.map +1 -1
  46. package/lib/Services/Transaction/Transaction.service.d.ts +1 -4
  47. package/lib/Services/Transaction/Transaction.service.js +26 -24
  48. package/lib/Services/Transaction/Transaction.service.js.map +1 -1
  49. package/lib/Services/Transaction/TransactionIndexManager.service.d.ts +2 -4
  50. package/lib/Services/Transaction/TransactionIndexManager.service.js +48 -32
  51. package/lib/Services/Transaction/TransactionIndexManager.service.js.map +1 -1
  52. package/lib/Services/Transaction/TransactionRegistry.service.js +3 -3
  53. package/lib/Services/Transaction/TransactionRegistry.service.js.map +1 -1
  54. package/lib/Services/Transaction/WriteAheadLog.service.d.ts +1 -3
  55. package/lib/Services/Transaction/WriteAheadLog.service.js +4 -21
  56. package/lib/Services/Transaction/WriteAheadLog.service.js.map +1 -1
  57. package/lib/client/DatabaseProxy.d.ts +1 -1
  58. package/lib/client/DatabaseProxy.js +1 -3
  59. package/lib/client/DatabaseProxy.js.map +1 -1
  60. package/lib/config/DB.d.ts +0 -3
  61. package/lib/config/DB.js +0 -2
  62. package/lib/config/DB.js.map +1 -1
  63. package/lib/engine/Filesystem/FileManager.d.ts +9 -0
  64. package/lib/engine/Filesystem/FileManager.js +70 -1
  65. package/lib/engine/Filesystem/FileManager.js.map +1 -1
  66. package/lib/engine/node/WorkerForDataLoad.engine.js +8 -26
  67. package/lib/engine/node/WorkerForDataLoad.engine.js.map +1 -1
  68. package/lib/server/controller/Collections/Collection.controller.js +2 -2
  69. package/lib/server/controller/Collections/Collection.controller.js.map +1 -1
  70. package/lib/server/public/AxioControl/.vite/manifest.json +2 -2
  71. package/lib/server/public/AxioControl/assets/index-05O5admf.css +1 -0
  72. package/lib/server/public/AxioControl/assets/{index-DyJg6FRw.js → index-Ddne1B8d.js} +11 -11
  73. package/lib/server/public/AxioControl/index.html +2 -2
  74. package/lib/server/public/AxioControl/sw.js +1 -1
  75. package/lib/tcp/handler/handlers/Collection.handler.js +2 -2
  76. package/lib/tcp/handler/handlers/Collection.handler.js.map +1 -1
  77. package/lib/utility/BufferLoaderWithWorker.utils.d.ts +1 -3
  78. package/lib/utility/BufferLoaderWithWorker.utils.js +8 -32
  79. package/lib/utility/BufferLoaderWithWorker.utils.js.map +1 -1
  80. package/package.json +1 -3
  81. package/lib/Helper/Crypto.helper.d.ts +0 -14
  82. package/lib/Helper/Crypto.helper.js +0 -55
  83. package/lib/Helper/Crypto.helper.js.map +0 -1
  84. package/lib/Helper/CryptoGraphy.helper.d.ts +0 -15
  85. package/lib/Helper/CryptoGraphy.helper.js +0 -52
  86. package/lib/Helper/CryptoGraphy.helper.js.map +0 -1
  87. package/lib/server/public/AxioControl/assets/index-D3V1EZ2f.css +0 -1
@@ -6,6 +6,13 @@ interface IndexData {
6
6
  indexEntries: {
7
7
  [value: string]: string[];
8
8
  };
9
+ /**
10
+ * Sorted, de-duplicated numeric values for this field - enables O(log U + M)
11
+ * range queries ($gt/$gte/$lt/$lte) instead of a full collection scan.
12
+ * Optional for backward compatibility with indexes written before range
13
+ * support existed; those are lazily backfilled on first insert/delete.
14
+ */
15
+ sortedValues?: number[];
9
16
  }
10
17
  /**
11
18
  * In-memory cache for index data
@@ -19,23 +26,44 @@ interface IndexData {
19
26
  *
20
27
  * @example
21
28
  * ```typescript
22
- * const indexCache = new IndexCache('/path/to/collection');
29
+ * const indexCache = IndexCache.getInstance('/path/to/collection');
23
30
  * await indexCache.loadAllIndexes(); // Eager load
24
31
  * const indexData = await indexCache.getIndex('email'); // O(1) memory access
25
32
  * ```
26
33
  */
27
34
  export declare class IndexCache {
35
+ private static instances;
28
36
  private cache;
29
37
  private readonly indexFolderPath;
30
38
  private readonly indexMetaPath;
31
39
  private readonly fileManager;
32
40
  private readonly converter;
33
- private locks;
41
+ private lockChains;
34
42
  private cleanupInterval;
35
43
  private static readonly MIN_TTL_MS;
36
44
  private static readonly MAX_TTL_MS;
37
45
  private static readonly CLEANUP_INTERVAL_MS;
38
- constructor(collectionPath: string);
46
+ private constructor();
47
+ /**
48
+ * Returns the shared IndexCache for a collection path, creating it on first use.
49
+ * All index services (Insert/Read/Delete/Collection) must go through this instead of
50
+ * constructing their own instance, otherwise locking and caching are per-call and
51
+ * provide no real coordination.
52
+ *
53
+ * @param collectionPath - Absolute path of the collection this cache belongs to
54
+ */
55
+ static getInstance(collectionPath: string): IndexCache;
56
+ /**
57
+ * Releases the shared IndexCache for a collection path (e.g. when the collection
58
+ * itself is deleted), stopping its cleanup timer and dropping it from the registry.
59
+ *
60
+ * @param collectionPath - Absolute path of the collection whose cache should be released
61
+ */
62
+ static releaseInstance(collectionPath: string): void;
63
+ /**
64
+ * Stops the cleanup timer and clears cached state. Called via releaseInstance().
65
+ */
66
+ dispose(): void;
39
67
  /**
40
68
  * Generates a random TTL between 5-15 minutes
41
69
  * Randomization prevents cache stampede (thundering herd problem)
@@ -91,20 +119,19 @@ export declare class IndexCache {
91
119
  */
92
120
  invalidateAll(): Promise<void>;
93
121
  /**
94
- * Simple lock acquisition for thread safety
95
- * Waits if another operation is currently holding the lock
122
+ * Acquires a per-field mutex, queuing behind any in-flight holder for the same key.
123
+ *
124
+ * Implemented as a chained promise queue: each call captures the current tail of the
125
+ * chain, awaits it (so it truly blocks until every earlier holder has released), then
126
+ * appends its own pending promise as the new tail. The caller MUST invoke the returned
127
+ * release function exactly once (typically in a `finally` block) to hand the lock to
128
+ * the next queued waiter.
96
129
  *
97
130
  * @param key - The lock key (typically field name)
131
+ * @returns A release function that unblocks the next waiter for this key
98
132
  * @private
99
133
  */
100
134
  private acquireLock;
101
- /**
102
- * Releases the lock for a specific key
103
- *
104
- * @param key - The lock key to release
105
- * @private
106
- */
107
- private releaseLock;
108
135
  /**
109
136
  * Gets current cache statistics for monitoring
110
137
  *
@@ -30,7 +30,7 @@ const Converter_helper_1 = __importDefault(require("../../Helper/Converter.helpe
30
30
  *
31
31
  * @example
32
32
  * ```typescript
33
- * const indexCache = new IndexCache('/path/to/collection');
33
+ * const indexCache = IndexCache.getInstance('/path/to/collection');
34
34
  * await indexCache.loadAllIndexes(); // Eager load
35
35
  * const indexData = await indexCache.getIndex('email'); // O(1) memory access
36
36
  * ```
@@ -43,9 +43,49 @@ class IndexCache {
43
43
  this.indexMetaPath = `${this.indexFolderPath}/index.meta.json`;
44
44
  this.fileManager = new FileManager_1.default();
45
45
  this.converter = new Converter_helper_1.default();
46
- this.locks = new Map();
46
+ this.lockChains = new Map();
47
47
  this.startCleanupInterval();
48
48
  }
49
+ /**
50
+ * Returns the shared IndexCache for a collection path, creating it on first use.
51
+ * All index services (Insert/Read/Delete/Collection) must go through this instead of
52
+ * constructing their own instance, otherwise locking and caching are per-call and
53
+ * provide no real coordination.
54
+ *
55
+ * @param collectionPath - Absolute path of the collection this cache belongs to
56
+ */
57
+ static getInstance(collectionPath) {
58
+ let instance = IndexCache.instances.get(collectionPath);
59
+ if (!instance) {
60
+ instance = new IndexCache(collectionPath);
61
+ IndexCache.instances.set(collectionPath, instance);
62
+ }
63
+ return instance;
64
+ }
65
+ /**
66
+ * Releases the shared IndexCache for a collection path (e.g. when the collection
67
+ * itself is deleted), stopping its cleanup timer and dropping it from the registry.
68
+ *
69
+ * @param collectionPath - Absolute path of the collection whose cache should be released
70
+ */
71
+ static releaseInstance(collectionPath) {
72
+ const instance = IndexCache.instances.get(collectionPath);
73
+ if (instance) {
74
+ instance.dispose();
75
+ IndexCache.instances.delete(collectionPath);
76
+ }
77
+ }
78
+ /**
79
+ * Stops the cleanup timer and clears cached state. Called via releaseInstance().
80
+ */
81
+ dispose() {
82
+ if (this.cleanupInterval) {
83
+ clearInterval(this.cleanupInterval);
84
+ this.cleanupInterval = null;
85
+ }
86
+ this.cache.clear();
87
+ this.lockChains.clear();
88
+ }
49
89
  /**
50
90
  * Generates a random TTL between 5-15 minutes
51
91
  * Randomization prevents cache stampede (thundering herd problem)
@@ -193,7 +233,7 @@ class IndexCache {
193
233
  updateIndex(fieldName, indexData) {
194
234
  return __awaiter(this, void 0, void 0, function* () {
195
235
  // Acquire lock for this field to prevent concurrent writes
196
- yield this.acquireLock(fieldName);
236
+ const release = yield this.acquireLock(fieldName);
197
237
  try {
198
238
  const indexPath = `${this.indexFolderPath}/${fieldName}${Keys_1.General.DBMS_File_EXT}`;
199
239
  // Write to disk first for durability (disk = source of truth)
@@ -211,7 +251,7 @@ class IndexCache {
211
251
  return true;
212
252
  }
213
253
  finally {
214
- this.releaseLock(fieldName);
254
+ release();
215
255
  }
216
256
  });
217
257
  }
@@ -237,35 +277,31 @@ class IndexCache {
237
277
  });
238
278
  }
239
279
  /**
240
- * Simple lock acquisition for thread safety
241
- * Waits if another operation is currently holding the lock
280
+ * Acquires a per-field mutex, queuing behind any in-flight holder for the same key.
281
+ *
282
+ * Implemented as a chained promise queue: each call captures the current tail of the
283
+ * chain, awaits it (so it truly blocks until every earlier holder has released), then
284
+ * appends its own pending promise as the new tail. The caller MUST invoke the returned
285
+ * release function exactly once (typically in a `finally` block) to hand the lock to
286
+ * the next queued waiter.
242
287
  *
243
288
  * @param key - The lock key (typically field name)
289
+ * @returns A release function that unblocks the next waiter for this key
244
290
  * @private
245
291
  */
246
292
  acquireLock(key) {
247
293
  return __awaiter(this, void 0, void 0, function* () {
248
- const existingLock = this.locks.get(key);
249
- if (existingLock) {
250
- yield existingLock;
251
- }
252
- // Create new lock promise for this operation
253
- let releaseFn;
254
- const lockPromise = new Promise((resolve) => {
255
- releaseFn = resolve;
294
+ var _a;
295
+ const previousTail = (_a = this.lockChains.get(key)) !== null && _a !== void 0 ? _a : Promise.resolve();
296
+ let release;
297
+ const currentLock = new Promise((resolve) => {
298
+ release = resolve;
256
299
  });
257
- this.locks.set(key, lockPromise);
300
+ this.lockChains.set(key, previousTail.then(() => currentLock));
301
+ yield previousTail;
302
+ return release;
258
303
  });
259
304
  }
260
- /**
261
- * Releases the lock for a specific key
262
- *
263
- * @param key - The lock key to release
264
- * @private
265
- */
266
- releaseLock(key) {
267
- this.locks.delete(key);
268
- }
269
305
  /**
270
306
  * Gets current cache statistics for monitoring
271
307
  *
@@ -279,6 +315,10 @@ class IndexCache {
279
315
  }
280
316
  }
281
317
  exports.IndexCache = IndexCache;
318
+ // One IndexCache per collection path - shared across Insert/Read/Delete/Collection
319
+ // so the lock and the memory cache actually serialize/coordinate across operations
320
+ // instead of each call site racing on its own private state.
321
+ IndexCache.instances = new Map();
282
322
  // TTL constants (5-15 minutes in milliseconds)
283
323
  IndexCache.MIN_TTL_MS = 5 * 60 * 1000; // 5 minutes
284
324
  IndexCache.MAX_TTL_MS = 15 * 60 * 1000; // 15 minutes
@@ -1 +1 @@
1
- {"version":3,"file":"IndexCache.service.js","sourceRoot":"","sources":["../../../source/Services/Index/IndexCache.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IndexCache.service.js","sourceRoot":"","sources":["../../../source/Services/Index/IndexCache.service.ts"],"names":[],"mappings":"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"}
@@ -8,15 +8,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  /* eslint-disable @typescript-eslint/no-explicit-any */
13
16
  const Keys_1 = require("../../config/Keys/Keys");
14
17
  const Index_service_1 = require("./Index.service");
15
18
  const IndexCache_service_1 = require("./IndexCache.service");
19
+ const SortedIndexValues_helper_1 = __importDefault(require("../../Helper/SortedIndexValues.helper"));
16
20
  class InsertIndex extends Index_service_1.IndexManager {
17
21
  constructor(path) {
18
22
  super(path);
19
- this.indexCache = new IndexCache_service_1.IndexCache(path);
23
+ this.indexCache = IndexCache_service_1.IndexCache.getInstance(path);
20
24
  }
21
25
  /**
22
26
  * Inserts a document identifier into one or more index files as defined by the global index meta.
@@ -75,6 +79,10 @@ class InsertIndex extends Index_service_1.IndexManager {
75
79
  continue;
76
80
  }
77
81
  const fieldValue = document[indexName];
82
+ // Lazily backfill sortedValues for indexes written before range support existed
83
+ if (!indexData.sortedValues) {
84
+ indexData.sortedValues = SortedIndexValues_helper_1.default.backfillFromKeys(Object.keys(indexData.indexEntries));
85
+ }
78
86
  // Add document to index entries
79
87
  const alreadyhave = Object.keys(indexData.indexEntries).some(keys => keys == fieldValue);
80
88
  if (alreadyhave) {
@@ -82,6 +90,10 @@ class InsertIndex extends Index_service_1.IndexManager {
82
90
  }
83
91
  else {
84
92
  indexData.indexEntries[fieldValue] = [documentFileName];
93
+ const numericValue = Number(fieldValue);
94
+ if (!Number.isNaN(numericValue)) {
95
+ SortedIndexValues_helper_1.default.insertSorted(indexData.sortedValues, numericValue);
96
+ }
85
97
  }
86
98
  // Update both memory cache and disk atomically
87
99
  const updateSuccess = yield this.indexCache.updateIndex(indexName, indexData);
@@ -1 +1 @@
1
- {"version":3,"file":"InsertIndex.service.js","sourceRoot":"","sources":["../../../source/Services/Index/InsertIndex.service.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uDAAuD;AACvD,iDAAiD;AACjD,mDAA+C;AAC/C,6DAAkD;AAElD,iBAAiC,SAAQ,4BAAY;IAGnD,YAAa,IAAY;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,UAAU,GAAG,IAAI,+BAAU,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BC;IACY,aAAa,CAAC,QAAa;;YACpC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAEhE,IAAI,YAAY,EAAC,CAAC;gBAElB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC7B,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,MAAM,GAAY,KAAK,CAAC;gBAC5B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;oBACnC,MAAM,SAAS,GAAW,OAAO,CAAC,cAAc,CAAC;oBACjD,MAAM,gBAAgB,GAAG,GAAG,QAAQ,CAAC,UAAU,GAAG,cAAO,CAAC,aAAa,EAAE,CAAC;oBAE1E,6EAA6E;oBAC7E,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAE1D,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,iEAAiE;wBACjE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACnE,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;4BACxB,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;wBACzD,CAAC;6BAAM,CAAC;4BACN,6CAA6C;4BAC7C,SAAS;wBACX,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,SAAS;oBACX,CAAC;oBAED,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAEvC,gCAAgC;oBAChC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;oBACzF,IAAI,WAAW,EAAC,CAAC;wBACf,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC5D,CAAC;yBACI,CAAC;wBACJ,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;oBAC1D,CAAC;oBAED,+CAA+C;oBAC/C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAC9E,MAAM,GAAG,aAAa,CAAC;gBACzB,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KAAA;CAEF"}
1
+ {"version":3,"file":"InsertIndex.service.js","sourceRoot":"","sources":["../../../source/Services/Index/InsertIndex.service.ts"],"names":[],"mappings":"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"}
@@ -70,6 +70,37 @@ export declare class ReadIndex extends IndexManager {
70
70
  * const files = await readIndex.getFilesForPrefixQuery('name', 'John', true);
71
71
  */
72
72
  getFilesForPrefixQuery(fieldName: string, prefix: string, caseInsensitive?: boolean): Promise<string[]>;
73
+ /**
74
+ * Retrieve file paths from an index for documents whose field value falls within
75
+ * a numeric range ($gt/$gte/$lt/$lte).
76
+ *
77
+ * OPTIMIZED: Binary-searches the index's sorted value array for the matching bounds,
78
+ * then unions only the file lists for values inside that range - avoids the full
79
+ * collection scan that unindexed range queries require.
80
+ *
81
+ * @param fieldName - The field name to query (must have an index)
82
+ * @param range - Range operators to apply, e.g. `{ $gt: 25 }` or `{ $gte: 18, $lte: 65 }`
83
+ *
84
+ * @returns Promise resolving to an array of unique file paths matching the range,
85
+ * or an empty array if the field has no index, the index predates range
86
+ * support (not yet backfilled), or no values fall in range.
87
+ *
88
+ * @remarks
89
+ * - O(log U) to find the bounds + O(K) to union file lists, where U = unique indexed
90
+ * values and K = unique values within the range - independent of collection size.
91
+ * - Only numeric values participate (matches `Searcher.matchesQuery`, which already
92
+ * rejects range comparisons against non-numbers).
93
+ *
94
+ * @example
95
+ * // For query: { age: { $gt: 25 } }
96
+ * const files = await readIndex.getFilesForRangeOperator('age', { $gt: 25 });
97
+ */
98
+ getFilesForRangeOperator(fieldName: string, range: {
99
+ $gt?: number;
100
+ $gte?: number;
101
+ $lt?: number;
102
+ $lte?: number;
103
+ }): Promise<string[]>;
73
104
  /**
74
105
  * Finds index metadata entries that correspond to properties present on the provided document.
75
106
  *
@@ -8,15 +8,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.ReadIndex = void 0;
13
16
  /* eslint-disable @typescript-eslint/no-explicit-any */
14
17
  const Index_service_1 = require("./Index.service");
15
18
  const IndexCache_service_1 = require("./IndexCache.service");
19
+ const SortedIndexValues_helper_1 = __importDefault(require("../../Helper/SortedIndexValues.helper"));
16
20
  class ReadIndex extends Index_service_1.IndexManager {
17
21
  constructor(path) {
18
22
  super(path);
19
- this.indexCache = new IndexCache_service_1.IndexCache(path);
23
+ this.indexCache = IndexCache_service_1.IndexCache.getInstance(path);
20
24
  }
21
25
  /**
22
26
  * Retrieve file path(s) from an index that match the provided query.
@@ -147,6 +151,51 @@ class ReadIndex extends Index_service_1.IndexManager {
147
151
  return Array.from(fileSet);
148
152
  });
149
153
  }
154
+ /**
155
+ * Retrieve file paths from an index for documents whose field value falls within
156
+ * a numeric range ($gt/$gte/$lt/$lte).
157
+ *
158
+ * OPTIMIZED: Binary-searches the index's sorted value array for the matching bounds,
159
+ * then unions only the file lists for values inside that range - avoids the full
160
+ * collection scan that unindexed range queries require.
161
+ *
162
+ * @param fieldName - The field name to query (must have an index)
163
+ * @param range - Range operators to apply, e.g. `{ $gt: 25 }` or `{ $gte: 18, $lte: 65 }`
164
+ *
165
+ * @returns Promise resolving to an array of unique file paths matching the range,
166
+ * or an empty array if the field has no index, the index predates range
167
+ * support (not yet backfilled), or no values fall in range.
168
+ *
169
+ * @remarks
170
+ * - O(log U) to find the bounds + O(K) to union file lists, where U = unique indexed
171
+ * values and K = unique values within the range - independent of collection size.
172
+ * - Only numeric values participate (matches `Searcher.matchesQuery`, which already
173
+ * rejects range comparisons against non-numbers).
174
+ *
175
+ * @example
176
+ * // For query: { age: { $gt: 25 } }
177
+ * const files = await readIndex.getFilesForRangeOperator('age', { $gt: 25 });
178
+ */
179
+ getFilesForRangeOperator(fieldName, range) {
180
+ return __awaiter(this, void 0, void 0, function* () {
181
+ const indexData = yield this.indexCache.getIndex(fieldName);
182
+ if (!indexData || !indexData.sortedValues || indexData.sortedValues.length === 0) {
183
+ return [];
184
+ }
185
+ const bounds = SortedIndexValues_helper_1.default.resolveRange(indexData.sortedValues, range);
186
+ if (!bounds) {
187
+ return [];
188
+ }
189
+ const fileSet = new Set();
190
+ for (let i = bounds.startIndex; i <= bounds.endIndex; i++) {
191
+ const files = indexData.indexEntries[indexData.sortedValues[i]];
192
+ if (files) {
193
+ files.forEach(f => fileSet.add(f));
194
+ }
195
+ }
196
+ return Array.from(fileSet);
197
+ });
198
+ }
150
199
  /**
151
200
  * Finds index metadata entries that correspond to properties present on the provided document.
152
201
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ReadIndex.service.js","sourceRoot":"","sources":["../../../source/Services/Index/ReadIndex.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReadIndex.service.js","sourceRoot":"","sources":["../../../source/Services/Index/ReadIndex.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,mDAA+C;AAC/C,6DAAkD;AAClD,qGAAsE;AAEtE,eAAuB,SAAQ,4BAAY;IAGzC,YAAa,IAAY;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,UAAU,GAAG,+BAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACU,gBAAgB,CAAE,KAAU;;YACvC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACjE,IAAG,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBAClC,oEAAoE;gBACpE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBAElF,IAAI,SAAS,EAAE,CAAC;oBACd,2CAA2C;oBAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAE9C,gDAAgD;oBAChD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;wBAC1D,OAAO,EAAE,CAAC;oBACZ,CAAC;oBAED,MAAM,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAC3D,OAAO,eAAe,IAAI,EAAE,CAAC;gBAC/B,CAAC;gBAED,4DAA4D;gBAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC3G,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAEhD,gDAAgD;gBAChD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;oBAC1D,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,MAAM,eAAe,GAAG,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC7D,OAAO,eAAe,IAAI,EAAE,CAAC;YAC/B,CAAC;iBACI,CAAC;gBACJ,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;KAAA;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACU,qBAAqB,CAAC,SAAiB,EAAE,MAAa;;YACjE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,SAAS;gBAAE,OAAO,EAAE,CAAC;YAE1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;KAAA;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACU,sBAAsB;6DACjC,SAAiB,EACjB,MAAc,EACd,eAAe,GAAY,KAAK;YAEhC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,SAAS;gBAAE,OAAO,EAAE,CAAC;YAE1B,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAElC,8CAA8C;YAC9C,yEAAyE;YACzE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpE,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEtE,IAAI,eAAe,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;KAAA;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACU,wBAAwB,CACnC,SAAiB,EACjB,KAAmE;;YAEnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjF,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,MAAM,GAAG,kCAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;KAAA;IAED;;;;;;;;;;;;;;KAcC;IACe,qBAAqB,CAAC,QAAa;;YACjD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7E,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACjE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAA8B,EAAE,EAAE,CACvD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CACpE,CAAC;YACJ,CAAC;QACH,CAAC;KAAA;CACF"}
@@ -1,6 +1,7 @@
1
1
  import { ErrorInterface, SuccessInterface } from "../../config/Interfaces/Helper/response.helper.interface";
2
2
  import { LockInfo } from "../../config/Interfaces/Transaction/transaction.interface";
3
3
  export default class LockManager {
4
+ private static instances;
4
5
  private readonly collectionPath;
5
6
  private readonly lockDir;
6
7
  private readonly FileManager;
@@ -9,8 +10,12 @@ export default class LockManager {
9
10
  private readonly ResponseHelper;
10
11
  private readonly maxWaitTime;
11
12
  private readonly pollInterval;
12
- constructor(collectionPath: string);
13
+ private constructor();
14
+ /** Returns the shared LockManager for a collection path, creating it on first use. */
15
+ static getInstance(collectionPath: string): LockManager;
13
16
  acquireLock(documentId: string, transactionId: string, transactionTimestamp: number): Promise<SuccessInterface | ErrorInterface>;
17
+ /** Builds the checksummed lock-file content; keeps format in sync with getLockOwner(). */
18
+ private buildLockContent;
14
19
  releaseLock(documentId: string): Promise<SuccessInterface | ErrorInterface>;
15
20
  releaseAllLocks(documentIds: string[]): Promise<void>;
16
21
  isLocked(documentId: string): Promise<boolean>;
@@ -29,6 +29,15 @@ class LockManager {
29
29
  this.Converter = new Converter_helper_1.default();
30
30
  this.ResponseHelper = new response_helper_1.default();
31
31
  }
32
+ /** Returns the shared LockManager for a collection path, creating it on first use. */
33
+ static getInstance(collectionPath) {
34
+ let instance = LockManager.instances.get(collectionPath);
35
+ if (!instance) {
36
+ instance = new LockManager(collectionPath);
37
+ LockManager.instances.set(collectionPath, instance);
38
+ }
39
+ return instance;
40
+ }
32
41
  acquireLock(documentId, transactionId, transactionTimestamp) {
33
42
  return __awaiter(this, void 0, void 0, function* () {
34
43
  try {
@@ -37,36 +46,22 @@ class LockManager {
37
46
  yield this.FolderManager.CreateDirectory(this.lockDir);
38
47
  }
39
48
  const lockFilePath = `${this.lockDir}/${documentId}.lock`;
49
+ const lockContent = this.buildLockContent(documentId, transactionId, transactionTimestamp);
40
50
  const startTime = Date.now();
41
51
  while (Date.now() - startTime < this.maxWaitTime) {
42
- const fileExists = yield this.FileManager.FileExists(lockFilePath);
43
- if (!fileExists.status) {
44
- const lockInfo = {
45
- documentId,
46
- transactionId,
47
- lockType: 'WRITE',
48
- timestamp: transactionTimestamp,
49
- };
50
- const lockData = this.Converter.ToString(lockInfo);
51
- const checksum = (0, crypto_1.createHash)('sha256').update(lockData).digest('hex');
52
- const lockContent = this.Converter.ToString({ lockInfo, checksum });
53
- const writeResult = yield this.FileManager.WriteFile(lockFilePath, lockContent);
54
- if (writeResult.status) {
55
- return this.ResponseHelper.Success({ message: "Lock acquired", documentId });
56
- }
52
+ // Atomic acquire-if-free - avoids the FileExists-then-WriteFile race.
53
+ const acquired = yield this.FileManager.WriteFileExclusive(lockFilePath, lockContent);
54
+ if (acquired.status) {
55
+ return this.ResponseHelper.Success({ message: "Lock acquired", documentId });
57
56
  }
58
- else {
59
- const lockOwner = yield this.getLockOwner(documentId);
60
- if (lockOwner) {
61
- const ownerTimestamp = lockOwner.timestamp;
62
- if (transactionTimestamp < ownerTimestamp) {
63
- yield this.sleep(this.pollInterval);
64
- continue;
65
- }
66
- else {
67
- return this.ResponseHelper.Error(`Deadlock detected: Transaction ${transactionId} aborted (Wait-Die)`);
68
- }
57
+ // Wait-Die: older transactions wait, younger ones abort.
58
+ const lockOwner = yield this.getLockOwner(documentId);
59
+ if (lockOwner) {
60
+ if (transactionTimestamp < lockOwner.timestamp) {
61
+ yield this.sleep(this.pollInterval);
62
+ continue;
69
63
  }
64
+ return this.ResponseHelper.Error(`Deadlock detected: Transaction ${transactionId} aborted (Wait-Die)`);
70
65
  }
71
66
  yield this.sleep(this.pollInterval);
72
67
  }
@@ -77,6 +72,19 @@ class LockManager {
77
72
  }
78
73
  });
79
74
  }
75
+ /** Builds the checksummed lock-file content; keeps format in sync with getLockOwner(). */
76
+ buildLockContent(documentId, transactionId, transactionTimestamp) {
77
+ const lockInfo = {
78
+ documentId,
79
+ transactionId,
80
+ lockType: 'WRITE',
81
+ timestamp: transactionTimestamp,
82
+ };
83
+ const checksum = (0, crypto_1.createHash)('sha256')
84
+ .update(this.Converter.ToString(lockInfo))
85
+ .digest('hex');
86
+ return this.Converter.ToString({ lockInfo, checksum });
87
+ }
80
88
  releaseLock(documentId) {
81
89
  return __awaiter(this, void 0, void 0, function* () {
82
90
  try {
@@ -147,5 +155,7 @@ class LockManager {
147
155
  return new Promise(resolve => setTimeout(resolve, ms));
148
156
  }
149
157
  }
158
+ // One LockManager per collection path, shared across every caller.
159
+ LockManager.instances = new Map();
150
160
  exports.default = LockManager;
151
161
  //# sourceMappingURL=LockManager.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LockManager.service.js","sourceRoot":"","sources":["../../../source/Services/Transaction/LockManager.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LockManager.service.js","sourceRoot":"","sources":["../../../source/Services/Transaction/LockManager.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,mCAAoC;AAMpC,sFAA8D;AAC9D,0FAAkE;AAClE,qFAAsD;AACtD,mFAA0D;AAE1D,MAAqB,WAAW;IAa9B,YAAoB,cAAsB;QAHzB,gBAAW,GAAW,KAAK,CAAC;QAC5B,iBAAY,GAAW,GAAG,CAAC;QAG1C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,GAAG,cAAc,sBAAsB,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAW,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAa,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,0BAAS,EAAE,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,IAAI,yBAAc,EAAE,CAAC;IAC7C,CAAC;IAED,sFAAsF;IAC/E,MAAM,CAAC,WAAW,CAAC,cAAsB;QAC9C,IAAI,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC;YAC3C,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEY,WAAW,CACtB,UAAkB,EAClB,aAAqB,EACrB,oBAA4B;;YAE5B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzD,CAAC;gBAED,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,OAAO,CAAC;gBAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;gBAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjD,sEAAsE;oBACtE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;oBACtF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC;oBAC/E,CAAC;oBAED,yDAAyD;oBACzD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBACtD,IAAI,SAAS,EAAE,CAAC;wBACd,IAAI,oBAAoB,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;4BAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;4BACpC,SAAS;wBACX,CAAC;wBACD,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAC9B,kCAAkC,aAAa,qBAAqB,CACrE,CAAC;oBACJ,CAAC;oBAED,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACtC,CAAC;gBAED,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;KAAA;IAED,0FAA0F;IAClF,gBAAgB,CACtB,UAAkB,EAClB,aAAqB,EACrB,oBAA4B;QAE5B,MAAM,QAAQ,GAAa;YACzB,UAAU;YACV,aAAa;YACb,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,oBAAoB;SAChC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC;aAClC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACzC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAEY,WAAW,CAAC,UAAkB;;YACzC,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,OAAO,CAAC;gBAC1D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAEnE,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAClD,CAAC;gBAED,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC;YAC/E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;KAAA;IAEY,eAAe,CAAC,WAAqB;;YAChD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACrC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;KAAA;IAEY,QAAQ,CAAC,UAAkB;;YACtC,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,OAAO,CAAC;gBAC1D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACnE,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KAAA;IAEY,YAAY,CAAC,UAAkB;;YAC1C,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,OAAO,CAAC;gBAC1D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAEnE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC1D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;gBAExC,MAAM,kBAAkB,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC;qBAC5C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;qBACzC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEjB,IAAI,kBAAkB,KAAK,QAAQ,EAAE,CAAC;oBACpC,OAAO,QAAoB,CAAC;gBAC9B,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAnKC,mEAAmE;AACpD,qBAAS,GAA6B,IAAI,GAAG,EAAE,AAAtC,CAAuC"}
@@ -8,14 +8,12 @@ import Transaction from "./Transaction.service";
8
8
  export default class Session {
9
9
  private readonly sessionId;
10
10
  private readonly collectionPath;
11
- private readonly isEncrypted;
12
- private readonly encryptionKey?;
13
11
  private readonly options;
14
12
  private readonly ResponseHelper;
15
13
  private readonly startTime;
16
14
  private isActive;
17
15
  private currentTransaction;
18
- constructor(collectionPath: string, isEncrypted?: boolean, encryptionKey?: string, options?: SessionOptions);
16
+ constructor(collectionPath: string, options?: SessionOptions);
19
17
  /**
20
18
  * Gets the session ID
21
19
  */
@@ -21,14 +21,12 @@ const Transaction_service_1 = __importDefault(require("./Transaction.service"));
21
21
  * Supports automatic retry, timeout handling, and the withTransaction pattern.
22
22
  */
23
23
  class Session {
24
- constructor(collectionPath, isEncrypted = false, encryptionKey, options = {}) {
24
+ constructor(collectionPath, options = {}) {
25
25
  var _a, _b, _c;
26
26
  this.isActive = true;
27
27
  this.currentTransaction = null;
28
28
  this.sessionId = new UniqueGenerator_helper_1.default(20).RandomWord(true);
29
29
  this.collectionPath = collectionPath;
30
- this.isEncrypted = isEncrypted;
31
- this.encryptionKey = encryptionKey;
32
30
  this.startTime = Date.now();
33
31
  this.ResponseHelper = new response_helper_1.default();
34
32
  // Default options
@@ -70,7 +68,7 @@ class Session {
70
68
  if (this.currentTransaction) {
71
69
  throw new Error("A transaction is already active in this session. Commit or rollback first.");
72
70
  }
73
- this.currentTransaction = new Transaction_service_1.default(this.collectionPath, this.isEncrypted, this.encryptionKey);
71
+ this.currentTransaction = new Transaction_service_1.default(this.collectionPath);
74
72
  return this.currentTransaction;
75
73
  }
76
74
  /**