Watch party reader view: presented websites become clean text with per-device font size, landscape/portrait and an Original switch; SSRF-guarded server fetch
This commit is contained in:
@@ -168,7 +168,7 @@ export function createPartyHub({ now = () => Date.now(), profileExists = async (
|
||||
else {
|
||||
const url = String(v?.url || '').trim();
|
||||
if (!/^https?:\/\/[^\s<>"]{3,2000}$/i.test(url)) return;
|
||||
p.present = { url, page: Math.max(1, Math.min(9999, Math.floor(Number(v.page) || 1))), by: me.name, at: now() };
|
||||
p.present = { url, mode: v.mode === 'reader' ? 'reader' : 'embed', page: Math.max(1, Math.min(9999, Math.floor(Number(v.page) || 1))), by: me.name, at: now() };
|
||||
}
|
||||
broadcast(p, { type: 'present', present: p.present });
|
||||
} else if ((m.type === 'invite' || m.type === 'uninvite') && isHost) {
|
||||
@@ -226,6 +226,7 @@ export function createPartyHub({ now = () => Date.now(), profileExists = async (
|
||||
return {
|
||||
upgrade,
|
||||
invitesFor,
|
||||
presentUrl: (code) => parties.get(code)?.present?.url || null,
|
||||
websocket: { maxPayloadLength: MAX_MSG, idleTimeout: 120, open, message: (ws, msg) => message(ws, typeof msg === 'string' ? msg : null), close },
|
||||
_parties: parties,
|
||||
stop() { clearInterval(sweeper); },
|
||||
|
||||
Reference in New Issue
Block a user