Support resumable game folder uploads and remove DLC declarations
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import { createLibraryImport, libraryOverview } from '$lib/server/game-files/index.js';
|
||||
import { createLibraryUpload, libraryOverview } from '$lib/server/game-files/index.js';
|
||||
import { gameFileError, readGameJson } from '$lib/server/game-files/http.js';
|
||||
import { requireManagementOrigin } from '$lib/server/hosts/http.js';
|
||||
|
||||
export function GET() { return json(libraryOverview()); }
|
||||
export async function POST({ request }: { request: Request }) {
|
||||
try { requireManagementOrigin(request); return json({ version: createLibraryImport(await readGameJson(request)) }, { status: 202 }); }
|
||||
try { requireManagementOrigin(request); return json({ version: createLibraryUpload(await readGameJson(request, 32 * 1024 * 1024)) }, { status: 202 }); }
|
||||
catch (cause) { return gameFileError(cause); }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import { browserUploadStatus } from '$lib/server/game-files/index.js';
|
||||
import { gameFileError } from '$lib/server/game-files/http.js';
|
||||
|
||||
export async function GET({ params }: { params: { id: string } }) {
|
||||
try { return json(await browserUploadStatus(params.id), { headers: { 'Cache-Control': 'no-store' } }); }
|
||||
catch (cause) { return gameFileError(cause); }
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import { requestBrowserPublication } from '$lib/server/game-files/index.js';
|
||||
import { gameFileError } from '$lib/server/game-files/http.js';
|
||||
import { requireManagementOrigin } from '$lib/server/hosts/http.js';
|
||||
|
||||
export async function POST({ request, params }: { request: Request; params: { id: string } }) {
|
||||
try {
|
||||
requireManagementOrigin(request);
|
||||
return json(await requestBrowserPublication(params.id), { status: 202 });
|
||||
} catch (cause) { return gameFileError(cause); }
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import { uploadBrowserFile } from '$lib/server/game-files/index.js';
|
||||
import { gameFileError } from '$lib/server/game-files/http.js';
|
||||
import { requireManagementOrigin } from '$lib/server/hosts/http.js';
|
||||
|
||||
function integerHeader(request: Request, name: string): number {
|
||||
const value = request.headers.get(name);
|
||||
if (value === null || !/^\d+$/.test(value) || !Number.isSafeInteger(Number(value))) throw new Error(`Provide a valid ${name} header.`);
|
||||
return Number(value);
|
||||
}
|
||||
export async function PUT({ request, params }: { request: Request; params: { id: string; path: string } }) {
|
||||
try {
|
||||
requireManagementOrigin(request);
|
||||
const chunk = { offset: integerHeader(request, 'X-Upload-Offset'), size: integerHeader(request, 'X-Upload-Length'), sha256: request.headers.get('X-Content-SHA256') ?? '' };
|
||||
return json(await uploadBrowserFile(params.id, params.path, chunk, request.body));
|
||||
} catch (cause) { return gameFileError(cause); }
|
||||
}
|
||||
Reference in New Issue
Block a user