@lossless.org/client 0.1.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 (255) hide show
  1. package/.smartconfig.json +37 -0
  2. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  3. package/dist_ts/00_commitinfo_data.js +9 -0
  4. package/dist_ts/classes.losslessorgclient.d.ts +32 -0
  5. package/dist_ts/classes.losslessorgclient.js +103 -0
  6. package/dist_ts/core/classes.error.d.ts +16 -0
  7. package/dist_ts/core/classes.error.js +29 -0
  8. package/dist_ts/core/classes.operation.d.ts +17 -0
  9. package/dist_ts/core/classes.operation.js +70 -0
  10. package/dist_ts/core/interfaces.d.ts +18 -0
  11. package/dist_ts/core/interfaces.js +2 -0
  12. package/dist_ts/index.d.ts +4 -0
  13. package/dist_ts/index.js +3 -0
  14. package/dist_ts/nosqldb/classes.atomicdelete.d.ts +26 -0
  15. package/dist_ts/nosqldb/classes.atomicdelete.js +44 -0
  16. package/dist_ts/nosqldb/classes.atomicfindoneandupdate.d.ts +27 -0
  17. package/dist_ts/nosqldb/classes.atomicfindoneandupdate.js +86 -0
  18. package/dist_ts/nosqldb/classes.atomicupdate.d.ts +26 -0
  19. package/dist_ts/nosqldb/classes.atomicupdate.js +55 -0
  20. package/dist_ts/nosqldb/classes.bootstraprecord.d.ts +14 -0
  21. package/dist_ts/nosqldb/classes.bootstraprecord.js +80 -0
  22. package/dist_ts/nosqldb/classes.bsonassertion.d.ts +2 -0
  23. package/dist_ts/nosqldb/classes.bsonassertion.js +29 -0
  24. package/dist_ts/nosqldb/classes.bsonobjectid.d.ts +2 -0
  25. package/dist_ts/nosqldb/classes.bsonobjectid.js +50 -0
  26. package/dist_ts/nosqldb/classes.bsonsnapshot.d.ts +3 -0
  27. package/dist_ts/nosqldb/classes.bsonsnapshot.js +126 -0
  28. package/dist_ts/nosqldb/classes.cached-document.d.ts +27 -0
  29. package/dist_ts/nosqldb/classes.cached-document.js +112 -0
  30. package/dist_ts/nosqldb/classes.collection.d.ts +302 -0
  31. package/dist_ts/nosqldb/classes.collection.js +1568 -0
  32. package/dist_ts/nosqldb/classes.collectionfactory.d.ts +30 -0
  33. package/dist_ts/nosqldb/classes.collectionfactory.js +65 -0
  34. package/dist_ts/nosqldb/classes.collectionlifecycle.d.ts +4 -0
  35. package/dist_ts/nosqldb/classes.collectionlifecycle.js +15 -0
  36. package/dist_ts/nosqldb/classes.collectionpreparation.d.ts +34 -0
  37. package/dist_ts/nosqldb/classes.collectionpreparation.js +134 -0
  38. package/dist_ts/nosqldb/classes.collectiontopology.d.ts +47 -0
  39. package/dist_ts/nosqldb/classes.collectiontopology.js +388 -0
  40. package/dist_ts/nosqldb/classes.connection.d.ts +18 -0
  41. package/dist_ts/nosqldb/classes.connection.js +23 -0
  42. package/dist_ts/nosqldb/classes.convenience.d.ts +1 -0
  43. package/dist_ts/nosqldb/classes.convenience.js +5 -0
  44. package/dist_ts/nosqldb/classes.cursor.d.ts +15 -0
  45. package/dist_ts/nosqldb/classes.cursor.js +82 -0
  46. package/dist_ts/nosqldb/classes.cursoroperation.d.ts +7 -0
  47. package/dist_ts/nosqldb/classes.cursoroperation.js +36 -0
  48. package/dist_ts/nosqldb/classes.db.d.ts +98 -0
  49. package/dist_ts/nosqldb/classes.db.js +434 -0
  50. package/dist_ts/nosqldb/classes.distributedcoordinator.d.ts +52 -0
  51. package/dist_ts/nosqldb/classes.distributedcoordinator.js +314 -0
  52. package/dist_ts/nosqldb/classes.doc.d.ts +722 -0
  53. package/dist_ts/nosqldb/classes.doc.js +2976 -0
  54. package/dist_ts/nosqldb/classes.easystore.d.ts +42 -0
  55. package/dist_ts/nosqldb/classes.easystore.js +199 -0
  56. package/dist_ts/nosqldb/classes.exactpersistence.d.ts +141 -0
  57. package/dist_ts/nosqldb/classes.exactpersistence.js +1110 -0
  58. package/dist_ts/nosqldb/classes.lucene.adapter.d.ts +173 -0
  59. package/dist_ts/nosqldb/classes.lucene.adapter.js +623 -0
  60. package/dist_ts/nosqldb/classes.mongoadministration.d.ts +73 -0
  61. package/dist_ts/nosqldb/classes.mongoadministration.js +497 -0
  62. package/dist_ts/nosqldb/classes.namespaceinspection.d.ts +42 -0
  63. package/dist_ts/nosqldb/classes.namespaceinspection.js +138 -0
  64. package/dist_ts/nosqldb/classes.operationbudget.d.ts +22 -0
  65. package/dist_ts/nosqldb/classes.operationbudget.js +65 -0
  66. package/dist_ts/nosqldb/classes.ordinarypersistence.d.ts +18 -0
  67. package/dist_ts/nosqldb/classes.ordinarypersistence.js +71 -0
  68. package/dist_ts/nosqldb/classes.persistence.d.ts +14 -0
  69. package/dist_ts/nosqldb/classes.persistence.js +34 -0
  70. package/dist_ts/nosqldb/classes.session.d.ts +28 -0
  71. package/dist_ts/nosqldb/classes.session.js +246 -0
  72. package/dist_ts/nosqldb/classes.storedinspection.d.ts +44 -0
  73. package/dist_ts/nosqldb/classes.storedinspection.js +100 -0
  74. package/dist_ts/nosqldb/classes.testdatabase.d.ts +56 -0
  75. package/dist_ts/nosqldb/classes.testdatabase.js +250 -0
  76. package/dist_ts/nosqldb/classes.watcher.d.ts +37 -0
  77. package/dist_ts/nosqldb/classes.watcher.js +98 -0
  78. package/dist_ts/nosqldb/index.d.ts +27 -0
  79. package/dist_ts/nosqldb/index.js +18 -0
  80. package/dist_ts/nosqldb/logging.d.ts +2 -0
  81. package/dist_ts/nosqldb/logging.js +3 -0
  82. package/dist_ts/nosqldb/plugins.d.ts +17 -0
  83. package/dist_ts/nosqldb/plugins.js +20 -0
  84. package/dist_ts/nosqldb/shim.d.ts +1 -0
  85. package/dist_ts/nosqldb/shim.js +8 -0
  86. package/dist_ts/nosqldb/testsupport.d.ts +3 -0
  87. package/dist_ts/nosqldb/testsupport.js +3 -0
  88. package/dist_ts/objectstorage/classes.bucket.d.ts +227 -0
  89. package/dist_ts/objectstorage/classes.bucket.js +939 -0
  90. package/dist_ts/objectstorage/classes.connection.d.ts +21 -0
  91. package/dist_ts/objectstorage/classes.connection.js +27 -0
  92. package/dist_ts/objectstorage/classes.directory.d.ts +124 -0
  93. package/dist_ts/objectstorage/classes.directory.js +335 -0
  94. package/dist_ts/objectstorage/classes.exactpathpurgeerror.d.ts +5 -0
  95. package/dist_ts/objectstorage/classes.exactpathpurgeerror.js +18 -0
  96. package/dist_ts/objectstorage/classes.exactuploaderror.d.ts +5 -0
  97. package/dist_ts/objectstorage/classes.exactuploaderror.js +19 -0
  98. package/dist_ts/objectstorage/classes.file.d.ts +91 -0
  99. package/dist_ts/objectstorage/classes.file.js +255 -0
  100. package/dist_ts/objectstorage/classes.listcursor.d.ts +41 -0
  101. package/dist_ts/objectstorage/classes.listcursor.js +67 -0
  102. package/dist_ts/objectstorage/classes.metadata.d.ts +57 -0
  103. package/dist_ts/objectstorage/classes.metadata.js +113 -0
  104. package/dist_ts/objectstorage/classes.smartbucket.d.ts +57 -0
  105. package/dist_ts/objectstorage/classes.smartbucket.js +357 -0
  106. package/dist_ts/objectstorage/classes.trash.d.ts +11 -0
  107. package/dist_ts/objectstorage/classes.trash.js +22 -0
  108. package/dist_ts/objectstorage/classes.watcher.d.ts +79 -0
  109. package/dist_ts/objectstorage/classes.watcher.js +249 -0
  110. package/dist_ts/objectstorage/helpers.d.ts +25 -0
  111. package/dist_ts/objectstorage/helpers.js +215 -0
  112. package/dist_ts/objectstorage/index.d.ts +13 -0
  113. package/dist_ts/objectstorage/index.js +13 -0
  114. package/dist_ts/objectstorage/interfaces.d.ts +276 -0
  115. package/dist_ts/objectstorage/interfaces.js +2 -0
  116. package/dist_ts/objectstorage/internal.exactpathpurge.operations.d.ts +11 -0
  117. package/dist_ts/objectstorage/internal.exactpathpurge.operations.js +1069 -0
  118. package/dist_ts/objectstorage/internal.exactupload.capability.d.ts +40 -0
  119. package/dist_ts/objectstorage/internal.exactupload.capability.js +382 -0
  120. package/dist_ts/objectstorage/internal.exactupload.operations.d.ts +11 -0
  121. package/dist_ts/objectstorage/internal.exactupload.operations.js +1104 -0
  122. package/dist_ts/objectstorage/internal.multipart.planner.d.ts +8 -0
  123. package/dist_ts/objectstorage/internal.multipart.planner.js +63 -0
  124. package/dist_ts/objectstorage/internal.multipart.stream.d.ts +17 -0
  125. package/dist_ts/objectstorage/internal.multipart.stream.js +440 -0
  126. package/dist_ts/objectstorage/internal.multipart.types.d.ts +82 -0
  127. package/dist_ts/objectstorage/internal.multipart.types.js +2 -0
  128. package/dist_ts/objectstorage/plugins.d.ts +17 -0
  129. package/dist_ts/objectstorage/plugins.js +23 -0
  130. package/dist_ts/plugins.d.ts +4 -0
  131. package/dist_ts/plugins.js +5 -0
  132. package/dist_ts/sqldb/classes.clickhouseconnection.d.ts +39 -0
  133. package/dist_ts/sqldb/classes.clickhouseconnection.js +225 -0
  134. package/dist_ts/sqldb/classes.sqlconnection.d.ts +50 -0
  135. package/dist_ts/sqldb/classes.sqlconnection.js +376 -0
  136. package/dist_ts/sqldb/classes.sqltable.d.ts +29 -0
  137. package/dist_ts/sqldb/classes.sqltable.js +70 -0
  138. package/dist_ts/sqldb/clickhouse/classes.metricwriter.d.ts +27 -0
  139. package/dist_ts/sqldb/clickhouse/classes.metricwriter.js +89 -0
  140. package/dist_ts/sqldb/clickhouse/index.d.ts +9 -0
  141. package/dist_ts/sqldb/clickhouse/index.js +13 -0
  142. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.d.ts +88 -0
  143. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.js +304 -0
  144. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.d.ts +28 -0
  145. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.js +46 -0
  146. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.d.ts +43 -0
  147. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.js +155 -0
  148. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.d.ts +13 -0
  149. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.js +36 -0
  150. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.d.ts +49 -0
  151. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.js +106 -0
  152. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.d.ts +51 -0
  153. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.js +96 -0
  154. package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.d.ts +5 -0
  155. package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.js +6 -0
  156. package/dist_ts/sqldb/clickhouse/smartclickhouse.types.d.ts +53 -0
  157. package/dist_ts/sqldb/clickhouse/smartclickhouse.types.js +41 -0
  158. package/dist_ts/sqldb/index.d.ts +6 -0
  159. package/dist_ts/sqldb/index.js +6 -0
  160. package/dist_ts/sqldb/interfaces.d.ts +53 -0
  161. package/dist_ts/sqldb/interfaces.js +19 -0
  162. package/dist_ts/sqldb/internal.sqlpool.d.ts +51 -0
  163. package/dist_ts/sqldb/internal.sqlpool.js +214 -0
  164. package/dist_ts/sqldb/plugins.clickhouse.d.ts +4 -0
  165. package/dist_ts/sqldb/plugins.clickhouse.js +5 -0
  166. package/dist_ts/sqldb/plugins.mariadb.d.ts +4 -0
  167. package/dist_ts/sqldb/plugins.mariadb.js +5 -0
  168. package/docs/source/smartbucket/license.md +19 -0
  169. package/docs/source/smartclickhouse/license.md +19 -0
  170. package/license.md +21 -0
  171. package/package.json +101 -0
  172. package/readme.md +157 -0
  173. package/ts/00_commitinfo_data.ts +8 -0
  174. package/ts/classes.losslessorgclient.ts +104 -0
  175. package/ts/core/classes.error.ts +31 -0
  176. package/ts/core/classes.operation.ts +60 -0
  177. package/ts/core/interfaces.ts +24 -0
  178. package/ts/index.ts +4 -0
  179. package/ts/nosqldb/classes.atomicdelete.ts +81 -0
  180. package/ts/nosqldb/classes.atomicfindoneandupdate.ts +152 -0
  181. package/ts/nosqldb/classes.atomicupdate.ts +99 -0
  182. package/ts/nosqldb/classes.bootstraprecord.ts +107 -0
  183. package/ts/nosqldb/classes.bsonassertion.ts +25 -0
  184. package/ts/nosqldb/classes.bsonobjectid.ts +45 -0
  185. package/ts/nosqldb/classes.bsonsnapshot.ts +105 -0
  186. package/ts/nosqldb/classes.cached-document.ts +67 -0
  187. package/ts/nosqldb/classes.collection.ts +2399 -0
  188. package/ts/nosqldb/classes.collectionfactory.ts +87 -0
  189. package/ts/nosqldb/classes.collectionlifecycle.ts +24 -0
  190. package/ts/nosqldb/classes.collectionpreparation.ts +164 -0
  191. package/ts/nosqldb/classes.collectiontopology.ts +645 -0
  192. package/ts/nosqldb/classes.connection.ts +31 -0
  193. package/ts/nosqldb/classes.convenience.ts +5 -0
  194. package/ts/nosqldb/classes.cursor.ts +88 -0
  195. package/ts/nosqldb/classes.cursoroperation.ts +38 -0
  196. package/ts/nosqldb/classes.db.ts +637 -0
  197. package/ts/nosqldb/classes.distributedcoordinator.ts +305 -0
  198. package/ts/nosqldb/classes.doc.ts +4928 -0
  199. package/ts/nosqldb/classes.easystore.ts +154 -0
  200. package/ts/nosqldb/classes.exactpersistence.ts +1974 -0
  201. package/ts/nosqldb/classes.lucene.adapter.ts +780 -0
  202. package/ts/nosqldb/classes.mongoadministration.ts +867 -0
  203. package/ts/nosqldb/classes.namespaceinspection.ts +199 -0
  204. package/ts/nosqldb/classes.operationbudget.ts +75 -0
  205. package/ts/nosqldb/classes.ordinarypersistence.ts +84 -0
  206. package/ts/nosqldb/classes.persistence.ts +62 -0
  207. package/ts/nosqldb/classes.session.ts +389 -0
  208. package/ts/nosqldb/classes.storedinspection.ts +151 -0
  209. package/ts/nosqldb/classes.testdatabase.ts +272 -0
  210. package/ts/nosqldb/classes.watcher.ts +96 -0
  211. package/ts/nosqldb/index.ts +51 -0
  212. package/ts/nosqldb/logging.ts +3 -0
  213. package/ts/nosqldb/plugins.ts +37 -0
  214. package/ts/nosqldb/shim.ts +6 -0
  215. package/ts/nosqldb/testsupport.ts +13 -0
  216. package/ts/objectstorage/classes.bucket.ts +1114 -0
  217. package/ts/objectstorage/classes.connection.ts +36 -0
  218. package/ts/objectstorage/classes.directory.ts +425 -0
  219. package/ts/objectstorage/classes.exactpathpurgeerror.ts +24 -0
  220. package/ts/objectstorage/classes.exactuploaderror.ts +25 -0
  221. package/ts/objectstorage/classes.file.ts +303 -0
  222. package/ts/objectstorage/classes.listcursor.ts +89 -0
  223. package/ts/objectstorage/classes.metadata.ts +134 -0
  224. package/ts/objectstorage/classes.smartbucket.ts +445 -0
  225. package/ts/objectstorage/classes.trash.ts +30 -0
  226. package/ts/objectstorage/classes.watcher.ts +289 -0
  227. package/ts/objectstorage/helpers.ts +254 -0
  228. package/ts/objectstorage/index.ts +13 -0
  229. package/ts/objectstorage/interfaces.ts +389 -0
  230. package/ts/objectstorage/internal.exactpathpurge.operations.ts +1936 -0
  231. package/ts/objectstorage/internal.exactupload.capability.ts +580 -0
  232. package/ts/objectstorage/internal.exactupload.operations.ts +1715 -0
  233. package/ts/objectstorage/internal.multipart.planner.ts +90 -0
  234. package/ts/objectstorage/internal.multipart.stream.ts +606 -0
  235. package/ts/objectstorage/internal.multipart.types.ts +106 -0
  236. package/ts/objectstorage/plugins.ts +35 -0
  237. package/ts/plugins.ts +4 -0
  238. package/ts/sqldb/classes.clickhouseconnection.ts +189 -0
  239. package/ts/sqldb/classes.sqlconnection.ts +350 -0
  240. package/ts/sqldb/classes.sqltable.ts +70 -0
  241. package/ts/sqldb/clickhouse/classes.metricwriter.ts +72 -0
  242. package/ts/sqldb/clickhouse/index.ts +16 -0
  243. package/ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.ts +372 -0
  244. package/ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.ts +52 -0
  245. package/ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.ts +120 -0
  246. package/ts/sqldb/clickhouse/smartclickhouse.classes.resultset.ts +44 -0
  247. package/ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.ts +123 -0
  248. package/ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.ts +114 -0
  249. package/ts/sqldb/clickhouse/smartclickhouse.plugins.ts +5 -0
  250. package/ts/sqldb/clickhouse/smartclickhouse.types.ts +134 -0
  251. package/ts/sqldb/index.ts +6 -0
  252. package/ts/sqldb/interfaces.ts +61 -0
  253. package/ts/sqldb/internal.sqlpool.ts +179 -0
  254. package/ts/sqldb/plugins.clickhouse.ts +4 -0
  255. package/ts/sqldb/plugins.mariadb.ts +4 -0
