@bitmagic/cli 0.1.70-dev.2 → 0.1.70
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 +36 -2
- package/assets/skills/publishing-to-poki/SKILL.md +41 -1
- package/dist/cli.d.ts +4 -0
- package/dist/commands/publish.d.ts +5 -0
- package/dist/commands/publish.js +3 -0
- package/dist/commands/publish.js.map +1 -1
- package/dist/ios/transform.d.ts +0 -1
- package/dist/ios/transform.js +1 -1
- package/dist/ios/transform.js.map +1 -1
- package/dist/package/vendor.js +3 -2
- package/dist/package/vendor.js.map +1 -1
- package/dist/poki/assets.d.ts +5 -0
- package/dist/poki/assets.js +50 -41
- package/dist/poki/assets.js.map +1 -1
- package/dist/poki/check.d.ts +3 -0
- package/dist/poki/check.js +46 -12
- package/dist/poki/check.js.map +1 -1
- package/dist/poki/handoff.d.ts +22 -0
- package/dist/poki/handoff.js +56 -0
- package/dist/poki/handoff.js.map +1 -0
- package/dist/poki/playtest.d.ts +15 -0
- package/dist/poki/playtest.js +45 -0
- package/dist/poki/playtest.js.map +1 -0
- package/dist/poki/publish.d.ts +1 -0
- package/dist/poki/publish.js +61 -21
- package/dist/poki/publish.js.map +1 -1
- package/dist/poki/source-diagnostics.d.ts +14 -0
- package/dist/poki/source-diagnostics.js +40 -0
- package/dist/poki/source-diagnostics.js.map +1 -0
- package/dist/poki/transform.js +4 -3
- package/dist/poki/transform.js.map +1 -1
- package/dist/publish/bundle.d.ts +6 -1
- package/dist/publish/bundle.js +9 -3
- package/dist/publish/bundle.js.map +1 -1
- package/dist/verify/browser.d.ts +10 -0
- package/dist/verify/browser.js +12 -5
- package/dist/verify/browser.js.map +1 -1
- package/dist/verify/classify.js +6 -4
- package/dist/verify/classify.js.map +1 -1
- package/package.json +4 -4
package/dist/poki/check.js
CHANGED
|
@@ -9,6 +9,8 @@ import { DEFAULT_START_INTERACTION } from '../verify/start.js';
|
|
|
9
9
|
import { withVerifyLock } from '../verify/lock.js';
|
|
10
10
|
import { POKI_SDK_URL } from './transform.js';
|
|
11
11
|
import { isStaticAsset } from './assets.js';
|
|
12
|
+
import { runPokiPlaytest } from './playtest.js';
|
|
13
|
+
import { readPokiSources, requestSourceFiles } from './source-diagnostics.js';
|
|
12
14
|
// Only the intercepted SDK response uses this stub. It never enters the delivered ZIP.
|
|
13
15
|
export const POKI_SDK_STUB = `(() => {
|
|
14
16
|
let playing = false, advertising = false;
|
|
@@ -33,6 +35,8 @@ export const POKI_SDK_STUB = `(() => {
|
|
|
33
35
|
setDebug: () => {}
|
|
34
36
|
};
|
|
35
37
|
})();`;
|
|
38
|
+
/** Every healthy boot reaches all three, in any order. */
|
|
39
|
+
const REQUIRED_SDK_EVENTS = ['init', 'loaded', 'start'];
|
|
36
40
|
/** Exercise the engine state contract after starting through actual UI, inside its iframe. */
|
|
37
41
|
async function pauseAndResume(frame) {
|
|
38
42
|
await frame.evaluate(async () => {
|
|
@@ -54,18 +58,34 @@ export async function runPokiCheck(options) {
|
|
|
54
58
|
return withVerifyLock(options.root, 'publish --target poki', { info: options.log }, async () => {
|
|
55
59
|
fs.mkdirSync(options.artifactDir, { recursive: true });
|
|
56
60
|
const mountPath = options.nested ? '/poki/game/' : '/';
|
|
61
|
+
const sources = readPokiSources(options.root);
|
|
57
62
|
const server = await startPayloadServer(options.payloadDir, { mountPath });
|
|
58
63
|
const misses = new Set();
|
|
59
64
|
const localFailures = new Set();
|
|
65
|
+
const nonAssetRequests = new Set();
|
|
66
|
+
const requests = new Map();
|
|
67
|
+
const recordRequest = (url, method, resourceType, status) => {
|
|
68
|
+
requests.set(`${method} ${url}`, { url, method, resourceType, ...(status === undefined ? {} : { status }), sourceFiles: requestSourceFiles(sources, url) });
|
|
69
|
+
if (new URL(url).origin !== server.origin && (method !== 'GET' || !isStaticAsset(url))) {
|
|
70
|
+
nonAssetRequests.add(`${method} ${url}`);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
60
73
|
const gameUrl = `${server.origin}${mountPath}index.html?platform=${options.platform}&renderer=webgl`;
|
|
61
74
|
const harnessUrl = `${server.origin}/__poki_check__.html`;
|
|
62
75
|
const routes = async (context) => {
|
|
63
76
|
context.on('response', (response) => {
|
|
64
77
|
if (new URL(response.url()).origin === server.origin && response.status() >= 400) {
|
|
65
|
-
|
|
78
|
+
const request = response.request();
|
|
79
|
+
recordRequest(response.url(), request.method(), request.resourceType(), response.status());
|
|
80
|
+
const files = requestSourceFiles(sources, response.url());
|
|
81
|
+
localFailures.add(`${response.status()} ${response.url()}${files.length > 0 ? ` — source references: ${files.join(', ')}` : ''}`);
|
|
66
82
|
}
|
|
67
83
|
});
|
|
68
|
-
await context.routeWebSocket('**', (socket) => {
|
|
84
|
+
await context.routeWebSocket('**', (socket) => {
|
|
85
|
+
misses.add(socket.url());
|
|
86
|
+
recordRequest(socket.url(), 'GET', 'websocket');
|
|
87
|
+
socket.close();
|
|
88
|
+
});
|
|
69
89
|
await context.route('**/*', async (route) => {
|
|
70
90
|
const request = route.request();
|
|
71
91
|
const url = request.url();
|
|
@@ -83,6 +103,7 @@ export async function runPokiCheck(options) {
|
|
|
83
103
|
}
|
|
84
104
|
else {
|
|
85
105
|
misses.add(url);
|
|
106
|
+
recordRequest(url, request.method(), request.resourceType());
|
|
86
107
|
if (options.mode === 'record' && request.method() === 'GET' && isStaticAsset(url))
|
|
87
108
|
await route.continue();
|
|
88
109
|
else
|
|
@@ -90,6 +111,10 @@ export async function runPokiCheck(options) {
|
|
|
90
111
|
}
|
|
91
112
|
});
|
|
92
113
|
};
|
|
114
|
+
const recordOutcome = (outcome) => {
|
|
115
|
+
fs.writeFileSync(path.join(options.artifactDir, 'result.json'), JSON.stringify(outcome, null, 2) + '\n');
|
|
116
|
+
return outcome;
|
|
117
|
+
};
|
|
93
118
|
try {
|
|
94
119
|
const observations = await runHeadlessCheck({
|
|
95
120
|
url: harnessUrl, probeFrameUrlIncludes: `${server.origin}${mountPath}index.html`,
|
|
@@ -100,34 +125,43 @@ export async function runPokiCheck(options) {
|
|
|
100
125
|
launch: browserLaunchPlan(process.env, 'webgl'),
|
|
101
126
|
...(options.platform === 'mobile' ? { device: mobileContextOptions(options.orientation ?? 'landscape') } : {}),
|
|
102
127
|
routes, blockServiceWorkers: true,
|
|
103
|
-
|
|
128
|
+
afterSettle: async (frame) => {
|
|
129
|
+
if (options.playtest) {
|
|
130
|
+
options.log(`Running ${options.platform} Poki playtest: ${options.playtest.file}`);
|
|
131
|
+
await runPokiPlaytest(options.playtest, { frame, platform: options.platform });
|
|
132
|
+
}
|
|
133
|
+
if (options.mode === 'restricted')
|
|
134
|
+
await pauseAndResume(frame);
|
|
135
|
+
},
|
|
104
136
|
});
|
|
105
137
|
const sdkEvents = observations.consoleLines.flatMap((line) => {
|
|
106
138
|
const event = /BM_POKI_EVENT:(\S+)/.exec(line);
|
|
107
139
|
return event ? [event[1]] : [];
|
|
108
140
|
});
|
|
109
141
|
const result = classifyVerifyRun(observations, { bundled: true, platform: options.platform });
|
|
110
|
-
if (!
|
|
142
|
+
if (!REQUIRED_SDK_EVENTS.every((event) => sdkEvents.includes(event))) {
|
|
111
143
|
result.failures.push('The Poki SDK did not initialize, finish loading, and report gameplay.');
|
|
112
144
|
}
|
|
113
145
|
if (options.mode === 'restricted' && !sdkEvents.includes('ad-end')) {
|
|
114
146
|
result.failures.push('The Poki pause/resume advertisement was not observed.');
|
|
115
147
|
}
|
|
116
148
|
result.ok = result.failures.length === 0;
|
|
117
|
-
|
|
118
|
-
fs.writeFileSync(path.join(options.artifactDir, 'result.json'), JSON.stringify(outcome, null, 2) + '\n');
|
|
119
|
-
return outcome;
|
|
149
|
+
return recordOutcome({ result, misses: [...misses], localFailures: [...localFailures], sdkEvents, nonAssetRequests: [...nonAssetRequests] });
|
|
120
150
|
}
|
|
121
151
|
catch (error) {
|
|
122
|
-
|
|
152
|
+
return recordOutcome({
|
|
123
153
|
result: { ok: false, failures: [error instanceof Error ? error.message : String(error)], warnings: [] },
|
|
124
154
|
misses: [...misses], localFailures: [...localFailures], sdkEvents: [],
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return outcome;
|
|
155
|
+
nonAssetRequests: [...nonAssetRequests],
|
|
156
|
+
});
|
|
128
157
|
}
|
|
129
158
|
finally {
|
|
130
|
-
|
|
159
|
+
try {
|
|
160
|
+
fs.writeFileSync(path.join(options.artifactDir, 'requests.json'), JSON.stringify([...requests.values()], null, 2) + '\n');
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
await server.close();
|
|
164
|
+
}
|
|
131
165
|
}
|
|
132
166
|
});
|
|
133
167
|
}
|
package/dist/poki/check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/poki/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/poki/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PokiServiceRisk } from './source-diagnostics.js';
|
|
2
|
+
interface PokiHandoff {
|
|
3
|
+
zipPath: string;
|
|
4
|
+
payloadDir: string;
|
|
5
|
+
manifestPath: string;
|
|
6
|
+
checksDir: string;
|
|
7
|
+
sha256: string;
|
|
8
|
+
engineVersion: string;
|
|
9
|
+
cliVersion: string;
|
|
10
|
+
zipBytes: number;
|
|
11
|
+
unpackedBytes: number;
|
|
12
|
+
builtAt: string;
|
|
13
|
+
playtest: {
|
|
14
|
+
file: string;
|
|
15
|
+
sha256: string;
|
|
16
|
+
} | null;
|
|
17
|
+
serviceRisks: PokiServiceRisk[];
|
|
18
|
+
warnings: string[];
|
|
19
|
+
}
|
|
20
|
+
/** Generated separately from UPLOAD-HANDOFF.md so re-export never overwrites manual QA notes. */
|
|
21
|
+
export declare function renderPokiHandoff(result: PokiHandoff): string;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/** Generated separately from UPLOAD-HANDOFF.md so re-export never overwrites manual QA notes. */
|
|
2
|
+
export function renderPokiHandoff(result) {
|
|
3
|
+
return `# Poki export handoff
|
|
4
|
+
|
|
5
|
+
Export complete; upload pending. This command did not upload or release a Poki version.
|
|
6
|
+
|
|
7
|
+
- Built: ${result.builtAt}
|
|
8
|
+
- Engine: ${result.engineVersion}
|
|
9
|
+
- CLI: ${result.cliVersion}
|
|
10
|
+
- ZIP: ${JSON.stringify(result.zipPath)}
|
|
11
|
+
- ZIP SHA-256: ${result.sha256}
|
|
12
|
+
- Upload directory: ${JSON.stringify(result.payloadDir)}
|
|
13
|
+
- Manifest: ${JSON.stringify(result.manifestPath)}
|
|
14
|
+
- Diagnostics: ${JSON.stringify(result.checksDir)}
|
|
15
|
+
- Compressed: ${result.zipBytes} bytes; unpacked: ${result.unpackedBytes} bytes.
|
|
16
|
+
|
|
17
|
+
## What was checked
|
|
18
|
+
|
|
19
|
+
The extracted ZIP passed desktop and mobile **emulation** at root and nested iframe paths,
|
|
20
|
+
with an SDK stub and a pause/ad/resume cycle. Network checks cover only the paths exercised.
|
|
21
|
+
${result.playtest
|
|
22
|
+
? `Game-specific playtest: ${JSON.stringify(result.playtest.file)} (SHA-256 ${result.playtest.sha256}).`
|
|
23
|
+
: 'No game-specific playtest was supplied. Custom menus, chapters, score submission, and later levels may be untested. Use --poki-playtest to exercise them during export.'}
|
|
24
|
+
|
|
25
|
+
Real SDK/Inspector QA, physical-phone QA, upload, moderation, and public release remain unverified.
|
|
26
|
+
|
|
27
|
+
## External-service review
|
|
28
|
+
|
|
29
|
+
${result.serviceRisks.length > 0
|
|
30
|
+
? result.serviceRisks.map((risk) => `- ${risk.file}: ${risk.api}() may use an external service.`).join('\n')
|
|
31
|
+
: 'No known Bitmagic service calls were found by the source scan. This is not proof that the game has no external dependencies.'}
|
|
32
|
+
|
|
33
|
+
Exercise an actual session, chapter transitions, end screens, and leaderboards in Inspector.
|
|
34
|
+
Resolve blocked services with the creator: use an agreed offline design or seek Poki approval.
|
|
35
|
+
Do not silently remove features or claim that no external resources are used from a smoke pass.
|
|
36
|
+
|
|
37
|
+
## Upload and real-device QA
|
|
38
|
+
|
|
39
|
+
When an upload is requested, use the [official Poki CLI](https://github.com/poki/poki-cli).
|
|
40
|
+
Read its upload help and supply the Poki UUID and only the upload directory above.
|
|
41
|
+
Preserve the validated assets by disabling image recompression; keep public release disabled
|
|
42
|
+
unless requested. Initial login opens the system browser, so arrange that browser handoff first.
|
|
43
|
+
|
|
44
|
+
Check the returned version ID, not only the uploader's exit code. Record it and check processing status before retrying an apparently missing
|
|
45
|
+
upload. Ready, moderation approval, and public release are separate states.
|
|
46
|
+
|
|
47
|
+
Test the real SDK using [Poki Inspector](https://developers.poki.com/guide/inspector).
|
|
48
|
+
Open the payload folder, or use the uploaded version's Inspector link. Check folder-selection
|
|
49
|
+
permissions before browser automation; if unavailable, use a manual selection or an already
|
|
50
|
+
authorized hosted upload. An HTTP 200 from a local server does not prove its iframe loaded.
|
|
51
|
+
Inspector Mobile mode requires a connected phone via QR; emulation is not physical-device QA.
|
|
52
|
+
|
|
53
|
+
Keep observed upload/QA results in a separate UPLOAD-HANDOFF.md; this file is regenerated on export.
|
|
54
|
+
${result.warnings.length > 0 ? '\n## Export warnings\n\n' + result.warnings.map((warning) => `- ${warning}`).join('\n') + '\n' : ''}`;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/poki/handoff.ts"],"names":[],"mappings":"AAkBA,iGAAiG;AACjG,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,OAAO;;;;WAIE,MAAM,CAAC,OAAO;YACb,MAAM,CAAC,aAAa;SACvB,MAAM,CAAC,UAAU;SACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;iBACtB,MAAM,CAAC,MAAM;sBACR,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;cACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;iBAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;gBACjC,MAAM,CAAC,QAAQ,qBAAqB,MAAM,CAAC,aAAa;;;;;;EAMtE,MAAM,CAAC,QAAQ;QACb,CAAC,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI;QACxG,CAAC,CAAC,yKAAyK;;;;;;EAM7K,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,iCAAiC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5G,CAAC,CAAC,8HAA8H;;;;;;;;;;;;;;;;;;;;;;;EAuBlI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACtI,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Frame, Page } from 'playwright-core';
|
|
2
|
+
export interface PokiPlaytestContext {
|
|
3
|
+
frame: Page | Frame;
|
|
4
|
+
platform: 'desktop' | 'mobile';
|
|
5
|
+
}
|
|
6
|
+
export interface PokiPlaytest {
|
|
7
|
+
file: string;
|
|
8
|
+
sha256: string;
|
|
9
|
+
run: (context: PokiPlaytestContext) => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function playtestHash(file: string): string;
|
|
12
|
+
/** Explicit opt-in: game-specific UI actions run against every staged/extracted package check. */
|
|
13
|
+
export declare function loadPokiPlaytest(file: string | undefined, cwd: string): Promise<PokiPlaytest | undefined>;
|
|
14
|
+
/** A stalled selector must not hang an export. Closing the browser cancels outstanding actions. */
|
|
15
|
+
export declare function runPokiPlaytest(playtest: PokiPlaytest, context: PokiPlaytestContext, timeoutMs?: number): Promise<void>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { createHash } from 'crypto';
|
|
4
|
+
import { pathToFileURL } from 'url';
|
|
5
|
+
import { CliError } from '../errors.js';
|
|
6
|
+
export function playtestHash(file) {
|
|
7
|
+
return createHash('sha256').update(fs.readFileSync(file)).digest('hex');
|
|
8
|
+
}
|
|
9
|
+
/** Explicit opt-in: game-specific UI actions run against every staged/extracted package check. */
|
|
10
|
+
export async function loadPokiPlaytest(file, cwd) {
|
|
11
|
+
if (file === undefined)
|
|
12
|
+
return undefined;
|
|
13
|
+
const resolved = path.resolve(cwd, file);
|
|
14
|
+
if (path.extname(resolved) !== '.mjs' || !fs.statSync(resolved, { throwIfNoEntry: false })?.isFile()) {
|
|
15
|
+
throw new CliError('--poki-playtest must name an existing .mjs file exporting a default async function.', 4);
|
|
16
|
+
}
|
|
17
|
+
const sha256 = playtestHash(resolved);
|
|
18
|
+
let loaded;
|
|
19
|
+
try {
|
|
20
|
+
loaded = await import(`${pathToFileURL(resolved).href}?sha256=${sha256}`);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new CliError(`Cannot load Poki playtest ${resolved}: ${error instanceof Error ? error.message : String(error)}`, 4);
|
|
24
|
+
}
|
|
25
|
+
const run = loaded.default;
|
|
26
|
+
if (typeof run !== 'function')
|
|
27
|
+
throw new CliError('The Poki playtest must export a default async function receiving { frame, platform }.', 4);
|
|
28
|
+
return { file: resolved, sha256, run: async (context) => { await run(context); } };
|
|
29
|
+
}
|
|
30
|
+
/** A stalled selector must not hang an export. Closing the browser cancels outstanding actions. */
|
|
31
|
+
export async function runPokiPlaytest(playtest, context, timeoutMs = 30_000) {
|
|
32
|
+
let timer;
|
|
33
|
+
try {
|
|
34
|
+
await Promise.race([
|
|
35
|
+
Promise.resolve().then(() => playtest.run(context)),
|
|
36
|
+
new Promise((_, reject) => {
|
|
37
|
+
timer = setTimeout(() => reject(new Error(`Poki playtest timed out after ${timeoutMs} ms: ${playtest.file}`)), timeoutMs);
|
|
38
|
+
}),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=playtest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playtest.js","sourceRoot":"","sources":["../../src/poki/playtest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAaxC,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAwB,EAAE,GAAW;IAC1E,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QACrG,MAAM,IAAI,QAAQ,CAAC,qFAAqF,EAAE,CAAC,CAAC,CAAC;IAC/G,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAA6B,CAAC;IAClC,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,WAAW,MAAM,EAAE,CAA0B,CAAC;IAAC,CAAC;IAC3G,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,IAAI,QAAQ,CAAC,6BAA6B,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;IAC5I,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;IAC3B,IAAI,OAAO,GAAG,KAAK,UAAU;QAAE,MAAM,IAAI,QAAQ,CAAC,uFAAuF,EAAE,CAAC,CAAC,CAAC;IAC9I,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAsB,EAAE,OAA4B,EAAE,SAAS,GAAG,MAAM;IAC5G,IAAI,KAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,SAAS,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC5H,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;AACpC,CAAC"}
|
package/dist/poki/publish.d.ts
CHANGED
package/dist/poki/publish.js
CHANGED
|
@@ -11,11 +11,17 @@ import { buildBundlePaths, readBuildManifest, runBuild, VITE_PUBLISH_STANDALONE_
|
|
|
11
11
|
import { checkVerifyGate } from '../publish/meta-block.js';
|
|
12
12
|
import { readVerifyRecord } from '../verify/result.js';
|
|
13
13
|
import { collectUrls, readCompiledGameCode } from '../package/collect-urls.js';
|
|
14
|
-
import { isStaticAsset, packageAssets,
|
|
14
|
+
import { isStaticAsset, packageAssets, pokiBasePath, scanAssetUrls, scanHtmlAssets } from './assets.js';
|
|
15
15
|
import { transformPokiHtml } from './transform.js';
|
|
16
|
+
import { loadPokiPlaytest, playtestHash } from './playtest.js';
|
|
17
|
+
import { findPokiServiceRisks, readPokiSources } from './source-diagnostics.js';
|
|
18
|
+
import { renderPokiHandoff } from './handoff.js';
|
|
19
|
+
import { currentCliVersion } from '../update/cli-version.js';
|
|
16
20
|
function defaultDeps() {
|
|
17
21
|
return {
|
|
18
|
-
fetch: globalThis.fetch,
|
|
22
|
+
fetch: globalThis.fetch,
|
|
23
|
+
build: runBuild,
|
|
24
|
+
collect: collectUrls,
|
|
19
25
|
check: async (options) => (await import('./check.js')).runPokiCheck(options),
|
|
20
26
|
};
|
|
21
27
|
}
|
|
@@ -36,27 +42,38 @@ export function requirePokiCapability(root) {
|
|
|
36
42
|
throw new CliError('The engine Poki export capability is incompatible. Run `bitmagic self-update` and `bitmagic upgrade`.', 4);
|
|
37
43
|
}
|
|
38
44
|
}
|
|
45
|
+
/** Project inputs, build outputs and managed artifacts a `--output` path must never land in. */
|
|
46
|
+
const PROTECTED_DIRS = /^(src|engine|node_modules|dist|\.git|\.agents|\.claude|\.kiro)(\/|$)/;
|
|
47
|
+
const DEFAULT_ZIP_RELATIVE = '.bitmagic/poki/poki.zip';
|
|
48
|
+
function escapesIntoProjectInputs(root, target) {
|
|
49
|
+
const relative = path.relative(root, target).split(path.sep).join('/');
|
|
50
|
+
return PROTECTED_DIRS.test(relative)
|
|
51
|
+
|| (relative.startsWith('.bitmagic/') && relative !== DEFAULT_ZIP_RELATIVE);
|
|
52
|
+
}
|
|
39
53
|
export function pokiOutputPath(root, output, cwd) {
|
|
40
|
-
const result = output === undefined
|
|
54
|
+
const result = output === undefined
|
|
55
|
+
? path.join(root, ...DEFAULT_ZIP_RELATIVE.split('/'))
|
|
56
|
+
: path.resolve(cwd, output);
|
|
41
57
|
if (path.extname(result).toLowerCase() !== '.zip')
|
|
42
58
|
throw new CliError('--output must name a .zip file.');
|
|
43
|
-
|
|
44
|
-
if (/^(src|engine|node_modules|dist|\.git|\.agents|\.claude|\.kiro)(\/|$)/.test(relative)
|
|
45
|
-
|| (relative.startsWith('.bitmagic/') && relative !== '.bitmagic/poki/poki.zip')) {
|
|
59
|
+
if (escapesIntoProjectInputs(root, result)) {
|
|
46
60
|
throw new CliError('--output must not overwrite project inputs, build files, or managed artifacts. Use a release directory.');
|
|
47
61
|
}
|
|
48
62
|
// Resolve symlinked parents too: a release directory must not be an alias for src/ or engine/.
|
|
49
63
|
let ancestor = path.dirname(result);
|
|
50
64
|
while (!fs.existsSync(ancestor))
|
|
51
65
|
ancestor = path.dirname(ancestor);
|
|
52
|
-
const
|
|
53
|
-
if (
|
|
54
|
-
|| (actualRelative.startsWith('.bitmagic/') && actualRelative !== '.bitmagic/poki/poki.zip')
|
|
66
|
+
const actual = path.join(fs.realpathSync(ancestor), path.relative(ancestor, result));
|
|
67
|
+
if (escapesIntoProjectInputs(fs.realpathSync(root), actual)
|
|
55
68
|
|| (fs.existsSync(result) && fs.lstatSync(result).isSymbolicLink())) {
|
|
56
69
|
throw new CliError('--output must not use a symlinked file or parent directory.');
|
|
57
70
|
}
|
|
58
71
|
return result;
|
|
59
72
|
}
|
|
73
|
+
/** Both checks run on both platforms; Poki serves the same ZIP to desktop and phone. */
|
|
74
|
+
const PLATFORMS = ['desktop', 'mobile'];
|
|
75
|
+
/** Each pass packages what the last one requested, so a short chain of them converges. */
|
|
76
|
+
const MAX_DISCOVERY_PASSES = 3;
|
|
60
77
|
function payloadEntries(dir, prefix = '') {
|
|
61
78
|
const entries = {};
|
|
62
79
|
for (const entry of fs.readdirSync(path.join(dir, prefix), { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
|
|
@@ -86,6 +103,20 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
|
|
|
86
103
|
const gate = checkVerifyGate(readVerifyRecord(path.join(root, '.bitmagic', 'verify')), fingerprint, args.force === true);
|
|
87
104
|
if (!gate.ok)
|
|
88
105
|
throw new CliError(gate.message, 3);
|
|
106
|
+
const playtest = await loadPokiPlaytest(args['poki-playtest'], deps.startDir ?? process.cwd());
|
|
107
|
+
if (playtest) {
|
|
108
|
+
const relative = path.relative(path.join(fs.realpathSync(root), '.bitmagic/poki'), fs.realpathSync(playtest.file));
|
|
109
|
+
if (relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative))) {
|
|
110
|
+
throw new CliError('Keep --poki-playtest outside .bitmagic/poki: export replaces files in that directory. Use playtest/poki.mjs.', 4);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const serviceRisks = findPokiServiceRisks(readPokiSources(root));
|
|
114
|
+
const warnings = serviceRisks.map((risk) => `${risk.file}: ${risk.api}() may require an external service. Exercise this flow in --poki-playtest and review it in Poki Inspector.`);
|
|
115
|
+
if (!playtest)
|
|
116
|
+
warnings.push('No game-specific playtest supplied: custom menus, chapters, score submission, and later levels may be untested. Use --poki-playtest to extend validation.');
|
|
117
|
+
const announcedWarnings = new Set(warnings);
|
|
118
|
+
for (const warning of warnings)
|
|
119
|
+
output.info(`warning: ${warning}`);
|
|
89
120
|
const paths = buildBundlePaths(root);
|
|
90
121
|
const manifest = readBuildManifest(root);
|
|
91
122
|
if (manifest?.fingerprint !== fingerprint || !manifest.singleFile || !fs.existsSync(paths.htmlPath)
|
|
@@ -101,7 +132,6 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
|
|
|
101
132
|
const checksDir = path.join(dir, 'checks', path.basename(stage));
|
|
102
133
|
const cacheDir = path.join(dir, 'cache');
|
|
103
134
|
fs.mkdirSync(payload);
|
|
104
|
-
const warnings = [];
|
|
105
135
|
try {
|
|
106
136
|
const collected = await deps.collect(root);
|
|
107
137
|
for (const note of collected.notes) {
|
|
@@ -116,9 +146,9 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
|
|
|
116
146
|
const assetMap = await packageAssets({ urls, payloadDir: payload, cacheDir, fetch: deps.fetch, log: output.info });
|
|
117
147
|
const bases = new Map();
|
|
118
148
|
for (const base of collected.bases) {
|
|
119
|
-
const mapped =
|
|
149
|
+
const mapped = pokiBasePath(base);
|
|
120
150
|
if (mapped !== null)
|
|
121
|
-
bases.set(base, mapped
|
|
151
|
+
bases.set(base, mapped);
|
|
122
152
|
}
|
|
123
153
|
const writePayload = () => {
|
|
124
154
|
fs.writeFileSync(path.join(payload, 'index.html'), transformPokiHtml({
|
|
@@ -127,12 +157,12 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
|
|
|
127
157
|
};
|
|
128
158
|
const orientation = readPlatformDeclaration(root).mobileOrientation;
|
|
129
159
|
writePayload();
|
|
130
|
-
for (const platform of
|
|
131
|
-
for (let pass = 0; pass <
|
|
160
|
+
for (const platform of PLATFORMS) {
|
|
161
|
+
for (let pass = 0; pass < MAX_DISCOVERY_PASSES; pass++) {
|
|
132
162
|
output.info(`Discovering ${platform} runtime assets (pass ${pass + 1})…`);
|
|
133
163
|
const artifactDir = path.join(checksDir, `record-${platform}-${pass}`);
|
|
134
|
-
const check = await deps.check({ root, payloadDir: payload, artifactDir, mode: 'record', platform, orientation, log: output.info });
|
|
135
|
-
const unsupported = check.misses.filter((url) => !isStaticAsset(url));
|
|
164
|
+
const check = await deps.check({ root, payloadDir: payload, artifactDir, mode: 'record', platform, orientation, playtest, log: output.info });
|
|
165
|
+
const unsupported = check.nonAssetRequests ?? check.misses.filter((url) => !isStaticAsset(url));
|
|
136
166
|
if (unsupported.length > 0) {
|
|
137
167
|
throw new CliError(`This game requires external services that the Poki package cannot include:\n${unsupported.join('\n')}\nDiagnostics: ${artifactDir}`, 7);
|
|
138
168
|
}
|
|
@@ -140,7 +170,7 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
|
|
|
140
170
|
assertPackagedCheck(check, artifactDir);
|
|
141
171
|
break;
|
|
142
172
|
}
|
|
143
|
-
if (pass ===
|
|
173
|
+
if (pass === MAX_DISCOVERY_PASSES - 1)
|
|
144
174
|
throw new CliError(`Runtime assets are still missing. See ${artifactDir}.`, 7);
|
|
145
175
|
for (const [url, rel] of await packageAssets({ urls: check.misses, payloadDir: payload, cacheDir, fetch: deps.fetch, log: output.info })) {
|
|
146
176
|
assetMap.set(url, rel);
|
|
@@ -159,11 +189,11 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
|
|
|
159
189
|
fs.writeFileSync(file, bytes);
|
|
160
190
|
}
|
|
161
191
|
const validation = [];
|
|
162
|
-
for (const platform of
|
|
192
|
+
for (const platform of PLATFORMS) {
|
|
163
193
|
for (const nested of [false, true]) {
|
|
164
194
|
output.info(`Validating the ZIP on ${platform} (${nested ? 'nested' : 'root'} path)…`);
|
|
165
195
|
const artifactDir = path.join(checksDir, `restricted-${platform}-${nested ? 'nested' : 'root'}`);
|
|
166
|
-
const check = await deps.check({ root, payloadDir: extracted, artifactDir, mode: 'restricted', platform, orientation, nested, log: output.info });
|
|
196
|
+
const check = await deps.check({ root, payloadDir: extracted, artifactDir, mode: 'restricted', platform, orientation, nested, playtest, log: output.info });
|
|
167
197
|
assertPackagedCheck(check, artifactDir);
|
|
168
198
|
warnings.push(...check.result.warnings);
|
|
169
199
|
validation.push({ platform, nested, sdkEvents: check.sdkEvents });
|
|
@@ -171,17 +201,24 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
|
|
|
171
201
|
}
|
|
172
202
|
if (computeFingerprint(root) !== fingerprint)
|
|
173
203
|
throw new CliError('The project changed during export. Run `bitmagic verify` and export again.', 3);
|
|
204
|
+
if (playtest && playtestHash(playtest.file) !== playtest.sha256)
|
|
205
|
+
throw new CliError('The Poki playtest changed during export. Export again with the finished playtest.', 3);
|
|
174
206
|
const sizes = Object.entries(entries).map(([file, bytes]) => ({ file, bytes: bytes.byteLength, sha256: createHash('sha256').update(bytes).digest('hex') }));
|
|
175
207
|
const payloadDir = path.join(dir, 'payload');
|
|
176
208
|
const manifestPath = path.join(dir, 'manifest.json');
|
|
209
|
+
const handoffPath = path.join(dir, 'EXPORT-HANDOFF.md');
|
|
177
210
|
const result = {
|
|
178
211
|
ok: true, target: 'poki', packageFormatVersion: 1, zipPath, payloadDir, manifestPath, checksDir,
|
|
212
|
+
status: 'exported', uploaded: false, handoffPath, cliVersion: currentCliVersion(),
|
|
179
213
|
fingerprint, engineVersion: metadata.engineVersion, sha256: createHash('sha256').update(zip).digest('hex'),
|
|
180
214
|
zipBytes: zip.byteLength, unpackedBytes: sizes.reduce((total, file) => total + file.bytes, 0),
|
|
181
215
|
assetCount: assetMap.size, validation, sdkValidation: 'stub', inspectorValidated: false,
|
|
216
|
+
validationScope: { mobile: 'emulated', network: 'exercised-paths-only' },
|
|
217
|
+
playtest: playtest ? { file: playtest.file, sha256: playtest.sha256 } : null, serviceRisks,
|
|
182
218
|
warnings: [...new Set(warnings)], files: sizes, builtAt: new Date().toISOString(),
|
|
183
219
|
};
|
|
184
220
|
fs.mkdirSync(path.dirname(zipPath), { recursive: true });
|
|
221
|
+
fs.writeFileSync(path.join(stage, 'EXPORT-HANDOFF.md'), renderPokiHandoff(result));
|
|
185
222
|
const zipTmp = `${zipPath}.tmp-${process.pid}`;
|
|
186
223
|
try {
|
|
187
224
|
fs.writeFileSync(zipTmp, zip);
|
|
@@ -194,9 +231,12 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
|
|
|
194
231
|
fs.renameSync(payload, payloadDir);
|
|
195
232
|
fs.writeFileSync(path.join(stage, 'manifest.json'), JSON.stringify(result, null, 2) + '\n');
|
|
196
233
|
fs.renameSync(path.join(stage, 'manifest.json'), manifestPath);
|
|
234
|
+
fs.renameSync(path.join(stage, 'EXPORT-HANDOFF.md'), handoffPath);
|
|
197
235
|
for (const warning of result.warnings)
|
|
198
|
-
|
|
199
|
-
|
|
236
|
+
if (!announcedWarnings.has(warning))
|
|
237
|
+
output.info(`warning: ${warning}`);
|
|
238
|
+
output.info(`Poki export complete; upload pending: ${zipPath} (${result.zipBytes} bytes zipped; ${result.unpackedBytes} bytes unpacked).`);
|
|
239
|
+
output.info(`Upload and QA handoff: ${handoffPath}`);
|
|
200
240
|
output.info('Test the payload folder in https://inspector.poki.dev before submitting to Poki. Local checks use an SDK stub.');
|
|
201
241
|
output.result(result);
|
|
202
242
|
}
|
package/dist/poki/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/poki/publish.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/poki/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface PokiSourceFile {
|
|
2
|
+
file: string;
|
|
3
|
+
text: string;
|
|
4
|
+
}
|
|
5
|
+
export interface PokiServiceRisk {
|
|
6
|
+
file: string;
|
|
7
|
+
api: string;
|
|
8
|
+
}
|
|
9
|
+
/** Only creator-owned sources, never the dormant service implementations shipped in the engine. */
|
|
10
|
+
export declare function readPokiSources(root: string): PokiSourceFile[];
|
|
11
|
+
/** A conservative hint, not a reachability analysis or proof of online activity. */
|
|
12
|
+
export declare function findPokiServiceRisks(sources: readonly PokiSourceFile[]): PokiServiceRisk[];
|
|
13
|
+
/** Literal matches help locate a missing optional fetch without pretending to be a stack trace. */
|
|
14
|
+
export declare function requestSourceFiles(sources: readonly PokiSourceFile[], url: string): string[];
|