@learncard/lca-api-service 1.5.1 → 1.5.3
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.
- package/.env.example +2 -2
- package/CHANGELOG.md +32 -0
- package/config/config.dev.json +1 -1
- package/dist/app.d.ts +239 -1
- package/dist/index.js +2 -2
- package/dist/models/EscrowHold.d.ts +30 -2
- package/dist/models/UserKey.d.ts +89 -5
- package/dist/publish-metafile.json +1 -1
- package/dist/routes/ai.test.d.ts +1 -0
- package/dist/routes/escrow.d.ts +237 -0
- package/dist/routes/index.d.ts +4 -4
- package/dist/routes/keys.d.ts +2 -1
- package/dist/services/escrow-enclave/authorityContract.d.ts +170 -0
- package/dist/services/escrow-enclave/logFailure.d.ts +1 -0
- package/dist/services/escrow-enclave/logFailure.test.d.ts +1 -0
- package/dist/services/escrow-enclave/types.d.ts +55 -3
- package/esbuildPlugins.cjs +9 -6
- package/package.json +10 -10
- package/src/config/environment.ts +1 -1
- package/src/config/escrowDeployment.test.ts +8 -0
- package/src/jobs/escrowBlobRewrap.ts +45 -2
- package/src/jobs/escrowHoldReminders.ts +50 -1
- package/src/models/EscrowHold.ts +128 -10
- package/src/models/UserKey.ts +59 -8
- package/src/routes/ai.test.ts +103 -0
- package/src/routes/ai.ts +2 -1
- package/src/routes/escrow.ts +386 -53
- package/src/routes/index.ts +1 -1
- package/src/routes/keys.ts +5 -0
- package/src/services/escrow-enclave/README.md +31 -0
- package/src/services/escrow-enclave/authorityContract.ts +126 -0
- package/src/services/escrow-enclave/cancellation.ts +2 -2
- package/src/services/escrow-enclave/logFailure.test.ts +64 -0
- package/src/services/escrow-enclave/logFailure.ts +29 -0
- package/src/services/escrow-enclave/remoteEnclave.test.ts +315 -4
- package/src/services/escrow-enclave/remoteEnclave.tls.test.ts +182 -2
- package/src/services/escrow-enclave/remoteEnclave.ts +202 -31
- package/src/services/escrow-enclave/types.ts +77 -5
- package/test/jobs/escrowHoldReminders.spec.ts +195 -3
- package/test/keys-escrow.spec.ts +587 -11
- package/test/models/escrow.spec.ts +13 -0
|
@@ -547,6 +547,12 @@ describe('escrow model invariants', () => {
|
|
|
547
547
|
const pinHold = await createHoldFor(now, 'pin');
|
|
548
548
|
const completedHold = await createHoldFor(new Date(now.getTime() + 2 * hour));
|
|
549
549
|
await completeEscrowHold(completedHold._id);
|
|
550
|
+
// P2-b (catch-up): an outage spanning the entire 24h reminder window
|
|
551
|
+
// must not permanently strand a hold — release still requires a
|
|
552
|
+
// successfully recorded warning (authority.rs), so a hold whose
|
|
553
|
+
// Mongo-estimated releaseAfter has already passed, and that was
|
|
554
|
+
// never reminded, must stay selected until it finally is.
|
|
555
|
+
const wayOverdueUnreminded = await createHoldFor(new Date(now.getTime() - 48 * hour));
|
|
550
556
|
|
|
551
557
|
const due = await findEscrowHoldsDueForReminder(now, 200);
|
|
552
558
|
const dueIds = due.map(hold => hold._id);
|
|
@@ -555,6 +561,13 @@ describe('escrow model invariants', () => {
|
|
|
555
561
|
expect(dueIds).not.toContain(alreadyReminded._id);
|
|
556
562
|
expect(dueIds).not.toContain(pinHold._id);
|
|
557
563
|
expect(dueIds).not.toContain(completedHold._id);
|
|
564
|
+
expect(dueIds).toContain(wayOverdueUnreminded._id);
|
|
565
|
+
// Recovery: once the catch-up run finally records the reminder, the
|
|
566
|
+
// hold stops being selected, exactly like any other reminded hold.
|
|
567
|
+
await recordEscrowHoldNotification(wayOverdueUnreminded._id, 'reminder');
|
|
568
|
+
expect((await findEscrowHoldsDueForReminder(now, 200)).map(hold => hold._id)).not.toContain(
|
|
569
|
+
wayOverdueUnreminded._id
|
|
570
|
+
);
|
|
558
571
|
|
|
559
572
|
// Two concurrent claims for the same hold: MongoDB serializes the
|
|
560
573
|
// findOneAndUpdate CAS, so exactly one observes the pre-push state.
|