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+
}