diff --git a/src/cli/presence-server.ts b/src/cli/presence-server.ts index 2069df2..29bf31a 100644 --- a/src/cli/presence-server.ts +++ b/src/cli/presence-server.ts @@ -1190,7 +1190,8 @@ class Server extends HttpServer { const result = await this.handlePresenceRequest(req, null, presence_user_nsaid); - const {theme, friend_code, transparent, width, options} = getUserEmbedOptionsFromRequest(req); + const {theme, friend_code, transparent, width, scale: req_scale, options} = getUserEmbedOptionsFromRequest(req); + const scale = format === PresenceEmbedFormat.SVG ? 1 : req_scale; const etag = createHash('sha256').update(JSON.stringify({ result, @@ -1198,6 +1199,7 @@ class Server extends HttpServer { friend_code, transparent, width, + scale, options, v: version + '-' + git?.revision, })).digest('base64url'); @@ -1210,7 +1212,7 @@ class Server extends HttpServer { const url_map = await this.getImages(result, this.getResourceBaseUrls(req)); - const svg = renderUserEmbedSvg(result, url_map, theme, friend_code, options, 1, transparent, width); + const svg = renderUserEmbedSvg(result, url_map, theme, friend_code, options, scale, transparent, width); const [image, type] = await renderUserEmbedImage(svg, format); res.setHeader('Content-Type', type); diff --git a/src/cli/util/presence-embed-server.ts b/src/cli/util/presence-embed-server.ts index a3476e7..47e1b15 100644 --- a/src/cli/util/presence-embed-server.ts +++ b/src/cli/util/presence-embed-server.ts @@ -102,7 +102,8 @@ class Server extends HttpServer { const [presence, user, data] = await getPresenceFromUrl(this.base_url + '/' + presence_user_nsaid + qs); const result = data as PresenceResponse; - const {theme, friend_code, transparent, width, options} = getUserEmbedOptionsFromRequest(req); + const {theme, friend_code, transparent, width, scale: req_scale, options} = getUserEmbedOptionsFromRequest(req); + const scale = format === PresenceEmbedFormat.SVG ? 1 : req_scale; const etag = createHash('sha256').update(JSON.stringify({ data, @@ -111,6 +112,7 @@ class Server extends HttpServer { friend_code, transparent, width, + scale, options, v: version + '-' + git?.revision, })).digest('base64url'); @@ -139,7 +141,7 @@ class Server extends HttpServer { url_map[url] = [url, data, type]; })); - const svg = renderUserEmbedSvg(result, url_map, theme, friend_code, options, 1, transparent, width); + const svg = renderUserEmbedSvg(result, url_map, theme, friend_code, options, scale, transparent, width); const [image, type] = await renderUserEmbedImage(svg, format); res.setHeader('Content-Type', type); diff --git a/src/cli/util/presence-embed.ts b/src/cli/util/presence-embed.ts index 76415ce..b24ccdc 100644 --- a/src/cli/util/presence-embed.ts +++ b/src/cli/util/presence-embed.ts @@ -79,11 +79,15 @@ export function getUserEmbedOptionsFromRequest(req: Request) { if (!width) width = 500; if (width > 1500) width = 1500; + let scale = url.searchParams.getAll('scale') + .map(s => parseInt(s)) + .find(s => !isNaN(s) && s >= 1 && s <= 4); + const options: UserEmbedOptions = { show_splatoon3_fest_team: url.searchParams.get('show-splatoon3-fest-team') === '1', }; - return {theme, friend_code, transparent, width, options}; + return {theme, friend_code, transparent, width, scale, options}; } export async function renderUserEmbedImage(