@@ -0,0 +1,249 @@
1
+ // classes.watcher.ts
2
+ import * as plugins from './plugins.js';
3
+ import * as interfaces from './interfaces.js';
4
+ import { EventEmitter } from 'node:events';
5
+ /**
6
+ * BucketWatcher monitors a storage bucket for changes (add/modify/delete)
7
+ * using a polling-based approach. Designed to follow the SmartdataDbWatcher pattern.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const watcher = bucket.createWatcher({ prefix: 'uploads/', pollIntervalMs: 3000 });
12
+ *
13
+ * // RxJS Observable pattern
14
+ * watcher.changeSubject.subscribe((change) => {
15
+ * console.log('Change:', change);
16
+ * });
17
+ *
18
+ * // EventEmitter pattern
19
+ * watcher.on('change', (change) => console.log(change));
20
+ * watcher.on('error', (err) => console.error(err));
21
+ *
22
+ * await watcher.start();
23
+ * await watcher.readyDeferred.promise; // Wait for initial state
24
+ *
25
+ * // Later...
26
+ * await watcher.stop();
27
+ * ```
28
+ */
29
+ export class BucketWatcher extends EventEmitter {
30
+ /** Deferred that resolves when initial state is built and watcher is ready */
31
+ readyDeferred = plugins.smartpromise.defer();
32
+ /** Observable for receiving change events (supports RxJS operators) */
33
+ changeSubject;
34
+ // Internal subjects and state
35
+ rawSubject;
36
+ previousState;
37
+ pollIntervalId = null;
38
+ isPolling = false;
39
+ isStopped = false;
40
+ // Configuration
41
+ bucketRef;
42
+ prefix;
43
+ pollIntervalMs;
44
+ bufferTimeMs;
45
+ includeInitial;
46
+ pageSize;
47
+ constructor(bucketRef, options = {}) {
48
+ super();
49
+ this.bucketRef = bucketRef;
50
+ this.prefix = options.prefix ?? '';
51
+ this.pollIntervalMs = options.pollIntervalMs ?? 5000;
52
+ this.bufferTimeMs = options.bufferTimeMs;
53
+ this.includeInitial = options.includeInitial ?? false;
54
+ this.pageSize = options.pageSize ?? 1000;
55
+ // Initialize state tracking
56
+ this.previousState = new Map();
57
+ // Initialize raw subject for emitting changes
58
+ this.rawSubject = new plugins.smartrx.rxjs.Subject();
59
+ // Configure the public observable with optional buffering
60
+ if (this.bufferTimeMs && this.bufferTimeMs > 0) {
61
+ this.changeSubject = this.rawSubject.pipe(plugins.smartrx.rxjs.ops.bufferTime(this.bufferTimeMs), plugins.smartrx.rxjs.ops.filter((events) => events.length > 0));
62
+ }
63
+ else {
64
+ this.changeSubject = this.rawSubject.asObservable();
65
+ }
66
+ }
67
+ /**
68
+ * Start watching the bucket for changes
69
+ */
70
+ async start() {
71
+ if (this.pollIntervalId !== null) {
72
+ console.log('BucketWatcher is already running');
73
+ return;
74
+ }
75
+ this.isStopped = false;
76
+ // Build initial state
77
+ await this.buildInitialState();
78
+ // Emit initial state as 'add' events if configured
79
+ if (this.includeInitial) {
80
+ for (const state of this.previousState.values()) {
81
+ this.emitChange({
82
+ type: 'add',
83
+ key: state.key,
84
+ size: state.size,
85
+ etag: state.etag,
86
+ lastModified: state.lastModified,
87
+ bucket: this.bucketRef.name,
88
+ });
89
+ }
90
+ }
91
+ // Mark as ready
92
+ this.readyDeferred.resolve();
93
+ // Start polling loop
94
+ this.pollIntervalId = setInterval(() => {
95
+ this.poll().catch((err) => {
96
+ this.emit('error', err);
97
+ });
98
+ }, this.pollIntervalMs);
99
+ }
100
+ /**
101
+ * Stop watching the bucket
102
+ */
103
+ async stop() {
104
+ this.isStopped = true;
105
+ if (this.pollIntervalId !== null) {
106
+ clearInterval(this.pollIntervalId);
107
+ this.pollIntervalId = null;
108
+ }
109
+ // Wait for any in-progress poll to complete
110
+ while (this.isPolling) {
111
+ await new Promise((resolve) => setTimeout(resolve, 50));
112
+ }
113
+ this.rawSubject.complete();
114
+ }
115
+ /**
116
+ * Alias for stop() - for consistency with other APIs
117
+ */
118
+ async close() {
119
+ return this.stop();
120
+ }
121
+ /**
122
+ * Build the initial state by listing all objects with metadata
123
+ */
124
+ async buildInitialState() {
125
+ this.previousState.clear();
126
+ for await (const obj of this.listObjectsWithMetadata()) {
127
+ if (obj.Key) {
128
+ this.previousState.set(obj.Key, {
129
+ key: obj.Key,
130
+ etag: obj.ETag ?? '',
131
+ size: obj.Size ?? 0,
132
+ lastModified: obj.LastModified ?? new Date(0),
133
+ });
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Poll for changes by comparing current state against previous state
139
+ */
140
+ async poll() {
141
+ // Guard against overlapping polls
142
+ if (this.isPolling || this.isStopped) {
143
+ return;
144
+ }
145
+ this.isPolling = true;
146
+ try {
147
+ // Build current state
148
+ const currentState = new Map();
149
+ for await (const obj of this.listObjectsWithMetadata()) {
150
+ if (this.isStopped) {
151
+ break;
152
+ }
153
+ if (obj.Key) {
154
+ currentState.set(obj.Key, {
155
+ key: obj.Key,
156
+ etag: obj.ETag ?? '',
157
+ size: obj.Size ?? 0,
158
+ lastModified: obj.LastModified ?? new Date(0),
159
+ });
160
+ }
161
+ }
162
+ if (!this.isStopped) {
163
+ this.detectChanges(currentState);
164
+ this.previousState = currentState;
165
+ }
166
+ }
167
+ catch (err) {
168
+ this.emit('error', err);
169
+ }
170
+ finally {
171
+ this.isPolling = false;
172
+ }
173
+ }
174
+ /**
175
+ * Detect changes between current and previous state
176
+ */
177
+ detectChanges(currentState) {
178
+ // Detect added and modified objects
179
+ for (const [key, current] of currentState) {
180
+ const previous = this.previousState.get(key);
181
+ if (!previous) {
182
+ // New object - emit 'add' event
183
+ this.emitChange({
184
+ type: 'add',
185
+ key: current.key,
186
+ size: current.size,
187
+ etag: current.etag,
188
+ lastModified: current.lastModified,
189
+ bucket: this.bucketRef.name,
190
+ });
191
+ }
192
+ else if (previous.etag !== current.etag ||
193
+ previous.size !== current.size ||
194
+ previous.lastModified.getTime() !== current.lastModified.getTime()) {
195
+ // Object modified - emit 'modify' event
196
+ this.emitChange({
197
+ type: 'modify',
198
+ key: current.key,
199
+ size: current.size,
200
+ etag: current.etag,
201
+ lastModified: current.lastModified,
202
+ bucket: this.bucketRef.name,
203
+ });
204
+ }
205
+ }
206
+ // Detect deleted objects
207
+ for (const [key, previous] of this.previousState) {
208
+ if (!currentState.has(key)) {
209
+ // Object deleted - emit 'delete' event
210
+ this.emitChange({
211
+ type: 'delete',
212
+ key: previous.key,
213
+ bucket: this.bucketRef.name,
214
+ });
215
+ }
216
+ }
217
+ }
218
+ /**
219
+ * Emit a change event via both RxJS Subject and EventEmitter
220
+ */
221
+ emitChange(event) {
222
+ this.rawSubject.next(event);
223
+ this.emit('change', event);
224
+ }
225
+ /**
226
+ * List objects with full metadata (ETag, Size, LastModified)
227
+ * This is a private method that yields full _Object data, not just keys
228
+ */
229
+ async *listObjectsWithMetadata() {
230
+ let continuationToken;
231
+ do {
232
+ if (this.isStopped) {
233
+ return;
234
+ }
235
+ const command = new plugins.s3.ListObjectsV2Command({
236
+ Bucket: this.bucketRef.name,
237
+ Prefix: this.prefix,
238
+ MaxKeys: this.pageSize,
239
+ ContinuationToken: continuationToken,
240
+ });
241
+ const response = await this.bucketRef.smartbucketRef.storageClient.send(command);
242
+ for (const obj of response.Contents || []) {
243
+ yield obj;
244
+ }
245
+ continuationToken = response.NextContinuationToken;
246
+ } while (continuationToken);
247
+ }
248
+ }
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53YXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9jbGFzc2VzLndhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBRXJCLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFlBQVk7SUFDN0MsOEVBQThFO0lBQ3ZFLGFBQWEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRXBELHVFQUF1RTtJQUNoRSxhQUFhLENBQXFHO0lBRXpILDhCQUE4QjtJQUN0QixVQUFVLENBQStEO0lBQ3pFLGFBQWEsQ0FBOEM7SUFDM0QsY0FBYyxHQUEwQyxJQUFJLENBQUM7SUFDN0QsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTFCLGdCQUFnQjtJQUNDLFNBQVMsQ0FBUztJQUNsQixNQUFNLENBQVM7SUFDZixjQUFjLENBQVM7SUFDdkIsWUFBWSxDQUFVO0lBQ3RCLGNBQWMsQ0FBVTtJQUN4QixRQUFRLENBQVM7SUFFbEMsWUFBWSxTQUFpQixFQUFFLFVBQTRDLEVBQUU7UUFDM0UsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUM7UUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFD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
@@ -0,0 +1,25 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as interfaces from './interfaces.js';
3
+ export declare const reducePathDescriptorToPath: (pathDescriptorArg: interfaces.IPathDecriptor) => Promise<string>;
4
+ export interface IStorageWarning {
5
+ code: string;
6
+ message: string;
7
+ }
8
+ export interface INormalizedStorageConfig {
9
+ endpointUrl: string;
10
+ host: string;
11
+ protocol: 'http' | 'https';
12
+ port?: number;
13
+ region: string;
14
+ credentials: {
15
+ accessKeyId: string;
16
+ secretAccessKey: string;
17
+ };
18
+ forcePathStyle: boolean;
19
+ }
20
+ export declare function normalizeStorageDescriptor(input: plugins.tsclass.storage.IStorageDescriptor, logger?: {
21
+ warn: (msg: string) => void;
22
+ }): {
23
+ normalized: INormalizedStorageConfig;
24
+ warnings: IStorageWarning[];
25
+ };
@@ -0,0 +1,215 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as interfaces from './interfaces.js';
3
+ export const reducePathDescriptorToPath = async (pathDescriptorArg) => {
4
+ let returnPath = ``;
5
+ if (pathDescriptorArg.directory) {
6
+ if (pathDescriptorArg.path && plugins.path.isAbsolute(pathDescriptorArg.path)) {
7
+ console.warn('Directory is being ignored when path is absolute.');
8
+ returnPath = pathDescriptorArg.path;
9
+ }
10
+ else if (pathDescriptorArg.path) {
11
+ returnPath = plugins.path.join(pathDescriptorArg.directory.getBasePath(), pathDescriptorArg.path);
12
+ }
13
+ }
14
+ else if (pathDescriptorArg.path) {
15
+ returnPath = pathDescriptorArg.path;
16
+ }
17
+ else {
18
+ throw new Error('You must specify either a path or a directory.');
19
+ }
20
+ if (returnPath.startsWith('/')) {
21
+ returnPath = returnPath.substring(1);
22
+ }
23
+ return returnPath;
24
+ };
25
+ function coerceBooleanMaybe(value) {
26
+ if (typeof value === 'boolean')
27
+ return { value };
28
+ if (typeof value === 'string') {
29
+ const v = value.trim().toLowerCase();
30
+ if (v === 'true' || v === '1') {
31
+ return {
32
+ value: true,
33
+ warning: {
34
+ code: 'SBK_S3_COERCED_USESSL',
35
+ message: `Coerced useSsl='${value}' (string) to boolean true.`
36
+ }
37
+ };
38
+ }
39
+ if (v === 'false' || v === '0') {
40
+ return {
41
+ value: false,
42
+ warning: {
43
+ code: 'SBK_S3_COERCED_USESSL',
44
+ message: `Coerced useSsl='${value}' (string) to boolean false.`
45
+ }
46
+ };
47
+ }
48
+ }
49
+ return { value: undefined };
50
+ }
51
+ function coercePortMaybe(port) {
52
+ if (port === undefined || port === null || port === '')
53
+ return { value: undefined };
54
+ const n = typeof port === 'number' ? port : Number(String(port).trim());
55
+ if (!Number.isFinite(n) || !Number.isInteger(n) || n <= 0 || n > 65535) {
56
+ return {
57
+ value: undefined,
58
+ warning: {
59
+ code: 'SBK_S3_INVALID_PORT',
60
+ message: `Invalid port '${String(port)}' - expected integer in [1..65535].`
61
+ }
62
+ };
63
+ }
64
+ return { value: n };
65
+ }
66
+ function sanitizeEndpointString(raw) {
67
+ const warnings = [];
68
+ let s = String(raw ?? '').trim();
69
+ if (s !== String(raw ?? '')) {
70
+ warnings.push({
71
+ code: 'SBK_S3_TRIMMED_ENDPOINT',
72
+ message: 'Trimmed surrounding whitespace from endpoint.'
73
+ });
74
+ }
75
+ return { value: s, warnings };
76
+ }
77
+ function parseEndpointHostPort(endpoint, provisionalProtocol) {
78
+ let url;
79
+ const extras = {};
80
+ // Check if endpoint already has a scheme
81
+ const hasScheme = /^https?:\/\//i.test(endpoint);
82
+ // Try parsing as full URL first
83
+ try {
84
+ if (hasScheme) {
85
+ url = new URL(endpoint);
86
+ }
87
+ else {
88
+ // Not a full URL; try host[:port] by attaching provisional scheme
89
+ // Remove anything after first '/' for safety
90
+ const cleanEndpoint = endpoint.replace(/\/.*/, '');
91
+ url = new URL(`${provisionalProtocol}://${cleanEndpoint}`);
92
+ }
93
+ }
94
+ catch (e) {
95
+ throw new Error(`Unable to parse endpoint '${endpoint}'.`);
96
+ }
97
+ // Check for dropped components
98
+ if (url.username || url.password)
99
+ extras.droppedCreds = true;
100
+ if (url.pathname && url.pathname !== '/')
101
+ extras.droppedPath = true;
102
+ if (url.search)
103
+ extras.droppedQuery = true;
104
+ const hadScheme = hasScheme;
105
+ const host = url.hostname; // hostnames lowercased by URL; IPs preserved
106
+ const port = url.port ? Number(url.port) : undefined;
107
+ return { hadScheme, host, port, extras };
108
+ }
109
+ export function normalizeStorageDescriptor(input, logger) {
110
+ const warnings = [];
111
+ const logWarn = (w) => {
112
+ warnings.push(w);
113
+ if (logger) {
114
+ logger.warn(`[SmartBucket] ${w.code}: ${w.message}`);
115
+ }
116
+ else {
117
+ console.warn(`[SmartBucket] ${w.code}: ${w.message}`);
118
+ }
119
+ };
120
+ // Coerce and sanitize inputs
121
+ const { value: coercedUseSsl, warning: useSslWarn } = coerceBooleanMaybe(input.useSsl);
122
+ if (useSslWarn)
123
+ logWarn(useSslWarn);
124
+ const { value: coercedPort, warning: portWarn } = coercePortMaybe(input.port);
125
+ if (portWarn)
126
+ logWarn(portWarn);
127
+ const { value: endpointStr, warnings: endpointSanWarnings } = sanitizeEndpointString(input.endpoint);
128
+ endpointSanWarnings.forEach(logWarn);
129
+ if (!endpointStr) {
130
+ throw new Error('Storage endpoint is required (got empty string). Provide hostname or URL.');
131
+ }
132
+ // Provisional protocol selection for parsing host:port forms
133
+ const provisionalProtocol = coercedUseSsl === false ? 'http' : 'https';
134
+ const { hadScheme, host, port: epPort, extras } = parseEndpointHostPort(endpointStr, provisionalProtocol);
135
+ if (extras.droppedCreds) {
136
+ logWarn({
137
+ code: 'SBK_S3_DROPPED_CREDENTIALS',
138
+ message: 'Ignored credentials in endpoint URL.'
139
+ });
140
+ }
141
+ if (extras.droppedPath) {
142
+ logWarn({
143
+ code: 'SBK_S3_DROPPED_PATH',
144
+ message: 'Removed path segment from endpoint URL; S3 endpoint should be host[:port] only.'
145
+ });
146
+ }
147
+ if (extras.droppedQuery) {
148
+ logWarn({
149
+ code: 'SBK_S3_DROPPED_QUERY',
150
+ message: 'Removed query string from endpoint URL; S3 endpoint should be host[:port] only.'
151
+ });
152
+ }
153
+ // Final protocol decision
154
+ let finalProtocol;
155
+ if (hadScheme) {
156
+ // Scheme from endpoint wins
157
+ const schemeFromEndpoint = endpointStr.trim().toLowerCase().startsWith('http://') ? 'http' : 'https';
158
+ finalProtocol = schemeFromEndpoint;
159
+ if (typeof coercedUseSsl === 'boolean') {
160
+ const expected = coercedUseSsl ? 'https' : 'http';
161
+ if (expected !== finalProtocol) {
162
+ logWarn({
163
+ code: 'SBK_S3_SCHEME_CONFLICT',
164
+ message: `useSsl=${String(coercedUseSsl)} conflicts with endpoint scheme '${finalProtocol}'; using endpoint scheme.`
165
+ });
166
+ }
167
+ }
168
+ }
169
+ else {
170
+ if (typeof coercedUseSsl === 'boolean') {
171
+ finalProtocol = coercedUseSsl ? 'https' : 'http';
172
+ }
173
+ else {
174
+ finalProtocol = 'https';
175
+ logWarn({
176
+ code: 'SBK_S3_GUESSED_PROTOCOL',
177
+ message: "No scheme in endpoint and useSsl not provided; defaulting to 'https'."
178
+ });
179
+ }
180
+ }
181
+ // Final port decision
182
+ let finalPort = undefined;
183
+ if (coercedPort !== undefined && epPort !== undefined && coercedPort !== epPort) {
184
+ logWarn({
185
+ code: 'SBK_S3_PORT_CONFLICT',
186
+ message: `Port in config (${coercedPort}) conflicts with endpoint port (${epPort}); using config port.`
187
+ });
188
+ finalPort = coercedPort;
189
+ }
190
+ else {
191
+ finalPort = (coercedPort !== undefined) ? coercedPort : epPort;
192
+ }
193
+ // Build canonical endpoint URL (origin only, no trailing slash)
194
+ const url = new URL(`${finalProtocol}://${host}`);
195
+ if (finalPort !== undefined)
196
+ url.port = String(finalPort);
197
+ const endpointUrl = url.origin;
198
+ const region = input.region || 'us-east-1';
199
+ return {
200
+ normalized: {
201
+ endpointUrl,
202
+ host,
203
+ protocol: finalProtocol,
204
+ port: finalPort,
205
+ region,
206
+ credentials: {
207
+ accessKeyId: input.accessKey,
208
+ secretAccessKey: input.accessSecret,
209
+ },
210
+ forcePathStyle: true,
211
+ },
212
+ warnings,
213
+ };
214
+ }
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLEtBQUssRUFBRSxpQkFBNEMsRUFBbUIsRUFBRTtJQUNoSCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFDbkIsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGlCQUFpQixDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUNsRSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEcsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDdEMsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLFVBQVUsR0FBRyxVQUFVLENB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
@@ -0,0 +1,13 @@
1
+ export * from './classes.smartbucket.js';
2
+ export * from './classes.bucket.js';
3
+ export * from './classes.exactuploaderror.js';
4
+ export * from './classes.exactpathpurgeerror.js';
5
+ export * from './classes.directory.js';
6
+ export * from './classes.file.js';
7
+ export * from './classes.listcursor.js';
8
+ export * from './classes.metadata.js';
9
+ export * from './classes.trash.js';
10
+ export * from './classes.watcher.js';
11
+ export * from './interfaces.js';
12
+ export { ObjectStorageConnection } from './classes.connection.js';
13
+ export type { IObjectStorageConnectionOptions } from './classes.connection.js';
@@ -0,0 +1,13 @@
1
+ export * from './classes.smartbucket.js';
2
+ export * from './classes.bucket.js';
3
+ export * from './classes.exactuploaderror.js';
4
+ export * from './classes.exactpathpurgeerror.js';
5
+ export * from './classes.directory.js';
6
+ export * from './classes.file.js';
7
+ export * from './classes.listcursor.js';
8
+ export * from './classes.metadata.js';
9
+ export * from './classes.trash.js';
10
+ export * from './classes.watcher.js';
11
+ export * from './interfaces.js';
12
+ export { ObjectStorageConnection } from './classes.connection.js';
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9vYmplY3RzdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQyJ9