@researchdatabox/sails-hook-redbox-storage-mongo 5.0.4 → 5.1.0-beta.12573

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,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Services = void 0;
3
+ exports.Services = exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS = exports.RECORD_SCHEMA_REFERENCE_INDEXES = exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY = exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_NAME = exports.RECORD_SCHEMA_ARTIFACT_INDEXES = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
5
  const rxjs_2 = require("rxjs");
6
6
  const crypto_1 = require("crypto");
7
+ const node_util_1 = require("node:util");
7
8
  const luxon_1 = require("luxon");
8
9
  const mongodb = require("mongodb");
9
10
  const stream = require("node:stream");
@@ -12,6 +13,8 @@ const json2csv_1 = require("json2csv");
12
13
  const redbox_core_1 = require("@researchdatabox/redbox-core");
13
14
  const redbox_core_2 = require("@researchdatabox/redbox-core");
14
15
  const redbox_core_3 = require("@researchdatabox/redbox-core");
16
+ const RecordSchemaReference_1 = require("../models/RecordSchemaReference");
17
+ const recordSchemaPersistence_1 = require("./recordSchemaPersistence");
15
18
  const { flatten } = json2csv_1.transforms;
16
19
  const UTF8_BOM = '\uFEFF';
17
20
  const CSV_DANGEROUS_PREFIX = /^[=+\-@\t\r\n]/;
@@ -36,23 +39,170 @@ function sanitizeCsvRecord(record) {
36
39
  }
37
40
  return sanitized;
38
41
  }
42
+ const RECORD_IDENTITY_COLLECTION = 'recordidentity';
43
+ exports.RECORD_SCHEMA_ARTIFACT_INDEXES = [
44
+ {
45
+ key: { digest: 1 },
46
+ // Match the index Sails Mongo creates for `@Attr({ unique: true })` so
47
+ // native readiness initialization is idempotent after Waterline setup.
48
+ name: 'digest_1',
49
+ unique: true,
50
+ },
51
+ ];
52
+ exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_NAME = 'record_schema_reference_authorization_cursor_lookup';
53
+ exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY = {
54
+ digest: 1,
55
+ kind: 1,
56
+ brand: 1,
57
+ portal: 1,
58
+ schemaKind: 1,
59
+ recordType: 1,
60
+ operation: 1,
61
+ referenceKey: 1,
62
+ };
63
+ exports.RECORD_SCHEMA_REFERENCE_INDEXES = [
64
+ {
65
+ key: { referenceKey: 1 },
66
+ name: 'referenceKey_1',
67
+ unique: true,
68
+ },
69
+ {
70
+ key: { digest: 1, kind: 1 },
71
+ name: 'record_schema_reference_digest_kind',
72
+ },
73
+ {
74
+ key: { digest: 1, kind: 1, brand: 1, portal: 1, referenceKey: 1 },
75
+ name: 'record_schema_reference_grant_lookup',
76
+ },
77
+ {
78
+ key: { digest: 1, kind: 1, brand: 1, portal: 1, schemaKind: 1, recordType: 1, operation: 1, oid: 1 },
79
+ name: 'record_schema_reference_authorization_lookup',
80
+ },
81
+ {
82
+ key: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY,
83
+ name: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_NAME,
84
+ },
85
+ {
86
+ key: { oid: 1, kind: 1 },
87
+ name: 'record_schema_reference_oid_kind',
88
+ sparse: true,
89
+ },
90
+ {
91
+ key: { kind: 1, expiresAt: 1 },
92
+ name: 'record_schema_reference_pin_expiry',
93
+ partialFilterExpression: { kind: 'pin' },
94
+ },
95
+ ];
96
+ /**
97
+ * Authorization lookups fail as unavailable instead of consuming an
98
+ * unbounded database work budget. This is a time/availability boundary, not
99
+ * a result cap: a query that cannot complete is never reported as a denial.
100
+ */
101
+ exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS = 1_000;
102
+ const PERSISTENT_INDEX_BOOLEAN_OPTIONS = ['unique', 'sparse', 'hidden'];
103
+ const PERSISTENT_INDEX_VALUE_OPTIONS = [
104
+ 'partialFilterExpression',
105
+ 'expireAfterSeconds',
106
+ 'storageEngine',
107
+ 'weights',
108
+ 'default_language',
109
+ 'language_override',
110
+ 'textIndexVersion',
111
+ '2dsphereIndexVersion',
112
+ 'bits',
113
+ 'min',
114
+ 'max',
115
+ 'bucketSize',
116
+ 'wildcardProjection',
117
+ 'collation',
118
+ ];
119
+ function indexKeyEntries(key) {
120
+ if (key instanceof Map)
121
+ return [...key.entries()];
122
+ return Object.keys(key).map(name => [name, key[name]]);
123
+ }
124
+ function indexKeysEqual(existing, required) {
125
+ return (0, node_util_1.isDeepStrictEqual)(indexKeyEntries(existing.key), indexKeyEntries(required.key));
126
+ }
127
+ function indexOptionsEqual(existing, required) {
128
+ for (const option of PERSISTENT_INDEX_BOOLEAN_OPTIONS) {
129
+ if (Boolean(existing[option]) !== Boolean(required[option]))
130
+ return false;
131
+ }
132
+ return PERSISTENT_INDEX_VALUE_OPTIONS.every(option => {
133
+ if (option === 'collation') {
134
+ // MongoDB 9 reports the default simple collation explicitly; earlier versions omit it.
135
+ return (0, node_util_1.isDeepStrictEqual)(existing.collation ?? { locale: 'simple' }, required.collation ?? { locale: 'simple' });
136
+ }
137
+ return (0, node_util_1.isDeepStrictEqual)(existing[option], required[option]);
138
+ });
139
+ }
140
+ function indexDisplayName(index) {
141
+ return typeof index.name === 'string' && index.name.trim() !== '' ? index.name : '<unnamed>';
142
+ }
143
+ function isMongoNamespaceNotFoundError(error) {
144
+ if (!(error instanceof Error))
145
+ return false;
146
+ return ('code' in error && error.code === 26) || ('codeName' in error && error.codeName === 'NamespaceNotFound');
147
+ }
39
148
  // Unimported saves merged into a pending intent. An intent written before per-save tracking counts as one save.
40
- const priorFigshareSaves = { $cond: [{ $eq: ['$figshareSyncIntent.pending', true] }, { $ifNull: ['$figshareSyncIntent.saves', {
41
- $cond: [{ $in: ['$figshareSyncIntent.readiness', ['ready', 'initialising']] }, [{ saveToken: '$figshareSyncIntent.saveToken',
42
- readiness: '$figshareSyncIntent.readiness', requestedAt: '$figshareSyncIntent.requestedAt', intents: { $ifNull: ['$figshareSyncIntent.intents', []] } }], []]
43
- }] }, []] };
149
+ const priorFigshareSaves = {
150
+ $cond: [
151
+ { $eq: ['$figshareSyncIntent.pending', true] },
152
+ {
153
+ $ifNull: [
154
+ '$figshareSyncIntent.saves',
155
+ {
156
+ $cond: [
157
+ { $in: ['$figshareSyncIntent.readiness', ['ready', 'initialising']] },
158
+ [
159
+ {
160
+ saveToken: '$figshareSyncIntent.saveToken',
161
+ readiness: '$figshareSyncIntent.readiness',
162
+ requestedAt: '$figshareSyncIntent.requestedAt',
163
+ intents: { $ifNull: ['$figshareSyncIntent.intents', []] },
164
+ },
165
+ ],
166
+ [],
167
+ ],
168
+ },
169
+ ],
170
+ },
171
+ [],
172
+ ],
173
+ };
44
174
  // The intent carries the union of its saves' policies, and is ready only once no save is still initialising.
45
175
  // Once every merged save is abandoned nothing remains to import, so the intent is no longer pending.
46
- const deriveFigshareIntent = { $set: {
47
- 'figshareSyncIntent.intents': { $reduce: { input: '$figshareSyncIntent.saves', initialValue: [], in: { $setUnion: ['$$value', '$$this.intents'] } } },
48
- 'figshareSyncIntent.readiness': { $cond: [{ $eq: [{ $size: '$figshareSyncIntent.saves' }, 0] }, 'abandoned',
49
- { $cond: [{ $in: ['initialising', '$figshareSyncIntent.saves.readiness'] }, 'initialising', 'ready'] }] },
50
- 'figshareSyncIntent.pending': { $gt: [{ $size: '$figshareSyncIntent.saves' }, 0] }
51
- } };
52
- const figshareSaveFilter = (saveToken, readiness) => ({ 'figshareSyncIntent.pending': true, $or: [
176
+ const deriveFigshareIntent = {
177
+ $set: {
178
+ 'figshareSyncIntent.intents': {
179
+ $reduce: {
180
+ input: '$figshareSyncIntent.saves',
181
+ initialValue: [],
182
+ in: { $setUnion: ['$$value', '$$this.intents'] },
183
+ },
184
+ },
185
+ 'figshareSyncIntent.readiness': {
186
+ $cond: [
187
+ { $eq: [{ $size: '$figshareSyncIntent.saves' }, 0] },
188
+ 'abandoned',
189
+ { $cond: [{ $in: ['initialising', '$figshareSyncIntent.saves.readiness'] }, 'initialising', 'ready'] },
190
+ ],
191
+ },
192
+ 'figshareSyncIntent.pending': { $gt: [{ $size: '$figshareSyncIntent.saves' }, 0] },
193
+ },
194
+ };
195
+ const figshareSaveFilter = (saveToken, readiness) => ({
196
+ 'figshareSyncIntent.pending': true,
197
+ $or: [
53
198
  { 'figshareSyncIntent.saves': { $elemMatch: { saveToken, ...(readiness ? { readiness } : {}) } } },
54
- { 'figshareSyncIntent.saves': { $exists: false }, 'figshareSyncIntent.saveToken': saveToken, ...(readiness ? { 'figshareSyncIntent.readiness': readiness } : {}) }
55
- ] });
199
+ {
200
+ 'figshareSyncIntent.saves': { $exists: false },
201
+ 'figshareSyncIntent.saveToken': saveToken,
202
+ ...(readiness ? { 'figshareSyncIntent.readiness': readiness } : {}),
203
+ },
204
+ ],
205
+ });
56
206
  var Services;
