videobook-engine 2.0.1 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -41
- package/dist/artifact-names.d.ts +6 -0
- package/dist/artifact-names.d.ts.map +1 -0
- package/dist/artifact-names.js +56 -0
- package/dist/artifact-names.js.map +1 -0
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +57 -23
- package/dist/artifacts.js.map +1 -1
- package/dist/books.js +2 -1
- package/dist/books.js.map +1 -1
- package/dist/cas.d.ts +27 -1
- package/dist/cas.d.ts.map +1 -1
- package/dist/cas.js +78 -6
- package/dist/cas.js.map +1 -1
- package/dist/catalog-metadata.d.ts +56 -0
- package/dist/catalog-metadata.d.ts.map +1 -0
- package/dist/catalog-metadata.js +42 -0
- package/dist/catalog-metadata.js.map +1 -0
- package/dist/communications.js +4 -2
- package/dist/communications.js.map +1 -1
- package/dist/context.d.ts +6 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +35 -6
- package/dist/context.js.map +1 -1
- package/dist/domain.d.ts +4 -0
- package/dist/domain.d.ts.map +1 -1
- package/dist/domain.js +870 -58
- package/dist/domain.js.map +1 -1
- package/dist/edit-policy.d.ts +3 -0
- package/dist/edit-policy.d.ts.map +1 -0
- package/dist/edit-policy.js +6 -0
- package/dist/edit-policy.js.map +1 -0
- package/dist/edits.d.ts +10 -0
- package/dist/edits.d.ts.map +1 -0
- package/dist/edits.js +1392 -0
- package/dist/edits.js.map +1 -0
- package/dist/engine-types.d.ts +110 -60
- package/dist/engine-types.d.ts.map +1 -1
- package/dist/engine-types.js +33 -0
- package/dist/engine-types.js.map +1 -1
- package/dist/engine.d.ts +69 -8
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +24 -18
- package/dist/engine.js.map +1 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +31 -27
- package/dist/files.js.map +1 -1
- package/dist/fork.d.ts +147 -0
- package/dist/fork.d.ts.map +1 -0
- package/dist/fork.js +609 -0
- package/dist/fork.js.map +1 -0
- package/dist/history.d.ts +0 -4
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +166 -595
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +16 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/job-queue.d.ts +2 -0
- package/dist/job-queue.d.ts.map +1 -1
- package/dist/job-queue.js +29 -2
- package/dist/job-queue.js.map +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +1 -0
- package/dist/media.js.map +1 -1
- package/dist/merge-policy.d.ts +99 -0
- package/dist/merge-policy.d.ts.map +1 -0
- package/dist/merge-policy.js +310 -0
- package/dist/merge-policy.js.map +1 -0
- package/dist/metadata.d.ts.map +1 -1
- package/dist/metadata.js +15 -20
- package/dist/metadata.js.map +1 -1
- package/dist/migration.d.ts +9 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +534 -0
- package/dist/migration.js.map +1 -0
- package/dist/mvp-contract-fixtures.d.ts +244 -0
- package/dist/mvp-contract-fixtures.d.ts.map +1 -0
- package/dist/mvp-contract-fixtures.js +556 -0
- package/dist/mvp-contract-fixtures.js.map +1 -0
- package/dist/mvp-contracts.d.ts +761 -0
- package/dist/mvp-contracts.d.ts.map +1 -0
- package/dist/mvp-contracts.js +59 -0
- package/dist/mvp-contracts.js.map +1 -0
- package/dist/mvp-time.d.ts +54 -0
- package/dist/mvp-time.d.ts.map +1 -0
- package/dist/mvp-time.js +148 -0
- package/dist/mvp-time.js.map +1 -0
- package/dist/notebook/types.d.ts +113 -8
- package/dist/notebook/types.d.ts.map +1 -1
- package/dist/order-keys.d.ts +22 -0
- package/dist/order-keys.d.ts.map +1 -0
- package/dist/order-keys.js +262 -0
- package/dist/order-keys.js.map +1 -0
- package/dist/runtime-services.js +4 -2
- package/dist/runtime-services.js.map +1 -1
- package/dist/schema.d.ts +24 -5
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +644 -132
- package/dist/schema.js.map +1 -1
- package/dist/search-benchmark.d.ts +4 -0
- package/dist/search-benchmark.d.ts.map +1 -0
- package/dist/search-benchmark.js +144 -0
- package/dist/search-benchmark.js.map +1 -0
- package/dist/sequences.d.ts +20 -0
- package/dist/sequences.d.ts.map +1 -0
- package/dist/sequences.js +825 -0
- package/dist/sequences.js.map +1 -0
- package/dist/similarity.js +1 -1
- package/dist/storage.d.ts +3 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +388 -7
- package/dist/storage.js.map +1 -1
- package/dist/store.d.ts +63 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +351 -65
- package/dist/store.js.map +1 -1
- package/dist/streams.d.ts +10 -0
- package/dist/streams.d.ts.map +1 -0
- package/dist/streams.js +183 -0
- package/dist/streams.js.map +1 -0
- package/dist/temporal-models.d.ts +48 -0
- package/dist/temporal-models.d.ts.map +1 -0
- package/dist/temporal-models.js +278 -0
- package/dist/temporal-models.js.map +1 -0
- package/dist/temporal-search.d.ts +29 -0
- package/dist/temporal-search.d.ts.map +1 -0
- package/dist/temporal-search.js +1507 -0
- package/dist/temporal-search.js.map +1 -0
- package/dist/transcripts.d.ts +16 -0
- package/dist/transcripts.d.ts.map +1 -0
- package/dist/transcripts.js +519 -0
- package/dist/transcripts.js.map +1 -0
- package/docs/engine-layout.md +346 -106
- package/docs/mvp-prd.md +918 -0
- package/fixtures/media/vancat.mp4 +0 -0
- package/fixtures/media/vancat_profile.jpg +0 -0
- package/fixtures/v5/contract-fixtures.json +1532 -0
- package/package.json +30 -5
- package/dist/history-types.d.ts +0 -74
- package/dist/history-types.d.ts.map +0 -1
- package/dist/history-types.js +0 -2
- package/dist/history-types.js.map +0 -1
- package/dist/timeline.d.ts +0 -9
- package/dist/timeline.d.ts.map +0 -1
- package/dist/timeline.js +0 -236
- package/dist/timeline.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
videobook per engine root. It keeps book state, artifacts, files, metadata,
|
|
5
5
|
notebook graphs, revisions, and action history in a single catalog.
|
|
6
6
|
|
|
7
|
+
The temporal search, sequence, and edit-engine requirements for the Videobook
|
|
8
|
+
MVP are in [docs/mvp-prd.md](docs/mvp-prd.md).
|
|
9
|
+
|
|
7
10
|
There is no project layer. A fresh engine root creates exactly one Book;
|
|
8
11
|
reopening that root always returns the same book.
|
|
9
12
|
|
|
@@ -40,6 +43,31 @@ engine.close();
|
|
|
40
43
|
later opens it is optional and never changes the stored book. Rename the book
|
|
41
44
|
explicitly with `await engine.book.rename("new-name")`.
|
|
42
45
|
|
|
46
|
+
## MVP contracts
|
|
47
|
+
|
|
48
|
+
Contract version 1, introduced with schema v5 and carried by the current
|
|
49
|
+
schema v18 catalog, defines the media-time, stream, transcript, sequence,
|
|
50
|
+
temporal-search, edit-intent, job, and copy-forward migration boundary:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import {
|
|
54
|
+
MVP_CONTRACT_VERSION,
|
|
55
|
+
MVP_CONTRACT_FIXTURES,
|
|
56
|
+
type EditIntent,
|
|
57
|
+
type SearchPage,
|
|
58
|
+
type Sequence,
|
|
59
|
+
type SourceRange,
|
|
60
|
+
} from "videobook-engine";
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The typed fixtures cover every P0 edit operation and the main cross-repository
|
|
64
|
+
projections. The equivalent checked-in JSON fixture is exported as
|
|
65
|
+
`videobook-engine/fixtures/v5`. Contract objects use rational, half-open media
|
|
66
|
+
ranges and immutable object-hash-qualified stream references. The legacy
|
|
67
|
+
schema-v4 timeline compiles into the sequences model at import; the schema-v4
|
|
68
|
+
similarity API remains a compatibility surface until it compiles into
|
|
69
|
+
temporal-search semantics.
|
|
70
|
+
|
|
43
71
|
## Storage model
|
|
44
72
|
|
|
45
73
|
Each engine root owns exactly one book:
|
|
@@ -59,22 +87,33 @@ versioned `runtime_%` ignore policy, and are never staged. Semantic surrogate
|
|
|
59
87
|
identities are UUIDv7 values. Artifact slugs are human-facing names and can be
|
|
60
88
|
reused after hard deletion; immutable CAS objects remain available to history.
|
|
61
89
|
|
|
62
|
-
The current catalog format is schema version
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
The
|
|
66
|
-
`objects`, `artifact_files`, `
|
|
67
|
-
`
|
|
68
|
-
`
|
|
69
|
-
`
|
|
70
|
-
`
|
|
71
|
-
`
|
|
72
|
-
|
|
73
|
-
|
|
90
|
+
The current catalog format is schema version 18. It intentionally rejects
|
|
91
|
+
older catalogs rather than migrating them; create a fresh engine root.
|
|
92
|
+
|
|
93
|
+
The 34 versioned semantic tables are `engine_schema`, `book`, `artifacts`,
|
|
94
|
+
`objects`, `artifact_files`, `artifact_streams`, `book_metadata`,
|
|
95
|
+
`artifact_metadata`, `entities`, `notebooks`, `notebook_fields`, `cells`,
|
|
96
|
+
`notebook_cell_executions`, `notebook_generation_plans`,
|
|
97
|
+
`notebook_run_plans`, `notebook_transcript_edits`,
|
|
98
|
+
`notebook_transcript_attachments`, `edges`, `runs`, `cell_references`,
|
|
99
|
+
`pinned_search_results`, `transcripts`, `transcript_segments`,
|
|
100
|
+
`transcript_words`, `sequences`, `sequence_tracks`, `sequence_clips`,
|
|
101
|
+
`clip_links`, `clip_transforms`, `transitions`, `caption_cues`,
|
|
102
|
+
`audio_waveforms`, `prompt_entries`, and `messages`. Dolt's versioned
|
|
103
|
+
`dolt_ignore` configuration table carries the local-table policy. Provenance
|
|
104
|
+
is the commit log itself: every semantic commit carries its operation,
|
|
105
|
+
parameters, and write set in a structured commit message, authored by the
|
|
106
|
+
configured engine identity.
|
|
107
|
+
|
|
108
|
+
The 23 local-only tables are `runtime_meta`, `runtime_jobs`, `job_runs`,
|
|
74
109
|
`runtime_resource_leases`, `runtime_object_publications`,
|
|
75
110
|
`runtime_workspace_entries`, `runtime_artifact_views`,
|
|
76
111
|
`runtime_pending_tasks`, `runtime_generation_errors`, `runtime_settings`,
|
|
77
|
-
`runtime_logs`, `runtime_commit_outbox`, `
|
|
112
|
+
`runtime_logs`, `runtime_commit_outbox`, `runtime_index_manifests`,
|
|
113
|
+
`runtime_index_generations`, `runtime_index_coverage`,
|
|
114
|
+
`runtime_media_segments`, `runtime_segment_text`,
|
|
115
|
+
`runtime_segment_embeddings`, `runtime_segment_fingerprints`,
|
|
116
|
+
`runtime_index_batches`, `runtime_similarity_embeddings`,
|
|
78
117
|
`runtime_text_similarity_documents`, and `runtime_text_similarity_chunks`.
|
|
79
118
|
|
|
80
119
|
See [the complete engine layout](docs/engine-layout.md) for every schema
|
|
@@ -108,13 +147,13 @@ graphs remain available separately through `engine.notebooks`.
|
|
|
108
147
|
- `engine.files` and `engine.workspaces` — immutable object-backed files and
|
|
109
148
|
disposable materialization
|
|
110
149
|
- `engine.metadata` — book metadata, artifact metadata, and audio waveforms
|
|
111
|
-
- `engine.
|
|
112
|
-
|
|
150
|
+
- `engine.sequences` and `engine.edits` — the sequence/track/clip timeline
|
|
151
|
+
model and its transactional edit operations
|
|
113
152
|
- `engine.entities` and `engine.notebooks` — normalized characters, prompts,
|
|
114
153
|
scenes, and notebook graph documents
|
|
115
154
|
- `engine.prompts` and `engine.messages` — semantic prompt and message history
|
|
116
|
-
- `engine.history` —
|
|
117
|
-
restores
|
|
155
|
+
- `engine.history` — revision listings, per-artifact history, and forward
|
|
156
|
+
restores derived from the Dolt commit log
|
|
118
157
|
- `engine.jobs`, `engine.status`, `engine.settings`, and `engine.logs` —
|
|
119
158
|
runtime coordination
|
|
120
159
|
- `engine.storage` — object publication and catalog backup
|
|
@@ -123,8 +162,25 @@ graphs remain available separately through `engine.notebooks`.
|
|
|
123
162
|
All APIs operate in the engine's one book. No method accepts or returns a
|
|
124
163
|
project ID.
|
|
125
164
|
|
|
126
|
-
|
|
127
|
-
|
|
165
|
+
### Full API benchmark
|
|
166
|
+
|
|
167
|
+
The deterministic benchmark exercises every top-level `Engine` API group,
|
|
168
|
+
reports latency distributions per operation, and identifies the smallest set
|
|
169
|
+
of operations responsible for at least 80% of measured time:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
npm run benchmark:api
|
|
173
|
+
npm run benchmark:api -- --json --output /tmp/videobook-api-benchmark.json
|
|
174
|
+
npm run benchmark:api:smoke
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
The default workload creates 40 artifacts, indexes 2,000 temporal moments, and
|
|
178
|
+
repeats the read paths 100 times. Use `--artifacts`, `--moments`, and `--reads`
|
|
179
|
+
to select a different workload; use `--retain-fixture` to keep the generated
|
|
180
|
+
engine root for inspection.
|
|
181
|
+
|
|
182
|
+
Deleting an artifact or entity that is referenced by a live cell or clip
|
|
183
|
+
returns `IN_USE` with `details.references`. Deleting a notebook cascades
|
|
128
184
|
its owned cells, edges, and terminal runs. There are no tombstone rows.
|
|
129
185
|
|
|
130
186
|
## Revisions and restores
|
|
@@ -145,34 +201,24 @@ await engine.history.restore(revisions[0]!.hash);
|
|
|
145
201
|
```
|
|
146
202
|
|
|
147
203
|
`restoreArtifact` keeps the artifact UUID stable and restores its files,
|
|
148
|
-
metadata, and waveform as a new forward revision. `restore`
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
204
|
+
metadata, and waveform as a new forward revision. `restore` mechanically
|
|
205
|
+
reloads every semantic table from its `dolt_at_*` projection at the target
|
|
206
|
+
revision — book metadata, artifacts and files, entities, notebooks, sequences,
|
|
207
|
+
prompts, messages, and the rest — so the restored state is exactly the state
|
|
208
|
+
that revision recorded. Runtime work is invalidated and active jobs are
|
|
209
|
+
aborted during a restore.
|
|
152
210
|
|
|
153
211
|
## Future forks
|
|
154
212
|
|
|
155
|
-
Schema
|
|
156
|
-
|
|
213
|
+
Schema v18 adds independently mergeable notebook workflow rows while retaining
|
|
214
|
+
the stable identities and normalized boundaries introduced in v17. A fork is a
|
|
215
|
+
separate catalog copy in another namespace,
|
|
157
216
|
keeps the same `bookId`, and can open a pull request against the upstream
|
|
158
217
|
`main` branch. User, origin, fork, and pull-request APIs are intentionally not
|
|
159
218
|
part of this release; an open engine still accepts only its local `main`
|
|
160
|
-
branch.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
```ts
|
|
165
|
-
const action = await engine.history.recordAction({
|
|
166
|
-
operation: "generate_image",
|
|
167
|
-
scope: "artifact",
|
|
168
|
-
targetArtifactId: imageId,
|
|
169
|
-
inputArtifactIds: [promptId],
|
|
170
|
-
outputArtifactIds: [imageId],
|
|
171
|
-
writeSet: [`artifact:${imageId}`],
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
const page = engine.history.actions({ limit: 50 });
|
|
175
|
-
```
|
|
219
|
+
branch. Because provenance lives in authored Dolt commits rather than
|
|
220
|
+
engine-owned meta-history tables, merging a fork never requires merging a
|
|
221
|
+
parallel audit graph.
|
|
176
222
|
|
|
177
223
|
## Similarity
|
|
178
224
|
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ArtifactKind } from "./engine-types.js";
|
|
2
|
+
export declare function isArtifactNameStopWord(word: string): boolean;
|
|
3
|
+
export declare function artifactKindPrefix(kind: ArtifactKind): string;
|
|
4
|
+
export declare function artifactNameSlug(kind: ArtifactKind, name: string, maxWords?: number): string;
|
|
5
|
+
export declare function humanizeArtifactSlug(slug: string): string;
|
|
6
|
+
//# sourceMappingURL=artifact-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-names.d.ts","sourceRoot":"","sources":["../src/artifact-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAyBtD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE7D;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAI,GACX,MAAM,CAiBR;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASzD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const STOP_WORDS = new Set([
|
|
2
|
+
"a", "an", "the", "and", "or", "but", "in", "on", "at", "to", "for", "of",
|
|
3
|
+
"with", "by", "from", "as", "is", "was", "are", "were", "been", "be",
|
|
4
|
+
"have", "has", "had", "do", "does", "did", "will", "would", "could",
|
|
5
|
+
"should", "may", "might", "must", "shall", "can", "need", "this", "that",
|
|
6
|
+
"these", "those", "it", "its", "my", "your", "his", "her", "our", "their",
|
|
7
|
+
"what", "which", "who", "whom", "whose", "where", "when", "why", "how",
|
|
8
|
+
"all", "each", "every", "both", "few", "more", "most", "other", "some",
|
|
9
|
+
"such", "no", "nor", "not", "only", "own", "same", "so", "than", "too",
|
|
10
|
+
"very", "just", "also",
|
|
11
|
+
]);
|
|
12
|
+
const KIND_PREFIXES = {
|
|
13
|
+
video: "vid",
|
|
14
|
+
image: "img",
|
|
15
|
+
audio: "aud",
|
|
16
|
+
script: "script",
|
|
17
|
+
character: "char",
|
|
18
|
+
prompt: "prompt",
|
|
19
|
+
scene: "scene",
|
|
20
|
+
final: "final",
|
|
21
|
+
};
|
|
22
|
+
export function isArtifactNameStopWord(word) {
|
|
23
|
+
return STOP_WORDS.has(word.toLowerCase());
|
|
24
|
+
}
|
|
25
|
+
export function artifactKindPrefix(kind) {
|
|
26
|
+
return KIND_PREFIXES[kind];
|
|
27
|
+
}
|
|
28
|
+
export function artifactNameSlug(kind, name, maxWords = 4) {
|
|
29
|
+
if (kind === "final")
|
|
30
|
+
return "final";
|
|
31
|
+
const prefix = artifactKindPrefix(kind);
|
|
32
|
+
const words = name
|
|
33
|
+
.toLowerCase()
|
|
34
|
+
.replace(/[^a-z0-9\s-]/g, "")
|
|
35
|
+
.split(/[\s-]+/)
|
|
36
|
+
.filter((word) => word.length > 0
|
|
37
|
+
&& word !== prefix
|
|
38
|
+
&& !isArtifactNameStopWord(word));
|
|
39
|
+
const deduped = [];
|
|
40
|
+
for (const word of words) {
|
|
41
|
+
if (deduped.at(-1) !== word)
|
|
42
|
+
deduped.push(word);
|
|
43
|
+
}
|
|
44
|
+
const slug = deduped.slice(0, Math.max(1, maxWords)).join("-");
|
|
45
|
+
return `${prefix}-${slug || "untitled"}`;
|
|
46
|
+
}
|
|
47
|
+
export function humanizeArtifactSlug(slug) {
|
|
48
|
+
return slug
|
|
49
|
+
.replace(/^[a-z]+-/, "")
|
|
50
|
+
.split("-")
|
|
51
|
+
.map((word) => word.length === 0
|
|
52
|
+
? word
|
|
53
|
+
: word.charAt(0).toUpperCase() + word.slice(1))
|
|
54
|
+
.join(" ");
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=artifact-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-names.js","sourceRoot":"","sources":["../src/artifact-names.ts"],"names":[],"mappings":"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"}
|
package/dist/artifacts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EAId,MAAM,cAAc,CAAC;AActB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa;oBAG5C,mBAAmB,GAAG,MAAM,SAC5B,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;qBAExB;QAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,KAAG,QAAQ,EAAE;oBAE5C,MAAM,KAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;wBAElC,MAAM,KAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;4BAYlC,MAAM,KAAG,OAAO;oBAS/B,mBAAmB,GAAG,MAAM,SAC5B,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;uBAG7B,MAAM,KACf,OAAO,CACR,MAAM,CACJ;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EACpC,WAAW,CACZ,CACF;EAEJ;
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EAId,MAAM,cAAc,CAAC;AActB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa;oBAG5C,mBAAmB,GAAG,MAAM,SAC5B,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;qBAExB;QAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,KAAG,QAAQ,EAAE;oBAE5C,MAAM,KAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;wBAElC,MAAM,KAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;4BAYlC,MAAM,KAAG,OAAO;oBAS/B,mBAAmB,GAAG,MAAM,SAC5B,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;uBAG7B,MAAM,KACf,OAAO,CACR,MAAM,CACJ;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EACpC,WAAW,CACZ,CACF;EAEJ;AAwPD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CA4BzD;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAuBtE"}
|
package/dist/artifacts.js
CHANGED
|
@@ -42,19 +42,30 @@ async function createArtifact(context, input, positionalName) {
|
|
|
42
42
|
explicitSlug: input.slug,
|
|
43
43
|
};
|
|
44
44
|
const base = artifactSlug(parsed.kind, parsed.explicitSlug ?? parsed.name);
|
|
45
|
-
const slug = parsed.explicitSlug === undefined
|
|
46
|
-
? nextActiveSlug(context, base)
|
|
47
|
-
: base;
|
|
48
45
|
const artifactId = newUuidV7();
|
|
46
|
+
// The dedup read and the insert must both run inside the serialized
|
|
47
|
+
// write chain: picking the suffix before store.semantic would race a
|
|
48
|
+
// concurrent create minting the same base slug (merge policy,
|
|
49
|
+
// ve-mim.6). details/writeSet are finalized inside the callback, which
|
|
50
|
+
// runs before the commit message is rendered.
|
|
51
|
+
const details = {
|
|
52
|
+
slug: parsed.explicitSlug ?? base,
|
|
53
|
+
kind: parsed.kind,
|
|
54
|
+
};
|
|
55
|
+
const writeSet = [
|
|
56
|
+
`artifact:${artifactId}`,
|
|
57
|
+
`artifact-slug:${String(details.slug)}`,
|
|
58
|
+
];
|
|
49
59
|
const mutation = await context.store.semantic({
|
|
50
60
|
operation: "create_artifact",
|
|
61
|
+
tables: ["artifacts"],
|
|
51
62
|
artifactId,
|
|
52
|
-
details
|
|
53
|
-
writeSet
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
details,
|
|
64
|
+
writeSet,
|
|
65
|
+
}, (_operationId, now) => {
|
|
66
|
+
const slug = parsed.explicitSlug ?? nextActiveSlug(context, base);
|
|
67
|
+
details.slug = slug;
|
|
68
|
+
writeSet[1] = `artifact-slug:${slug}`;
|
|
58
69
|
context.store.db
|
|
59
70
|
.prepare(`INSERT INTO artifacts(
|
|
60
71
|
artifact_id, slug, kind, created_at
|
|
@@ -95,6 +106,7 @@ async function renameArtifact(context, input, positionalName) {
|
|
|
95
106
|
return context.artifact(current);
|
|
96
107
|
const mutation = await context.store.semantic({
|
|
97
108
|
operation: "rename_artifact",
|
|
109
|
+
tables: ["artifacts"],
|
|
98
110
|
artifactId: current.artifact_id,
|
|
99
111
|
details: { oldSlug: current.slug, newSlug: slug },
|
|
100
112
|
writeSet: [
|
|
@@ -102,7 +114,7 @@ async function renameArtifact(context, input, positionalName) {
|
|
|
102
114
|
`artifact-slug:${current.slug}`,
|
|
103
115
|
`artifact-slug:${slug}`,
|
|
104
116
|
],
|
|
105
|
-
},
|
|
117
|
+
}, () => {
|
|
106
118
|
context.store.db
|
|
107
119
|
.prepare(`UPDATE artifacts
|
|
108
120
|
SET slug=?
|
|
@@ -131,6 +143,12 @@ async function deleteArtifact(context, artifactReference) {
|
|
|
131
143
|
.all(artifact.artifact_id);
|
|
132
144
|
const mutation = await context.store.semantic({
|
|
133
145
|
operation: "delete_artifact",
|
|
146
|
+
tables: [
|
|
147
|
+
"artifacts",
|
|
148
|
+
"artifact_files",
|
|
149
|
+
"artifact_metadata",
|
|
150
|
+
"audio_waveforms",
|
|
151
|
+
],
|
|
134
152
|
artifactId: artifact.artifact_id,
|
|
135
153
|
details: {
|
|
136
154
|
slug: artifact.slug,
|
|
@@ -140,13 +158,7 @@ async function deleteArtifact(context, artifactReference) {
|
|
|
140
158
|
`artifact:${artifact.artifact_id}`,
|
|
141
159
|
`artifact-slug:${artifact.slug}`,
|
|
142
160
|
],
|
|
143
|
-
},
|
|
144
|
-
"artifacts",
|
|
145
|
-
"artifact_files",
|
|
146
|
-
"artifact_metadata",
|
|
147
|
-
"audio_waveforms",
|
|
148
|
-
"job_runs",
|
|
149
|
-
], (_operationId, now) => {
|
|
161
|
+
}, (_operationId, now) => {
|
|
150
162
|
context.store.db
|
|
151
163
|
.prepare("DELETE FROM artifacts WHERE artifact_id=?")
|
|
152
164
|
.run(artifact.artifact_id);
|
|
@@ -270,6 +282,10 @@ function nextActiveSlug(context, base) {
|
|
|
270
282
|
return candidate;
|
|
271
283
|
}
|
|
272
284
|
function artifactReferences(context, artifactId) {
|
|
285
|
+
// Covers every RESTRICT foreign key targeting artifacts so a refused
|
|
286
|
+
// delete surfaces as IN_USE rather than a raw FK error mapped to
|
|
287
|
+
// IO_ERROR. CASCADE-owned rows (artifact_files, artifact_metadata,
|
|
288
|
+
// audio_waveforms) are deleted with the artifact and are not listed.
|
|
273
289
|
const references = [];
|
|
274
290
|
const cells = context.store.db
|
|
275
291
|
.prepare(`SELECT notebook_id, cell_id FROM cells
|
|
@@ -279,14 +295,32 @@ function artifactReferences(context, artifactId) {
|
|
|
279
295
|
kind: "cell.outputArtifact",
|
|
280
296
|
id: `${cell.notebook_id}/${cell.cell_id}`,
|
|
281
297
|
})));
|
|
282
|
-
const
|
|
283
|
-
.prepare(
|
|
298
|
+
const streams = context.store.db
|
|
299
|
+
.prepare(`SELECT stream_id FROM artifact_streams
|
|
300
|
+
WHERE artifact_id=? ORDER BY stream_id`)
|
|
284
301
|
.all(artifactId);
|
|
285
|
-
references.push(...
|
|
286
|
-
const
|
|
287
|
-
.prepare(
|
|
302
|
+
references.push(...streams.map((stream) => ({ kind: "stream", id: stream.stream_id })));
|
|
303
|
+
const transcripts = context.store.db
|
|
304
|
+
.prepare(`SELECT transcript_id FROM transcripts
|
|
305
|
+
WHERE artifact_id=? ORDER BY transcript_id`)
|
|
288
306
|
.all(artifactId);
|
|
289
|
-
references.push(...
|
|
307
|
+
references.push(...transcripts.map((row) => ({
|
|
308
|
+
kind: "transcript",
|
|
309
|
+
id: row.transcript_id,
|
|
310
|
+
})));
|
|
311
|
+
const clips = context.store.db
|
|
312
|
+
.prepare(`SELECT clip_id FROM sequence_clips
|
|
313
|
+
WHERE artifact_id=? ORDER BY clip_id`)
|
|
314
|
+
.all(artifactId);
|
|
315
|
+
references.push(...clips.map((clip) => ({ kind: "sequenceClip", id: clip.clip_id })));
|
|
316
|
+
const pinned = context.store.db
|
|
317
|
+
.prepare(`SELECT notebook_id, cell_id, result_id FROM pinned_search_results
|
|
318
|
+
WHERE artifact_id=? ORDER BY notebook_id, cell_id, result_id`)
|
|
319
|
+
.all(artifactId);
|
|
320
|
+
references.push(...pinned.map((row) => ({
|
|
321
|
+
kind: "pinnedSearchResult",
|
|
322
|
+
id: `${row.notebook_id}/${row.cell_id}/${row.result_id}`,
|
|
323
|
+
})));
|
|
290
324
|
return references;
|
|
291
325
|
}
|
|
292
326
|
function prefixForKind(kind) {
|
package/dist/artifacts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
|
package/dist/books.js
CHANGED
|
@@ -14,9 +14,10 @@ async function renameBook(context, requestedSlug) {
|
|
|
14
14
|
return context.book(current);
|
|
15
15
|
const mutation = await context.store.semantic({
|
|
16
16
|
operation: "rename_book",
|
|
17
|
+
tables: ["book"],
|
|
17
18
|
details: { oldSlug: current.slug, newSlug: slug },
|
|
18
19
|
writeSet: ["book", `book-slug:${current.slug}`, `book-slug:${slug}`],
|
|
19
|
-
},
|
|
20
|
+
}, () => {
|
|
20
21
|
context.store.db
|
|
21
22
|
.prepare("UPDATE book SET slug=? WHERE book_id=?")
|
|
22
23
|
.run(slug, current.book_id);
|
package/dist/books.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"books.js","sourceRoot":"","sources":["../src/books.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAEL,iBAAiB,EACjB,QAAQ,GACT,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO;QACL,GAAG,EAAE,GAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QAC/B,MAAM,EAAE,CAAC,IAAY,EAAsC,EAAE,CAC3D,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,OAAsB,EACtB,aAAqB;IAErB,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAC3C;YACE,SAAS,EAAE,aAAa;YACxB,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACjD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,IAAI,EAAE,CAAC;SACrE,EACD,
|
|
1
|
+
{"version":3,"file":"books.js","sourceRoot":"","sources":["../src/books.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAEL,iBAAiB,EACjB,QAAQ,GACT,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO;QACL,GAAG,EAAE,GAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QAC/B,MAAM,EAAE,CAAC,IAAY,EAAsC,EAAE,CAC3D,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,OAAsB,EACtB,aAAqB;IAErB,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAC3C;YACE,SAAS,EAAE,aAAa;YACxB,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACjD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,IAAI,EAAE,CAAC;SACrE,EACD,GAAG,EAAE;YACH,OAAO,CAAC,KAAK,CAAC,EAAE;iBACb,OAAO,CAAC,wCAAwC,CAAC;iBACjD,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CACF,CAAC;QACF,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/cas.d.ts
CHANGED
|
@@ -4,11 +4,21 @@ export interface StoredObject {
|
|
|
4
4
|
size: number;
|
|
5
5
|
path: string;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Local content-addressed store with an optional remote ContentStore.
|
|
9
|
+
*
|
|
10
|
+
* Objects are content-immutable (a hash always names the same bytes) but no
|
|
11
|
+
* longer undeletable: `deleteLocal` and `unpublish` support the forgettable
|
|
12
|
+
* data policy. Deleting an object that versioned rows still reference turns
|
|
13
|
+
* those rows into tombstones — the `objects` table keeps hash + size and
|
|
14
|
+
* reads surface OBJECT_UNAVAILABLE through `ensureLocal`.
|
|
15
|
+
*/
|
|
7
16
|
export declare class ObjectStore {
|
|
8
17
|
private readonly remote?;
|
|
18
|
+
private readonly isForgotten?;
|
|
9
19
|
readonly root: string;
|
|
10
20
|
readonly prefix: string;
|
|
11
|
-
constructor(root: string, remote?: ContentStore | undefined, prefix?: string);
|
|
21
|
+
constructor(root: string, remote?: ContentStore | undefined, prefix?: string, isForgotten?: ((hash: string) => boolean) | undefined);
|
|
12
22
|
put(data: Buffer | string): Promise<StoredObject>;
|
|
13
23
|
import(sourcePath: string): Promise<StoredObject>;
|
|
14
24
|
read(hash: string): Promise<Buffer>;
|
|
@@ -20,6 +30,22 @@ export declare class ObjectStore {
|
|
|
20
30
|
materialize(hash: string, destinationPath: string): Promise<void>;
|
|
21
31
|
publish(hash: string, expectedSize: number): Promise<void>;
|
|
22
32
|
pathFor(hash: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Removes the local copy of an object. Returns whether a local file was
|
|
35
|
+
* actually removed; deleting an object that is not stored locally is not
|
|
36
|
+
* an error.
|
|
37
|
+
*/
|
|
38
|
+
deleteLocal(hash: string): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Unpublishes an object from the remote content store. Returns whether a
|
|
41
|
+
* remote object was deleted. Without a configured remote this is a no-op.
|
|
42
|
+
*/
|
|
43
|
+
unpublish(hash: string): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Lists every object hash stored locally, including stray files that have
|
|
46
|
+
* no `objects` row (for example leftovers from an interrupted import).
|
|
47
|
+
*/
|
|
48
|
+
listLocal(): Promise<string[]>;
|
|
23
49
|
keyFor(hash: string): string;
|
|
24
50
|
private ensureLocal;
|
|
25
51
|
}
|
package/dist/cas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cas.d.ts","sourceRoot":"","sources":["../src/cas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cas.d.ts","sourceRoot":"","sources":["../src/cas.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAExB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAP/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGtB,IAAI,EAAE,MAAM,EACK,MAAM,CAAC,EAAE,YAAY,YAAA,EACtC,MAAM,SAAoC,EACzB,WAAW,CAAC,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,aAAA;IAMpD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBjD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBjD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzC;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAK7B;;;;OAIG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWjD;;;OAGG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/C;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;YAKd,WAAW;CAwB1B"}
|
package/dist/cas.js
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { createReadStream } from "node:fs";
|
|
3
|
-
import { constants, copyFile, mkdir, readFile, rename, rm, stat, writeFile, } from "node:fs/promises";
|
|
3
|
+
import { constants, copyFile, mkdir, readdir, readFile, rename, rm, stat, writeFile, } from "node:fs/promises";
|
|
4
4
|
import * as path from "node:path";
|
|
5
5
|
import { v7 as uuidv7 } from "uuid";
|
|
6
|
+
/**
|
|
7
|
+
* Local content-addressed store with an optional remote ContentStore.
|
|
8
|
+
*
|
|
9
|
+
* Objects are content-immutable (a hash always names the same bytes) but no
|
|
10
|
+
* longer undeletable: `deleteLocal` and `unpublish` support the forgettable
|
|
11
|
+
* data policy. Deleting an object that versioned rows still reference turns
|
|
12
|
+
* those rows into tombstones — the `objects` table keeps hash + size and
|
|
13
|
+
* reads surface OBJECT_UNAVAILABLE through `ensureLocal`.
|
|
14
|
+
*/
|
|
6
15
|
export class ObjectStore {
|
|
7
16
|
remote;
|
|
17
|
+
isForgotten;
|
|
8
18
|
root;
|
|
9
19
|
prefix;
|
|
10
|
-
constructor(root, remote, prefix = "superlzy-media/videobook/sha256") {
|
|
20
|
+
constructor(root, remote, prefix = "superlzy-media/videobook/sha256", isForgotten) {
|
|
11
21
|
this.remote = remote;
|
|
22
|
+
this.isForgotten = isForgotten;
|
|
12
23
|
this.root = root;
|
|
13
24
|
this.prefix = prefix.replace(/^\/+|\/+$/g, "");
|
|
14
25
|
}
|
|
@@ -75,16 +86,14 @@ export class ObjectStore {
|
|
|
75
86
|
if (!current.exists) {
|
|
76
87
|
await this.remote.uploadFile(key, this.pathFor(hash));
|
|
77
88
|
}
|
|
78
|
-
else if (current.size !== undefined &&
|
|
79
|
-
current.size !== expectedSize) {
|
|
89
|
+
else if (current.size !== undefined && current.size !== expectedSize) {
|
|
80
90
|
throw new Error(`Remote object size mismatch: ${hash}`);
|
|
81
91
|
}
|
|
82
92
|
const verified = await this.remote.head(key);
|
|
83
93
|
if (!verified.exists) {
|
|
84
94
|
throw new Error(`Remote object verification failed: ${hash}`);
|
|
85
95
|
}
|
|
86
|
-
if (verified.size !== undefined &&
|
|
87
|
-
verified.size !== expectedSize) {
|
|
96
|
+
if (verified.size !== undefined && verified.size !== expectedSize) {
|
|
88
97
|
throw new Error(`Remote object size mismatch: ${hash}`);
|
|
89
98
|
}
|
|
90
99
|
}
|
|
@@ -92,11 +101,74 @@ export class ObjectStore {
|
|
|
92
101
|
validateHash(hash);
|
|
93
102
|
return path.join(this.root, hash.slice(0, 2), hash);
|
|
94
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Removes the local copy of an object. Returns whether a local file was
|
|
106
|
+
* actually removed; deleting an object that is not stored locally is not
|
|
107
|
+
* an error.
|
|
108
|
+
*/
|
|
109
|
+
async deleteLocal(hash) {
|
|
110
|
+
const destination = this.pathFor(hash);
|
|
111
|
+
try {
|
|
112
|
+
await rm(destination);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (error.code === "ENOENT")
|
|
117
|
+
return false;
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Unpublishes an object from the remote content store. Returns whether a
|
|
123
|
+
* remote object was deleted. Without a configured remote this is a no-op.
|
|
124
|
+
*/
|
|
125
|
+
async unpublish(hash) {
|
|
126
|
+
if (!this.remote)
|
|
127
|
+
return false;
|
|
128
|
+
const key = this.keyFor(hash);
|
|
129
|
+
const current = await this.remote.head(key);
|
|
130
|
+
if (!current.exists)
|
|
131
|
+
return false;
|
|
132
|
+
await this.remote.delete(key);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Lists every object hash stored locally, including stray files that have
|
|
137
|
+
* no `objects` row (for example leftovers from an interrupted import).
|
|
138
|
+
*/
|
|
139
|
+
async listLocal() {
|
|
140
|
+
const hashes = [];
|
|
141
|
+
let fanout;
|
|
142
|
+
try {
|
|
143
|
+
fanout = await readdir(this.root);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
if (error.code === "ENOENT")
|
|
147
|
+
return [];
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
for (const directory of fanout.sort()) {
|
|
151
|
+
if (!/^[a-f0-9]{2}$/.test(directory))
|
|
152
|
+
continue;
|
|
153
|
+
const entries = await readdir(path.join(this.root, directory));
|
|
154
|
+
for (const entry of entries.sort()) {
|
|
155
|
+
if (/^[a-f0-9]{64}$/.test(entry))
|
|
156
|
+
hashes.push(entry);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return hashes;
|
|
160
|
+
}
|
|
95
161
|
keyFor(hash) {
|
|
96
162
|
validateHash(hash);
|
|
97
163
|
return `${this.prefix}/${hash.slice(0, 2)}/${hash}`;
|
|
98
164
|
}
|
|
99
165
|
async ensureLocal(hash) {
|
|
166
|
+
// A forgotten object must stay forgotten: refuse the read before even
|
|
167
|
+
// looking at local bytes, so neither a lingering local file nor a
|
|
168
|
+
// configured remote can resurrect deleted content.
|
|
169
|
+
if (this.isForgotten?.(hash)) {
|
|
170
|
+
throw new Error(`Object unavailable: ${hash}`);
|
|
171
|
+
}
|
|
100
172
|
const destination = this.pathFor(hash);
|
|
101
173
|
try {
|
|
102
174
|
await stat(destination);
|