@lossless.org/client 1.23.3 → 2.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 (41) hide show
  1. package/dist_ts/00_commitinfo_data.js +2 -2
  2. package/dist_ts/nosqldb/classes.persistence.d.ts +21 -1
  3. package/dist_ts/nosqldb/classes.persistence.js +23 -1
  4. package/dist_ts/nosqldb/classes.session.d.ts +8 -0
  5. package/dist_ts/nosqldb/classes.session.js +27 -2
  6. package/dist_ts/nosqldb/index.d.ts +1 -1
  7. package/dist_ts/nosqldb/index.js +2 -2
  8. package/dist_ts/objectstorage/classes.bucket.d.ts +11 -21
  9. package/dist_ts/objectstorage/classes.bucket.js +58 -29
  10. package/dist_ts/objectstorage/classes.connection.d.ts +2 -1
  11. package/dist_ts/objectstorage/classes.connection.js +3 -2
  12. package/dist_ts/objectstorage/classes.requestdeadlineerror.d.ts +11 -0
  13. package/dist_ts/objectstorage/classes.requestdeadlineerror.js +16 -0
  14. package/dist_ts/objectstorage/classes.smartbucket.d.ts +11 -2
  15. package/dist_ts/objectstorage/classes.smartbucket.js +20 -1
  16. package/dist_ts/objectstorage/helpers.d.ts +4 -0
  17. package/dist_ts/objectstorage/helpers.js +13 -1
  18. package/dist_ts/objectstorage/index.d.ts +1 -0
  19. package/dist_ts/objectstorage/index.js +2 -1
  20. package/dist_ts/objectstorage/interfaces.d.ts +49 -0
  21. package/dist_ts/objectstorage/internal.exactupload.capability.js +4 -2
  22. package/dist_ts/objectstorage/internal.requestbounds.d.ts +37 -0
  23. package/dist_ts/objectstorage/internal.requestbounds.js +154 -0
  24. package/dist_ts/objectstorage/plugins.d.ts +2 -1
  25. package/dist_ts/objectstorage/plugins.js +3 -2
  26. package/package.json +2 -2
  27. package/readme.md +7 -0
  28. package/ts/00_commitinfo_data.ts +1 -1
  29. package/ts/nosqldb/classes.persistence.ts +30 -1
  30. package/ts/nosqldb/classes.session.ts +26 -0
  31. package/ts/nosqldb/index.ts +1 -1
  32. package/ts/objectstorage/classes.bucket.ts +80 -56
  33. package/ts/objectstorage/classes.connection.ts +4 -2
  34. package/ts/objectstorage/classes.requestdeadlineerror.ts +16 -0
  35. package/ts/objectstorage/classes.smartbucket.ts +30 -1
  36. package/ts/objectstorage/helpers.ts +16 -0
  37. package/ts/objectstorage/index.ts +1 -0
  38. package/ts/objectstorage/interfaces.ts +58 -0
  39. package/ts/objectstorage/internal.exactupload.capability.ts +3 -1
  40. package/ts/objectstorage/internal.requestbounds.ts +192 -0
  41. package/ts/objectstorage/plugins.ts +2 -1
@@ -22,6 +22,18 @@ export const reducePathDescriptorToPath = async (pathDescriptorArg) => {
22
22
  }
23
23
  return returnPath;
24
24
  };