57
207
  (function (Services) {
58
208
  class MongoStorageService extends redbox_core_1.Services.Core.Service {
@@ -60,11 +210,24 @@ var Services;
60
210
  db;
61
211
  recordCol;
62
212
  deletedRecordCol;
213
+ recordIdentityCol;
214
+ recordSchemaArtifactCol;
215
+ recordSchemaReferenceCol;
63
216
  _readyHookRegistered = false;
217
+ _requiredIndicesReady = false;
218
+ _initializationPromise;
64
219
  _exportedMethods = [
65
220
  'init',
66
221
  'create',
67
222
  'updateMeta',
223
+ 'getCapabilities',
224
+ 'removeActiveRecord',
225
+ 'createTombstone',
226
+ 'updateTombstone',
227
+ 'removeTombstone',
228
+ 'createActiveRecordFromTombstone',
229
+ 'getTombstone',
230
+ 'getLifecycleTombstones',
68
231
  'getMeta',
69
232
  'setRecordFields',
70
233
  'scanFigshareRecords',
@@ -88,6 +251,7 @@ var Services;
88
251
  'addDatastreams',
89
252
  'updateDatastream',
90
253
  'removeDatastream',
254
+ 'removeStagedDatastream',
91
255
  'addDatastream',
92
256
  'addAndRemoveDatastreams',
93
257
  'getDatastream',
@@ -97,6 +261,13 @@ var Services;
97
261
  'getRecordAudit',
98
262
  'getIntegrationAudit',
99
263
  'countIntegrationAudit',
264
+ 'putRecordSchemaArtifact',
265
+ 'getRecordSchemaArtifact',
266
+ 'listRecordSchemaArtifacts',
267
+ 'touchRecordSchemaArtifact',
268
+ 'putRecordSchemaReference',
269
+ 'findRecordSchemaGrantForAuthorization',
270
+ 'listRecordSchemaReferences',
100
271
  'exists',
101
272
  ];
102
273
  constructor() {
@@ -110,9 +281,7 @@ var Services;
110
281
  getErrorMessage(err) {
111
282
  if (err instanceof Error) {
112
283
  const messageParts = [err.message];
113
- const causeMessage = err.cause instanceof Error
114
- ? err.cause.message
115
- : (typeof err.cause === 'string' ? err.cause : undefined);
284
+ const causeMessage = err.cause instanceof Error ? err.cause.message : typeof err.cause === 'string' ? err.cause : undefined;
116
285
  if (causeMessage != null && causeMessage !== '' && causeMessage !== err.message) {
117
286
  messageParts.push(`Cause: ${causeMessage}`);
118
287
  }
@@ -120,9 +289,442 @@ var Services;
120
289
  }
121
290
  return String(err);
122
291
  }
123
- init() {
292
+ classifyStorageInitializationError(err) {
293
+ if (err instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError)
294
+ return 'record-schema-persistence-error';
295
+ if (err instanceof mongodb.MongoNetworkError)
296
+ return 'mongo-network-error';
297
+ if (err instanceof mongodb.MongoError)
298
+ return 'mongo-driver-error';
299
+ return err instanceof Error ? 'unexpected-error' : 'non-error';
300
+ }
301
+ /**
302
+ * Resolve the native driver collection behind a Waterline model. Strict
303
+ * concurrency needs `findOneAndUpdate`/`findOneAndDelete` facts that
304
+ * Waterline cannot certify, so the compare-and-set paths talk to the
305
+ * driver directly. Discovery never throws: an adapter that cannot supply a
306
+ * native collection is simply unsupported.
307
+ */
308
+ getNativeCollection(model, cacheKey) {
309
+ const cached = this[cacheKey];
310
+ if (cached)
311
+ return cached;
312
+ try {
313
+ const manager = model.getDatastore()?.manager;
314
+ if (manager && typeof manager.collection === 'function') {
315
+ this.db = manager;
316
+ this[cacheKey] = manager.collection(model.tableName);
317
+ return this[cacheKey];
318
+ }
319
+ }
320
+ catch {
321
+ // Capability discovery is deliberately non-throwing and fail-closed.
322
+ }
323
+ return undefined;
324
+ }
325
+ getNativeRecordCollection() {
326
+ return this.getNativeCollection(Record, 'recordCol');
327
+ }
328
+ getNativeTombstoneCollection() {
329
+ return this.getNativeCollection(DeletedRecord, 'deletedRecordCol');
330
+ }
331
+ getNativeRecordIdentityCollection() {
332
+ if (this.recordIdentityCol)
333
+ return this.recordIdentityCol;
334
+ try {
335
+ const manager = (this.db ?? Record.getDatastore()?.manager);
336
+ if (manager && typeof manager.collection === 'function') {
337
+ this.db = manager;
338
+ this.recordIdentityCol = manager.collection(RECORD_IDENTITY_COLLECTION);
339
+ return this.recordIdentityCol;
340
+ }
341
+ }
342
+ catch {
343
+ // Capability discovery is deliberately non-throwing and fail-closed.
344
+ }
345
+ return undefined;
346
+ }
347
+ supportsAtomicMutation(collection) {
348
+ return (typeof collection?.findOneAndUpdate === 'function' &&
349
+ typeof collection?.findOneAndDelete === 'function' &&
350
+ typeof collection?.findOne === 'function');
351
+ }
352
+ getCapabilities() {
353
+ const supported = this._requiredIndicesReady &&
354
+ this.supportsAtomicMutation(this.getNativeRecordCollection()) &&
355
+ this.supportsAtomicMutation(this.getNativeTombstoneCollection()) &&
356
+ typeof this.getNativeRecordIdentityCollection()?.findOne === 'function' &&
357
+ typeof this.getNativeRecordIdentityCollection()?.insertOne === 'function' &&
358
+ typeof this.getNativeRecordIdentityCollection()?.deleteOne === 'function' &&
359
+ typeof this.getNativeRecordCollection()?.insertOne === 'function' &&
360
+ typeof this.getNativeTombstoneCollection()?.insertOne === 'function' &&
361
+ typeof this.getNativeTombstoneCollection()?.find === 'function';
362
+ return supported ? { recordConcurrency: redbox_core_1.RECORD_STORAGE_CONCURRENCY_CAPABILITY_VERSION } : {};
363
+ }
364
+ createMutationResponse(oid, options) {
365
+ const response = new redbox_core_1.StorageMutationResponse();
366
+ response.oid = oid;
367
+ if ((0, redbox_core_1.isCanonicalSaveRequestId)(options?.requestId))
368
+ response.requestId = options.requestId;
369
+ if ((0, redbox_core_1.isRecordConcurrencyResolution)(options?.resolution))
370
+ response.resolution = options.resolution;
371
+ return response;
372
+ }
373
+ notApplied(response, reason, message = 'Record mutation was not applied') {
374
+ response.success = false;
375
+ response.applicationState = 'not-applied';
376
+ response.nonApplicationReason = reason;
377
+ response.message = message;
378
+ return response;
379
+ }
380
+ unknownMutation(response, message) {
381
+ response.success = false;
382
+ response.applicationState = 'unknown';
383
+ response.message = message;
384
+ return response;
385
+ }
386
+ /**
387
+ * Normalize the caller's precondition. Returning `null` means the response
388
+ * already carries a certified non-application: a malformed precondition is
389
+ * a caller defect, and answering it with a definite no-write is safer than
390
+ * guessing which revision was meant.
391
+ */
392
+ expectedRevision(options, response) {
393
+ const precondition = options?.precondition;
394
+ if (!precondition)
395
+ return undefined;
396
+ const { expectedRevision, requireRevision } = precondition;
397
+ if (typeof requireRevision !== 'boolean' ||
398
+ (expectedRevision === undefined ? requireRevision : !(0, redbox_core_1.isRecordRevision)(expectedRevision))) {
399
+ sails.log.error(`${this.logHeader} refusing a mutation for oid ${response.oid}: the supplied revision precondition is invalid`);
400
+ this.notApplied(response, 'capability-unavailable', 'A valid record revision is required');
401
+ return null;
402
+ }
403
+ return expectedRevision;
404
+ }
405
+ /**
406
+ * The lazy compatibility clause matches only a genuinely absent revision.
407
+ * An explicit null is corrupt state: `$inc` cannot advance it and must not
408
+ * be made to look like a safe first revision.
409
+ */
410
+ revisionSelector(expectedRevision) {
411
+ if (expectedRevision === redbox_core_1.INITIAL_RECORD_REVISION) {
412
+ // Atomic lazy compatibility for a legacy record that escaped the
413
+ // single-lift migration. The winning $inc makes a second match fail.
414
+ return { $or: [{ revision: redbox_core_1.INITIAL_RECORD_REVISION }, { revision: { $exists: false } }] };
415
+ }
416
+ if (expectedRevision !== undefined)
417
+ return { revision: expectedRevision };
418
+ // Tokenless compatibility: match anything that can still be advanced.
419
+ return { $or: [{ revision: { $lt: Number.MAX_SAFE_INTEGER } }, { revision: { $exists: false } }] };
420
+ }
421
+ mutationSelector(identity, expectedRevision) {
422
+ return { $and: [identity, this.revisionSelector(expectedRevision)] };
423
+ }
424
+ lifecycleMutationSelector(identity, expectedRevision, options) {
425
+ const selector = this.mutationSelector(identity, expectedRevision);
426
+ const predicates = selector.$and;
427
+ if (options?.lifecycle?.expectedState) {
428
+ predicates.push({ lifecycleState: options.lifecycle.expectedState });
429
+ }
430
+ if (options?.lifecycle?.operationId) {
431
+ predicates.push({ 'lifecycleOperation.operationId': options.lifecycle.operationId });
432
+ }
433
+ return selector;
434
+ }
435
+ isDuplicateKeyError(error) {
436
+ return Boolean(error && typeof error === 'object' && Number(error.code) === 11000);
437
+ }
438
+ /**
439
+ * Whether the driver fact proves that `insertOne` did not commit. Local
440
+ * argument rejection and a server command error without retry/write-
441
+ * concern ambiguity are definitive. Network, selection, timeout, and
442
+ * write-concern failures retain the reservation for later reconciliation.
443
+ */
444
+ isCertifiedCreateNonApplication(error) {
445
+ if (error instanceof mongodb.MongoInvalidArgumentError)
446
+ return true;
447
+ if (!(error instanceof mongodb.MongoServerError) || error instanceof mongodb.MongoWriteConcernError) {
448
+ return false;
449
+ }
450
+ const serverError = error;
451
+ if (serverError.writeConcernError)
452
+ return false;
453
+ if (serverError.hasErrorLabel?.('RetryableWriteError'))
454
+ return false;
455
+ if (serverError.hasErrorLabel?.('UnknownTransactionCommitResult'))
456
+ return false;
457
+ return true;
458
+ }
459
+ storedIncarnationId(record) {
460
+ const value = String(record?.incarnationId ?? '').trim();
461
+ return (0, redbox_core_1.isCanonicalSaveRequestId)(value) ? value : undefined;
462
+ }
463
+ /**
464
+ * Establish the permanent OID owner for a state that already exists. The
465
+ * ledger outlives active records and tombstones, so purge cannot reopen a
466
+ * revision-zero alias. Duplicate insertion is an ordinary concurrent
467
+ * winner; its durable identity is re-read and adopted.
468
+ */
469
+ async ensureRecordIdentity(oid, source) {
470
+ const identities = this.getNativeRecordIdentityCollection();
471
+ if (typeof identities?.findOne !== 'function' || typeof identities?.insertOne !== 'function')
472
+ return undefined;
473
+ const existing = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
474
+ if (existing === undefined)
475
+ return undefined;
476
+ const existingId = this.storedIncarnationId(existing);
477
+ if (existing !== null)
478
+ return existingId;
479
+ const incarnationId = this.storedIncarnationId(source) ?? (0, crypto_1.randomUUID)();
480
+ try {
481
+ await identities.insertOne({ redboxOid: oid, incarnationId, createdAt: new Date().toISOString() });
482
+ return incarnationId;
483
+ }
484
+ catch (error) {
485
+ if (!this.isDuplicateKeyError(error))
486
+ return undefined;
487
+ const winner = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
488
+ return winner === undefined ? undefined : this.storedIncarnationId(winner);
489
+ }
490
+ }
491
+ /** Claim a never-before-used OID. Any durable owner or active/tombstone state is a collision. */
492
+ async claimNewRecordIdentity(oid) {
493
+ const identities = this.getNativeRecordIdentityCollection();
494
+ if (typeof identities?.findOne !== 'function' ||
495
+ typeof identities?.insertOne !== 'function' ||
496
+ typeof identities?.deleteOne !== 'function')
497
+ return undefined;
498
+ const existingOwner = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
499
+ if (existingOwner === undefined)
500
+ return undefined;
501
+ if (existingOwner !== null)
502
+ return { collision: true };
503
+ // Legacy state may predate the ledger. Seed its owner before returning a
504
+ // collision so a concurrent purge cannot make the OID reusable.
505
+ const current = await this.readCurrentState(oid);
506
+ if (!current)
507
+ return undefined;
508
+ const existingState = current.active ?? current.tombstone;
509
+ if (existingState) {
510
+ return (await this.ensureRecordIdentity(oid, existingState)) ? { collision: true } : undefined;
511
+ }
512
+ const incarnationId = (0, crypto_1.randomUUID)();
513
+ try {
514
+ await identities.insertOne({ redboxOid: oid, incarnationId, createdAt: new Date().toISOString() });
515
+ return { incarnationId };
516
+ }
517
+ catch (error) {
518
+ return this.isDuplicateKeyError(error) ? { collision: true } : undefined;
519
+ }
520
+ }
521
+ /**
522
+ * Compensate an ownership claim this call made but never used.
523
+ *
524
+ * The ledger is otherwise permanent, and deliberately so: a purge must not
525
+ * let an old revision-zero tag alias a recreated incarnation. Releasing is
526
+ * only safe — and only necessary — for a row that still carries the
527
+ * incarnation this call minted and that no active record or tombstone
528
+ * refers to. That is exactly the state a create leaves behind when its
529
+ * insert never reached the collection, and without this the caller-selected
530
+ * OID would be permanently unusable with no operator recovery path. While
531
+ * this row exists its unique index prevents another ordinary create from
532
+ * becoming owner; the exact incarnation selector also cannot remove a row
533
+ * replaced during an operator recovery race.
534
+ */
535
+ async releaseUnusedRecordIdentity(oid, incarnationId) {
536
+ const identities = this.getNativeRecordIdentityCollection();
537
+ if (typeof identities?.deleteOne !== 'function')
538
+ return;
539
+ try {
540
+ const current = await this.readCurrentState(oid);
541
+ // Unobservable or still-owned state keeps the claim: a permanent row is
542
+ // always safer than one released while something still refers to it.
543
+ if (!current || current.active || current.tombstone)
544
+ return;
545
+ await identities.deleteOne({ redboxOid: oid, incarnationId });
546
+ }
547
+ catch {
548
+ sails.log.error(`${this.logHeader} record_identity_reservation_release_failed`, {
549
+ event: 'record_identity_reservation_release_failed',
550
+ outcome: 'unknown',
551
+ });
552
+ }
553
+ }
554
+ /**
555
+ * Interpret a `findOneAndUpdate`/`findOneAndDelete` result issued with
556
+ * `includeResultMetadata: false`: `null` is a certified no-match and a
557
+ * document is the committed state. Anything else is an unrecognized driver
558
+ * fact that must stay `unknown` rather than being certified either way.
559
+ */
560
+ mutationDocument(result) {
561
+ if (result === null)
562
+ return null;
563
+ if (result === undefined)
564
+ return undefined;
565
+ if (typeof result !== 'object' || Array.isArray(result))
566
+ return undefined;
567
+ return result;
568
+ }
569
+ committed(response, document, kind, expectedRevision) {
570
+ // A removal returns the pre-removal document, which may predate the
571
+ // revision backfill; an update always returns the incremented value.
572
+ const normalizedRevision = (0, redbox_core_1.isRecordRevision)(document.revision)
573
+ ? document.revision
574
+ : document.revision == null && kind === 'removed'
575
+ ? redbox_core_1.INITIAL_RECORD_REVISION
576
+ : undefined;
577
+ if (normalizedRevision === undefined) {
578
+ return this.unknownMutation(response, 'Storage returned an invalid committed revision');
579
+ }
580
+ const expectedCommittedRevision = expectedRevision === undefined
581
+ ? undefined
582
+ : kind === 'updated'
583
+ ? (0, redbox_core_1.nextRecordRevision)(expectedRevision)
584
+ : expectedRevision;
585
+ if (expectedCommittedRevision !== undefined && normalizedRevision !== expectedCommittedRevision) {
586
+ return this.unknownMutation(response, 'Storage returned an inconsistent committed revision');
587
+ }
588
+ const normalized = { ...document, revision: normalizedRevision };
589
+ response.success = true;
590
+ response.applicationState = 'applied';
591
+ response.committedRevision = normalizedRevision;
592
+ if (kind === 'removed')
593
+ response.removedRecord = normalized;
594
+ else
595
+ response.committedRecord = normalized;
596
+ return response;
597
+ }
598
+ brandIdOf(brand) {
599
+ return String(brand?.id ?? '').trim();
600
+ }
601
+ activeIdentity(brand, oid) {
602
+ const brandId = this.brandIdOf(brand);
603
+ return brandId ? { redboxOid: oid, 'metaMetadata.brandId': brandId } : { redboxOid: oid };
604
+ }
605
+ tombstoneIdentity(brand, oid) {
606
+ const brandId = this.brandIdOf(brand);
607
+ // Tombstones written before the lifecycle wrapper existed only carry the
608
+ // brand inside the embedded snapshot. A present wrapper brand remains
609
+ // authoritative: an inconsistent snapshot must never widen brand scope.
610
+ return brandId
611
+ ? {
612
+ redboxOid: oid,
613
+ $or: [
614
+ { brandId },
615
+ {
616
+ $and: [{ brandId: { $exists: false } }, { 'deletedRecordMetadata.metaMetadata.brandId': brandId }],
617
+ },
618
+ ],
619
+ }
620
+ : { redboxOid: oid };
621
+ }
622
+ static BRAND_ID_PATHS = [
623
+ 'brandId',
624
+ 'metaMetadata.brandId',
625
+ 'deletedRecordMetadata.metaMetadata.brandId',
626
+ ];
627
+ storedBrandId(record) {
628
+ for (const path of MongoStorageService.BRAND_ID_PATHS) {
629
+ const brandId = String(_.get(record, path, '') ?? '').trim();
630
+ if (brandId)
631
+ return brandId;
632
+ }
633
+ return '';
634
+ }
635
+ /**
636
+ * Reject candidate keys the driver would read as update operators or
637
+ * dotted paths. Waterline rejected them before the compare-and-set paths
638
+ * started building `$set` documents directly, and honouring them would let
639
+ * a candidate reach fields — such as the stored brand — that the explicit
640
+ * checks above deliberately guard.
641
+ */
642
+ unsafeCandidateField(candidate) {
643
+ return Object.keys(candidate).find(key => key.startsWith('$') || key.includes('.'));
644
+ }
645
+ /**
646
+ * Read the current state behind a certified no-match so the caller can be
647
+ * told why nothing was written. Cross-brand state is never returned: the
648
+ * reason alone is bounded, and callers outside the brand map it onto the
649
+ * same not-found answer an absent record produces.
650
+ */
651
+ async readCurrentState(oid) {
652
+ const records = this.getNativeRecordCollection();
653
+ const tombstones = this.getNativeTombstoneCollection();
654
+ if (typeof records?.findOne !== 'function' || typeof tombstones?.findOne !== 'function') {
655
+ return undefined;
656
+ }
657
+ const [activeResult, tombstoneResult] = await Promise.all([
658
+ records.findOne({ redboxOid: oid }),
659
+ tombstones.findOne({ redboxOid: oid }),
660
+ ]);
661
+ const active = this.mutationDocument(activeResult);
662
+ const tombstone = this.mutationDocument(tombstoneResult);
663
+ if (active === undefined || tombstone === undefined)
664
+ return undefined;
665
+ return { active, tombstone };
666
+ }
667
+ isRequestedBrand(record, requestedBrandId) {
668
+ return record !== null && (!requestedBrandId || this.storedBrandId(record) === requestedBrandId);
669
+ }
670
+ async classifyActiveNoMatch(brand, oid, expectedRevision) {
671
+ const current = await this.readCurrentState(oid);
672
+ if (!current)
673
+ return 'capability-unavailable';
674
+ const requestedBrandId = this.brandIdOf(brand);
675
+ if (current.active) {
676
+ if (!this.isRequestedBrand(current.active, requestedBrandId))
677
+ return 'brand-mismatch';
678
+ // A tokenless selector matches every advanceable revision, so a
679
+ // present in-brand record that still did not match cannot be advanced.
680
+ return expectedRevision !== undefined ? 'stale-revision' : 'capability-unavailable';
681
+ }
682
+ if (this.isRequestedBrand(current.tombstone, requestedBrandId))
683
+ return 'deleted';
684
+ return 'not-found';
685
+ }
686
+ async classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options) {
687
+ const current = await this.readCurrentState(oid);
688
+ if (!current)
689
+ return 'capability-unavailable';
690
+ const requestedBrandId = this.brandIdOf(brand);
691
+ if (current.tombstone) {
692
+ if (!this.isRequestedBrand(current.tombstone, requestedBrandId))
693
+ return 'brand-mismatch';
694
+ const currentRevision = (0, redbox_core_1.isRecordRevision)(current.tombstone.revision)
695
+ ? current.tombstone.revision
696
+ : redbox_core_1.INITIAL_RECORD_REVISION;
697
+ if (expectedRevision !== undefined && currentRevision !== expectedRevision)
698
+ return 'stale-revision';
699
+ if ((options?.lifecycle?.expectedState && current.tombstone.lifecycleState !== options.lifecycle.expectedState) ||
700
+ (options?.lifecycle?.operationId &&
701
+ _.get(current.tombstone, 'lifecycleOperation.operationId') !== options.lifecycle.operationId)) {
702
+ return 'lifecycle-conflict';
703
+ }
704
+ return 'capability-unavailable';
705
+ }
706
+ if (this.isRequestedBrand(current.active, requestedBrandId))
707
+ return 'lifecycle-conflict';
708
+ return 'not-found';
709
+ }
710
+ async init() {
124
711
  this.registerReadyHook();
125
- void this.performInit();
712
+ const initialization = this._initializationPromise ?? this.performInit();
713
+ this._initializationPromise = initialization;
714
+ try {
715
+ await initialization;
716
+ }
717
+ catch (error) {
718
+ if (this._initializationPromise === initialization) {
719
+ this._initializationPromise = undefined;
720
+ sails.log.error(`${this.logHeader} storage_initialization_failed`, {
721
+ event: 'storage_initialization_failed',
722
+ outcome: 'not-ready',
723
+ error_classification: this.classifyStorageInitializationError(error),
724
+ });
725
+ }
726
+ throw error;
727
+ }
126
728
  }
127
729
  registerReadyHook() {
128
730
  if (this._readyHookRegistered) {
@@ -130,8 +732,8 @@ var Services;
130
732
  }
131
733
  this._readyHookRegistered = true;
132
734
  const that = this;
133
- this.registerSailsHook('on', 'ready', function () {
134
- void that.performInit();
735
+ this.registerSailsHook('on', 'ready', async function () {
736
+ await that.init();
135
737
  });
136
738
  }
137
739
  async collectionExists(collectionName) {
@@ -155,7 +757,13 @@ var Services;
155
757
  }
156
758
  }
157
759
  async performInit() {
158
- if (this.recordCol && this.deletedRecordCol && this.gridFsBucket) {
760
+ if (this._requiredIndicesReady &&
761
+ this.recordCol &&
762
+ this.deletedRecordCol &&
763
+ this.recordIdentityCol &&
764
+ this.recordSchemaArtifactCol &&
765
+ this.recordSchemaReferenceCol &&
766
+ this.gridFsBucket) {
159
767
  return;
160
768
  }
161
769
  this.db = Record.getDatastore().manager;
@@ -168,9 +776,18 @@ var Services;
168
776
  }
169
777
  this.gridFsBucket = new mongodb.GridFSBucket(this.db);
170
778
  this.recordCol = this.db.collection(Record.tableName);
171
- await this.recordCol.createIndex({ "figshareSyncIntent.pending": 1, "figshareSyncIntent.readiness": 1, "figshareSyncIntent.requestedAt": 1 });
779
+ await this.recordCol.createIndex({
780
+ 'figshareSyncIntent.pending': 1,
781
+ 'figshareSyncIntent.readiness': 1,
782
+ 'figshareSyncIntent.requestedAt': 1,
783
+ });
172
784
  this.deletedRecordCol = this.db.collection(DeletedRecord.tableName);
785
+ this.recordIdentityCol = this.db.collection(RECORD_IDENTITY_COLLECTION);
786
+ this.recordSchemaArtifactCol = this.db.collection(RecordSchemaArtifact.tableName);
787
+ this.recordSchemaReferenceCol = this.db.collection(RecordSchemaReference.tableName);
173
788
  await this.createIndices(this.db);
789
+ await this.createRecordSchemaIndices();
790
+ this._requiredIndicesReady = true;
174
791
  sails.emit('hook:redbox:storage:ready');
175
792
  sails.emit('hook:redbox:datastream:ready');
176
793
  sails.log.verbose(`${this.logHeader} Ready!`);
@@ -179,16 +796,10 @@ var Services;
179
796
  sails.log.verbose(`${this.logHeader} Existing indices:`);
180
797
  const currentIndices = await db.collection(Record.tableName).indexes();
181
798
  sails.log.verbose(JSON.stringify(currentIndices));
182
- try {
183
- const storageConfig = sails.config.storage;
184
- const indices = storageConfig.mongodb?.indices ?? [];
185
- if (_.size(indices) > 0) {
186
- await db.collection(Record.tableName).createIndexes(indices);
187
- }
188
- }
189
- catch (err) {
190
- sails.log.error(`Failed to create indices:`);
191
- sails.log.error(JSON.stringify(err));
799
+ const storageConfig = sails.config.storage;
800
+ const indices = storageConfig.mongodb?.indices ?? [];
801
+ if (_.size(indices) > 0) {
802
+ await db.collection(Record.tableName).createIndexes(indices);
192
803
  }
193
804
  try {
194
805
  await db.collection(RecordAudit.tableName).createIndex({ redboxOid: 1, createdAt: 1 });
@@ -197,91 +808,1015 @@ var Services;
197
808
  sails.log.error(`Failed to create record audit index:`);
198
809
  sails.log.error(JSON.stringify(err));
199
810
  }
811
+ const deletedRecordIndices = storageConfig.mongodb?.deletedRecordIndices ?? [];
812
+ if (_.size(deletedRecordIndices) > 0) {
813
+ await db.collection(DeletedRecord.tableName).createIndexes(deletedRecordIndices);
814
+ }
815
+ const recordIdentityIndices = storageConfig.mongodb?.recordIdentityIndices ?? [
816
+ { key: { redboxOid: 1 }, unique: true },
817
+ ];
818
+ await db.collection(RECORD_IDENTITY_COLLECTION).createIndexes(recordIdentityIndices);
200
819
  }
201
- async create(_brand, record, _recordType, _user, options = {}) {
202
- sails.log.verbose(`${this.logHeader} create() -> Begin`);
820
+ async createRecordSchemaIndices() {
821
+ await this.createRequiredIndexes(this.recordSchemaArtifactCol, exports.RECORD_SCHEMA_ARTIFACT_INDEXES);
822
+ await this.createRequiredIndexes(this.recordSchemaReferenceCol, exports.RECORD_SCHEMA_REFERENCE_INDEXES);
823
+ }
824
+ async createRequiredIndexes(collection, requiredIndexes) {
825
+ let existingIndexes;
826
+ try {
827
+ existingIndexes = await collection.indexes();
828
+ }
829
+ catch (error) {
830
+ if (!isMongoNamespaceNotFoundError(error)) {
831
+ throw error;
832
+ }
833
+ existingIndexes = [];
834
+ }
835
+ const missingIndexes = [];
836
+ for (const required of requiredIndexes) {
837
+ const matchingKeys = existingIndexes.filter(existing => indexKeysEqual(existing, required));
838
+ if (matchingKeys.some(existing => indexOptionsEqual(existing, required)))
839
+ continue;
840
+ if (matchingKeys.length > 0) {
841
+ throw new Error(`Existing index ${indexDisplayName(matchingKeys[0])} has options that do not match required index ${indexDisplayName(required)}.`);
842
+ }
843
+ const matchingName = existingIndexes.find(existing => existing.name === required.name);
844
+ if (matchingName) {
845
+ throw new Error(`Existing index ${indexDisplayName(matchingName)} has keys that do not match the required definition.`);
846
+ }
847
+ missingIndexes.push(required);
848
+ }
849
+ if (missingIndexes.length > 0) {
850
+ await collection.createIndexes(missingIndexes);
851
+ }
852
+ }
853
+ recordSchemaSuccess(data) {
203
854
  const response = new redbox_core_1.StorageServiceResponse();
204
- record.redboxOid = this.getUuid();
205
- response.oid = String(record.redboxOid);
855
+ response.success = true;
856
+ response.data = data;
857
+ return response;
858
+ }
859
+ recordSchemaFailure(code, message, action, error) {
860
+ const response = new redbox_core_1.StorageServiceResponse();
861
+ response.success = false;
862
+ response.message = message;
863
+ response.details = { code };
864
+ const errorType = error instanceof Error ? error.name : typeof error;
865
+ sails.log.error(`${this.logHeader} ${action} failed (${code}; ${errorType})`);
866
+ return response;
867
+ }
868
+ recordSchemaFailureFromError(action, error) {
869
+ if (error instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError) {
870
+ return this.recordSchemaFailure(error.code, error.message, action, error);
871
+ }
872
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema storage operation failed.', action, error);
873
+ }
874
+ throwRecordSchemaReadFailure(action, error) {
875
+ if (error instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError) {
876
+ throw error;
877
+ }
878
+ const errorType = error instanceof Error ? error.name : typeof error;
879
+ sails.log.error(`${this.logHeader} ${action} failed (${errorType})`);
880
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema storage read failed.');
881
+ }
882
+ artifactCollection() {
883
+ if (!this.recordSchemaArtifactCol) {
884
+ this.db = this.db ?? RecordSchemaArtifact.getDatastore().manager;
885
+ this.recordSchemaArtifactCol = this.db.collection(RecordSchemaArtifact.tableName);
886
+ }
887
+ return this.recordSchemaArtifactCol;
888
+ }
889
+ referenceCollection() {
890
+ if (!this.recordSchemaReferenceCol) {
891
+ this.db = this.db ?? RecordSchemaReference.getDatastore().manager;
892
+ this.recordSchemaReferenceCol = this.db.collection(RecordSchemaReference.tableName);
893
+ }
894
+ return this.recordSchemaReferenceCol;
895
+ }
896
+ recordSchemaReferenceDocument(reference, now) {
897
+ const document = {
898
+ referenceKey: reference.referenceKey,
899
+ digest: reference.digest,
900
+ kind: reference.kind,
901
+ brand: reference.brand,
902
+ portal: reference.portal,
903
+ schemaKind: reference.schemaKind,
904
+ recordType: reference.recordType,
905
+ operation: reference.operation,
906
+ createdAt: now,
907
+ updatedAt: now,
908
+ };
909
+ if (reference.kind === 'save' || (reference.kind === 'grant' && reference.schemaKind === 'update')) {
910
+ document.oid = reference.oid;
911
+ }
912
+ if (reference.kind === 'pin') {
913
+ document.owner = reference.owner;
914
+ document.purpose = reference.purpose;
915
+ if (reference.expiresAt !== undefined) {
916
+ document.expiresAt = reference.expiresAt;
917
+ }
918
+ }
919
+ return document;
920
+ }
921
+ async existingArtifactMatches(existing, artifact) {
922
+ return (0, recordSchemaPersistence_1.artifactContentIdentity)((0, recordSchemaPersistence_1.artifactModelFromDocument)(existing)) === (0, recordSchemaPersistence_1.artifactContentIdentity)(artifact);
923
+ }
924
+ async putRecordSchemaArtifact(artifact) {
206
925
  try {
207
- sails.log.verbose(`${this.logHeader} Saving to DB...`);
208
- delete record.figshareSyncIntent;
209
- record.recordVersion = 1;
210
- if (options.figshareIntent) {
211
- const { saveToken, readiness, intents } = options.figshareIntent;
212
- const requestedAt = new Date().toISOString();
213
- record.figshareSyncIntent = { ...options.figshareIntent, generation: 1, pending: true, requestedAt, saves: [{ saveToken, readiness, requestedAt, intents }] };
926
+ const validated = (0, recordSchemaPersistence_1.validateRecordSchemaArtifactInput)(artifact);
927
+ const collection = this.artifactCollection();
928
+ const existing = await collection.findOne({ digest: validated.digest });
929
+ if (existing) {
930
+ if (await this.existingArtifactMatches(existing, validated)) {
931
+ return this.recordSchemaSuccess({ digest: validated.digest });
932
+ }
933
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.DIGEST_COLLISION, 'Record schema artifact integrity check failed.', 'putRecordSchemaArtifact');
214
934
  }
215
- await Record.create(record);
216
- response.success = true;
935
+ const now = new Date();
936
+ try {
937
+ await collection.insertOne({
938
+ digest: validated.digest,
939
+ document: validated.document,
940
+ contractFormat: validated.contractFormat,
941
+ completeness: validated.completeness,
942
+ byteLength: validated.byteLength,
943
+ createdAt: now,
944
+ updatedAt: now,
945
+ });
946
+ }
947
+ catch (error) {
948
+ if (!(0, recordSchemaPersistence_1.isDuplicateKeyError)(error)) {
949
+ throw error;
950
+ }
951
+ const racedArtifact = await collection.findOne({ digest: validated.digest });
952
+ if (!racedArtifact || !(await this.existingArtifactMatches(racedArtifact, validated))) {
953
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.DIGEST_COLLISION, 'Record schema artifact integrity check failed.', 'putRecordSchemaArtifact', error);
954
+ }
955
+ }
956
+ return this.recordSchemaSuccess({ digest: validated.digest });
957
+ }
958
+ catch (error) {
959
+ return this.recordSchemaFailureFromError('putRecordSchemaArtifact', error);
960
+ }
961
+ }
962
+ async getRecordSchemaArtifact(digest) {
963
+ const validatedDigest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(digest);
964
+ try {
965
+ const document = await this.artifactCollection().findOne({ digest: validatedDigest });
966
+ return document ? (0, recordSchemaPersistence_1.artifactModelFromDocument)(document) : null;
967
+ }
968
+ catch (error) {
969
+ const errorType = error instanceof Error ? error.name : typeof error;
970
+ sails.log.error(`${this.logHeader} getRecordSchemaArtifact failed (${errorType})`);
971
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema artifact read failed.');
972
+ }
973
+ }
974
+ async listRecordSchemaArtifacts(query) {
975
+ try {
976
+ if (!query || typeof query !== 'object') {
977
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_ARTIFACT, 'Record schema artifact query is required.');
978
+ }
979
+ const limit = this.recordSchemaQueryLimit(query.limit);
980
+ const criteria = {};
981
+ if (query.afterDigest !== undefined) {
982
+ criteria.digest = { $gt: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.afterDigest) };
983
+ }
984
+ const documents = await this.artifactCollection()
985
+ .find(criteria, { projection: { _id: 0, digest: 1, createdAt: 1 } })
986
+ .sort({ digest: 1 })
987
+ .limit(limit)
988
+ .toArray();
989
+ return documents.map(document => ({
990
+ digest: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(document.digest),
991
+ createdAt: this.storedRecordSchemaDate(document.createdAt, 'artifact createdAt'),
992
+ }));
993
+ }
994
+ catch (error) {
995
+ return this.throwRecordSchemaReadFailure('listRecordSchemaArtifacts', error);
996
+ }
997
+ }
998
+ async touchRecordSchemaArtifact(digest) {
999
+ try {
1000
+ const validatedDigest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(digest);
1001
+ const result = await this.artifactCollection().updateOne({ digest: validatedDigest }, { $set: { lastAccessedAt: new Date() } });
1002
+ if (result.matchedCount !== 1) {
1003
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema artifact was not found.', 'touchRecordSchemaArtifact');
1004
+ }
1005
+ return this.recordSchemaSuccess({ digest: validatedDigest });
1006
+ }
1007
+ catch (error) {
1008
+ return this.recordSchemaFailureFromError('touchRecordSchemaArtifact', error);
1009
+ }
1010
+ }
1011
+ async storeRecordSchemaReference(reference, now) {
1012
+ const collection = this.referenceCollection();
1013
+ const existing = await collection.findOne({ referenceKey: reference.referenceKey });
1014
+ if (existing) {
1015
+ if ((0, recordSchemaPersistence_1.referenceContentIdentity)((0, recordSchemaPersistence_1.referenceModelFromDocument)(existing)) !== (0, recordSchemaPersistence_1.referenceContentIdentity)(reference)) {
1016
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.REFERENCE_KEY_COLLISION, 'Record schema reference integrity check failed.', 'putRecordSchemaReference');
1017
+ }
1018
+ await collection.updateOne({ referenceKey: reference.referenceKey }, { $set: { updatedAt: now } });
1019
+ return this.recordSchemaSuccess({ referenceKey: reference.referenceKey });
1020
+ }
1021
+ try {
1022
+ await collection.insertOne(this.recordSchemaReferenceDocument(reference, now));
1023
+ }
1024
+ catch (error) {
1025
+ if (!(0, recordSchemaPersistence_1.isDuplicateKeyError)(error)) {
1026
+ throw error;
1027
+ }
1028
+ const racedReference = await collection.findOne({ referenceKey: reference.referenceKey });
1029
+ if (!racedReference ||
1030
+ (0, recordSchemaPersistence_1.referenceContentIdentity)((0, recordSchemaPersistence_1.referenceModelFromDocument)(racedReference)) !== (0, recordSchemaPersistence_1.referenceContentIdentity)(reference)) {
1031
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.REFERENCE_KEY_COLLISION, 'Record schema reference integrity check failed.', 'putRecordSchemaReference', error);
1032
+ }
1033
+ await collection.updateOne({ referenceKey: reference.referenceKey }, { $set: { updatedAt: now } });
1034
+ }
1035
+ return this.recordSchemaSuccess({ referenceKey: reference.referenceKey });
1036
+ }
1037
+ async putRecordSchemaReference(reference) {
1038
+ try {
1039
+ const validated = (0, recordSchemaPersistence_1.validateRecordSchemaReferenceInput)(reference);
1040
+ const now = new Date();
1041
+ const artifactCriteria = { digest: validated.digest };
1042
+ const artifact = await this.artifactCollection().findOne(artifactCriteria, {
1043
+ projection: { _id: 1 },
1044
+ });
1045
+ if (!artifact) {
1046
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema reference target was not found.', 'putRecordSchemaReference');
1047
+ }
1048
+ const response = await this.storeRecordSchemaReference(validated, now);
1049
+ if (!response.success) {
1050
+ return response;
1051
+ }
1052
+ // Reference writes and retention deletion share this lock protocol.
1053
+ // A writer that raced with deletion removes its own temporary row and
1054
+ // fails, so no successful reference can become orphaned.
1055
+ const artifactAfterWrite = await this.artifactCollection().findOne({ digest: validated.digest }, { projection: { _id: 1 } });
1056
+ if (!artifactAfterWrite) {
1057
+ await this.referenceCollection().deleteOne({
1058
+ referenceKey: validated.referenceKey,
1059
+ digest: validated.digest,
1060
+ });
1061
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema reference target was not found.', 'putRecordSchemaReference');
1062
+ }
1063
+ return response;
1064
+ }
1065
+ catch (error) {
1066
+ return this.recordSchemaFailureFromError('putRecordSchemaReference', error);
1067
+ }
1068
+ }
1069
+ recordSchemaQueryString(value, field, maximumLength = 512) {
1070
+ if (typeof value !== 'string' || value.length === 0 || value !== value.trim() || value.length > maximumLength) {
1071
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, `Record schema reference query ${field} is invalid.`);
1072
+ }
1073
+ return value;
1074
+ }
1075
+ recordSchemaQueryLimit(value) {
1076
+ if (typeof value !== 'number' ||
1077
+ !Number.isSafeInteger(value) ||
1078
+ value <= 0 ||
1079
+ value > recordSchemaPersistence_1.RECORD_SCHEMA_REFERENCE_QUERY_LIMIT_MAX) {
1080
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, `Record schema reference query limit must be between 1 and ${recordSchemaPersistence_1.RECORD_SCHEMA_REFERENCE_QUERY_LIMIT_MAX}.`);
1081
+ }
1082
+ return value;
1083
+ }
1084
+ async findRecordSchemaGrantForAuthorization(query) {
1085
+ try {
1086
+ if (!query || typeof query !== 'object') {
1087
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query is required.');
1088
+ }
1089
+ const schemaKind = query.schemaKind;
1090
+ if (schemaKind !== 'create' && schemaKind !== 'update') {
1091
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query schemaKind is invalid.');
1092
+ }
1093
+ if (!Array.isArray(query.roleNames)) {
1094
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query roleNames is invalid.');
1095
+ }
1096
+ const roleNames = [
1097
+ ...new Set(query.roleNames.map(role => this.recordSchemaQueryString(role, 'roleNames'))),
1098
+ ].sort();
1099
+ const criteria = {
1100
+ digest: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.digest),
1101
+ kind: 'grant',
1102
+ brand: this.recordSchemaQueryString(query.brand, 'brand'),
1103
+ portal: this.recordSchemaQueryString(query.portal, 'portal'),
1104
+ schemaKind,
1105
+ recordType: this.recordSchemaQueryString(query.recordType, 'recordType'),
1106
+ operation: this.recordSchemaQueryString(query.operation, 'operation', 64),
1107
+ };
1108
+ if (query.afterReferenceKey !== undefined) {
1109
+ const afterReferenceKey = this.recordSchemaQueryString(query.afterReferenceKey, 'afterReferenceKey');
1110
+ if (!RecordSchemaReference_1.RECORD_SCHEMA_REFERENCE_KEY_PATTERN.test(afterReferenceKey)) {
1111
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query afterReferenceKey is invalid.');
1112
+ }
1113
+ criteria.referenceKey = { $gt: afterReferenceKey };
1114
+ }
1115
+ if (schemaKind === 'create') {
1116
+ const grant = await this.referenceCollection().findOne(criteria, {
1117
+ sort: { referenceKey: 1 },
1118
+ hint: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY,
1119
+ maxTimeMS: exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS,
1120
+ });
1121
+ return grant ? (0, recordSchemaPersistence_1.referenceModelFromDocument)(grant) : null;
1122
+ }
1123
+ const username = this.recordSchemaQueryString(query.username, 'username');
1124
+ const recordBrandId = this.recordSchemaQueryString(query.recordBrandId, 'recordBrandId');
1125
+ const editConditions = [{ 'authorization.edit': username }];
1126
+ if (roleNames.length > 0) {
1127
+ editConditions.push({ 'authorization.editRoles': { $in: roleNames } });
1128
+ }
1129
+ const grants = await this.referenceCollection()
1130
+ .aggregate([
1131
+ { $match: criteria },
1132
+ {
1133
+ $lookup: {
1134
+ from: Record.tableName,
1135
+ localField: 'oid',
1136
+ foreignField: 'redboxOid',
1137
+ pipeline: [
1138
+ {
1139
+ $match: {
1140
+ 'metaMetadata.brandId': recordBrandId,
1141
+ $or: editConditions,
1142
+ },
1143
+ },
1144
+ ],
1145
+ as: 'authorizedRecords',
1146
+ },
1147
+ },
1148
+ { $match: { 'authorizedRecords.0': { $exists: true } } },
1149
+ { $sort: { referenceKey: 1 } },
1150
+ { $limit: 1 },
1151
+ ], { hint: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY })
1152
+ .maxTimeMS(exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS)
1153
+ .toArray();
1154
+ return grants[0] ? (0, recordSchemaPersistence_1.referenceModelFromDocument)(grants[0]) : null;
1155
+ }
1156
+ catch (error) {
1157
+ return this.throwRecordSchemaReadFailure('findRecordSchemaGrantForAuthorization', error);
1158
+ }
1159
+ }
1160
+ async listRecordSchemaReferences(query) {
1161
+ try {
1162
+ if (!query || typeof query !== 'object') {
1163
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query is required.');
1164
+ }
1165
+ const limit = this.recordSchemaQueryLimit(query.limit);
1166
+ const criteria = {};
1167
+ if (query.digest !== undefined) {
1168
+ criteria.digest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.digest);
1169
+ }
1170
+ if (query.kind !== undefined) {
1171
+ if (!['grant', 'save', 'pin'].includes(query.kind)) {
1172
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query kind is invalid.');
1173
+ }
1174
+ criteria.kind = query.kind;
1175
+ }
1176
+ if (query.schemaKind !== undefined) {
1177
+ if (query.schemaKind !== 'create' && query.schemaKind !== 'update') {
1178
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query schemaKind is invalid.');
1179
+ }
1180
+ criteria.schemaKind = query.schemaKind;
1181
+ }
1182
+ for (const [field, value] of [
1183
+ ['brand', query.brand],
1184
+ ['portal', query.portal],
1185
+ ['recordType', query.recordType],
1186
+ ['oid', query.oid],
1187
+ ['operation', query.operation],
1188
+ ['owner', query.owner],
1189
+ ]) {
1190
+ if (value !== undefined) {
1191
+ criteria[field] = this.recordSchemaQueryString(value, field);
1192
+ }
1193
+ }
1194
+ if (query.includeExpiredPins !== undefined && typeof query.includeExpiredPins !== 'boolean') {
1195
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query includeExpiredPins must be boolean.');
1196
+ }
1197
+ if (query.includeExpiredPins !== true) {
1198
+ criteria.$and = [
1199
+ {
1200
+ $or: [{ kind: { $ne: 'pin' } }, { expiresAt: { $exists: false } }, { expiresAt: { $gt: new Date() } }],
1201
+ },
1202
+ ];
1203
+ }
1204
+ if (query.afterReferenceKey !== undefined) {
1205
+ const afterReferenceKey = this.recordSchemaQueryString(query.afterReferenceKey, 'afterReferenceKey');
1206
+ if (!RecordSchemaReference_1.RECORD_SCHEMA_REFERENCE_KEY_PATTERN.test(afterReferenceKey)) {
1207
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query afterReferenceKey is invalid.');
1208
+ }
1209
+ criteria.referenceKey = { $gt: afterReferenceKey };
1210
+ }
1211
+ const documents = await this.referenceCollection()
1212
+ .find(criteria)
1213
+ .sort({ referenceKey: 1 })
1214
+ .limit(limit)
1215
+ .toArray();
1216
+ return documents.map(recordSchemaPersistence_1.referenceModelFromDocument);
1217
+ }
1218
+ catch (error) {
1219
+ return this.throwRecordSchemaReadFailure('listRecordSchemaReferences', error);
1220
+ }
1221
+ }
1222
+ storedRecordSchemaDate(value, field) {
1223
+ const date = value instanceof Date ? value : new Date(String(value ?? ''));
1224
+ if (Number.isNaN(date.getTime())) {
1225
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, `Stored record schema ${field} is invalid.`);
1226
+ }
1227
+ return date;
1228
+ }
1229
+ async create(_brand, record, _recordType, _user, options) {
1230
+ sails.log.verbose(`${this.logHeader} create() -> Begin`);
1231
+ // RecordsService may pre-assign the OID so attachment journal rows can
1232
+ // be prepared before the primary metadata commit. Preserve it when
1233
+ // supplied, while retaining the historical generated-OID behavior.
1234
+ record.redboxOid = record.redboxOid ?? this.getUuid();
1235
+ const response = this.createMutationResponse(String(record.redboxOid), options);
1236
+ const precondition = options?.precondition;
1237
+ // A create has no prior revision to compare, so a caller asserting one is
1238
+ // addressing a record that this call cannot be. An empty precondition is
1239
+ // accepted so callers can pass one normalized options object everywhere.
1240
+ if (precondition && (precondition.requireRevision || precondition.expectedRevision !== undefined)) {
1241
+ return this.notApplied(response, 'lifecycle-conflict', 'Record creation does not accept an existing revision');
1242
+ }
1243
+ const serverRecord = _.cloneDeep(record);
1244
+ // The storage boundary owns creation revision regardless of anything a
1245
+ // request candidate supplied.
1246
+ serverRecord.revision = redbox_core_1.INITIAL_RECORD_REVISION;
1247
+ serverRecord.recordVersion = 1;
1248
+ delete serverRecord.figshareSyncIntent;
1249
+ if (options?.figshareIntent) {
1250
+ const { saveToken, readiness, intents } = options.figshareIntent;
1251
+ const requestedAt = new Date().toISOString();
1252
+ serverRecord.figshareSyncIntent = {
1253
+ ...options.figshareIntent,
1254
+ generation: 1,
1255
+ pending: true,
1256
+ requestedAt,
1257
+ saves: [{ saveToken, readiness, requestedAt, intents }],
1258
+ };
1259
+ }
1260
+ _.unset(serverRecord, '_id');
1261
+ _.unset(serverRecord, 'id');
1262
+ _.unset(serverRecord, 'incarnationId');
1263
+ _.unset(serverRecord, 'lifecycleOperationId');
1264
+ const records = this.getNativeRecordCollection();
1265
+ if (typeof records?.insertOne !== 'function') {
1266
+ return this.notApplied(response, 'capability-unavailable', 'Atomic active record creation is unavailable');
1267
+ }
1268
+ let identity;
1269
+ try {
1270
+ identity = await this.claimNewRecordIdentity(String(record.redboxOid));
1271
+ }
1272
+ catch {
1273
+ return this.unknownMutation(response, 'Durable record identity ownership could not be confirmed');
1274
+ }
1275
+ if (!identity) {
1276
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1277
+ }
1278
+ if ('collision' in identity) {
1279
+ return this.notApplied(response, 'lifecycle-conflict', 'The record OID already has a durable incarnation');
1280
+ }
1281
+ const now = new Date().toISOString();
1282
+ const claimedIncarnationId = identity.incarnationId;
1283
+ serverRecord.incarnationId = claimedIncarnationId;
1284
+ serverRecord.dateCreated = serverRecord.dateCreated ?? now;
1285
+ serverRecord.lastSaveDate = now;
1286
+ try {
1287
+ sails.log.verbose(`${this.logHeader} Saving to DB...`);
1288
+ await records.insertOne(serverRecord);
1289
+ this.committed(response, serverRecord, 'updated');
217
1290
  sails.log.verbose(`${this.logHeader} Record created...`);
218
1291
  }
219
1292
  catch (err) {
220
- sails.log.error(`${this.logHeader} Failed to create Record:`);
221
- sails.log.error(JSON.stringify(err));
222
- response.success = false;
223
- response.message = this.getErrorMessage(err);
1293
+ if (this.isDuplicateKeyError(err)) {
1294
+ // Another writer owns this OID's state, so its ledger row is correct.
1295
+ return this.notApplied(response, 'lifecycle-conflict', 'The record OID already exists');
1296
+ }
1297
+ sails.log.error(`${this.logHeader} record_create_outcome_unknown`, {
1298
+ event: 'record_create_outcome_unknown',
1299
+ error_type: err instanceof Error ? err.name : 'unknown',
1300
+ });
1301
+ let observed;
1302
+ try {
1303
+ observed = await this.readCurrentState(String(record.redboxOid));
1304
+ }
1305
+ catch {
1306
+ observed = undefined;
1307
+ }
1308
+ if (observed?.active && this.storedIncarnationId(observed.active) === claimedIncarnationId) {
1309
+ return this.committed(response, observed.active, 'updated');
1310
+ }
1311
+ // A dispatched/ambiguous failure may still materialize later, so only
1312
+ // a definitive driver rejection is eligible for compensating release.
1313
+ if (this.isCertifiedCreateNonApplication(err)) {
1314
+ await this.releaseUnusedRecordIdentity(String(record.redboxOid), claimedIncarnationId);
1315
+ }
1316
+ this.unknownMutation(response, 'Record creation could not be confirmed');
224
1317
  return response;
225
1318
  }
226
- sails.log.verbose(JSON.stringify(response));
227
1319
  sails.log.verbose(`${this.logHeader} create() -> End`);
228
1320
  return response;
229
1321
  }
