@lossless.org/client 2.4.1 → 2.6.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.
@@ -1,6 +1,6 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { ExactUploadError } from './classes.exactuploaderror.js';
3
- import { beginExactUploadCapabilityOperation, beginExactUploadProbeOperation, mintExactUploadCapability, } from './internal.exactupload.capability.js';
3
+ import { beginBasicBucketOperation, beginExactUploadCapabilityOperation, beginExactUploadProbeOperation, mintExactUploadCapability, } from './internal.exactupload.capability.js';
4
4
  import { planBoundedMultipartUpload, planMultipartUpload, } from './internal.multipart.planner.js';
5
5
  import { consumeExactMultipartStream, MultipartStreamConsumptionError, } from './internal.multipart.stream.js';
6
6
  class ExactUploadProbeSemanticError extends Error {
@@ -812,7 +812,28 @@ const planExactUpload = (optionsArg) => {
812
812
  },
813
813
  };
814
814
  };
815
- const sendConditionalZeroPut = (operationArg, optionsArg, contentTypeArg, onAttemptArg) => {
815
+ /**
816
+ * Reads the destination mode: create-only with a capability, or replace with
817
+ * `overwrite: true`. Exactly one of the two must be given.
818
+ */
819
+ const resolveDestinationMode = (optionsArg) => {
820
+ if (optionsArg.overwrite !== undefined
821
+ && typeof optionsArg.overwrite !== 'boolean') {
822
+ throw new TypeError('overwrite must be a boolean.');
823
+ }
824
+ const replace = optionsArg.overwrite === true;
825
+ if (replace === (optionsArg.capability !== undefined)) {
826
+ throw new TypeError('Exactly one of capability and overwrite: true must be given.');
827
+ }
828
+ return optionsArg.capability === undefined
829
+ ? { replace: true }
830
+ : { replace: false, capability: optionsArg.capability };
831
+ };
832
+ /**
833
+ * Sends the PutObject of an empty source, create-only with
834
+ * `If-None-Match: *` unless the upload replaces.
835
+ */
836
+ const sendZeroPut = (operationArg, optionsArg, contentTypeArg, replaceArg, onAttemptArg) => {
816
837
  return sendOperationCommand(operationArg, (signalArg) => {
817
838
  onAttemptArg();
818
839
  return operationArg.client.send(new plugins.s3.PutObjectCommand({
@@ -822,7 +843,7 @@ const sendConditionalZeroPut = (operationArg, optionsArg, contentTypeArg, onAtte
822
843
  ContentLength: 0,
823
844
  Metadata: optionsArg.nativeMetadata,
824
845
  ContentType: contentTypeArg,
825
- IfNoneMatch: '*',
846
+ ...(replaceArg ? {} : { IfNoneMatch: '*' }),
826
847
  }), {
827
848
  abortSignal: signalArg,
828
849
  });
@@ -832,22 +853,34 @@ export const fastPutStreamExact = async (bucketRefArg, optionsArg) => {
832
853
  if (typeof optionsArg.path !== 'string' || optionsArg.path.length === 0) {
833
854
  throw new TypeError('path must be a non-empty string.');
834
855
  }
856
+ const destinationMode = resolveDestinationMode(optionsArg);
857
+ const replace = destinationMode.replace;
835
858
  const nativeObjectProperties = snapshotNativeObjectProperties(optionsArg.nativeObjectProperties);
836
859
  const { plan, lengthState } = planExactUpload(optionsArg);
860
+ // Only a create-only upload sends a precondition, so only its definitive
861
+ // rejection proves that the request did not publish the destination.
862
+ const provesNotPublished = (errorArg) => !replace && isDefinitiveConditionalWriteRejection(errorArg);
837
863
  let operation;
838
- try {
839
- operation = beginExactUploadCapabilityOperation(bucketRefArg, optionsArg.capability, optionsArg.signal);
864
+ if (destinationMode.replace) {
865
+ // A replace upload has no capability step: it starts like every other
866
+ // bucket request, which refuses an invalid signal or a closed SmartBucket.
867
+ operation = beginBasicBucketOperation(bucketRefArg, optionsArg.signal);
840
868
  }
841
- catch (error) {
842
- throw new ExactUploadError({
843
- phase: 'capability',
844
- destinationPath: optionsArg.path,
845
- ...lengthState,
846
- destinationPublication: 'not-published',
847
- multipartCleanup: {
848
- status: 'not-required',
849
- },
850
- }, error);
869
+ else {
870
+ try {
871
+ operation = beginExactUploadCapabilityOperation(bucketRefArg, destinationMode.capability, optionsArg.signal);
872
+ }
873
+ catch (error) {
874
+ throw new ExactUploadError({
875
+ phase: 'capability',
876
+ destinationPath: optionsArg.path,
877
+ ...lengthState,
878
+ destinationPublication: 'not-published',
879
+ multipartCleanup: {
880
+ status: 'not-required',
881
+ },
882
+ }, error);
883
+ }
851
884
  }
852
885
  let readableStream;
853
886
  try {
@@ -898,7 +931,7 @@ export const fastPutStreamExact = async (bucketRefArg, optionsArg) => {
898
931
  }, error);
899
932
  }
900
933
  try {
901
- const putOutput = await sendConditionalZeroPut(operation, optionsArg, nativeObjectProperties?.contentType, () => {
934
+ const putOutput = await sendZeroPut(operation, optionsArg, nativeObjectProperties?.contentType, replace, () => {
902
935
  putRequestAttempted = true;
903
936
  });
904
937
  return {
@@ -919,8 +952,7 @@ export const fastPutStreamExact = async (bucketRefArg, optionsArg) => {
919
952
  phase: 'put-zero',
920
953
  destinationPath: optionsArg.path,
921
954
  ...lengthState,
922
- destinationPublication: putRequestAttempted &&
923
- !isDefinitiveConditionalWriteRejection(error)
955
+ destinationPublication: putRequestAttempted && !provesNotPublished(error)
924
956
  ? 'ambiguous'
925
957
  : 'not-published',
926
958
  multipartCleanup: {
@@ -1038,7 +1070,7 @@ export const fastPutStreamExact = async (bucketRefArg, optionsArg) => {
1038
1070
  if (!multipartUploadCreation) {
1039
1071
  // Only an empty source of undeclared length reaches this point.
1040
1072
  phase = 'put-zero';
1041
- const putOutput = await sendConditionalZeroPut(operation, optionsArg, nativeObjectProperties?.contentType, () => {
1073
+ const putOutput = await sendZeroPut(operation, optionsArg, nativeObjectProperties?.contentType, replace, () => {
1042
1074
  zeroPutAttempted = true;
1043
1075
  });
1044
1076
  return {
@@ -1062,7 +1094,7 @@ export const fastPutStreamExact = async (bucketRefArg, optionsArg) => {
1062
1094
  MultipartUpload: {
1063
1095
  Parts: completedParts,
1064
1096
  },
1065
- IfNoneMatch: '*',
1097
+ ...(replace ? {} : { IfNoneMatch: '*' }),
1066
1098
  MpuObjectSize: consumptionResult.bytesConsumed,
1067
1099
  }), {
1068
1100
  abortSignal: signalArg,
@@ -1154,7 +1186,7 @@ export const fastPutStreamExact = async (bucketRefArg, optionsArg) => {
1154
1186
  ...lengthState,
1155
1187
  destinationPublication: ((phase === 'complete-multipart' && completeRequestAttempted) ||
1156
1188
  (phase === 'put-zero' && zeroPutAttempted)) &&
1157
- !isDefinitiveConditionalWriteRejection(error)
1189
+ !provesNotPublished(error)
1158
1190
  ? 'ambiguous'
1159
1191
  : 'not-published',
1160
1192
  multipartUploadId: uploadId,
@@ -1172,4 +1204,4 @@ export const fastPutStreamExact = async (bucketRefArg, optionsArg) => {
1172
1204
  }
1173
1205
  }
1174
1206
  };
1175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuZXhhY3R1cGxvYWQub3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwuZXhhY3R1cGxvYWQub3BlcmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQVVqRSxPQUFPLEVBQ0wsbUNBQW1DLEVBQ25DLDhCQUE4QixFQUM5Qix5QkFBeUIsR0FFMUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLG1CQUFtQixHQUNwQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsK0JBQStCLEdBQ2hDLE1BQU0sZ0NBQWdDLENBQUM7QUErQnhDLE1BQU0sNkJBQThCLFNBQVEsS0FBSztJQUU3QixNQUFNO0lBRHhCLFlBQ2tCLE1BR2Y7UUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7c0JBTEUsTUFBTTtRQU10QixJQUFJLENBQUMsSUFBSSxHQUFHLCtCQUErQixDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBQ2hDLE1BQU0sK0JBQStCLEdBQUcsR0FBRyxDQUFDO0FBQzVDLE1BQU0sNkJBQTZCLEdBQUcsRUFBRSxDQUFDO0FBQ3pDLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLG1CQUFtQixFQUFFLGlCQUFpQjtDQUN2QyxDQUFDO0FBRUYsTUFBTSw4QkFBOEIsR0FBRyxDQUNyQyxRQUE4RCxFQUNSLEVBQUU7SUFDeEQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDM0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQ0Us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
1207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuZXhhY3R1cGxvYWQub3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwuZXhhY3R1cGxvYWQub3BlcmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQVdqRSxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLG1DQUFtQyxFQUNuQyw4QkFBOEIsRUFDOUIseUJBQXlCLEdBRTFCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixtQkFBbUIsR0FDcEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLCtCQUErQixHQUNoQyxNQUFNLGdDQUFnQyxDQUFDO0FBK0J4QyxNQUFNLDZCQUE4QixTQUFRLEtBQUs7SUFFN0IsTUFBTTtJQUR4QixZQUNrQixNQUdmO1FBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3NCQUxFLE1BQU07UUFNdEIsSUFBSSxDQUFDLElBQUksR0FBRywrQkFBK0IsQ0FBQztJQUM5QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztBQUNoQyxNQUFNLCtCQUErQixHQUFHLEdBQUcsQ0FBQztBQUM1QyxNQUFNLDZCQUE2QixHQUFHLEVBQUUsQ0FBQztBQUN6QyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUN2QyxNQUFNLGFBQWEsR0FBRztJQUNwQixtQkFBbUIsRUFBRSxpQkFBaUI7Q0FDdkMsQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUcsQ0FDckMsUUFBOEQsRUFDUixFQUFFO0lBQ3hELElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENB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
package/package.json CHANGED
@@ -1,10 +1,7 @@
1
1
  {
2
2
  "name": "@lossless.org/client",
3
- "version": "2.4.1",
3
+ "version": "2.6.0",
4
4
  "private": false,
5
- "publishConfig": {
6
- "registry": "https://verdaccio.lossless.digital"
7
- },
8
5
  "description": "One typed client for NoSQLDB, MongoDB, SQLDB, MariaDB, ClickHouse and S3 object storage.",
9
6
  "exports": {
10
7
  ".": {
@@ -85,7 +82,7 @@
85
82
  "@clickhouse/client": "1.23.1",
86
83
  "@git.zone/tsrepo": "^1.1.1",
87
84
  "@lossless.org/nosqldb": "8.0.2",
88
- "@lossless.org/nosqldb-qualified": "npm:@lossless.org/nosqldb@10.9.0",
85
+ "@lossless.org/nosqldb-qualified": "npm:@lossless.org/nosqldb@10.11.0",
89
86
  "@lossless.org/objectstorage": "^10.7.0",
90
87
  "@lossless.org/sqldb": "0.2.3",
91
88
  "@push.rocks/qenv": "^6.1.3",
@@ -100,7 +97,8 @@
100
97
  "license.md",
101
98
  ".smartconfig.json",
102
99
  "licenses/**/*",
103
- "docs/source/**/license.md"
100
+ "docs/source/**/license.md",
101
+ "!docs/source/**/readme.md"
104
102
  ],
105
103
  "keywords": [
106
104
  "data manipulation",
package/readme.md CHANGED
@@ -8,13 +8,10 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
8
8
 
9
9
  ## Install and connect
10
10
 
11
- The `mongodb` dependency currently pins `@tempfix/mongodb@7.6.0` through an npm alias to correct illegal `getMore.maxTimeMS` in bounded transactions without disabling their deadlines. This temporary driver is published only on `https://verdaccio.lossless.digital`. Configure the `@tempfix` scope before installation if your registry is not already Verdaccio:
12
-
13
- Npm publication is paused while the tempfix alias exists; restore both registries when returning to the official driver after PR #5076 is released. This client version and later versions publish only to Verdaccio until then, so install the client from that registry:
11
+ The `mongodb` dependency currently pins `@tempfix/mongodb@7.6.0` through an npm alias to correct illegal `getMore.maxTimeMS` in bounded transactions without disabling their deadlines. The client and `@tempfix/mongodb` are published to both `https://registry.npmjs.org` and `https://verdaccio.lossless.digital`, so a plain install works from either:
14
12
 
15
13
  ```sh
16
- pnpm config set @tempfix:registry https://verdaccio.lossless.digital --location=project
17
- pnpm add @lossless.org/client --registry=https://verdaccio.lossless.digital
14
+ pnpm add @lossless.org/client
18
15
  ```
19
16
 
20
17
  Supported runtime: Node.js. The test suites run on Node.js only.
@@ -122,7 +119,7 @@ Family imports preserve the established SmartData and SmartBucket names and cons
122
119
  | Grouped totals over nested paths | `getGroupedTotals()` / `getGroupedTotalsPage()` group by and sum nested paths declared through `atomicPaths` or `arrayPaths`, and `unwind: path` groups by each element of one declared array |
123
120
  | Grouped totals over array elements | with `unwind: 'lines'`, `groupBy` and `sums` name declared fields of the unwound element — `groupBy: ['lines.accountNumber', 'lines.side']`, `sums: ['lines.amountCents']` — so per-account debit and credit totals need no raw aggregation; undeclared element fields and an `unwind` that holds no `groupBy` or `sums` path stay refused with `invalid_argument` |
124
121
  | Grouped totals element filter | `elementFilter: { 'lines.accountNumber': '1200' }` beside `unwind: 'lines'` counts and sums only the matching elements — one account's balance per side — with the atomic-filter operators on the unwound array and its declared element paths; any other path or operator is refused with `invalid_argument` |
125
- | Grouped totals paging | rows come ordered by group key; `getGroupedTotalsPage()` returns `nextCursor` while `hasMore`, `cursor` continues after it, and `iterateGroupedTotals()` reads every group page by page — exact across pages for null, number, string and boolean group values (proven on NoSQLDB 8.0.2, 10.9.0 and MongoDB; ObjectId and date values are ordered by BSON type order but not yet covered by the paging tests), refused with `unsupported_operation` for other values, and a cursor from another query is refused with `invalid_argument` |
122
+ | Grouped totals paging | rows come ordered by group key; `getGroupedTotalsPage()` returns `nextCursor` while `hasMore`, `cursor` continues after it, and `iterateGroupedTotals()` reads every group page by page — exact across pages for null, number, string and boolean group values (proven on NoSQLDB 8.0.2, 10.11.0 and MongoDB; ObjectId and date values are ordered by BSON type order but not yet covered by the paging tests), refused with `unsupported_operation` for other values, and a cursor from another query is refused with `invalid_argument` |
126
123
  | Query-plan inspection | `Model.inspectQueryPlan(db, { filter, sort?, projection?, limit?, timeoutMS?, signal? })` — the winning plan's stages (`stage`, `depth`, `indexName`, `direction`) and `nReturned`/`totalKeysExamined`/`totalDocsExamined`, read-only and bounded, so a consumer proves a model query uses its intended index without raw driver access |
127
124
  | Per-instance model binding | `bindDocToManager(manager, Model)` returns a subclass of a model declared with `@managed()` and no manager argument, named like the model and bound to that manager, so several databases use the same models at once; any other binding is refused with `invalid_configuration` |
128
125
  | Subclasses need their own binding | a subclass of a bound model that declares decorators or a persistence policy of its own and no `@Collection()`, `@managed()` or `defineCollectionModel()` binding is refused with `invalid_configuration` on every read and write, so it never writes through the parent's schema; an undecorated subclass keeps the inherited binding |
@@ -130,6 +127,7 @@ Family imports preserve the established SmartData and SmartBucket names and cons
130
127
  | Following this process's reads | `db.trackReads(fn)` resolves `{ result, reads }`; `reads.changed` turns true once a write this process makes through the database's models could have changed what a model read of `fn` returned, judged by the read's query and the ids it returned, and a write it cannot place counts as one that did, so a cache keyed by `reads` rebuilds only what a write touched; works on NoSQLDB |
131
128
  | Following every process's writes | with `new SmartdataDb({ ..., writeRevisions: { partitionField: 'organizationId' } })` in every writer, the awaited `reads.isCurrent()` counts changes per collection and partition in the write's transaction; confirmed writes of this database that leave `reads.changed` false receive exact revision allowances, while other writers and unknown outcomes stay conservative; a revision snapshot overlapping a local commit that touches its keys is unknowable; `db.invalidateTrackedReads()` states raw writes and migrations; overlapping transactions of one process bump separate documents of a partition's counter, so they rarely conflict on it, a check reads the counters in one query plus one for those with shards in use, and every process of a database upgrades together; needs an engine identified as NoSQLDB, elsewhere `isCurrent()` is always false |
132
129
  | Following committed writes in commit order | with `new SmartdataDb({ ..., writeLog: { fields: ['id', 'organizationId'] } })` in every writer, `db.followWrites({ fields, onWrite, onGap })` delivers each committed transaction once with its write reports: this instance's own commits at once (`origin: 'local'`), every other commit from the engine's commit journal in commit order (`origin: 'journal'`, with its `stamp`), within 250 ms while active and a second when idle; rollbacks and aborted retry attempts deliver nothing, raw writes name their collections in `unplaced`, and a follower that falls out of the journal's 15-minute retention or meets a restarted memory engine calls `onGap` and continues from the head; needs NoSQLDB 10.9.0, elsewhere the option is inert and following is refused with `unsupported_operation` |
130
+ | Read fences in transactions | `Model.exact.readFence({ id: 'lane-7' }, { session })` (the model's `reconcileBy` identity, as `findStoredOne()` takes it) inside `session.withTransaction()` makes the commit depend on that identity, present or absent, without writing it: an insert of the identity, or a change, delete or re-insert of its document, committed after the transaction's snapshot refuses the commit as a transient conflict and `withTransaction()` re-runs the callback, while two transactions that only fence one identity both commit, no writer waits, and the transaction's own writes never refuse its own fences; needs NoSQLDB 10.11.0 and a prepared model, elsewhere refused with `unsupported_operation` before any command is sent |
133
131
  | Disposable test databases on a unix socket | `SmartdataTestDatabase.create({ connection: { socketPath } })` from `@lossless.org/client/testsupport` reaches an engine that listens only on a unix-domain socket, fault helpers included; the loopback `host`/`port` form is unchanged |
134
132
 
135
133
  `docs/source/smartdata/readme.md` documents each one with its refusals.
@@ -157,7 +155,7 @@ A bucket lookup sends one HeadBucket for the named bucket, never ListBuckets, so
157
155
 
158
156
  `fastCopy()` reads the source with one HeadObject. A source of up to 5 GiB, the largest object one CopyObject may copy, is copied with one CopyObject, as before. A larger source, which failed before, is copied with a multipart upload of 256 MiB parts (larger when the object needs more than 10,000 parts, up to the 5 TiB S3 maximum), each part an UploadPartCopy of its byte range that requires the source to still carry the ETag the HeadObject read, so a source replaced during the copy fails the copy with the provider's 412 instead of mixing two versions. Each part is one request with its own `requestTimeoutMs` bound. The new object gets the properties CopyObject gives it: the source's metadata and content headers with `deleteExistingNativeMetadata` unset, only the given metadata with it set. Object tags, the storage class, server-side encryption settings and a website redirect are not carried by a part-by-part copy; the new object takes the target bucket's defaults for them. Any failure or abort, `signal` and `SmartBucket.close()` included, sends AbortMultipartUpload and never completes the upload; a create that answered after cancellation has its upload aborted as well. A copy above 5 GiB needs a provider with UploadPartCopy and `x-amz-copy-source-if-match`; ObjectStorage has them from 10.7.0.
159
157
 
160
- 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`; large or slow bodies use `fastPutStreamExact()`, whose parts are separate requests, each bounded on its own (5 MiB unless `requestedPartSize` asks for more or the length needs more than 10,000 parts).
158
+ 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`; large or slow bodies use `fastPutStreamExact()`, whose parts are separate requests, each bounded on its own (5 MiB unless `requestedPartSize` asks for more or the length needs more than 10,000 parts). That holds for creating and for replacing: `fastPutStreamExact({ capability })`, with a capability from `probeExactUploadCapability()`, creates only and sends `If-None-Match: *`, while `fastPutStreamExact({ overwrite: true })` replaces whatever the key holds, needs no capability and sends no precondition; exactly one of the two is given, anything else is refused with a `TypeError` before any request. A replace keeps the multipart plan, the part bounds, the buffering limit, the `ExactUploadError` phases and the cleanup: the old object stays readable and unchanged until the final CompleteMultipartUpload (or the PutObject of an empty source) replaces it in one step, and a failure before that request aborts the multipart upload and leaves the old object as it was (`destinationPublication: 'not-published'`). A failed final request that was sent reports `'ambiguous'`, which for a replace means that either the old or the new object is visible.
161
159
 
162
160
  `fastPutStream()` and `Directory.fastPutStream()` send one PutObject, which must declare the body's length. Without `contentLength` only a file stream (`fs.ReadStream`) uploads, sized by the S3 client from the file; a Web `ReadableStream` or any other `Readable` is refused with `ObjectStreamLengthError` before any request and before the source is read, and the caller keeps the source. Such a stream failed before with a `TypeError` for the header `x-amz-decoded-content-length: undefined`. A stream of unknown length uploads with `fastPutStreamExact({ maxContentLength })`. `File.create()` and `File.updateWithContents()` take no length, so their stream form accepts only file streams.
163
161
 
@@ -165,24 +163,25 @@ A `signal` aborts the request in flight, stops its retries and rejects with the
165
163
 
166
164
  ### Document APIs that need a MongoDB backend
167
165
 
168
- 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.
166
+ 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.11.0 (see [Verification](#verification)); the two releases part on the grouped-totals and guarded-`$expr` rows below — 10.11.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.
169
167
 
170
168
  `init()` asks the connected engine what it is with one `buildInfo` command and records the answer on the database as `engineIdentity` (`{ product, version }`). NoSQLDB answers with its own `nosqldb` identity document from 10.3.0 onward; a MongoDB server answers `buildInfo` without one; an engine that refuses the command — NoSQLDB 8.0.2 answers `CommandNotFound` — stays `{ product: 'unknown', version: null }`. The identity is what states `capabilities` on a plain `SmartdataDb`, and an unidentified engine states none at all, so every capability-gated call refuses. `NoSqlConnection` keeps stating the capabilities of its declared backend from construction on.
171
169
 
172
170
  | Document API | On the NoSQLDB engine | On MongoDB |
173
171
  | --- | --- | --- |
174
- | `getGroupedTotals()` / `getGroupedTotalsPage()` / `iterateGroupedTotals()` with one `groupBy` field | exact, including `sums`, declared nested paths, `unwind` of a declared array and declared fields of its element, `elementFilter`, group key order and `cursor` paging, on 8.0.2 and 10.9.0 alike | exact |
172
+ | `getGroupedTotals()` / `getGroupedTotalsPage()` / `iterateGroupedTotals()` with one `groupBy` field | exact, including `sums`, declared nested paths, `unwind` of a declared array and declared fields of its element, `elementFilter`, group key order and `cursor` paging, on 8.0.2 and 10.11.0 alike | exact |
175
173
  | the same with **two** `groupBy` fields | exact, `sums`, nested paths, `unwind`, two element fields of one unwound array (`lines.accountNumber` with `lines.side`), `elementFilter` and `cursor` paging included, on an engine that identifies itself as NoSQLDB 10.5.0 or newer: that release evaluates the composite group key per document. Below it the call is refused with `unsupported_operation` naming both fields and the single-field form, because the engine leaves the composite group key unresolved and answers with a single row whose group values are the literal field paths (`'$owner'`) and whose count is the whole filtered collection; the refusal is the guard against that wrong number, not a fix for it | exact; the client wraps each key member in `$ifNull`, because MongoDB leaves a missing member out of the key and would otherwise report it as a second null group |
176
174
  | guarded `$expr` atomic filters (`$add`, `$lte`, `$ifNull`) | exact on 10.6.0 and newer: the engine evaluates the client's fail-closed compilation (`$cond`, `$let`, `$isNumber`, `$type`), so the guard admits within the limit, refuses beyond it and never matches a stored value that is not a finite number. 8.0.2 rejects the compilation with `invalid argument: $cond` and leaves the document untouched | exact |
177
175
  | `watch()` change streams | unsupported. `NoSqlConnection` refuses with `unsupported_capability`, and so does a plain `SmartdataDb` whose engine identified itself; against an engine that answers no identity the refusal instead arrives from the engine as `CommandNotFound` once the change stream is read. `db.observeWrites()` reports the process's own model writes on both backends | supported on replica sets |
178
- | model-declared partial indexes (`partialFilterExpression`) | not expressible: the index-option type rejects it and the runtime refuses it with `invalid_configuration`. A client decision, not an engine limit on every release — 10.6.0 and newer create partial indexes, 8.0.2 refuses the option with `InvalidOptions` (72) — because one model declaration has to hold on every qualified backend. A migration may create one on 10.9.0; `toleratedIndexNames` accepts it and inspection reports its filter | not expressible, but a migration may own one; inspection reports its filter |
176
+ | model-declared partial indexes (`partialFilterExpression`) | not expressible: the index-option type rejects it and the runtime refuses it with `invalid_configuration`. A client decision, not an engine limit on every release — 10.6.0 and newer create partial indexes, 8.0.2 refuses the option with `InvalidOptions` (72) — because one model declaration has to hold on every qualified backend. A migration may create one on 10.11.0; `toleratedIndexNames` accepts it and inspection reports its filter | not expressible, but a migration may own one; inspection reports its filter |
179
177
  | collection validators (`validator`, `validationLevel`, `validationAction`) | no client API; a migration owns a validator through the driver. 10.7.0 and newer create the collection, list the options exactly as given and enforce them on every model write: a violating `insert()` or `atomicUpdate()` rejects with the engine's `DocumentValidationFailure` (121) and its `errInfo`, which the client passes through unchanged rather than mapping to a `SmartdataPersistenceError` code, and stores nothing. Models initialize on a validated collection like on any other. 8.0.2 refuses the option with `InvalidOptions` (72) and creates no collection, so a validator is never silently dropped | enforced; not exercised by the client's MongoDB suite |
180
- | write conflicts between transactions, and writes outside a transaction to a document a transaction holds | 10.9.0 (since 10.6.1) detects a conflict at the statement, as MongoDB does: the first writer wins, and the later transaction's statement rejects with the engine's `WriteConflict` (112) labelled `TransientTransactionError`, which the client passes through so `session.withTransaction()` re-runs that callback. A write outside a transaction waits until the transaction holding its document ends, then applies on top; the wait is bounded by the write's own `timeoutMS` and by the engine's fixed 60-second transaction lifetime, after which a waiting writer aborts the holder. Awaiting such a write inside the holding transaction's callback therefore stalls that transaction until one of the two expires. 8.0.2 detects the conflict at commit: the first transaction to commit wins, a write outside a transaction applies at once, and the transaction that wrote first re-runs. Both writes land on either engine; a callback must be safe to re-run and must not swallow the statement error | first writer wins at the statement and outside writes wait, MongoDB's documented rule; not exercised by the client's MongoDB suite |
178
+ | write conflicts between transactions, and writes outside a transaction to a document a transaction holds | 10.11.0 (since 10.6.1) detects a conflict at the statement, implemented to be MongoDB compatible: the first writer wins, and the later transaction's statement rejects with the engine's `WriteConflict` (112) labelled `TransientTransactionError`, which the client passes through so `session.withTransaction()` re-runs that callback. A write outside a transaction waits until the transaction holding its document ends, then applies on top; the wait is bounded by the write's own `timeoutMS` and by the engine's fixed 60-second transaction lifetime, after which a waiting writer aborts the holder. Awaiting such a write inside the holding transaction's callback therefore stalls that transaction until one of the two expires. 8.0.2 detects the conflict at commit: the first transaction to commit wins, a write outside a transaction applies at once, and the transaction that wrote first re-runs. Both writes land on either engine; a callback must be safe to re-run and must not swallow the statement error | first writer wins at the statement and outside writes wait, MongoDB's documented rule; not exercised by the client's MongoDB suite |
181
179
  | value-form `$elemMatch` in read filters (`{ scores: { $elemMatch: { $gte: 80, $lt: 90 } } }`, `{ labels: { $not: { $elemMatch: { $nin: runnerLabels } } } }`) | exact on 10.7.1 and newer: the operators apply to each array element as a whole, so the range matches only a document with one score inside it and the claim selects a job only when every one of its labels is a runner label. 8.0.2 parses every operand as a query over embedded documents and refuses the value form with `TypeMismatch` (14). A non-document operand is refused on both, with MongoDB's `BadValue` (2) on 10.7.1 and newer and 14 on 8.0.2. The client passes the operand through unchanged; the filter type admits the value form over scalar elements and the document form over embedded documents. Atomic filters (`atomicUpdate()` and the other atomic writes) accept no `$elemMatch` on any backend: the client refuses it with `invalid_argument` before any backend is contacted | exact |
182
- | `Model.inspectQueryPlan()` | explains on 10.9.0: the summary names the winning plan's stages and its execution totals. 8.0.2 answers `explain` with `CommandNotFound` (59), and the call rejects with `unsupported_operation` ("The connected engine does not explain queries.") rather than returning a plan it cannot know. Stage shapes are the engine's own: on 10.9.0 a limited sort on an unindexed field is `LIMIT` over `SORT` over `COLLSCAN`, an equality on a unique single-field index is `FETCH` over `IXSCAN`, and an `$or` whose branches each have an index is a `COLLSCAN` | explains: the same limited sort is `SORT` over `COLLSCAN`, the limit folded into the sort; the equality is `EXPRESS_IXSCAN` on the unique index; the `$or` is `SUBPLAN` over `FETCH` over `OR` over one `IXSCAN` per branch |
180
+ | `Model.inspectQueryPlan()` | explains on 10.11.0: the summary names the winning plan's stages and its execution totals. 8.0.2 answers `explain` with `CommandNotFound` (59), and the call rejects with `unsupported_operation` ("The connected engine does not explain queries.") rather than returning a plan it cannot know. Stage shapes are the engine's own: on 10.11.0 a limited sort on an unindexed field is `LIMIT` over `SORT` over `COLLSCAN`, an equality on a unique single-field index is `FETCH` over `IXSCAN`, and an `$or` whose branches each have an index is a `COLLSCAN` | explains: the same limited sort is `SORT` over `COLLSCAN`, the limit folded into the sort; the equality is `EXPRESS_IXSCAN` on the unique index; the `$or` is `SUBPLAN` over `FETCH` over `OR` over one `IXSCAN` per branch |
181
+ | `Model.exact.readFence({ [reconcileBy]: value }, { session })` in a transaction | needs an engine that identifies itself as NoSQLDB 10.11.0 or newer, the first release that answers `readFence` by unique key: the commit is refused with the engine's `WriteConflict` (112), labelled `TransientTransactionError`, when a document with the fenced identity was inserted, changed or deleted after the transaction's snapshot, and fences of one identity never conflict with each other or with a writer; the qualified 10.11.0 answers it. 8.0.2 cannot fence, so the call is refused with `unsupported_operation` before any command is sent | refused with `unsupported_operation` before any command is sent: MongoDB has no read fence |
183
182
  | aggregation-pipeline (array) updates | refused by the client with `invalid_argument` before any backend is contacted. A client-owned refusal, not an engine limit: both qualified engines apply a pipeline update themselves | same client refusal |
184
183
 
185
- `test/nosqldb/smartdb/test.engine-capability-boundary.node.ts` asserts the identity, grouped-totals, guarded-`$expr`, partial-index, collection-validator, write-conflict, `$elemMatch` and pipeline-update rows against both qualified engines, so a boundary that moves shows up as a failing suite rather than as a changed number in a consumer. The two halves of the grouped-totals, guarded-`$expr`, write-conflict and `$elemMatch` rows are separate tests, each bound to the engine that answers it, and the engine's own composite-key answer stays under assertion through the raw `aggregateGroupedTotals()` boundary — one literal row on 8.0.2, the two exact pairs on 10.9.0. The same boundary pins the rest of the engine's `$group` stage: a non-document accumulator is refused with `TypeMismatch` (14) on 10.9.0 while 8.0.2 answers it, and a `$cond` inside a composite key is evaluated per document on 10.9.0 while 8.0.2 answers its single literal row. It also pins whether a migration can create a partial index — 10.9.0 creates it and lists the filter, 8.0.2 refuses with 72 — and a collection validator — 10.9.0 creates and enforces it against model inserts and updates, 8.0.2 refuses with 72 — which writer a conflict sends back: on 10.9.0 the later transaction fails at its statement and re-runs while a write outside a transaction waits for the holder's commit, on 8.0.2 the later transaction commits first and the holder re-runs — and what `$elemMatch` answers through `getInstances()`: 10.9.0 matches the documented range and the `$not`/`$elemMatch`/`$nin` claim exactly as the MongoDB filter suite asserts them, 8.0.2 refuses both with 14, and a non-document operand is refused with 2 on 10.9.0 and 14 on 8.0.2. The `watch()` row is the contract refusal `ts/nosqldb/classes.collection.ts` states; the engine suite opens no change stream.
184
+ `test/nosqldb/smartdb/test.engine-capability-boundary.node.ts` asserts the identity, grouped-totals, guarded-`$expr`, partial-index, collection-validator, write-conflict, `$elemMatch`, read-fence and pipeline-update rows against both qualified engines, so a boundary that moves shows up as a failing suite rather than as a changed number in a consumer. The two halves of the grouped-totals, guarded-`$expr`, write-conflict and `$elemMatch` rows are separate tests, each bound to the engine that answers it, and the engine's own composite-key answer stays under assertion through the raw `aggregateGroupedTotals()` boundary — one literal row on 8.0.2, the two exact pairs on 10.11.0. The same boundary pins the rest of the engine's `$group` stage: a non-document accumulator is refused with `TypeMismatch` (14) on 10.11.0 while 8.0.2 answers it, and a `$cond` inside a composite key is evaluated per document on 10.11.0 while 8.0.2 answers its single literal row. It also pins whether a migration can create a partial index — 10.11.0 creates it and lists the filter, 8.0.2 refuses with 72 — and a collection validator — 10.11.0 creates and enforces it against model inserts and updates, 8.0.2 refuses with 72 — which writer a conflict sends back: on 10.11.0 the later transaction fails at its statement and re-runs while a write outside a transaction waits for the holder's commit, on 8.0.2 the later transaction commits first and the holder re-runs — and what `$elemMatch` answers through `getInstances()`: 10.11.0 matches the documented range and the `$not`/`$elemMatch`/`$nin` claim exactly as the MongoDB filter suite asserts them, 8.0.2 refuses both with 14, and a non-document operand is refused with 2 on 10.11.0 and 14 on 8.0.2. The `watch()` row is the contract refusal `ts/nosqldb/classes.collection.ts` states; the engine suite opens no change stream.
186
185
 
187
186
  ## Relational SQL
188
187
 
@@ -262,14 +261,15 @@ Qualified engines:
262
261
 
263
262
  | Component | Qualified versions |
264
263
  | --- | --- |
265
- | NoSQLDB engine | **8.0.2 and 10.9.0** — the same `test/nosqldb/smartdb/` suite runs against both, through the single engine seam in `test/nosqldb/helpers/smartdb.ts`; `NOSQLDB_ENGINE=qualified` selects 10.9.0 |
264
+ | NoSQLDB engine | **8.0.2 and 10.11.0** — the same `test/nosqldb/smartdb/` suite runs against both, through the single engine seam in `test/nosqldb/helpers/smartdb.ts`; `NOSQLDB_ENGINE=qualified` selects 10.11.0 |
265
+ | NoSQLDB read fence | **10.11.0** — `test/nosqldb/smartdb/test.exact-read-fence.node.ts` runs against the qualified engine whatever `NOSQLDB_ENGINE` selects |
266
266
  | MongoDB | 8.0.26 replica sets |
267
267
  | ObjectStorage | 10.3.1 |
268
268
  | SQLDB | 0.2.3 |
269
269
  | MariaDB | 11.8 |
270
270
  | ClickHouse | 25.8 |
271
271
 
272
- Both engine versions run the whole document suite. They part on asserted boundaries — 10.9.0 groups composite keys exactly and answers two-field grouped totals, evaluates guarded `$expr` filters, creates migration-owned partial indexes and collection validators, reports a transaction write conflict at the statement and matches value-form `$elemMatch`, 8.0.2 does none of these, reports the conflict at commit, and the client refuses the two-field form there — which [Document APIs that need a MongoDB backend](#document-apis-that-need-a-mongodb-backend) states row by row. Text search, the Lucene adapter and the broad read-filter surface are exercised against MongoDB only. `pnpm run test:minio` uses a digest-pinned MinIO image: `sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e`. That MinIO version enforces the tested conditional uploads but does not enforce conditional deletion; its exact-purge capability is correctly unavailable. ObjectStorage passes both live probes. AWS S3 has not been qualified against a live account in this migration; no universal S3 exact-operation guarantee is inferred from the SDK.
272
+ Both engine versions run the whole document suite. They part on asserted boundaries — 10.11.0 groups composite keys exactly and answers two-field grouped totals, evaluates guarded `$expr` filters, creates migration-owned partial indexes and collection validators, reports a transaction write conflict at the statement and matches value-form `$elemMatch`, 8.0.2 does none of these, reports the conflict at commit, and the client refuses the two-field form there — which [Document APIs that need a MongoDB backend](#document-apis-that-need-a-mongodb-backend) states row by row. Text search, the Lucene adapter and the broad read-filter surface are exercised against MongoDB only. `pnpm run test:minio` uses a digest-pinned MinIO image: `sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e`. That MinIO version enforces the tested conditional uploads but does not enforce conditional deletion; its exact-purge capability is correctly unavailable. ObjectStorage passes both live probes. AWS S3 has not been qualified against a live account in this migration; no universal S3 exact-operation guarantee is inferred from the SDK.
273
273
 
274
274
  ## License and Legal Information
275
275
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/client',
6
- version: '2.4.1',
6
+ version: '2.6.0',
7
7
  description: 'One typed client for NoSQLDB, MongoDB, SQLDB, MariaDB, ClickHouse and S3 object storage.'
8
8
  }