kappmaker 1.1.0 → 1.2.0
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 +254 -30
- package/dist/cli.js +86 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/adapty-setup.js +5 -4
- package/dist/commands/adapty-setup.js.map +1 -1
- package/dist/commands/config.js +11 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create-appstore-app.js +18 -1
- package/dist/commands/create-appstore-app.js.map +1 -1
- package/dist/commands/create-logo.js +16 -5
- package/dist/commands/create-logo.js.map +1 -1
- package/dist/commands/create-play-app.d.ts +2 -0
- package/dist/commands/create-play-app.js +399 -0
- package/dist/commands/create-play-app.js.map +1 -0
- package/dist/commands/create.js +133 -54
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/enhance.js +12 -4
- package/dist/commands/enhance.js.map +1 -1
- package/dist/commands/fastlane-configure.d.ts +1 -0
- package/dist/commands/fastlane-configure.js +9 -0
- package/dist/commands/fastlane-configure.js.map +1 -0
- package/dist/commands/generate-screenshots.js +22 -7
- package/dist/commands/generate-screenshots.js.map +1 -1
- package/dist/commands/gpc.d.ts +29 -0
- package/dist/commands/gpc.js +174 -0
- package/dist/commands/gpc.js.map +1 -0
- package/dist/commands/remove-bg.js +12 -4
- package/dist/commands/remove-bg.js.map +1 -1
- package/dist/commands/translate-screenshots.js +22 -8
- package/dist/commands/translate-screenshots.js.map +1 -1
- package/dist/services/asc-monetization.service.js +39 -29
- package/dist/services/asc-monetization.service.js.map +1 -1
- package/dist/services/asc.service.d.ts +1 -1
- package/dist/services/asc.service.js +94 -12
- package/dist/services/asc.service.js.map +1 -1
- package/dist/services/fastlane-setup.service.d.ts +1 -0
- package/dist/services/fastlane-setup.service.js +50 -0
- package/dist/services/fastlane-setup.service.js.map +1 -0
- package/dist/services/firebase.service.js +48 -18
- package/dist/services/firebase.service.js.map +1 -1
- package/dist/services/gpc-data-safety.service.d.ts +11 -0
- package/dist/services/gpc-data-safety.service.js +160 -0
- package/dist/services/gpc-data-safety.service.js.map +1 -0
- package/dist/services/gpc-monetization.service.d.ts +18 -0
- package/dist/services/gpc-monetization.service.js +244 -0
- package/dist/services/gpc-monetization.service.js.map +1 -0
- package/dist/services/gpc.service.d.ts +87 -0
- package/dist/services/gpc.service.js +338 -0
- package/dist/services/gpc.service.js.map +1 -0
- package/dist/services/refactor.service.js +44 -29
- package/dist/services/refactor.service.js.map +1 -1
- package/dist/templates/Fastfile.txt +209 -0
- package/dist/templates/data-safety-template.json +5483 -0
- package/dist/templates/googleplay-config.json +71 -0
- package/dist/types/googleplay.d.ts +113 -0
- package/dist/types/googleplay.js +2 -0
- package/dist/types/googleplay.js.map +1 -0
- package/dist/utils/config.d.ts +1 -0
- package/dist/utils/config.js +4 -0
- package/dist/utils/config.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { loadConfig } from '../utils/config.js';
|
|
6
|
+
import * as gpc from '../services/gpc.service.js';
|
|
7
|
+
import * as gpcMoney from '../services/gpc-monetization.service.js';
|
|
8
|
+
import { buildDataSafetyCsv } from '../services/gpc-data-safety.service.js';
|
|
9
|
+
import { createPlayApp } from './create-play-app.js';
|
|
10
|
+
const CONFIG_FILENAME = 'Assets/googleplay-config.json';
|
|
11
|
+
// ── Shared helpers ──────────────────────────────────────────────────
|
|
12
|
+
async function loadPlayConfigStrict(configPath) {
|
|
13
|
+
const resolved = configPath ?? path.resolve(CONFIG_FILENAME);
|
|
14
|
+
if (!(await fs.pathExists(resolved))) {
|
|
15
|
+
logger.fatal(`Google Play config not found: ${resolved}`);
|
|
16
|
+
logger.info('Run "kappmaker gpc setup" first to create it interactively.');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const config = await fs.readJson(resolved);
|
|
20
|
+
if (!config.app?.package_name) {
|
|
21
|
+
logger.fatal(`Config at ${resolved} is missing app.package_name`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
return { config, configPath: resolved };
|
|
25
|
+
}
|
|
26
|
+
async function ensureAuth() {
|
|
27
|
+
const userConfig = await loadConfig();
|
|
28
|
+
if (!userConfig.googleServiceAccountPath) {
|
|
29
|
+
logger.fatal('Google service account path is not set.');
|
|
30
|
+
logger.info('Set it with: kappmaker config set googleServiceAccountPath <path-to-json>');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
await gpc.validateServiceAccount();
|
|
34
|
+
}
|
|
35
|
+
// ── Subcommands ──────────────────────────────────────────────────────
|
|
36
|
+
/** Full 11-step orchestrator (identical to the top-level create-play-app). */
|
|
37
|
+
export async function gpcSetup(options) {
|
|
38
|
+
await createPlayApp(options);
|
|
39
|
+
}
|
|
40
|
+
/** Quick read-only probe: does this app exist on Play Console? */
|
|
41
|
+
export async function gpcAppCheck(options) {
|
|
42
|
+
await ensureAuth();
|
|
43
|
+
const exists = await gpc.checkAppExists(options.package);
|
|
44
|
+
if (exists) {
|
|
45
|
+
logger.success(`App "${options.package}" exists on Google Play Console.`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
logger.warn(`App "${options.package}" was not found.`);
|
|
49
|
+
logger.info(`Create it manually at: ${gpc.PLAY_CONSOLE_URL}`);
|
|
50
|
+
process.exit(2);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Push just the listings section (start edit → listings → commit). */
|
|
54
|
+
export async function gpcListingsPush(options) {
|
|
55
|
+
await ensureAuth();
|
|
56
|
+
const { config } = await loadPlayConfigStrict(options.config);
|
|
57
|
+
if (config.listings.length === 0) {
|
|
58
|
+
logger.warn('No listings in config, nothing to push.');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
await gpc.withEdit(config.app.package_name, async (editId) => {
|
|
62
|
+
// Details are required to set default language; push them alongside listings.
|
|
63
|
+
await gpc.updateAppDetails(config.app.package_name, editId, config.app.default_language, config.details);
|
|
64
|
+
for (const listing of config.listings) {
|
|
65
|
+
await gpc.updateListing(config.app.package_name, editId, listing);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
logger.success(`Pushed ${config.listings.length} listing(s).`);
|
|
69
|
+
}
|
|
70
|
+
/** List subscriptions currently on Play Console (package from --package or config). */
|
|
71
|
+
export async function gpcSubscriptionsList(options) {
|
|
72
|
+
await ensureAuth();
|
|
73
|
+
const packageName = options.package ?? (await loadPlayConfigStrict(options.config)).config.app.package_name;
|
|
74
|
+
const existing = await gpcMoney.listSubscriptions(packageName);
|
|
75
|
+
console.log('');
|
|
76
|
+
console.log(chalk.bold(` Subscriptions on ${packageName}:\n`));
|
|
77
|
+
if (existing.size === 0) {
|
|
78
|
+
console.log(chalk.gray(' (none)'));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
for (const id of existing) {
|
|
82
|
+
console.log(` ${chalk.cyan('•')} ${id}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
console.log('');
|
|
86
|
+
}
|
|
87
|
+
/** Create/reuse subscriptions from config (idempotent). */
|
|
88
|
+
export async function gpcSubscriptionsPush(options) {
|
|
89
|
+
await ensureAuth();
|
|
90
|
+
const { config } = await loadPlayConfigStrict(options.config);
|
|
91
|
+
// One-shot probe: default language + whether the app has an uploaded build.
|
|
92
|
+
// Google Play rejects monetization writes unless at least one build has been
|
|
93
|
+
// published to some track.
|
|
94
|
+
const state = await gpc.fetchAppState(config.app.package_name);
|
|
95
|
+
if (state && !state.hasUploadedBuild) {
|
|
96
|
+
logger.fatal('No build uploaded to any Play Console track.');
|
|
97
|
+
logger.info('Google Play requires at least one build with the BILLING permission on a');
|
|
98
|
+
logger.info('track (internal testing is enough) before subscriptions can be created.');
|
|
99
|
+
logger.info('Upload one with: kappmaker publish --platform android --track internal');
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
const playDefaultLanguage = state?.defaultLanguage ?? config.app.default_language;
|
|
103
|
+
await gpcMoney.setupSubscriptions(config.app.package_name, config.subscriptions, playDefaultLanguage);
|
|
104
|
+
logger.success(`Processed ${config.subscriptions.length} subscription(s).`);
|
|
105
|
+
}
|
|
106
|
+
/** List one-time in-app products currently on Play Console. */
|
|
107
|
+
export async function gpcIapList(options) {
|
|
108
|
+
await ensureAuth();
|
|
109
|
+
const packageName = options.package ?? (await loadPlayConfigStrict(options.config)).config.app.package_name;
|
|
110
|
+
const existing = await gpcMoney.listInAppProducts(packageName);
|
|
111
|
+
console.log('');
|
|
112
|
+
console.log(chalk.bold(` In-app products on ${packageName}:\n`));
|
|
113
|
+
if (existing.size === 0) {
|
|
114
|
+
console.log(chalk.gray(' (none)'));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
for (const sku of existing) {
|
|
118
|
+
console.log(` ${chalk.cyan('•')} ${sku}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
console.log('');
|
|
122
|
+
}
|
|
123
|
+
/** Create/reuse one-time in-app products from config (idempotent). */
|
|
124
|
+
export async function gpcIapPush(options) {
|
|
125
|
+
await ensureAuth();
|
|
126
|
+
const { config } = await loadPlayConfigStrict(options.config);
|
|
127
|
+
const state = await gpc.fetchAppState(config.app.package_name);
|
|
128
|
+
if (state && !state.hasUploadedBuild) {
|
|
129
|
+
logger.fatal('No build uploaded to any Play Console track.');
|
|
130
|
+
logger.info('Google Play requires at least one build with the BILLING permission on a');
|
|
131
|
+
logger.info('track (internal testing is enough) before in-app products can be created.');
|
|
132
|
+
logger.info('Upload one with: kappmaker publish --platform android --track internal');
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
await gpcMoney.setupInAppProducts(config.app.package_name, config.in_app_products);
|
|
136
|
+
logger.success(`Processed ${config.in_app_products.length} in-app product(s).`);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Push only the data safety declaration. Priority:
|
|
140
|
+
* 1. `data_safety_csv_path` — uploaded verbatim (escape hatch).
|
|
141
|
+
* 2. `data_safety` JSON block — converted via buildDataSafetyCsv().
|
|
142
|
+
*/
|
|
143
|
+
export async function gpcDataSafetyPush(options) {
|
|
144
|
+
await ensureAuth();
|
|
145
|
+
const { config } = await loadPlayConfigStrict(options.config);
|
|
146
|
+
// (1) Raw CSV escape hatch
|
|
147
|
+
if (config.data_safety_csv_path) {
|
|
148
|
+
const csvPath = path.isAbsolute(config.data_safety_csv_path)
|
|
149
|
+
? config.data_safety_csv_path
|
|
150
|
+
: path.resolve(config.data_safety_csv_path);
|
|
151
|
+
if (!(await fs.pathExists(csvPath))) {
|
|
152
|
+
logger.fatal(`data_safety_csv_path is set to ${csvPath} but the file does not exist.`);
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
const csvContents = await fs.readFile(csvPath, 'utf8');
|
|
156
|
+
if (!csvContents.trim()) {
|
|
157
|
+
logger.fatal(`Data safety CSV at ${csvPath} is empty.`);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
await gpc.updateDataSafety(config.app.package_name, csvContents);
|
|
161
|
+
logger.success(`Pushed data safety CSV from ${csvPath}`);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// (2) Structured JSON
|
|
165
|
+
if (!config.data_safety) {
|
|
166
|
+
logger.fatal('Config has no `data_safety` block or `data_safety_csv_path`.');
|
|
167
|
+
logger.info('Add a `data_safety: { apply_defaults: true }` block to your config and rerun.');
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
const csv = buildDataSafetyCsv(config.data_safety);
|
|
171
|
+
await gpc.updateDataSafety(config.app.package_name, csv);
|
|
172
|
+
logger.success('Pushed data safety declaration (built from data_safety JSON).');
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=gpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpc.js","sourceRoot":"","sources":["../../src/commands/gpc.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,4BAA4B,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,eAAe,GAAG,+BAA+B,CAAC;AAExD,uEAAuE;AAEvE,KAAK,UAAU,oBAAoB,CAAC,UAAmB;IACrD,MAAM,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAqB,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,8BAA8B,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAC;AACrC,CAAC;AAED,wEAAwE;AAExE,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAA6B;IAC1D,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA4B;IAC5D,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,CAAC,OAAO,kCAAkC,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,OAAO,kBAAkB,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA6B;IACjE,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IACD,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3D,8EAA8E;QAC9E,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACzG,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,CAAC,UAAU,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC;AACjE,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA8C;IACvF,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5G,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,WAAW,KAAK,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA6B;IACtE,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D,4EAA4E;IAC5E,6EAA6E;IAC7E,2BAA2B;IAC3B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACxF,MAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QACvF,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,mBAAmB,GAAG,KAAK,EAAE,eAAe,IAAI,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAClF,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IACtG,MAAM,CAAC,OAAO,CAAC,aAAa,MAAM,CAAC,aAAa,CAAC,MAAM,mBAAmB,CAAC,CAAC;AAC9E,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA8C;IAC7E,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5G,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,WAAW,KAAK,CAAC,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA6B;IAC5D,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACxF,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QACzF,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACnF,MAAM,CAAC,OAAO,CAAC,aAAa,MAAM,CAAC,eAAe,CAAC,MAAM,qBAAqB,CAAC,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAA6B;IACnE,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D,2BAA2B;IAC3B,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;YAC1D,CAAC,CAAC,MAAM,CAAC,oBAAoB;YAC7B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC9C,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,kCAAkC,OAAO,+BAA+B,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,YAAY,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import fs from 'fs-extra';
|
|
3
3
|
import { logger } from '../utils/logger.js';
|
|
4
|
-
import {
|
|
4
|
+
import { promptInput } from '../utils/prompt.js';
|
|
5
|
+
import { loadConfig, saveConfig } from '../utils/config.js';
|
|
5
6
|
import * as fal from '../services/fal.service.js';
|
|
6
7
|
export async function removeBackground(source, options) {
|
|
7
8
|
const config = await loadConfig();
|
|
8
9
|
if (!config.falApiKey) {
|
|
9
|
-
logger.
|
|
10
|
-
logger.info('
|
|
11
|
-
|
|
10
|
+
logger.warn('fal.ai API key is not configured.');
|
|
11
|
+
logger.info('Get one at: https://fal.ai/dashboard/keys');
|
|
12
|
+
const key = await promptInput(' Enter your fal.ai API key: ');
|
|
13
|
+
if (!key.trim()) {
|
|
14
|
+
logger.fatal('fal.ai API key is required.');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
config.falApiKey = key.trim();
|
|
18
|
+
await saveConfig(config);
|
|
19
|
+
logger.success('falApiKey saved to config.');
|
|
12
20
|
}
|
|
13
21
|
const sourcePath = path.resolve(source);
|
|
14
22
|
if (!(await fs.pathExists(sourcePath))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-bg.js","sourceRoot":"","sources":["../../src/commands/remove-bg.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"remove-bg.js","sourceRoot":"","sources":["../../src/commands/remove-bg.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,21 +3,35 @@ import fs from 'fs-extra';
|
|
|
3
3
|
import sharp from 'sharp';
|
|
4
4
|
import ora from 'ora';
|
|
5
5
|
import { logger } from '../utils/logger.js';
|
|
6
|
-
import { loadConfig } from '../utils/config.js';
|
|
6
|
+
import { loadConfig, saveConfig } from '../utils/config.js';
|
|
7
7
|
import * as fal from '../services/fal.service.js';
|
|
8
8
|
import * as screenshot from '../services/screenshot.service.js';
|
|
9
|
-
import { confirm } from '../utils/prompt.js';
|
|
9
|
+
import { confirm, promptInput } from '../utils/prompt.js';
|
|
10
10
|
export async function translateScreenshots(sourceDir, options) {
|
|
11
11
|
const config = await loadConfig();
|
|
12
12
|
if (!config.falApiKey) {
|
|
13
|
-
logger.
|
|
14
|
-
logger.info('
|
|
15
|
-
|
|
13
|
+
logger.warn('fal.ai API key is not configured.');
|
|
14
|
+
logger.info('Get one at: https://fal.ai/dashboard/keys');
|
|
15
|
+
const key = await promptInput(' Enter your fal.ai API key: ');
|
|
16
|
+
if (!key.trim()) {
|
|
17
|
+
logger.fatal('fal.ai API key is required.');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
config.falApiKey = key.trim();
|
|
21
|
+
await saveConfig(config);
|
|
22
|
+
logger.success('falApiKey saved to config.');
|
|
16
23
|
}
|
|
17
24
|
if (!config.imgbbApiKey) {
|
|
18
|
-
logger.
|
|
19
|
-
logger.info('Get a free key at https://api.imgbb.com/
|
|
20
|
-
|
|
25
|
+
logger.warn('imgbb API key is not configured (needed for image upload).');
|
|
26
|
+
logger.info('Get a free key at: https://api.imgbb.com/');
|
|
27
|
+
const key = await promptInput(' Enter your imgbb API key: ');
|
|
28
|
+
if (!key.trim()) {
|
|
29
|
+
logger.fatal('imgbb API key is required for screenshot translation.');
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
config.imgbbApiKey = key.trim();
|
|
33
|
+
await saveConfig(config);
|
|
34
|
+
logger.success('imgbbApiKey saved to config.');
|
|
21
35
|
}
|
|
22
36
|
const srcPath = path.resolve(sourceDir);
|
|
23
37
|
if (!(await fs.pathExists(srcPath))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translate-screenshots.js","sourceRoot":"","sources":["../../src/commands/translate-screenshots.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"translate-screenshots.js","sourceRoot":"","sources":["../../src/commands/translate-screenshots.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,27 +2,24 @@ import { run } from '../utils/exec.js';
|
|
|
2
2
|
import { logger } from '../utils/logger.js';
|
|
3
3
|
export async function createPricing(appId, pricing) {
|
|
4
4
|
const isFree = !pricing.price || pricing.price === '0';
|
|
5
|
+
const targetPrice = isFree ? '0' : pricing.price;
|
|
5
6
|
const today = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
|
|
7
|
+
// v1.x `asc pricing schedule create` only accepts --price-point (no --price),
|
|
8
|
+
// so resolve a price-point ID that matches the target customer price first.
|
|
9
|
+
const pricePoint = await findPricePointForPrice(appId, pricing.base_territory, targetPrice);
|
|
10
|
+
if (!pricePoint) {
|
|
11
|
+
const label = isFree ? 'free price point' : `price point for $${targetPrice}`;
|
|
12
|
+
logger.warn(`Could not find a ${label} in ${pricing.base_territory}. Skipping price schedule.`);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
6
15
|
const args = [
|
|
7
16
|
'pricing', 'schedule', 'create',
|
|
8
17
|
'--app', appId,
|
|
9
18
|
'--base-territory', pricing.base_territory,
|
|
10
19
|
'--start-date', today,
|
|
20
|
+
'--price-point', pricePoint,
|
|
21
|
+
'--output', 'json',
|
|
11
22
|
];
|
|
12
|
-
if (isFree) {
|
|
13
|
-
const freePricePoint = await findFreePricePoint(appId, pricing.base_territory);
|
|
14
|
-
if (freePricePoint) {
|
|
15
|
-
args.push('--price-point', freePricePoint);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
logger.warn('Could not find free price point. Skipping price schedule.');
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
args.push('--price', pricing.price);
|
|
24
|
-
}
|
|
25
|
-
args.push('--output', 'json');
|
|
26
23
|
const label = isFree ? 'Setting pricing (free)' : `Setting pricing ($${pricing.price})`;
|
|
27
24
|
await run('asc', args, { label, allowFailure: true });
|
|
28
25
|
// Set availability
|
|
@@ -36,21 +33,34 @@ export async function createPricing(appId, pricing) {
|
|
|
36
33
|
}
|
|
37
34
|
}
|
|
38
35
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Find a price-point ID in the given territory whose customer price matches the target.
|
|
38
|
+
* Matching is tolerant of trailing-zero formatting ("6.99", "6.990", "0.00", "0").
|
|
39
|
+
* Returns null if no exact numeric match is found.
|
|
40
|
+
*/
|
|
41
|
+
async function findPricePointForPrice(appId, territory, targetPrice) {
|
|
42
|
+
const result = await run('asc', ['pricing', 'price-points', '--app', appId, '--territory', territory, '--output', 'json'], { label: `Looking up price point for ${targetPrice === '0' ? 'free tier' : `$${targetPrice}`}`, allowFailure: true });
|
|
43
|
+
if (result.exitCode !== 0 || !result.stdout)
|
|
44
|
+
return null;
|
|
45
|
+
let points = [];
|
|
46
|
+
try {
|
|
47
|
+
const data = JSON.parse(result.stdout);
|
|
48
|
+
points = data?.data ?? data ?? [];
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const target = Number(targetPrice);
|
|
54
|
+
if (!Number.isFinite(target))
|
|
55
|
+
return null;
|
|
56
|
+
for (const p of points) {
|
|
57
|
+
const attrs = p.attributes ?? p;
|
|
58
|
+
const raw = attrs.customerPrice;
|
|
59
|
+
if (raw === undefined || raw === null)
|
|
60
|
+
continue;
|
|
61
|
+
const num = Number(raw);
|
|
62
|
+
if (Number.isFinite(num) && num === target) {
|
|
63
|
+
return p.id ?? null;
|
|
54
64
|
}
|
|
55
65
|
}
|
|
56
66
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asc-monetization.service.js","sourceRoot":"","sources":["../../src/services/asc-monetization.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,OAA8B;IAC/E,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"asc-monetization.service.js","sourceRoot":"","sources":["../../src/services/asc-monetization.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AppStoreAppConfig, AppStoreVersionConfig, AppStoreCategoriesConfig, AppStoreAgeRatingConfig, AppStoreLocalization, AppStoreEncryptionConfig, AppStoreReviewInfoConfig } from '../types/appstore.js';
|
|
2
2
|
export declare function validateAscInstalled(): Promise<void>;
|
|
3
3
|
export declare function validateAscAuth(): Promise<void>;
|
|
4
|
-
export declare function createBundleId(bundleId: string,
|
|
4
|
+
export declare function createBundleId(bundleId: string, _name: string, platform: string): Promise<void>;
|
|
5
5
|
export declare function createApp(config: AppStoreAppConfig): Promise<string>;
|
|
6
6
|
export declare function updateContentRights(appId: string, contentRights: string): Promise<void>;
|
|
7
7
|
export declare function createVersion(appId: string, version: AppStoreVersionConfig, platform: string): Promise<string>;
|
|
@@ -3,9 +3,15 @@ import { run, runStreaming } from '../utils/exec.js';
|
|
|
3
3
|
import { logger } from '../utils/logger.js';
|
|
4
4
|
import { confirm } from '../utils/prompt.js';
|
|
5
5
|
import { loadConfig } from '../utils/config.js';
|
|
6
|
+
// Minimum supported asc CLI version. v1.0 removed compatibility shims for
|
|
7
|
+
// `apps create`, `age-rating set`, `submit preflight`, `release run`, etc.
|
|
8
|
+
// See https://docs.asccli.sh/migrate-to-1-0
|
|
9
|
+
const MIN_ASC_VERSION = '1.2.1';
|
|
6
10
|
export async function validateAscInstalled() {
|
|
11
|
+
let versionOutput = null;
|
|
7
12
|
try {
|
|
8
|
-
await execa('asc', ['--version']);
|
|
13
|
+
const result = await execa('asc', ['--version']);
|
|
14
|
+
versionOutput = result.stdout;
|
|
9
15
|
}
|
|
10
16
|
catch {
|
|
11
17
|
logger.warn('asc CLI is not installed.');
|
|
@@ -18,8 +24,31 @@ export async function validateAscInstalled() {
|
|
|
18
24
|
logger.fatal('asc CLI is required. Install manually: brew install asc');
|
|
19
25
|
process.exit(1);
|
|
20
26
|
}
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (versionOutput && !meetsMinimumVersion(versionOutput, MIN_ASC_VERSION)) {
|
|
30
|
+
const found = versionOutput.match(/\d+\.\d+\.\d+/)?.[0] ?? versionOutput.trim();
|
|
31
|
+
logger.warn(`asc CLI ${found} is older than ${MIN_ASC_VERSION}. Some commands may fail.`);
|
|
32
|
+
logger.info('Upgrade with: brew upgrade asc');
|
|
33
|
+
logger.info('Migration notes: https://docs.asccli.sh/migrate-to-1-0');
|
|
21
34
|
}
|
|
22
35
|
}
|
|
36
|
+
function meetsMinimumVersion(versionString, minimum) {
|
|
37
|
+
const match = versionString.match(/(\d+)\.(\d+)\.(\d+)/);
|
|
38
|
+
if (!match)
|
|
39
|
+
return true; // Unknown format — don't block
|
|
40
|
+
const [, maj, min, patch] = match;
|
|
41
|
+
const [minMaj, minMin, minPatch] = minimum.split('.').map(Number);
|
|
42
|
+
const current = [Number(maj), Number(min), Number(patch)];
|
|
43
|
+
const required = [minMaj, minMin, minPatch];
|
|
44
|
+
for (let i = 0; i < 3; i++) {
|
|
45
|
+
if (current[i] > required[i])
|
|
46
|
+
return true;
|
|
47
|
+
if (current[i] < required[i])
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
23
52
|
export async function validateAscAuth() {
|
|
24
53
|
const result = await run('asc', ['auth', 'status', '--validate'], {
|
|
25
54
|
label: 'Checking App Store Connect authentication',
|
|
@@ -64,24 +93,76 @@ export async function validateAscAuth() {
|
|
|
64
93
|
}
|
|
65
94
|
}
|
|
66
95
|
}
|
|
67
|
-
|
|
68
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Default capabilities enabled on every new bundle ID. These match the
|
|
98
|
+
* standard KAppMaker app requirements (subscriptions, push, Apple Sign In).
|
|
99
|
+
*/
|
|
100
|
+
const BUNDLE_ID_CAPABILITIES = ['IN_APP_PURCHASE', 'PUSH_NOTIFICATIONS', 'APPLE_ID_AUTH'];
|
|
101
|
+
export async function createBundleId(bundleId, _name, platform) {
|
|
102
|
+
// Name follows Apple convention: "XC com measify archgee" for "com.measify.archgee"
|
|
103
|
+
const derivedName = `XC ${bundleId.replace(/\./g, ' ')}`;
|
|
104
|
+
const result = await run('asc', ['bundle-ids', 'create', '--identifier', bundleId, '--name', derivedName, '--platform', platform], { label: `Creating bundle ID: ${bundleId}`, allowFailure: true });
|
|
69
105
|
if (result.exitCode !== 0) {
|
|
70
106
|
logger.info(`Bundle ID "${bundleId}" may already exist, continuing...`);
|
|
71
107
|
}
|
|
108
|
+
// Find the bundle ID's resource ID (needed for capabilities API)
|
|
109
|
+
const resourceId = await findBundleIdResourceId(bundleId);
|
|
110
|
+
if (!resourceId) {
|
|
111
|
+
logger.warn('Could not find bundle ID resource ID — skipping capability setup.');
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Enable capabilities: Sign in with Apple, In-App Purchases, Push Notifications
|
|
115
|
+
for (const capability of BUNDLE_ID_CAPABILITIES) {
|
|
116
|
+
await run('asc', [
|
|
117
|
+
'bundle-ids', 'capabilities', 'add',
|
|
118
|
+
'--bundle', resourceId,
|
|
119
|
+
'--capability', capability,
|
|
120
|
+
], {
|
|
121
|
+
label: `Enabling ${capability} on ${bundleId}`,
|
|
122
|
+
allowFailure: true,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function findBundleIdResourceId(identifier) {
|
|
127
|
+
const result = await run('asc', ['bundle-ids', 'list', '--output', 'json'], {
|
|
128
|
+
label: 'Looking up bundle ID resource ID',
|
|
129
|
+
allowFailure: true,
|
|
130
|
+
});
|
|
131
|
+
if (result.exitCode !== 0 || !result.stdout)
|
|
132
|
+
return null;
|
|
133
|
+
try {
|
|
134
|
+
const data = JSON.parse(result.stdout);
|
|
135
|
+
const bundles = data?.data ?? data ?? [];
|
|
136
|
+
for (const b of bundles) {
|
|
137
|
+
const attrs = b.attributes ?? b;
|
|
138
|
+
if (attrs.identifier === identifier || attrs.bundleId === identifier) {
|
|
139
|
+
return b.id;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Fall through
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
72
147
|
}
|
|
73
148
|
export async function createApp(config) {
|
|
74
|
-
// asc apps create
|
|
75
|
-
//
|
|
76
|
-
const
|
|
149
|
+
// v1.0+ removed `asc apps create`; creation lives under `asc web apps create`
|
|
150
|
+
// and requires an explicit --apple-id for the web-session auth path.
|
|
151
|
+
const kappConfig = await loadConfig();
|
|
152
|
+
if (!kappConfig.appleId) {
|
|
153
|
+
logger.fatal('Apple ID is required to create apps (asc web apps create --apple-id).');
|
|
154
|
+
logger.info('Set it with: kappmaker config appstore-defaults --init');
|
|
155
|
+
logger.info('Or create the app manually at: https://appstoreconnect.apple.com/apps');
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
const shouldCreate = await confirm(' App not found. Create it now? (requires Apple ID session)');
|
|
77
159
|
if (shouldCreate) {
|
|
78
160
|
await runStreaming('asc', [
|
|
79
|
-
'apps', 'create',
|
|
161
|
+
'web', 'apps', 'create',
|
|
80
162
|
'--name', config.name,
|
|
81
163
|
'--bundle-id', config.bundle_id,
|
|
82
164
|
'--sku', config.sku,
|
|
83
|
-
'--
|
|
84
|
-
'--primary-locale', config.primary_locale,
|
|
165
|
+
'--apple-id', kappConfig.appleId,
|
|
85
166
|
], { label: `Creating app: ${config.name}` });
|
|
86
167
|
const appId = await findAppByBundleId(config.bundle_id);
|
|
87
168
|
if (appId)
|
|
@@ -91,7 +172,7 @@ export async function createApp(config) {
|
|
|
91
172
|
}
|
|
92
173
|
logger.fatal('App must exist on App Store Connect before configuring it.');
|
|
93
174
|
logger.info('Create it manually at: https://appstoreconnect.apple.com/apps');
|
|
94
|
-
logger.info('Or run again and choose yes to create via
|
|
175
|
+
logger.info('Or run again and choose yes to create via asc web apps create.');
|
|
95
176
|
process.exit(1);
|
|
96
177
|
}
|
|
97
178
|
export async function updateContentRights(appId, contentRights) {
|
|
@@ -163,8 +244,9 @@ const AGE_RATING_FLAG_MAP = {
|
|
|
163
244
|
user_generated_content: 'user-generated-content',
|
|
164
245
|
};
|
|
165
246
|
export async function setAgeRating(appId, ageRating) {
|
|
166
|
-
//
|
|
167
|
-
|
|
247
|
+
// v1.0 renamed `asc age-rating set` → `asc age-rating edit`.
|
|
248
|
+
// Start with --all-none to set safe defaults, then override any non-default values.
|
|
249
|
+
const args = ['age-rating', 'edit', '--app', appId, '--all-none'];
|
|
168
250
|
for (const [key, value] of Object.entries(ageRating)) {
|
|
169
251
|
if (value === undefined || value === '' || value === 'NONE' || value === false)
|
|
170
252
|
continue;
|