@bitmagic/cli 0.1.74 → 0.1.75

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 (46) hide show
  1. package/README.md +26 -0
  2. package/assets/skills/building-ads/SKILL.md +98 -0
  3. package/dist/ads/check.d.ts +31 -0
  4. package/dist/ads/check.js +142 -0
  5. package/dist/ads/check.js.map +1 -0
  6. package/dist/ads/client.d.ts +78 -0
  7. package/dist/ads/client.js +146 -0
  8. package/dist/ads/client.js.map +1 -0
  9. package/dist/ads/paths.d.ts +11 -0
  10. package/dist/ads/paths.js +36 -0
  11. package/dist/ads/paths.js.map +1 -0
  12. package/dist/ads/probe.d.ts +12 -0
  13. package/dist/ads/probe.js +44 -0
  14. package/dist/ads/probe.js.map +1 -0
  15. package/dist/ads/publish.d.ts +31 -0
  16. package/dist/ads/publish.js +108 -0
  17. package/dist/ads/publish.js.map +1 -0
  18. package/dist/ads/record.d.ts +19 -0
  19. package/dist/ads/record.js +53 -0
  20. package/dist/ads/record.js.map +1 -0
  21. package/dist/ads/render-plan.d.ts +57 -0
  22. package/dist/ads/render-plan.js +127 -0
  23. package/dist/ads/render-plan.js.map +1 -0
  24. package/dist/ads/render.d.ts +51 -0
  25. package/dist/ads/render.js +212 -0
  26. package/dist/ads/render.js.map +1 -0
  27. package/dist/cli.d.ts +1 -0
  28. package/dist/cli.js +2 -0
  29. package/dist/cli.js.map +1 -1
  30. package/dist/commands/ads.d.ts +5 -0
  31. package/dist/commands/ads.js +240 -0
  32. package/dist/commands/ads.js.map +1 -0
  33. package/dist/event/launch.d.ts +2 -2
  34. package/dist/event/launch.js +2 -2
  35. package/dist/event/launch.js.map +1 -1
  36. package/dist/event/preflight.js +2 -2
  37. package/dist/event/preflight.js.map +1 -1
  38. package/dist/scaffold/ads-skill-files.d.ts +2 -0
  39. package/dist/scaffold/ads-skill-files.js +7 -0
  40. package/dist/scaffold/ads-skill-files.js.map +1 -0
  41. package/dist/scaffold/project-files.js +1 -1
  42. package/dist/scaffold/project.js +2 -0
  43. package/dist/scaffold/project.js.map +1 -1
  44. package/dist/scaffold/skill-files.js +2 -1
  45. package/dist/scaffold/skill-files.js.map +1 -1
  46. package/package.json +4 -4
