kappmaker 1.0.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 +545 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +195 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/adapty-setup.d.ts +2 -0
- package/dist/commands/adapty-setup.js +240 -0
- package/dist/commands/adapty-setup.js.map +1 -0
- package/dist/commands/config.d.ts +12 -0
- package/dist/commands/config.js +230 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create-appstore-app.d.ts +2 -0
- package/dist/commands/create-appstore-app.js +261 -0
- package/dist/commands/create-appstore-app.js.map +1 -0
- package/dist/commands/create-logo.d.ts +2 -0
- package/dist/commands/create-logo.js +93 -0
- package/dist/commands/create-logo.js.map +1 -0
- package/dist/commands/create.d.ts +2 -0
- package/dist/commands/create.js +143 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/enhance.d.ts +2 -0
- package/dist/commands/enhance.js +55 -0
- package/dist/commands/enhance.js.map +1 -0
- package/dist/commands/generate-screenshots.d.ts +2 -0
- package/dist/commands/generate-screenshots.js +174 -0
- package/dist/commands/generate-screenshots.js.map +1 -0
- package/dist/commands/remove-bg.d.ts +2 -0
- package/dist/commands/remove-bg.js +41 -0
- package/dist/commands/remove-bg.js.map +1 -0
- package/dist/commands/split.d.ts +2 -0
- package/dist/commands/split.js +37 -0
- package/dist/commands/split.js.map +1 -0
- package/dist/commands/translate-screenshots.d.ts +2 -0
- package/dist/commands/translate-screenshots.js +224 -0
- package/dist/commands/translate-screenshots.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/services/adapty.service.d.ts +26 -0
- package/dist/services/adapty.service.js +230 -0
- package/dist/services/adapty.service.js.map +1 -0
- package/dist/services/asc-monetization.service.d.ts +3 -0
- package/dist/services/asc-monetization.service.js +223 -0
- package/dist/services/asc-monetization.service.js.map +1 -0
- package/dist/services/asc.service.d.ts +14 -0
- package/dist/services/asc.service.js +321 -0
- package/dist/services/asc.service.js.map +1 -0
- package/dist/services/fal.service.d.ts +15 -0
- package/dist/services/fal.service.js +236 -0
- package/dist/services/fal.service.js.map +1 -0
- package/dist/services/fastlane.service.d.ts +2 -0
- package/dist/services/fastlane.service.js +32 -0
- package/dist/services/fastlane.service.js.map +1 -0
- package/dist/services/firebase.service.d.ts +7 -0
- package/dist/services/firebase.service.js +176 -0
- package/dist/services/firebase.service.js.map +1 -0
- package/dist/services/git.service.d.ts +3 -0
- package/dist/services/git.service.js +13 -0
- package/dist/services/git.service.js.map +1 -0
- package/dist/services/gradle.service.d.ts +4 -0
- package/dist/services/gradle.service.js +31 -0
- package/dist/services/gradle.service.js.map +1 -0
- package/dist/services/ios.service.d.ts +1 -0
- package/dist/services/ios.service.js +9 -0
- package/dist/services/ios.service.js.map +1 -0
- package/dist/services/logo.service.d.ts +12 -0
- package/dist/services/logo.service.js +168 -0
- package/dist/services/logo.service.js.map +1 -0
- package/dist/services/openai.service.d.ts +2 -0
- package/dist/services/openai.service.js +42 -0
- package/dist/services/openai.service.js.map +1 -0
- package/dist/services/screenshot-styles.d.ts +1 -0
- package/dist/services/screenshot-styles.js +1050 -0
- package/dist/services/screenshot-styles.js.map +1 -0
- package/dist/services/screenshot.service.d.ts +14 -0
- package/dist/services/screenshot.service.js +136 -0
- package/dist/services/screenshot.service.js.map +1 -0
- package/dist/templates/adapty-config.json +50 -0
- package/dist/templates/appstore-config.json +188 -0
- package/dist/types/adapty.d.ts +38 -0
- package/dist/types/adapty.js +2 -0
- package/dist/types/adapty.js.map +1 -0
- package/dist/types/appstore.d.ts +150 -0
- package/dist/types/appstore.js +2 -0
- package/dist/types/appstore.js.map +1 -0
- package/dist/types/index.d.ts +80 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +18 -0
- package/dist/utils/config.js +107 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/exec.d.ts +17 -0
- package/dist/utils/exec.js +62 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.js +29 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/prompt.d.ts +2 -0
- package/dist/utils/prompt.js +26 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/validator.d.ts +2 -0
- package/dist/utils/validator.js +93 -0
- package/dist/utils/validator.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { run } from '../utils/exec.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
export async function createPricing(appId, pricing) {
|
|
4
|
+
const isFree = !pricing.price || pricing.price === '0';
|
|
5
|
+
const today = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
|
|
6
|
+
const args = [
|
|
7
|
+
'pricing', 'schedule', 'create',
|
|
8
|
+
'--app', appId,
|
|
9
|
+
'--base-territory', pricing.base_territory,
|
|
10
|
+
'--start-date', today,
|
|
11
|
+
];
|
|
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
|
+
const label = isFree ? 'Setting pricing (free)' : `Setting pricing ($${pricing.price})`;
|
|
27
|
+
await run('asc', args, { label, allowFailure: true });
|
|
28
|
+
// Set availability
|
|
29
|
+
if (pricing.availability) {
|
|
30
|
+
let territories = pricing.availability.territories;
|
|
31
|
+
if (pricing.availability.include_all && territories.length === 0) {
|
|
32
|
+
territories = await fetchAllTerritories();
|
|
33
|
+
}
|
|
34
|
+
if (territories.length > 0) {
|
|
35
|
+
await setAppAvailability(appId, pricing.availability.available_in_new_territories, territories);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function findFreePricePoint(appId, territory) {
|
|
40
|
+
const result = await run('asc', ['pricing', 'price-points', '--app', appId, '--territory', territory, '--output', 'json'], { label: 'Looking up free price point', allowFailure: true });
|
|
41
|
+
if (result.exitCode === 0 && result.stdout) {
|
|
42
|
+
try {
|
|
43
|
+
const data = JSON.parse(result.stdout);
|
|
44
|
+
const points = data?.data ?? data ?? [];
|
|
45
|
+
for (const p of points) {
|
|
46
|
+
const attrs = p.attributes ?? p;
|
|
47
|
+
if (attrs.customerPrice === '0.0' || attrs.customerPrice === '0' || attrs.customerPrice === '0.00') {
|
|
48
|
+
return p.id;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Fall through
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
async function setAppAvailability(appId, availableInNew, territories) {
|
|
59
|
+
// Use asc app-setup availability set — needs ASC_TIMEOUT for 175 territories
|
|
60
|
+
await run('asc', [
|
|
61
|
+
'app-setup', 'availability', 'set',
|
|
62
|
+
'--app', appId,
|
|
63
|
+
'--territory', territories.join(','),
|
|
64
|
+
'--available', 'true',
|
|
65
|
+
'--available-in-new-territories', String(availableInNew),
|
|
66
|
+
'--output', 'json',
|
|
67
|
+
], {
|
|
68
|
+
label: `Setting app availability (${territories.length} territories)`,
|
|
69
|
+
allowFailure: true,
|
|
70
|
+
timeout: 3 * 60_000,
|
|
71
|
+
env: { ASC_TIMEOUT: '180s' },
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async function fetchAllTerritories() {
|
|
75
|
+
const result = await run('asc', ['pricing', 'territories', 'list', '--output', 'json', '--paginate'], { label: 'Fetching all territories', allowFailure: true });
|
|
76
|
+
if (result.exitCode === 0 && result.stdout) {
|
|
77
|
+
try {
|
|
78
|
+
const data = JSON.parse(result.stdout);
|
|
79
|
+
const territories = Array.isArray(data) ? data : (data?.data ?? []);
|
|
80
|
+
return territories.map((t) => t.id).filter(Boolean);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Fall through
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
export async function setupSubscriptions(appId, group, availability) {
|
|
89
|
+
let groupId = await findGroupByName(appId, group.reference_name);
|
|
90
|
+
// Resolve territories for subscription availability
|
|
91
|
+
let territories = [];
|
|
92
|
+
if (availability) {
|
|
93
|
+
territories = availability.territories;
|
|
94
|
+
if (availability.include_all && territories.length === 0) {
|
|
95
|
+
territories = await fetchAllTerritories();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
for (const sub of group.subscriptions) {
|
|
99
|
+
await setupSubscription(appId, group.reference_name, groupId, sub, territories);
|
|
100
|
+
// After first subscription creates the group, fetch its ID for subsequent ones
|
|
101
|
+
if (!groupId) {
|
|
102
|
+
groupId = await findGroupByName(appId, group.reference_name);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Set group localizations (setup command doesn't handle these)
|
|
106
|
+
if (group.localizations && group.localizations.length > 0) {
|
|
107
|
+
// Re-fetch group ID if it was just created
|
|
108
|
+
if (!groupId) {
|
|
109
|
+
groupId = await findGroupByName(appId, group.reference_name);
|
|
110
|
+
}
|
|
111
|
+
if (groupId) {
|
|
112
|
+
for (const loc of group.localizations) {
|
|
113
|
+
const args = [
|
|
114
|
+
'subscriptions', 'groups', 'localizations', 'create',
|
|
115
|
+
'--group-id', groupId,
|
|
116
|
+
'--locale', loc.locale,
|
|
117
|
+
'--name', loc.name,
|
|
118
|
+
];
|
|
119
|
+
if (loc.custom_app_name)
|
|
120
|
+
args.push('--custom-app-name', loc.custom_app_name);
|
|
121
|
+
args.push('--output', 'json');
|
|
122
|
+
await run('asc', args, {
|
|
123
|
+
label: `Setting group localization (${loc.locale})`,
|
|
124
|
+
allowFailure: true,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async function setupSubscription(appId, groupReferenceName, existingGroupId, sub, territories) {
|
|
131
|
+
const args = ['subscriptions', 'setup', '--app', appId];
|
|
132
|
+
if (existingGroupId) {
|
|
133
|
+
args.push('--group-id', existingGroupId);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
args.push('--group-reference-name', groupReferenceName);
|
|
137
|
+
}
|
|
138
|
+
args.push('--reference-name', sub.ref_name, '--product-id', sub.product_id, '--subscription-period', sub.subscription_period);
|
|
139
|
+
if (sub.family_sharable)
|
|
140
|
+
args.push('--family-sharable');
|
|
141
|
+
const loc = sub.localizations[0];
|
|
142
|
+
if (loc) {
|
|
143
|
+
args.push('--locale', loc.locale);
|
|
144
|
+
args.push('--display-name', loc.name);
|
|
145
|
+
if (loc.description)
|
|
146
|
+
args.push('--description', loc.description);
|
|
147
|
+
}
|
|
148
|
+
const price = sub.prices[0];
|
|
149
|
+
if (price) {
|
|
150
|
+
if (price.price) {
|
|
151
|
+
args.push('--price', price.price);
|
|
152
|
+
}
|
|
153
|
+
else if (price.tier) {
|
|
154
|
+
args.push('--tier', price.tier);
|
|
155
|
+
}
|
|
156
|
+
args.push('--price-territory', price.territory);
|
|
157
|
+
}
|
|
158
|
+
if (territories.length > 0) {
|
|
159
|
+
args.push('--territories', territories.join(','));
|
|
160
|
+
args.push('--available-in-new-territories');
|
|
161
|
+
}
|
|
162
|
+
args.push('--output', 'json');
|
|
163
|
+
const result = await run('asc', args, {
|
|
164
|
+
label: `Setting up subscription: ${sub.ref_name}`,
|
|
165
|
+
allowFailure: true,
|
|
166
|
+
});
|
|
167
|
+
if (result.exitCode !== 0) {
|
|
168
|
+
if (result.stdout.includes('already been used') || result.stderr.includes('already been used')) {
|
|
169
|
+
logger.info(`Subscription "${sub.ref_name}" (${sub.product_id}) already exists, skipping.`);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const errMsg = result.stderr || result.stdout;
|
|
173
|
+
logger.warn(`Could not create subscription "${sub.ref_name}": ${errMsg.slice(0, 150)}`);
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Equalize pricing across all territories
|
|
178
|
+
const basePrice = sub.prices[0];
|
|
179
|
+
if (basePrice?.price) {
|
|
180
|
+
let subscriptionId = null;
|
|
181
|
+
try {
|
|
182
|
+
const data = JSON.parse(result.stdout);
|
|
183
|
+
subscriptionId = data?.subscriptionId ?? null;
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Fall through
|
|
187
|
+
}
|
|
188
|
+
if (subscriptionId) {
|
|
189
|
+
await run('asc', [
|
|
190
|
+
'subscriptions', 'pricing', 'equalize',
|
|
191
|
+
'--subscription-id', subscriptionId,
|
|
192
|
+
'--base-price', basePrice.price,
|
|
193
|
+
'--base-territory', basePrice.territory,
|
|
194
|
+
'--confirm',
|
|
195
|
+
'--output', 'json',
|
|
196
|
+
], {
|
|
197
|
+
label: `Equalizing prices for ${sub.ref_name} ($${basePrice.price} base)`,
|
|
198
|
+
allowFailure: true,
|
|
199
|
+
timeout: 2 * 60_000,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async function findGroupByName(appId, referenceName) {
|
|
205
|
+
const result = await run('asc', ['subscriptions', 'groups', 'list', '--app', appId, '--output', 'json'], { label: 'Looking up existing subscription groups', allowFailure: true });
|
|
206
|
+
if (result.exitCode === 0 && result.stdout) {
|
|
207
|
+
try {
|
|
208
|
+
const data = JSON.parse(result.stdout);
|
|
209
|
+
const groups = data?.data ?? data ?? [];
|
|
210
|
+
for (const g of groups) {
|
|
211
|
+
const attrs = g.attributes ?? g;
|
|
212
|
+
if (attrs.referenceName === referenceName || attrs.reference_name === referenceName) {
|
|
213
|
+
return g.id;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// Fall through
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=asc-monetization.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asc-monetization.service.js","sourceRoot":"","sources":["../../src/services/asc-monetization.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AppStoreAppConfig, AppStoreVersionConfig, AppStoreCategoriesConfig, AppStoreAgeRatingConfig, AppStoreLocalization, AppStoreEncryptionConfig, AppStoreReviewInfoConfig } from '../types/appstore.js';
|
|
2
|
+
export declare function validateAscInstalled(): Promise<void>;
|
|
3
|
+
export declare function validateAscAuth(): Promise<void>;
|
|
4
|
+
export declare function createBundleId(bundleId: string, name: string, platform: string): Promise<void>;
|
|
5
|
+
export declare function createApp(config: AppStoreAppConfig): Promise<string>;
|
|
6
|
+
export declare function updateContentRights(appId: string, contentRights: string): Promise<void>;
|
|
7
|
+
export declare function createVersion(appId: string, version: AppStoreVersionConfig, platform: string): Promise<string>;
|
|
8
|
+
export declare function setCategories(appId: string, categories: AppStoreCategoriesConfig): Promise<void>;
|
|
9
|
+
export declare function setAgeRating(appId: string, ageRating: AppStoreAgeRatingConfig): Promise<void>;
|
|
10
|
+
export declare function updateLocalization(versionId: string, appId: string, loc: AppStoreLocalization): Promise<void>;
|
|
11
|
+
export declare function setEncryption(appId: string, encryption: AppStoreEncryptionConfig): Promise<void>;
|
|
12
|
+
export declare function setReviewDetails(versionId: string, info: AppStoreReviewInfoConfig): Promise<void>;
|
|
13
|
+
export declare function setPrivacy(appId: string, privacyFilePath: string): Promise<void>;
|
|
14
|
+
export declare function findAppByBundleId(bundleId: string): Promise<string | null>;
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import { run, runStreaming } from '../utils/exec.js';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
import { confirm } from '../utils/prompt.js';
|
|
5
|
+
import { loadConfig } from '../utils/config.js';
|
|
6
|
+
export async function validateAscInstalled() {
|
|
7
|
+
try {
|
|
8
|
+
await execa('asc', ['--version']);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
logger.warn('asc CLI is not installed.');
|
|
12
|
+
console.log('');
|
|
13
|
+
const shouldInstall = await confirm(' Would you like to install it? (brew install asc)');
|
|
14
|
+
if (shouldInstall) {
|
|
15
|
+
await runStreaming('brew', ['install', 'asc'], { label: 'Installing asc CLI...' });
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
logger.fatal('asc CLI is required. Install manually: brew install asc');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export async function validateAscAuth() {
|
|
24
|
+
const result = await run('asc', ['auth', 'status', '--validate'], {
|
|
25
|
+
label: 'Checking App Store Connect authentication',
|
|
26
|
+
allowFailure: true,
|
|
27
|
+
});
|
|
28
|
+
// Check both exit code and whether credentials actually exist
|
|
29
|
+
const hasCredentials = result.exitCode === 0 && !result.stdout.includes('"credentials":[]');
|
|
30
|
+
if (!hasCredentials) {
|
|
31
|
+
logger.warn('asc CLI is not authenticated.');
|
|
32
|
+
// Auto-login with stored credentials if available
|
|
33
|
+
const config = await loadConfig();
|
|
34
|
+
if (config.ascKeyId && config.ascIssuerId && config.ascPrivateKeyPath) {
|
|
35
|
+
const authName = config.ascAuthName || 'KAppMaker';
|
|
36
|
+
await run('asc', [
|
|
37
|
+
'auth', 'login',
|
|
38
|
+
'--name', authName,
|
|
39
|
+
'--key-id', config.ascKeyId,
|
|
40
|
+
'--issuer-id', config.ascIssuerId,
|
|
41
|
+
'--private-key', config.ascPrivateKeyPath,
|
|
42
|
+
], { label: 'Logging in with saved API key...' });
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
console.log('');
|
|
46
|
+
const shouldLogin = await confirm(' Would you like to log in interactively? (asc auth login)');
|
|
47
|
+
if (shouldLogin) {
|
|
48
|
+
await runStreaming('asc', ['auth', 'login'], { label: 'Logging in to App Store Connect...' });
|
|
49
|
+
// Re-validate after login
|
|
50
|
+
const recheck = await run('asc', ['auth', 'status', '--validate'], {
|
|
51
|
+
label: 'Re-checking authentication',
|
|
52
|
+
allowFailure: true,
|
|
53
|
+
});
|
|
54
|
+
if (recheck.exitCode !== 0) {
|
|
55
|
+
logger.fatal('Authentication failed. Please try again manually.');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
logger.fatal('Authentication required.');
|
|
61
|
+
logger.info('Set up your API key: kappmaker config appstore-defaults --init');
|
|
62
|
+
logger.info('Or run manually: asc auth login --name "MyKey" --key-id <KEY_ID> --issuer-id <ISSUER_ID> --private-key <path-to-.p8>');
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function createBundleId(bundleId, name, platform) {
|
|
68
|
+
const result = await run('asc', ['bundle-ids', 'create', '--identifier', bundleId, '--name', name, '--platform', platform], { label: `Creating bundle ID: ${bundleId}`, allowFailure: true });
|
|
69
|
+
if (result.exitCode !== 0) {
|
|
70
|
+
logger.info(`Bundle ID "${bundleId}" may already exist, continuing...`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export async function createApp(config) {
|
|
74
|
+
// asc apps create requires Apple ID auth (not API key)
|
|
75
|
+
// Use runStreaming so user can enter credentials if needed
|
|
76
|
+
const shouldCreate = await confirm(' App not found. Create it now? (requires Apple ID login)');
|
|
77
|
+
if (shouldCreate) {
|
|
78
|
+
await runStreaming('asc', [
|
|
79
|
+
'apps', 'create',
|
|
80
|
+
'--name', config.name,
|
|
81
|
+
'--bundle-id', config.bundle_id,
|
|
82
|
+
'--sku', config.sku,
|
|
83
|
+
'--platform', config.platform,
|
|
84
|
+
'--primary-locale', config.primary_locale,
|
|
85
|
+
], { label: `Creating app: ${config.name}` });
|
|
86
|
+
const appId = await findAppByBundleId(config.bundle_id);
|
|
87
|
+
if (appId)
|
|
88
|
+
return appId;
|
|
89
|
+
logger.fatal('App creation may have failed. Check App Store Connect.');
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
logger.fatal('App must exist on App Store Connect before configuring it.');
|
|
93
|
+
logger.info('Create it manually at: https://appstoreconnect.apple.com/apps');
|
|
94
|
+
logger.info('Or run again and choose yes to create via Apple ID login.');
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
export async function updateContentRights(appId, contentRights) {
|
|
98
|
+
await run('asc', [
|
|
99
|
+
'apps', 'update',
|
|
100
|
+
'--id', appId,
|
|
101
|
+
'--content-rights', contentRights,
|
|
102
|
+
'--output', 'json',
|
|
103
|
+
], {
|
|
104
|
+
label: 'Updating content rights',
|
|
105
|
+
allowFailure: true,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export async function createVersion(appId, version, platform) {
|
|
109
|
+
const result = await run('asc', [
|
|
110
|
+
'versions', 'create',
|
|
111
|
+
'--app', appId,
|
|
112
|
+
'--platform', platform,
|
|
113
|
+
'--version', version.version_string,
|
|
114
|
+
'--copyright', version.copyright,
|
|
115
|
+
'--release-type', version.release_type,
|
|
116
|
+
'--output', 'json',
|
|
117
|
+
], { label: `Creating version ${version.version_string}`, allowFailure: true });
|
|
118
|
+
if (result.exitCode === 0) {
|
|
119
|
+
const versionId = parseVersionId(result.stdout);
|
|
120
|
+
if (versionId)
|
|
121
|
+
return versionId;
|
|
122
|
+
}
|
|
123
|
+
logger.info('Version may already exist, looking up...');
|
|
124
|
+
return findVersionId(appId, platform);
|
|
125
|
+
}
|
|
126
|
+
export async function setCategories(appId, categories) {
|
|
127
|
+
const args = ['categories', 'set', '--app', appId, '--primary', categories.primary];
|
|
128
|
+
if (categories.secondary)
|
|
129
|
+
args.push('--secondary', categories.secondary);
|
|
130
|
+
if (categories.primary_subcategory_one)
|
|
131
|
+
args.push('--primary-subcategory-one', categories.primary_subcategory_one);
|
|
132
|
+
if (categories.primary_subcategory_two)
|
|
133
|
+
args.push('--primary-subcategory-two', categories.primary_subcategory_two);
|
|
134
|
+
if (categories.secondary_subcategory_one)
|
|
135
|
+
args.push('--secondary-subcategory-one', categories.secondary_subcategory_one);
|
|
136
|
+
if (categories.secondary_subcategory_two)
|
|
137
|
+
args.push('--secondary-subcategory-two', categories.secondary_subcategory_two);
|
|
138
|
+
await run('asc', args, { label: 'Setting categories', allowFailure: true });
|
|
139
|
+
}
|
|
140
|
+
// Map config keys to asc CLI flag names (they differ significantly)
|
|
141
|
+
const AGE_RATING_FLAG_MAP = {
|
|
142
|
+
alcohol_tobacco_or_drug_use_or_references: 'alcohol-tobacco-drug-use',
|
|
143
|
+
contests: 'contests',
|
|
144
|
+
gambling_simulated: 'gambling-simulated',
|
|
145
|
+
guns_or_other_weapons: 'guns-or-other-weapons',
|
|
146
|
+
medical_or_treatment_information: 'medical-treatment',
|
|
147
|
+
profanity_or_crude_humor: 'profanity-humor',
|
|
148
|
+
sexual_content_graphic_and_nudity: 'sexual-content-graphic-nudity',
|
|
149
|
+
sexual_content_or_nudity: 'sexual-content-nudity',
|
|
150
|
+
horror_or_fear_themes: 'horror-fear',
|
|
151
|
+
mature_or_suggestive_themes: 'mature-suggestive',
|
|
152
|
+
violence_cartoon_or_fantasy: 'violence-cartoon',
|
|
153
|
+
violence_realistic: 'violence-realistic',
|
|
154
|
+
violence_realistic_prolonged_graphic_or_sadistic: 'violence-realistic-graphic',
|
|
155
|
+
advertising: 'advertising',
|
|
156
|
+
age_assurance: 'age-assurance',
|
|
157
|
+
gambling: 'gambling',
|
|
158
|
+
health_or_wellness_topics: 'health-or-wellness-topics',
|
|
159
|
+
loot_box: 'loot-box',
|
|
160
|
+
messaging_and_chat: 'messaging-and-chat',
|
|
161
|
+
parental_controls: 'parental-controls',
|
|
162
|
+
unrestricted_web_access: 'unrestricted-web-access',
|
|
163
|
+
user_generated_content: 'user-generated-content',
|
|
164
|
+
};
|
|
165
|
+
export async function setAgeRating(appId, ageRating) {
|
|
166
|
+
// Start with --all-none to set safe defaults, then override any non-default values
|
|
167
|
+
const args = ['age-rating', 'set', '--app', appId, '--all-none'];
|
|
168
|
+
for (const [key, value] of Object.entries(ageRating)) {
|
|
169
|
+
if (value === undefined || value === '' || value === 'NONE' || value === false)
|
|
170
|
+
continue;
|
|
171
|
+
const flag = AGE_RATING_FLAG_MAP[key];
|
|
172
|
+
if (flag) {
|
|
173
|
+
args.push(`--${flag}`, String(value));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
await run('asc', args, { label: 'Setting age rating', allowFailure: true });
|
|
177
|
+
}
|
|
178
|
+
export async function updateLocalization(versionId, appId, loc) {
|
|
179
|
+
const versionArgs = ['localizations', 'update', '--version', versionId, '--locale', loc.locale];
|
|
180
|
+
if (loc.description)
|
|
181
|
+
versionArgs.push('--description', loc.description);
|
|
182
|
+
if (loc.keywords)
|
|
183
|
+
versionArgs.push('--keywords', loc.keywords);
|
|
184
|
+
if (loc.whats_new)
|
|
185
|
+
versionArgs.push('--whats-new', loc.whats_new);
|
|
186
|
+
if (loc.promotional_text)
|
|
187
|
+
versionArgs.push('--promotional-text', loc.promotional_text);
|
|
188
|
+
if (loc.support_url)
|
|
189
|
+
versionArgs.push('--support-url', loc.support_url);
|
|
190
|
+
if (loc.marketing_url)
|
|
191
|
+
versionArgs.push('--marketing-url', loc.marketing_url);
|
|
192
|
+
await run('asc', versionArgs, { label: `Updating version localization (${loc.locale})`, allowFailure: true });
|
|
193
|
+
if (loc.subtitle || loc.privacy_policy_url) {
|
|
194
|
+
const appArgs = ['localizations', 'update', '--app', appId, '--type', 'app-info', '--locale', loc.locale];
|
|
195
|
+
if (loc.subtitle)
|
|
196
|
+
appArgs.push('--subtitle', loc.subtitle);
|
|
197
|
+
if (loc.privacy_policy_url)
|
|
198
|
+
appArgs.push('--privacy-policy-url', loc.privacy_policy_url);
|
|
199
|
+
await run('asc', appArgs, { label: `Updating app-info localization (${loc.locale})`, allowFailure: true });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export async function setEncryption(appId, encryption) {
|
|
203
|
+
await run('asc', [
|
|
204
|
+
'encryption', 'declarations', 'create',
|
|
205
|
+
'--app', appId,
|
|
206
|
+
'--app-description', encryption.description,
|
|
207
|
+
'--contains-proprietary-cryptography', String(encryption.contains_proprietary_cryptography),
|
|
208
|
+
'--contains-third-party-cryptography', String(encryption.contains_third_party_cryptography),
|
|
209
|
+
'--available-on-french-store', String(encryption.available_on_french_store),
|
|
210
|
+
'--output', 'json',
|
|
211
|
+
], { label: 'Setting encryption declarations', allowFailure: true });
|
|
212
|
+
}
|
|
213
|
+
export async function setReviewDetails(versionId, info) {
|
|
214
|
+
const args = [
|
|
215
|
+
'review', 'details-create',
|
|
216
|
+
'--version-id', versionId,
|
|
217
|
+
'--contact-email', info.contact_email,
|
|
218
|
+
'--contact-first-name', info.contact_first_name,
|
|
219
|
+
'--contact-last-name', info.contact_last_name,
|
|
220
|
+
'--contact-phone', info.contact_phone,
|
|
221
|
+
'--output', 'json',
|
|
222
|
+
];
|
|
223
|
+
if (info.demo_username)
|
|
224
|
+
args.push('--demo-account-name', info.demo_username);
|
|
225
|
+
if (info.demo_password)
|
|
226
|
+
args.push('--demo-account-password', info.demo_password);
|
|
227
|
+
if (info.notes)
|
|
228
|
+
args.push('--notes', info.notes);
|
|
229
|
+
await run('asc', args, { label: 'Setting review details', allowFailure: true });
|
|
230
|
+
}
|
|
231
|
+
export async function setPrivacy(appId, privacyFilePath) {
|
|
232
|
+
// Privacy requires Apple ID auth (asc web privacy is experimental)
|
|
233
|
+
const config = await loadConfig();
|
|
234
|
+
if (!config.appleId) {
|
|
235
|
+
logger.warn('Apple ID not configured. Privacy setup requires Apple ID.');
|
|
236
|
+
logger.info('Set it with: kappmaker config appstore-defaults --init');
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
logger.info('Applying privacy data usages...');
|
|
240
|
+
const applyArgs = [
|
|
241
|
+
'web', 'privacy', 'apply',
|
|
242
|
+
'--app', appId,
|
|
243
|
+
'--file', privacyFilePath,
|
|
244
|
+
'--apple-id', config.appleId,
|
|
245
|
+
'--allow-deletes',
|
|
246
|
+
'--confirm',
|
|
247
|
+
'--output', 'json',
|
|
248
|
+
];
|
|
249
|
+
await runStreaming('asc', applyArgs, { label: 'Applying privacy data usages', allowFailure: true });
|
|
250
|
+
const publishArgs = [
|
|
251
|
+
'web', 'privacy', 'publish',
|
|
252
|
+
'--app', appId,
|
|
253
|
+
'--apple-id', config.appleId,
|
|
254
|
+
'--confirm',
|
|
255
|
+
'--output', 'json',
|
|
256
|
+
];
|
|
257
|
+
await runStreaming('asc', publishArgs, { label: 'Publishing privacy data usages', allowFailure: true });
|
|
258
|
+
}
|
|
259
|
+
// ── Internal helpers ────────────────────────────────────────────────
|
|
260
|
+
function parseAppId(output) {
|
|
261
|
+
try {
|
|
262
|
+
const data = JSON.parse(output);
|
|
263
|
+
return data?.data?.id ?? data?.id ?? null;
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
const match = output.match(/["']?id["']?\s*[:=]\s*["']?(\d+)["']?/);
|
|
267
|
+
return match?.[1] ?? null;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function parseVersionId(output) {
|
|
271
|
+
try {
|
|
272
|
+
const data = JSON.parse(output);
|
|
273
|
+
return data?.data?.id ?? data?.id ?? null;
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
const match = output.match(/["']?id["']?\s*[:=]\s*["']?([a-zA-Z0-9-]+)["']?/);
|
|
277
|
+
return match?.[1] ?? null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
export async function findAppByBundleId(bundleId) {
|
|
281
|
+
const result = await run('asc', ['apps', 'list', '--output', 'json'], {
|
|
282
|
+
label: 'Looking up existing app',
|
|
283
|
+
allowFailure: true,
|
|
284
|
+
});
|
|
285
|
+
if (result.exitCode === 0) {
|
|
286
|
+
try {
|
|
287
|
+
const data = JSON.parse(result.stdout);
|
|
288
|
+
const apps = data?.data ?? data ?? [];
|
|
289
|
+
for (const app of apps) {
|
|
290
|
+
const attrs = app.attributes ?? app;
|
|
291
|
+
if (attrs.bundleId === bundleId || attrs.bundle_id === bundleId) {
|
|
292
|
+
return app.id;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Fall through
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
async function findVersionId(appId, platform) {
|
|
303
|
+
const result = await run('asc', ['versions', 'list', '--app', appId, '--output', 'json'], {
|
|
304
|
+
label: 'Looking up existing version',
|
|
305
|
+
allowFailure: true,
|
|
306
|
+
});
|
|
307
|
+
if (result.exitCode === 0) {
|
|
308
|
+
try {
|
|
309
|
+
const data = JSON.parse(result.stdout);
|
|
310
|
+
const versions = data?.data ?? data ?? [];
|
|
311
|
+
if (versions.length > 0)
|
|
312
|
+
return versions[0].id;
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
// Fall through to error
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
logger.fatal(`Could not find version for app "${appId}".`);
|
|
319
|
+
process.exit(1);
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=asc.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asc.service.js","sourceRoot":"","sources":["../../src/services/asc.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FalQueueResponse } from '../types/index.js';
|
|
2
|
+
export declare function submitGeneration(apiKey: string, prompt: string): Promise<FalQueueResponse>;
|
|
3
|
+
export declare function submitScreenshotGeneration(apiKey: string, prompt: string, imageUrls?: string[], resolution?: string): Promise<FalQueueResponse>;
|
|
4
|
+
export declare function submitEnhancement(apiKey: string, imagePath: string): Promise<FalQueueResponse>;
|
|
5
|
+
export declare function submitBackgroundRemoval(apiKey: string, imagePath: string): Promise<FalQueueResponse>;
|
|
6
|
+
export declare function uploadImageToImgbb(imgbbApiKey: string, filePath: string): Promise<string>;
|
|
7
|
+
export declare function submitTranslation(apiKey: string, imageUrl: string, locale: string, resolution?: string): Promise<FalQueueResponse>;
|
|
8
|
+
export declare function pollTranslation(apiKey: string, statusUrl: string, intervalMs?: number): Promise<void>;
|
|
9
|
+
export declare function pollUntilComplete(apiKey: string, statusUrl: string, opts?: {
|
|
10
|
+
label?: string;
|
|
11
|
+
intervalMs?: number;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
export declare function fetchResult(apiKey: string, responseUrl: string): Promise<string>;
|
|
14
|
+
export declare function downloadImage(url: string, outputPath: string): Promise<void>;
|
|
15
|
+
export declare function imageToDataUri(filePath: string): Promise<string>;
|