230
- async updateMeta(brand, oid, record, user, options = {}) {
231
- const response = new redbox_core_1.StorageServiceResponse();
232
- response.oid = oid;
233
- try {
234
- _.unset(record, 'dateCreated');
235
- _.unset(record, 'lastSaveDate');
236
- _.unset(record, '_id');
237
- _.unset(record, 'id');
238
- delete record.figshareSyncIntent;
239
- delete record.recordVersion;
240
- const filter = { redboxOid: oid };
241
- if (options.expectedVersion != null)
242
- filter.recordVersion = options.expectedVersion === 0 ? { $in: [0, null] } : options.expectedVersion;
243
- const assignments = Object.fromEntries(Object.entries(record).map(([key, value]) => [key, { $literal: value }]));
244
- assignments.lastSaveDate = { $literal: new Date().toISOString() };
245
- assignments.recordVersion = { $add: [{ $ifNull: ['$recordVersion', 0] }, 1] };
246
- if (options.figshareIntent) {
1322
+ async updateMeta(brand, oid, record, user, options) {
1323
+ const response = this.createMutationResponse(oid, options);
1324
+ const expectedRevision = this.expectedRevision(options, response);
1325
+ if (expectedRevision === null)
1326
+ return response;
1327
+ if (expectedRevision === Number.MAX_SAFE_INTEGER) {
1328
+ return this.notApplied(response, 'capability-unavailable', 'The record revision cannot be advanced safely');
1329
+ }
1330
+ const collection = this.getNativeRecordCollection();
1331
+ if (!this.supportsAtomicMutation(collection)) {
1332
+ return this.notApplied(response, 'capability-unavailable', 'The storage adapter cannot perform an atomic record revision update');
1333
+ }
1334
+ const candidate = _.cloneDeep(record);
1335
+ // Identity, creation, and revision are owned by storage, never by the
1336
+ // candidate; lastSaveDate is reissued with the committing write.
1337
+ for (const field of [
1338
+ '_id',
1339
+ 'id',
1340
+ 'redboxOid',
1341
+ 'revision',
1342
+ 'recordVersion',
1343
+ 'figshareSyncIntent',
1344
+ 'incarnationId',
1345
+ 'lifecycleOperationId',
1346
+ 'dateCreated',
1347
+ 'lastSaveDate',
1348
+ ]) {
1349
+ _.unset(candidate, field);
1350
+ }
1351
+ if (this.unsafeCandidateField(candidate) !== undefined) {
1352
+ sails.log.error(`${this.logHeader} refusing an update for oid ${oid}: unsupported candidate field name`);
1353
+ return this.notApplied(response, 'capability-unavailable', 'Record candidate contains an unsupported field');
1354
+ }
1355
+ const activeBrandId = this.brandIdOf(brand);
1356
+ const candidateSuppliesMetaMetadata = Object.prototype.hasOwnProperty.call(candidate, 'metaMetadata');
1357
+ const candidateBrandId = String(_.get(candidate, 'metaMetadata.brandId', '') ?? '').trim();
1358
+ if (activeBrandId && candidateSuppliesMetaMetadata && candidateBrandId !== activeBrandId) {
1359
+ return this.notApplied(response, 'brand-mismatch', 'Record was not found');
1360
+ }
1361
+ const update = options?.figshareIntent
1362
+ ? (() => {
247
1363
  const intent = options.figshareIntent;
248
1364
  const requestedAt = new Date().toISOString();
249
- const save = { saveToken: intent.saveToken, readiness: intent.readiness, requestedAt, intents: intent.intents };
1365
+ const save = {
1366
+ saveToken: intent.saveToken,
1367
+ readiness: intent.readiness,
1368
+ requestedAt,
1369
+ intents: intent.intents,
1370
+ };
1371
+ const assignments = Object.fromEntries(Object.entries(candidate).map(([key, value]) => [key, { $literal: value }]));
1372
+ assignments.lastSaveDate = { $literal: requestedAt };
1373
+ assignments.revision = { $add: [{ $ifNull: ['$revision', redbox_core_1.INITIAL_RECORD_REVISION] }, 1] };
1374
+ assignments.recordVersion = { $add: [{ $ifNull: ['$recordVersion', 0] }, 1] };
250
1375
  assignments.figshareSyncIntent = {
251
1376
  $mergeObjects: [
252
1377
  { $literal: { ...intent, pending: true, requestedAt } },
253
- { generation: { $add: [{ $ifNull: ['$figshareSyncIntent.generation', 0] }, 1] },
254
- saves: { $concatArrays: [priorFigshareSaves, [{ $literal: save }]] } }
255
- ]
1378
+ {
1379
+ generation: { $add: [{ $ifNull: ['$figshareSyncIntent.generation', 0] }, 1] },
1380
+ saves: { $concatArrays: [priorFigshareSaves, [{ $literal: save }]] },
1381
+ },
1382
+ ],
256
1383
  };
257
- }
258
- const result = await this.recordCol.findOneAndUpdate(filter, [{ $set: assignments }, ...(options.figshareIntent ? [deriveFigshareIntent] : [])], { returnDocument: 'after', includeResultMetadata: false });
259
- if (!result && options.expectedVersion != null)
260
- throw new redbox_core_1.RecordWriteConflict();
261
- response.success = result != null;
262
- if (result)
263
- response.metadata = { recordVersion: result.recordVersion, figshareSyncIntent: result.figshareSyncIntent };
1384
+ return [{ $set: assignments }, deriveFigshareIntent];
1385
+ })()
1386
+ : {
1387
+ $set: { ...candidate, lastSaveDate: new Date().toISOString() },
1388
+ $inc: { revision: 1, recordVersion: 1 },
1389
+ };
1390
+ const selector = this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision);
1391
+ if (options?.expectedVersion != null)
1392
+ selector.recordVersion = options.expectedVersion === 0 ? { $in: [0, null] } : options.expectedVersion;
1393
+ const result = await this.commitConditionalMutation({
1394
+ response,
1395
+ kind: 'updated',
1396
+ dispatch: () => collection.findOneAndUpdate(selector, update, { returnDocument: 'after', includeResultMetadata: false }),
1397
+ classify: () => this.classifyActiveNoMatch(brand, oid, expectedRevision),
1398
+ expectedRevision,
1399
+ onDispatchError: err => {
1400
+ sails.log.error(`${this.logHeader} updateMeta() failed for oid ${oid}: ${this.getErrorMessage(err)}`);
1401
+ sails.log.error(`${this.logHeader} Failed to save update to MongoDB: ${JSON.stringify({
1402
+ error: err,
1403
+ response,
1404
+ brand,
1405
+ oid,
1406
+ user,
1407
+ })}`);
1408
+ },
1409
+ });
1410
+ if (options?.expectedVersion != null && result.applicationState === 'not-applied')
1411
+ throw new redbox_core_1.RecordWriteConflict();
1412
+ return result;
1413
+ }
1414
+ /**
1415
+ * Dispatch one atomic conditional mutation and turn its single driver fact
1416
+ * into a mutation response.
1417
+ *
1418
+ * The three outcomes are deliberately distinct: a returned document is an
1419
+ * applied commit, `null` certifies that the selector matched nothing and
1420
+ * therefore that no write happened, and anything else — including a throw
1421
+ * after dispatch — stays `unknown`. A failed follow-up classification only
1422
+ * costs the precise reason; it never turns a certified no-match into a
1423
+ * write, and it never issues one.
1424
+ */
1425
+ async commitConditionalMutation(operation) {
1426
+ const { response, kind, dispatch, classify, expectedRevision, onDispatchError } = operation;
1427
+ let document;
1428
+ try {
1429
+ document = this.mutationDocument(await dispatch());
264
1430
  }
265
1431
  catch (err) {
266
- if (err instanceof redbox_core_1.RecordWriteConflict)
267
- throw err;
268
- const errorMessage = this.getErrorMessage(err);
269
- sails.log.error(`${this.logHeader} updateMeta() failed for oid ${oid}: ${errorMessage}`);
270
- sails.log.error(`${this.logHeader} Failed to save update to MongoDB: ${JSON.stringify({
271
- error: err,
272
- response,
273
- brand,
274
- oid,
275
- record,
276
- user,
277
- })}`);
278
- response.success = false;
279
- response.message = errorMessage;
1432
+ onDispatchError?.(err);
1433
+ return this.unknownMutation(response, this.getErrorMessage(err));
280
1434
  }
281
- return response;
1435
+ if (document === undefined) {
1436
+ return this.unknownMutation(response, 'Storage returned an unrecognized mutation result');
1437
+ }
1438
+ if (document !== null) {
1439
+ return this.committed(response, document, kind, expectedRevision);
1440
+ }
1441
+ try {
1442
+ return this.notApplied(response, await classify());
1443
+ }
1444
+ catch (err) {
1445
+ sails.log.error(`${this.logHeader} could not classify a certified no-match for oid ${response.oid}: ` +
1446
+ this.getErrorMessage(err));
1447
+ return this.notApplied(response, 'capability-unavailable');
1448
+ }
1449
+ }
1450
+ async removeActiveRecord(brand, oid, options) {
1451
+ const response = this.createMutationResponse(oid, options);
1452
+ const expectedRevision = this.expectedRevision(options, response);
1453
+ if (expectedRevision === null)
1454
+ return response;
1455
+ const collection = this.getNativeRecordCollection();
1456
+ if (!this.supportsAtomicMutation(collection)) {
1457
+ return this.notApplied(response, 'capability-unavailable', 'Atomic active record removal is unavailable');
1458
+ }
1459
+ let current;
1460
+ try {
1461
+ current = this.mutationDocument(await collection.findOne(this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision)));
1462
+ if (current && !(await this.ensureRecordIdentity(oid, current))) {
1463
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1464
+ }
1465
+ }
1466
+ catch (error) {
1467
+ return this.unknownMutation(response, this.getErrorMessage(error));
1468
+ }
1469
+ return this.commitConditionalMutation({
1470
+ response,
1471
+ kind: 'removed',
1472
+ dispatch: () => collection.findOneAndDelete(this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision), {
1473
+ includeResultMetadata: false,
1474
+ }),
1475
+ classify: () => this.classifyActiveNoMatch(brand, oid, expectedRevision),
1476
+ expectedRevision,
1477
+ });
1478
+ }
1479
+ async createTombstone(brand, oid, record, options) {
1480
+ const response = this.createMutationResponse(oid, options);
1481
+ const expectedRevision = this.expectedRevision(options, response);
1482
+ if (expectedRevision === null)
1483
+ return response;
1484
+ if (expectedRevision === undefined || !(0, redbox_core_1.isCanonicalSaveRequestId)(options?.lifecycle?.operationId)) {
1485
+ return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle intent ownership is required');
1486
+ }
1487
+ const collection = this.getNativeTombstoneCollection();
1488
+ if (!this.supportsAtomicMutation(collection) || typeof collection.insertOne !== 'function') {
1489
+ return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone creation is unavailable');
1490
+ }
1491
+ const candidate = _.cloneDeep(record);
1492
+ for (const field of ['_id', 'id'])
1493
+ _.unset(candidate, field);
1494
+ const operation = candidate.lifecycleOperation;
1495
+ const targetRevision = (0, redbox_core_1.nextRecordRevision)(expectedRevision);
1496
+ const expectedState = options.lifecycle.expectedState;
1497
+ if (candidate.redboxOid !== oid ||
1498
+ candidate.revision !== targetRevision ||
1499
+ !(0, redbox_core_1.isDeletedRecordLifecycleState)(candidate.lifecycleState) ||
1500
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(operation) ||
1501
+ (expectedState !== 'delete-pending' && expectedState !== 'purge-pending') ||
1502
+ candidate.lifecycleState !== expectedState ||
1503
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(candidate.lifecycleState, operation.kind) ||
1504
+ operation.operationId !== options.lifecycle.operationId ||
1505
+ operation.sourceRevision !== expectedRevision ||
1506
+ operation.targetRevision !== targetRevision) {
1507
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle intent is invalid');
1508
+ }
1509
+ const requestedBrandId = this.brandIdOf(brand);
1510
+ const candidateBrandId = String(candidate.brandId ?? '').trim();
1511
+ const snapshotBrandId = String(_.get(candidate, 'deletedRecordMetadata.metaMetadata.brandId', '') ?? '').trim();
1512
+ if (requestedBrandId && (candidateBrandId !== requestedBrandId || snapshotBrandId !== requestedBrandId)) {
1513
+ return this.notApplied(response, 'brand-mismatch', 'Tombstone was not found');
1514
+ }
1515
+ if (!candidate.deletedRecordMetadata ||
1516
+ typeof candidate.deletedRecordMetadata !== 'object' ||
1517
+ Array.isArray(candidate.deletedRecordMetadata) ||
1518
+ _.get(candidate, 'deletedRecordMetadata.redboxOid') !== oid) {
1519
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone record snapshot is invalid');
1520
+ }
1521
+ _.unset(candidate, 'deletedRecordMetadata.revision');
1522
+ let incarnationId;
1523
+ try {
1524
+ incarnationId = await this.ensureRecordIdentity(oid, candidate.deletedRecordMetadata);
1525
+ }
1526
+ catch (error) {
1527
+ return this.unknownMutation(response, this.getErrorMessage(error));
1528
+ }
1529
+ if (!incarnationId) {
1530
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1531
+ }
1532
+ const suppliedIncarnationId = this.storedIncarnationId(candidate) ?? this.storedIncarnationId(candidate.deletedRecordMetadata);
1533
+ if (suppliedIncarnationId && suppliedIncarnationId !== incarnationId) {
1534
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone incarnation identity diverged');
1535
+ }
1536
+ candidate.incarnationId = incarnationId;
1537
+ candidate.deletedRecordMetadata.incarnationId = incarnationId;
1538
+ try {
1539
+ await collection.insertOne(candidate);
1540
+ return this.committed(response, candidate, 'updated', expectedRevision);
1541
+ }
1542
+ catch (error) {
1543
+ if (!this.isDuplicateKeyError(error)) {
1544
+ return this.unknownMutation(response, this.getErrorMessage(error));
1545
+ }
1546
+ try {
1547
+ const existing = this.mutationDocument(await collection.findOne({ redboxOid: oid }));
1548
+ if (existing === undefined)
1549
+ return this.unknownMutation(response, 'Tombstone ownership could not be observed');
1550
+ if (existing === null)
1551
+ return this.notApplied(response, 'lifecycle-conflict');
1552
+ if (!this.isRequestedBrand(existing, requestedBrandId))
1553
+ return this.notApplied(response, 'brand-mismatch');
1554
+ const existingOperation = existing.lifecycleOperation;
1555
+ if (!(0, redbox_core_1.isRecordRevision)(existing.revision) ||
1556
+ existing.revision < targetRevision ||
1557
+ !(0, redbox_core_1.isDeletedRecordLifecycleState)(existing.lifecycleState) ||
1558
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(existingOperation) ||
1559
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(existing.lifecycleState, existingOperation.kind) ||
1560
+ existingOperation.operationId !== options.lifecycle.operationId ||
1561
+ existingOperation.kind !== operation.kind) {
1562
+ return this.notApplied(response, 'lifecycle-conflict');
1563
+ }
1564
+ return this.committed(response, existing, 'updated');
1565
+ }
1566
+ catch (readError) {
1567
+ return this.unknownMutation(response, this.getErrorMessage(readError));
1568
+ }
1569
+ }
1570
+ }
1571
+ async updateTombstone(brand, oid, record, options) {
1572
+ const response = this.createMutationResponse(oid, options);
1573
+ const expectedRevision = this.expectedRevision(options, response);
1574
+ if (expectedRevision === null)
1575
+ return response;
1576
+ if (expectedRevision === Number.MAX_SAFE_INTEGER) {
1577
+ return this.notApplied(response, 'capability-unavailable', 'The tombstone revision cannot be advanced safely');
1578
+ }
1579
+ const collection = this.getNativeTombstoneCollection();
1580
+ if (!this.supportsAtomicMutation(collection)) {
1581
+ return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone update is unavailable');
1582
+ }
1583
+ if (expectedRevision === undefined || !options?.lifecycle?.expectedState) {
1584
+ return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle state and revision are required');
1585
+ }
1586
+ const candidate = _.cloneDeep(record);
1587
+ for (const field of ['_id', 'id', 'redboxOid', 'revision', 'incarnationId', 'dateDeleted'])
1588
+ _.unset(candidate, field);
1589
+ if (this.unsafeCandidateField(candidate) !== undefined) {
1590
+ sails.log.error(`${this.logHeader} refusing a tombstone update for oid ${oid}: unsupported candidate field`);
1591
+ return this.notApplied(response, 'capability-unavailable', 'Tombstone candidate contains an unsupported field');
1592
+ }
1593
+ if (!(0, redbox_core_1.isDeletedRecordLifecycleState)(candidate.lifecycleState)) {
1594
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle state is invalid');
1595
+ }
1596
+ const operation = candidate.lifecycleOperation;
1597
+ if (!(0, redbox_core_1.isDeletedRecordLifecycleOperation)(operation) ||
1598
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(candidate.lifecycleState, operation.kind) ||
1599
+ operation.sourceRevision > expectedRevision ||
1600
+ operation.targetRevision !== (0, redbox_core_1.nextRecordRevision)(expectedRevision) ||
1601
+ (options.lifecycle.operationId !== undefined && operation.operationId !== options.lifecycle.operationId)) {
1602
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle operation is invalid');
1603
+ }
1604
+ if (candidate.deletedRecordMetadata !== undefined &&
1605
+ (candidate.deletedRecordMetadata === null ||
1606
+ typeof candidate.deletedRecordMetadata !== 'object' ||
1607
+ Array.isArray(candidate.deletedRecordMetadata))) {
1608
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone record snapshot is invalid');
1609
+ }
1610
+ if (candidate.deletedRecordMetadata && typeof candidate.deletedRecordMetadata === 'object') {
1611
+ // The wrapper is the sole current lifecycle revision authority. Source
1612
+ // lineage lives in lifecycleOperation.sourceRevision.
1613
+ _.unset(candidate, 'deletedRecordMetadata.revision');
1614
+ }
1615
+ try {
1616
+ const current = this.mutationDocument(await collection.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1617
+ if (current) {
1618
+ const incarnationId = await this.ensureRecordIdentity(oid, current);
1619
+ if (!incarnationId) {
1620
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1621
+ }
1622
+ if (candidate.deletedRecordMetadata && typeof candidate.deletedRecordMetadata === 'object') {
1623
+ candidate.deletedRecordMetadata.incarnationId = incarnationId;
1624
+ }
1625
+ }
1626
+ }
1627
+ catch (error) {
1628
+ return this.unknownMutation(response, this.getErrorMessage(error));
1629
+ }
1630
+ const activeBrandId = this.brandIdOf(brand);
1631
+ const candidateBrandId = String(candidate.brandId ?? '').trim();
1632
+ const candidateSuppliesBrandId = Object.prototype.hasOwnProperty.call(candidate, 'brandId');
1633
+ const candidateSuppliesSnapshot = Object.prototype.hasOwnProperty.call(candidate, 'deletedRecordMetadata');
1634
+ const candidateSnapshotBrandId = String(_.get(candidate, 'deletedRecordMetadata.metaMetadata.brandId', '') ?? '').trim();
1635
+ if (activeBrandId &&
1636
+ ((candidateSuppliesBrandId && candidateBrandId !== activeBrandId) ||
1637
+ (candidateSuppliesSnapshot && candidateSnapshotBrandId !== activeBrandId))) {
1638
+ return this.notApplied(response, 'brand-mismatch', 'Tombstone was not found');
1639
+ }
1640
+ return this.commitConditionalMutation({
1641
+ response,
1642
+ kind: 'updated',
1643
+ dispatch: () => collection.findOneAndUpdate(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options), { $set: candidate, $inc: { revision: 1 } }, { returnDocument: 'after', includeResultMetadata: false }),
1644
+ classify: () => this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options),
1645
+ expectedRevision,
1646
+ });
1647
+ }
1648
+ async removeTombstone(brand, oid, options) {
1649
+ const response = this.createMutationResponse(oid, options);
1650
+ const expectedRevision = this.expectedRevision(options, response);
1651
+ if (expectedRevision === null)
1652
+ return response;
1653
+ if (expectedRevision === undefined ||
1654
+ !options?.lifecycle?.expectedState ||
1655
+ !(0, redbox_core_1.isCanonicalSaveRequestId)(options.lifecycle.operationId)) {
1656
+ return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle removal ownership is required');
1657
+ }
1658
+ const collection = this.getNativeTombstoneCollection();
1659
+ if (!this.supportsAtomicMutation(collection)) {
1660
+ return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone removal is unavailable');
1661
+ }
1662
+ try {
1663
+ const current = this.mutationDocument(await collection.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1664
+ if (current && !(await this.ensureRecordIdentity(oid, current))) {
1665
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1666
+ }
1667
+ }
1668
+ catch (error) {
1669
+ return this.unknownMutation(response, this.getErrorMessage(error));
1670
+ }
1671
+ return this.commitConditionalMutation({
1672
+ response,
1673
+ kind: 'removed',
1674
+ dispatch: () => collection.findOneAndDelete(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options), { includeResultMetadata: false }),
1675
+ classify: () => this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options),
1676
+ expectedRevision,
1677
+ });
1678
+ }
1679
+ async createActiveRecordFromTombstone(brand, oid, record, options) {
1680
+ const response = this.createMutationResponse(oid, options);
1681
+ const expectedRevision = this.expectedRevision(options, response);
1682
+ const operationId = options?.lifecycle?.operationId;
1683
+ if (expectedRevision === null ||
1684
+ expectedRevision === undefined ||
1685
+ !(0, redbox_core_1.isCanonicalSaveRequestId)(operationId) ||
1686
+ (options?.lifecycle?.expectedState !== 'restore-pending' &&
1687
+ options?.lifecycle?.expectedState !== 'recovery-required')) {
1688
+ return this.notApplied(response, 'capability-unavailable', 'Exact restore ownership is required');
1689
+ }
1690
+ const records = this.getNativeRecordCollection();
1691
+ const tombstones = this.getNativeTombstoneCollection();
1692
+ if (!this.supportsAtomicMutation(records) ||
1693
+ !this.supportsAtomicMutation(tombstones) ||
1694
+ typeof records.insertOne !== 'function') {
1695
+ return this.notApplied(response, 'capability-unavailable', 'Atomic restore creation is unavailable');
1696
+ }
1697
+ let claimed;
1698
+ try {
1699
+ claimed = this.mutationDocument(await tombstones.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1700
+ }
1701
+ catch (error) {
1702
+ return this.unknownMutation(response, this.getErrorMessage(error));
1703
+ }
1704
+ if (claimed === undefined)
1705
+ return this.unknownMutation(response, 'Restore ownership could not be observed');
1706
+ if (claimed === null) {
1707
+ const reason = await this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options).catch(() => 'capability-unavailable');
1708
+ return this.notApplied(response, reason);
1709
+ }
1710
+ const targetRevision = (0, redbox_core_1.nextRecordRevision)(expectedRevision);
1711
+ const claimedOperation = claimed.lifecycleOperation;
1712
+ const claimedSnapshot = claimed.deletedRecordMetadata;
1713
+ if (!(0, redbox_core_1.isDeletedRecordLifecycleState)(claimed.lifecycleState) ||
1714
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(claimedOperation) ||
1715
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(claimed.lifecycleState, claimedOperation.kind) ||
1716
+ claimedOperation.kind !== 'restore' ||
1717
+ claimedOperation.operationId !== operationId ||
1718
+ claimedOperation.targetRevision !== expectedRevision ||
1719
+ !claimedSnapshot ||
1720
+ typeof claimedSnapshot !== 'object' ||
1721
+ Array.isArray(claimedSnapshot)) {
1722
+ return this.notApplied(response, 'lifecycle-conflict', 'Claimed restore state is invalid');
1723
+ }
1724
+ let incarnationId;
1725
+ try {
1726
+ incarnationId = await this.ensureRecordIdentity(oid, claimed);
1727
+ }
1728
+ catch (error) {
1729
+ return this.unknownMutation(response, this.getErrorMessage(error));
1730
+ }
1731
+ if (!incarnationId) {
1732
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1733
+ }
1734
+ const claimedIncarnationId = this.storedIncarnationId(claimed) ?? this.storedIncarnationId(claimedSnapshot);
1735
+ if (claimedIncarnationId && claimedIncarnationId !== incarnationId) {
1736
+ return this.notApplied(response, 'lifecycle-conflict', 'Restore incarnation identity diverged');
1737
+ }
1738
+ const restoredInput = _.cloneDeep(record);
1739
+ const restored = _.cloneDeep(claimedSnapshot);
1740
+ for (const field of ['_id', 'id', 'revision', 'incarnationId', 'lifecycleOperationId', 'lastSaveDate']) {
1741
+ _.unset(restored, field);
1742
+ }
1743
+ const requestedBrandId = this.brandIdOf(brand);
1744
+ if (restoredInput.redboxOid !== oid ||
1745
+ restored.redboxOid !== oid ||
1746
+ (requestedBrandId &&
1747
+ (String(_.get(restoredInput, 'metaMetadata.brandId', '') ?? '').trim() !== requestedBrandId ||
1748
+ String(_.get(restored, 'metaMetadata.brandId', '') ?? '').trim() !== requestedBrandId))) {
1749
+ return this.notApplied(response, 'brand-mismatch', 'Record was not found');
1750
+ }
1751
+ if (this.unsafeCandidateField(restored) !== undefined) {
1752
+ return this.notApplied(response, 'lifecycle-conflict', 'Restored record contains an unsupported field');
1753
+ }
1754
+ const candidate = {
1755
+ ...restored,
1756
+ redboxOid: oid,
1757
+ revision: targetRevision,
1758
+ incarnationId,
1759
+ lifecycleOperationId: operationId,
1760
+ lastSaveDate: new Date().toISOString(),
1761
+ };
1762
+ try {
1763
+ await records.insertOne(candidate);
1764
+ return this.committed(response, candidate, 'updated', expectedRevision);
1765
+ }
1766
+ catch (error) {
1767
+ if (!this.isDuplicateKeyError(error)) {
1768
+ return this.unknownMutation(response, this.getErrorMessage(error));
1769
+ }
1770
+ try {
1771
+ const existing = this.mutationDocument(await records.findOne({ redboxOid: oid }));
1772
+ if (existing === undefined)
1773
+ return this.unknownMutation(response, 'Restored active state could not be observed');
1774
+ if (existing === null)
1775
+ return this.notApplied(response, 'lifecycle-conflict');
1776
+ if (!this.isRequestedBrand(existing, requestedBrandId))
1777
+ return this.notApplied(response, 'brand-mismatch');
1778
+ if (existing.lifecycleOperationId !== operationId ||
1779
+ !(0, redbox_core_1.isRecordRevision)(existing.revision) ||
1780
+ existing.revision < targetRevision) {
1781
+ return this.notApplied(response, 'lifecycle-conflict');
1782
+ }
1783
+ return this.committed(response, existing, 'updated');
1784
+ }
1785
+ catch (readError) {
1786
+ return this.unknownMutation(response, this.getErrorMessage(readError));
1787
+ }
1788
+ }
1789
+ }
1790
+ async getTombstone(brand, oid) {
1791
+ if (!oid.trim())
1792
+ throw new Error(`${this.logHeader} getTombstone() -> refusing to search using an empty OID`);
1793
+ const collection = this.getNativeTombstoneCollection();
1794
+ if (typeof collection?.findOne !== 'function')
1795
+ throw new Error('Tombstone reads are unavailable');
1796
+ const result = this.mutationDocument(await collection.findOne(this.tombstoneIdentity(brand, oid)));
1797
+ if (result === undefined)
1798
+ throw new Error('Storage returned an unrecognized tombstone result');
1799
+ return result;
1800
+ }
1801
+ async getLifecycleTombstones(states, limit = 100) {
1802
+ const normalizedStates = states.filter(redbox_core_1.isDeletedRecordLifecycleState);
1803
+ if (normalizedStates.length === 0)
1804
+ return [];
1805
+ const collection = this.getNativeTombstoneCollection();
1806
+ if (typeof collection?.find !== 'function')
1807
+ throw new Error('Lifecycle recovery scans are unavailable');
1808
+ const boundedLimit = Math.max(1, Math.min(Number.isSafeInteger(limit) ? limit : 100, 1000));
1809
+ return (await collection
1810
+ .find({ lifecycleState: { $in: normalizedStates } })
1811
+ .limit(boundedLimit)
1812
+ .toArray());
282
1813
  }