25
+ /**
26
+ * Validates a caller's cancellation signal: a genuine `AbortSignal`.
27
+ */
28
+ export const requireOptionalAbortSignal = (valueArg, labelArg) => {
29
+ if (valueArg === undefined) {
30
+ return undefined;
31
+ }
32
+ if (plugins.nodeUtil.types.isProxy(valueArg) || !(valueArg instanceof AbortSignal)) {
33
+ throw new TypeError(`${labelArg} must be an AbortSignal.`);
34
+ }
35
+ return valueArg;
36
+ };
25
37
  function coerceBooleanMaybe(value) {
26
38
  if (typeof value === 'boolean')
27
39
  return { value };
@@ -212,4 +224,4 @@ export function normalizeStorageDescriptor(input, logger) {
212
224
  warnings,
213
225
  };
214
226
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLEtBQUssRUFBRSxpQkFBNEMsRUFBbUIsRUFBRTtJQUNoSCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFDbkIsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGlCQUFpQixDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUNsRSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEcsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDdEMsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLFVBQVUsR0FBRyxVQUFVLENB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
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLEtBQUssRUFBRSxpQkFBNEMsRUFBbUIsRUFBRTtJQUNoSCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFDbkIsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGlCQUFpQixDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUNsRSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEcsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDdEMsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLFVBQVUsR0FBRyxVQUFVLENB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
@@ -3,6 +3,7 @@ export * from './classes.bucket.js';
3
3
  export * from './classes.exactuploaderror.js';
4
4
  export * from './classes.exactpathpurgeerror.js';
5
5
  export * from './classes.objectrangeerror.js';
6
+ export * from './classes.requestdeadlineerror.js';
6
7
  export * from './classes.directory.js';
7
8
  export * from './classes.file.js';
8
9
  export * from './classes.listcursor.js';
@@ -3,6 +3,7 @@ export * from './classes.bucket.js';
3
3
  export * from './classes.exactuploaderror.js';
4
4
  export * from './classes.exactpathpurgeerror.js';
5
5
  export * from './classes.objectrangeerror.js';
6
+ export * from './classes.requestdeadlineerror.js';
6
7
  export * from './classes.directory.js';
7
8
  export * from './classes.file.js';
8
9
  export * from './classes.listcursor.js';
@@ -11,4 +12,4 @@ export * from './classes.trash.js';
11
12
  export * from './classes.watcher.js';
12
13
  export * from './interfaces.js';
13
14
  export { ObjectStorageConnection } from './classes.connection.js';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9vYmplY3RzdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDIn0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9vYmplY3RzdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==
@@ -73,6 +73,22 @@ export interface IFastGetIfPresentOptions {
73
73
  export interface IFastStatOptions extends IPathDecriptor {
74
74
  signal?: AbortSignal;
75
75
  }
76
+ export interface IFastPutOptions extends IPathDecriptor {
77
+ contents: string | Buffer;
78
+ overwrite?: boolean;
79
+ signal?: AbortSignal;
80
+ }
81
+ export interface IFastMoveOptions {
82
+ sourcePath: string;
83
+ destinationPath: string;
84
+ targetBucket?: Bucket;
85
+ overwrite?: boolean;
86
+ signal?: AbortSignal;
87
+ }
88
+ export interface IListAllObjectsOptions {
89
+ /** Optional caller-owned cancellation signal */
90
+ signal?: AbortSignal;
91
+ }
76
92
  export interface IDirectoryFastPutStreamOptions {
77
93
  path: string;
78
94
  stream: Readable;
@@ -87,6 +103,39 @@ export interface IBucketRequestOptions {
87
103
  /** Optional caller-owned cancellation signal */
88
104
  signal?: AbortSignal;
89
105
  }
106
+ /**
107
+ * Bounds of every request sent by the storage client a SmartBucket builds.
108
+ * Each is a positive safe integer; an omitted one takes its default.
109
+ */
110
+ export interface IObjectStorageRequestOptions {
111
+ /** Time one attempt may take to connect its socket in milliseconds (default: 10000, maximum: 60000) */
112
+ connectionTimeoutMs?: number;
113
+ /**
114
+ * Time from the start of one attempt to its response headers in
115
+ * milliseconds, connecting and uploading the request body included
116
+ * (default: 60000, maximum: 3600000)
117
+ */
118
+ requestTimeoutMs?: number;
119
+ /** Attempts of one request, the first one included (default: 3, maximum: 10) */
120
+ maxAttempts?: number;
121
+ }
122
+ /**
123
+ * The effective bounds of the storage client a SmartBucket built.
124
+ */
125
+ export interface IObjectStorageRequestBounds {
126
+ readonly connectionTimeoutMs: number;
127
+ readonly requestTimeoutMs: number;
128
+ readonly maxAttempts: number;
129
+ /** The longest wait of the SDK before a retry */
130
+ readonly maxRetryDelayMs: number;
131
+ /**
132
+ * `maxAttempts * requestTimeoutMs + (maxAttempts - 1) * maxRetryDelayMs`
133
+ * plus 1000 ms for the client's own work around the attempts: the client
134
+ * destroys a request still unsettled after this time, retries included,
135
+ * and starts no further attempt of it
136
+ */
137
+ readonly requestDeadlineMs: number;
138
+ }
90
139
  /**
91
140
  * Options for a bounded, read-only bucket readiness check.
92
141
  */
@@ -1,4 +1,5 @@
1
1
  import * as plugins from './plugins.js';
2
+ import { requireOptionalAbortSignal } from './helpers.js';
2
3
  const lifecycleRecords = new WeakMap();
3
4
  const capabilityBindings = new WeakMap();
4
5
  const purgeCapabilityBindings = new WeakMap();
@@ -319,6 +320,7 @@ export const beginAccountOperation = (smartbucketRefArg, callerSignalArg) => {
319
320
  }, accountIdentity, callerSignalArg);
320
321
  };
321
322
  export const beginBasicBucketOperation = (bucketRefArg, callerSignalArg) => {
323
+ const callerSignal = requireOptionalAbortSignal(callerSignalArg, 'Object storage request signal');
322
324
  const smartbucketRef = bucketRefArg.smartbucketRef;
323
325
  const lifecycleRecord = getLifecycleRecord(smartbucketRef);
324
326
  const binding = {
@@ -328,7 +330,7 @@ export const beginBasicBucketOperation = (bucketRefArg, callerSignalArg) => {
328
330
  storageClient: lifecycleRecord.storageClient,
329
331
  lifecycleGeneration: lifecycleRecord.generation,
330
332
  };
331
- return beginOperation(binding, callerSignalArg);
333
+ return beginOperation(binding, callerSignal);
332
334
  };
333
335
  export const beginExactUploadProbeOperation = (bucketRefArg, callerSignalArg) => {
334
336
  const smartbucketRef = bucketRefArg.smartbucketRef;
@@ -408,4 +410,4 @@ export const beginExactPathPurgeCapabilityOperation = (bucketRefArg, capabilityA
408
410
  versioningMode: binding.versioningMode,
409
411
  };
410
412
  };
411
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQXFHeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFHakMsQ0FBQztBQUNKLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBR25DLENBQUM7QUFDSixNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUd4QyxDQUFDO0FBQ0osTUFBTSxpQ0FBaUMsR0FBRyxNQUFNLENBQUM7QUFDakQsTUFBTSxtQ0FBbUMsR0FBRyxLQUFLLENBQUM7QUFFbEQsTUFBTSw4QkFBOEIsR0FBRyxDQUNyQyxrQkFBOEMsRUFDOUMsUUFBaUIsRUFDWCxFQUFFO0lBQ1IsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25FLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxnRUFBZ0UsQ0FBQztBQUUvRixNQUFNLGtCQUFrQixHQUFHLENBQ3pCLGlCQUE0QyxFQUM1QyxrQkFBa0IsR0FBRyxxQkFBcUIsRUFDZCxFQUFFO0lBQzlCLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENB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
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFxRzFELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBR2pDLENBQUM7QUFDSixNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUduQyxDQUFDO0FBQ0osTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFHeEMsQ0FBQztBQUNKLE1BQU0saUNBQWlDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELE1BQU0sbUNBQW1DLEdBQUcsS0FBSyxDQUFDO0FBRWxELE1BQU0sOEJBQThCLEdBQUcsQ0FDckMsa0JBQThDLEVBQzlDLFFBQWlCLEVBQ1gsRUFBRTtJQUNSLEtBQUssTUFBTSxVQUFVLElBQUksa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNuRSxVQUFVLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsZ0VBQWdFLENBQUM7QUFFL0YsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixpQkFBNEMsRUFDNUMsa0JBQWtCLEdBQUcscUJBQXFCLEVBQ2QsRUFBRTtJQUM5QixNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsZUFBZSxFQUFFLENB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
@@ -0,0 +1,37 @@
1
+ import * as plugins from './plugins.js';
2
+ import type { IObjectStorageRequestBounds, IObjectStorageRequestOptions } from './interfaces.js';
3
+ /**
4
+ * Validates the request options of a storage client and derives its bounds.
5
+ */
6
+ export declare const resolveRequestBounds: (optionsArg: IObjectStorageRequestOptions) => IObjectStorageRequestBounds;
7
+ /**
8
+ * The S3 client configuration that applies the bounds to every attempt:
9
+ * `@smithy/node-http-handler` destroys an attempt whose socket does not
10
+ * connect within `connectionTimeout` and, with `throwOnRequestTimeout`, one
11
+ * whose response headers did not arrive within `requestTimeout` of its start.
12
+ * `maxAttempts` and the standard retry mode are set explicitly, so
13
+ * `AWS_MAX_ATTEMPTS`, `AWS_RETRY_MODE` and shared config files cannot change
14
+ * them.
15
+ */
16
+ export declare const createBoundedClientConfig: (boundsArg: IObjectStorageRequestBounds) => {
17
+ maxAttempts: number;
18
+ retryMode: string;
19
+ requestHandler: {
20
+ connectionTimeout: number;
21
+ requestTimeout: number;
22
+ throwOnRequestTimeout: true;
23
+ };
24
+ };
25
+ /**
26
+ * Bounds every `send()` of a storage client by `requestDeadlineMs`.
27
+ *
28
+ * Each request gets its own abort signal, which the caller's `abortSignal`
29
+ * and the deadline abort. The HTTP handler destroys the attempt in flight
30
+ * when it aborts, and refuses every later attempt of the request, so no
31
+ * attempt starts or sends after the deadline. The request rejects at the
32
+ * deadline with `ObjectStorageRequestDeadlineError`; the handler fails the
33
+ * aborted attempt with an `AbortError`, which the retry strategy never
34
+ * retries. A caller's abort still reaches a response body the request
35
+ * resolved with until that body closes.
36
+ */
37
+ export declare const bindRequestDeadline: (clientArg: plugins.s3.S3Client, boundsArg: IObjectStorageRequestBounds) => void;
@@ -0,0 +1,154 @@
1
+ import * as plugins from './plugins.js';
2
+ import { ObjectStorageRequestDeadlineError } from './classes.requestdeadlineerror.js';
3
+ const requestOptionLimits = {
4
+ connectionTimeoutMs: { defaultValue: 10_000, maximum: 60_000 },
5
+ requestTimeoutMs: { defaultValue: 60_000, maximum: 3_600_000 },
6
+ maxAttempts: { defaultValue: 3, maximum: 10 },
7
+ };
8
+ /**
9
+ * The longest wait of the SDK's standard retry strategy before a retry
10
+ * (`MAXIMUM_RETRY_DELAY` of `@smithy/core`, which caps a retry-after hint
11
+ * as well).
12
+ */
13
+ const maxRetryDelayMs = 20_000;
14
+ /**
15
+ * Time the deadline grants beyond the attempts and retry waits for the
16
+ * client's own work around them (serializing, signing, checksums), so an
17
+ * attempt's own timeout decides its failure and the deadline only ends a
18
+ * request the attempt bounds do not.
19
+ */
20
+ const requestDeadlineAllowanceMs = 1_000;
21
+ const requireRequestOption = (optionsArg, nameArg) => {
22
+ const value = optionsArg[nameArg];
23
+ const { defaultValue, maximum } = requestOptionLimits[nameArg];
24
+ if (value === undefined) {
25
+ return defaultValue;
26
+ }
27
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1 || value > maximum) {
28
+ throw new TypeError(`Object storage ${nameArg} must be a positive safe integer no greater than ${maximum}.`);
29
+ }
30
+ return value;
31
+ };
32
+ /**
33
+ * Validates the request options of a storage client and derives its bounds.
34
+ */
35
+ export const resolveRequestBounds = (optionsArg) => {
36
+ const connectionTimeoutMs = requireRequestOption(optionsArg, 'connectionTimeoutMs');
37
+ const requestTimeoutMs = requireRequestOption(optionsArg, 'requestTimeoutMs');
38
+ const maxAttempts = requireRequestOption(optionsArg, 'maxAttempts');
39
+ return Object.freeze({
40
+ connectionTimeoutMs,
41
+ requestTimeoutMs,
42
+ maxAttempts,
43
+ maxRetryDelayMs,
44
+ requestDeadlineMs: maxAttempts * requestTimeoutMs
45
+ + (maxAttempts - 1) * maxRetryDelayMs
46
+ + requestDeadlineAllowanceMs,
47
+ });
48
+ };
49
+ /**
50
+ * The S3 client configuration that applies the bounds to every attempt:
51
+ * `@smithy/node-http-handler` destroys an attempt whose socket does not
52
+ * connect within `connectionTimeout` and, with `throwOnRequestTimeout`, one
53
+ * whose response headers did not arrive within `requestTimeout` of its start.
54
+ * `maxAttempts` and the standard retry mode are set explicitly, so
55
+ * `AWS_MAX_ATTEMPTS`, `AWS_RETRY_MODE` and shared config files cannot change
56
+ * them.
57
+ */
58
+ export const createBoundedClientConfig = (boundsArg) => ({
59
+ maxAttempts: boundsArg.maxAttempts,
60
+ retryMode: 'standard',
61
+ requestHandler: {
62
+ connectionTimeout: boundsArg.connectionTimeoutMs,
63
+ requestTimeout: boundsArg.requestTimeoutMs,
64
+ throwOnRequestTimeout: true,
65
+ },
66
+ });
67
+ const readStreamingBody = (outputArg) => {
68
+ if (typeof outputArg !== 'object' || outputArg === null) {
69
+ return undefined;
70
+ }
71
+ const body = outputArg.Body;
72
+ return body instanceof plugins.stream.Readable ? body : undefined;
73
+ };
74
+ /**
75
+ * Bounds every `send()` of a storage client by `requestDeadlineMs`.
76
+ *
77
+ * Each request gets its own abort signal, which the caller's `abortSignal`
78
+ * and the deadline abort. The HTTP handler destroys the attempt in flight
79
+ * when it aborts, and refuses every later attempt of the request, so no
80
+ * attempt starts or sends after the deadline. The request rejects at the
81
+ * deadline with `ObjectStorageRequestDeadlineError`; the handler fails the
82
+ * aborted attempt with an `AbortError`, which the retry strategy never
83
+ * retries. A caller's abort still reaches a response body the request
84
+ * resolved with until that body closes.
85
+ */
86
+ export const bindRequestDeadline = (clientArg, boundsArg) => {
87
+ const sendWithoutDeadline = clientArg.send.bind(clientArg);
88
+ const sendWithinDeadline = (commandArg, optionsArg) => new Promise((resolve, reject) => {
89
+ const callerSignal = optionsArg?.abortSignal;
90
+ const requestAbortController = new AbortController();
91
+ const forwardCallerAbort = () => {
92
+ requestAbortController.abort(callerSignal?.reason);
93
+ };
94
+ const releaseCallerSignal = () => {
95
+ callerSignal?.removeEventListener('abort', forwardCallerAbort);
96
+ };
97
+ if (callerSignal?.aborted) {
98
+ forwardCallerAbort();
99
+ }
100
+ else {
101
+ callerSignal?.addEventListener('abort', forwardCallerAbort, { once: true });
102
+ }
103
+ let settled = false;
104
+ const deadlineTimer = setTimeout(() => {
105
+ settled = true;
106
+ const deadlineError = new ObjectStorageRequestDeadlineError(boundsArg.requestDeadlineMs);
107
+ requestAbortController.abort(deadlineError);
108
+ reject(deadlineError);
109
+ }, boundsArg.requestDeadlineMs);
110
+ sendWithoutDeadline(commandArg, {
111
+ ...optionsArg,
112
+ abortSignal: requestAbortController.signal,
113
+ }).then((outputArg) => {
114
+ clearTimeout(deadlineTimer);
115
+ const body = readStreamingBody(outputArg);
116
+ if (settled) {
117
+ releaseCallerSignal();
118
+ body?.destroy();
119
+ return;
120
+ }
121
+ settled = true;
122
+ if (body && !body.destroyed) {
123
+ body.once('close', releaseCallerSignal);
124
+ }
125
+ else {
126
+ releaseCallerSignal();
127
+ }
128
+ resolve(outputArg);
129
+ }, (errorArg) => {
130
+ clearTimeout(deadlineTimer);
131
+ releaseCallerSignal();
132
+ if (settled) {
133
+ return;
134
+ }
135
+ settled = true;
136
+ reject(errorArg);
137
+ });
138
+ });
139
+ const boundedSend = (commandArg, optionsOrCallbackArg, callbackArg) => {
140
+ const callback = typeof optionsOrCallbackArg === 'function' ? optionsOrCallbackArg : callbackArg;
141
+ const options = typeof optionsOrCallbackArg === 'function' ? undefined : optionsOrCallbackArg;
142
+ const result = sendWithinDeadline(commandArg, options);
143
+ if (typeof callback !== 'function') {
144
+ return result;
145
+ }
146
+ // As the SDK's own callback form: a callback that throws must not become
147
+ // an unhandled rejection.
148
+ result.then((outputArg) => callback(null, outputArg), (errorArg) => callback(errorArg)).catch(() => { });
149
+ };
150
+ // S3Client.send() is generic over the SDK's Command type, which the
151
+ // optional peer does not export; the bounded send keeps its signature.
152
+ clientArg.send = boundedSend;
153
+ };
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwucmVxdWVzdGJvdW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwucmVxdWVzdGJvdW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQU10RixNQUFNLG1CQUFtQixHQUFHO0lBQzFCLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQzlELGdCQUFnQixFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO0lBQzlELFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtDQUNyQyxDQUFDO0FBRVg7Ozs7R0FJRztBQUNILE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQjs7Ozs7R0FLRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0FBSXpDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDM0IsVUFBd0MsRUFDeEMsT0FBMkIsRUFDbkIsRUFBRTtJQUNWLE1BQU0sS0FBSyxHQUFZLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxFQUFFLENBQUM7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
@@ -1,7 +1,8 @@
1
1
  import * as crypto from 'node:crypto';
2
2
  import * as path from 'node:path';
3
3
  import * as stream from 'node:stream';
4
- export { crypto, path, stream };
4
+ import * as nodeUtil from 'node:util';
5
+ export { crypto, nodeUtil, path, stream };
5
6
  import * as smartmime from '@push.rocks/smartmime';
6
7
  import * as smartpath from '@push.rocks/smartpath';
7
8
  import * as smartpromise from '@push.rocks/smartpromise';
@@ -3,7 +3,8 @@
3
3
  import * as crypto from 'node:crypto';
4
4
  import * as path from 'node:path';
5
5
  import * as stream from 'node:stream';
6
- export { crypto, path, stream };
6
+ import * as nodeUtil from 'node:util';
7
+ export { crypto, nodeUtil, path, stream };
7
8
  // @push.rocks scope
8
9
  import * as smartmime from '@push.rocks/smartmime';
9
10
  import * as smartpath from '@push.rocks/smartpath';
@@ -20,4 +21,4 @@ export { tsclass, };
20
21
  import * as s3 from '@aws-sdk/client-s3';
21
22
  import { Minimatch } from 'minimatch';
22
23
  export { s3, Minimatch, };
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhO0FBRWIsY0FBYztBQUNkLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBRWhDLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUU5RixXQUFXO0FBQ1gsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQ0wsT0FBTyxHQUNSLENBQUE7QUFFRCxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFDTCxFQUFFLEVBQ0YsU0FBUyxHQUNWLENBQUEifQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhO0FBRWIsY0FBYztBQUNkLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUUxQyxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFFOUYsV0FBVztBQUNYLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUNMLE9BQU8sR0FDUixDQUFBO0FBRUQsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsRUFBRSxFQUNGLFNBQVMsR0FDVixDQUFBIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lossless.org/client",
3
- "version": "1.23.3",
3
+ "version": "2.1.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "registry": "https://verdaccio.lossless.digital"
@@ -86,7 +86,7 @@
86
86
  "@git.zone/tsbuild": "6.0.2",
87
87
  "@git.zone/tsbundle": "3.2.1",
88
88
  "@git.zone/tsrun": "3.0.3",
89
- "@git.zone/tstest": "7.2.0",
89
+ "@git.zone/tstest": "7.2.1",
90
90
  "@lossless.org/nosqldb": "8.0.2",
91
91
  "@lossless.org/nosqldb-qualified": "npm:@lossless.org/nosqldb@10.9.0",
92
92
  "@lossless.org/objectstorage": "10.3.1",
package/readme.md CHANGED
@@ -113,6 +113,7 @@ Family imports preserve the established SmartData and SmartBucket names and cons
113
113
  | Client deadlines | `timeoutMS` (1..120000) on every ordinary model read and write, instance `save()`/`saveIf()`/`delete()` included, on every exact call, and `session.withTransaction(callback, { timeoutMS })` for a whole transaction, retries and commit included; expiry rejects with `SmartdataPersistenceError` code `timeout`, and an exact write interrupted in flight with `ambiguous_write` |
114
114
  | Bounded database close | `db.close({ timeoutMs })` bounds the whole close — session cleanup, the optional database removal and the driver client's close — and rejects at its deadline with `SmartdataPersistenceError` code `timeout`, leaving the database `close_failed`; the driver's close keeps running until it settles on its own, and the next `close()` joins it |
115
115
  | Transactions ended by close | a `session.withTransaction()` whose session `db.close()` ends while it runs rejects with `SmartdataPersistenceError` code `unsupported_operation` — "nothing was committed" before the commit, "the commit outcome is unknown" during it — instead of resolving with the callback's result |
116
+ | Transaction conflicts | a `session.withTransaction()` whose every attempt the database aborted as transient (a write conflict or another error labelled `TransientTransactionError`) until the driver's 120-second retry window closed rejects with `SmartdataTransactionConflictError` (a `SmartdataPersistenceError` of code `transaction_conflict`) carrying `attempts`, `elapsedMS` and the last attempt's error as `cause`: nothing was committed and the transaction is safe to re-run. With `timeoutMS` it rejects with `timeout` instead. Ordinary model writes that run in their own transaction reject the same way |
116
117
  | Transaction commit outcome | `SmartdataSession.getCommitOutcome(error)` states for every value a `session.withTransaction()` rejected with whether the transaction could have committed: `not_committed` (nothing was committed) or `unknown` (a commit was sent and never confirmed); the rejection itself keeps its identity |
117
118
  | Cancellation | `signal` on every exact call, `atomicDeleteMany()` and `session.withTransaction(callback, { signal })`, which interrupts the session's operation in flight, rolls the attempt back and never commits after an abort |
118
119
  | Nested array paths | `@svDb({ arrayPaths: [...] })` declares nested arrays below a persisted root; `$push`, `$addToSet` and `$pull` in `atomicUpdate()`, `atomicUpdateMany()`, `atomicFindOneAndUpdate()` and `atomicUpsertMany()` accept them, while undeclared and non-array nested paths stay refused with `invalid_argument` |
@@ -137,6 +138,8 @@ Family imports preserve the established SmartData and SmartBucket names and cons
137
138
  | Bucket lookup for bucket-scoped credentials | `smartBucket.getBucketByName(name, { signal? })` and `smartBucket.bucketExists(name, { signal? })` send one HeadBucket; `createBucket(name, { signal? })` and `removeBucket(name, { signal? })` take the same options |
138
139
  | Byte-range downloads | `bucket.fastGetRangeStream({ path, range: { start, end? }, signal? }, typeArg?)` — one ranged GetObject resolving `{ stream, range, size }`; range failures reject with `ObjectRangeError` code `invalid_argument`, `range_not_satisfiable` or `invalid_response` |
139
140
  | Reads of objects that may be missing | `bucket.fastGetIfPresent({ path, signal? })` — one GetObject resolving the object's bytes, or `null` when the key does not exist |
141
+ | Bounded requests | `new SmartBucket(config, { connectionTimeoutMs?, requestTimeoutMs?, maxAttempts? })` and the same options on `new ObjectStorageConnection({ ... })` — every request of the client a SmartBucket builds ends within `smartBucket.requestBounds.requestDeadlineMs`, retries included, or rejects with `ObjectStorageRequestDeadlineError` |
142
+ | Signals on writes, moves and listings | `bucket.fastPut({ ..., signal? })`, `bucket.fastMove({ ..., signal? })`, `bucket.listObjectKeysPage({ ..., signal? })`, `bucket.listAllObjects(prefix?, { signal? })` and `bucket.listAllObjectsArray(prefix?, { signal? })`; `fastGet`, `fastPutStream`, `fastCopy` and `fastRemove` already took one |
140
143
 
141
144
  A bucket lookup sends one HeadBucket for the named bucket, never ListBuckets, so a credential scoped to its bucket can open it without the account-wide list permission, and a lookup does not depend on which buckets a listing returns. A missing bucket (404) keeps its answer: `getBucketByName()` rejects with `Bucket '<name>' not found.` and `bucketExists()` resolves `false`. A bucket the credentials may not access (403) rejects both with an error that names the denial and keeps the provider error as `cause`; S3 does not say whether such a bucket exists. Any other provider failure is rethrown unchanged. `signal` aborts the in-flight request and rejects with the signal's reason. Lookups, creations and removals run as lifecycle-managed operations: `SmartBucket.close()` aborts and awaits them, and the storage client cannot be replaced while one is active.
142
145
 
@@ -146,6 +149,10 @@ A bucket lookup sends one HeadBucket for the named bucket, never ListBuckets, so
146
149
 
147
150
  `fastGetIfPresent()` answers "read it, or tell me it is gone" with one GetObject, so an object removed between an existence check and a read can no longer turn into a failed read: a provider answer that the key does not exist — `NoSuchKey`, `NotFound` or any other HTTP 404 — resolves `null`. Every other failure rejects as `fastGet()` does, the provider error unchanged: a missing bucket (`NoSuchBucket`), a denied request, a failure while the body streams, and an abort through `signal` or `SmartBucket.close()`, which rejects with the abort reason even when the provider answers not-found after it. `fastExists()` and the create-only check of `fastPutStream()` classify a missing object the same way.
148
151
 
152
+ Every request of the S3 client a `SmartBucket` builds is bounded. An attempt whose socket does not connect within `connectionTimeoutMs` (default 10 s, at most 60 s), or whose response headers do not arrive within `requestTimeoutMs` of its start (default 60 s, at most 1 h; the upload of the request body counts), fails with the SDK's `TimeoutError`; the SDK retries it up to `maxAttempts` attempts in all (default 3, at most 10, standard retry mode, `AWS_MAX_ATTEMPTS` and shared config files ignored). Each value must be a positive safe integer; anything else is refused with a `TypeError` before a client is built. `smartBucket.requestBounds` (and `connection.requestBounds`) reads the frozen bounds, including `requestDeadlineMs = maxAttempts × requestTimeoutMs + (maxAttempts − 1) × 20 000 ms + 1 000 ms` — the attempts, the longest wait the retry strategy takes before a retry (a provider's retry-after hint included), and a second for the client's own work. 221 000 ms with the defaults. A request still unsettled at that deadline, a stalled error body included, rejects with `ObjectStorageRequestDeadlineError`, its attempt in flight is destroyed and no further attempt of it starts, so a consumer can hold the client to an upper bound of its own (`requestDeadlineMs < bound`). The bound does not undo a request: a PutObject the provider received completely before the deadline or an abort may still take effect. It covers requests, not the time a caller takes to read a download it received: a response body streams at the caller's pace until it is consumed, the caller's signal aborts or the SmartBucket closes. While a client assigned through `storageClient` or `replaceStorageClient()` is in use, `requestBounds` is `undefined` and that client's own configuration applies. A single-request upload (`fastPut`, `fastPutStream`) must finish sending its body within `requestTimeoutMs`; for large objects raise it or use `fastPutStreamExact()`, whose parts are separate requests of 5 MiB each.
153
+
154
+ A `signal` aborts the request in flight, stops its retries and rejects with the signal's reason; an already aborted signal sends nothing. A signal of a bucket read, write, copy, move, removal, existence check or listing that is not an `AbortSignal`, a `Proxy` of one included, is refused with a `TypeError` before any request. A per-call time limit is a signal as well, `AbortSignal.timeout(ms)` or an own `AbortController`.
155
+
149
156
  ### Document APIs that need a MongoDB backend