@@ -0,0 +1,212 @@
1
+ /**
2
+ * `bitmagic ads render` — the media of an ad package, from the game's trailer.
3
+ *
4
+ * Writes the three videos and three stills the shared spec asks for into `.bitmagic/ads/`:
5
+ *
6
+ * - videos (16:9, 9:16, 1:1): one segment of the source — by default the newest
7
+ * `bitmagic trailer` render, with its own end card trimmed off — fitted to each frame
8
+ * (render-plan.ts), with an end card naming the game and what to do next faded in at the end;
9
+ * - stills (1.91:1, 1:1, 4:5): from the cover (`.bitmagic/cover.webp`) when there is one, else
10
+ * a frame of the source. No text on them: Google sets the headline beside an image itself.
11
+ *
12
+ * A portrait source (`--portrait`, e.g. a trailer recorded at 1080x1920) replaces blur-fill for the
13
+ * 9:16 video, which is what a phone feed shows best. When there is no copy yet, an empty `ads.json`
14
+ * is written for the agent to fill in.
15
+ */
16
+ import * as fs from 'fs';
17
+ import * as path from 'path';
18
+ import { AD_COPY_RULES, AD_IMAGE_SLOTS, AD_IMAGE_SLOT_NAMES, AD_VIDEO_SECONDS, AD_VIDEO_SLOTS, AD_VIDEO_SLOT_NAMES, } from '@bitmagic/asset-core/ad-package';
19
+ import { END_CARD_SEC, ensureFfmpeg, loadEdl, runFfmpeg, TRAILER_DIR } from '@bitmagic/asset-core/trailer';
20
+ import { CliError } from '../errors.js';
21
+ import { rasterizeTitles } from '../trailer/title-raster.js';
22
+ import { gameNameFor } from '../trailer/game-name.js';
23
+ import { adCopyPath, adImagePath, adsDir, adVideoPath, adWorkDir } from './paths.js';
24
+ import { probeMedia } from './probe.js';
25
+ import { COVER_MAX_CROP_LOSS, VIDEO_MAX_CROP_LOSS, chooseSegment, stillArgs, videoArgs, } from './render-plan.js';
26
+ /** The end card's second line unless `--cta` says otherwise. True of every game on bitmagic.ai. */
27
+ export const DEFAULT_CTA = 'Play now in your browser';
28
+ /** A trailer render is an MP4 with the EDL sidecar `bitmagic trailer render` writes beside it. */
29
+ function isTrailerRender(file) {
30
+ return file.toLowerCase().endsWith('.mp4') && fs.existsSync(`${file}.edl.json`);
31
+ }
32
+ /** The newest `bitmagic trailer` render under `.bitmagic/trailer/`, or null. */
33
+ export function newestTrailerRender(root) {
34
+ const dir = path.join(root, TRAILER_DIR);
35
+ if (!fs.existsSync(dir))
36
+ return null;
37
+ let best = null;
38
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
39
+ if (!entry.isDirectory() || entry.name === 'recordings')
40
+ continue;
41
+ const work = path.join(dir, entry.name);
42
+ for (const name of fs.readdirSync(work)) {
43
+ const file = path.join(work, name);
44
+ if (!isTrailerRender(file))
45
+ continue;
46
+ const mtime = fs.statSync(file).mtimeMs;
47
+ if (best === null || mtime > best.mtime)
48
+ best = { file, mtime };
49
+ }
50
+ }
51
+ return best?.file ?? null;
52
+ }
53
+ /**
54
+ * Where the usable footage ends: where a trailer render's own end card begins (read from its EDL
55
+ * sidecar), else the end of the file. The ad draws its own end card at every size.
56
+ */
57
+ export function usableEnd(file, durationSec) {
58
+ if (!isTrailerRender(file))
59
+ return durationSec;
60
+ try {
61
+ const cards = (loadEdl(`${file}.edl.json`).titles ?? []).filter((cue) => cue.style === 'card');
62
+ if (cards.length === 0)
63
+ return durationSec;
64
+ return Math.min(durationSec, ...cards.map((cue) => cue.at));
65
+ }
66
+ catch {
67
+ return durationSec;
68
+ }
69
+ }
70
+ function existingFile(file, what) {
71
+ const resolved = path.resolve(file);
72
+ if (!fs.existsSync(resolved) || !fs.statSync(resolved).isFile())
73
+ throw new CliError(`No such ${what}: ${resolved}`);
74
+ return resolved;
75
+ }
76
+ /** The copy file an agent fills in: every field present, every line empty, so `check` lists them. */
77
+ export function emptyCopy() {
78
+ return {
79
+ headlines: Array.from({ length: 3 }, () => ''),
80
+ longHeadlines: Array.from({ length: AD_COPY_RULES.longHeadlines.min }, () => ''),
81
+ descriptions: Array.from({ length: 2 }, () => ''),
82
+ };
83
+ }
84
+ async function renderEndCards(root, gameName, cta, output) {
85
+ const cue = { at: 0, dur: END_CARD_SEC, text: gameName, sub: cta, style: 'card' };
86
+ const cards = {};
87
+ for (const slot of AD_VIDEO_SLOT_NAMES) {
88
+ const { width, height } = AD_VIDEO_SLOTS[slot];
89
+ const outDir = path.join(adWorkDir(root), `card-${slot}`);
90
+ const pngs = await rasterizeTitles([cue], width, height, outDir, undefined);
91
+ if (pngs === null || pngs.length === 0) {
92
+ output.info('Chrome could not draw the end card — rendering the videos without one.');
93
+ return {};
94
+ }
95
+ cards[slot] = pngs[0];
96
+ }
97
+ return cards;
98
+ }
99
+ async function rendered(file) {
100
+ const probe = await probeMedia(file);
101
+ return { file, width: probe.width, height: probe.height, durationSec: probe.durationSec, bytes: fs.statSync(file).size };
102
+ }
103
+ /** Write to a temporary name and move into place, so a failed render never leaves half a file. */
104
+ async function ffmpegInto(out, args) {
105
+ const ext = path.extname(out);
106
+ const temp = `${out.slice(0, -ext.length)}.partial${ext}`;
107
+ try {
108
+ await runFfmpeg(args(temp));
109
+ fs.renameSync(temp, out);
110
+ }
111
+ finally {
112
+ fs.rmSync(temp, { force: true });
113
+ }
114
+ }
115
+ export async function runAdsRender(options) {
116
+ const { root, output } = options;
117
+ ensureFfmpeg(['ffmpeg', 'ffprobe']);
118
+ const source = options.video !== undefined ? existingFile(options.video, 'video') : newestTrailerRender(root);
119
+ if (source === null) {
120
+ throw new CliError('No trailer to cut the ads from. Make one first — `bitmagic trailer record` then `bitmagic trailer make` — '
121
+ + 'or pass --video <file>.');
122
+ }
123
+ const main = await probeMedia(source);
124
+ const seconds = options.seconds ?? AD_VIDEO_SECONDS.recommended;
125
+ const start = options.start ?? 0;
126
+ const segment = chooseSegment(usableEnd(source, main.durationSec), start, seconds);
127
+ if (segment === null) {
128
+ throw new CliError(`${path.basename(source)} has ${Math.max(0, usableEnd(source, main.durationSec) - start).toFixed(1)}s of footage from `
129
+ + `${start}s on; an ad runs ${AD_VIDEO_SECONDS.min}–${AD_VIDEO_SECONDS.max}s. Use a longer trailer, or a smaller --start.`);
130
+ }
131
+ let portrait;
132
+ if (options.portrait !== undefined) {
133
+ const file = existingFile(options.portrait, 'portrait video');
134
+ const probe = await probeMedia(file);
135
+ if (probe.width >= probe.height) {
136
+ throw new CliError(`${path.basename(file)} is ${probe.width}×${probe.height}; --portrait takes a portrait (9:16) video.`);
137
+ }
138
+ const portraitSegment = chooseSegment(usableEnd(file, probe.durationSec), 0, segment.durationSec);
139
+ if (portraitSegment === null) {
140
+ throw new CliError(`${path.basename(file)} is shorter than ${AD_VIDEO_SECONDS.min}s once its end card is trimmed.`);
141
+ }
142
+ portrait = { file, probe, segment: portraitSegment };
143
+ }
144
+ fs.mkdirSync(adsDir(root), { recursive: true });
145
+ fs.rmSync(adWorkDir(root), { recursive: true, force: true });
146
+ fs.mkdirSync(adWorkDir(root), { recursive: true });
147
+ try {
148
+ const gameName = gameNameFor(root);
149
+ const cards = options.endCard ? await renderEndCards(root, gameName, options.cta ?? DEFAULT_CTA, output) : {};
150
+ const videos = {};
151
+ for (const slot of AD_VIDEO_SLOT_NAMES) {
152
+ const { width, height, label } = AD_VIDEO_SLOTS[slot];
153
+ const own = slot === 'portrait' && portrait !== undefined ? portrait : { file: source, probe: main, segment };
154
+ const out = adVideoPath(root, slot);
155
+ output.info(`Rendering the ${label} video (${width}×${height}, ${own.segment.durationSec.toFixed(1)}s)...`);
156
+ await ffmpegInto(out, (target) => videoArgs({
157
+ source: own.file,
158
+ sourceWidth: own.probe.width,
159
+ sourceHeight: own.probe.height,
160
+ sourceHasAudio: own.probe.hasAudio,
161
+ segment: own.segment,
162
+ width,
163
+ height,
164
+ ...(cards[slot] !== undefined ? { endCardPng: cards[slot] } : {}),
165
+ endCardSec: END_CARD_SEC,
166
+ out: target,
167
+ }));
168
+ videos[slot] = await rendered(out);
169
+ }
170
+ const cover = path.join(root, '.bitmagic', 'cover.webp');
171
+ const stillSource = options.image !== undefined ? existingFile(options.image, 'image') : fs.existsSync(cover) ? cover : source;
172
+ const fromVideo = stillSource === source;
173
+ const still = fromVideo ? main : await probeMedia(stillSource);
174
+ const images = {};
175
+ for (const slot of AD_IMAGE_SLOT_NAMES) {
176
+ const { width, height, label } = AD_IMAGE_SLOTS[slot];
177
+ const out = adImagePath(root, slot);
178
+ output.info(`Rendering the ${label} image (${width}×${height})...`);
179
+ await ffmpegInto(out, (target) => stillArgs({
180
+ source: stillSource,
181
+ sourceWidth: still.width,
182
+ sourceHeight: still.height,
183
+ // A frame two fifths in: past any fade-in, well before the end.
184
+ ...(fromVideo ? { atSec: segment.startSec + segment.durationSec * 0.4 } : {}),
185
+ maxCropLoss: fromVideo ? VIDEO_MAX_CROP_LOSS : COVER_MAX_CROP_LOSS,
186
+ width,
187
+ height,
188
+ out: target,
189
+ }));
190
+ images[slot] = await rendered(out);
191
+ }
192
+ let copyTemplateWritten = false;
193
+ if (!fs.existsSync(adCopyPath(root))) {
194
+ fs.writeFileSync(adCopyPath(root), `${JSON.stringify(emptyCopy(), null, 2)}\n`);
195
+ copyTemplateWritten = true;
196
+ }
197
+ return {
198
+ source,
199
+ ...(portrait !== undefined ? { portraitSource: portrait.file } : {}),
200
+ stillSource,
201
+ segment,
202
+ videos,
203
+ images,
204
+ endCard: Object.keys(cards).length > 0,
205
+ copyTemplateWritten,
206
+ };
207
+ }
208
+ finally {
209
+ fs.rmSync(adWorkDir(root), { recursive: true, force: true });
210
+ }
211
+ }
212
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ads/render.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -413,6 +413,7 @@ declare const rawCommands: {
413
413
  };
