Review a background thumbnail pipeline

src/thumbnail-pipeline-types.tsTypeScript
@@ -0,0 +1,42 @@
1+export interface ThumbnailJob {
2+ id: string;
3+ assetId: string;
4+ sourceVersion: string;
5+}
6+
7+export interface ByteStream {
8+ pipeTo(destination: TemporaryWriter): Promise<void>;
9+}
10+
11+export interface TemporaryWriter {
12+ readonly path: string;
13+ close(): Promise<void>;
14+}
15+
16+export interface TemporaryFiles {
17+ create(): Promise<TemporaryWriter>;
18+ remove(path: string): Promise<void>;
19+}
20+
21+export interface AssetStore {
22+ download(assetId: string, sourceVersion?: string): Promise<ByteStream>;
23+ currentVersion(assetId: string): Promise<string>;
24+}
25+
26+export interface ThumbnailStore {
27+ put(
28+ assetId: string,
29+ bytes: Uint8Array,
30+ sourceVersion?: string,
31+ ): Promise<void>;
32+}
33+
34+export interface ThumbnailRenderer {
35+ render(inputPath: string): Promise<Uint8Array>;
36+}
37+
38+export interface ThumbnailQueue {
39+ receive(limit: number): Promise<readonly ThumbnailJob[]>;
40+ ack(job: ThumbnailJob): Promise<void>;
41+ nack(job: ThumbnailJob): Promise<void>;
42+}