150
157
 
151
158
  The document model runs on both NoSQLDB and MongoDB, but several APIs do not mean the same thing on both. The NoSQLDB engine is qualified at 8.0.2 and 10.9.0 (see [Verification](#verification)); the two releases part on the grouped-totals and guarded-`$expr` rows below — 10.9.0 groups composite keys exactly and evaluates the guard, 8.0.2 does neither — on whether a migration can create a partial index or a collection validator at all, on when a transaction learns of a write conflict, and on whether `$elemMatch` applies query operators to scalar array elements.
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/client',
6
- version: '1.23.3',
6
+ version: '2.1.0',
7
7
  description: 'One typed client for NoSQLDB, MongoDB, SQLDB, MariaDB, ClickHouse and S3 object storage.'
8
8
  }
@@ -7,7 +7,8 @@ export type TSmartdataPersistenceErrorCode =
7
7
  | 'unique_conflict'
8
8
  | 'ambiguous_write'
9
9
  | 'unsupported_operation'
10
- | 'timeout';
10
+ | 'timeout'
11
+ | 'transaction_conflict';
11
12
 
12
13
  /**
13
14
  * Stable errors for ordinary SmartData model configuration and persistence.
@@ -28,6 +29,34 @@ export class SmartdataPersistenceError extends Error {
28
29
  }
29
30
  }
30
31
 
32
+ /**
33
+ * `session.withTransaction()` gave up because every attempt of the transaction
34
+ * was aborted as transient: a write conflict or another error the database
35
+ * labelled `TransientTransactionError`, through the driver's whole retry
36
+ * window. Nothing was committed, so the transaction is safe to re-run. The
37
+ * last attempt's error is the `cause` and tells which error it was; like every
38
+ * driver error it can contain statement data. A transaction with `timeoutMS`
39
+ * rejects with code `timeout` instead once its deadline expires.
40
+ */
41
+ export class SmartdataTransactionConflictError extends SmartdataPersistenceError {
42
+ /** How many times the callback ran. */
43
+ public readonly attempts: number;
44
+ /** Milliseconds from the start of `withTransaction()` until it gave up. */
45
+ public readonly elapsedMS: number;
46
+
47
+ constructor(optionsArg: { attempts: number; elapsedMS: number; cause: unknown }) {
48
+ super(
49
+ 'transaction_conflict',
50
+ `SmartData transaction gave up after ${optionsArg.attempts} attempts in ${optionsArg.elapsedMS} ms: `
51
+ + 'every attempt was aborted as transient; nothing was committed.',
52
+ { cause: optionsArg.cause },
53
+ );
54
+ this.name = 'SmartdataTransactionConflictError';
55
+ this.attempts = optionsArg.attempts;
56
+ this.elapsedMS = optionsArg.elapsedMS;
57
+ }
58
+ }
59
+
31
60
  /**
32
61
  * The client-side deadline of a model call or transaction expired. The
33
62
  * driver's own `MongoOperationTimeoutError` stays available as `cause` when