@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,389 @@
1
+ import type { Readable } from 'node:stream';
2
+
3
+ import type { Bucket } from './classes.bucket.js';
4
+ import type { Directory } from './classes.directory.js';
5
+
6
+ export interface IPathDecriptor {
7
+ path?: string;
8
+ directory?: Directory;
9
+ }
10
+
11
+ export interface IFastGetStreamOptions {
12
+ path: string;
13
+ signal?: AbortSignal;
14
+ }
15
+
16
+ export interface IFastPutStreamOptions {
17
+ path: string;
18
+ readableStream: Readable | ReadableStream;
19
+ contentLength?: number;
20
+ nativeMetadata?: Record<string, string>;
21
+ overwrite?: boolean;
22
+ signal?: AbortSignal;
23
+ }
24
+
25
+ export interface IFastCopyOptions {
26
+ sourcePath: string;
27
+ destinationPath?: string;
28
+ targetBucket?: Bucket;
29
+ nativeMetadata?: Record<string, string>;
30
+ deleteExistingNativeMetadata?: boolean;
31
+ signal?: AbortSignal;
32
+ }
33
+
34
+ export interface IFastRemoveOptions {
35
+ path: string;
36
+ signal?: AbortSignal;
37
+ }
38
+
39
+ export interface IFastExistsOptions {
40
+ path: string;
41
+ signal?: AbortSignal;
42
+ }
43
+
44
+ export interface IFastStatOptions extends IPathDecriptor {
45
+ signal?: AbortSignal;
46
+ }
47
+
48
+ export interface IDirectoryFastPutStreamOptions {
49
+ path: string;
50
+ stream: Readable;
51
+ contentLength?: number;
52
+ signal?: AbortSignal;
53
+ }
54
+
55
+ // ================================
56
+ // SmartBucket Readiness Interfaces
57
+ // ================================
58
+
59
+ /**
60
+ * Options for a bounded, read-only bucket readiness check.
61
+ */
62
+ export interface ISmartBucketReadinessOptions {
63
+ /** Probe deadline in milliseconds (default: 2000, maximum: 30000) */
64
+ timeoutMs?: number;
65
+ /** Optional caller-owned cancellation signal */
66
+ signal?: AbortSignal;
67
+ }
68
+
69
+ /**
70
+ * Sanitized reasons why a SmartBucket readiness probe is unavailable.
71
+ */
72
+ export type TSmartBucketReadinessFailureReason =
73
+ | 'closing'
74
+ | 'closed'
75
+ | 'aborted'
76
+ | 'timeout'
77
+ | 'unavailable';
78
+
79
+ /**
80
+ * Discriminated result returned by SmartBucket.checkReadiness().
81
+ */
82
+ export type TSmartBucketReadinessResult =
83
+ | {
84
+ ready: true;
85
+ status: 'ready';
86
+ durationMs: number;
87
+ }
88
+ | {
89
+ ready: false;
90
+ status: 'unavailable';
91
+ reason: TSmartBucketReadinessFailureReason;
92
+ durationMs: number;
93
+ };
94
+
95
+ // =====================================
96
+ // Exact Streaming Upload Interfaces
97
+ // =====================================
98
+
99
+ declare const exactUploadCapabilityBrand: unique symbol;
100
+
101
+ /**
102
+ * Opaque proof that the current bucket provider enforces the conditional
103
+ * operations required by Bucket.fastPutStreamExact().
104
+ *
105
+ * Capabilities can only be minted by Bucket.probeExactUploadCapability().
106
+ * They are bound to one exact Bucket object and its current SmartBucket,
107
+ * bucket name, S3 client, and lifecycle generation.
108
+ */
109
+ export interface IExactUploadCapability {
110
+ readonly [exactUploadCapabilityBrand]: 'smartbucket-exact-upload-v1';
111
+ }
112
+
113
+ export interface IExactUploadCapabilityProbeOptions {
114
+ /** Optional caller-owned cancellation signal */
115
+ signal?: AbortSignal;
116
+ }
117
+
118
+ export type TExactUploadCapabilityProbeFailureReason =
119
+ | 'aborted'
120
+ | 'conditional-put-not-enforced'
121
+ | 'conditional-complete-not-enforced'
122
+ | 'cleanup-failed'
123
+ | 'unavailable';
124
+
125
+ export type TExactUploadCapabilityProbeResult =
126
+ | {
127
+ supported: true;
128
+ capability: IExactUploadCapability;
129
+ }
130
+ | {
131
+ supported: false;
132
+ reason: TExactUploadCapabilityProbeFailureReason;
133
+ cause?: unknown;
134
+ };
135
+
136
+ export interface IExactUploadResult {
137
+ destinationPath: string;
138
+ contentLength: number;
139
+ etag: string;
140
+ versionId?: string;
141
+ partCount: number;
142
+ peakBufferedBytes: number;
143
+ maximumBufferedBytes: number;
144
+ }
145
+
146
+ export interface IExactUploadNativeObjectProperties {
147
+ contentType?: string;
148
+ }
149
+
150
+ export interface IFastPutStreamExactOptions {
151
+ capability: IExactUploadCapability;
152
+ path: string;
153
+ /**
154
+ * Every emitted chunk must be no larger than the effective multipart part
155
+ * size (5 MiB by default).
156
+ */
157
+ readableStream: Readable | ReadableStream<Uint8Array>;
158
+ contentLength: number;
159
+ nativeMetadata?: Record<string, string>;
160
+ /**
161
+ * Native S3 object properties that must retain their semantic header
162
+ * identity instead of being encoded as x-amz-meta-* user metadata.
163
+ */
164
+ nativeObjectProperties?: IExactUploadNativeObjectProperties;
165
+ requestedPartSize?: number;
166
+ requestedConcurrency?: number;
167
+ /** Failure teardown wait before non-cooperative callbacks detach (max 30000). */
168
+ failureSettlementTimeoutMs?: number;
169
+ signal?: AbortSignal;
170
+ }
171
+
172
+ export type TExactUploadFailurePhase =
173
+ | 'capability'
174
+ | 'source'
175
+ | 'put-zero'
176
+ | 'create-multipart'
177
+ | 'upload-part'
178
+ | 'complete-multipart';
179
+
180
+ export type TExactUploadMultipartCleanup =
181
+ | {
182
+ status: 'not-required';
183
+ }
184
+ | {
185
+ status: 'aborted';
186
+ }
187
+ | {
188
+ /**
189
+ * The provider reports that the multipart upload no longer exists. This
190
+ * does not prove whether an ambiguous completion published the object.
191
+ */
192
+ status: 'absent';
193
+ }
194
+ | {
195
+ status: 'abort-failed';
196
+ cause: unknown;
197
+ }
198
+ | {
199
+ /**
200
+ * One or more provider requests ignored cancellation. Multipart cleanup
201
+ * is deferred until those requests settle and remains unverified in this
202
+ * caller-visible result.
203
+ */
204
+ status: 'deferred';
205
+ };
206
+
207
+ export interface IExactUploadFailureState {
208
+ phase: TExactUploadFailurePhase;
209
+ destinationPath: string;
210
+ expectedContentLength: number;
211
+ /**
212
+ * Whether this operation can prove that it did not publish the destination.
213
+ * A conditional PutObject or CompleteMultipartUpload response can be lost
214
+ * after the provider has committed the object, so those failures are
215
+ * intentionally reported as ambiguous.
216
+ */
217
+ destinationPublication: 'not-published' | 'ambiguous';
218
+ multipartUploadId?: string;
219
+ multipartCleanup: TExactUploadMultipartCleanup;
220
+ }
221
+
222
+ // =================================
223
+ // Exact Path Purge Interfaces
224
+ // =================================
225
+
226
+ declare const exactPathPurgeCapabilityBrand: unique symbol;
227
+
228
+ export type TExactPathPurgeVersioningMode =
229
+ | 'unversioned'
230
+ | 'enabled'
231
+ | 'suspended';
232
+
233
+ /**
234
+ * Opaque proof that the current provider supports the exact conditional-delete
235
+ * and version-aware cleanup semantics required by Bucket.purgeExactPath().
236
+ */
237
+ export interface IExactPathPurgeCapability {
238
+ readonly [exactPathPurgeCapabilityBrand]: 'smartbucket-exact-path-purge-v1';
239
+ }
240
+
241
+ export interface IExactPathPurgeCapabilityProbeOptions {
242
+ /** Probe deadline in milliseconds (default: 30000, maximum: 30000) */
243
+ timeoutMs?: number;
244
+ signal?: AbortSignal;
245
+ }
246
+
247
+ export type TExactPathPurgeCapabilityProbeFailureReason =
248
+ | 'aborted'
249
+ | 'timeout'
250
+ | 'conditional-delete-not-enforced'
251
+ | 'cleanup-failed'
252
+ | 'versioning-mode-changed'
253
+ | 'unavailable';
254
+
255
+ export type TExactPathPurgeCapabilityProbeResult =
256
+ | {
257
+ supported: true;
258
+ capability: IExactPathPurgeCapability;
259
+ versioningMode: TExactPathPurgeVersioningMode;
260
+ }
261
+ | {
262
+ supported: false;
263
+ reason: TExactPathPurgeCapabilityProbeFailureReason;
264
+ cause?: unknown;
265
+ };
266
+
267
+ export interface IExactPathPurgeCounts {
268
+ unversionedObjects: number;
269
+ versions: number;
270
+ nullVersions: number;
271
+ deleteMarkers: number;
272
+ }
273
+
274
+ export interface IExactPathPurgeEvidence {
275
+ initialCounts: IExactPathPurgeCounts;
276
+ remainingCounts: IExactPathPurgeCounts;
277
+ initialFingerprint?: string;
278
+ remainingFingerprint?: string;
279
+ inventoryScansCompleted: number;
280
+ verificationScansCompleted: number;
281
+ pagesScanned: number;
282
+ neighborEntriesObserved: number;
283
+ deleteRequestsAttempted: number;
284
+ deleteRequestsAcknowledged: number;
285
+ verifiedAt?: string;
286
+ }
287
+
288
+ export interface IExactPathPurgeOptions {
289
+ capability: IExactPathPurgeCapability;
290
+ path: string;
291
+ /** Primary operation deadline (default: 30000, maximum: 300000) */
292
+ timeoutMs?: number;
293
+ signal?: AbortSignal;
294
+ }
295
+
296
+ export interface IExactPathPurgeResult {
297
+ destinationPath: string;
298
+ status: 'purged' | 'already-absent';
299
+ versioningMode: TExactPathPurgeVersioningMode;
300
+ purgedCounts: IExactPathPurgeCounts;
301
+ evidence: IExactPathPurgeEvidence;
302
+ }
303
+
304
+ export type TExactPathPurgeFailurePhase =
305
+ | 'capability'
306
+ | 'inventory'
307
+ | 'consistency'
308
+ | 'delete'
309
+ | 'verification';
310
+
311
+ export type TExactPathPurgeFailureReason =
312
+ | 'aborted'
313
+ | 'timeout'
314
+ | 'malformed-provider-response'
315
+ | 'inventory-limit-exceeded'
316
+ | 'concurrent-recreation'
317
+ | 'delete-unverified'
318
+ | 'verification-ambiguous'
319
+ | 'versioning-mode-changed'
320
+ | 'unavailable';
321
+
322
+ export interface IExactPathPurgeFailureState {
323
+ phase: TExactPathPurgeFailurePhase;
324
+ reason: TExactPathPurgeFailureReason;
325
+ destinationPath: string;
326
+ versioningMode?: TExactPathPurgeVersioningMode;
327
+ evidence: IExactPathPurgeEvidence;
328
+ }
329
+
330
+ // ================================
331
+ // Bucket Watcher Interfaces
332
+ // ================================
333
+
334
+ /**
335
+ * Internal state tracking for a storage object
336
+ */
337
+ export interface IStorageObjectState {
338
+ key: string;
339
+ etag: string;
340
+ size: number;
341
+ lastModified: Date;
342
+ }
343
+
344
+ /**
345
+ * Change event emitted by BucketWatcher
346
+ */
347
+ export interface IStorageChangeEvent {
348
+ type: 'add' | 'modify' | 'delete';
349
+ key: string;
350
+ size?: number;
351
+ etag?: string;
352
+ lastModified?: Date;
353
+ bucket: string;
354
+ }
355
+
356
+ /**
357
+ * Watcher mode - 'poll' is the default, 'websocket' reserved for future implementation
358
+ */
359
+ export type TBucketWatcherMode = 'poll' | 'websocket';
360
+
361
+ /**
362
+ * Options for creating a BucketWatcher
363
+ */
364
+ export interface IBucketWatcherOptions {
365
+ /** Watcher mode: 'poll' (default) or 'websocket' (future) */
366
+ mode?: TBucketWatcherMode;
367
+ /** Prefix to filter objects (default: '' for all objects) */
368
+ prefix?: string;
369
+ /** Polling interval in milliseconds (default: 5000, poll mode only) */
370
+ pollIntervalMs?: number;
371
+ /** Optional RxJS buffering time in milliseconds */
372
+ bufferTimeMs?: number;
373
+ /** Emit initial state as 'add' events (default: false) */
374
+ includeInitial?: boolean;
375
+ /** Page size for listing operations (default: 1000) */
376
+ pageSize?: number;
377
+ // Future websocket options will be added here
378
+ // websocketUrl?: string;
379
+ }
380
+
381
+ // ================================
382
+ // Deprecated aliases
383
+ // ================================
384
+
385
+ /** @deprecated Use IStorageObjectState instead */
386
+ export type IS3ObjectState = IStorageObjectState;
387
+
388
+ /** @deprecated Use IStorageChangeEvent instead */
389
+ export type IS3ChangeEvent = IStorageChangeEvent;