@researchdatabox/sails-hook-redbox-storage-mongo 5.0.3 → 5.0.4-beta.12498

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,6 +39,112 @@ 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
  var Services;
40
149
  (function (Services) {
41
150
  class MongoStorageService extends redbox_core_1.Services.Core.Service {
@@ -43,11 +152,24 @@ var Services;
43
152
  db;
44
153
  recordCol;
45
154
  deletedRecordCol;
155
+ recordIdentityCol;
156
+ recordSchemaArtifactCol;
157
+ recordSchemaReferenceCol;
46
158
  _readyHookRegistered = false;
159
+ _requiredIndicesReady = false;
160
+ _initializationPromise;
47
161
  _exportedMethods = [
48
162
  'init',
49
163
  'create',
50
164
  'updateMeta',
165
+ 'getCapabilities',
166
+ 'removeActiveRecord',
167
+ 'createTombstone',
168
+ 'updateTombstone',
169
+ 'removeTombstone',
170
+ 'createActiveRecordFromTombstone',
171
+ 'getTombstone',
172
+ 'getLifecycleTombstones',
51
173
  'getMeta',
52
174
  'createBatch',
53
175
  'provideUserAccessAndRemovePendingAccess',
@@ -63,6 +185,7 @@ var Services;
63
185
  'addDatastreams',
64
186
  'updateDatastream',
65
187
  'removeDatastream',
188
+ 'removeStagedDatastream',
66
189
  'addDatastream',
67
190
  'addAndRemoveDatastreams',
68
191
  'getDatastream',
@@ -72,6 +195,13 @@ var Services;
72
195
  'getRecordAudit',
73
196
  'getIntegrationAudit',
74
197
  'countIntegrationAudit',
198
+ 'putRecordSchemaArtifact',
199
+ 'getRecordSchemaArtifact',
200
+ 'listRecordSchemaArtifacts',
201
+ 'touchRecordSchemaArtifact',
202
+ 'putRecordSchemaReference',
203
+ 'findRecordSchemaGrantForAuthorization',
204
+ 'listRecordSchemaReferences',
75
205
  'exists',
76
206
  ];
77
207
  constructor() {
@@ -85,9 +215,7 @@ var Services;
85
215
  getErrorMessage(err) {
86
216
  if (err instanceof Error) {
87
217
  const messageParts = [err.message];
88
- const causeMessage = err.cause instanceof Error
89
- ? err.cause.message
90
- : (typeof err.cause === 'string' ? err.cause : undefined);
218
+ const causeMessage = err.cause instanceof Error ? err.cause.message : typeof err.cause === 'string' ? err.cause : undefined;
91
219
  if (causeMessage != null && causeMessage !== '' && causeMessage !== err.message) {
92
220
  messageParts.push(`Cause: ${causeMessage}`);
93
221
  }
@@ -95,9 +223,442 @@ var Services;
95
223
  }
96
224
  return String(err);
97
225
  }
98
- init() {
226
+ classifyStorageInitializationError(err) {
227
+ if (err instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError)
228
+ return 'record-schema-persistence-error';
229
+ if (err instanceof mongodb.MongoNetworkError)
230
+ return 'mongo-network-error';
231
+ if (err instanceof mongodb.MongoError)
232
+ return 'mongo-driver-error';
233
+ return err instanceof Error ? 'unexpected-error' : 'non-error';
234
+ }
235
+ /**
236
+ * Resolve the native driver collection behind a Waterline model. Strict
237
+ * concurrency needs `findOneAndUpdate`/`findOneAndDelete` facts that
238
+ * Waterline cannot certify, so the compare-and-set paths talk to the
239
+ * driver directly. Discovery never throws: an adapter that cannot supply a
240
+ * native collection is simply unsupported.
241
+ */
242
+ getNativeCollection(model, cacheKey) {
243
+ const cached = this[cacheKey];
244
+ if (cached)
245
+ return cached;
246
+ try {
247
+ const manager = model.getDatastore()?.manager;
248
+ if (manager && typeof manager.collection === 'function') {
249
+ this.db = manager;
250
+ this[cacheKey] = manager.collection(model.tableName);
251
+ return this[cacheKey];
252
+ }
253
+ }
254
+ catch {
255
+ // Capability discovery is deliberately non-throwing and fail-closed.
256
+ }
257
+ return undefined;
258
+ }
259
+ getNativeRecordCollection() {
260
+ return this.getNativeCollection(Record, 'recordCol');
261
+ }
262
+ getNativeTombstoneCollection() {
263
+ return this.getNativeCollection(DeletedRecord, 'deletedRecordCol');
264
+ }
265
+ getNativeRecordIdentityCollection() {
266
+ if (this.recordIdentityCol)
267
+ return this.recordIdentityCol;
268
+ try {
269
+ const manager = (this.db ?? Record.getDatastore()?.manager);
270
+ if (manager && typeof manager.collection === 'function') {
271
+ this.db = manager;
272
+ this.recordIdentityCol = manager.collection(RECORD_IDENTITY_COLLECTION);
273
+ return this.recordIdentityCol;
274
+ }
275
+ }
276
+ catch {
277
+ // Capability discovery is deliberately non-throwing and fail-closed.
278
+ }
279
+ return undefined;
280
+ }
281
+ supportsAtomicMutation(collection) {
282
+ return (typeof collection?.findOneAndUpdate === 'function' &&
283
+ typeof collection?.findOneAndDelete === 'function' &&
284
+ typeof collection?.findOne === 'function');
285
+ }
286
+ getCapabilities() {
287
+ const supported = this._requiredIndicesReady &&
288
+ this.supportsAtomicMutation(this.getNativeRecordCollection()) &&
289
+ this.supportsAtomicMutation(this.getNativeTombstoneCollection()) &&
290
+ typeof this.getNativeRecordIdentityCollection()?.findOne === 'function' &&
291
+ typeof this.getNativeRecordIdentityCollection()?.insertOne === 'function' &&
292
+ typeof this.getNativeRecordIdentityCollection()?.deleteOne === 'function' &&
293
+ typeof this.getNativeRecordCollection()?.insertOne === 'function' &&
294
+ typeof this.getNativeTombstoneCollection()?.insertOne === 'function' &&
295
+ typeof this.getNativeTombstoneCollection()?.find === 'function';
296
+ return supported ? { recordConcurrency: redbox_core_1.RECORD_STORAGE_CONCURRENCY_CAPABILITY_VERSION } : {};
297
+ }
298
+ createMutationResponse(oid, options) {
299
+ const response = new redbox_core_1.StorageMutationResponse();
300
+ response.oid = oid;
301
+ if ((0, redbox_core_1.isCanonicalSaveRequestId)(options?.requestId))
302
+ response.requestId = options.requestId;
303
+ if ((0, redbox_core_1.isRecordConcurrencyResolution)(options?.resolution))
304
+ response.resolution = options.resolution;
305
+ return response;
306
+ }
307
+ notApplied(response, reason, message = 'Record mutation was not applied') {
308
+ response.success = false;
309
+ response.applicationState = 'not-applied';
310
+ response.nonApplicationReason = reason;
311
+ response.message = message;
312
+ return response;
313
+ }
314
+ unknownMutation(response, message) {
315
+ response.success = false;
316
+ response.applicationState = 'unknown';
317
+ response.message = message;
318
+ return response;
319
+ }
320
+ /**
321
+ * Normalize the caller's precondition. Returning `null` means the response
322
+ * already carries a certified non-application: a malformed precondition is
323
+ * a caller defect, and answering it with a definite no-write is safer than
324
+ * guessing which revision was meant.
325
+ */
326
+ expectedRevision(options, response) {
327
+ const precondition = options?.precondition;
328
+ if (!precondition)
329
+ return undefined;
330
+ const { expectedRevision, requireRevision } = precondition;
331
+ if (typeof requireRevision !== 'boolean' ||
332
+ (expectedRevision === undefined ? requireRevision : !(0, redbox_core_1.isRecordRevision)(expectedRevision))) {
333
+ sails.log.error(`${this.logHeader} refusing a mutation for oid ${response.oid}: the supplied revision precondition is invalid`);
334
+ this.notApplied(response, 'capability-unavailable', 'A valid record revision is required');
335
+ return null;
336
+ }
337
+ return expectedRevision;
338
+ }
339
+ /**
340
+ * The lazy compatibility clause matches only a genuinely absent revision.
341
+ * An explicit null is corrupt state: `$inc` cannot advance it and must not
342
+ * be made to look like a safe first revision.
343
+ */
344
+ revisionSelector(expectedRevision) {
345
+ if (expectedRevision === redbox_core_1.INITIAL_RECORD_REVISION) {
346
+ // Atomic lazy compatibility for a legacy record that escaped the
347
+ // single-lift migration. The winning $inc makes a second match fail.
348
+ return { $or: [{ revision: redbox_core_1.INITIAL_RECORD_REVISION }, { revision: { $exists: false } }] };
349
+ }
350
+ if (expectedRevision !== undefined)
351
+ return { revision: expectedRevision };
352
+ // Tokenless compatibility: match anything that can still be advanced.
353
+ return { $or: [{ revision: { $lt: Number.MAX_SAFE_INTEGER } }, { revision: { $exists: false } }] };
354
+ }
355
+ mutationSelector(identity, expectedRevision) {
356
+ return { $and: [identity, this.revisionSelector(expectedRevision)] };
357
+ }
358
+ lifecycleMutationSelector(identity, expectedRevision, options) {
359
+ const selector = this.mutationSelector(identity, expectedRevision);
360
+ const predicates = selector.$and;
361
+ if (options?.lifecycle?.expectedState) {
362
+ predicates.push({ lifecycleState: options.lifecycle.expectedState });
363
+ }
364
+ if (options?.lifecycle?.operationId) {
365
+ predicates.push({ 'lifecycleOperation.operationId': options.lifecycle.operationId });
366
+ }
367
+ return selector;
368
+ }
369
+ isDuplicateKeyError(error) {
370
+ return Boolean(error && typeof error === 'object' && Number(error.code) === 11000);
371
+ }
372
+ /**
373
+ * Whether the driver fact proves that `insertOne` did not commit. Local
374
+ * argument rejection and a server command error without retry/write-
375
+ * concern ambiguity are definitive. Network, selection, timeout, and
376
+ * write-concern failures retain the reservation for later reconciliation.
377
+ */
378
+ isCertifiedCreateNonApplication(error) {
379
+ if (error instanceof mongodb.MongoInvalidArgumentError)
380
+ return true;
381
+ if (!(error instanceof mongodb.MongoServerError) || error instanceof mongodb.MongoWriteConcernError) {
382
+ return false;
383
+ }
384
+ const serverError = error;
385
+ if (serverError.writeConcernError)
386
+ return false;
387
+ if (serverError.hasErrorLabel?.('RetryableWriteError'))
388
+ return false;
389
+ if (serverError.hasErrorLabel?.('UnknownTransactionCommitResult'))
390
+ return false;
391
+ return true;
392
+ }
393
+ storedIncarnationId(record) {
394
+ const value = String(record?.incarnationId ?? '').trim();
395
+ return (0, redbox_core_1.isCanonicalSaveRequestId)(value) ? value : undefined;
396
+ }
397
+ /**
398
+ * Establish the permanent OID owner for a state that already exists. The
399
+ * ledger outlives active records and tombstones, so purge cannot reopen a
400
+ * revision-zero alias. Duplicate insertion is an ordinary concurrent
401
+ * winner; its durable identity is re-read and adopted.
402
+ */
403
+ async ensureRecordIdentity(oid, source) {
404
+ const identities = this.getNativeRecordIdentityCollection();
405
+ if (typeof identities?.findOne !== 'function' || typeof identities?.insertOne !== 'function')
406
+ return undefined;
407
+ const existing = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
408
+ if (existing === undefined)
409
+ return undefined;
410
+ const existingId = this.storedIncarnationId(existing);
411
+ if (existing !== null)
412
+ return existingId;
413
+ const incarnationId = this.storedIncarnationId(source) ?? (0, crypto_1.randomUUID)();
414
+ try {
415
+ await identities.insertOne({ redboxOid: oid, incarnationId, createdAt: new Date().toISOString() });
416
+ return incarnationId;
417
+ }
418
+ catch (error) {
419
+ if (!this.isDuplicateKeyError(error))
420
+ return undefined;
421
+ const winner = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
422
+ return winner === undefined ? undefined : this.storedIncarnationId(winner);
423
+ }
424
+ }
425
+ /** Claim a never-before-used OID. Any durable owner or active/tombstone state is a collision. */
426
+ async claimNewRecordIdentity(oid) {
427
+ const identities = this.getNativeRecordIdentityCollection();
428
+ if (typeof identities?.findOne !== 'function' ||
429
+ typeof identities?.insertOne !== 'function' ||
430
+ typeof identities?.deleteOne !== 'function')
431
+ return undefined;
432
+ const existingOwner = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
433
+ if (existingOwner === undefined)
434
+ return undefined;
435
+ if (existingOwner !== null)
436
+ return { collision: true };
437
+ // Legacy state may predate the ledger. Seed its owner before returning a
438
+ // collision so a concurrent purge cannot make the OID reusable.
439
+ const current = await this.readCurrentState(oid);
440
+ if (!current)
441
+ return undefined;
442
+ const existingState = current.active ?? current.tombstone;
443
+ if (existingState) {
444
+ return (await this.ensureRecordIdentity(oid, existingState)) ? { collision: true } : undefined;
445
+ }
446
+ const incarnationId = (0, crypto_1.randomUUID)();
447
+ try {
448
+ await identities.insertOne({ redboxOid: oid, incarnationId, createdAt: new Date().toISOString() });
449
+ return { incarnationId };
450
+ }
451
+ catch (error) {
452
+ return this.isDuplicateKeyError(error) ? { collision: true } : undefined;
453
+ }
454
+ }
455
+ /**
456
+ * Compensate an ownership claim this call made but never used.
457
+ *
458
+ * The ledger is otherwise permanent, and deliberately so: a purge must not
459
+ * let an old revision-zero tag alias a recreated incarnation. Releasing is
460
+ * only safe — and only necessary — for a row that still carries the
461
+ * incarnation this call minted and that no active record or tombstone
462
+ * refers to. That is exactly the state a create leaves behind when its
463
+ * insert never reached the collection, and without this the caller-selected
464
+ * OID would be permanently unusable with no operator recovery path. While
465
+ * this row exists its unique index prevents another ordinary create from
466
+ * becoming owner; the exact incarnation selector also cannot remove a row
467
+ * replaced during an operator recovery race.
468
+ */
469
+ async releaseUnusedRecordIdentity(oid, incarnationId) {
470
+ const identities = this.getNativeRecordIdentityCollection();
471
+ if (typeof identities?.deleteOne !== 'function')
472
+ return;
473
+ try {
474
+ const current = await this.readCurrentState(oid);
475
+ // Unobservable or still-owned state keeps the claim: a permanent row is
476
+ // always safer than one released while something still refers to it.
477
+ if (!current || current.active || current.tombstone)
478
+ return;
479
+ await identities.deleteOne({ redboxOid: oid, incarnationId });
480
+ }
481
+ catch {
482
+ sails.log.error(`${this.logHeader} record_identity_reservation_release_failed`, {
483
+ event: 'record_identity_reservation_release_failed',
484
+ outcome: 'unknown',
485
+ });
486
+ }
487
+ }
488
+ /**
489
+ * Interpret a `findOneAndUpdate`/`findOneAndDelete` result issued with
490
+ * `includeResultMetadata: false`: `null` is a certified no-match and a
491
+ * document is the committed state. Anything else is an unrecognized driver
492
+ * fact that must stay `unknown` rather than being certified either way.
493
+ */
494
+ mutationDocument(result) {
495
+ if (result === null)
496
+ return null;
497
+ if (result === undefined)
498
+ return undefined;
499
+ if (typeof result !== 'object' || Array.isArray(result))
500
+ return undefined;
501
+ return result;
502
+ }
503
+ committed(response, document, kind, expectedRevision) {
504
+ // A removal returns the pre-removal document, which may predate the
505
+ // revision backfill; an update always returns the incremented value.
506
+ const normalizedRevision = (0, redbox_core_1.isRecordRevision)(document.revision)
507
+ ? document.revision
508
+ : document.revision == null && kind === 'removed'
509
+ ? redbox_core_1.INITIAL_RECORD_REVISION
510
+ : undefined;
511
+ if (normalizedRevision === undefined) {
512
+ return this.unknownMutation(response, 'Storage returned an invalid committed revision');
513
+ }
514
+ const expectedCommittedRevision = expectedRevision === undefined
515
+ ? undefined
516
+ : kind === 'updated'
517
+ ? (0, redbox_core_1.nextRecordRevision)(expectedRevision)
518
+ : expectedRevision;
519
+ if (expectedCommittedRevision !== undefined && normalizedRevision !== expectedCommittedRevision) {
520
+ return this.unknownMutation(response, 'Storage returned an inconsistent committed revision');
521
+ }
522
+ const normalized = { ...document, revision: normalizedRevision };
523
+ response.success = true;
524
+ response.applicationState = 'applied';
525
+ response.committedRevision = normalizedRevision;
526
+ if (kind === 'removed')
527
+ response.removedRecord = normalized;
528
+ else
529
+ response.committedRecord = normalized;
530
+ return response;
531
+ }
532
+ brandIdOf(brand) {
533
+ return String(brand?.id ?? '').trim();
534
+ }
535
+ activeIdentity(brand, oid) {
536
+ const brandId = this.brandIdOf(brand);
537
+ return brandId ? { redboxOid: oid, 'metaMetadata.brandId': brandId } : { redboxOid: oid };
538
+ }
539
+ tombstoneIdentity(brand, oid) {
540
+ const brandId = this.brandIdOf(brand);
541
+ // Tombstones written before the lifecycle wrapper existed only carry the
542
+ // brand inside the embedded snapshot. A present wrapper brand remains
543
+ // authoritative: an inconsistent snapshot must never widen brand scope.
544
+ return brandId
545
+ ? {
546
+ redboxOid: oid,
547
+ $or: [
548
+ { brandId },
549
+ {
550
+ $and: [{ brandId: { $exists: false } }, { 'deletedRecordMetadata.metaMetadata.brandId': brandId }],
551
+ },
552
+ ],
553
+ }
554
+ : { redboxOid: oid };
555
+ }
556
+ static BRAND_ID_PATHS = [
557
+ 'brandId',
558
+ 'metaMetadata.brandId',
559
+ 'deletedRecordMetadata.metaMetadata.brandId',
560
+ ];
561
+ storedBrandId(record) {
562
+ for (const path of MongoStorageService.BRAND_ID_PATHS) {
563
+ const brandId = String(_.get(record, path, '') ?? '').trim();
564
+ if (brandId)
565
+ return brandId;
566
+ }
567
+ return '';
568
+ }
569
+ /**
570
+ * Reject candidate keys the driver would read as update operators or
571
+ * dotted paths. Waterline rejected them before the compare-and-set paths
572
+ * started building `$set` documents directly, and honouring them would let
573
+ * a candidate reach fields — such as the stored brand — that the explicit
574
+ * checks above deliberately guard.
575
+ */
576
+ unsafeCandidateField(candidate) {
577
+ return Object.keys(candidate).find(key => key.startsWith('$') || key.includes('.'));
578
+ }
579
+ /**
580
+ * Read the current state behind a certified no-match so the caller can be
581
+ * told why nothing was written. Cross-brand state is never returned: the
582
+ * reason alone is bounded, and callers outside the brand map it onto the
583
+ * same not-found answer an absent record produces.
584
+ */
585
+ async readCurrentState(oid) {
586
+ const records = this.getNativeRecordCollection();
587
+ const tombstones = this.getNativeTombstoneCollection();
588
+ if (typeof records?.findOne !== 'function' || typeof tombstones?.findOne !== 'function') {
589
+ return undefined;
590
+ }
591
+ const [activeResult, tombstoneResult] = await Promise.all([
592
+ records.findOne({ redboxOid: oid }),
593
+ tombstones.findOne({ redboxOid: oid }),
594
+ ]);
595
+ const active = this.mutationDocument(activeResult);
596
+ const tombstone = this.mutationDocument(tombstoneResult);
597
+ if (active === undefined || tombstone === undefined)
598
+ return undefined;
599
+ return { active, tombstone };
600
+ }
601
+ isRequestedBrand(record, requestedBrandId) {
602
+ return record !== null && (!requestedBrandId || this.storedBrandId(record) === requestedBrandId);
603
+ }
604
+ async classifyActiveNoMatch(brand, oid, expectedRevision) {
605
+ const current = await this.readCurrentState(oid);
606
+ if (!current)
607
+ return 'capability-unavailable';
608
+ const requestedBrandId = this.brandIdOf(brand);
609
+ if (current.active) {
610
+ if (!this.isRequestedBrand(current.active, requestedBrandId))
611
+ return 'brand-mismatch';
612
+ // A tokenless selector matches every advanceable revision, so a
613
+ // present in-brand record that still did not match cannot be advanced.
614
+ return expectedRevision !== undefined ? 'stale-revision' : 'capability-unavailable';
615
+ }
616
+ if (this.isRequestedBrand(current.tombstone, requestedBrandId))
617
+ return 'deleted';
618
+ return 'not-found';
619
+ }
620
+ async classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options) {
621
+ const current = await this.readCurrentState(oid);
622
+ if (!current)
623
+ return 'capability-unavailable';
624
+ const requestedBrandId = this.brandIdOf(brand);
625
+ if (current.tombstone) {
626
+ if (!this.isRequestedBrand(current.tombstone, requestedBrandId))
627
+ return 'brand-mismatch';
628
+ const currentRevision = (0, redbox_core_1.isRecordRevision)(current.tombstone.revision)
629
+ ? current.tombstone.revision
630
+ : redbox_core_1.INITIAL_RECORD_REVISION;
631
+ if (expectedRevision !== undefined && currentRevision !== expectedRevision)
632
+ return 'stale-revision';
633
+ if ((options?.lifecycle?.expectedState && current.tombstone.lifecycleState !== options.lifecycle.expectedState) ||
634
+ (options?.lifecycle?.operationId &&
635
+ _.get(current.tombstone, 'lifecycleOperation.operationId') !== options.lifecycle.operationId)) {
636
+ return 'lifecycle-conflict';
637
+ }
638
+ return 'capability-unavailable';
639
+ }
640
+ if (this.isRequestedBrand(current.active, requestedBrandId))
641
+ return 'lifecycle-conflict';
642
+ return 'not-found';
643
+ }
644
+ async init() {
99
645
  this.registerReadyHook();
100
- void this.performInit();
646
+ const initialization = this._initializationPromise ?? this.performInit();
647
+ this._initializationPromise = initialization;
648
+ try {
649
+ await initialization;
650
+ }
651
+ catch (error) {
652
+ if (this._initializationPromise === initialization) {
653
+ this._initializationPromise = undefined;
654
+ sails.log.error(`${this.logHeader} storage_initialization_failed`, {
655
+ event: 'storage_initialization_failed',
656
+ outcome: 'not-ready',
657
+ error_classification: this.classifyStorageInitializationError(error),
658
+ });
659
+ }
660
+ throw error;
661
+ }
101
662
  }
102
663
  registerReadyHook() {
103
664
  if (this._readyHookRegistered) {
@@ -105,8 +666,8 @@ var Services;
105
666
  }
106
667
  this._readyHookRegistered = true;
107
668
  const that = this;
108
- this.registerSailsHook('on', 'ready', function () {
109
- void that.performInit();
669
+ this.registerSailsHook('on', 'ready', async function () {
670
+ await that.init();
110
671
  });
111
672
  }
112
673
  async collectionExists(collectionName) {
@@ -130,7 +691,15 @@ var Services;
130
691
  }
131
692
  }
132
693
  async performInit() {
133
- if (this.recordCol && this.deletedRecordCol && this.gridFsBucket) {
694
+ if (this._requiredIndicesReady &&
695
+ this.recordCol &&
696
+ this.deletedRecordCol &&
697
+ this.recordIdentityCol &&
698
+ this.recordCol &&
699
+ this.deletedRecordCol &&
700
+ this.recordSchemaArtifactCol &&
701
+ this.recordSchemaReferenceCol &&
702
+ this.gridFsBucket) {
134
703
  return;
135
704
  }
136
705
  this.db = Record.getDatastore().manager;
@@ -144,7 +713,12 @@ var Services;
144
713
  this.gridFsBucket = new mongodb.GridFSBucket(this.db);
145
714
  this.recordCol = this.db.collection(Record.tableName);
146
715
  this.deletedRecordCol = this.db.collection(DeletedRecord.tableName);
716
+ this.recordIdentityCol = this.db.collection(RECORD_IDENTITY_COLLECTION);
717
+ this.recordSchemaArtifactCol = this.db.collection(RecordSchemaArtifact.tableName);
718
+ this.recordSchemaReferenceCol = this.db.collection(RecordSchemaReference.tableName);
147
719
  await this.createIndices(this.db);
720
+ await this.createRecordSchemaIndices();
721
+ this._requiredIndicesReady = true;
148
722
  sails.emit('hook:redbox:storage:ready');
149
723
  sails.emit('hook:redbox:datastream:ready');
150
724
  sails.log.verbose(`${this.logHeader} Ready!`);
@@ -153,66 +727,966 @@ var Services;
153
727
  sails.log.verbose(`${this.logHeader} Existing indices:`);
154
728
  const currentIndices = await db.collection(Record.tableName).indexes();
155
729
  sails.log.verbose(JSON.stringify(currentIndices));
730
+ const storageConfig = sails.config.storage;
731
+ const indices = storageConfig.mongodb?.indices ?? [];
732
+ if (_.size(indices) > 0) {
733
+ await db.collection(Record.tableName).createIndexes(indices);
734
+ }
735
+ const deletedRecordIndices = storageConfig.mongodb?.deletedRecordIndices ?? [];
736
+ if (_.size(deletedRecordIndices) > 0) {
737
+ await db.collection(DeletedRecord.tableName).createIndexes(deletedRecordIndices);
738
+ }
739
+ const recordIdentityIndices = storageConfig.mongodb?.recordIdentityIndices ?? [
740
+ { key: { redboxOid: 1 }, unique: true },
741
+ ];
742
+ await db.collection(RECORD_IDENTITY_COLLECTION).createIndexes(recordIdentityIndices);
743
+ }
744
+ async createRecordSchemaIndices() {
745
+ await this.createRequiredIndexes(this.recordSchemaArtifactCol, exports.RECORD_SCHEMA_ARTIFACT_INDEXES);
746
+ await this.createRequiredIndexes(this.recordSchemaReferenceCol, exports.RECORD_SCHEMA_REFERENCE_INDEXES);
747
+ }
748
+ async createRequiredIndexes(collection, requiredIndexes) {
749
+ let existingIndexes;
156
750
  try {
157
- const storageConfig = sails.config.storage;
158
- const indices = storageConfig.mongodb?.indices ?? [];
159
- if (_.size(indices) > 0) {
160
- await db.collection(Record.tableName).createIndexes(indices);
751
+ existingIndexes = await collection.indexes();
752
+ }
753
+ catch (error) {
754
+ if (!isMongoNamespaceNotFoundError(error)) {
755
+ throw error;
161
756
  }
757
+ existingIndexes = [];
162
758
  }
163
- catch (err) {
164
- sails.log.error(`Failed to create indices:`);
165
- sails.log.error(JSON.stringify(err));
759
+ const missingIndexes = [];
760
+ for (const required of requiredIndexes) {
761
+ const matchingKeys = existingIndexes.filter(existing => indexKeysEqual(existing, required));
762
+ if (matchingKeys.some(existing => indexOptionsEqual(existing, required)))
763
+ continue;
764
+ if (matchingKeys.length > 0) {
765
+ throw new Error(`Existing index ${indexDisplayName(matchingKeys[0])} has options that do not match required index ${indexDisplayName(required)}.`);
766
+ }
767
+ const matchingName = existingIndexes.find(existing => existing.name === required.name);
768
+ if (matchingName) {
769
+ throw new Error(`Existing index ${indexDisplayName(matchingName)} has keys that do not match the required definition.`);
770
+ }
771
+ missingIndexes.push(required);
772
+ }
773
+ if (missingIndexes.length > 0) {
774
+ await collection.createIndexes(missingIndexes);
166
775
  }
167
776
  }
168
- async create(_brand, record, _recordType, _user) {
169
- sails.log.verbose(`${this.logHeader} create() -> Begin`);
777
+ recordSchemaSuccess(data) {
778
+ const response = new redbox_core_1.StorageServiceResponse();
779
+ response.success = true;
780
+ response.data = data;
781
+ return response;
782
+ }
783
+ recordSchemaFailure(code, message, action, error) {
170
784
  const response = new redbox_core_1.StorageServiceResponse();
171
- record.redboxOid = this.getUuid();
172
- response.oid = String(record.redboxOid);
785
+ response.success = false;
786
+ response.message = message;
787
+ response.details = { code };
788
+ const errorType = error instanceof Error ? error.name : typeof error;
789
+ sails.log.error(`${this.logHeader} ${action} failed (${code}; ${errorType})`);
790
+ return response;
791
+ }
792
+ recordSchemaFailureFromError(action, error) {
793
+ if (error instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError) {
794
+ return this.recordSchemaFailure(error.code, error.message, action, error);
795
+ }
796
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema storage operation failed.', action, error);
797
+ }
798
+ throwRecordSchemaReadFailure(action, error) {
799
+ if (error instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError) {
800
+ throw error;
801
+ }
802
+ const errorType = error instanceof Error ? error.name : typeof error;
803
+ sails.log.error(`${this.logHeader} ${action} failed (${errorType})`);
804
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema storage read failed.');
805
+ }
806
+ artifactCollection() {
807
+ if (!this.recordSchemaArtifactCol) {
808
+ this.db = this.db ?? RecordSchemaArtifact.getDatastore().manager;
809
+ this.recordSchemaArtifactCol = this.db.collection(RecordSchemaArtifact.tableName);
810
+ }
811
+ return this.recordSchemaArtifactCol;
812
+ }
813
+ referenceCollection() {
814
+ if (!this.recordSchemaReferenceCol) {
815
+ this.db = this.db ?? RecordSchemaReference.getDatastore().manager;
816
+ this.recordSchemaReferenceCol = this.db.collection(RecordSchemaReference.tableName);
817
+ }
818
+ return this.recordSchemaReferenceCol;
819
+ }
820
+ recordSchemaReferenceDocument(reference, now) {
821
+ const document = {
822
+ referenceKey: reference.referenceKey,
823
+ digest: reference.digest,
824
+ kind: reference.kind,
825
+ brand: reference.brand,
826
+ portal: reference.portal,
827
+ schemaKind: reference.schemaKind,
828
+ recordType: reference.recordType,
829
+ operation: reference.operation,
830
+ createdAt: now,
831
+ updatedAt: now,
832
+ };
833
+ if (reference.kind === 'save' || (reference.kind === 'grant' && reference.schemaKind === 'update')) {
834
+ document.oid = reference.oid;
835
+ }
836
+ if (reference.kind === 'pin') {
837
+ document.owner = reference.owner;
838
+ document.purpose = reference.purpose;
839
+ if (reference.expiresAt !== undefined) {
840
+ document.expiresAt = reference.expiresAt;
841
+ }
842
+ }
843
+ return document;
844
+ }
845
+ async existingArtifactMatches(existing, artifact) {
846
+ return (0, recordSchemaPersistence_1.artifactContentIdentity)((0, recordSchemaPersistence_1.artifactModelFromDocument)(existing)) === (0, recordSchemaPersistence_1.artifactContentIdentity)(artifact);
847
+ }
848
+ async putRecordSchemaArtifact(artifact) {
849
+ try {
850
+ const validated = (0, recordSchemaPersistence_1.validateRecordSchemaArtifactInput)(artifact);
851
+ const collection = this.artifactCollection();
852
+ const existing = await collection.findOne({ digest: validated.digest });
853
+ if (existing) {
854
+ if (await this.existingArtifactMatches(existing, validated)) {
855
+ return this.recordSchemaSuccess({ digest: validated.digest });
856
+ }
857
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.DIGEST_COLLISION, 'Record schema artifact integrity check failed.', 'putRecordSchemaArtifact');
858
+ }
859
+ const now = new Date();
860
+ try {
861
+ await collection.insertOne({
862
+ digest: validated.digest,
863
+ document: validated.document,
864
+ contractFormat: validated.contractFormat,
865
+ completeness: validated.completeness,
866
+ byteLength: validated.byteLength,
867
+ createdAt: now,
868
+ updatedAt: now,
869
+ });
870
+ }
871
+ catch (error) {
872
+ if (!(0, recordSchemaPersistence_1.isDuplicateKeyError)(error)) {
873
+ throw error;
874
+ }
875
+ const racedArtifact = await collection.findOne({ digest: validated.digest });
876
+ if (!racedArtifact || !(await this.existingArtifactMatches(racedArtifact, validated))) {
877
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.DIGEST_COLLISION, 'Record schema artifact integrity check failed.', 'putRecordSchemaArtifact', error);
878
+ }
879
+ }
880
+ return this.recordSchemaSuccess({ digest: validated.digest });
881
+ }
882
+ catch (error) {
883
+ return this.recordSchemaFailureFromError('putRecordSchemaArtifact', error);
884
+ }
885
+ }
886
+ async getRecordSchemaArtifact(digest) {
887
+ const validatedDigest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(digest);
888
+ try {
889
+ const document = await this.artifactCollection().findOne({ digest: validatedDigest });
890
+ return document ? (0, recordSchemaPersistence_1.artifactModelFromDocument)(document) : null;
891
+ }
892
+ catch (error) {
893
+ const errorType = error instanceof Error ? error.name : typeof error;
894
+ sails.log.error(`${this.logHeader} getRecordSchemaArtifact failed (${errorType})`);
895
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema artifact read failed.');
896
+ }
897
+ }
898
+ async listRecordSchemaArtifacts(query) {
899
+ try {
900
+ if (!query || typeof query !== 'object') {
901
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_ARTIFACT, 'Record schema artifact query is required.');
902
+ }
903
+ const limit = this.recordSchemaQueryLimit(query.limit);
904
+ const criteria = {};
905
+ if (query.afterDigest !== undefined) {
906
+ criteria.digest = { $gt: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.afterDigest) };
907
+ }
908
+ const documents = await this.artifactCollection()
909
+ .find(criteria, { projection: { _id: 0, digest: 1, createdAt: 1 } })
910
+ .sort({ digest: 1 })
911
+ .limit(limit)
912
+ .toArray();
913
+ return documents.map(document => ({
914
+ digest: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(document.digest),
915
+ createdAt: this.storedRecordSchemaDate(document.createdAt, 'artifact createdAt'),
916
+ }));
917
+ }
918
+ catch (error) {
919
+ return this.throwRecordSchemaReadFailure('listRecordSchemaArtifacts', error);
920
+ }
921
+ }
922
+ async touchRecordSchemaArtifact(digest) {
923
+ try {
924
+ const validatedDigest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(digest);
925
+ const result = await this.artifactCollection().updateOne({ digest: validatedDigest }, { $set: { lastAccessedAt: new Date() } });
926
+ if (result.matchedCount !== 1) {
927
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema artifact was not found.', 'touchRecordSchemaArtifact');
928
+ }
929
+ return this.recordSchemaSuccess({ digest: validatedDigest });
930
+ }
931
+ catch (error) {
932
+ return this.recordSchemaFailureFromError('touchRecordSchemaArtifact', error);
933
+ }
934
+ }
935
+ async storeRecordSchemaReference(reference, now) {
936
+ const collection = this.referenceCollection();
937
+ const existing = await collection.findOne({ referenceKey: reference.referenceKey });
938
+ if (existing) {
939
+ if ((0, recordSchemaPersistence_1.referenceContentIdentity)((0, recordSchemaPersistence_1.referenceModelFromDocument)(existing)) !== (0, recordSchemaPersistence_1.referenceContentIdentity)(reference)) {
940
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.REFERENCE_KEY_COLLISION, 'Record schema reference integrity check failed.', 'putRecordSchemaReference');
941
+ }
942
+ await collection.updateOne({ referenceKey: reference.referenceKey }, { $set: { updatedAt: now } });
943
+ return this.recordSchemaSuccess({ referenceKey: reference.referenceKey });
944
+ }
945
+ try {
946
+ await collection.insertOne(this.recordSchemaReferenceDocument(reference, now));
947
+ }
948
+ catch (error) {
949
+ if (!(0, recordSchemaPersistence_1.isDuplicateKeyError)(error)) {
950
+ throw error;
951
+ }
952
+ const racedReference = await collection.findOne({ referenceKey: reference.referenceKey });
953
+ if (!racedReference ||
954
+ (0, recordSchemaPersistence_1.referenceContentIdentity)((0, recordSchemaPersistence_1.referenceModelFromDocument)(racedReference)) !== (0, recordSchemaPersistence_1.referenceContentIdentity)(reference)) {
955
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.REFERENCE_KEY_COLLISION, 'Record schema reference integrity check failed.', 'putRecordSchemaReference', error);
956
+ }
957
+ await collection.updateOne({ referenceKey: reference.referenceKey }, { $set: { updatedAt: now } });
958
+ }
959
+ return this.recordSchemaSuccess({ referenceKey: reference.referenceKey });
960
+ }
961
+ async putRecordSchemaReference(reference) {
962
+ try {
963
+ const validated = (0, recordSchemaPersistence_1.validateRecordSchemaReferenceInput)(reference);
964
+ const now = new Date();
965
+ const artifactCriteria = { digest: validated.digest };
966
+ const artifact = await this.artifactCollection().findOne(artifactCriteria, {
967
+ projection: { _id: 1 },
968
+ });
969
+ if (!artifact) {
970
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema reference target was not found.', 'putRecordSchemaReference');
971
+ }
972
+ const response = await this.storeRecordSchemaReference(validated, now);
973
+ if (!response.success) {
974
+ return response;
975
+ }
976
+ // Reference writes and retention deletion share this lock protocol.
977
+ // A writer that raced with deletion removes its own temporary row and
978
+ // fails, so no successful reference can become orphaned.
979
+ const artifactAfterWrite = await this.artifactCollection().findOne({ digest: validated.digest }, { projection: { _id: 1 } });
980
+ if (!artifactAfterWrite) {
981
+ await this.referenceCollection().deleteOne({
982
+ referenceKey: validated.referenceKey,
983
+ digest: validated.digest,
984
+ });
985
+ return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema reference target was not found.', 'putRecordSchemaReference');
986
+ }
987
+ return response;
988
+ }
989
+ catch (error) {
990
+ return this.recordSchemaFailureFromError('putRecordSchemaReference', error);
991
+ }
992
+ }
993
+ recordSchemaQueryString(value, field, maximumLength = 512) {
994
+ if (typeof value !== 'string' || value.length === 0 || value !== value.trim() || value.length > maximumLength) {
995
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, `Record schema reference query ${field} is invalid.`);
996
+ }
997
+ return value;
998
+ }
999
+ recordSchemaQueryLimit(value) {
1000
+ if (typeof value !== 'number' ||
1001
+ !Number.isSafeInteger(value) ||
1002
+ value <= 0 ||
1003
+ value > recordSchemaPersistence_1.RECORD_SCHEMA_REFERENCE_QUERY_LIMIT_MAX) {
1004
+ 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}.`);
1005
+ }
1006
+ return value;
1007
+ }
1008
+ async findRecordSchemaGrantForAuthorization(query) {
1009
+ try {
1010
+ if (!query || typeof query !== 'object') {
1011
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query is required.');
1012
+ }
1013
+ const schemaKind = query.schemaKind;
1014
+ if (schemaKind !== 'create' && schemaKind !== 'update') {
1015
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query schemaKind is invalid.');
1016
+ }
1017
+ if (!Array.isArray(query.roleNames)) {
1018
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query roleNames is invalid.');
1019
+ }
1020
+ const roleNames = [
1021
+ ...new Set(query.roleNames.map(role => this.recordSchemaQueryString(role, 'roleNames'))),
1022
+ ].sort();
1023
+ const criteria = {
1024
+ digest: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.digest),
1025
+ kind: 'grant',
1026
+ brand: this.recordSchemaQueryString(query.brand, 'brand'),
1027
+ portal: this.recordSchemaQueryString(query.portal, 'portal'),
1028
+ schemaKind,
1029
+ recordType: this.recordSchemaQueryString(query.recordType, 'recordType'),
1030
+ operation: this.recordSchemaQueryString(query.operation, 'operation', 64),
1031
+ };
1032
+ if (query.afterReferenceKey !== undefined) {
1033
+ const afterReferenceKey = this.recordSchemaQueryString(query.afterReferenceKey, 'afterReferenceKey');
1034
+ if (!RecordSchemaReference_1.RECORD_SCHEMA_REFERENCE_KEY_PATTERN.test(afterReferenceKey)) {
1035
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query afterReferenceKey is invalid.');
1036
+ }
1037
+ criteria.referenceKey = { $gt: afterReferenceKey };
1038
+ }
1039
+ if (schemaKind === 'create') {
1040
+ const grant = await this.referenceCollection().findOne(criteria, {
1041
+ sort: { referenceKey: 1 },
1042
+ hint: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY,
1043
+ maxTimeMS: exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS,
1044
+ });
1045
+ return grant ? (0, recordSchemaPersistence_1.referenceModelFromDocument)(grant) : null;
1046
+ }
1047
+ const username = this.recordSchemaQueryString(query.username, 'username');
1048
+ const recordBrandId = this.recordSchemaQueryString(query.recordBrandId, 'recordBrandId');
1049
+ const editConditions = [{ 'authorization.edit': username }];
1050
+ if (roleNames.length > 0) {
1051
+ editConditions.push({ 'authorization.editRoles': { $in: roleNames } });
1052
+ }
1053
+ const grants = await this.referenceCollection()
1054
+ .aggregate([
1055
+ { $match: criteria },
1056
+ {
1057
+ $lookup: {
1058
+ from: Record.tableName,
1059
+ localField: 'oid',
1060
+ foreignField: 'redboxOid',
1061
+ pipeline: [
1062
+ {
1063
+ $match: {
1064
+ 'metaMetadata.brandId': recordBrandId,
1065
+ $or: editConditions,
1066
+ },
1067
+ },
1068
+ ],
1069
+ as: 'authorizedRecords',
1070
+ },
1071
+ },
1072
+ { $match: { 'authorizedRecords.0': { $exists: true } } },
1073
+ { $sort: { referenceKey: 1 } },
1074
+ { $limit: 1 },
1075
+ ], { hint: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY })
1076
+ .maxTimeMS(exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS)
1077
+ .toArray();
1078
+ return grants[0] ? (0, recordSchemaPersistence_1.referenceModelFromDocument)(grants[0]) : null;
1079
+ }
1080
+ catch (error) {
1081
+ return this.throwRecordSchemaReadFailure('findRecordSchemaGrantForAuthorization', error);
1082
+ }
1083
+ }
1084
+ async listRecordSchemaReferences(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 reference query is required.');
1088
+ }
1089
+ const limit = this.recordSchemaQueryLimit(query.limit);
1090
+ const criteria = {};
1091
+ if (query.digest !== undefined) {
1092
+ criteria.digest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.digest);
1093
+ }
1094
+ if (query.kind !== undefined) {
1095
+ if (!['grant', 'save', 'pin'].includes(query.kind)) {
1096
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query kind is invalid.');
1097
+ }
1098
+ criteria.kind = query.kind;
1099
+ }
1100
+ if (query.schemaKind !== undefined) {
1101
+ if (query.schemaKind !== 'create' && query.schemaKind !== 'update') {
1102
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query schemaKind is invalid.');
1103
+ }
1104
+ criteria.schemaKind = query.schemaKind;
1105
+ }
1106
+ for (const [field, value] of [
1107
+ ['brand', query.brand],
1108
+ ['portal', query.portal],
1109
+ ['recordType', query.recordType],
1110
+ ['oid', query.oid],
1111
+ ['operation', query.operation],
1112
+ ['owner', query.owner],
1113
+ ]) {
1114
+ if (value !== undefined) {
1115
+ criteria[field] = this.recordSchemaQueryString(value, field);
1116
+ }
1117
+ }
1118
+ if (query.includeExpiredPins !== undefined && typeof query.includeExpiredPins !== 'boolean') {
1119
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query includeExpiredPins must be boolean.');
1120
+ }
1121
+ if (query.includeExpiredPins !== true) {
1122
+ criteria.$and = [
1123
+ {
1124
+ $or: [{ kind: { $ne: 'pin' } }, { expiresAt: { $exists: false } }, { expiresAt: { $gt: new Date() } }],
1125
+ },
1126
+ ];
1127
+ }
1128
+ if (query.afterReferenceKey !== undefined) {
1129
+ const afterReferenceKey = this.recordSchemaQueryString(query.afterReferenceKey, 'afterReferenceKey');
1130
+ if (!RecordSchemaReference_1.RECORD_SCHEMA_REFERENCE_KEY_PATTERN.test(afterReferenceKey)) {
1131
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query afterReferenceKey is invalid.');
1132
+ }
1133
+ criteria.referenceKey = { $gt: afterReferenceKey };
1134
+ }
1135
+ const documents = await this.referenceCollection()
1136
+ .find(criteria)
1137
+ .sort({ referenceKey: 1 })
1138
+ .limit(limit)
1139
+ .toArray();
1140
+ return documents.map(recordSchemaPersistence_1.referenceModelFromDocument);
1141
+ }
1142
+ catch (error) {
1143
+ return this.throwRecordSchemaReadFailure('listRecordSchemaReferences', error);
1144
+ }
1145
+ }
1146
+ storedRecordSchemaDate(value, field) {
1147
+ const date = value instanceof Date ? value : new Date(String(value ?? ''));
1148
+ if (Number.isNaN(date.getTime())) {
1149
+ throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, `Stored record schema ${field} is invalid.`);
1150
+ }
1151
+ return date;
1152
+ }
1153
+ async create(_brand, record, _recordType, _user, options) {
1154
+ sails.log.verbose(`${this.logHeader} create() -> Begin`);
1155
+ // RecordsService may pre-assign the OID so attachment journal rows can
1156
+ // be prepared before the primary metadata commit. Preserve it when
1157
+ // supplied, while retaining the historical generated-OID behavior.
1158
+ record.redboxOid = record.redboxOid ?? this.getUuid();
1159
+ const response = this.createMutationResponse(String(record.redboxOid), options);
1160
+ const precondition = options?.precondition;
1161
+ // A create has no prior revision to compare, so a caller asserting one is
1162
+ // addressing a record that this call cannot be. An empty precondition is
1163
+ // accepted so callers can pass one normalized options object everywhere.
1164
+ if (precondition && (precondition.requireRevision || precondition.expectedRevision !== undefined)) {
1165
+ return this.notApplied(response, 'lifecycle-conflict', 'Record creation does not accept an existing revision');
1166
+ }
1167
+ const serverRecord = _.cloneDeep(record);
1168
+ // The storage boundary owns creation revision regardless of anything a
1169
+ // request candidate supplied.
1170
+ serverRecord.revision = redbox_core_1.INITIAL_RECORD_REVISION;
1171
+ _.unset(serverRecord, '_id');
1172
+ _.unset(serverRecord, 'id');
1173
+ _.unset(serverRecord, 'incarnationId');
1174
+ _.unset(serverRecord, 'lifecycleOperationId');
1175
+ const records = this.getNativeRecordCollection();
1176
+ if (typeof records?.insertOne !== 'function') {
1177
+ return this.notApplied(response, 'capability-unavailable', 'Atomic active record creation is unavailable');
1178
+ }
1179
+ let identity;
1180
+ try {
1181
+ identity = await this.claimNewRecordIdentity(String(record.redboxOid));
1182
+ }
1183
+ catch {
1184
+ return this.unknownMutation(response, 'Durable record identity ownership could not be confirmed');
1185
+ }
1186
+ if (!identity) {
1187
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1188
+ }
1189
+ if ('collision' in identity) {
1190
+ return this.notApplied(response, 'lifecycle-conflict', 'The record OID already has a durable incarnation');
1191
+ }
1192
+ const now = new Date().toISOString();
1193
+ const claimedIncarnationId = identity.incarnationId;
1194
+ serverRecord.incarnationId = claimedIncarnationId;
1195
+ serverRecord.dateCreated = serverRecord.dateCreated ?? now;
1196
+ serverRecord.lastSaveDate = now;
173
1197
  try {
174
1198
  sails.log.verbose(`${this.logHeader} Saving to DB...`);
175
- await Record.create(record);
176
- response.success = true;
1199
+ await records.insertOne(serverRecord);
1200
+ this.committed(response, serverRecord, 'updated');
177
1201
  sails.log.verbose(`${this.logHeader} Record created...`);
178
1202
  }
179
1203
  catch (err) {
180
- sails.log.error(`${this.logHeader} Failed to create Record:`);
181
- sails.log.error(JSON.stringify(err));
182
- response.success = false;
183
- response.message = this.getErrorMessage(err);
1204
+ if (this.isDuplicateKeyError(err)) {
1205
+ // Another writer owns this OID's state, so its ledger row is correct.
1206
+ return this.notApplied(response, 'lifecycle-conflict', 'The record OID already exists');
1207
+ }
1208
+ sails.log.error(`${this.logHeader} record_create_outcome_unknown`, {
1209
+ event: 'record_create_outcome_unknown',
1210
+ error_type: err instanceof Error ? err.name : 'unknown',
1211
+ });
1212
+ let observed;
1213
+ try {
1214
+ observed = await this.readCurrentState(String(record.redboxOid));
1215
+ }
1216
+ catch {
1217
+ observed = undefined;
1218
+ }
1219
+ if (observed?.active && this.storedIncarnationId(observed.active) === claimedIncarnationId) {
1220
+ return this.committed(response, observed.active, 'updated');
1221
+ }
1222
+ // A dispatched/ambiguous failure may still materialize later, so only
1223
+ // a definitive driver rejection is eligible for compensating release.
1224
+ if (this.isCertifiedCreateNonApplication(err)) {
1225
+ await this.releaseUnusedRecordIdentity(String(record.redboxOid), claimedIncarnationId);
1226
+ }
1227
+ this.unknownMutation(response, 'Record creation could not be confirmed');
184
1228
  return response;
185
1229
  }
186
- sails.log.verbose(JSON.stringify(response));
187
1230
  sails.log.verbose(`${this.logHeader} create() -> End`);
188
1231
  return response;
189
1232
  }
190
- async updateMeta(brand, oid, record, user) {
191
- const response = new redbox_core_1.StorageServiceResponse();
192
- response.oid = oid;
1233
+ async updateMeta(brand, oid, record, user, options) {
1234
+ const response = this.createMutationResponse(oid, options);
1235
+ const expectedRevision = this.expectedRevision(options, response);
1236
+ if (expectedRevision === null)
1237
+ return response;
1238
+ if (expectedRevision === Number.MAX_SAFE_INTEGER) {
1239
+ return this.notApplied(response, 'capability-unavailable', 'The record revision cannot be advanced safely');
1240
+ }
1241
+ const collection = this.getNativeRecordCollection();
1242
+ if (!this.supportsAtomicMutation(collection)) {
1243
+ return this.notApplied(response, 'capability-unavailable', 'The storage adapter cannot perform an atomic record revision update');
1244
+ }
1245
+ const candidate = _.cloneDeep(record);
1246
+ // Identity, creation, and revision are owned by storage, never by the
1247
+ // candidate; lastSaveDate is reissued with the committing write.
1248
+ for (const field of [
1249
+ '_id',
1250
+ 'id',
1251
+ 'redboxOid',
1252
+ 'revision',
1253
+ 'incarnationId',
1254
+ 'lifecycleOperationId',
1255
+ 'dateCreated',
1256
+ 'lastSaveDate',
1257
+ ]) {
1258
+ _.unset(candidate, field);
1259
+ }
1260
+ if (this.unsafeCandidateField(candidate) !== undefined) {
1261
+ sails.log.error(`${this.logHeader} refusing an update for oid ${oid}: unsupported candidate field name`);
1262
+ return this.notApplied(response, 'capability-unavailable', 'Record candidate contains an unsupported field');
1263
+ }
1264
+ const activeBrandId = this.brandIdOf(brand);
1265
+ const candidateSuppliesMetaMetadata = Object.prototype.hasOwnProperty.call(candidate, 'metaMetadata');
1266
+ const candidateBrandId = String(_.get(candidate, 'metaMetadata.brandId', '') ?? '').trim();
1267
+ if (activeBrandId && candidateSuppliesMetaMetadata && candidateBrandId !== activeBrandId) {
1268
+ return this.notApplied(response, 'brand-mismatch', 'Record was not found');
1269
+ }
1270
+ return this.commitConditionalMutation({
1271
+ response,
1272
+ kind: 'updated',
1273
+ dispatch: () => collection.findOneAndUpdate(this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision), {
1274
+ $set: { ...candidate, lastSaveDate: new Date().toISOString() },
1275
+ $inc: { revision: 1 },
1276
+ }, { returnDocument: 'after', includeResultMetadata: false }),
1277
+ classify: () => this.classifyActiveNoMatch(brand, oid, expectedRevision),
1278
+ expectedRevision,
1279
+ onDispatchError: err => {
1280
+ sails.log.error(`${this.logHeader} updateMeta() failed for oid ${oid}: ${this.getErrorMessage(err)}`);
1281
+ sails.log.error(`${this.logHeader} Failed to save update to MongoDB: ${JSON.stringify({
1282
+ error: err,
1283
+ response,
1284
+ brand,
1285
+ oid,
1286
+ user,
1287
+ })}`);
1288
+ },
1289
+ });
1290
+ }
1291
+ /**
1292
+ * Dispatch one atomic conditional mutation and turn its single driver fact
1293
+ * into a mutation response.
1294
+ *
1295
+ * The three outcomes are deliberately distinct: a returned document is an
1296
+ * applied commit, `null` certifies that the selector matched nothing and
1297
+ * therefore that no write happened, and anything else — including a throw
1298
+ * after dispatch — stays `unknown`. A failed follow-up classification only
1299
+ * costs the precise reason; it never turns a certified no-match into a
1300
+ * write, and it never issues one.
1301
+ */
1302
+ async commitConditionalMutation(operation) {
1303
+ const { response, kind, dispatch, classify, expectedRevision, onDispatchError } = operation;
1304
+ let document;
193
1305
  try {
194
- _.unset(record, 'dateCreated');
195
- _.unset(record, 'lastSaveDate');
196
- _.unset(record, '_id');
197
- _.unset(record, 'id');
198
- await Record.updateOne({ redboxOid: oid }).set(record);
199
- response.success = true;
1306
+ document = this.mutationDocument(await dispatch());
200
1307
  }
201
1308
  catch (err) {
202
- const errorMessage = this.getErrorMessage(err);
203
- sails.log.error(`${this.logHeader} updateMeta() failed for oid ${oid}: ${errorMessage}`);
204
- sails.log.error(`${this.logHeader} Failed to save update to MongoDB: ${JSON.stringify({
205
- error: err,
206
- response,
207
- brand,
208
- oid,
209
- record,
210
- user,
211
- })}`);
212
- response.success = false;
213
- response.message = errorMessage;
1309
+ onDispatchError?.(err);
1310
+ return this.unknownMutation(response, this.getErrorMessage(err));
1311
+ }
1312
+ if (document === undefined) {
1313
+ return this.unknownMutation(response, 'Storage returned an unrecognized mutation result');
1314
+ }
1315
+ if (document !== null) {
1316
+ return this.committed(response, document, kind, expectedRevision);
1317
+ }
1318
+ try {
1319
+ return this.notApplied(response, await classify());
1320
+ }
1321
+ catch (err) {
1322
+ sails.log.error(`${this.logHeader} could not classify a certified no-match for oid ${response.oid}: ` +
1323
+ this.getErrorMessage(err));
1324
+ return this.notApplied(response, 'capability-unavailable');
1325
+ }
1326
+ }
1327
+ async removeActiveRecord(brand, oid, options) {
1328
+ const response = this.createMutationResponse(oid, options);
1329
+ const expectedRevision = this.expectedRevision(options, response);
1330
+ if (expectedRevision === null)
1331
+ return response;
1332
+ const collection = this.getNativeRecordCollection();
1333
+ if (!this.supportsAtomicMutation(collection)) {
1334
+ return this.notApplied(response, 'capability-unavailable', 'Atomic active record removal is unavailable');
1335
+ }
1336
+ let current;
1337
+ try {
1338
+ current = this.mutationDocument(await collection.findOne(this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision)));
1339
+ if (current && !(await this.ensureRecordIdentity(oid, current))) {
1340
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1341
+ }
1342
+ }
1343
+ catch (error) {
1344
+ return this.unknownMutation(response, this.getErrorMessage(error));
1345
+ }
1346
+ return this.commitConditionalMutation({
1347
+ response,
1348
+ kind: 'removed',
1349
+ dispatch: () => collection.findOneAndDelete(this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision), {
1350
+ includeResultMetadata: false,
1351
+ }),
1352
+ classify: () => this.classifyActiveNoMatch(brand, oid, expectedRevision),
1353
+ expectedRevision,
1354
+ });
1355
+ }
1356
+ async createTombstone(brand, oid, record, options) {
1357
+ const response = this.createMutationResponse(oid, options);
1358
+ const expectedRevision = this.expectedRevision(options, response);
1359
+ if (expectedRevision === null)
1360
+ return response;
1361
+ if (expectedRevision === undefined || !(0, redbox_core_1.isCanonicalSaveRequestId)(options?.lifecycle?.operationId)) {
1362
+ return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle intent ownership is required');
1363
+ }
1364
+ const collection = this.getNativeTombstoneCollection();
1365
+ if (!this.supportsAtomicMutation(collection) || typeof collection.insertOne !== 'function') {
1366
+ return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone creation is unavailable');
1367
+ }
1368
+ const candidate = _.cloneDeep(record);
1369
+ for (const field of ['_id', 'id'])
1370
+ _.unset(candidate, field);
1371
+ const operation = candidate.lifecycleOperation;
1372
+ const targetRevision = (0, redbox_core_1.nextRecordRevision)(expectedRevision);
1373
+ const expectedState = options.lifecycle.expectedState;
1374
+ if (candidate.redboxOid !== oid ||
1375
+ candidate.revision !== targetRevision ||
1376
+ !(0, redbox_core_1.isDeletedRecordLifecycleState)(candidate.lifecycleState) ||
1377
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(operation) ||
1378
+ (expectedState !== 'delete-pending' && expectedState !== 'purge-pending') ||
1379
+ candidate.lifecycleState !== expectedState ||
1380
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(candidate.lifecycleState, operation.kind) ||
1381
+ operation.operationId !== options.lifecycle.operationId ||
1382
+ operation.sourceRevision !== expectedRevision ||
1383
+ operation.targetRevision !== targetRevision) {
1384
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle intent is invalid');
1385
+ }
1386
+ const requestedBrandId = this.brandIdOf(brand);
1387
+ const candidateBrandId = String(candidate.brandId ?? '').trim();
1388
+ const snapshotBrandId = String(_.get(candidate, 'deletedRecordMetadata.metaMetadata.brandId', '') ?? '').trim();
1389
+ if (requestedBrandId && (candidateBrandId !== requestedBrandId || snapshotBrandId !== requestedBrandId)) {
1390
+ return this.notApplied(response, 'brand-mismatch', 'Tombstone was not found');
1391
+ }
1392
+ if (!candidate.deletedRecordMetadata ||
1393
+ typeof candidate.deletedRecordMetadata !== 'object' ||
1394
+ Array.isArray(candidate.deletedRecordMetadata) ||
1395
+ _.get(candidate, 'deletedRecordMetadata.redboxOid') !== oid) {
1396
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone record snapshot is invalid');
1397
+ }
1398
+ _.unset(candidate, 'deletedRecordMetadata.revision');
1399
+ let incarnationId;
1400
+ try {
1401
+ incarnationId = await this.ensureRecordIdentity(oid, candidate.deletedRecordMetadata);
1402
+ }
1403
+ catch (error) {
1404
+ return this.unknownMutation(response, this.getErrorMessage(error));
1405
+ }
1406
+ if (!incarnationId) {
1407
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1408
+ }
1409
+ const suppliedIncarnationId = this.storedIncarnationId(candidate) ?? this.storedIncarnationId(candidate.deletedRecordMetadata);
1410
+ if (suppliedIncarnationId && suppliedIncarnationId !== incarnationId) {
1411
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone incarnation identity diverged');
1412
+ }
1413
+ candidate.incarnationId = incarnationId;
1414
+ candidate.deletedRecordMetadata.incarnationId = incarnationId;
1415
+ try {
1416
+ await collection.insertOne(candidate);
1417
+ return this.committed(response, candidate, 'updated', expectedRevision);
1418
+ }
1419
+ catch (error) {
1420
+ if (!this.isDuplicateKeyError(error)) {
1421
+ return this.unknownMutation(response, this.getErrorMessage(error));
1422
+ }
1423
+ try {
1424
+ const existing = this.mutationDocument(await collection.findOne({ redboxOid: oid }));
1425
+ if (existing === undefined)
1426
+ return this.unknownMutation(response, 'Tombstone ownership could not be observed');
1427
+ if (existing === null)
1428
+ return this.notApplied(response, 'lifecycle-conflict');
1429
+ if (!this.isRequestedBrand(existing, requestedBrandId))
1430
+ return this.notApplied(response, 'brand-mismatch');
1431
+ const existingOperation = existing.lifecycleOperation;
1432
+ if (!(0, redbox_core_1.isRecordRevision)(existing.revision) ||
1433
+ existing.revision < targetRevision ||
1434
+ !(0, redbox_core_1.isDeletedRecordLifecycleState)(existing.lifecycleState) ||
1435
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(existingOperation) ||
1436
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(existing.lifecycleState, existingOperation.kind) ||
1437
+ existingOperation.operationId !== options.lifecycle.operationId ||
1438
+ existingOperation.kind !== operation.kind) {
1439
+ return this.notApplied(response, 'lifecycle-conflict');
1440
+ }
1441
+ return this.committed(response, existing, 'updated');
1442
+ }
1443
+ catch (readError) {
1444
+ return this.unknownMutation(response, this.getErrorMessage(readError));
1445
+ }
1446
+ }
1447
+ }
1448
+ async updateTombstone(brand, oid, record, options) {
1449
+ const response = this.createMutationResponse(oid, options);
1450
+ const expectedRevision = this.expectedRevision(options, response);
1451
+ if (expectedRevision === null)
1452
+ return response;
1453
+ if (expectedRevision === Number.MAX_SAFE_INTEGER) {
1454
+ return this.notApplied(response, 'capability-unavailable', 'The tombstone revision cannot be advanced safely');
1455
+ }
1456
+ const collection = this.getNativeTombstoneCollection();
1457
+ if (!this.supportsAtomicMutation(collection)) {
1458
+ return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone update is unavailable');
1459
+ }
1460
+ if (expectedRevision === undefined || !options?.lifecycle?.expectedState) {
1461
+ return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle state and revision are required');
1462
+ }
1463
+ const candidate = _.cloneDeep(record);
1464
+ for (const field of ['_id', 'id', 'redboxOid', 'revision', 'incarnationId', 'dateDeleted'])
1465
+ _.unset(candidate, field);
1466
+ if (this.unsafeCandidateField(candidate) !== undefined) {
1467
+ sails.log.error(`${this.logHeader} refusing a tombstone update for oid ${oid}: unsupported candidate field`);
1468
+ return this.notApplied(response, 'capability-unavailable', 'Tombstone candidate contains an unsupported field');
1469
+ }
1470
+ if (!(0, redbox_core_1.isDeletedRecordLifecycleState)(candidate.lifecycleState)) {
1471
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle state is invalid');
1472
+ }
1473
+ const operation = candidate.lifecycleOperation;
1474
+ if (!(0, redbox_core_1.isDeletedRecordLifecycleOperation)(operation) ||
1475
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(candidate.lifecycleState, operation.kind) ||
1476
+ operation.sourceRevision > expectedRevision ||
1477
+ operation.targetRevision !== (0, redbox_core_1.nextRecordRevision)(expectedRevision) ||
1478
+ (options.lifecycle.operationId !== undefined && operation.operationId !== options.lifecycle.operationId)) {
1479
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle operation is invalid');
1480
+ }
1481
+ if (candidate.deletedRecordMetadata !== undefined &&
1482
+ (candidate.deletedRecordMetadata === null ||
1483
+ typeof candidate.deletedRecordMetadata !== 'object' ||
1484
+ Array.isArray(candidate.deletedRecordMetadata))) {
1485
+ return this.notApplied(response, 'lifecycle-conflict', 'Tombstone record snapshot is invalid');
1486
+ }
1487
+ if (candidate.deletedRecordMetadata && typeof candidate.deletedRecordMetadata === 'object') {
1488
+ // The wrapper is the sole current lifecycle revision authority. Source
1489
+ // lineage lives in lifecycleOperation.sourceRevision.
1490
+ _.unset(candidate, 'deletedRecordMetadata.revision');
1491
+ }
1492
+ try {
1493
+ const current = this.mutationDocument(await collection.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1494
+ if (current) {
1495
+ const incarnationId = await this.ensureRecordIdentity(oid, current);
1496
+ if (!incarnationId) {
1497
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1498
+ }
1499
+ if (candidate.deletedRecordMetadata && typeof candidate.deletedRecordMetadata === 'object') {
1500
+ candidate.deletedRecordMetadata.incarnationId = incarnationId;
1501
+ }
1502
+ }
1503
+ }
1504
+ catch (error) {
1505
+ return this.unknownMutation(response, this.getErrorMessage(error));
1506
+ }
1507
+ const activeBrandId = this.brandIdOf(brand);
1508
+ const candidateBrandId = String(candidate.brandId ?? '').trim();
1509
+ const candidateSuppliesBrandId = Object.prototype.hasOwnProperty.call(candidate, 'brandId');
1510
+ const candidateSuppliesSnapshot = Object.prototype.hasOwnProperty.call(candidate, 'deletedRecordMetadata');
1511
+ const candidateSnapshotBrandId = String(_.get(candidate, 'deletedRecordMetadata.metaMetadata.brandId', '') ?? '').trim();
1512
+ if (activeBrandId &&
1513
+ ((candidateSuppliesBrandId && candidateBrandId !== activeBrandId) ||
1514
+ (candidateSuppliesSnapshot && candidateSnapshotBrandId !== activeBrandId))) {
1515
+ return this.notApplied(response, 'brand-mismatch', 'Tombstone was not found');
1516
+ }
1517
+ return this.commitConditionalMutation({
1518
+ response,
1519
+ kind: 'updated',
1520
+ dispatch: () => collection.findOneAndUpdate(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options), { $set: candidate, $inc: { revision: 1 } }, { returnDocument: 'after', includeResultMetadata: false }),
1521
+ classify: () => this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options),
1522
+ expectedRevision,
1523
+ });
1524
+ }
1525
+ async removeTombstone(brand, oid, options) {
1526
+ const response = this.createMutationResponse(oid, options);
1527
+ const expectedRevision = this.expectedRevision(options, response);
1528
+ if (expectedRevision === null)
1529
+ return response;
1530
+ if (expectedRevision === undefined ||
1531
+ !options?.lifecycle?.expectedState ||
1532
+ !(0, redbox_core_1.isCanonicalSaveRequestId)(options.lifecycle.operationId)) {
1533
+ return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle removal ownership is required');
1534
+ }
1535
+ const collection = this.getNativeTombstoneCollection();
1536
+ if (!this.supportsAtomicMutation(collection)) {
1537
+ return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone removal is unavailable');
1538
+ }
1539
+ try {
1540
+ const current = this.mutationDocument(await collection.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1541
+ if (current && !(await this.ensureRecordIdentity(oid, current))) {
1542
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1543
+ }
1544
+ }
1545
+ catch (error) {
1546
+ return this.unknownMutation(response, this.getErrorMessage(error));
1547
+ }
1548
+ return this.commitConditionalMutation({
1549
+ response,
1550
+ kind: 'removed',
1551
+ dispatch: () => collection.findOneAndDelete(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options), { includeResultMetadata: false }),
1552
+ classify: () => this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options),
1553
+ expectedRevision,
1554
+ });
1555
+ }
1556
+ async createActiveRecordFromTombstone(brand, oid, record, options) {
1557
+ const response = this.createMutationResponse(oid, options);
1558
+ const expectedRevision = this.expectedRevision(options, response);
1559
+ const operationId = options?.lifecycle?.operationId;
1560
+ if (expectedRevision === null ||
1561
+ expectedRevision === undefined ||
1562
+ !(0, redbox_core_1.isCanonicalSaveRequestId)(operationId) ||
1563
+ (options?.lifecycle?.expectedState !== 'restore-pending' &&
1564
+ options?.lifecycle?.expectedState !== 'recovery-required')) {
1565
+ return this.notApplied(response, 'capability-unavailable', 'Exact restore ownership is required');
1566
+ }
1567
+ const records = this.getNativeRecordCollection();
1568
+ const tombstones = this.getNativeTombstoneCollection();
1569
+ if (!this.supportsAtomicMutation(records) ||
1570
+ !this.supportsAtomicMutation(tombstones) ||
1571
+ typeof records.insertOne !== 'function') {
1572
+ return this.notApplied(response, 'capability-unavailable', 'Atomic restore creation is unavailable');
1573
+ }
1574
+ let claimed;
1575
+ try {
1576
+ claimed = this.mutationDocument(await tombstones.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1577
+ }
1578
+ catch (error) {
1579
+ return this.unknownMutation(response, this.getErrorMessage(error));
1580
+ }
1581
+ if (claimed === undefined)
1582
+ return this.unknownMutation(response, 'Restore ownership could not be observed');
1583
+ if (claimed === null) {
1584
+ const reason = await this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options).catch(() => 'capability-unavailable');
1585
+ return this.notApplied(response, reason);
1586
+ }
1587
+ const targetRevision = (0, redbox_core_1.nextRecordRevision)(expectedRevision);
1588
+ const claimedOperation = claimed.lifecycleOperation;
1589
+ const claimedSnapshot = claimed.deletedRecordMetadata;
1590
+ if (!(0, redbox_core_1.isDeletedRecordLifecycleState)(claimed.lifecycleState) ||
1591
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(claimedOperation) ||
1592
+ !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(claimed.lifecycleState, claimedOperation.kind) ||
1593
+ claimedOperation.kind !== 'restore' ||
1594
+ claimedOperation.operationId !== operationId ||
1595
+ claimedOperation.targetRevision !== expectedRevision ||
1596
+ !claimedSnapshot ||
1597
+ typeof claimedSnapshot !== 'object' ||
1598
+ Array.isArray(claimedSnapshot)) {
1599
+ return this.notApplied(response, 'lifecycle-conflict', 'Claimed restore state is invalid');
1600
+ }
1601
+ let incarnationId;
1602
+ try {
1603
+ incarnationId = await this.ensureRecordIdentity(oid, claimed);
1604
+ }
1605
+ catch (error) {
1606
+ return this.unknownMutation(response, this.getErrorMessage(error));
1607
+ }
1608
+ if (!incarnationId) {
1609
+ return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1610
+ }
1611
+ const claimedIncarnationId = this.storedIncarnationId(claimed) ?? this.storedIncarnationId(claimedSnapshot);
1612
+ if (claimedIncarnationId && claimedIncarnationId !== incarnationId) {
1613
+ return this.notApplied(response, 'lifecycle-conflict', 'Restore incarnation identity diverged');
1614
+ }
1615
+ const restoredInput = _.cloneDeep(record);
1616
+ const restored = _.cloneDeep(claimedSnapshot);
1617
+ for (const field of ['_id', 'id', 'revision', 'incarnationId', 'lifecycleOperationId', 'lastSaveDate']) {
1618
+ _.unset(restored, field);
1619
+ }
1620
+ const requestedBrandId = this.brandIdOf(brand);
1621
+ if (restoredInput.redboxOid !== oid ||
1622
+ restored.redboxOid !== oid ||
1623
+ (requestedBrandId &&
1624
+ (String(_.get(restoredInput, 'metaMetadata.brandId', '') ?? '').trim() !== requestedBrandId ||
1625
+ String(_.get(restored, 'metaMetadata.brandId', '') ?? '').trim() !== requestedBrandId))) {
1626
+ return this.notApplied(response, 'brand-mismatch', 'Record was not found');
1627
+ }
1628
+ if (this.unsafeCandidateField(restored) !== undefined) {
1629
+ return this.notApplied(response, 'lifecycle-conflict', 'Restored record contains an unsupported field');
1630
+ }
1631
+ const candidate = {
1632
+ ...restored,
1633
+ redboxOid: oid,
1634
+ revision: targetRevision,
1635
+ incarnationId,
1636
+ lifecycleOperationId: operationId,
1637
+ lastSaveDate: new Date().toISOString(),
1638
+ };
1639
+ try {
1640
+ await records.insertOne(candidate);
1641
+ return this.committed(response, candidate, 'updated', expectedRevision);
1642
+ }
1643
+ catch (error) {
1644
+ if (!this.isDuplicateKeyError(error)) {
1645
+ return this.unknownMutation(response, this.getErrorMessage(error));
1646
+ }
1647
+ try {
1648
+ const existing = this.mutationDocument(await records.findOne({ redboxOid: oid }));
1649
+ if (existing === undefined)
1650
+ return this.unknownMutation(response, 'Restored active state could not be observed');
1651
+ if (existing === null)
1652
+ return this.notApplied(response, 'lifecycle-conflict');
1653
+ if (!this.isRequestedBrand(existing, requestedBrandId))
1654
+ return this.notApplied(response, 'brand-mismatch');
1655
+ if (existing.lifecycleOperationId !== operationId ||
1656
+ !(0, redbox_core_1.isRecordRevision)(existing.revision) ||
1657
+ existing.revision < targetRevision) {
1658
+ return this.notApplied(response, 'lifecycle-conflict');
1659
+ }
1660
+ return this.committed(response, existing, 'updated');
1661
+ }
1662
+ catch (readError) {
1663
+ return this.unknownMutation(response, this.getErrorMessage(readError));
1664
+ }
214
1665
  }
215
- return response;
1666
+ }
1667
+ async getTombstone(brand, oid) {
1668
+ if (!oid.trim())
1669
+ throw new Error(`${this.logHeader} getTombstone() -> refusing to search using an empty OID`);
1670
+ const collection = this.getNativeTombstoneCollection();
1671
+ if (typeof collection?.findOne !== 'function')
1672
+ throw new Error('Tombstone reads are unavailable');
1673
+ const result = this.mutationDocument(await collection.findOne(this.tombstoneIdentity(brand, oid)));
1674
+ if (result === undefined)
1675
+ throw new Error('Storage returned an unrecognized tombstone result');
1676
+ return result;
1677
+ }
1678
+ async getLifecycleTombstones(states, limit = 100) {
1679
+ const normalizedStates = states.filter(redbox_core_1.isDeletedRecordLifecycleState);
1680
+ if (normalizedStates.length === 0)
1681
+ return [];
1682
+ const collection = this.getNativeTombstoneCollection();
1683
+ if (typeof collection?.find !== 'function')
1684
+ throw new Error('Lifecycle recovery scans are unavailable');
1685
+ const boundedLimit = Math.max(1, Math.min(Number.isSafeInteger(limit) ? limit : 100, 1000));
1686
+ return (await collection
1687
+ .find({ lifecycleState: { $in: normalizedStates } })
1688
+ .limit(boundedLimit)
1689
+ .toArray());
216
1690
  }
217
1691
  async getMeta(oid) {
218
1692
  if (_.isEmpty(oid)) {
@@ -235,60 +1709,56 @@ var Services;
235
1709
  sails.log.verbose(`${this.logHeader} finding deleted record: `);
236
1710
  sails.log.verbose(JSON.stringify(criteria));
237
1711
  const deletedRecord = await DeletedRecord.findOne(criteria);
238
- return (deletedRecord?.deletedRecordMetadata ?? null);
1712
+ if (!deletedRecord?.deletedRecordMetadata)
1713
+ return null;
1714
+ const revision = (0, redbox_core_1.isRecordRevision)(deletedRecord.revision) ? deletedRecord.revision : redbox_core_1.INITIAL_RECORD_REVISION;
1715
+ // Tombstone wrapper revision is authoritative even when a legacy
1716
+ // embedded snapshot still contains a historical active revision.
1717
+ return { ...deletedRecord.deletedRecordMetadata, revision };
239
1718
  }
240
1719
  async createBatch(type, data, harvestIdFldName) {
241
- const response = new redbox_core_1.StorageServiceResponse();
242
- response.message = '';
243
- let failFlag = false;
244
- _.each(data, async (dataItem) => {
1720
+ const response = new redbox_core_1.StorageMutationResponse();
1721
+ let notAppliedCount = 0;
1722
+ let unknownCount = 0;
1723
+ for (const [rowIndex, dataItem] of data.entries()) {
245
1724
  dataItem.harvestId = _.get(dataItem, harvestIdFldName, '');
246
1725
  _.set(dataItem, 'metaMetadata.type', type);
247
1726
  try {
248
- await this.create(null, dataItem, null, null);
1727
+ const rowResponse = await this.create(null, dataItem, null, null);
1728
+ if (rowResponse.applicationState === 'applied' && rowResponse.success === true) {
1729
+ continue;
1730
+ }
1731
+ if (rowResponse.applicationState === 'not-applied') {
1732
+ notAppliedCount += 1;
1733
+ sails.log.error(`${this.logHeader} createBatch row was not applied`, {
1734
+ event: 'record_batch_create_row_not_applied',
1735
+ row_index: rowIndex,
1736
+ });
1737
+ continue;
1738
+ }
1739
+ unknownCount += 1;
1740
+ sails.log.error(`${this.logHeader} createBatch row outcome is unknown`, {
1741
+ event: 'record_batch_create_row_unknown',
1742
+ row_index: rowIndex,
1743
+ });
249
1744
  }
250
- catch (err) {
251
- failFlag = true;
252
- sails.log.error(`${this.logHeader} Failed createBatch entry: `);
253
- sails.log.error(JSON.stringify(dataItem));
254
- sails.log.error(`${this.logHeader} Failed createBatch error: `);
255
- sails.log.error(JSON.stringify(err));
256
- response.message = `${response.message}, ${err.message}`;
1745
+ catch {
1746
+ unknownCount += 1;
1747
+ sails.log.error(`${this.logHeader} createBatch row outcome is unknown`, {
1748
+ event: 'record_batch_create_row_unknown',
1749
+ row_index: rowIndex,
1750
+ });
257
1751
  }
258
- });
259
- response.success = failFlag === false;
1752
+ }
1753
+ response.success = notAppliedCount === 0 && unknownCount === 0;
1754
+ response.applicationState = unknownCount > 0 ? 'unknown' : notAppliedCount > 0 ? 'not-applied' : 'applied';
1755
+ response.message = response.success
1756
+ ? ''
1757
+ : `Batch create incomplete (${notAppliedCount} not applied, ${unknownCount} unknown).`;
260
1758
  return response;
261
1759
  }
262
- provideUserAccessAndRemovePendingAccess(oid, userid, pendingValue) {
263
- const batchFn = async () => {
264
- const metadata = (await this.getMeta(oid));
265
- const pendingEditArray = _.get(metadata, 'authorization.editPending', []);
266
- const editArray = _.get(metadata, 'authorization.edit', []);
267
- const pendingEditArrayFiltered = pendingEditArray.filter(value => value !== pendingValue);
268
- const pendingEditFound = pendingEditArray.length > pendingEditArrayFiltered.length;
269
- if (pendingEditFound && !editArray.includes(userid)) {
270
- editArray.push(userid);
271
- }
272
- _.set(metadata, 'authorization.editPending', pendingEditArrayFiltered);
273
- _.set(metadata, 'authorization.edit', editArray);
274
- const pendingViewArray = _.get(metadata, 'authorization.viewPending', []);
275
- const viewArray = _.get(metadata, 'authorization.view', []);
276
- const pendingViewArrayFiltered = pendingViewArray.filter(value => value !== pendingValue);
277
- const pendingViewFound = pendingViewArray.length > pendingViewArrayFiltered.length;
278
- if (pendingViewFound && !viewArray.includes(userid)) {
279
- viewArray.push(userid);
280
- }
281
- _.set(metadata, 'authorization.viewPending', pendingViewArrayFiltered);
282
- _.set(metadata, 'authorization.view', viewArray);
283
- try {
284
- await this.updateMeta(null, oid, metadata);
285
- }
286
- catch (err) {
287
- sails.log.error(`${this.logHeader} Failed to update on 'provideUserAccessAndRemovePendingAccess': `);
288
- sails.log.error(JSON.stringify(err));
289
- }
290
- };
291
- batchFn();
1760
+ async provideUserAccessAndRemovePendingAccess(oid, _userid, _pendingValue) {
1761
+ return this.notApplied(this.createMutationResponse(oid), 'capability-unavailable', 'Permission rewrites require the authoritative RecordsService mutation pipeline');
292
1762
  }
293
1763
  async getRelatedRecords(oid, brand, options = {}) {
294
1764
  const mappingContext = await this.walkRelatedRecords(String(oid ?? ''), brand, options);
@@ -307,8 +1777,8 @@ var Services;
307
1777
  const record = (await this.getMeta(normalizedOid));
308
1778
  const currentRecordTypeName = String(recordTypeName ?? _.get(record, 'metaMetadata.type', '')).trim();
309
1779
  const maxDepth = typeof options.depth === 'number' && options.depth >= 0 ? options.depth : Number.POSITIVE_INFINITY;
310
- const includeRecordTypes = new Set((options.includeRecordTypes ?? []).map((value) => String(value ?? '').trim()).filter(Boolean));
311
- const includeRelationIds = new Set((options.includeRelationIds ?? []).map((value) => String(value ?? '').trim()).filter(Boolean));
1780
+ const includeRecordTypes = new Set((options.includeRecordTypes ?? []).map(value => String(value ?? '').trim()).filter(Boolean));
1781
+ const includeRelationIds = new Set((options.includeRelationIds ?? []).map(value => String(value ?? '').trim()).filter(Boolean));
312
1782
  if (_.isEmpty(mappingContext)) {
313
1783
  mappingContext = {
314
1784
  rootOid: normalizedOid,
@@ -403,17 +1873,13 @@ var Services;
403
1873
  extractRelationshipLocalValues(record, relationship) {
404
1874
  const rawValue = _.get(record, relationship.localField, relationship.localField === 'redboxOid' ? record.redboxOid : undefined);
405
1875
  const values = Array.isArray(rawValue) ? rawValue : [rawValue];
406
- return values
407
- .map((value) => String(value ?? '').trim())
408
- .filter((value) => value !== '');
1876
+ return values.map(value => String(value ?? '').trim()).filter(value => value !== '');
409
1877
  }
410
1878
  buildRelationshipCriteria(relationship, localValues) {
411
1879
  const criteria = {
412
1880
  'metaMetadata.type': relationship.recordType,
413
1881
  };
414
- criteria[relationship.foreignField] = localValues.length === 1
415
- ? localValues[0]
416
- : { in: localValues };
1882
+ criteria[relationship.foreignField] = localValues.length === 1 ? localValues[0] : { in: localValues };
417
1883
  return criteria;
418
1884
  }
419
1885
  async findRelatedRecords(relationship, criteria) {
@@ -421,8 +1887,9 @@ var Services;
421
1887
  if (relationship.cardinality === 'one' && typeof query.sort === 'function' && typeof query.limit === 'function') {
422
1888
  const chainedQuery = query.sort('redboxOid ASC');
423
1889
  if (typeof chainedQuery.limit === 'function') {
424
- return await chainedQuery.limit(1)
425
- .meta({ enableExperimentalDeepTargets: true });
1890
+ return await chainedQuery.limit(1).meta({
1891
+ enableExperimentalDeepTargets: true,
1892
+ });
426
1893
  }
427
1894
  }
428
1895
  const relatedRecords = await query.meta({ enableExperimentalDeepTargets: true });
@@ -453,46 +1920,14 @@ var Services;
453
1920
  targetRecordType: relationship.recordType,
454
1921
  };
455
1922
  }
456
- async delete(oid, permanentlyDelete = false) {
457
- const response = new redbox_core_1.StorageServiceResponse();
458
- try {
459
- if (permanentlyDelete) {
460
- const datastreams = await this.listDatastreams(oid, null);
461
- if (_.size(datastreams) > 0) {
462
- _.each(datastreams, async (file) => {
463
- sails.log.verbose(`Deleting:`);
464
- sails.log.verbose(JSON.stringify(file));
465
- try {
466
- await this.gridFsBucket.delete(file['_id']);
467
- }
468
- catch (err) {
469
- sails.log.error(`Error deleting: ${file['_id']}`);
470
- sails.log.error(JSON.stringify(err));
471
- }
472
- });
473
- }
474
- }
475
- else {
476
- const record = (await this.getMeta(oid));
477
- const deletedRecord = {
478
- redboxOid: record.redboxOid,
479
- deletedRecordMetadata: record,
480
- };
481
- await DeletedRecord.create(deletedRecord);
482
- }
483
- await Record.destroyOne({ redboxOid: oid });
484
- response.success = true;
485
- }
486
- catch (err) {
487
- sails.log.error(`${this.logHeader} Failed to delete record: ${oid}`);
488
- sails.log.error(JSON.stringify(err));
489
- response.success = false;
490
- response.message = err.message;
491
- }
492
- return response;
1923
+ async delete(oid, _permanentlyDelete = false, options) {
1924
+ return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Record deletion requires staged lifecycle orchestration');
493
1925
  }
494
1926
  async updateNotificationLog(oid, record, options) {
495
1927
  if (super.metTriggerCondition(oid, record, options) == 'true') {
1928
+ if (_.get(options, 'saveRecord', false)) {
1929
+ return this.notApplied(this.createMutationResponse(oid), 'capability-unavailable', 'Notification writes require the authoritative RecordsService mutation pipeline');
1930
+ }
496
1931
  sails.log.verbose(`${this.logHeader} Updating notification log for oid: ${oid}`);
497
1932
  const logName = _.get(options, 'logName', null);
498
1933
  if (logName) {
@@ -513,16 +1948,6 @@ var Services;
513
1948
  sails.log.verbose(`======== Notification log updates =========`);
514
1949
  sails.log.verbose(JSON.stringify(record));
515
1950
  sails.log.verbose(`======== End update =========`);
516
- if (_.get(options, 'saveRecord', false)) {
517
- try {
518
- await this.updateMeta(null, oid, record, null);
519
- }
520
- catch (err) {
521
- sails.log.error(`${this.logHeader} Failed to update notification log of ${oid}:`);
522
- sails.log.error(JSON.stringify(err));
523
- throw err;
524
- }
525
- }
526
1951
  }
527
1952
  else {
528
1953
  sails.log.verbose(`Notification log name: '${options.name}', for oid: ${oid}, not running, condition not met: ${options.triggerCondition}`);
@@ -854,7 +2279,7 @@ var Services;
854
2279
  objectMode: true,
855
2280
  transform(record, _encoding, callback) {
856
2281
  callback(null, sanitizeCsvRecord(record));
857
- }
2282
+ },
858
2283
  });
859
2284
  const json2csv = new json2csv_1.Transform({ fields, transforms: [flatten()] }, { objectMode: true });
860
2285
  await (0, promises_1.pipeline)(stream.Readable.from(this.fetchAllRecords(query, { ...options })), sanitize, json2csv, passThrough);
@@ -984,6 +2409,15 @@ var Services;
984
2409
  sails.log.verbose(`${this.logHeader} removeDatastream() -> File not found: ${fileName}`);
985
2410
  }
986
2411
  }
2412
+ async removeStagedDatastream(fileId) {
2413
+ const normalizedFileId = (0, redbox_core_1.normalizeAttachmentStagingFileId)(fileId);
2414
+ if (!normalizedFileId)
2415
+ throw new Error('Invalid staged attachment identity.');
2416
+ const stagingDisk = StorageManagerService.stagingDisk();
2417
+ if (await stagingDisk.exists(normalizedFileId)) {
2418
+ await stagingDisk.delete(normalizedFileId);
2419
+ }
2420
+ }
987
2421
  async addDatastream(oid, datastream, stagingDisk) {
988
2422
  const fileId = datastream.fileId;
989
2423
  sails.log.verbose(`${this.logHeader} addDatastream() -> Meta: ${fileId}`);
@@ -1067,12 +2501,101 @@ var Services;
1067
2501
  return undefined;
1068
2502
  }
1069
2503
  }
2504
+ sanitizeRecordHookExecutionSummary(value) {
2505
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
2506
+ return undefined;
2507
+ }
2508
+ const source = value;
2509
+ if (source.schemaVersion !== 1 || source.trigger !== 'record-hook') {
2510
+ return undefined;
2511
+ }
2512
+ const safeStatuses = new Set(['succeeded', 'failed', 'timed_out', 'interrupted', 'skipped', 'dispatched']);
2513
+ const safeKinds = new Set([
2514
+ 'configuration',
2515
+ 'validation',
2516
+ 'domain',
2517
+ 'transient',
2518
+ 'timeout',
2519
+ 'interrupted',
2520
+ 'unexpected',
2521
+ ]);
2522
+ const safeReasons = new Set([
2523
+ 'prior_action_failed',
2524
+ 'phase_not_reached',
2525
+ 'save_not_persisted',
2526
+ 'trigger_disabled',
2527
+ ]);
2528
+ const actions = Array.isArray(source.actions)
2529
+ ? source.actions.slice(0, 100).flatMap(item => {
2530
+ if (!item || typeof item !== 'object' || Array.isArray(item))
2531
+ return [];
2532
+ const action = item;
2533
+ if (typeof action.actionId !== 'string' ||
2534
+ typeof action.mode !== 'string' ||
2535
+ typeof action.phase !== 'string' ||
2536
+ typeof action.status !== 'string' ||
2537
+ !safeStatuses.has(action.status))
2538
+ return [];
2539
+ const result = {
2540
+ actionId: action.actionId.slice(0, 128),
2541
+ mode: action.mode,
2542
+ phase: action.phase,
2543
+ status: action.status,
2544
+ attempts: Number.isInteger(action.attempts) && Number(action.attempts) >= 0 ? Number(action.attempts) : 0,
2545
+ durationMs: Number.isInteger(action.durationMs) && Number(action.durationMs) >= 0 ? Number(action.durationMs) : 0,
2546
+ };
2547
+ if (typeof action.failureKind === 'string' && safeKinds.has(action.failureKind))
2548
+ result.failureKind = action.failureKind;
2549
+ if (typeof action.failureCode === 'string' && action.failureCode.length <= 128)
2550
+ result.failureCode = action.failureCode;
2551
+ if (typeof action.skippedReason === 'string' && safeReasons.has(action.skippedReason))
2552
+ result.skippedReason = action.skippedReason;
2553
+ return [result];
2554
+ })
2555
+ : [];
2556
+ const counts = {};
2557
+ if (source.counts && typeof source.counts === 'object' && !Array.isArray(source.counts)) {
2558
+ for (const [key, count] of Object.entries(source.counts)) {
2559
+ if (safeStatuses.has(key) && Number.isInteger(count) && Number(count) >= 0)
2560
+ counts[key] = Number(count);
2561
+ }
2562
+ }
2563
+ const summary = {
2564
+ schemaVersion: 1,
2565
+ executionId: typeof source.executionId === 'string' ? source.executionId.slice(0, 128) : '',
2566
+ trigger: 'record-hook',
2567
+ operation: ['create', 'update', 'delete', 'transition'].includes(String(source.operation))
2568
+ ? source.operation
2569
+ : 'update',
2570
+ partial: source.partial === true,
2571
+ durationMs: Number.isInteger(source.durationMs) && Number(source.durationMs) >= 0 ? Number(source.durationMs) : 0,
2572
+ totalActions: Number.isInteger(source.totalActions) && Number(source.totalActions) >= 0
2573
+ ? Number(source.totalActions)
2574
+ : actions.length,
2575
+ counts,
2576
+ actions,
2577
+ truncated: source.truncated === true,
2578
+ };
2579
+ if (typeof source.requestId === 'string' && source.requestId.length <= 128)
2580
+ summary.requestId = source.requestId;
2581
+ if (['pre', 'persistence', 'postSync', 'post-dispatch'].includes(String(source.completedThrough))) {
2582
+ summary.completedThrough = source.completedThrough;
2583
+ }
2584
+ if (['complete', 'grace-expired'].includes(String(source.detachedFinalization))) {
2585
+ summary.detachedFinalization = source.detachedFinalization;
2586
+ }
2587
+ if (Number.isInteger(source.detachedPending) && Number(source.detachedPending) > 0) {
2588
+ summary.detachedPending = Number(source.detachedPending);
2589
+ }
2590
+ return summary;
2591
+ }
1070
2592
  sanitizeRecordAudit(recordAudit) {
1071
2593
  const payload = {
1072
2594
  redboxOid: recordAudit.redboxOid,
1073
2595
  action: recordAudit.action,
1074
2596
  user: this.toJsonSafe(recordAudit.user),
1075
2597
  record: this.toJsonSafe(recordAudit.record),
2598
+ executionSummary: this.sanitizeRecordHookExecutionSummary(recordAudit.executionSummary),
1076
2599
  };
1077
2600
  if (_.isUndefined(payload.user)) {
1078
2601
  delete payload.user;
@@ -1080,6 +2603,9 @@ var Services;
1080
2603
  if (_.isUndefined(payload.record)) {
1081
2604
  delete payload.record;
1082
2605
  }
2606
+ if (_.isUndefined(payload.executionSummary)) {
2607
+ delete payload.executionSummary;
2608
+ }
1083
2609
  return payload;
1084
2610
  }
1085
2611
  sanitizeIntegrationAudit(audit) {
@@ -1255,53 +2781,11 @@ var Services;
1255
2781
  sails.log.verbose(JSON.stringify(criteria));
1256
2782
  return await IntegrationAudit.count(criteria);
1257
2783
  }
1258
- async restoreRecord(oid) {
1259
- const response = new redbox_core_1.StorageServiceResponse();
1260
- if (_.isEmpty(oid)) {
1261
- const msg = `${this.logHeader} restoreRecord() -> refusing to search using an empty OID`;
1262
- sails.log.error(msg);
1263
- throw new Error(msg);
1264
- }
1265
- try {
1266
- sails.log.verbose(`${this.logHeader} Restoring record ${oid} to DB...`);
1267
- const deletedRecord = await DeletedRecord.findOne({ redboxOid: oid });
1268
- delete deletedRecord.deletedRecordMetadata._id;
1269
- const record = await Record.create(deletedRecord.deletedRecordMetadata);
1270
- response.metadata = record;
1271
- await DeletedRecord.destroyOne({ redboxOid: oid });
1272
- response.success = true;
1273
- sails.log.verbose(`${this.logHeader} Record restored...`);
1274
- return response;
1275
- }
1276
- catch (err) {
1277
- sails.log.error(`${this.logHeader} Failed to create Record:`);
1278
- sails.log.error(JSON.stringify(err));
1279
- response.success = false;
1280
- response.message = this.getErrorMessage(err);
1281
- return response;
1282
- }
2784
+ async restoreRecord(oid, options) {
2785
+ return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Record restoration requires staged lifecycle orchestration');
1283
2786
  }
1284
- async destroyDeletedRecord(oid) {
1285
- const response = new redbox_core_1.StorageServiceResponse();
1286
- if (_.isEmpty(oid)) {
1287
- const msg = `${this.logHeader} destroyRecord() -> refusing to search using an empty OID`;
1288
- sails.log.error(msg);
1289
- throw new Error(msg);
1290
- }
1291
- try {
1292
- sails.log.verbose(`${this.logHeader} destroying deleted record ${oid} to DB...`);
1293
- await DeletedRecord.destroyOne({ redboxOid: oid });
1294
- response.success = true;
1295
- sails.log.verbose(`${this.logHeader} deleted record destroyed...`);
1296
- return response;
1297
- }
1298
- catch (err) {
1299
- sails.log.error(`${this.logHeader} Failed to create Record:`);
1300
- sails.log.error(JSON.stringify(err));
1301
- response.success = false;
1302
- response.message = this.getErrorMessage(err);
1303
- return response;
1304
- }
2787
+ async destroyDeletedRecord(oid, options) {
2788
+ return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Tombstone destruction requires staged lifecycle orchestration');
1305
2789
  }
1306
2790
  getFileWithName(fileName, options = { limit: 1 }) {
1307
2791
  return this.gridFsBucket.find({ filename: fileName }, options);
@@ -1312,4 +2796,4 @@ var Services;
1312
2796
  }
1313
2797
  Services.MongoStorageService = MongoStorageService;
1314
2798
  })(Services || (exports.Services = Services = {}));
1315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yYWdlU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Nb25nb1N0b3JhZ2VTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFzRDtBQUN0RCwrQkFBZ0M7QUFDaEMsbUNBQW9DO0FBR3BDLGlDQUFpQztBQUVqQyxtQ0FBb0M7QUFFcEMsc0NBQXVDO0FBQ3ZDLG1EQUFnRDtBQUNoRCx1Q0FBaUQ7QUFDakQsOERBb0JzQztBQUN0Qyw4REFBcUU7QUFDckUsOERBQWtHO0FBRWxHLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxxQkFBVSxDQUFDO0FBQy9CLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUUxQixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0FBQzlDLFNBQVMsZUFBZSxDQUFDLEtBQWM7SUFDckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQ0UsS0FBSyxJQUFJLElBQUk7UUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQzVGLENBQUM7UUFDRCxPQUFPLGlCQUFpQixDQUFDLEtBQWdDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FB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
2799
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yYWdlU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Nb25nb1N0b3JhZ2VTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFzRDtBQUN0RCwrQkFBZ0M7QUFDaEMsbUNBQW9DO0FBQ3BDLHlDQUE4QztBQUc5QyxpQ0FBaUM7QUFFakMsbUNBQW9DO0FBYXBDLHNDQUF1QztBQUN2QyxtREFBZ0Q7QUFDaEQsdUNBQWlEO0FBQ2pELDhEQW1Dc0M7QUFXdEMsOERBQXFFO0FBQ3JFLDhEQUFrRztBQUNsRywyRUFBc0Y7QUFDdEYsdUVBWW1DO0FBRW5DLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxxQkFBVSxDQUFDO0FBQy9CLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUUxQixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0FBQzlDLFNBQVMsZUFBZSxDQUFDLEtBQWM7SUFDckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQ0UsS0FBSyxJQUFJLElBQUk7UUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQzVGLENBQUM7UUFDRCxPQUFPLGlCQUFpQixDQUFDLEtBQWdDLENBQUMsQ0FBQztJQUM3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