@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,255 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as helpers from './helpers.js';
3
+ import * as interfaces from './interfaces.js';
4
+ import { Directory } from './classes.directory.js';
5
+ import { MetaData } from './classes.metadata.js';
6
+ /**
7
+ * represents a file in a directory
8
+ */
9
+ export class File {
10
+ // STATIC
11
+ /**
12
+ * creates a file in draft mode
13
+ * you need to call .save() to store it in object storage
14
+ * @param optionsArg
15
+ */
16
+ static async create(optionsArg) {
17
+ const contents = typeof optionsArg.contents === 'string'
18
+ ? Buffer.from(optionsArg.contents, optionsArg.encoding)
19
+ : optionsArg.contents;
20
+ const file = new File({
21
+ directoryRefArg: optionsArg.directory,
22
+ fileName: optionsArg.name,
23
+ });
24
+ if (contents instanceof plugins.stream.Readable) {
25
+ await optionsArg.directory.fastPutStream({
26
+ path: optionsArg.name,
27
+ stream: contents,
28
+ });
29
+ }
30
+ else {
31
+ await optionsArg.directory.fastPut({
32
+ path: optionsArg.name,
33
+ contents: contents,
34
+ });
35
+ }
36
+ return file;
37
+ }
38
+ // INSTANCE
39
+ parentDirectoryRef;
40
+ name;
41
+ /**
42
+ * get the full path to the file
43
+ * @returns the full path to the file
44
+ */
45
+ getBasePath() {
46
+ return plugins.path.join(this.parentDirectoryRef.getBasePath(), this.name);
47
+ }
48
+ constructor(optionsArg) {
49
+ this.parentDirectoryRef = optionsArg.directoryRefArg;
50
+ this.name = optionsArg.fileName;
51
+ }
52
+ async getContentsAsString() {
53
+ const fileBuffer = await this.getContents();
54
+ return fileBuffer.toString();
55
+ }
56
+ async getContents() {
57
+ const resultBuffer = await this.parentDirectoryRef.bucketRef.fastGet({
58
+ path: this.getBasePath(),
59
+ });
60
+ return resultBuffer;
61
+ }
62
+ async getReadStream(typeArg) {
63
+ const readStream = this.parentDirectoryRef.bucketRef.fastGetStream({
64
+ path: this.getBasePath(),
65
+ }, typeArg);
66
+ return readStream;
67
+ }
68
+ /**
69
+ * deletes this file
70
+ */
71
+ async delete(optionsArg) {
72
+ optionsArg = {
73
+ ...{
74
+ mode: 'permanent',
75
+ },
76
+ ...optionsArg,
77
+ };
78
+ if (optionsArg.mode === 'permanent') {
79
+ await this.parentDirectoryRef.bucketRef.fastRemove({
80
+ path: this.getBasePath(),
81
+ });
82
+ if (!this.name.endsWith('.metadata')) {
83
+ if (await this.hasMetaData()) {
84
+ const metadata = await this.getMetaData();
85
+ await metadata.metadataFile.delete(optionsArg);
86
+ }
87
+ }
88
+ }
89
+ else if (optionsArg.mode === 'trash') {
90
+ const metadata = await this.getMetaData();
91
+ await metadata.storeCustomMetaData({
92
+ key: 'recycle',
93
+ value: {
94
+ deletedAt: Date.now(),
95
+ originalPath: this.getBasePath(),
96
+ },
97
+ });
98
+ const trash = await this.parentDirectoryRef.bucketRef.getTrash();
99
+ const trashDir = await trash.getTrashDir();
100
+ await this.move({
101
+ directory: trashDir,
102
+ path: await trash.getTrashKeyByOriginalBasePath(this.getBasePath()),
103
+ });
104
+ }
105
+ await this.parentDirectoryRef.listFiles();
106
+ }
107
+ /**
108
+ * restores
109
+ */
110
+ async restore(optionsArg = {}) {
111
+ optionsArg = {
112
+ useOriginalPath: (() => {
113
+ return optionsArg.toPath ? false : true;
114
+ })(),
115
+ overwrite: false,
116
+ ...optionsArg,
117
+ };
118
+ const metadata = await this.getMetaData();
119
+ const moveToPath = optionsArg.toPath || (await metadata.getCustomMetaData({
120
+ key: 'recycle'
121
+ })).originalPath;
122
+ await metadata.deleteCustomMetaData({
123
+ key: 'recycle'
124
+ });
125
+ await this.move({
126
+ path: moveToPath,
127
+ });
128
+ }
129
+ /**
130
+ * allows locking the file
131
+ * @param optionsArg
132
+ */
133
+ async lock(optionsArg) {
134
+ const metadata = await this.getMetaData();
135
+ await metadata.setLock({
136
+ lock: 'locked',
137
+ expires: Date.now() + (optionsArg?.timeoutMillis || 1000),
138
+ });
139
+ }
140
+ /**
141
+ * actively unlocks a file
142
+ *
143
+ */
144
+ async unlock(optionsArg) {
145
+ const metadata = await this.getMetaData();
146
+ await metadata.removeLock({
147
+ force: optionsArg?.force || false,
148
+ });
149
+ }
150
+ async updateWithContents(optionsArg) {
151
+ if (optionsArg.contents instanceof plugins.stream.Readable ||
152
+ optionsArg.contents instanceof ReadableStream) {
153
+ await this.parentDirectoryRef.bucketRef.fastPutStream({
154
+ path: this.getBasePath(),
155
+ readableStream: optionsArg.contents,
156
+ overwrite: true,
157
+ });
158
+ }
159
+ else if (Buffer.isBuffer(optionsArg.contents)) {
160
+ await this.parentDirectoryRef.bucketRef.fastPut({
161
+ path: this.getBasePath(),
162
+ contents: optionsArg.contents,
163
+ overwrite: true,
164
+ });
165
+ }
166
+ else if (typeof optionsArg.contents === 'string') {
167
+ await this.parentDirectoryRef.bucketRef.fastPut({
168
+ path: this.getBasePath(),
169
+ contents: Buffer.from(optionsArg.contents, optionsArg.encoding),
170
+ overwrite: true,
171
+ });
172
+ }
173
+ }
174
+ /**
175
+ * moves the file to another directory
176
+ */
177
+ async move(pathDescriptorArg) {
178
+ let moveToPath = '';
179
+ const isDirectory = await this.parentDirectoryRef.bucketRef.isDirectory(pathDescriptorArg);
180
+ if (isDirectory) {
181
+ moveToPath = await helpers.reducePathDescriptorToPath({
182
+ ...pathDescriptorArg,
183
+ path: plugins.path.join(pathDescriptorArg.path, this.name),
184
+ });
185
+ }
186
+ else {
187
+ moveToPath = await helpers.reducePathDescriptorToPath(pathDescriptorArg);
188
+ }
189
+ // lets move the file
190
+ await this.parentDirectoryRef.bucketRef.fastMove({
191
+ sourcePath: this.getBasePath(),
192
+ destinationPath: moveToPath,
193
+ overwrite: true,
194
+ });
195
+ // lets move the metadatafile
196
+ if (!this.name.endsWith('.metadata')) {
197
+ const metadata = await this.getMetaData();
198
+ await this.parentDirectoryRef.bucketRef.fastMove({
199
+ sourcePath: metadata.metadataFile.getBasePath(),
200
+ destinationPath: moveToPath + '.metadata',
201
+ overwrite: true,
202
+ });
203
+ }
204
+ // lets update references of this
205
+ const baseDirectory = await this.parentDirectoryRef.bucketRef.getBaseDirectory();
206
+ this.parentDirectoryRef = await baseDirectory.getSubDirectoryByName(await helpers.reducePathDescriptorToPath(pathDescriptorArg), {
207
+ couldBeFilePath: true,
208
+ });
209
+ this.name = pathDescriptorArg.path;
210
+ }
211
+ async hasMetaData() {
212
+ if (!this.name.endsWith('.metadata')) {
213
+ const hasMetadataBool = MetaData.hasMetaData({
214
+ file: this,
215
+ });
216
+ return hasMetadataBool;
217
+ }
218
+ else {
219
+ return false;
220
+ }
221
+ }
222
+ /**
223
+ * allows updating the metadata of a file
224
+ * @param updatedMetadata
225
+ */
226
+ async getMetaData() {
227
+ if (this.name.endsWith('.metadata')) {
228
+ throw new Error('metadata files cannot have metadata');
229
+ }
230
+ const metadata = await MetaData.createForFile({
231
+ file: this,
232
+ });
233
+ return metadata;
234
+ }
235
+ /**
236
+ * gets the contents as json
237
+ */
238
+ async getJsonData() {
239
+ const json = await this.getContentsAsString();
240
+ const parsed = await JSON.parse(json);
241
+ return parsed;
242
+ }
243
+ async writeJsonData(dataArg) {
244
+ await this.updateWithContents({
245
+ contents: JSON.stringify(dataArg),
246
+ });
247
+ }
248
+ async getMagicBytes(optionsArg) {
249
+ return this.parentDirectoryRef.bucketRef.getMagicBytes({
250
+ path: this.getBasePath(),
251
+ length: optionsArg.length,
252
+ });
253
+ }
254
+ }
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9jbGFzc2VzLmZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLElBQUk7SUFDZixTQUFTO0lBRVQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBUTFCO1FBQ0MsTUFBTSxRQUFRLEdBQ1osT0FBTyxVQUFVLENBQUMsUUFBUSxLQUFLLFFBQVE7WUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDO1lBQ3BCLGVBQWUsRUFBRSxVQUFVLENBQUMsU0FBUztZQUNyQyxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUk7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxRQUFRLFlBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO2dCQUN2QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQ3JCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxVQUFVLENB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
@@ -0,0 +1,41 @@
1
+ import type { Bucket } from './classes.bucket.js';
2
+ export interface IListCursorOptions {
3
+ pageSize?: number;
4
+ }
5
+ export interface IListCursorResult {
6
+ keys: string[];
7
+ done: boolean;
8
+ }
9
+ /**
10
+ * ListCursor provides explicit pagination control for listing objects in a bucket.
11
+ * Useful for UI pagination, resumable operations, and manual batch processing.
12
+ */
13
+ export declare class ListCursor {
14
+ private bucket;
15
+ private prefix;
16
+ private continuationToken?;
17
+ private exhausted;
18
+ private pageSize;
19
+ constructor(bucket: Bucket, prefix: string, options?: IListCursorOptions);
20
+ /**
21
+ * Fetch the next page of object keys
22
+ * @returns Object with keys array and done flag
23
+ */
24
+ next(): Promise<IListCursorResult>;
25
+ /**
26
+ * Check if there are more pages to fetch
27
+ */
28
+ hasMore(): boolean;
29
+ /**
30
+ * Reset the cursor to start from the beginning
31
+ */
32
+ reset(): void;
33
+ /**
34
+ * Get the current continuation token (for saving/restoring state)
35
+ */
36
+ getToken(): string | undefined;
37
+ /**
38
+ * Set the continuation token (for resuming from a saved state)
39
+ */
40
+ setToken(token: string | undefined): void;
41
+ }
@@ -0,0 +1,67 @@
1
+ // classes.listcursor.ts
2
+ import * as plugins from './plugins.js';
3
+ /**
4
+ * ListCursor provides explicit pagination control for listing objects in a bucket.
5
+ * Useful for UI pagination, resumable operations, and manual batch processing.
6
+ */
7
+ export class ListCursor {
8
+ bucket;
9
+ prefix;
10
+ continuationToken;
11
+ exhausted = false;
12
+ pageSize;
13
+ constructor(bucket, prefix, options = {}) {
14
+ this.bucket = bucket;
15
+ this.prefix = prefix;
16
+ this.pageSize = options.pageSize || 1000;
17
+ }
18
+ /**
19
+ * Fetch the next page of object keys
20
+ * @returns Object with keys array and done flag
21
+ */
22
+ async next() {
23
+ if (this.exhausted) {
24
+ return { keys: [], done: true };
25
+ }
26
+ const command = new plugins.s3.ListObjectsV2Command({
27
+ Bucket: this.bucket.name,
28
+ Prefix: this.prefix,
29
+ MaxKeys: this.pageSize,
30
+ ContinuationToken: this.continuationToken,
31
+ });
32
+ const response = await this.bucket.smartbucketRef.storageClient.send(command);
33
+ const keys = (response.Contents || [])
34
+ .map((obj) => obj.Key)
35
+ .filter((key) => !!key);
36
+ this.continuationToken = response.NextContinuationToken;
37
+ this.exhausted = !this.continuationToken;
38
+ return { keys, done: this.exhausted };
39
+ }
40
+ /**
41
+ * Check if there are more pages to fetch
42
+ */
43
+ hasMore() {
44
+ return !this.exhausted;
45
+ }
46
+ /**
47
+ * Reset the cursor to start from the beginning
48
+ */
49
+ reset() {
50
+ this.continuationToken = undefined;
51
+ this.exhausted = false;
52
+ }
53
+ /**
54
+ * Get the current continuation token (for saving/restoring state)
55
+ */
56
+ getToken() {
57
+ return this.continuationToken;
58
+ }
59
+ /**
60
+ * Set the continuation token (for resuming from a saved state)
61
+ */
62
+ setToken(token) {
63
+ this.continuationToken = token;
64
+ this.exhausted = !token;
65
+ }
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5saXN0Y3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9jbGFzc2VzLmxpc3RjdXJzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0JBQXdCO0FBRXhCLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBWXhDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBTVg7SUFDQTtJQU5GLGlCQUFpQixDQUFVO0lBQzNCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFTO0lBRXpCLFlBQ1UsTUFBYyxFQUNkLE1BQWMsRUFDdEIsVUFBOEIsRUFBRTtRQUZ4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUd0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN0QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1NBQzFDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RSxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2FBQ25DLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNyQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRXpDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxLQUF5QjtRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztDQUNGIn0=
@@ -0,0 +1,57 @@
1
+ import * as plugins from './plugins.js';
2
+ import { File } from './classes.file.js';
3
+ export declare class MetaData {
4
+ static hasMetaData(optionsArg: {
5
+ file: File;
6
+ }): Promise<boolean>;
7
+ static createForFile(optionsArg: {
8
+ file: File;
9
+ }): Promise<MetaData>;
10
+ /**
11
+ * the file that contains the metadata
12
+ */
13
+ metadataFile: File;
14
+ /**
15
+ * the file that the metadata is for
16
+ */
17
+ fileRef: File;
18
+ getFileType(optionsArg?: {
19
+ useFileExtension?: boolean;
20
+ useMagicBytes?: boolean;
21
+ }): Promise<plugins.smartmime.IFileTypeResult | undefined>;
22
+ /**
23
+ * gets the size of the fileRef
24
+ */
25
+ getSizeInBytes(): Promise<number>;
26
+ private prefixCustomMetaData;
27
+ storeCustomMetaData<T = any>(optionsArg: {
28
+ key: string;
29
+ value: T;
30
+ }): Promise<void>;
31
+ getCustomMetaData<T = any>(optionsArg: {
32
+ key: string;
33
+ }): Promise<T>;
34
+ deleteCustomMetaData(optionsArg: {
35
+ key: string;
36
+ }): Promise<void>;
37
+ /**
38
+ * set a lock on the ref file
39
+ * @param optionsArg
40
+ */
41
+ setLock(optionsArg: {
42
+ lock: string;
43
+ expires: number;
44
+ }): Promise<void>;
45
+ /**
46
+ * remove the lock on the ref file
47
+ * @param optionsArg
48
+ */
49
+ removeLock(optionsArg: {
50
+ force: boolean;
51
+ }): Promise<void>;
52
+ checkLocked(): Promise<boolean>;
53
+ getLockInfo(): Promise<{
54
+ lock: string;
55
+ expires: number;
56
+ }>;
57
+ }
@@ -0,0 +1,113 @@
1
+ import * as plugins from './plugins.js';
2
+ import { File } from './classes.file.js';
3
+ export class MetaData {
4
+ static async hasMetaData(optionsArg) {
5
+ // try finding the existing metadata file; return false if it doesn't exist
6
+ try {
7
+ const existingFile = await optionsArg.file.parentDirectoryRef.getFile({
8
+ path: optionsArg.file.name + '.metadata',
9
+ });
10
+ return !!existingFile;
11
+ }
12
+ catch (error) {
13
+ const message = error?.message || '';
14
+ const isNotFound = message.includes('File not found') ||
15
+ error?.name === 'NotFound' ||
16
+ error?.$metadata?.httpStatusCode === 404;
17
+ if (isNotFound) {
18
+ return false;
19
+ }
20
+ throw error;
21
+ }
22
+ }
23
+ // static
24
+ static async createForFile(optionsArg) {
25
+ const metaData = new MetaData();
26
+ metaData.fileRef = optionsArg.file;
27
+ // lets find the existing metadata file
28
+ metaData.metadataFile = await metaData.fileRef.parentDirectoryRef.getFile({
29
+ path: metaData.fileRef.name + '.metadata',
30
+ createWithContents: '{}',
31
+ });
32
+ return metaData;
33
+ }
34
+ // instance
35
+ /**
36
+ * the file that contains the metadata
37
+ */
38
+ metadataFile;
39
+ /**
40
+ * the file that the metadata is for
41
+ */
42
+ fileRef;
43
+ async getFileType(optionsArg) {
44
+ if ((optionsArg && optionsArg.useFileExtension) || !optionsArg) {
45
+ const fileType = await plugins.smartmime.detectMimeType({
46
+ path: this.fileRef.name,
47
+ });
48
+ return fileType;
49
+ }
50
+ if (optionsArg && optionsArg.useMagicBytes) {
51
+ const fileType = await plugins.smartmime.detectMimeType({
52
+ buffer: await this.fileRef.getMagicBytes({
53
+ length: 100,
54
+ })
55
+ });
56
+ return fileType;
57
+ }
58
+ throw new Error('optionsArg.useFileExtension and optionsArg.useMagicBytes cannot both be false');
59
+ }
60
+ /**
61
+ * gets the size of the fileRef
62
+ */
63
+ async getSizeInBytes() {
64
+ const stat = await this.fileRef.parentDirectoryRef.bucketRef.fastStat({
65
+ path: this.fileRef.getBasePath(),
66
+ });
67
+ return stat.ContentLength;
68
+ }
69
+ prefixCustomMetaData = 'custom_';
70
+ async storeCustomMetaData(optionsArg) {
71
+ const data = await this.metadataFile.getJsonData();
72
+ data[this.prefixCustomMetaData + optionsArg.key] = optionsArg.value;
73
+ await this.metadataFile.writeJsonData(data);
74
+ }
75
+ async getCustomMetaData(optionsArg) {
76
+ const data = await this.metadataFile.getJsonData();
77
+ return data[this.prefixCustomMetaData + optionsArg.key];
78
+ }
79
+ async deleteCustomMetaData(optionsArg) {
80
+ const data = await this.metadataFile.getJsonData();
81
+ delete data[this.prefixCustomMetaData + optionsArg.key];
82
+ await this.metadataFile.writeJsonData(data);
83
+ }
84
+ /**
85
+ * set a lock on the ref file
86
+ * @param optionsArg
87
+ */
88
+ async setLock(optionsArg) {
89
+ const data = await this.metadataFile.getJsonData();
90
+ data.lock = optionsArg.lock;
91
+ data.lockExpires = optionsArg.expires;
92
+ await this.metadataFile.writeJsonData(data);
93
+ }
94
+ /**
95
+ * remove the lock on the ref file
96
+ * @param optionsArg
97
+ */
98
+ async removeLock(optionsArg) {
99
+ const data = await this.metadataFile.getJsonData();
100
+ delete data.lock;
101
+ delete data.lockExpires;
102
+ await this.metadataFile.writeJsonData(data);
103
+ }
104
+ async checkLocked() {
105
+ const data = await this.metadataFile.getJsonData();
106
+ return data.lock && data.lockExpires > Date.now();
107
+ }
108
+ async getLockInfo() {
109
+ const data = await this.metadataFile.getJsonData();
110
+ return { lock: data.lock, expires: data.lockExpires };
111
+ }
112
+ }
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5tZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvY2xhc3Nlcy5tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekMsTUFBTSxPQUFPLFFBQVE7SUFDWixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUEwQjtRQUN4RCwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztnQkFDcEUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVc7YUFDekMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3hCLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUNkLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxJQUFJLEtBQUssVUFBVTtnQkFDMUIsS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLEtBQUssR0FBRyxDQUFDO1lBQzNDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7SUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUEwQjtRQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLFFBQVEsQ0FBQyxPQUFP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
@@ -0,0 +1,57 @@
1
+ import * as plugins from './plugins.js';
2
+ import { Bucket } from './classes.bucket.js';
3
+ import type { ISmartBucketReadinessOptions, TSmartBucketReadinessResult } from './interfaces.js';
4
+ export declare class SmartBucket {
5
+ config: plugins.tsclass.storage.IStorageDescriptor;
6
+ private currentStorageClient;
7
+ private ownedStorageClient;
8
+ private lifecycleState;
9
+ private lifecycleEpoch;
10
+ private activeReadinessControllers;
11
+ private retiredStorageClients;
12
+ private storageClientMutationInProgress;
13
+ private closePromise;
14
+ private operationCloseStarted;
15
+ private operationCloseSettlement;
16
+ /**
17
+ * The current S3 client used by bucket operations.
18
+ */
19
+ get storageClient(): plugins.s3.S3Client;
20
+ /**
21
+ * Changes the current S3 client without transferring lifecycle ownership.
22
+ */
23
+ set storageClient(storageClientArg: plugins.s3.S3Client);
24
+ /** @deprecated Use storageClient instead */
25
+ get s3Client(): plugins.s3.S3Client;
26
+ /**
27
+ * the constructor of SmartBucket
28
+ */
29
+ constructor(configArg: plugins.tsclass.storage.IStorageDescriptor, clientOptions?: {
30
+ forcePathStyle?: boolean;
31
+ });
32
+ createBucket(bucketNameArg: string): Promise<Bucket>;
33
+ removeBucket(bucketName: string): Promise<void>;
34
+ getBucketByName(bucketNameArg: string): Promise<Bucket>;
35
+ /**
36
+ * Check if a bucket exists
37
+ */
38
+ bucketExists(bucketNameArg: string): Promise<boolean>;
39
+ /**
40
+ * Transfers exclusive lifecycle ownership of an S3 client to this SmartBucket.
41
+ */
42
+ replaceStorageClient(storageClientArg: plugins.s3.S3Client): void;
43
+ /**
44
+ * Performs a bounded, read-only round trip to verify bucket readiness.
45
+ */
46
+ checkReadiness(bucketNameArg: string, optionsArg?: ISmartBucketReadinessOptions): Promise<TSmartBucketReadinessResult>;
47
+ /**
48
+ * Cancels active readiness and object operations before closing the owned S3 client.
49
+ */
50
+ close(): Promise<void>;
51
+ private isStorageClient;
52
+ private abortActiveReadinessProbes;
53
+ private sendReadinessProbe;
54
+ private getReadinessLifecycleReason;
55
+ private getStaleReadinessReason;
56
+ private createReadinessFailure;
57
+ }