@bitmagic/cli 0.1.37 → 0.1.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -3
- package/dist/auth/subscribe-flow.d.ts +59 -0
- package/dist/auth/subscribe-flow.js +102 -0
- package/dist/auth/subscribe-flow.js.map +1 -0
- package/dist/browser-gl.d.ts +23 -0
- package/dist/browser-gl.js +50 -0
- package/dist/browser-gl.js.map +1 -1
- package/dist/cli.d.ts +41 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/login.js +33 -5
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/subscribe.d.ts +14 -0
- package/dist/commands/subscribe.js +60 -0
- package/dist/commands/subscribe.js.map +1 -0
- package/dist/commands/usage.d.ts +76 -0
- package/dist/commands/usage.js +117 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/verify.d.ts +13 -1
- package/dist/commands/verify.js +139 -15
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/whoami.d.ts +10 -4
- package/dist/commands/whoami.js +22 -7
- package/dist/commands/whoami.js.map +1 -1
- package/dist/forge/upload-proxy.js +1 -1
- package/dist/http/client.d.ts +10 -0
- package/dist/http/client.js +38 -2
- package/dist/http/client.js.map +1 -1
- package/dist/scaffold/claude-settings.js +4 -0
- package/dist/scaffold/claude-settings.js.map +1 -1
- package/dist/scaffold/project-files.d.ts +9 -0
- package/dist/scaffold/project-files.js +70 -9
- package/dist/scaffold/project-files.js.map +1 -1
- package/dist/scaffold/project.js +2 -1
- package/dist/scaffold/project.js.map +1 -1
- package/dist/verify/browser.d.ts +37 -1
- package/dist/verify/browser.js +389 -97
- package/dist/verify/browser.js.map +1 -1
- package/dist/verify/classify.d.ts +75 -2
- package/dist/verify/classify.js +48 -2
- package/dist/verify/classify.js.map +1 -1
- package/dist/verify/iterate.d.ts +47 -0
- package/dist/verify/iterate.js +162 -0
- package/dist/verify/iterate.js.map +1 -0
- package/dist/verify/result.d.ts +16 -3
- package/dist/verify/result.js +13 -3
- package/dist/verify/result.js.map +1 -1
- package/dist/verify/settle.d.ts +60 -0
- package/dist/verify/settle.js +90 -0
- package/dist/verify/settle.js.map +1 -0
- package/package.json +1 -1
package/dist/verify/browser.js
CHANGED
|
@@ -2,6 +2,8 @@ import * as fs from 'fs';
|
|
|
2
2
|
import { chromium } from 'playwright-core';
|
|
3
3
|
import { browserGlArgs } from '../browser-gl.js';
|
|
4
4
|
import { CliError } from '../errors.js';
|
|
5
|
+
import { RESPAWN_LINE, } from './classify.js';
|
|
6
|
+
import { DEFAULT_SETTLE_CONFIG, SETTLE_POLL_MS, isFreefalling, settleVerdict, } from './settle.js';
|
|
5
7
|
export const DEFAULT_START_INTERACTION = {
|
|
6
8
|
playButtonSelector: '#play-button, .hud-play-button',
|
|
7
9
|
startedConsoleMarker: '🎮 Starting game...',
|
|
@@ -13,116 +15,406 @@ export const DEFAULT_START_INTERACTION = {
|
|
|
13
15
|
* browser rather than a downloaded one, so installing the CLI stays a small, fast npm install.
|
|
14
16
|
*/
|
|
15
17
|
export async function runHeadlessCheck(options) {
|
|
16
|
-
|
|
18
|
+
const session = await VerifyBrowserSession.launch(options.browserArgs);
|
|
17
19
|
try {
|
|
18
|
-
|
|
19
|
-
// without it every verify run blares the game's music and effects at whoever is sitting there.
|
|
20
|
-
// The GL flags are not an optimisation — without them the game renders in software on a
|
|
21
|
-
// machine with a perfectly good GPU, and a run that should take seconds crawls (browser-gl.ts).
|
|
22
|
-
browser = await chromium.launch({
|
|
23
|
-
headless: true,
|
|
24
|
-
channel: 'chrome',
|
|
25
|
-
args: ['--mute-audio', ...browserGlArgs(process.env)],
|
|
26
|
-
});
|
|
20
|
+
return await session.check(options);
|
|
27
21
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// start editing game code to fix a missing browser.
|
|
31
|
-
throw new CliError('Could not launch Google Chrome. `bitmagic verify` drives the Chrome installed on this ' +
|
|
32
|
-
'machine — install it from https://www.google.com/chrome/ and run verify again.');
|
|
22
|
+
finally {
|
|
23
|
+
await session.close();
|
|
33
24
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A launched headless Chrome that can run any number of checks, each in a fresh browser context.
|
|
28
|
+
*
|
|
29
|
+
* One-shot verify launches, checks and closes (`runHeadlessCheck`). `--watch` keeps one session
|
|
30
|
+
* alive across iterations — launching Chrome is by far the most expensive fixed cost of a run —
|
|
31
|
+
* while the per-check context still gives every iteration a clean slate: fresh init scripts,
|
|
32
|
+
* fresh listeners, fresh storage, and engine disposal via the page teardown.
|
|
33
|
+
*/
|
|
34
|
+
export class VerifyBrowserSession {
|
|
35
|
+
browser;
|
|
36
|
+
constructor(browser) {
|
|
37
|
+
this.browser = browser;
|
|
38
|
+
}
|
|
39
|
+
static async launch(browserArgs) {
|
|
45
40
|
try {
|
|
46
|
-
|
|
41
|
+
// `--mute-audio` because headless Chrome still plays sound through the machine's speakers:
|
|
42
|
+
// without it every verify run blares the game's music and effects at whoever is sitting
|
|
43
|
+
// there. The GL flags are not an optimisation — without them the game renders in software
|
|
44
|
+
// on a machine with a perfectly good GPU, and a run that should take seconds crawls
|
|
45
|
+
// (browser-gl.ts).
|
|
46
|
+
return new VerifyBrowserSession(await chromium.launch({
|
|
47
|
+
headless: true,
|
|
48
|
+
channel: 'chrome',
|
|
49
|
+
args: ['--mute-audio', ...(browserArgs ?? browserGlArgs(process.env))],
|
|
50
|
+
}));
|
|
47
51
|
}
|
|
48
|
-
catch
|
|
49
|
-
//
|
|
50
|
-
//
|
|
52
|
+
catch {
|
|
53
|
+
// Not a game failure. Saying so plainly matters: an agent told "verification failed" would
|
|
54
|
+
// start editing game code to fix a missing browser.
|
|
55
|
+
throw new CliError('Could not launch Google Chrome. `bitmagic verify` drives the Chrome installed on this ' +
|
|
56
|
+
'machine — install it from https://www.google.com/chrome/ and run verify again.');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async close() {
|
|
60
|
+
await this.browser.close();
|
|
61
|
+
}
|
|
62
|
+
async check(options) {
|
|
63
|
+
// Declared outside the try so the `finally` below can write whatever was captured even if the
|
|
64
|
+
// browser phase throws (e.g. page.goto timing out) — artifacts are the point of a failing run.
|
|
65
|
+
const consoleLines = [];
|
|
66
|
+
const pageErrors = [];
|
|
67
|
+
const context = await this.browser.newContext({ viewport: { width: 1280, height: 720 } });
|
|
68
|
+
try {
|
|
69
|
+
const page = await context.newPage();
|
|
70
|
+
await armContextLossProbe(page);
|
|
71
|
+
await armFrameCounter(page);
|
|
72
|
+
page.on('console', (message) => consoleLines.push(`${message.type()}: ${message.text()}`));
|
|
73
|
+
page.on('pageerror', (error) => pageErrors.push(error.message));
|
|
74
|
+
page.on('requestfailed', (request) => consoleLines.push(`requestfailed: ${request.url()} ${request.failure()?.errorText ?? ''}`));
|
|
51
75
|
try {
|
|
52
|
-
|
|
76
|
+
await page.goto(options.url, { waitUntil: 'load', timeout: 45_000 });
|
|
53
77
|
}
|
|
54
|
-
catch {
|
|
55
|
-
//
|
|
78
|
+
catch (error) {
|
|
79
|
+
// Best-effort screenshot of whatever the page shows right now — often still blank, but
|
|
80
|
+
// worth having. The console log (written in `finally` below) is the useful artifact here.
|
|
81
|
+
if (options.captureScreenshot !== false) {
|
|
82
|
+
try {
|
|
83
|
+
fs.writeFileSync(options.screenshotPath, await page.screenshot());
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Page may already be unusable (closed context, crashed renderer) — nothing to save.
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
90
|
+
throw new CliError(`The page never finished loading at ${options.url}: ${detail}`);
|
|
91
|
+
}
|
|
92
|
+
const interaction = options.startInteraction === undefined
|
|
93
|
+
? null
|
|
94
|
+
: await performStartInteraction(page, consoleLines, options.startInteraction);
|
|
95
|
+
// Verify settles adaptively — a game that provably reached stable gameplay is observed
|
|
96
|
+
// after a few seconds instead of the full fixed window, with `settleMs` as the hard cap.
|
|
97
|
+
// The smoke check keeps the fixed wait: its game lives in an iframe this probe does not
|
|
98
|
+
// reach, and its question ("does the published bundle come up") has no early exit.
|
|
99
|
+
let settle;
|
|
100
|
+
let settleSamples = [];
|
|
101
|
+
if (options.startInteraction === undefined) {
|
|
102
|
+
await page.waitForTimeout(options.settleMs);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
({ settle, samples: settleSamples } = await adaptiveSettle(page, consoleLines, options.settleMs));
|
|
106
|
+
}
|
|
107
|
+
// Same probe either way; only the frame it runs in differs. A missing child frame leaves
|
|
108
|
+
// `target` null, which classifies as "no canvas" — correct, because a harness whose iframe
|
|
109
|
+
// never loaded (a download, a 404) is exactly the failure this mode exists to catch.
|
|
110
|
+
const target = options.probeFrameUrlIncludes === undefined
|
|
111
|
+
? page
|
|
112
|
+
: page.frames().find((frame) => frame.url().includes(options.probeFrameUrlIncludes)) ?? null;
|
|
113
|
+
const canvas = target === null ? null : await target.evaluate(() => {
|
|
114
|
+
// This callback runs inside the browser Playwright drives, not in the CLI's Node process,
|
|
115
|
+
// so `document` is a real global there even though the CLI's eslint config declares no
|
|
116
|
+
// DOM globals for the process it actually lints.
|
|
117
|
+
// eslint-disable-next-line no-undef
|
|
118
|
+
const element = document.querySelector('#game-container canvas');
|
|
119
|
+
if (!(element instanceof HTMLCanvasElement))
|
|
120
|
+
return null;
|
|
121
|
+
const rect = element.getBoundingClientRect();
|
|
122
|
+
return {
|
|
123
|
+
width: Math.round(rect.width),
|
|
124
|
+
height: Math.round(rect.height),
|
|
125
|
+
// The drawing-buffer attributes, not CSS size — see CanvasObservation in classify.ts for
|
|
126
|
+
// why this replaced a getContext() probe.
|
|
127
|
+
bufferWidth: element.width,
|
|
128
|
+
bufferHeight: element.height,
|
|
129
|
+
// Page coordinates of the rect, for sampling the captured frame below. Kept out of
|
|
130
|
+
// CanvasObservation, which is about whether a renderer claimed the canvas, not where.
|
|
131
|
+
left: Math.round(rect.left),
|
|
132
|
+
top: Math.round(rect.top),
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
// `--fast` skips the whole screenshot pipeline — capture, disk write, and the in-page PNG
|
|
136
|
+
// re-decode of measureCanvasFrame. The context-loss probe, frame counter and state
|
|
137
|
+
// snapshot still catch the black-frame family; what is lost is only the pixel evidence,
|
|
138
|
+
// which the inner loop does not need and publish's own smoke check always recaptures.
|
|
139
|
+
let screenshotBytes = null;
|
|
140
|
+
let canvasFrame = null;
|
|
141
|
+
if (options.captureScreenshot !== false) {
|
|
142
|
+
const screenshotBuffer = await page.screenshot();
|
|
143
|
+
fs.writeFileSync(options.screenshotPath, screenshotBuffer);
|
|
144
|
+
screenshotBytes = screenshotBuffer.length;
|
|
145
|
+
canvasFrame = canvas === null
|
|
146
|
+
? null
|
|
147
|
+
: await measureCanvasFrame(page, screenshotBuffer, canvas);
|
|
148
|
+
}
|
|
149
|
+
const webglContextLost = await page.evaluate(
|
|
150
|
+
// eslint-disable-next-line no-undef -- browser-side callback, see the canvas probe above.
|
|
151
|
+
(flag) => window[flag] === true, CONTEXT_LOST_FLAG);
|
|
152
|
+
const renderer = options.requestedRenderer === undefined
|
|
153
|
+
? undefined
|
|
154
|
+
: target === null
|
|
155
|
+
? { requested: options.requestedRenderer, rendererType: null, backend: null }
|
|
156
|
+
: await probeRenderer(target, options.requestedRenderer);
|
|
157
|
+
const snapshot = options.startInteraction === undefined || target === null
|
|
158
|
+
? undefined
|
|
159
|
+
: await captureStateSnapshot(target, settleSamples);
|
|
160
|
+
let start;
|
|
161
|
+
if (options.startInteraction !== undefined && interaction !== null) {
|
|
162
|
+
start = {
|
|
163
|
+
...interaction,
|
|
164
|
+
// Recomputed from the full console capture rather than taken from the interaction step,
|
|
165
|
+
// so a start that only lands during the settle (slow world load) still counts.
|
|
166
|
+
gameStartDetected: hasStartMarker(consoleLines, options.startInteraction.startedConsoleMarker),
|
|
167
|
+
menuVisibleAfterSettle: await isMenuVisible(page),
|
|
168
|
+
};
|
|
56
169
|
}
|
|
57
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
58
|
-
throw new CliError(`The page never finished loading at ${options.url}: ${detail}`);
|
|
59
|
-
}
|
|
60
|
-
const interaction = options.startInteraction === undefined
|
|
61
|
-
? null
|
|
62
|
-
: await performStartInteraction(page, consoleLines, options.startInteraction);
|
|
63
|
-
await page.waitForTimeout(options.settleMs);
|
|
64
|
-
// Same probe either way; only the frame it runs in differs. A missing child frame leaves
|
|
65
|
-
// `target` null, which classifies as "no canvas" — correct, because a harness whose iframe
|
|
66
|
-
// never loaded (a download, a 404) is exactly the failure this mode exists to catch.
|
|
67
|
-
const target = options.probeFrameUrlIncludes === undefined
|
|
68
|
-
? page
|
|
69
|
-
: page.frames().find((frame) => frame.url().includes(options.probeFrameUrlIncludes)) ?? null;
|
|
70
|
-
const canvas = target === null ? null : await target.evaluate(() => {
|
|
71
|
-
// This callback runs inside the browser Playwright drives, not in the CLI's Node process,
|
|
72
|
-
// so `document` is a real global there even though the CLI's eslint config declares no
|
|
73
|
-
// DOM globals for the process it actually lints.
|
|
74
|
-
// eslint-disable-next-line no-undef
|
|
75
|
-
const element = document.querySelector('#game-container canvas');
|
|
76
|
-
if (!(element instanceof HTMLCanvasElement))
|
|
77
|
-
return null;
|
|
78
|
-
const rect = element.getBoundingClientRect();
|
|
79
170
|
return {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
const screenshotBuffer = await page.screenshot();
|
|
93
|
-
fs.writeFileSync(options.screenshotPath, screenshotBuffer);
|
|
94
|
-
const canvasFrame = canvas === null
|
|
95
|
-
? null
|
|
96
|
-
: await measureCanvasFrame(page, screenshotBuffer, canvas);
|
|
97
|
-
const webglContextLost = await page.evaluate(
|
|
98
|
-
// eslint-disable-next-line no-undef -- browser-side callback, see the canvas probe above.
|
|
99
|
-
(flag) => window[flag] === true, CONTEXT_LOST_FLAG);
|
|
100
|
-
let start;
|
|
101
|
-
if (options.startInteraction !== undefined && interaction !== null) {
|
|
102
|
-
start = {
|
|
103
|
-
...interaction,
|
|
104
|
-
// Recomputed from the full console capture rather than taken from the interaction step,
|
|
105
|
-
// so a start that only lands during the settle (slow world load) still counts.
|
|
106
|
-
gameStartDetected: hasStartMarker(consoleLines, options.startInteraction.startedConsoleMarker),
|
|
107
|
-
menuVisibleAfterSettle: await isMenuVisible(page),
|
|
171
|
+
consoleLines,
|
|
172
|
+
pageErrors,
|
|
173
|
+
canvas,
|
|
174
|
+
screenshotBytes,
|
|
175
|
+
webglContextLost,
|
|
176
|
+
canvasFrame,
|
|
177
|
+
start,
|
|
178
|
+
renderer,
|
|
179
|
+
snapshot,
|
|
180
|
+
settle,
|
|
108
181
|
};
|
|
109
182
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
183
|
+
finally {
|
|
184
|
+
// Written on success and failure alike, including when the try block above threw before
|
|
185
|
+
// ever reaching the screenshot: the console log is the most useful thing a creator or their
|
|
186
|
+
// agent can look at when the page never came up at all.
|
|
187
|
+
fs.writeFileSync(options.consolePath, [...consoleLines, ...pageErrors.map((e) => `pageerror: ${e}`)].join('\n'));
|
|
188
|
+
await context.close();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/** Window counter the init script below increments on every rAF tick. */
|
|
193
|
+
const FRAME_COUNT_FLAG = '__bitmagicFrameCount';
|
|
194
|
+
/**
|
|
195
|
+
* Count rendered frames from before any page script runs.
|
|
196
|
+
*
|
|
197
|
+
* rAF rate is the page's heartbeat: a page whose loop stalls (a hung WebGPU init, a crashed
|
|
198
|
+
* renderer process) keeps its DOM and console looking healthy while this counter freezes, and
|
|
199
|
+
* the settle loop reads it every poll to prove the game is actually running, not just loaded.
|
|
200
|
+
*/
|
|
201
|
+
async function armFrameCounter(page) {
|
|
202
|
+
await page.addInitScript((flag) => {
|
|
203
|
+
/* eslint-disable no-undef -- browser-side callback, see the canvas probe above. */
|
|
204
|
+
const w = window;
|
|
205
|
+
w[flag] = 0;
|
|
206
|
+
const tick = () => {
|
|
207
|
+
w[flag] = w[flag] + 1;
|
|
208
|
+
requestAnimationFrame(tick);
|
|
118
209
|
};
|
|
210
|
+
requestAnimationFrame(tick);
|
|
211
|
+
/* eslint-enable no-undef */
|
|
212
|
+
}, FRAME_COUNT_FLAG);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Settle by watching the live game rather than waiting a fixed time: poll the engine every
|
|
216
|
+
* `SETTLE_POLL_MS` and stop as soon as `settleVerdict` says stable gameplay has been observed,
|
|
217
|
+
* with `maxMs` (the old fixed settle) as the hard cap. The samples come back with the result
|
|
218
|
+
* because the final state snapshot derives fps and the falling judgement from them.
|
|
219
|
+
*/
|
|
220
|
+
async function adaptiveSettle(page, consoleLines, maxMs) {
|
|
221
|
+
const samples = [];
|
|
222
|
+
const startedAt = Date.now();
|
|
223
|
+
for (;;) {
|
|
224
|
+
const elapsed = Date.now() - startedAt;
|
|
225
|
+
if (elapsed >= maxMs) {
|
|
226
|
+
return { settle: { durationMs: elapsed, reason: 'timeout' }, samples };
|
|
227
|
+
}
|
|
228
|
+
await page.waitForTimeout(Math.min(SETTLE_POLL_MS, maxMs - elapsed));
|
|
229
|
+
samples.push(await takeSettleSample(page, Date.now() - startedAt, consoleLines));
|
|
230
|
+
if (settleVerdict(samples, DEFAULT_SETTLE_CONFIG) === 'settled') {
|
|
231
|
+
return { settle: { durationMs: Date.now() - startedAt, reason: 'stable' }, samples };
|
|
232
|
+
}
|
|
119
233
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* One poll of the live page. Every probe is feature-detected and the whole evaluate is wrapped
|
|
237
|
+
* twice (in the page and out here): a page that cannot answer yields nulls, which
|
|
238
|
+
* `settleVerdict` treats as "cannot settle early" — the run then simply waits out the cap,
|
|
239
|
+
* exactly the pre-adaptive behaviour.
|
|
240
|
+
*/
|
|
241
|
+
async function takeSettleSample(page, atMs, consoleLines) {
|
|
242
|
+
const errorEventCount = consoleLines.filter((line) => line.startsWith('error:') || line.includes(RESPAWN_LINE)).length;
|
|
243
|
+
const unobserved = { frameCount: null, gameState: null, hasStarted: null, playerY: null };
|
|
244
|
+
try {
|
|
245
|
+
const probed = await page.evaluate((flag) => {
|
|
246
|
+
/* eslint-disable no-undef -- browser-side callback, see the canvas probe above. */
|
|
247
|
+
try {
|
|
248
|
+
const w = window;
|
|
249
|
+
const frameCount = typeof w[flag] === 'number' ? w[flag] : null;
|
|
250
|
+
const template = w.gameTemplate;
|
|
251
|
+
const engine = template?.getGameEngine?.();
|
|
252
|
+
let gameState = null;
|
|
253
|
+
let hasStarted = null;
|
|
254
|
+
let playerY = null;
|
|
255
|
+
if (engine) {
|
|
256
|
+
const state = engine.gameStateManager?.getCurrentState?.();
|
|
257
|
+
gameState = typeof state === 'string' ? state : null;
|
|
258
|
+
const started = engine.gameStateManager?.hasStarted?.();
|
|
259
|
+
hasStarted = typeof started === 'boolean' ? started : null;
|
|
260
|
+
const player = typeof engine.getCurrentPlayer === 'function'
|
|
261
|
+
? engine.getCurrentPlayer()
|
|
262
|
+
: null;
|
|
263
|
+
const position = typeof player?.getPosition === 'function'
|
|
264
|
+
? player.getPosition()
|
|
265
|
+
: player?.player?.position;
|
|
266
|
+
const y = position?.y;
|
|
267
|
+
playerY = typeof y === 'number' && Number.isFinite(y) ? y : null;
|
|
268
|
+
}
|
|
269
|
+
return { frameCount, gameState, hasStarted, playerY };
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return { frameCount: null, gameState: null, hasStarted: null, playerY: null };
|
|
273
|
+
}
|
|
274
|
+
/* eslint-enable no-undef */
|
|
275
|
+
}, FRAME_COUNT_FLAG);
|
|
276
|
+
return { atMs, errorEventCount, ...probed };
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return { atMs, errorEventCount, ...unobserved };
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* End-of-run engine state, read through the same debug handle as `probeRenderer` and under the
|
|
284
|
+
* same contract: every field feature-detected, null meaning "not observed", the whole snapshot
|
|
285
|
+
* null when the engine cannot be reached at all. fps and the falling judgement come from the
|
|
286
|
+
* settle samples rather than the page, because both are derivatives of change over time and a
|
|
287
|
+
* single evaluate cannot see time.
|
|
288
|
+
*/
|
|
289
|
+
async function captureStateSnapshot(target, samples) {
|
|
290
|
+
let probed;
|
|
291
|
+
try {
|
|
292
|
+
probed = await target.evaluate(() => {
|
|
293
|
+
/* eslint-disable no-undef -- browser-side callback, see the canvas probe above. */
|
|
294
|
+
try {
|
|
295
|
+
const w = window;
|
|
296
|
+
const template = w.gameTemplate;
|
|
297
|
+
const engine = template?.getGameEngine?.();
|
|
298
|
+
if (!engine)
|
|
299
|
+
return null;
|
|
300
|
+
const state = engine.gameStateManager?.getCurrentState?.();
|
|
301
|
+
const started = engine.gameStateManager?.hasStarted?.();
|
|
302
|
+
const elapsed = typeof engine.getElapsedTime === 'function' ? engine.getElapsedTime() : null;
|
|
303
|
+
const playerHandle = typeof engine.getCurrentPlayer === 'function'
|
|
304
|
+
? engine.getCurrentPlayer()
|
|
305
|
+
: null;
|
|
306
|
+
const position = typeof playerHandle?.getPosition === 'function'
|
|
307
|
+
? playerHandle.getPosition()
|
|
308
|
+
: playerHandle?.player?.position;
|
|
309
|
+
const p = position;
|
|
310
|
+
const player = typeof p?.x === 'number' && typeof p?.y === 'number' && typeof p?.z === 'number'
|
|
311
|
+
? { x: p.x, y: p.y, z: p.z }
|
|
312
|
+
: null;
|
|
313
|
+
const stats = engine.physicsWorld?.getStats?.();
|
|
314
|
+
const physics = typeof stats?.rigidBodyCount === 'number' && typeof stats?.colliderCount === 'number'
|
|
315
|
+
? { rigidBodyCount: stats.rigidBodyCount, colliderCount: stats.colliderCount }
|
|
316
|
+
: null;
|
|
317
|
+
let scene = null;
|
|
318
|
+
if (engine.scene && typeof engine.scene.traverse === 'function') {
|
|
319
|
+
let objects = 0;
|
|
320
|
+
let meshes = 0;
|
|
321
|
+
let lights = 0;
|
|
322
|
+
engine.scene.traverse((object) => {
|
|
323
|
+
objects++;
|
|
324
|
+
const o = object;
|
|
325
|
+
if (o.isMesh === true)
|
|
326
|
+
meshes++;
|
|
327
|
+
if (o.isLight === true)
|
|
328
|
+
lights++;
|
|
329
|
+
});
|
|
330
|
+
scene = { objects, meshes, lights };
|
|
331
|
+
}
|
|
332
|
+
const registry = typeof engine.getNpcRegistry === 'function'
|
|
333
|
+
? engine.getNpcRegistry()
|
|
334
|
+
: null;
|
|
335
|
+
const count = registry?.getCount?.();
|
|
336
|
+
return {
|
|
337
|
+
gameState: typeof state === 'string' ? state : null,
|
|
338
|
+
hasStarted: typeof started === 'boolean' ? started : null,
|
|
339
|
+
elapsedTimeSeconds: typeof elapsed === 'number' && Number.isFinite(elapsed) ? elapsed : null,
|
|
340
|
+
player,
|
|
341
|
+
physics,
|
|
342
|
+
scene,
|
|
343
|
+
npcCount: typeof count === 'number' ? count : null,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
/* eslint-enable no-undef */
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
if (probed === null)
|
|
356
|
+
return null;
|
|
357
|
+
return {
|
|
358
|
+
...probed,
|
|
359
|
+
fps: measureFps(samples),
|
|
360
|
+
player: probed.player === null ? null : { ...probed.player, isFalling: isFreefalling(samples) },
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Page rAF rate across the final settle polls (up to four, ~1.5s), or null when the counter was
|
|
365
|
+
* not observed twice. The window is wider than one poll on purpose: a slow-but-alive loop
|
|
366
|
+
* (software rendering at a frame a second) can produce zero frames in any single 500ms interval,
|
|
367
|
+
* and 0 is reserved for a loop that is actually stalled — any observed frame reports at least 1.
|
|
368
|
+
*/
|
|
369
|
+
function measureFps(samples) {
|
|
370
|
+
const counted = samples.filter((sample) => sample.frameCount !== null).slice(-4);
|
|
371
|
+
if (counted.length < 2)
|
|
372
|
+
return null;
|
|
373
|
+
const last = counted[counted.length - 1];
|
|
374
|
+
const first = counted[0];
|
|
375
|
+
const intervalMs = last.atMs - first.atMs;
|
|
376
|
+
if (intervalMs <= 0)
|
|
377
|
+
return null;
|
|
378
|
+
const frames = last.frameCount - first.frameCount;
|
|
379
|
+
if (frames <= 0)
|
|
380
|
+
return 0;
|
|
381
|
+
return Math.max(1, Math.round((frames * 1000) / intervalMs));
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* What renderer class the engine constructed and what backend is actually driving the canvas,
|
|
385
|
+
* read from the live engine through the debug handle `GameTemplate` installs on `window`.
|
|
386
|
+
*
|
|
387
|
+
* Everything is feature-detected and the whole probe returns nulls on any throw: an older engine
|
|
388
|
+
* without these getters, or a page too broken to answer, classifies as "not observed" — never as
|
|
389
|
+
* a failure of the game. The one distinction that matters is `backend === 'webgl2'` when WebGPU
|
|
390
|
+
* was requested: three's WebGPURenderer runs a WebGL2 fallback backend without erroring, and this
|
|
391
|
+
* getter is the only place that state is visible.
|
|
392
|
+
*/
|
|
393
|
+
async function probeRenderer(target, requested) {
|
|
394
|
+
try {
|
|
395
|
+
const observed = await target.evaluate(() => {
|
|
396
|
+
/* eslint-disable no-undef -- browser-side callback, see the canvas probe above. */
|
|
397
|
+
try {
|
|
398
|
+
const template = window.gameTemplate;
|
|
399
|
+
const engine = template?.getGameEngine?.();
|
|
400
|
+
if (!engine)
|
|
401
|
+
return { rendererType: null, backend: null };
|
|
402
|
+
const rendererType = typeof engine.getRendererType === 'function' ? engine.getRendererType() : null;
|
|
403
|
+
const backend = typeof engine.getActiveBackend === 'function' ? engine.getActiveBackend() : null;
|
|
404
|
+
return {
|
|
405
|
+
rendererType: typeof rendererType === 'string' ? rendererType : null,
|
|
406
|
+
backend: typeof backend === 'string' ? backend : null,
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
return { rendererType: null, backend: null };
|
|
411
|
+
}
|
|
412
|
+
/* eslint-enable no-undef */
|
|
413
|
+
});
|
|
414
|
+
return { requested, ...observed };
|
|
415
|
+
}
|
|
416
|
+
catch {
|
|
417
|
+
return { requested, rendererType: null, backend: null };
|
|
126
418
|
}
|
|
127
419
|
}
|
|
128
420
|
/** Window flag the init script below sets when the page loses its WebGL context. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/verify/browser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/verify/browser.ts"],"names":[],"mappings":"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"}
|