Initial Commit

This commit is contained in:
Anders Böttcher
2026-05-11 23:39:16 +02:00
parent 9dde8d8804
commit 50566f2a22
38 changed files with 5840 additions and 1015 deletions
+67
View File
@@ -0,0 +1,67 @@
import path from 'path'
import fs from 'fs/promises'
export type FileType = 'backerup' | 'config'
export interface FileRecord {
token: string
originalName: string
displayName?: string
size: number
type: FileType
uploadedAt: string
description?: string
group?: string
containerName?: string
image?: string
}
const DATA_DIR = path.join(process.cwd(), 'data')
const META_FILE = path.join(DATA_DIR, 'meta.json')
const UPLOADS_DIR = path.join(DATA_DIR, 'uploads')
async function ensureDirs() {
await fs.mkdir(UPLOADS_DIR, { recursive: true })
}
export async function readMeta(): Promise<FileRecord[]> {
try {
const text = await fs.readFile(META_FILE, 'utf-8')
return JSON.parse(text) as FileRecord[]
} catch {
return []
}
}
export async function listGroups(): Promise<string[]> {
const records = await readMeta()
const groups = new Set<string>()
for (const r of records) {
if (r.group) groups.add(r.group)
}
return Array.from(groups).sort()
}
async function writeMeta(records: FileRecord[]): Promise<void> {
await ensureDirs()
await fs.writeFile(META_FILE, JSON.stringify(records, null, 2), 'utf-8')
}
export async function addFile(record: FileRecord, buffer: Buffer): Promise<void> {
await ensureDirs()
const dir = path.join(UPLOADS_DIR, record.token)
await fs.mkdir(dir, { recursive: true })
await fs.writeFile(path.join(dir, record.originalName), buffer)
const records = await readMeta()
records.unshift(record)
await writeMeta(records)
}
export async function getFile(token: string): Promise<FileRecord | undefined> {
const records = await readMeta()
return records.find((r) => r.token === token)
}
export function getUploadPath(token: string, originalName: string): string {
return path.join(UPLOADS_DIR, token, originalName)
}