414
414
  }>;
415
415
  trailer: CommandDef<ArgsDef>;
416
+ ads: CommandDef<ArgsDef>;
416
417
  reference: CommandDef<ArgsDef>;
417
418
  judge: CommandDef<{
418
419
  readonly genre: {
package/dist/cli.js CHANGED
@@ -29,6 +29,7 @@ import { levelsCommand } from './commands/levels.js';
29
29
  import { themeCommand } from './commands/theme.js';
30
30
  import { coverCommand } from './commands/cover.js';
31
31
  import { trailerCommand } from './commands/trailer.js';
32
+ import { adsCommand } from './commands/ads.js';
32
33
  import { referenceCommand } from './commands/reference.js';
33
34
  import { judgeCommand } from './commands/judge.js';
34
35
  import { forgeCommand } from './commands/forge.js';
@@ -224,6 +225,7 @@ const rawCommands = {
224
225
  theme: themeCommand,
225
226
  cover: coverCommand,
226
227
  trailer: trailerCommand,
228
+ ads: adsCommand,
227
229
  reference: referenceCommand,
228
230
  judge: judgeCommand,
229
231
  forge: forgeCommand,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type AdOrderSummary } from '../ads/client.js';
2
+ export declare function money(cents: number, currency: string): string;
3
+ /** One order as two lines a creator reads. */
4
+ export declare function describeOrder(order: AdOrderSummary): string[];
5
+ export declare const adsCommand: import("citty").CommandDef<import("citty").ArgsDef>;
@@ -0,0 +1,240 @@
1
+ /**
2
+ * `bitmagic ads` — build an ad package for this game, upload it, and (only if the creator wants to)
3
+ * open the page where they pay for it to run (docs/creator-ads.md).
4
+ *
5
+ * render the three videos and three stills, from the trailer, into `.bitmagic/ads/`
6
+ * check the package against the rules api-server applies (Google Ads' limits and style rules)
7
+ * publish upload it to Bitmagic's cloud — nothing is advertised
8
+ * buy open the page where the creator chooses a budget and pays; the Bitmagic team runs the ads
9
+ * status the package on the server, and every promotion bought, with visitors and plays
10
+ *
11
+ * Everything but `buy` costs nothing. `buy` itself charges nothing either: the creator decides and
12
+ * pays on the page, in their browser — the agent only opens it, and only when they asked.
13
+ */
14
+ import { defineCommand } from 'citty';
15
+ import * as path from 'path';
16
+ import { AD_VIDEO_SECONDS } from '@bitmagic/asset-core/ad-package';
17
+ import { CliError } from '../errors.js';
18
+ import { createOutput } from '../output.js';
19
+ import { loadProjectContext } from '../project/context.js';
20
+ import { resolveEnvironmentForCommand, resolveAuth0ClientId } from '../config/environments.js';
21
+ import { getAccessToken } from '../auth/session.js';
22
+ import { openInBrowser } from '../open-browser.js';
23
+ import { parseNumberFlag } from './number-flag.js';
24
+ import { DEFAULT_CTA, runAdsRender } from '../ads/render.js';
25
+ import { checkAdPackage } from '../ads/check.js';
26
+ import { changedSincePublish, runAdsPublish } from '../ads/publish.js';
27
+ import { fetchAdStatus } from '../ads/client.js';
28
+ import { adsDir } from '../ads/paths.js';
29
+ const JSON_FLAG = {
30
+ type: 'boolean',
31
+ description: 'Print the result as JSON on stdout; all progress goes to stderr.',
32
+ };
33
+ const realDeps = {
34
+ fetch: globalThis.fetch,
35
+ sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
36
+ };
37
+ async function session(root) {
38
+ const environment = resolveEnvironmentForCommand({ cwd: root });
39
+ const token = await getAccessToken(environment, resolveAuth0ClientId(environment), realDeps);
40
+ return { environment, token };
41
+ }
42
+ export function money(cents, currency) {
43
+ const amount = (cents / 100).toFixed(2);
44
+ return currency.toLowerCase() === 'usd' ? `$${amount}` : `${amount} ${currency.toUpperCase()}`;
45
+ }
46
+ const STATUS_WORDS = {
47
+ paid: 'paid — starts as soon as possible, usually within a day',
48
+ running: 'running',
49
+ completed: 'finished',
50
+ rejected: 'not run — the Bitmagic team will be in touch',
51
+ refunded: 'refunded',
52
+ };
53
+ function day(ms) {
54
+ return ms === null ? '' : new Date(ms).toISOString().slice(0, 10);
55
+ }
56
+ /** One order as two lines a creator reads. */
57
+ export function describeOrder(order) {
58
+ const spend = order.spendCents !== null ? ` · ad spend ${money(order.spendCents, order.currency)} of ${money(order.mediaBudgetCents, order.currency)}` : '';
59
+ const dates = order.startedAt !== null
60
+ ? ` · ran ${day(order.startedAt)}${order.endedAt !== null ? ` to ${day(order.endedAt)}` : ' onwards'}`
61
+ : ` · bought ${day(order.paidAt ?? order.createdAt)}`;
62
+ return [
63
+ `${order.id} ${STATUS_WORDS[order.status] ?? order.status}`,
64
+ ` ${money(order.priceCents, order.currency)} · ${order.days} days · ${order.audienceName}${dates}`,
65
+ ` ${order.metrics.visitors} visitors · ${order.metrics.plays} started playing${spend}`,
66
+ ];
67
+ }
68
+ function describeStatus(status, output) {
69
+ if (status.package === null) {
70
+ output.info('No ad package uploaded for this game yet.');
71
+ }
72
+ else {
73
+ output.info(`Ad package ${status.package.id}, uploaded ${day(status.package.createdAt)}${status.package.gameName ? ` (${status.package.gameName})` : ''}.`);
74
+ }
75
+ if (status.orders.length === 0) {
76
+ output.info('No promotions bought yet.');
77
+ }
78
+ else {
79
+ output.info('');
80
+ for (const order of status.orders)
81
+ for (const line of describeOrder(order))
82
+ output.info(line);
83
+ }
84
+ if (!status.promotable)
85
+ output.info('\nThe game is not public yet: publish it with `bitmagic publish --visibility public` before buying ads.');
86
+ }
87
+ const renderCommand = defineCommand({
88
+ meta: {
89
+ name: 'render',
90
+ description: 'Render the ad videos (16:9, 9:16, 1:1) and stills (1.91:1, 1:1, 4:5) from the trailer into .bitmagic/ads/.',
91
+ },
92
+ args: {
93
+ video: { type: 'string', description: 'The source video. Default: the newest `bitmagic trailer` render (its own end card is trimmed off).' },
94
+ portrait: { type: 'string', description: 'A 9:16 video for the portrait ad, instead of fitting the landscape one into it.' },
95
+ image: { type: 'string', description: 'The source of the stills. Default: .bitmagic/cover.webp, else a frame of the video.' },
96
+ seconds: { type: 'string', description: `Ad length in seconds, ${AD_VIDEO_SECONDS.min}–${AD_VIDEO_SECONDS.max}. Default ${AD_VIDEO_SECONDS.recommended}.` },
97
+ start: { type: 'string', description: 'Where in the source video to start, in seconds. Default 0.' },
98
+ cta: { type: 'string', description: `The end card's second line. Default "${DEFAULT_CTA}".` },
99
+ 'end-card': { type: 'boolean', default: true, description: 'Fade in an end card with the game\'s name at the end. --no-end-card skips it.' },
100
+ json: JSON_FLAG,
101
+ },
102
+ async run({ args }) {
103
+ const { root } = loadProjectContext();
104
+ const output = createOutput(args.json === true);
105
+ const seconds = parseNumberFlag('seconds', args.seconds, { min: AD_VIDEO_SECONDS.min, max: AD_VIDEO_SECONDS.max });
106
+ const start = parseNumberFlag('start', args.start, { min: 0 });
107
+ const result = await runAdsRender({
108
+ root,
109
+ output,
110
+ ...(args.video !== undefined ? { video: args.video } : {}),
111
+ ...(args.portrait !== undefined ? { portrait: args.portrait } : {}),
112
+ ...(args.image !== undefined ? { image: args.image } : {}),
113
+ ...(seconds !== undefined ? { seconds } : {}),
114
+ ...(start !== undefined ? { start } : {}),
115
+ ...(typeof args.cta === 'string' ? { cta: args.cta } : {}),
116
+ endCard: args['end-card'] !== false,
117
+ });
118
+ output.info('');
119
+ output.info(`Rendered into ${path.relative(root, adsDir(root))}/ from ${path.relative(root, result.source)}`
120
+ + ` (${result.segment.durationSec.toFixed(1)}s from ${result.segment.startSec}s${result.endCard ? ', with an end card' : ''}).`);
121
+ if (result.copyTemplateWritten) {
122
+ output.info('Started an empty .bitmagic/ads/ads.json — write the headlines and descriptions into it.');
123
+ }
124
+ output.info('Next: look at the files, write the copy, then `bitmagic ads check`.');
125
+ output.result({ ok: true, kind: 'ads-render', ...result });
126
+ },
127
+ });
128
+ const checkCommand = defineCommand({
129
+ meta: { name: 'check', description: 'Check the ad package in .bitmagic/ads/ against the rules it is uploaded under.' },
130
+ args: { json: JSON_FLAG },
131
+ async run({ args }) {
132
+ const { root } = loadProjectContext();
133
+ const output = createOutput(args.json === true);
134
+ const result = await checkAdPackage(root);
135
+ if (!result.ok) {
136
+ output.result({ ok: false, kind: 'ads-check', problems: result.problems });
137
+ throw new CliError(`The ad package is not ready:\n${result.problems.map((p) => ` - ${p}`).join('\n')}`, 1, 'ads_invalid');
138
+ }
139
+ output.info(`The ad package for "${result.gameName}" is ready: \`bitmagic ads publish\` uploads it.`);
140
+ output.result({ ok: true, kind: 'ads-check', gameName: result.gameName, copy: result.copy, videos: result.videos, images: result.images });
141
+ },
142
+ });
143
+ const publishCommand = defineCommand({
144
+ meta: { name: 'publish', description: 'Upload the ad package to Bitmagic. Nothing is advertised until the creator buys a promotion.' },
145
+ args: { json: JSON_FLAG },
146
+ async run({ args }) {
147
+ const { root } = loadProjectContext();
148
+ const output = createOutput(args.json === true);
149
+ const result = await runAdsPublish({ root, output });
150
+ output.info('');
151
+ output.info(`Ad package ${result.packageId} uploaded${result.reused.length > 0 ? ` (${result.reused.length} unchanged file${result.reused.length === 1 ? '' : 's'} reused)` : ''}. Nothing is advertised yet.`);
152
+ if (!result.promotable) {
153
+ output.info('The game is not public yet, so it cannot be advertised: publish it with `bitmagic publish --visibility public` first.');
154
+ }
155
+ output.info('To run these ads, the creator chooses a budget and pays on this page (`bitmagic ads buy` opens it):');
156
+ output.info(` ${result.promoteUrl}`);
157
+ output.result({ ok: true, kind: 'ads-publish', ...result });
158
+ },
159
+ });
160
+ /** A new order past checkout, or null. */
161
+ function newPaidOrder(status, known) {
162
+ return status.orders.find((order) => !known.has(order.id) && ['paid', 'running', 'completed'].includes(order.status)) ?? null;
163
+ }
164
+ const WAIT_POLL_MS = 5000;
165
+ const WAIT_MAX_MS = 30 * 60 * 1000;
166
+ const buyCommand = defineCommand({
167
+ meta: {
168
+ name: 'buy',
169
+ description: 'Open the page where the creator chooses an ad budget and pays. Only when they asked for it.',
170
+ },
171
+ args: {
172
+ 'no-open': { type: 'boolean', description: 'Print the page instead of opening it.' },
173
+ wait: { type: 'boolean', description: 'Wait (up to 30 minutes) until the payment goes through, and say so.' },
174
+ json: JSON_FLAG,
175
+ },
176
+ async run({ args }) {
177
+ const { root, metadata } = loadProjectContext();
178
+ const output = createOutput(args.json === true);
179
+ const { environment, token } = await session(root);
180
+ const status = await fetchAdStatus(environment, token, metadata.gameId, realDeps);
181
+ if (status.package === null) {
182
+ throw new CliError('There is no ad package for this game yet. Build and upload one first: `bitmagic ads render`, write the copy, '
183
+ + '`bitmagic ads check`, `bitmagic ads publish`.', 1, 'no_package');
184
+ }
185
+ if (!status.promotable) {
186
+ throw new CliError('Ads send players to the game\'s page, so the game has to be public first: `bitmagic publish --visibility public`.', 1, 'not_public');
187
+ }
188
+ const changed = changedSincePublish(root);
189
+ if (changed.length > 0) {
190
+ output.info(`Changed since the last \`bitmagic ads publish\`: ${changed.join(', ')}. The page sells the package already uploaded — run \`bitmagic ads publish\` first to include the changes.`);
191
+ }
192
+ const opened = args['no-open'] === true ? false : openInBrowser(status.promoteUrl, { log: output.info });
193
+ output.info(opened ? `Opened the promotion page: ${status.promoteUrl}` : `Open this page to choose a budget and pay: ${status.promoteUrl}`);
194
+ output.info('Paying there starts nothing by itself: the Bitmagic team sets the campaign up, usually within a day.');
195
+ if (args.wait !== true) {
196
+ output.result({ ok: true, kind: 'ads-buy', promoteUrl: status.promoteUrl, opened, packageId: status.package.id });
197
+ return;
198
+ }
199
+ output.info('Waiting for the payment...');
200
+ const known = new Set(status.orders.map((order) => order.id));
201
+ for (let waited = 0; waited < WAIT_MAX_MS; waited += WAIT_POLL_MS) {
202
+ await realDeps.sleep(WAIT_POLL_MS);
203
+ const order = newPaidOrder(await fetchAdStatus(environment, token, metadata.gameId, realDeps), known);
204
+ if (order !== null) {
205
+ output.info(`Paid: ${money(order.priceCents, order.currency)} for ${order.days} days. The campaign will begin as soon as possible, usually within a day.`);
206
+ output.info('`bitmagic ads status` shows how many people it brings.');
207
+ output.result({ ok: true, kind: 'ads-buy', promoteUrl: status.promoteUrl, opened, packageId: status.package.id, order });
208
+ return;
209
+ }
210
+ }
211
+ output.info('No payment yet. `bitmagic ads status` shows it once it goes through.');
212
+ output.result({ ok: true, kind: 'ads-buy', promoteUrl: status.promoteUrl, opened, packageId: status.package.id, paid: false });
213
+ },
214
+ });
215
+ const statusCommand = defineCommand({
216
+ meta: { name: 'status', description: 'The uploaded ad package and every promotion bought, with visitors and plays.' },
217
+ args: { json: JSON_FLAG },
218
+ async run({ args }) {
219
+ const { root, metadata } = loadProjectContext();
220
+ const output = createOutput(args.json === true);
221
+ const { environment, token } = await session(root);
222
+ const status = await fetchAdStatus(environment, token, metadata.gameId, realDeps);
223
+ describeStatus(status, output);
224
+ output.result({ ok: true, kind: 'ads-status', ...status });
225
+ },
226
+ });
227
+ export const adsCommand = defineCommand({
228
+ meta: {
229
+ name: 'ads',
230
+ description: 'Build an ad package for this game (videos, images, copy), upload it, and open the page to pay for a promotion.',
231
+ },
232
+ subCommands: {
233
+ render: renderCommand,
234
+ check: checkCommand,
235
+ publish: publishCommand,
236
+ buy: buyCommand,
237
+ status: statusCommand,
238
+ },
239
+ });
240
+ //# sourceMappingURL=ads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ads.js","sourceRoot":"","sources":["../../src/commands/ads.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,8 @@
18
18
  */
19
19
  /** Model aliases the event proxy serves. Anything else is a 400 — it knows only its own names. */
20
20
  export declare const OPUS_ALIAS = "claude-5.5-opus";
21
- /** Codex's model: GPT-6 Sol on Bedrock, the same sponsor account that serves Opus. */
22
- export declare const CODEX_MODEL = "bedrock-gpt-6-sol";
21
+ /** Codex's model: GPT-6.1 Sol on Bedrock, the same sponsor account that serves Opus. */
22
+ export declare const CODEX_MODEL = "bedrock-gpt-6.1-sol";
23
23
  /** The env var Codex is told to read the key from, via `env_key`. */
24
24
  export declare const CODEX_KEY_ENV = "BITMAGIC_EVENT_KEY";
25
25
  export type EventAgent = 'claude' | 'codex';
@@ -19,8 +19,8 @@
19
19
  /** Model aliases the event proxy serves. Anything else is a 400 — it knows only its own names. */
20
20
  export const OPUS_ALIAS = 'claude-5.5-opus';
21
21
  const HAIKU_ALIAS = 'claude-4.5-haiku';
22
- /** Codex's model: GPT-6 Sol on Bedrock, the same sponsor account that serves Opus. */
23
- export const CODEX_MODEL = 'bedrock-gpt-6-sol';
22
+ /** Codex's model: GPT-6.1 Sol on Bedrock, the same sponsor account that serves Opus. */
23
+ export const CODEX_MODEL = 'bedrock-gpt-6.1-sol';
24
24
  /** The env var Codex is told to read the key from, via `env_key`. */
25
25
  export const CODEX_KEY_ENV = 'BITMAGIC_EVENT_KEY';
26
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/event/launch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,kGAAkG;AAClG,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAE/C,qEAAqE;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAIlD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,yBAAyB,GAAG,CAAC,yBAAyB,EAAE,wBAAwB,EAAE,yBAAyB,CAAU,CAAC;AAE5H,mGAAmG;AACnG,MAAM,sBAAsB,GAAG;IAC7B,YAAY;IACZ,wBAAwB;IACxB,wBAAwB;IACxB,2BAA2B;IAC3B,8BAA8B;IAC9B,8BAA8B;IAC9B,6BAA6B;IAC7B,sBAAsB;IACtB,YAAY;CACJ,CAAC;AAWX;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,GAAuC,EAAE,IAAY,EAAE,QAAgB;IAC3F,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,KAAK;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,GAAW,EACX,OAAe,EACf,YAAgD,OAAO,CAAC,GAAG,EAC3D,WAAmB,OAAO,CAAC,QAAQ;IAEnC,MAAM,GAAG,GAAuC,EAAE,GAAG,SAAS,EAAE,CAAC;IAEjE,0FAA0F;IAC1F,6FAA6F;IAC7F,+EAA+E;IAC/E,YAAY,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAEjD,sFAAsF;IACtF,yFAAyF;IACzF,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAE/C,8FAA8F;IAC9F,4FAA4F;IAC5F,4FAA4F;IAC5F,8FAA8F;IAC9F,sDAAsD;IACtD,EAAE;IACF,8FAA8F;IAC9F,0FAA0F;IAC1F,uFAAuF;IACvF,gGAAgG;IAChG,+FAA+F;IAC/F,4DAA4D;IAC5D,KAAK,MAAM,QAAQ,IAAI,yBAAyB;QAAE,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAExF,KAAK,MAAM,MAAM,IAAI,sBAAsB;QAAE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEjF,GAAG,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC;IAC/B,GAAG,CAAC,4BAA4B,GAAG,UAAU,CAAC;IAC9C,GAAG,CAAC,8BAA8B,GAAG,UAAU,CAAC;IAChD,GAAG,CAAC,6BAA6B,GAAG,WAAW,CAAC;IAChD,GAAG,CAAC,sCAAsC,GAAG,GAAG,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,GAAW,EACX,SAAiB,EACjB,YAAgD,OAAO,CAAC,GAAG;IAE3D,MAAM,GAAG,GAAuC,EAAE,GAAG,SAAS,EAAE,CAAC;IACjE,GAAG,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;IACzB,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,KAAiB,EACjB,GAAW,EACX,OAAe,EACf,SAAiB,EACjB,cAAwB,EAAE,EAC1B,YAAgD,OAAO,CAAC,GAAG,EAC3D,WAAmB,OAAO,CAAC,QAAQ;IAEnC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;IACtG,CAAC;IACD,8FAA8F;IAC9F,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;AAC5F,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,WAAmB,OAAO,CAAC,QAAQ;IACjE,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,OAAe,EAAE,QAAkB,eAAe,EAAE;IAC3F,MAAM,IAAI,GAA4B;QACpC,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,sBAAsB,EAAE,GAAG,CAAC;QAC7B,CAAC,8BAA8B,EAAE,UAAU,CAAC;QAC5C,CAAC,gCAAgC,EAAE,UAAU,CAAC;QAC9C,CAAC,+BAA+B,EAAE,WAAW,CAAC;QAC9C,CAAC,wCAAwC,EAAE,GAAG,CAAC;QAC/C,CAAC,aAAa,EAAE,GAAG,CAAC;KACrB,CAAC;IAEF,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,YAAY;YACf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC;QAClE,KAAK,KAAK;YACR,wDAAwD;YACxD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QAC7D;YACE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/event/launch.ts"],"names":[],"mappings":"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"}