@bitmagic/cli 0.1.61-dev.0 → 0.1.61-dev.1

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 (119) hide show
  1. package/README.md +47 -8
  2. package/assets/fonts/NotoSans-Bold.ttf +0 -0
  3. package/assets/fonts/OFL.txt +94 -0
  4. package/dist/chrome-launch.d.ts +18 -0
  5. package/dist/chrome-launch.js +24 -0
  6. package/dist/chrome-launch.js.map +1 -0
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.js +2 -0
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/generate.d.ts +44 -0
  11. package/dist/commands/generate.js +143 -0
  12. package/dist/commands/generate.js.map +1 -1
  13. package/dist/commands/trailer-publish.d.ts +15 -0
  14. package/dist/commands/trailer-publish.js +45 -0
  15. package/dist/commands/trailer-publish.js.map +1 -0
  16. package/dist/commands/trailer.d.ts +3 -0
  17. package/dist/commands/trailer.js +396 -0
  18. package/dist/commands/trailer.js.map +1 -0
  19. package/dist/editor/hud-replay-page.d.ts +7 -0
  20. package/dist/editor/hud-replay-page.js +219 -0
  21. package/dist/editor/hud-replay-page.js.map +1 -0
  22. package/dist/editor/recording-panel.d.ts +3 -1
  23. package/dist/editor/recording-panel.js +6 -2
  24. package/dist/editor/recording-panel.js.map +1 -1
  25. package/dist/editor/recording-sink.d.ts +3 -20
  26. package/dist/editor/recording-sink.js +14 -35
  27. package/dist/editor/recording-sink.js.map +1 -1
  28. package/dist/editor/server.js +15 -18
  29. package/dist/editor/server.js.map +1 -1
  30. package/dist/editor/shell-page.d.ts +0 -8
  31. package/dist/editor/shell-page.js +23 -19
  32. package/dist/editor/shell-page.js.map +1 -1
  33. package/dist/generate/music.d.ts +51 -0
  34. package/dist/generate/music.js +93 -0
  35. package/dist/generate/music.js.map +1 -0
  36. package/dist/generate/stream.d.ts +13 -0
  37. package/dist/generate/stream.js +17 -1
  38. package/dist/generate/stream.js.map +1 -1
  39. package/dist/project/jobs.d.ts +1 -1
  40. package/dist/scaffold/project-files.d.ts +0 -1
  41. package/dist/scaffold/project-files.js +6 -33
  42. package/dist/scaffold/project-files.js.map +1 -1
  43. package/dist/scaffold/project.js +3 -1
  44. package/dist/scaffold/project.js.map +1 -1
  45. package/dist/scaffold/skill-files.d.ts +22 -0
  46. package/dist/scaffold/skill-files.js +198 -0
  47. package/dist/scaffold/skill-files.js.map +1 -0
  48. package/dist/trailer/analyze.d.ts +23 -0
  49. package/dist/trailer/analyze.js +186 -0
  50. package/dist/trailer/analyze.js.map +1 -0
  51. package/dist/trailer/auto-edl.d.ts +46 -0
  52. package/dist/trailer/auto-edl.js +143 -0
  53. package/dist/trailer/auto-edl.js.map +1 -0
  54. package/dist/trailer/beat-cut.d.ts +57 -0
  55. package/dist/trailer/beat-cut.js +232 -0
  56. package/dist/trailer/beat-cut.js.map +1 -0
  57. package/dist/trailer/client.d.ts +52 -0
  58. package/dist/trailer/client.js +133 -0
  59. package/dist/trailer/client.js.map +1 -0
  60. package/dist/trailer/edl-time.d.ts +61 -0
  61. package/dist/trailer/edl-time.js +105 -0
  62. package/dist/trailer/edl-time.js.map +1 -0
  63. package/dist/trailer/ffmpeg.d.ts +8 -0
  64. package/dist/trailer/ffmpeg.js +55 -0
  65. package/dist/trailer/ffmpeg.js.map +1 -0
  66. package/dist/trailer/hud-raster.d.ts +28 -0
  67. package/dist/trailer/hud-raster.js +114 -0
  68. package/dist/trailer/hud-raster.js.map +1 -0
  69. package/dist/trailer/hud-state.d.ts +110 -0
  70. package/dist/trailer/hud-state.js +410 -0
  71. package/dist/trailer/hud-state.js.map +1 -0
  72. package/dist/trailer/io.d.ts +20 -0
  73. package/dist/trailer/io.js +15 -0
  74. package/dist/trailer/io.js.map +1 -0
  75. package/dist/trailer/make.d.ts +54 -0
  76. package/dist/trailer/make.js +205 -0
  77. package/dist/trailer/make.js.map +1 -0
  78. package/dist/trailer/merge.d.ts +7 -0
  79. package/dist/trailer/merge.js +144 -0
  80. package/dist/trailer/merge.js.map +1 -0
  81. package/dist/trailer/music-beats.d.ts +123 -0
  82. package/dist/trailer/music-beats.js +707 -0
  83. package/dist/trailer/music-beats.js.map +1 -0
  84. package/dist/trailer/paths.d.ts +28 -0
  85. package/dist/trailer/paths.js +101 -0
  86. package/dist/trailer/paths.js.map +1 -0
  87. package/dist/trailer/publish-record.d.ts +17 -0
  88. package/dist/trailer/publish-record.js +59 -0
  89. package/dist/trailer/publish-record.js.map +1 -0
  90. package/dist/trailer/publish.d.ts +45 -0
  91. package/dist/trailer/publish.js +149 -0
  92. package/dist/trailer/publish.js.map +1 -0
  93. package/dist/trailer/record-session.d.ts +72 -0
  94. package/dist/trailer/record-session.js +328 -0
  95. package/dist/trailer/record-session.js.map +1 -0
  96. package/dist/trailer/render.d.ts +57 -0
  97. package/dist/trailer/render.js +475 -0
  98. package/dist/trailer/render.js.map +1 -0
  99. package/dist/trailer/revision.d.ts +8 -0
  100. package/dist/trailer/revision.js +31 -0
  101. package/dist/trailer/revision.js.map +1 -0
  102. package/dist/trailer/synth.d.ts +9 -0
  103. package/dist/trailer/synth.js +120 -0
  104. package/dist/trailer/synth.js.map +1 -0
  105. package/dist/trailer/timeline-types.d.ts +176 -0
  106. package/dist/trailer/timeline-types.js +379 -0
  107. package/dist/trailer/timeline-types.js.map +1 -0
  108. package/dist/trailer/title-raster.d.ts +6 -0
  109. package/dist/trailer/title-raster.js +47 -0
  110. package/dist/trailer/title-raster.js.map +1 -0
  111. package/dist/trailer/titles.d.ts +44 -0
  112. package/dist/trailer/titles.js +119 -0
  113. package/dist/trailer/titles.js.map +1 -0
  114. package/dist/trailer/video-chain.d.ts +41 -0
  115. package/dist/trailer/video-chain.js +78 -0
  116. package/dist/trailer/video-chain.js.map +1 -0
  117. package/dist/verify/browser.js +12 -19
  118. package/dist/verify/browser.js.map +1 -1
  119. package/package.json +5 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"music-beats.js","sourceRoot":"","sources":["../../src/trailer/music-beats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export declare const TRAILER_DIR: string;
2
+ export declare const RECORDINGS_DIR: string;
3
+ export declare const SHOTS_FILE: string;
4
+ export declare const TIMELINE_FILE = "timeline.json";
5
+ /** `<root>/.bitmagic/trailer/recordings` — where the dev sink streams F9 recordings. */
6
+ export declare function recordingsDir(root: string): string;
7
+ /** `<root>/.bitmagic/trailer/recordings/<name>` — one recording (frames + timeline.json). */
8
+ export declare function recordingDir(root: string, recordingName: string): string;
9
+ /** `<root>/.bitmagic/trailer/<recordingName>` — the derived artefacts for one recording. */
10
+ export declare function workDir(root: string, recordingName: string): string;
11
+ /** `<root>/trailer/shots.json` — the committed shot list. */
12
+ export declare function shotsPath(root: string): string;
13
+ /** Whether `dir` is a finished recording: it holds a timeline.json (frames alone are not cuttable). */
14
+ export declare function isRecordingDir(dir: string): boolean;
15
+ /**
16
+ * The newest finished recording under `.bitmagic/trailer/recordings/`, by the timeline's mtime —
17
+ * the file written last, when the recording stopped. Null when there is none.
18
+ */
19
+ export declare function newestRecording(root: string): string | null;
20
+ export declare function noRecordingMessage(): string;
21
+ /**
22
+ * The recording a command works on: the `--recording` flag when given (any directory holding a
23
+ * timeline.json — a `~/Downloads` recording from the web lane included), else the newest one the
24
+ * project's own sink wrote.
25
+ */
26
+ export declare function resolveRecording(root: string, flag?: string): string;
27
+ /** A filename-safe slug for the rendered trailer: `My Game!` -> `my-game`. */
28
+ export declare function trailerSlug(name: string): string;
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Where the trailer lane keeps its files inside a project.
3
+ *
4
+ * Two homes, chosen by what the file IS:
5
+ *
6
+ * - `<root>/trailer/shots.json` — the creative decision record: which moments, in what order, how
7
+ * long, with what titles. A few KB, and exactly what a creator wants in git ("git diff is the
8
+ * record", the same argument world.json makes). Every `bitmagic trailer make` re-cuts from it.
9
+ * - `<root>/.bitmagic/trailer/` — everything derived or heavy: the recordings the F9 sink writes
10
+ * (`recordings/<name>/`, thousands of PNGs) and one work dir per recording holding the analysis,
11
+ * contact sheets, beat grid, generated music, the EDL and the rendered MP4s. `.bitmagic/` is
12
+ * gitignored and excluded from the publish fingerprint already, so nothing here can invalidate a
13
+ * verify or bloat a commit.
14
+ *
15
+ * The web lane keeps its recordings in `~/Downloads/` (game-play-agent's sink); every command here
16
+ * takes an explicit recording dir too, so a Downloads recording is just another `--recording`.
17
+ */
18
+ import * as fs from 'fs';
19
+ import * as path from 'path';
20
+ import { CliError } from '../errors.js';
21
+ export const TRAILER_DIR = path.join('.bitmagic', 'trailer');
22
+ export const RECORDINGS_DIR = path.join(TRAILER_DIR, 'recordings');
23
+ export const SHOTS_FILE = path.join('trailer', 'shots.json');
24
+ export const TIMELINE_FILE = 'timeline.json';
25
+ /** `<root>/.bitmagic/trailer/recordings` — where the dev sink streams F9 recordings. */
26
+ export function recordingsDir(root) {
27
+ return path.join(root, RECORDINGS_DIR);
28
+ }
29
+ /** `<root>/.bitmagic/trailer/recordings/<name>` — one recording (frames + timeline.json). */
30
+ export function recordingDir(root, recordingName) {
31
+ return path.join(recordingsDir(root), recordingName);
32
+ }
33
+ /** `<root>/.bitmagic/trailer/<recordingName>` — the derived artefacts for one recording. */
34
+ export function workDir(root, recordingName) {
35
+ return path.join(root, TRAILER_DIR, recordingName);
36
+ }
37
+ /** `<root>/trailer/shots.json` — the committed shot list. */
38
+ export function shotsPath(root) {
39
+ return path.join(root, SHOTS_FILE);
40
+ }
41
+ /** Whether `dir` is a finished recording: it holds a timeline.json (frames alone are not cuttable). */
42
+ export function isRecordingDir(dir) {
43
+ return fs.existsSync(path.join(dir, TIMELINE_FILE));
44
+ }
45
+ /**
46
+ * The newest finished recording under `.bitmagic/trailer/recordings/`, by the timeline's mtime —
47
+ * the file written last, when the recording stopped. Null when there is none.
48
+ */
49
+ export function newestRecording(root) {
50
+ const dir = recordingsDir(root);
51
+ if (!fs.existsSync(dir))
52
+ return null;
53
+ let best = null;
54
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
55
+ if (!entry.isDirectory())
56
+ continue;
57
+ const candidate = path.join(dir, entry.name);
58
+ if (!isRecordingDir(candidate))
59
+ continue;
60
+ const mtime = fs.statSync(path.join(candidate, TIMELINE_FILE)).mtimeMs;
61
+ if (best === null || mtime > best.mtime)
62
+ best = { dir: candidate, mtime };
63
+ }
64
+ return best?.dir ?? null;
65
+ }
66
+ export function noRecordingMessage() {
67
+ return (`No recording under ${RECORDINGS_DIR}/. Record one first: \`bitmagic trailer record --seconds 60\` ` +
68
+ '(with `bitmagic dev` running), or point --recording at a recording directory.');
69
+ }
70
+ /**
71
+ * The recording a command works on: the `--recording` flag when given (any directory holding a
72
+ * timeline.json — a `~/Downloads` recording from the web lane included), else the newest one the
73
+ * project's own sink wrote.
74
+ */
75
+ export function resolveRecording(root, flag) {
76
+ if (flag !== undefined) {
77
+ const resolved = path.resolve(flag);
78
+ if (!fs.existsSync(resolved))
79
+ throw new CliError(`Recording directory not found: ${resolved}`);
80
+ if (!isRecordingDir(resolved)) {
81
+ throw new CliError(`${resolved} has no timeline.json. It is not a finished recording — the trailer tool needs the ` +
82
+ 'timeline the engine writes when a recording stops (re-record if it never arrived).');
83
+ }
84
+ return resolved;
85
+ }
86
+ const newest = newestRecording(root);
87
+ if (newest === null)
88
+ throw new CliError(noRecordingMessage());
89
+ return newest;
90
+ }
91
+ /** A filename-safe slug for the rendered trailer: `My Game!` -> `my-game`. */
92
+ export function trailerSlug(name) {
93
+ const slug = name
94
+ .toLowerCase()
95
+ .normalize('NFKD')
96
+ .replace(/[̀-ͯ]/g, '')
97
+ .replace(/[^a-z0-9]+/g, '-')
98
+ .replace(/^-+|-+$/g, '');
99
+ return slug.length > 0 ? slug : 'game';
100
+ }
101
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/trailer/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare function trailerRecordPath(root: string): string;
2
+ export interface TrailerRecord {
3
+ gameId: string;
4
+ /** The CDN URL of the video, exactly as api-server issued it. */
5
+ url: string;
6
+ contentType: string;
7
+ bytes: number;
8
+ /** ISO 8601. */
9
+ at: string;
10
+ /** Whether it was added to the game page, or uploaded only (`--no-attach`). */
11
+ attached: boolean;
12
+ /** The game page, when it was attached. */
13
+ pageUrl?: string;
14
+ }
15
+ export declare function writeTrailerRecord(root: string, record: TrailerRecord): void;
16
+ /** The last published trailer, or null when there has not been one this reader can trust. */
17
+ export declare function readTrailerRecord(root: string): TrailerRecord | null;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The on-disk record of the last `bitmagic trailer publish`.
3
+ *
4
+ * Its load-bearing job is `url`: the next run hands it to api-server as `replaceUrl`, so
5
+ * re-publishing a re-cut trailer REPLACES the previous one in the game page's gallery instead of
6
+ * stacking a second video beside it. Without this the gallery would fill with every cut a creator
7
+ * ever tried, and hit the twelve-item cap on the thirteenth.
8
+ *
9
+ * Lives at `.bitmagic/trailer/published.json`, under the same `.bitmagic/trailer/` the recordings
10
+ * and work files use. Inside `.bitmagic` means gitignored and excluded from the publish fingerprint.
11
+ *
12
+ * Named publish-record.ts, not record.ts: this directory also holds the RECORDING pipeline, and a
13
+ * `record.ts` here would read as the F9 capture rather than as a note of what was published.
14
+ *
15
+ * Every field is checked on read (the style of `publish/record.ts`): the file outlives CLI versions,
16
+ * and a half-written or older-shaped record must read as "no previous trailer", never as a broken
17
+ * `replaceUrl` sent to the server.
18
+ */
19
+ import * as fs from 'fs';
20
+ import * as path from 'path';
21
+ const TRAILER_RECORD_FILE = path.join('.bitmagic', 'trailer', 'published.json');
22
+ export function trailerRecordPath(root) {
23
+ return path.join(root, TRAILER_RECORD_FILE);
24
+ }
25
+ export function writeTrailerRecord(root, record) {
26
+ fs.mkdirSync(path.dirname(trailerRecordPath(root)), { recursive: true });
27
+ fs.writeFileSync(trailerRecordPath(root), `${JSON.stringify(record, null, 2)}\n`);
28
+ }
29
+ /** The last published trailer, or null when there has not been one this reader can trust. */
30
+ export function readTrailerRecord(root) {
31
+ let parsed;
32
+ try {
33
+ parsed = JSON.parse(fs.readFileSync(trailerRecordPath(root), 'utf-8'));
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ if (typeof parsed !== 'object' || parsed === null)
39
+ return null;
40
+ const record = parsed;
41
+ if (typeof record.gameId !== 'string'
42
+ || typeof record.url !== 'string'
43
+ || typeof record.contentType !== 'string'
44
+ || typeof record.bytes !== 'number'
45
+ || typeof record.at !== 'string'
46
+ || typeof record.attached !== 'boolean') {
47
+ return null;
48
+ }
49
+ return {
50
+ gameId: record.gameId,
51
+ url: record.url,
52
+ contentType: record.contentType,
53
+ bytes: record.bytes,
54
+ at: record.at,
55
+ attached: record.attached,
56
+ ...(typeof record.pageUrl === 'string' ? { pageUrl: record.pageUrl } : {}),
57
+ };
58
+ }
59
+ //# sourceMappingURL=publish-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-record.js","sourceRoot":"","sources":["../../src/trailer/publish-record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAEhF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC9C,CAAC;AAgBD,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAqB;IACpE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,EAAE,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACpF,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,IACE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;WAC9B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;WAC9B,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;WACtC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;WAChC,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;WAC7B,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,EACvC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { Output } from '../output.js';
2
+ /** api-server's gallery video cap (`POST_MEDIA_VIDEO_MAX_BYTES`), checked here before any request. */
3
+ export declare const MAX_TRAILER_BYTES: number;
4
+ export interface TrailerPublishDeps {
5
+ fetch: typeof globalThis.fetch;
6
+ sleep: (ms: number) => Promise<void>;
7
+ /** Injected where the record is stamped; production omits it. */
8
+ now?: () => number;
9
+ /** Test-only override; production omits it and the auth store reads ~/.bitmagic. */
10
+ baseDir?: string;
11
+ }
12
+ export interface TrailerPublishOptions {
13
+ /** The project root (`loadProjectContext().root`). */
14
+ root: string;
15
+ /** The video to upload; relative paths resolve against the current directory. */
16
+ file: string;
17
+ /** Add it to the game page gallery after the upload. */
18
+ attach: boolean;
19
+ output: Output;
20
+ deps?: TrailerPublishDeps;
21
+ }
22
+ export interface TrailerPublishResult {
23
+ publicUrl: string;
24
+ bytes: number;
25
+ contentType: string;
26
+ attached: boolean;
27
+ pageUrl?: string;
28
+ published?: boolean;
29
+ isPublic?: boolean;
30
+ /** The previous trailer this one replaced in the gallery, when there was one. */
31
+ replacedUrl?: string;
32
+ }
33
+ /**
34
+ * Does the file start the way its extension promises? An MP4 (and every ISO-BMFF sibling: .m4v,
35
+ * .mov) carries `ftyp` at byte 4; a WebM is an EBML document and starts `1A 45 DF A3`. A file that
36
+ * fails this was renamed, or is not finished being written — either way the bucket must not get it.
37
+ */
38
+ export declare function looksLikeVideo(bytes: Uint8Array, contentType: string): boolean;
39
+ /** The file's bytes and content type, or the refusal — nothing here touches the network. */
40
+ export declare function readTrailerFile(file: string): {
41
+ bytes: Uint8Array;
42
+ contentType: string;
43
+ resolved: string;
44
+ };
45
+ export declare function runTrailerPublish(options: TrailerPublishOptions): Promise<TrailerPublishResult>;
@@ -0,0 +1,149 @@
1
+ /**
2
+ * `bitmagic trailer publish` — put a finished trailer on the CDN and on the game page.
3
+ *
4
+ * Three steps, each refusable before the next spends anything: check the file HERE (extension,
5
+ * size, and a header sniff so a renamed PNG never reaches the bucket), mint a signed PUT from
6
+ * api-server and upload the bytes, then — unless `--no-attach` — prepend the video to the game
7
+ * page's gallery. The previous trailer's URL, remembered in `.bitmagic/trailer/published.json`,
8
+ * goes along as `replaceUrl`, so a re-cut replaces rather than accumulates.
9
+ *
10
+ * Works on a game that has never been published: the row exists from `bitmagic init`, so the
11
+ * upload is accepted and the item is stored; the page simply is not live yet, and the command says
12
+ * so rather than printing a URL that 404s without explanation.
13
+ *
14
+ * Exposed as a function (not only a command) so `bitmagic trailer make --publish` can hand the
15
+ * fresh render straight to it.
16
+ */
17
+ import * as fs from 'fs';
18
+ import * as path from 'path';
19
+ import { CliError, errnoCode } from '../errors.js';
20
+ import { loadProjectContext } from '../project/context.js';
21
+ import { resolveEnvironmentForCommand, resolveAuth0ClientId } from '../config/environments.js';
22
+ import { getAccessToken } from '../auth/session.js';
23
+ import { putSignedUrl } from '../http/signed-upload.js';
24
+ import { readPublishRecord } from '../publish/record.js';
25
+ import { attachTrailer, mintTrailerUploadUrl } from './client.js';
26
+ import { readTrailerRecord, writeTrailerRecord } from './publish-record.js';
27
+ /** api-server's gallery video cap (`POST_MEDIA_VIDEO_MAX_BYTES`), checked here before any request. */
28
+ export const MAX_TRAILER_BYTES = 200 * 1024 * 1024;
29
+ const CONTENT_TYPES = {
30
+ '.mp4': 'video/mp4',
31
+ '.webm': 'video/webm',
32
+ };
33
+ function defaultDeps() {
34
+ return {
35
+ fetch: globalThis.fetch,
36
+ sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
37
+ };
38
+ }
39
+ /**
40
+ * Does the file start the way its extension promises? An MP4 (and every ISO-BMFF sibling: .m4v,
41
+ * .mov) carries `ftyp` at byte 4; a WebM is an EBML document and starts `1A 45 DF A3`. A file that
42
+ * fails this was renamed, or is not finished being written — either way the bucket must not get it.
43
+ */
44
+ export function looksLikeVideo(bytes, contentType) {
45
+ if (contentType === 'video/mp4') {
46
+ return bytes.length >= 8
47
+ && bytes[4] === 0x66 && bytes[5] === 0x74 && bytes[6] === 0x79 && bytes[7] === 0x70; // 'ftyp'
48
+ }
49
+ if (contentType === 'video/webm') {
50
+ return bytes.length >= 4
51
+ && bytes[0] === 0x1a && bytes[1] === 0x45 && bytes[2] === 0xdf && bytes[3] === 0xa3;
52
+ }
53
+ return false;
54
+ }
55
+ /** The file's bytes and content type, or the refusal — nothing here touches the network. */
56
+ export function readTrailerFile(file) {
57
+ const resolved = path.resolve(file);
58
+ const ext = path.extname(resolved).toLowerCase();
59
+ const contentType = CONTENT_TYPES[ext];
60
+ if (contentType === undefined) {
61
+ throw new CliError(`${file} is not a video this command uploads — a trailer must be an .mp4 or .webm`
62
+ + `${ext ? ` (got ${ext})` : ''}. \`bitmagic trailer make\` renders one.`);
63
+ }
64
+ let stat;
65
+ try {
66
+ stat = fs.statSync(resolved);
67
+ }
68
+ catch (error) {
69
+ if (errnoCode(error) === 'ENOENT') {
70
+ throw new CliError(`No such file: ${resolved}. Render a trailer first: \`bitmagic trailer make\`.`);
71
+ }
72
+ throw error;
73
+ }
74
+ if (!stat.isFile())
75
+ throw new CliError(`${resolved} is not a file.`);
76
+ if (stat.size === 0)
77
+ throw new CliError(`${resolved} is empty.`);
78
+ if (stat.size > MAX_TRAILER_BYTES) {
79
+ const mib = (stat.size / (1024 * 1024)).toFixed(1);
80
+ throw new CliError(`${resolved} is ${mib} MiB; a game page video may be at most ${MAX_TRAILER_BYTES / (1024 * 1024)} MiB. `
81
+ + 'Shorten the trailer or lower the render bitrate and try again.');
82
+ }
83
+ const bytes = new Uint8Array(fs.readFileSync(resolved));
84
+ if (!looksLikeVideo(bytes, contentType)) {
85
+ const expected = contentType === 'video/mp4' ? 'an MP4 (no `ftyp` box at byte 4)' : 'a WebM (no EBML header)';
86
+ throw new CliError(`${resolved} does not look like ${expected}. Was it renamed? Only a real .mp4 or .webm can be uploaded.`);
87
+ }
88
+ return { bytes, contentType, resolved };
89
+ }
90
+ export async function runTrailerPublish(options) {
91
+ const { root, output } = options;
92
+ const deps = options.deps ?? defaultDeps();
93
+ // Every local refusal first, before a token is read or a request made.
94
+ const { bytes, contentType, resolved } = readTrailerFile(options.file);
95
+ const context = loadProjectContext(root);
96
+ const gameId = context.metadata.gameId;
97
+ const environment = resolveEnvironmentForCommand({ cwd: root, baseDir: deps.baseDir });
98
+ const accessToken = await getAccessToken(environment, resolveAuth0ClientId(environment), { fetch: deps.fetch, sleep: deps.sleep, now: deps.now }, deps.baseDir);
99
+ output.info(`Uploading ${path.basename(resolved)} (${(bytes.byteLength / (1024 * 1024)).toFixed(1)} MiB)...`);
100
+ const ticket = await mintTrailerUploadUrl(environment, accessToken, { gameId, contentType, bytes: bytes.byteLength }, deps);
101
+ // Exactly the header the signature bound — no Cache-Control, no encoding: game-media tickets pin
102
+ // only the content type (storage/game-media.ts), and an extra signed-looking header is a GCS 403.
103
+ await putSignedUrl(ticket.uploadUrl, bytes, { 'Content-Type': ticket.contentType }, deps);
104
+ output.info(`Trailer uploaded: ${ticket.publicUrl}`);
105
+ const now = deps.now ?? Date.now;
106
+ const previous = readTrailerRecord(root);
107
+ if (!options.attach) {
108
+ writeTrailerRecord(root, {
109
+ gameId,
110
+ url: ticket.publicUrl,
111
+ contentType,
112
+ bytes: bytes.byteLength,
113
+ at: new Date(now()).toISOString(),
114
+ attached: false,
115
+ });
116
+ output.info('Not attached (--no-attach).');
117
+ return { publicUrl: ticket.publicUrl, bytes: bytes.byteLength, contentType, attached: false };
118
+ }
119
+ // The previous trailer — for THIS game, and only one that was actually put on the page — is what
120
+ // the new one replaces. An upload-only record is not in the gallery, so there is nothing to swap.
121
+ const replaceUrl = previous !== null && previous.gameId === gameId && previous.attached && previous.url !== ticket.publicUrl
122
+ ? previous.url
123
+ : undefined;
124
+ const attached = await attachTrailer(environment, accessToken, { gameId, url: ticket.publicUrl, ...(replaceUrl !== undefined ? { replaceUrl } : {}) }, deps, { manageUrl: readPublishRecord(root)?.manageUrl });
125
+ writeTrailerRecord(root, {
126
+ gameId,
127
+ url: ticket.publicUrl,
128
+ contentType,
129
+ bytes: bytes.byteLength,
130
+ at: new Date(now()).toISOString(),
131
+ attached: true,
132
+ pageUrl: attached.pageUrl,
133
+ });
134
+ output.info(`Attached to the game page: ${attached.pageUrl}`);
135
+ if (!attached.published || !attached.isPublic) {
136
+ output.info('The page goes live on the first `bitmagic publish --visibility public`.');
137
+ }
138
+ return {
139
+ publicUrl: ticket.publicUrl,
140
+ bytes: bytes.byteLength,
141
+ contentType,
142
+ attached: true,
143
+ pageUrl: attached.pageUrl,
144
+ published: attached.published,
145
+ isPublic: attached.isPublic,
146
+ ...(replaceUrl !== undefined ? { replacedUrl: replaceUrl } : {}),
147
+ };
148
+ }
149
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/trailer/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { DevHandle } from '../project/dev-handle.js';
2
+ export interface RecorderCapabilities {
3
+ /** The recorder can stream frames to the host-announced sink at all. */
4
+ sink: boolean;
5
+ /** Start/stop over postMessage, with state reports back. */
6
+ message: boolean;
7
+ /** Camera fly-through over postMessage. */
8
+ flythrough: boolean;
9
+ }
10
+ /** Read straight off `engine/debug/ScreenRecorder.ts`, the vendored recorder source. */
11
+ export declare function recorderCapabilities(root: string): RecorderCapabilities;
12
+ export declare function upgradeMessage(what: string, marker: string): string;
13
+ export declare const NO_DEV_MESSAGE: string;
14
+ export interface FlythroughMarker {
15
+ position: {
16
+ x: number;
17
+ y: number;
18
+ z: number;
19
+ };
20
+ rotation?: {
21
+ x: number;
22
+ y: number;
23
+ z: number;
24
+ };
25
+ lookAt?: {
26
+ x: number;
27
+ y: number;
28
+ z: number;
29
+ };
30
+ timestamp: number;
31
+ }
32
+ export interface FlythroughPath {
33
+ version: 1;
34
+ name?: string;
35
+ markers: FlythroughMarker[];
36
+ }
37
+ export declare const MAX_FLYTHROUGH_SEC = 600;
38
+ /** Validate a fly-through document so a typo is reported here, not as a silent no-op in the engine. */
39
+ export declare function parseFlythrough(raw: unknown, source: string): FlythroughPath;
40
+ export declare function loadFlythrough(file: string): FlythroughPath;
41
+ /** A recording directory that was not there before the session started, or null. */
42
+ export declare function findNewRecording(before: ReadonlySet<string>, dir: string): string | null;
43
+ export declare function listRecordingNames(dir: string): Set<string>;
44
+ export declare function countFrames(dir: string): number;
45
+ export interface RecordOptions {
46
+ root: string;
47
+ handle: DevHandle;
48
+ /** Stop after this many seconds of recording. Absent: until the creator presses F9 (or the fly-through ends). */
49
+ seconds?: number;
50
+ /** `WxH`, one of the shell's RECORDING_RESOLUTIONS. */
51
+ resolution: string;
52
+ flythrough?: FlythroughPath;
53
+ log: (line: string) => void;
54
+ /** How long to wait for timeline.json after the recorder stopped. */
55
+ stopWaitMs?: number;
56
+ /** How long to wait for the creator to press Play. */
57
+ playWaitMs?: number;
58
+ }
59
+ export interface RecordResult {
60
+ name: string;
61
+ dir: string;
62
+ frameCount: number;
63
+ width: number;
64
+ height: number;
65
+ durationSec: number;
66
+ trigger: 'message' | 'f9';
67
+ }
68
+ /**
69
+ * Run one recording session end to end. Throws a CliError when the recording never happened or
70
+ * never finished; returns where it landed otherwise.
71
+ */
72
+ export declare function recordGameplay(options: RecordOptions): Promise<RecordResult>;