Files
tiennm99bot/renderer/scripts/api-smoke.js
T
tiennm99 7ca1468a43 feat(gacha)!: render /api/gacha as the pack-cards wish
/api/gacha now renders the 6-second portrait pack-cards opening that was
served on /api/gachabeta. The Remotion meteor wish, its timeline, and the
beta route are removed, and the pack-cards renderer and page take the plain
gacha names.

BREAKING CHANGE: /api/gachabeta is gone, and /api/gacha returns a 6-second
portrait video (360x640 for width 640, 480x854 for width 854) instead of the
7-second landscape one.
2026-10-01 22:12:25 +07:00

71 lines
1.7 KiB
JavaScript

import {buildServer} from '../src/server.js';
const config = {
apiToken: 'smoke-token',
host: '127.0.0.1',
maxConcurrentRenders: 1,
maxOptionChars: 40,
maxOptions: 32,
port: 0,
requiresApiToken: true,
renderTimeoutMs: 30000,
};
const app = await buildServer({config, warmRenderers: true});
try {
const response = await app.inject({
method: 'POST',
url: '/api/gif',
headers: {
authorization: 'Bearer smoke-token',
},
payload: {
durationMs: 3000,
fps: 12,
holdMs: 500,
options: ['alice', 'bob', 'carol', 'dave'],
size: 384,
theme: 'classic',
winnerIndex: 2,
},
});
if (response.statusCode !== 200) {
throw new Error(`Expected 200, got ${response.statusCode}: ${response.body}`);
}
const magic = response.rawPayload.subarray(0, 6).toString();
if (magic !== 'GIF89a') {
throw new Error(`Expected GIF89a header, got ${magic}`);
}
if (response.headers['x-wheel-winner-index'] !== '2') {
throw new Error(`Expected winner index 2, got ${response.headers['x-wheel-winner-index']}`);
}
console.log(`api-smoke: ${response.rawPayload.byteLength} bytes`);
const gacha = await app.inject({
method: 'POST',
url: '/api/gacha',
headers: {
authorization: 'Bearer smoke-token',
},
payload: {label: 'Bún bò', rarity: 5},
});
if (gacha.statusCode !== 200) {
throw new Error(`Expected gacha 200, got ${gacha.statusCode}: ${gacha.body}`);
}
const box = gacha.rawPayload.subarray(4, 8).toString();
if (box !== 'ftyp') {
throw new Error(`Expected MP4 ftyp box, got ${box}`);
}
console.log(`api-smoke gacha: ${gacha.rawPayload.byteLength} bytes`);
} finally {
await app.close();
}