@bitmagic/cli 0.1.83-dev.1 → 0.1.83-dev.2

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.
Files changed (158) hide show
  1. package/README.md +69 -0
  2. package/assets/skills/publishing-to-steam/SKILL.md +218 -0
  3. package/dist/assets/vxl-summary.d.ts +6 -20
  4. package/dist/assets/vxl-summary.js +9 -100
  5. package/dist/assets/vxl-summary.js.map +1 -1
  6. package/dist/cli.d.ts +1 -0
  7. package/dist/cli.js +2 -0
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/check.js +5 -0
  10. package/dist/commands/check.js.map +1 -1
  11. package/dist/commands/forge.js +1 -1
  12. package/dist/commands/forge.js.map +1 -1
  13. package/dist/commands/ios.js +88 -136
  14. package/dist/commands/ios.js.map +1 -1
  15. package/dist/commands/steam-build.d.ts +67 -0
  16. package/dist/commands/steam-build.js +286 -0
  17. package/dist/commands/steam-build.js.map +1 -0
  18. package/dist/commands/steam-portal.d.ts +1 -0
  19. package/dist/commands/steam-portal.js +319 -0
  20. package/dist/commands/steam-portal.js.map +1 -0
  21. package/dist/commands/steam-upload.d.ts +37 -0
  22. package/dist/commands/steam-upload.js +172 -0
  23. package/dist/commands/steam-upload.js.map +1 -0
  24. package/dist/commands/steam.d.ts +1 -0
  25. package/dist/commands/steam.js +502 -0
  26. package/dist/commands/steam.js.map +1 -0
  27. package/dist/commands/verify.js +6 -0
  28. package/dist/commands/verify.js.map +1 -1
  29. package/dist/editor/asset-viewer.js +5 -4
  30. package/dist/editor/asset-viewer.js.map +1 -1
  31. package/dist/editor/server.js +1 -1
  32. package/dist/editor/server.js.map +1 -1
  33. package/dist/editor/shell-page.js +3 -3
  34. package/dist/forge/browser-host.d.ts +1 -1
  35. package/dist/ios/native-overrides.d.ts +27 -0
  36. package/dist/ios/native-overrides.js +87 -0
  37. package/dist/ios/native-overrides.js.map +1 -0
  38. package/dist/ios/record-validate.d.ts +1 -33
  39. package/dist/ios/record-validate.js +2 -100
  40. package/dist/ios/record-validate.js.map +1 -1
  41. package/dist/ios/store-bridge.d.ts +26 -0
  42. package/dist/ios/store-bridge.js +224 -0
  43. package/dist/ios/store-bridge.js.map +1 -0
  44. package/dist/ios/storekit-config.d.ts +15 -0
  45. package/dist/ios/storekit-config.js +106 -0
  46. package/dist/ios/storekit-config.js.map +1 -0
  47. package/dist/ios/xcode-template.d.ts +12 -3
  48. package/dist/ios/xcode-template.js +158 -27
  49. package/dist/ios/xcode-template.js.map +1 -1
  50. package/dist/package/collect-urls.d.ts +1 -1
  51. package/dist/package/collect-urls.js +10 -2
  52. package/dist/package/collect-urls.js.map +1 -1
  53. package/dist/package/offline-payload.d.ts +35 -0
  54. package/dist/package/offline-payload.js +142 -0
  55. package/dist/package/offline-payload.js.map +1 -0
  56. package/dist/package/packaged-check.d.ts +39 -0
  57. package/dist/package/packaged-check.js +104 -0
  58. package/dist/package/packaged-check.js.map +1 -0
  59. package/dist/package/transform.d.ts +4 -4
  60. package/dist/package/transform.js +3 -3
  61. package/dist/project/published-three.d.ts +14 -0
  62. package/dist/project/published-three.js +93 -0
  63. package/dist/project/published-three.js.map +1 -0
  64. package/dist/publish/bundle.js +6 -0
  65. package/dist/publish/bundle.js.map +1 -1
  66. package/dist/scaffold/project-files.js +5 -2
  67. package/dist/scaffold/project-files.js.map +1 -1
  68. package/dist/scaffold/project.js +2 -0
  69. package/dist/scaffold/project.js.map +1 -1
  70. package/dist/scaffold/skill-files.js +3 -1
  71. package/dist/scaffold/skill-files.js.map +1 -1
  72. package/dist/scaffold/steam-skill-files.d.ts +2 -0
  73. package/dist/scaffold/steam-skill-files.js +7 -0
  74. package/dist/scaffold/steam-skill-files.js.map +1 -0
  75. package/dist/steam/art-generate.d.ts +55 -0
  76. package/dist/steam/art-generate.js +173 -0
  77. package/dist/steam/art-generate.js.map +1 -0
  78. package/dist/steam/art-render.d.ts +25 -0
  79. package/dist/steam/art-render.js +157 -0
  80. package/dist/steam/art-render.js.map +1 -0
  81. package/dist/steam/art-use.d.ts +20 -0
  82. package/dist/steam/art-use.js +84 -0
  83. package/dist/steam/art-use.js.map +1 -0
  84. package/dist/steam/art.d.ts +98 -0
  85. package/dist/steam/art.js +243 -0
  86. package/dist/steam/art.js.map +1 -0
  87. package/dist/steam/check.d.ts +21 -0
  88. package/dist/steam/check.js +113 -0
  89. package/dist/steam/check.js.map +1 -0
  90. package/dist/steam/config.d.ts +57 -0
  91. package/dist/steam/config.js +145 -0
  92. package/dist/steam/config.js.map +1 -0
  93. package/dist/steam/electron-cache.d.ts +11 -0
  94. package/dist/steam/electron-cache.js +105 -0
  95. package/dist/steam/electron-cache.js.map +1 -0
  96. package/dist/steam/fuses.d.ts +16 -0
  97. package/dist/steam/fuses.js +75 -0
  98. package/dist/steam/fuses.js.map +1 -0
  99. package/dist/steam/icon-files.d.ts +16 -0
  100. package/dist/steam/icon-files.js +70 -0
  101. package/dist/steam/icon-files.js.map +1 -0
  102. package/dist/steam/image-info.d.ts +16 -0
  103. package/dist/steam/image-info.js +89 -0
  104. package/dist/steam/image-info.js.map +1 -0
  105. package/dist/steam/launch-check.d.ts +12 -0
  106. package/dist/steam/launch-check.js +101 -0
  107. package/dist/steam/launch-check.js.map +1 -0
  108. package/dist/steam/media.d.ts +48 -0
  109. package/dist/steam/media.js +151 -0
  110. package/dist/steam/media.js.map +1 -0
  111. package/dist/steam/package-macos.d.ts +52 -0
  112. package/dist/steam/package-macos.js +268 -0
  113. package/dist/steam/package-macos.js.map +1 -0
  114. package/dist/steam/package-windows.d.ts +24 -0
  115. package/dist/steam/package-windows.js +84 -0
  116. package/dist/steam/package-windows.js.map +1 -0
  117. package/dist/steam/paths.d.ts +37 -0
  118. package/dist/steam/paths.js +45 -0
  119. package/dist/steam/paths.js.map +1 -0
  120. package/dist/steam/playtest-shots.d.ts +18 -0
  121. package/dist/steam/playtest-shots.js +83 -0
  122. package/dist/steam/playtest-shots.js.map +1 -0
  123. package/dist/steam/portal-recipes.d.ts +25 -0
  124. package/dist/steam/portal-recipes.js +61 -0
  125. package/dist/steam/portal-recipes.js.map +1 -0
  126. package/dist/steam/portal.d.ts +58 -0
  127. package/dist/steam/portal.js +340 -0
  128. package/dist/steam/portal.js.map +1 -0
  129. package/dist/steam/raster.d.ts +59 -0
  130. package/dist/steam/raster.js +285 -0
  131. package/dist/steam/raster.js.map +1 -0
  132. package/dist/steam/shell-files.d.ts +17 -0
  133. package/dist/steam/shell-files.js +268 -0
  134. package/dist/steam/shell-files.js.map +1 -0
  135. package/dist/steam/specs.d.ts +61 -0
  136. package/dist/steam/specs.js +103 -0
  137. package/dist/steam/specs.js.map +1 -0
  138. package/dist/steam/steampipe.d.ts +46 -0
  139. package/dist/steam/steampipe.js +170 -0
  140. package/dist/steam/steampipe.js.map +1 -0
  141. package/dist/steam/store-copy.d.ts +89 -0
  142. package/dist/steam/store-copy.js +221 -0
  143. package/dist/steam/store-copy.js.map +1 -0
  144. package/dist/steam/tags.d.ts +9 -0
  145. package/dist/steam/tags.js +49 -0
  146. package/dist/steam/tags.js.map +1 -0
  147. package/dist/steam/trailer.d.ts +34 -0
  148. package/dist/steam/trailer.js +141 -0
  149. package/dist/steam/trailer.js.map +1 -0
  150. package/dist/verify/browser.d.ts +11 -0
  151. package/dist/verify/browser.js +195 -152
  152. package/dist/verify/browser.js.map +1 -1
  153. package/dist/verify/classify.d.ts +11 -2
  154. package/dist/verify/classify.js +16 -4
  155. package/dist/verify/classify.js.map +1 -1
  156. package/dist/verify/mobile-parity.d.ts +1 -1
  157. package/dist/verify/mobile-parity.js +1 -1
  158. package/package.json +5 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-copy.js","sourceRoot":"","sources":["../../src/steam/store-copy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function steamTagsCachePath(baseDir?: string): string;
2
+ /** Tag names from the endpoint's `[{tagid, name}]` shape. Pure. */
3
+ export declare function parseTagList(value: unknown): string[] | null;
4
+ /** Every Steam tag, lowercased, or null when the list is unavailable. */
5
+ export declare function loadSteamTags(options?: {
6
+ fetchImpl?: typeof globalThis.fetch;
7
+ cachePath?: string;
8
+ now?: number;
9
+ }): Promise<ReadonlySet<string> | null>;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Steam's own tag list, so `steam check` can refuse a tag Steamworks would not offer. Fetched
3
+ * from the store's public endpoint and cached for a week under `~/.bitmagic/cache/`; offline, the
4
+ * check simply skips tag names rather than failing on a missing network.
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as os from 'os';
8
+ import * as path from 'path';
9
+ import { readJsonFile, writeJsonAtomic } from '../atomic-json.js';
10
+ const TAGS_URL = 'https://store.steampowered.com/tagdata/populartags/english';
11
+ const MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
12
+ export function steamTagsCachePath(baseDir = path.join(os.homedir(), '.bitmagic')) {
13
+ return path.join(baseDir, 'cache', 'steam-tags.json');
14
+ }
15
+ /** Tag names from the endpoint's `[{tagid, name}]` shape. Pure. */
16
+ export function parseTagList(value) {
17
+ if (!Array.isArray(value))
18
+ return null;
19
+ const names = value
20
+ .map((entry) => (typeof entry === 'object' && entry !== null ? entry.name : undefined))
21
+ .filter((name) => typeof name === 'string' && name.length > 0);
22
+ return names.length > 0 ? names : null;
23
+ }
24
+ /** Every Steam tag, lowercased, or null when the list is unavailable. */
25
+ export async function loadSteamTags(options = {}) {
26
+ const cachePath = options.cachePath ?? steamTagsCachePath();
27
+ const now = options.now ?? Date.now();
28
+ const cached = readJsonFile(cachePath);
29
+ const cachedTags = parseTagList(cached?.tags);
30
+ if (cachedTags !== null && typeof cached?.fetchedAt === 'number' && now - cached.fetchedAt < MAX_AGE_MS) {
31
+ return new Set(cachedTags.map((tag) => tag.toLowerCase()));
32
+ }
33
+ try {
34
+ const response = await (options.fetchImpl ?? globalThis.fetch)(TAGS_URL, { signal: AbortSignal.timeout(15_000) });
35
+ if (!response.ok)
36
+ throw new Error(`HTTP ${response.status}`);
37
+ const tags = parseTagList(await response.json());
38
+ if (tags === null)
39
+ throw new Error('unexpected shape');
40
+ fs.mkdirSync(path.dirname(cachePath), { recursive: true });
41
+ writeJsonAtomic(cachePath, { fetchedAt: now, tags: tags.map((name) => ({ name })) });
42
+ return new Set(tags.map((tag) => tag.toLowerCase()));
43
+ }
44
+ catch {
45
+ // A stale list still beats none.
46
+ return cachedTags !== null ? new Set(cachedTags.map((tag) => tag.toLowerCase())) : null;
47
+ }
48
+ }
49
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/steam/tags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type VideoProbe } from './media.js';
2
+ export interface TrailerProblem {
3
+ level: 'error' | 'warning';
4
+ message: string;
5
+ }
6
+ /** What Steam would object to in `probe`. Pure. */
7
+ export declare function trailerProblems(probe: VideoProbe, file: string): TrailerProblem[];
8
+ /** The end card: the logo over a darkened frame, an optional tagline and call to action under it. */
9
+ export declare function endCardHtml(options: {
10
+ width: number;
11
+ height: number;
12
+ logoUrl: string;
13
+ tagline?: string;
14
+ cta?: string;
15
+ fontUrl: string | null;
16
+ }): string;
17
+ /** The output frame rate: the source's own when Steam takes it, else the nearer of 30 and 60. */
18
+ export declare function targetFps(fps: number): number;
19
+ export interface SteamTrailerResult {
20
+ file: string;
21
+ probe: VideoProbe;
22
+ problems: TrailerProblem[];
23
+ }
24
+ export declare function makeSteamTrailer(options: {
25
+ video: string;
26
+ out: string;
27
+ endCard: {
28
+ seconds: number;
29
+ logoPng: Buffer;
30
+ tagline?: string;
31
+ cta?: string;
32
+ } | null;
33
+ log: (message: string) => void;
34
+ }): Promise<SteamTrailerResult>;
@@ -0,0 +1,141 @@
1
+ /**
2
+ * `bitmagic steam trailer` — a trailer Steam will accept: at most 1920x1080, 30 or 60 fps, H.264
3
+ * and AAC, a high bit rate, and an end card that ends on the game's logo instead of pointing
4
+ * players at another storefront.
5
+ *
6
+ * Why this exists rather than uploading the `bitmagic trailer` render as is: that render is cut
7
+ * for bitmagic.ai and social, and typically ends on "Play free at bitmagic.ai" with a corner
8
+ * watermark — copy a Steam reviewer flags, and wrong for a paid game. The trailer lane's own cut
9
+ * without its titles is the right source; this adds a Steam end card from the store kit's logo.
10
+ */
11
+ import * as fs from 'fs';
12
+ import * as path from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ import { ensureFfmpeg, runFfmpeg } from '@bitmagic/asset-core/trailer';
15
+ import { CliError } from '../errors.js';
16
+ import { probeVideo } from './media.js';
17
+ import { RasterSession, dataUrlFor } from './raster.js';
18
+ import { TRAILER_RULES } from './specs.js';
19
+ /** What Steam would object to in `probe`. Pure. */
20
+ export function trailerProblems(probe, file) {
21
+ const problems = [];
22
+ const ext = path.extname(file).slice(1).toLowerCase();
23
+ if (!TRAILER_RULES.containers.includes(ext)) {
24
+ problems.push({ level: 'error', message: `.${ext} is not a container Steam takes (mp4, mov, wmv).` });
25
+ }
26
+ if (probe.width > TRAILER_RULES.maxWidth || probe.height > TRAILER_RULES.maxHeight) {
27
+ problems.push({ level: 'error', message: `${probe.width}x${probe.height} is larger than Steam's 1920x1080.` });
28
+ }
29
+ if (probe.width < 1280 || probe.height < 720) {
30
+ problems.push({ level: 'warning', message: `${probe.width}x${probe.height} will look soft on the store page; 1920x1080 is expected.` });
31
+ }
32
+ if (!TRAILER_RULES.frameRates.some((rate) => Math.abs(rate - probe.fps) < 0.05)) {
33
+ problems.push({ level: 'error', message: `${probe.fps} fps; Steam takes 30/29.97 or 60/59.94.` });
34
+ }
35
+ if (probe.bitrateKbps < TRAILER_RULES.minBitrateKbps) {
36
+ problems.push({ level: 'warning', message: `${probe.bitrateKbps} kbit/s; Steam asks for ${TRAILER_RULES.minBitrateKbps}+ so its own transcode stays sharp.` });
37
+ }
38
+ if (probe.videoCodec !== 'h264') {
39
+ problems.push({ level: 'warning', message: `${probe.videoCodec} video; Steam prefers H.264.` });
40
+ }
41
+ if (probe.audioCodec === null) {
42
+ problems.push({ level: 'warning', message: 'No audio track. A silent trailer is allowed but sells far less.' });
43
+ }
44
+ else if (probe.audioCodec !== 'aac') {
45
+ problems.push({ level: 'warning', message: `${probe.audioCodec} audio; Steam prefers AAC.` });
46
+ }
47
+ return problems;
48
+ }
49
+ function bundledFontDataUrl() {
50
+ const file = fileURLToPath(new URL('../../assets/fonts/NotoSans-Bold.ttf', import.meta.url));
51
+ return fs.existsSync(file) ? `data:font/ttf;base64,${fs.readFileSync(file).toString('base64')}` : null;
52
+ }
53
+ function escapeHtml(text) {
54
+ return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
55
+ }
56
+ /** The end card: the logo over a darkened frame, an optional tagline and call to action under it. */
57
+ export function endCardHtml(options) {
58
+ const { width, height } = options;
59
+ const font = options.fontUrl ? `@font-face{font-family:'CardFont';src:url('${options.fontUrl}')}` : '';
60
+ const unit = height / 1080;
61
+ return `<!doctype html><html><head><meta charset="utf-8"><style>
62
+ ${font}
63
+ html,body{margin:0;width:${width}px;height:${height}px;overflow:hidden;background:transparent}
64
+ .shade{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 45%, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0.7) 100%)}
65
+ .stack{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:${Math.round(28 * unit)}px}
66
+ .logo{max-width:${Math.round(width * 0.58)}px;max-height:${Math.round(height * 0.46)}px;filter:drop-shadow(0 ${Math.round(8 * unit)}px ${Math.round(24 * unit)}px rgba(0,0,0,0.6))}
67
+ .tag{font-family:'CardFont','Helvetica Neue',Arial,sans-serif;font-weight:700;color:#fff;font-size:${Math.round(46 * unit)}px;letter-spacing:${(1.5 * unit).toFixed(1)}px;text-shadow:0 ${Math.round(3 * unit)}px ${Math.round(10 * unit)}px rgba(0,0,0,0.8)}
68
+ .cta{font-family:'CardFont','Helvetica Neue',Arial,sans-serif;font-weight:700;color:#111;background:#fff;border-radius:${Math.round(40 * unit)}px;padding:${Math.round(14 * unit)}px ${Math.round(38 * unit)}px;font-size:${Math.round(36 * unit)}px}
69
+ </style></head><body><div class="shade"></div><div class="stack">
70
+ <img class="logo" src="${options.logoUrl}">
71
+ ${options.tagline ? `<div class="tag">${escapeHtml(options.tagline)}</div>` : ''}
72
+ ${options.cta ? `<div class="cta">${escapeHtml(options.cta)}</div>` : ''}
73
+ </div></body></html>`;
74
+ }
75
+ /** The output frame rate: the source's own when Steam takes it, else the nearer of 30 and 60. */
76
+ export function targetFps(fps) {
77
+ const nearest = [...TRAILER_RULES.frameRates].sort((a, b) => Math.abs(a - fps) - Math.abs(b - fps))[0];
78
+ if (Math.abs(nearest - fps) < 0.05)
79
+ return nearest;
80
+ return fps > 45 ? 60 : 30;
81
+ }
82
+ export async function makeSteamTrailer(options) {
83
+ ensureFfmpeg(['ffmpeg', 'ffprobe']);
84
+ if (!fs.existsSync(options.video))
85
+ throw new CliError(`No video at ${options.video}.`);
86
+ const source = await probeVideo(options.video);
87
+ if (source.durationSec <= 0)
88
+ throw new CliError(`${options.video} has no duration ffprobe can read.`);
89
+ fs.mkdirSync(path.dirname(options.out), { recursive: true });
90
+ const scale = Math.min(1, TRAILER_RULES.maxWidth / source.width, TRAILER_RULES.maxHeight / source.height);
91
+ // Even dimensions: yuv420p cannot encode an odd width or height.
92
+ const width = Math.round((source.width * scale) / 2) * 2;
93
+ const height = Math.round((source.height * scale) / 2) * 2;
94
+ const fps = targetFps(source.fps);
95
+ const inputs = ['-i', options.video];
96
+ let filter = `[0:v]scale=${width}:${height}:flags=lanczos,fps=${fps},format=yuv420p[base]`;
97
+ let cardPath = null;
98
+ if (options.endCard !== null) {
99
+ const seconds = Math.min(options.endCard.seconds, source.durationSec);
100
+ const start = Math.max(0, source.durationSec - seconds);
101
+ const session = await RasterSession.open('bitmagic steam trailer');
102
+ try {
103
+ const png = await session.render(endCardHtml({
104
+ width,
105
+ height,
106
+ logoUrl: dataUrlFor(options.endCard.logoPng),
107
+ ...(options.endCard.tagline ? { tagline: options.endCard.tagline } : {}),
108
+ ...(options.endCard.cta ? { cta: options.endCard.cta } : {}),
109
+ fontUrl: bundledFontDataUrl(),
110
+ }), width, height, { transparent: true });
111
+ cardPath = `${options.out}.endcard.png`;
112
+ fs.writeFileSync(cardPath, png);
113
+ }
114
+ finally {
115
+ await session.close();
116
+ }
117
+ inputs.push('-loop', '1', '-t', seconds.toFixed(3), '-i', cardPath);
118
+ filter = `[0:v]scale=${width}:${height}:flags=lanczos,fps=${fps}[v];`
119
+ + `[1:v]format=rgba,fade=t=in:st=0:d=0.7:alpha=1,setpts=PTS+${start.toFixed(3)}/TB[card];`
120
+ + `[v][card]overlay=0:0:eof_action=pass,format=yuv420p[base]`;
121
+ }
122
+ options.log(`Encoding ${width}x${height} at ${fps} fps${options.endCard ? ' with the Steam end card' : ''}…`);
123
+ try {
124
+ await runFfmpeg([
125
+ '-hide_banner', '-loglevel', 'error', '-y', ...inputs,
126
+ '-filter_complex', filter,
127
+ '-map', '[base]', '-map', '0:a?',
128
+ '-c:v', 'libx264', '-profile:v', 'high', '-preset', 'slow', '-crf', '16',
129
+ '-c:a', 'aac', '-b:a', '192k', '-ar', '48000', '-ac', '2',
130
+ '-movflags', '+faststart',
131
+ options.out,
132
+ ]);
133
+ }
134
+ finally {
135
+ if (cardPath !== null)
136
+ fs.rmSync(cardPath, { force: true });
137
+ }
138
+ const probe = await probeVideo(options.out);
139
+ return { file: options.out, probe, problems: trailerProblems(probe, options.out) };
140
+ }
141
+ //# sourceMappingURL=trailer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailer.js","sourceRoot":"","sources":["../../src/steam/trailer.ts"],"names":[],"mappings":"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"}
@@ -102,3 +102,14 @@ export declare class VerifyBrowserSession {
102
102
  close(): Promise<void>;
103
103
  check(options: HeadlessCheckOptions): Promise<VerifyObservations>;
104
104
  }
105
+ /**
106
+ * One check on a page that already exists: arm the probes, `navigate` (a `goto` for verify, a
107
+ * `reload` for a packaged desktop app that loaded its own page before anything could attach),
108
+ * start the game the way a player does, settle, and observe. Split from
109
+ * {@link VerifyBrowserSession.check} so `bitmagic steam build` can hold the real Electron app to
110
+ * the same verdict a browser tab gets.
111
+ */
112
+ export declare function observeGamePage(page: Page, options: HeadlessCheckOptions, viewport: {
113
+ width: number;
114
+ height: number;
115
+ }, navigate: (page: Page) => Promise<unknown>): Promise<VerifyObservations>;