Execute batch uploads with metadata gates, encryption, and queue state.

Separate upload entries per file, ALTCHA on POST, and stripped-or-original fallback on metadata errors.
This commit is contained in:
2026-10-23 18:34:13 +02:00
parent fe643d9831
commit 271c2b7b2d
14 changed files with 333 additions and 136 deletions
@@ -1,39 +1,22 @@
import type { UploadBatchSettingsForm } from '@/types/upload/UploadBatchSettingsForm';
import type { ZkUploadPrepareOptionsResult } from '@/types/upload/ZkUploadPrepareOptionsResult';
import { resolveUploadBatchExpiresAt } from '@/utils/upload/resolveUploadBatchExpiresAt';
import { resolveUploadBatchMaxViews } from '@/utils/upload/resolveUploadBatchMaxViews';
import { validateUploadBatchSettings } from '@/utils/upload/validateUploadBatchSettings';
import type { ZkUploadPrepareOptions } from '@/types/upload/ZkUploadPrepareOptions';
import { buildUploadOptionsFromBatchSettings } from '@/utils/upload/buildUploadOptionsFromBatchSettings';
export const buildZkUploadPrepareOptionsFromBatchSettings = (
settings: UploadBatchSettingsForm
): ZkUploadPrepareOptionsResult => {
const validationError = validateUploadBatchSettings(settings);
if (validationError) {
return { ok: false, error: validationError };
}
const uploadOptions = {
expiresAt: resolveUploadBatchExpiresAt(settings.expiryPreset),
maxViews: resolveUploadBatchMaxViews(settings.maxViewsPreset)
};
): ZkUploadPrepareOptions => {
const uploadOptions = buildUploadOptionsFromBatchSettings(settings);
if (settings.passwordEnabled) {
return {
ok: true,
options: {
...uploadOptions,
passwordProtected: true,
password: settings.password
}
...uploadOptions,
passwordProtected: true,
password: settings.password
};
}
return {
ok: true,
options: {
...uploadOptions,
passwordProtected: false
}
...uploadOptions,
passwordProtected: false
};
};