Initial Commit

This commit is contained in:
2026-05-27 23:47:53 +01:00
parent fbc70f96e6
commit 9b28db724f
18103 changed files with 1600554 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
# replay
## Purpose
Per-client LRU of `(driveId, nonce)` tuples used to reject replayed templates (DTP-06). The cache holds at most `LRU_CAPACITY` entries (default 1024); inserting a new entry that exceeds the cap evicts the least-recently-used one. The LRU is kept in-memory only; the spec calls out that `Drive.initialize()` rebuilds it from the FileLocationIndex.
## Features
- `TemplateNonceLru` — bounded LRU keyed on `(driveId, nonce-hex)`.
- `has(driveId, nonce)` — query without mutation.
- `remember(driveId, nonce)` — insert; auto-evicts oldest past the cap.
- `clear()` / `size` / `capacity` — utility surface for tests + persistence hooks.
- `TEMPLATE_NONCE_LRU_DEFAULT_CAPACITY` — pinned at 1024 per DTP-06.
## Usage: Basic Example
```ts
import { TemplateNonceLru } from "@suaveplan/drive-template";
const lru = new TemplateNonceLru();
lru.remember("drive-1", new Uint8Array(16).fill(7));
console.log(lru.has("drive-1", new Uint8Array(16).fill(7))); // true
```
## Usage: Advanced Example
```ts
import {
TEMPLATE_NONCE_LRU_DEFAULT_CAPACITY,
TemplateNonceLru,
} from "@suaveplan/drive-template";
const lru = new TemplateNonceLru(TEMPLATE_NONCE_LRU_DEFAULT_CAPACITY);
async function rebuildFromFileLocationIndex(seen: Iterable<{ driveId: string; nonce: Uint8Array }>) {
lru.clear();
for (const entry of seen) {
lru.remember(entry.driveId, entry.nonce);
}
return lru.size;
}
```
## API Reference
- `class TemplateNonceLru` — `has`, `remember`, `clear`, `size`, `capacity`.
- `TEMPLATE_NONCE_LRU_DEFAULT_CAPACITY: 1024`.
## Implementation Notes
The implementation uses an insertion-ordered `Map` and re-inserts duplicates on `remember` to refresh recency. The keys are `<driveId>:<nonce-hex>` strings rather than tuple objects so `Map`'s `===` equality works without needing a custom key class. The capacity check fires AFTER the insert so the eviction policy is "drop the actual oldest", not "drop the entry we're about to overwrite" — this matters when a template re-uses the same `(driveId, nonce)` shortly after another distribution. Persistence support lives in `Drive.initialize()` rather than this module: the LRU rebuilds from the FileLocationIndex on startup so a process restart does not open a replay window.