diff --git a/lib/vidmoly-upload.js b/lib/vidmoly-upload.js index 25ebbbe..bdcc6c1 100644 --- a/lib/vidmoly-upload.js +++ b/lib/vidmoly-upload.js @@ -141,9 +141,10 @@ class VidmolyUploader { } return { uploadUrl: payload.upload_url, - // Classic XFS upload fields in the order the server expects. - params: { upload_type: 'file', sess_id: payload.sess_id, srv_tmp_url: '', utype: 'reg' }, - fileFieldName: 'file_0' + // Fields verified from a real browser POST capture. + // to_json=1 forces a JSON response instead of an HTML redirect page. + params: { sess_id: payload.sess_id, to_json: '1', fld_id: '0' }, + fileFieldName: 'file' }; } @@ -244,28 +245,33 @@ class VidmolyUploader { resultHtml = await body.text(); } - // Try JSON first (some XFS versions return JSON) + // Try JSON first. The current transit server returns + // { status: "OK", file_code: "...", msg: "Upload Completed" }. + // Legacy XFS shapes (json.files / json.result) are kept as fallback. try { const json = JSON.parse(resultHtml); + if (json.status && /ok/i.test(json.status) && json.file_code) { + return this._buildUrlsFromCode(json.file_code); + } + if (json.file_code || json.filecode) { + return this._buildUrlsFromCode(json.file_code || json.filecode); + } if (json.files && json.files.length > 0) { const f = json.files[0]; - const code = f.filecode || f.file_code; - return { - download_url: code ? `${BASE_URL}/w/${code}` : null, - embed_url: code ? `${BASE_URL}/embed-${code}.html` : null, - file_code: code - }; + return this._buildUrlsFromCode(f.filecode || f.file_code); } if (json.result) { const r = Array.isArray(json.result) ? json.result[0] : json.result; const code = r.filecode || r.file_code; - return { - download_url: r.download_url || (code ? `${BASE_URL}/w/${code}` : null), - embed_url: r.embed_url || (code ? `${BASE_URL}/embed-${code}.html` : null), - file_code: code - }; + const urls = this._buildUrlsFromCode(code); + if (urls) return urls; } - } catch {} + if (json.status && !/ok/i.test(json.status) && json.msg) { + throw new Error(`Vidmoly Upload abgelehnt: ${json.msg}`); + } + } catch (err) { + if (err && /Vidmoly Upload abgelehnt/.test(err.message)) throw err; + } try { return this._parseUploadResult(resultHtml);