storebound/cli/apple
CRT 36a8bf9625 CLI runs on Node 20+: npx storebound (bunx keeps working)
- cli/lib/rt.ts: the runtime layer on node: modules (spawn / spawnSync with Bun's defaults, exit codes and
  "Executable not found", which with PATHEXT, sleep, serve, Glob, hasher, gunzip, stdin, SQLite, packageRoot,
  config imports with a type-stripping fallback for Node 20); every Bun.* use in cli/ goes through it
- tools/gen-embedded.ts -> cli/lib/embedded.ts: templates/, cli/shots/*.html and Play's Data safety form embedded
  (replaces Bun text imports; the bundle and the compiled sidecar carry them), checked fresh by bun run ci
- package.json: bin dist/storebound.mjs (Node ESM bundle, tools/build-node.ts, prepack), engines node >=20
- bun run ci: node bundle + node smoke (real node: --version, help, check same as Bun, scan, release plan --help,
  init, MCP handshake + tool call); Forgejo CI sets up Node 20; tests/node-compat.test.ts guards cli/
- install writes npx MCP commands when run with Node; bin/storebound falls back to Node
- docs: npx storebound init (Node 20+) or bunx storebound init
2026-10-13 04:03:28 +08:00
..
adhoc.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
appinfo.ts apple listing, play listing, apple appinfo: the dry run prints a real plan (version decision, old -> new per field, draft locales skipped); the real run asks and applies exactly it 2026-10-12 03:29:38 +08:00
asc.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
build.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
bundle.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
cpp.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
encryption.ts 0.5.0: mobile apps and games positioning (README, site, og image, skills, CLI, MCP, adapters), MCP tools for subscriptions and catalog diff, tests, changelog 2026-10-11 01:47:09 +08:00
events.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
iap-review.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
iap-submit.ts apple iap-submit: DEVELOPER_REJECTED IAP / subscription / group versions (left by a canceled submission) are submitted as they are, plan says 'add (developer rejected, re-submitted as is)', --new-version only for APPROVED / REJECTED, empty draft reused; fake ASC models cancel and re-add. play build / check: warn before Gradle when defaultConfig does not read -PversionCode / -PversionName, with the exact Groovy / Kotlin line (built with AGP 8.13); android.injected.version.code does not override bundleRelease; post-build versionCode mismatch is a hard stop. play-production-release plan: 'Do you want to restart your review?' dialog, Restart review is never-press. Pitfalls 31-33 2026-10-12 11:32:05 +08:00
iap.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
jsonapi.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
listing.ts idempotency: apple listing findOrCreate / createOnce, play listing re-plan in the edit, data-safety hash, twice-run tests for the last open rows 2026-10-12 04:24:45 +08:00
next-build.ts serve --stdio: desktop JSON-RPC profile on the MCP core, confirm tokens, --json results, sidecar builds 2026-10-11 01:57:33 +08:00
offer-codes.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
ppo.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
preorder.ts Store operations: TestFlight wait / expire, IAP review submissions, listing pulls, release notes per language, offers, custom product pages, in-app events, reports, triage, keyword ranks, AdAttributionKit scan 2026-10-11 23:58:17 +08:00
previews.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
promoted.ts Store operations: TestFlight wait / expire, IAP review submissions, listing pulls, release notes per language, offers, custom product pages, in-app events, reports, triage, keyword ranks, AdAttributionKit scan 2026-10-11 23:58:17 +08:00
release.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
resubmit.ts apple submit --build <n> (first submission, the resubmit steps; plan table with --json under serve); desktop owner actions to send for review: owner.apple_submit, owner.apple_resubmit, owner.apple_iap_submit, owner.play_production, and the price gate owner actions (owner.prices_play_products / _play_subscriptions / _apple_subscriptions; owner.prices_import passes --allow-price-changes after the dialog); OWNER_ALLOWED_ARGS ties each forbidden flag to its one action, dry runs never carry owner flags, MCP still has no submit or production release; submit dialog text in the host; system.tools androidSdk, project.inspect playRelease, declarations dataDeletion 2026-10-12 12:08:07 +08:00
review-details.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
screenshots.ts idempotency: WIP 2026-10-12 04:00:58 +08:00
signing.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
status.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
submission.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
submit.ts apple submit --build <n> (first submission, the resubmit steps; plan table with --json under serve); desktop owner actions to send for review: owner.apple_submit, owner.apple_resubmit, owner.apple_iap_submit, owner.play_production, and the price gate owner actions (owner.prices_play_products / _play_subscriptions / _apple_subscriptions; owner.prices_import passes --allow-price-changes after the dialog); OWNER_ALLOWED_ARGS ties each forbidden flag to its one action, dry runs never carry owner flags, MCP still has no submit or production release; submit dialog text in the host; system.tools androidSdk, project.inspect playRelease, declarations dataDeletion 2026-10-12 12:08:07 +08:00
subscriptions.ts price changes of existing products need --allow-price-changes (play products, play/apple subscriptions, prices import): --yes and flow run --apply --yes confirm creates, first prices and other updates only; without the flag the run writes the rest, names each held change and exits 3 (declined), dry runs mark them owner, flows refuse the flag; lib/price-gate.ts, tests/price-gate.test.ts. CLI wording: console fill leaves what it cannot open or fill to the calling agent's browser tool (console plan / verify) instead of 'yourself'; other 'by hand' output points at the config; do-it-dont-ask test scans cli/ output 2026-10-12 09:38:57 +08:00
testflight.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
upload.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
win-back.ts Store operations: TestFlight wait / expire, IAP review submissions, listing pulls, release notes per language, offers, custom product pages, in-app events, reports, triage, keyword ranks, AdAttributionKit scan 2026-10-11 23:58:17 +08:00