Files
splatoon3.ink/app/screenshots/ScreenshotHelper.mjs
2026-08-29 19:25:32 -07:00

71 lines
1.3 KiB
JavaScript

import createScreenshotDriver from './drivers/createScreenshotDriver.mjs';
const defaultViewport = {
// Using a 16:9 ratio here by default to match Twitter's image card dimensions
width: 1200,
height: 675,
deviceScaleFactor: 2,
};
export default class ScreenshotHelper
{
_driver = null;
_driverDependencies;
_isOpen = false;
defaultParams = null;
constructor(driverDependencies = {}) {
this._driverDependencies = driverDependencies;
}
get isOpen() {
return this._isOpen;
}
async open() {
await this.close();
this._driver = createScreenshotDriver(
process.env.SCREENSHOT_PROVIDER,
this._driverDependencies,
);
await this._driver.open();
this._isOpen = true;
}
async capture(path, options = {}) {
if (!this.isOpen) {
await this.open();
}
let params = {
...this.defaultParams,
...options.params,
};
let route = path;
if (Object.keys(params).length) {
route += '?';
route += Object.keys(params)
.map(key => `${key}=${params[key]}`)
.join('&');
}
let viewport = {
...defaultViewport,
...options.viewport,
};
return await this._driver.capture(route, viewport);
}
async close() {
if (this._driver) {
await this._driver.close();
}
this._driver = null;
this._isOpen = false;
}
}