283
1814
  async scanFigshareRecords(afterOid, limit) {
284
- return this.recordCol.find({ redboxOid: { $gt: afterOid } }).sort({ redboxOid: 1 }).limit(limit).toArray();
1815
+ return this.recordCol
1816
+ .find({ redboxOid: { $gt: afterOid } })
1817
+ .sort({ redboxOid: 1 })
1818
+ .limit(limit)
1819
+ .toArray();
285
1820
  }
286
1821
  async findFigshareArticleRecords(path, articleId) {
287
1822
  (0, redbox_core_1.assertRecordFieldPaths)({ [path]: articleId }, [path]);
@@ -289,35 +1824,104 @@ var Services;
289
1824
  }
290
1825
  async setRecordFields(oid, fields, expectedVersion, allowedPaths) {
291
1826
  (0, redbox_core_1.assertRecordFieldPaths)(fields, allowedPaths);
292
- const result = await this.recordCol.findOneAndUpdate({ redboxOid: oid, recordVersion: expectedVersion === 0 ? { $in: [0, null] } : expectedVersion }, {
293
- $set: { ...fields, lastSaveDate: new Date().toISOString() }, $inc: { recordVersion: 1 }
1827
+ const result = await this.recordCol.findOneAndUpdate({
1828
+ ...this.mutationSelector({ redboxOid: oid }, undefined),
1829
+ recordVersion: expectedVersion === 0 ? { $in: [0, null] } : expectedVersion,
1830
+ }, {
1831
+ $set: { ...fields, lastSaveDate: new Date().toISOString() },
1832
+ $inc: { recordVersion: 1, revision: 1 },
294
1833
  }, { returnDocument: 'after', includeResultMetadata: false });
295
1834
  return { updated: result != null, recordVersion: result?.recordVersion };
296
1835
  }
297
1836
  async readyFigshareIntent(oid, saveToken) {
298
- const result = await this.recordCol.updateOne({ redboxOid: oid, ...figshareSaveFilter(saveToken) }, [{ $set: { 'figshareSyncIntent.saves': { $map: { input: priorFigshareSaves, as: 'save',
299
- in: { $cond: [{ $eq: ['$$save.saveToken', { $literal: saveToken }] }, { $mergeObjects: ['$$save', { readiness: 'ready' }] }, '$$save'] } } } } }, deriveFigshareIntent]);
1837
+ const result = await this.recordCol.updateOne({ redboxOid: oid, ...figshareSaveFilter(saveToken) }, [
1838
+ {
1839
+ $set: {
1840
+ 'figshareSyncIntent.saves': {
1841
+ $map: {
1842
+ input: priorFigshareSaves,
1843
+ as: 'save',
1844
+ in: {
1845
+ $cond: [
1846
+ { $eq: ['$$save.saveToken', { $literal: saveToken }] },
1847
+ { $mergeObjects: ['$$save', { readiness: 'ready' }] },
1848
+ '$$save',
1849
+ ],
1850
+ },
1851
+ },
1852
+ },
1853
+ },
1854
+ },
1855
+ deriveFigshareIntent,
1856
+ ]);
300
1857
  return result.matchedCount === 1;
301
1858
  }
302
1859
  async pendingFigshareIntents(limit, afterOid = '') {
303
- return this.recordCol.find({ redboxOid: { $gt: afterOid }, 'figshareSyncIntent.pending': true, 'figshareSyncIntent.readiness': 'ready' })
304
- .sort({ redboxOid: 1 }).limit(limit).toArray();
1860
+ return this.recordCol
1861
+ .find({
1862
+ redboxOid: { $gt: afterOid },
1863
+ 'figshareSyncIntent.pending': true,
1864
+ 'figshareSyncIntent.readiness': 'ready',
1865
+ })
1866
+ .sort({ redboxOid: 1 })
1867
+ .limit(limit)
1868
+ .toArray();
305
1869
  }
306
1870
  async abandonFigshareIntent(oid, saveToken) {
307
1871
  // Drop only this save. Other merged saves keep their own policies and readiness.
308
- const result = await this.recordCol.updateOne({ redboxOid: oid, ...figshareSaveFilter(saveToken, 'initialising') }, [{ $set: {
309
- 'figshareSyncIntent.saves': { $filter: { input: priorFigshareSaves, as: 'save', cond: { $ne: ['$$save.saveToken', { $literal: saveToken }] } } }
310
- } }, deriveFigshareIntent]);
1872
+ const result = await this.recordCol.updateOne({ redboxOid: oid, ...figshareSaveFilter(saveToken, 'initialising') }, [
1873
+ {
1874
+ $set: {
1875
+ 'figshareSyncIntent.saves': {
1876
+ $filter: {
1877
+ input: priorFigshareSaves,
1878
+ as: 'save',
1879
+ cond: { $ne: ['$$save.saveToken', { $literal: saveToken }] },
1880
+ },
1881
+ },
1882
+ },
1883
+ },
1884
+ deriveFigshareIntent,
1885
+ ]);
311
1886
  return result.matchedCount === 1;
312
1887
  }
313
1888
  async recoverStaleFigshareIntents(staleBefore) {
314
- const result = await this.recordCol.updateMany({ 'figshareSyncIntent.pending': true, 'figshareSyncIntent.readiness': 'initialising', $or: [
315
- { 'figshareSyncIntent.saves': { $elemMatch: { readiness: 'initialising', requestedAt: { $lt: staleBefore } } } },
316
- { 'figshareSyncIntent.saves': { $exists: false }, 'figshareSyncIntent.requestedAt': { $lt: staleBefore } }
317
- ] }, [{ $set: { 'figshareSyncIntent.saves': { $map: { input: priorFigshareSaves, as: 'save', in: { $cond: [
318
- { $and: [{ $eq: ['$$save.readiness', 'initialising'] }, { $lt: ['$$save.requestedAt', { $literal: staleBefore }] }] },
319
- { $mergeObjects: ['$$save', { readiness: 'ready' }] }, '$$save'
320
- ] } } } } }, deriveFigshareIntent]);
1889
+ const result = await this.recordCol.updateMany({
1890
+ 'figshareSyncIntent.pending': true,
1891
+ 'figshareSyncIntent.readiness': 'initialising',
1892
+ $or: [
1893
+ {
1894
+ 'figshareSyncIntent.saves': {
1895
+ $elemMatch: { readiness: 'initialising', requestedAt: { $lt: staleBefore } },
1896
+ },
1897
+ },
1898
+ { 'figshareSyncIntent.saves': { $exists: false }, 'figshareSyncIntent.requestedAt': { $lt: staleBefore } },
1899
+ ],
1900
+ }, [
1901
+ {
1902
+ $set: {
1903
+ 'figshareSyncIntent.saves': {
1904
+ $map: {
1905
+ input: priorFigshareSaves,
1906
+ as: 'save',
1907
+ in: {
1908
+ $cond: [
1909
+ {
1910
+ $and: [
1911
+ { $eq: ['$$save.readiness', 'initialising'] },
1912
+ { $lt: ['$$save.requestedAt', { $literal: staleBefore }] },
1913
+ ],
1914
+ },
1915
+ { $mergeObjects: ['$$save', { readiness: 'ready' }] },
1916
+ '$$save',
1917
+ ],
1918
+ },
1919
+ },
1920
+ },
1921
+ },
1922
+ },
1923
+ deriveFigshareIntent,
1924
+ ]);
321
1925
  return result.modifiedCount;
322
1926
  }
323
1927
  async acknowledgeFigshareIntent(oid, generation) {
@@ -345,60 +1949,56 @@ var Services;
345
1949
  sails.log.verbose(`${this.logHeader} finding deleted record: `);
346
1950
  sails.log.verbose(JSON.stringify(criteria));
347
1951
  const deletedRecord = await DeletedRecord.findOne(criteria);
348
- return (deletedRecord?.deletedRecordMetadata ?? null);
1952
+ if (!deletedRecord?.deletedRecordMetadata)
1953
+ return null;
1954
+ const revision = (0, redbox_core_1.isRecordRevision)(deletedRecord.revision) ? deletedRecord.revision : redbox_core_1.INITIAL_RECORD_REVISION;
1955
+ // Tombstone wrapper revision is authoritative even when a legacy
1956
+ // embedded snapshot still contains a historical active revision.
1957
+ return { ...deletedRecord.deletedRecordMetadata, revision };
349
1958
  }
350
1959
  async createBatch(type, data, harvestIdFldName) {
351
- const response = new redbox_core_1.StorageServiceResponse();
352
- response.message = '';
353
- let failFlag = false;
354
- _.each(data, async (dataItem) => {
1960
+ const response = new redbox_core_1.StorageMutationResponse();
1961
+ let notAppliedCount = 0;
1962
+ let unknownCount = 0;
1963
+ for (const [rowIndex, dataItem] of data.entries()) {
355
1964
  dataItem.harvestId = _.get(dataItem, harvestIdFldName, '');
356
1965
  _.set(dataItem, 'metaMetadata.type', type);
357
1966
  try {
358
- await this.create(null, dataItem, null, null);
1967
+ const rowResponse = await this.create(null, dataItem, null, null);
1968
+ if (rowResponse.applicationState === 'applied' && rowResponse.success === true) {
1969
+ continue;
1970
+ }
1971
+ if (rowResponse.applicationState === 'not-applied') {
1972
+ notAppliedCount += 1;
1973
+ sails.log.error(`${this.logHeader} createBatch row was not applied`, {
1974
+ event: 'record_batch_create_row_not_applied',
1975
+ row_index: rowIndex,
1976
+ });
1977
+ continue;
1978
+ }
1979
+ unknownCount += 1;
1980
+ sails.log.error(`${this.logHeader} createBatch row outcome is unknown`, {
1981
+ event: 'record_batch_create_row_unknown',
1982
+ row_index: rowIndex,
1983
+ });
359
1984
  }
360
- catch (err) {
361
- failFlag = true;
362
- sails.log.error(`${this.logHeader} Failed createBatch entry: `);
363
- sails.log.error(JSON.stringify(dataItem));
364
- sails.log.error(`${this.logHeader} Failed createBatch error: `);
365
- sails.log.error(JSON.stringify(err));
366
- response.message = `${response.message}, ${err.message}`;
1985
+ catch {
1986
+ unknownCount += 1;
1987
+ sails.log.error(`${this.logHeader} createBatch row outcome is unknown`, {
1988
+ event: 'record_batch_create_row_unknown',
1989
+ row_index: rowIndex,
1990
+ });
367
1991
  }
368
- });
369
- response.success = failFlag === false;
1992
+ }
1993
+ response.success = notAppliedCount === 0 && unknownCount === 0;
1994
+ response.applicationState = unknownCount > 0 ? 'unknown' : notAppliedCount > 0 ? 'not-applied' : 'applied';
1995
+ response.message = response.success
1996
+ ? ''
1997
+ : `Batch create incomplete (${notAppliedCount} not applied, ${unknownCount} unknown).`;
370
1998
  return response;
371
1999
  }
372
- provideUserAccessAndRemovePendingAccess(oid, userid, pendingValue) {
373
- const batchFn = async () => {
374
- const metadata = (await this.getMeta(oid));
375
- const pendingEditArray = _.get(metadata, 'authorization.editPending', []);
376
- const editArray = _.get(metadata, 'authorization.edit', []);
377
- const pendingEditArrayFiltered = pendingEditArray.filter(value => value !== pendingValue);
378
- const pendingEditFound = pendingEditArray.length > pendingEditArrayFiltered.length;
379
- if (pendingEditFound && !editArray.includes(userid)) {
380
- editArray.push(userid);
381
- }
382
- _.set(metadata, 'authorization.editPending', pendingEditArrayFiltered);
383
- _.set(metadata, 'authorization.edit', editArray);
384
- const pendingViewArray = _.get(metadata, 'authorization.viewPending', []);
385
- const viewArray = _.get(metadata, 'authorization.view', []);
386
- const pendingViewArrayFiltered = pendingViewArray.filter(value => value !== pendingValue);
387
- const pendingViewFound = pendingViewArray.length > pendingViewArrayFiltered.length;
388
- if (pendingViewFound && !viewArray.includes(userid)) {
389
- viewArray.push(userid);
390
- }
391
- _.set(metadata, 'authorization.viewPending', pendingViewArrayFiltered);
392
- _.set(metadata, 'authorization.view', viewArray);
393
- try {
394
- await this.updateMeta(null, oid, metadata);
395
- }
396
- catch (err) {
397
- sails.log.error(`${this.logHeader} Failed to update on 'provideUserAccessAndRemovePendingAccess': `);
398
- sails.log.error(JSON.stringify(err));
399
- }
400
- };
401
- batchFn();
2000
+ async provideUserAccessAndRemovePendingAccess(oid, _userid, _pendingValue) {
2001
+ return this.notApplied(this.createMutationResponse(oid), 'capability-unavailable', 'Permission rewrites require the authoritative RecordsService mutation pipeline');
402
2002
  }
403
2003
  async getRelatedRecords(oid, brand, options = {}) {
404
2004
  const mappingContext = await this.walkRelatedRecords(String(oid ?? ''), brand, options);
@@ -417,8 +2017,8 @@ var Services;
417
2017
  const record = (await this.getMeta(normalizedOid));
418
2018
  const currentRecordTypeName = String(recordTypeName ?? _.get(record, 'metaMetadata.type', '')).trim();
419
2019
  const maxDepth = typeof options.depth === 'number' && options.depth >= 0 ? options.depth : Number.POSITIVE_INFINITY;
420
- const includeRecordTypes = new Set((options.includeRecordTypes ?? []).map((value) => String(value ?? '').trim()).filter(Boolean));
421
- const includeRelationIds = new Set((options.includeRelationIds ?? []).map((value) => String(value ?? '').trim()).filter(Boolean));
2020
+ const includeRecordTypes = new Set((options.includeRecordTypes ?? []).map(value => String(value ?? '').trim()).filter(Boolean));
2021
+ const includeRelationIds = new Set((options.includeRelationIds ?? []).map(value => String(value ?? '').trim()).filter(Boolean));
422
2022
  if (_.isEmpty(mappingContext)) {
423
2023
  mappingContext = {
424
2024
  rootOid: normalizedOid,
@@ -513,17 +2113,13 @@ var Services;
513
2113
  extractRelationshipLocalValues(record, relationship) {
514
2114
  const rawValue = _.get(record, relationship.localField, relationship.localField === 'redboxOid' ? record.redboxOid : undefined);
515
2115
  const values = Array.isArray(rawValue) ? rawValue : [rawValue];
516
- return values
517
- .map((value) => String(value ?? '').trim())
518
- .filter((value) => value !== '');
2116
+ return values.map(value => String(value ?? '').trim()).filter(value => value !== '');
519
2117
  }
520
2118
  buildRelationshipCriteria(relationship, localValues) {
521
2119
  const criteria = {
522
2120
  'metaMetadata.type': relationship.recordType,
523
2121
  };
524
- criteria[relationship.foreignField] = localValues.length === 1
525
- ? localValues[0]
526
- : { in: localValues };
2122
+ criteria[relationship.foreignField] = localValues.length === 1 ? localValues[0] : { in: localValues };
527
2123
  return criteria;
528
2124
  }
529
2125
  async findRelatedRecords(relationship, criteria) {
@@ -531,8 +2127,9 @@ var Services;
531
2127
  if (relationship.cardinality === 'one' && typeof query.sort === 'function' && typeof query.limit === 'function') {
532
2128
  const chainedQuery = query.sort('redboxOid ASC');
533
2129
  if (typeof chainedQuery.limit === 'function') {
534
- return await chainedQuery.limit(1)
535
- .meta({ enableExperimentalDeepTargets: true });
2130
+ return await chainedQuery.limit(1).meta({
2131
+ enableExperimentalDeepTargets: true,
2132
+ });
536
2133
  }
537
2134
  }
538
2135
  const relatedRecords = await query.meta({ enableExperimentalDeepTargets: true });
@@ -563,46 +2160,14 @@ var Services;
563
2160
  targetRecordType: relationship.recordType,
564
2161
  };
565
2162
  }
566
- async delete(oid, permanentlyDelete = false) {
567
- const response = new redbox_core_1.StorageServiceResponse();
568
- try {
569
- if (permanentlyDelete) {
570
- const datastreams = await this.listDatastreams(oid, null);
571
- if (_.size(datastreams) > 0) {
572
- _.each(datastreams, async (file) => {
573
- sails.log.verbose(`Deleting:`);
574
- sails.log.verbose(JSON.stringify(file));
575
- try {
576
- await this.gridFsBucket.delete(file['_id']);
577
- }
578
- catch (err) {
579
- sails.log.error(`Error deleting: ${file['_id']}`);
580
- sails.log.error(JSON.stringify(err));
581
- }
582
- });
583
- }
584
- }
585
- else {
586
- const record = (await this.getMeta(oid));
587
- const deletedRecord = {
588
- redboxOid: record.redboxOid,
589
- deletedRecordMetadata: record,
590
- };
591
- await DeletedRecord.create(deletedRecord);
592
- }
593
- await Record.destroyOne({ redboxOid: oid });
594
- response.success = true;
595
- }
596
- catch (err) {
597
- sails.log.error(`${this.logHeader} Failed to delete record: ${oid}`);
598
- sails.log.error(JSON.stringify(err));
599
- response.success = false;
600
- response.message = err.message;
601
- }
602
- return response;
2163
+ async delete(oid, _permanentlyDelete = false, options) {
2164
+ return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Record deletion requires staged lifecycle orchestration');
603
2165
  }
604
2166
  async updateNotificationLog(oid, record, options) {
605
2167
  if (super.metTriggerCondition(oid, record, options) == 'true') {
2168
+ if (_.get(options, 'saveRecord', false)) {
2169
+ return this.notApplied(this.createMutationResponse(oid), 'capability-unavailable', 'Notification writes require the authoritative RecordsService mutation pipeline');
2170
+ }
606
2171
  sails.log.verbose(`${this.logHeader} Updating notification log for oid: ${oid}`);
607
2172
  const logName = _.get(options, 'logName', null);
608
2173
  if (logName) {
@@ -623,16 +2188,6 @@ var Services;
623
2188
  sails.log.verbose(`======== Notification log updates =========`);
624
2189
  sails.log.verbose(JSON.stringify(record));
625
2190
  sails.log.verbose(`======== End update =========`);
626
- if (_.get(options, 'saveRecord', false)) {
627
- try {
628
- await this.updateMeta(null, oid, record, null);
629
- }
630
- catch (err) {
631
- sails.log.error(`${this.logHeader} Failed to update notification log of ${oid}:`);
632
- sails.log.error(JSON.stringify(err));
633
- throw err;
634
- }
635
- }
636
2191
  }
637
2192
  else {
638
2193
  sails.log.verbose(`Notification log name: '${options.name}', for oid: ${oid}, not running, condition not met: ${options.triggerCondition}`);
@@ -653,13 +2208,21 @@ var Services;
653
2208
  return -1;
654
2209
  }
655
2210
  }
656
- else if (direction !== null && typeof direction === 'object' && !Array.isArray(direction) &&
657
- '$meta' in direction && typeof direction.$meta === 'string') {
2211
+ else if (direction !== null &&
2212
+ typeof direction === 'object' &&
2213
+ !Array.isArray(direction) &&
2214
+ '$meta' in direction &&
2215
+ typeof direction.$meta === 'string') {
658
2216
  return { $meta: direction.$meta };
659
2217
  }
660
2218
  throw new redbox_core_1.RBValidationError({
661
2219
  message: 'Invalid record sort direction',
662
- displayErrors: [{ status: '400', detail: 'Sort direction must be 1, -1, asc, desc, ascending, descending, or a $meta expression.' }],
2220
+ displayErrors: [
2221
+ {
2222
+ status: '400',
2223
+ detail: 'Sort direction must be 1, -1, asc, desc, ascending, descending, or a $meta expression.',
2224
+ },
2225
+ ],
663
2226
  });
664
2227
  }
665
2228
  getRecordSort(sort, secondarySort) {
@@ -679,21 +2242,27 @@ var Services;
679
2242
  const [field, direction = '-1'] = parts;
680
2243
  parsed = { [field]: direction };
681
2244
  }
682
- if (parsed === null || typeof parsed !== 'object' ||
683
- (Array.isArray(parsed) && !parsed.every(entry => Array.isArray(entry) && entry.length === 2 && typeof entry[0] === 'string' && entry[0].length > 0))) {
2245
+ if (parsed === null ||
2246
+ typeof parsed !== 'object' ||
2247
+ (Array.isArray(parsed) &&
2248
+ !parsed.every(entry => Array.isArray(entry) && entry.length === 2 && typeof entry[0] === 'string' && entry[0].length > 0))) {
684
2249
  throw new redbox_core_1.RBValidationError({
685
2250
  message: 'Invalid record sort expression',
686
2251
  displayErrors: [{ status: '400', detail: 'Sort must be an object or an array of [field, direction] pairs.' }],
687
2252
  });
688
2253
  }
689
- const fields = Object.fromEntries((Array.isArray(parsed) ? parsed : Object.entries(parsed))
690
- .map(([field, direction]) => [field, this.getSortDirection(direction)]));
2254
+ const fields = Object.fromEntries((Array.isArray(parsed) ? parsed : Object.entries(parsed)).map(([field, direction]) => [
2255
+ field,
2256
+ this.getSortDirection(direction),
2257
+ ]));
691
2258
  if (!_.isEmpty(secondarySort)) {
692
2259
  const parts = secondarySort.split(':');
693
2260
  if (parts.length !== 2 || parts.some(part => part.length === 0)) {
694
2261
  throw new redbox_core_1.RBValidationError({
695
2262
  message: 'Invalid secondary record sort expression',
696
- displayErrors: [{ status: '400', detail: 'Secondary sort must be field:direction with no empty segments.' }],
2263
+ displayErrors: [
2264
+ { status: '400', detail: 'Secondary sort must be field:direction with no empty segments.' },
2265
+ ],
697
2266
  });
698
2267
  }
699
2268
  const [field, direction] = parts;
@@ -721,8 +2290,10 @@ var Services;
721
2290
  limit: _.toNumber(rows),
722
2291
  skip: _.toNumber(start),
723
2292
  sort: Object.fromEntries(Object.entries(this.getRecordSort(sort, secondarySort)).map(([field, direction]) => [
724
- sortAliases.get(field) ?? (directSortFields.includes(field) || field.startsWith('deletedRecordMetadata.')
725
- ? field : `deletedRecordMetadata.${field}`),
2293
+ sortAliases.get(field) ??
2294
+ (directSortFields.includes(field) || field.startsWith('deletedRecordMetadata.')
2295
+ ? field
2296
+ : `deletedRecordMetadata.${field}`),
726
2297
  direction,
727
2298
  ])),
728
2299
  };
@@ -964,7 +2535,7 @@ var Services;
964
2535
  objectMode: true,
965
2536
  transform(record, _encoding, callback) {
966
2537
  callback(null, sanitizeCsvRecord(record));
967
- }
2538
+ },
968
2539
  });
969
2540
  const json2csv = new json2csv_1.Transform({ fields, transforms: [flatten()] }, { objectMode: true });
970
2541
  await (0, promises_1.pipeline)(stream.Readable.from(this.fetchAllRecords(query, { ...options })), sanitize, json2csv, passThrough);
@@ -1094,6 +2665,15 @@ var Services;
1094
2665
  sails.log.verbose(`${this.logHeader} removeDatastream() -> File not found: ${fileName}`);
1095
2666
  }
1096
2667
  }
2668
+ async removeStagedDatastream(fileId) {
2669
+ const normalizedFileId = (0, redbox_core_1.normalizeAttachmentStagingFileId)(fileId);
2670
+ if (!normalizedFileId)
2671
+ throw new Error('Invalid staged attachment identity.');
2672
+ const stagingDisk = StorageManagerService.stagingDisk();
2673
+ if (await stagingDisk.exists(normalizedFileId)) {
2674
+ await stagingDisk.delete(normalizedFileId);
2675
+ }
2676
+ }
1097
2677
  async addDatastream(oid, datastream, stagingDisk) {
1098
2678
  const fileId = datastream.fileId;
1099
2679
  sails.log.verbose(`${this.logHeader} addDatastream() -> Meta: ${fileId}`);
@@ -1177,6 +2757,94 @@ var Services;
1177
2757
  return undefined;
1178
2758
  }
1179
2759
  }
2760
+ sanitizeRecordHookExecutionSummary(value) {
2761
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
2762
+ return undefined;
2763
+ }
2764
+ const source = value;
2765
+ if (source.schemaVersion !== 1 || source.trigger !== 'record-hook') {
2766
+ return undefined;
2767
+ }
2768
+ const safeStatuses = new Set(['succeeded', 'failed', 'timed_out', 'interrupted', 'skipped', 'dispatched']);
2769
+ const safeKinds = new Set([
2770
+ 'configuration',
2771
+ 'validation',
2772
+ 'domain',
2773
+ 'transient',
2774
+ 'timeout',
2775
+ 'interrupted',
2776
+ 'unexpected',
2777
+ ]);
2778
+ const safeReasons = new Set([
2779
+ 'prior_action_failed',
2780
+ 'phase_not_reached',
2781
+ 'save_not_persisted',
2782
+ 'trigger_disabled',
2783
+ ]);
2784
+ const actions = Array.isArray(source.actions)
2785
+ ? source.actions.slice(0, 100).flatMap(item => {
2786
+ if (!item || typeof item !== 'object' || Array.isArray(item))
2787
+ return [];
2788
+ const action = item;
2789
+ if (typeof action.actionId !== 'string' ||
2790
+ typeof action.mode !== 'string' ||
2791
+ typeof action.phase !== 'string' ||
2792
+ typeof action.status !== 'string' ||
2793
+ !safeStatuses.has(action.status))
2794
+ return [];
2795
+ const result = {
2796
+ actionId: action.actionId.slice(0, 128),
2797
+ mode: action.mode,
2798
+ phase: action.phase,
2799
+ status: action.status,
2800
+ attempts: Number.isInteger(action.attempts) && Number(action.attempts) >= 0 ? Number(action.attempts) : 0,
2801
+ durationMs: Number.isInteger(action.durationMs) && Number(action.durationMs) >= 0 ? Number(action.durationMs) : 0,
2802
+ };
2803
+ if (typeof action.failureKind === 'string' && safeKinds.has(action.failureKind))
2804
+ result.failureKind = action.failureKind;
2805
+ if (typeof action.failureCode === 'string' && action.failureCode.length <= 128)
2806
+ result.failureCode = action.failureCode;
2807
+ if (typeof action.skippedReason === 'string' && safeReasons.has(action.skippedReason))
2808
+ result.skippedReason = action.skippedReason;
2809
+ return [result];
2810
+ })
2811
+ : [];
2812
+ const counts = {};
2813
+ if (source.counts && typeof source.counts === 'object' && !Array.isArray(source.counts)) {
2814
+ for (const [key, count] of Object.entries(source.counts)) {
2815
+ if (safeStatuses.has(key) && Number.isInteger(count) && Number(count) >= 0)
2816
+ counts[key] = Number(count);
2817
+ }
2818
+ }
2819
+ const summary = {
2820
+ schemaVersion: 1,
2821
+ executionId: typeof source.executionId === 'string' ? source.executionId.slice(0, 128) : '',
2822
+ trigger: 'record-hook',
2823
+ operation: ['create', 'update', 'delete', 'transition'].includes(String(source.operation))
2824
+ ? source.operation
2825
+ : 'update',
2826
+ partial: source.partial === true,
2827
+ durationMs: Number.isInteger(source.durationMs) && Number(source.durationMs) >= 0 ? Number(source.durationMs) : 0,
2828
+ totalActions: Number.isInteger(source.totalActions) && Number(source.totalActions) >= 0
2829
+ ? Number(source.totalActions)
2830
+ : actions.length,
2831
+ counts,
2832
+ actions,
2833
+ truncated: source.truncated === true,
2834
+ };
2835
+ if (typeof source.requestId === 'string' && source.requestId.length <= 128)
2836
+ summary.requestId = source.requestId;
2837
+ if (['pre', 'persistence', 'postSync', 'post-dispatch'].includes(String(source.completedThrough))) {
2838
+ summary.completedThrough = source.completedThrough;
2839
+ }
2840
+ if (['complete', 'grace-expired'].includes(String(source.detachedFinalization))) {
2841
+ summary.detachedFinalization = source.detachedFinalization;
2842
+ }
2843
+ if (Number.isInteger(source.detachedPending) && Number(source.detachedPending) > 0) {
2844
+ summary.detachedPending = Number(source.detachedPending);
2845
+ }
2846
+ return summary;
2847
+ }
1180
2848
  sanitizeRecordAudit(recordAudit) {
1181
2849
  const payload = {
1182
2850
  redboxOid: recordAudit.redboxOid,
@@ -1184,6 +2852,7 @@ var Services;
1184
2852
  ...(recordAudit.occurredAt ? { occurredAt: recordAudit.occurredAt } : {}),
1185
2853
  user: this.toJsonSafe(recordAudit.user),
1186
2854
  record: this.toJsonSafe(recordAudit.record),
2855
+ executionSummary: this.sanitizeRecordHookExecutionSummary(recordAudit.executionSummary),
1187
2856
  };
1188
2857
  if (_.isUndefined(payload.user)) {
1189
2858
  delete payload.user;
@@ -1191,6 +2860,9 @@ var Services;
1191
2860
  if (_.isUndefined(payload.record)) {
1192
2861
  delete payload.record;
1193
2862
  }
2863
+ if (_.isUndefined(payload.executionSummary)) {
2864
+ delete payload.executionSummary;
2865
+ }
1194
2866
  return payload;
1195
2867
  }
1196
2868
  sanitizeIntegrationAudit(audit) {
@@ -1366,53 +3038,11 @@ var Services;
1366
3038
  sails.log.verbose(JSON.stringify(criteria));
1367
3039
  return await IntegrationAudit.count(criteria);
1368
3040
  }
1369
- async restoreRecord(oid) {
1370
- const response = new redbox_core_1.StorageServiceResponse();
1371
- if (_.isEmpty(oid)) {
1372
- const msg = `${this.logHeader} restoreRecord() -> refusing to search using an empty OID`;
1373
- sails.log.error(msg);
1374
- throw new Error(msg);
1375
- }
1376
- try {
1377
- sails.log.verbose(`${this.logHeader} Restoring record ${oid} to DB...`);
1378
- const deletedRecord = await DeletedRecord.findOne({ redboxOid: oid });
1379
- delete deletedRecord.deletedRecordMetadata._id;
1380
- const record = await Record.create(deletedRecord.deletedRecordMetadata);
1381
- response.metadata = record;
1382
- await DeletedRecord.destroyOne({ redboxOid: oid });
1383
- response.success = true;
1384
- sails.log.verbose(`${this.logHeader} Record restored...`);
1385
- return response;
1386
- }
1387
- catch (err) {
1388
- sails.log.error(`${this.logHeader} Failed to create Record:`);
1389
- sails.log.error(JSON.stringify(err));
1390
- response.success = false;
1391
- response.message = this.getErrorMessage(err);
1392
- return response;
1393
- }
3041
+ async restoreRecord(oid, options) {
3042
+ return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Record restoration requires staged lifecycle orchestration');
1394
3043
  }
1395
- async destroyDeletedRecord(oid) {
1396
- const response = new redbox_core_1.StorageServiceResponse();
1397
- if (_.isEmpty(oid)) {
1398
- const msg = `${this.logHeader} destroyRecord() -> refusing to search using an empty OID`;
1399
- sails.log.error(msg);
1400
- throw new Error(msg);
1401
- }
1402
- try {
1403
- sails.log.verbose(`${this.logHeader} destroying deleted record ${oid} to DB...`);
1404
- await DeletedRecord.destroyOne({ redboxOid: oid });
1405
- response.success = true;
1406
- sails.log.verbose(`${this.logHeader} deleted record destroyed...`);
1407
- return response;
1408
- }
1409
- catch (err) {
1410
- sails.log.error(`${this.logHeader} Failed to create Record:`);
1411
- sails.log.error(JSON.stringify(err));
1412
- response.success = false;
1413
- response.message = this.getErrorMessage(err);
1414
- return response;
1415
- }
3044
+ async destroyDeletedRecord(oid, options) {
3045
+ return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Tombstone destruction requires staged lifecycle orchestration');
1416
3046
  }
1417
3047
  getFileWithName(fileName, options = { limit: 1 }) {
1418
3048
  return this.gridFsBucket.find({ filename: fileName }, options);
@@ -1423,4 +3053,4 @@ var Services;
1423
3053
  }
1424
3054
  Services.MongoStorageService = MongoStorageService;
1425
3055
  })(Services || (exports.Services = Services = {}));
1426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yYWdlU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Nb25nb1N0b3JhZ2VTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFzRDtBQUN0RCwrQkFBZ0M7QUFDaEMsbUNBQW9DO0FBR3BDLGlDQUFpQztBQUVqQyxtQ0FBb0M7QUFFcEMsc0NBQXVDO0FBQ3ZDLG1EQUFnRDtBQUNoRCx1Q0FBaUQ7QUFDakQsOERBd0JzQztBQUN0Qyw4REFBcUU7QUFDckUsOERBQWtHO0FBRWxHLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxxQkFBVSxDQUFDO0FBQy9CLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUUxQixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0FBQzlDLFNBQVMsZUFBZSxDQUFDLEtBQWM7SUFDckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQ0UsS0FBSyxJQUFJLElBQUk7UUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQzVGLENBQUM7UUFDRCxPQUFPLGlCQUFpQixDQUFDLEtBQWdDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FB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
3056
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yYWdlU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Nb25nb1N0b3JhZ2VTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFzRDtBQUN0RCwrQkFBZ0M7QUFDaEMsbUNBQW9DO0FBQ3BDLHlDQUE4QztBQUc5QyxpQ0FBaUM7QUFFakMsbUNBQW9DO0FBYXBDLHNDQUF1QztBQUN2QyxtREFBZ0Q7QUFDaEQsdUNBQWlEO0FBQ2pELDhEQXNDc0M7QUFXdEMsOERBQXFFO0FBQ3JFLDhEQUFrRztBQUNsRywyRUFBc0Y7QUFDdEYsdUVBWW1DO0FBRW5DLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxxQkFBVSxDQUFDO0FBQy9CLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUUxQixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0FBQzlDLFNBQVMsZUFBZSxDQUFDLEtBQWM7SUFDckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQ0UsS0FBSyxJQUFJLElBQUk7UUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQzVGLENBQUM7UUFDRCxPQUFPLGlCQUFpQixDQUFDLEtBQWdDLENBQUMsQ0FBQztJQUM3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