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.
Files changed (61) hide show
  1. package/README.md +254 -30
  2. package/dist/cli.js +86 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/adapty-setup.js +5 -4
  5. package/dist/commands/adapty-setup.js.map +1 -1
  6. package/dist/commands/config.js +11 -1
  7. package/dist/commands/config.js.map +1 -1
  8. package/dist/commands/create-appstore-app.js +18 -1
  9. package/dist/commands/create-appstore-app.js.map +1 -1
  10. package/dist/commands/create-logo.js +16 -5
  11. package/dist/commands/create-logo.js.map +1 -1
  12. package/dist/commands/create-play-app.d.ts +2 -0
  13. package/dist/commands/create-play-app.js +399 -0
  14. package/dist/commands/create-play-app.js.map +1 -0
  15. package/dist/commands/create.js +133 -54
  16. package/dist/commands/create.js.map +1 -1
  17. package/dist/commands/enhance.js +12 -4
  18. package/dist/commands/enhance.js.map +1 -1
  19. package/dist/commands/fastlane-configure.d.ts +1 -0
  20. package/dist/commands/fastlane-configure.js +9 -0
  21. package/dist/commands/fastlane-configure.js.map +1 -0
  22. package/dist/commands/generate-screenshots.js +22 -7
  23. package/dist/commands/generate-screenshots.js.map +1 -1
  24. package/dist/commands/gpc.d.ts +29 -0
  25. package/dist/commands/gpc.js +174 -0
  26. package/dist/commands/gpc.js.map +1 -0
  27. package/dist/commands/remove-bg.js +12 -4
  28. package/dist/commands/remove-bg.js.map +1 -1
  29. package/dist/commands/translate-screenshots.js +22 -8
  30. package/dist/commands/translate-screenshots.js.map +1 -1
  31. package/dist/services/asc-monetization.service.js +39 -29
  32. package/dist/services/asc-monetization.service.js.map +1 -1
  33. package/dist/services/asc.service.d.ts +1 -1
  34. package/dist/services/asc.service.js +94 -12
  35. package/dist/services/asc.service.js.map +1 -1
  36. package/dist/services/fastlane-setup.service.d.ts +1 -0
  37. package/dist/services/fastlane-setup.service.js +50 -0
  38. package/dist/services/fastlane-setup.service.js.map +1 -0
  39. package/dist/services/firebase.service.js +48 -18
  40. package/dist/services/firebase.service.js.map +1 -1
  41. package/dist/services/gpc-data-safety.service.d.ts +11 -0
  42. package/dist/services/gpc-data-safety.service.js +160 -0
  43. package/dist/services/gpc-data-safety.service.js.map +1 -0
  44. package/dist/services/gpc-monetization.service.d.ts +18 -0
  45. package/dist/services/gpc-monetization.service.js +244 -0
  46. package/dist/services/gpc-monetization.service.js.map +1 -0
  47. package/dist/services/gpc.service.d.ts +87 -0
  48. package/dist/services/gpc.service.js +338 -0
  49. package/dist/services/gpc.service.js.map +1 -0
  50. package/dist/services/refactor.service.js +44 -29
  51. package/dist/services/refactor.service.js.map +1 -1
  52. package/dist/templates/Fastfile.txt +209 -0
  53. package/dist/templates/data-safety-template.json +5483 -0
  54. package/dist/templates/googleplay-config.json +71 -0
  55. package/dist/types/googleplay.d.ts +113 -0
  56. package/dist/types/googleplay.js +2 -0
  57. package/dist/types/googleplay.js.map +1 -0
  58. package/dist/utils/config.d.ts +1 -0
  59. package/dist/utils/config.js +4 -0
  60. package/dist/utils/config.js.map +1 -1
  61. package/package.json +2 -2
package/README.md CHANGED
@@ -7,6 +7,7 @@ A single `kappmaker create` command can:
7
7
  - Create a Firebase project, register Android + iOS apps, enable authentication, and download SDK configs
8
8
  - Generate an AI-powered app logo with automatic background removal
9
9
  - Create an App Store Connect listing with metadata, categories, age rating, subscriptions, privacy declarations, and review contact info
10
+ - Configure an existing Google Play Console app — store listings, subscriptions, one-time in-app products, and the data safety declaration — via a built-in wrapper around the Play Publisher API (no external CLI, no extra dependencies)
10
11
  - Set up Adapty subscription products, paywalls, and placements for both iOS and Android
11
12
  - Refactor Gradle package names and application IDs
12
13
  - Set up the build environment (Android SDK, CocoaPods)
@@ -49,9 +50,9 @@ kappmaker config init
49
50
  Or set keys individually:
50
51
 
51
52
  ```bash
52
- kappmaker config set falApiKey <your-key> # Required for AI features (logo, screenshots, etc.)
53
- kappmaker config set imgbbApiKey <your-key> # Required for screenshot translation/generation
54
- kappmaker config set openaiApiKey <your-key> # Required for generate-screenshots
53
+ kappmaker config set falApiKey <your-key> # For AI features (logo, screenshots) — or prompted on first use
54
+ kappmaker config set imgbbApiKey <your-key> # For screenshot translation/generation — or prompted on first use
55
+ kappmaker config set openaiApiKey <your-key> # For generate-screenshots — or prompted on first use
55
56
  kappmaker config set templateRepo <your-repo> # Use your own template (default: KAppMaker)
56
57
  ```
57
58
 
@@ -96,10 +97,12 @@ Claude will check your config, verify API keys are set, and walk you through any
96
97
  - [`create <app-name>`](#create-app-name)
97
98
  - [`create-logo`](#create-logo)
98
99
  - [`create-appstore-app`](#create-appstore-app)
100
+ - [`gpc`](#gpc) — Google Play Console management
99
101
  - [`adapty setup`](#adapty-setup)
100
102
  - [Image Tools](#image-tools)
101
103
  - [`translate-screenshots`](#translate-screenshots-source-dir)
102
104
  - [`generate-screenshots`](#generate-screenshots)
105
+ - [`fastlane configure`](#fastlane-configure)
103
106
  - [`publish`](#publish)
104
107
  - [`generate-keystore`](#generate-keystore)
105
108
  - [`android-release-build`](#android-release-build)
@@ -112,15 +115,22 @@ Claude will check your config, verify API keys are set, and walk you through any
112
115
 
113
116
  | Command | Description |
114
117
  |---------|-------------|
115
- | [`kappmaker create <app-name>`](#create-app-name) | Full end-to-end app setup (Firebase, logo, App Store, Adapty, release build) |
118
+ | [`kappmaker create <app-name>`](#create-app-name) | Full end-to-end app setup (Firebase, logo, App Store Connect, Google Play Console, Adapty, release build) |
116
119
  | [`kappmaker create-logo`](#create-logo) | Generate an app logo with AI (fal.ai) |
117
120
  | [`kappmaker create-appstore-app`](#create-appstore-app) | Set up an app on App Store Connect (metadata, subscriptions, privacy) |
121
+ | [`kappmaker gpc setup`](#gpc) | Set up an existing app on Google Play Console (listings, subscriptions, IAPs, data safety) |
122
+ | [`kappmaker gpc listings push`](#gpc) | Push store listings from the Google Play config file |
123
+ | [`kappmaker gpc subscriptions list/push`](#gpc) | List or push subscriptions on Google Play Console |
124
+ | [`kappmaker gpc iap list/push`](#gpc) | List or push one-time in-app products on Google Play Console |
125
+ | [`kappmaker gpc data-safety push`](#gpc) | Push data safety declaration on Google Play Console |
126
+ | [`kappmaker gpc app-check --package <pkg>`](#gpc) | Check if a package exists on Google Play Console |
118
127
  | [`kappmaker adapty setup`](#adapty-setup) | Set up Adapty products, paywalls, and placements |
119
128
  | [`kappmaker image-split <image>`](#image-split-source) | Split a grid image into individual tiles |
120
129
  | [`kappmaker image-remove-bg <image>`](#image-remove-bg-source) | Remove background from an image (fal.ai) |
121
130
  | [`kappmaker image-enhance <image>`](#image-enhance-source) | Upscale and enhance image quality (fal.ai) |
122
131
  | [`kappmaker translate-screenshots [dir]`](#translate-screenshots-source-dir) | Translate screenshots to multiple locales (fal.ai) |
123
132
  | [`kappmaker generate-screenshots`](#generate-screenshots) | Generate marketing screenshots with AI (OpenAI + fal.ai) |
133
+ | [`kappmaker fastlane configure`](#fastlane-configure) | Set up Fastlane in the mobile app directory |
124
134
  | [`kappmaker publish`](#publish) | Build and upload to Google Play and/or App Store via Fastlane |
125
135
  | [`kappmaker generate-keystore`](#generate-keystore) | Generate an Android signing keystore for Play Store releases |
126
136
  | [`kappmaker android-release-build`](#android-release-build) | Build a signed Android release AAB |
@@ -137,7 +147,8 @@ These commands are standalone and don't depend on any specific boilerplate:
137
147
  - **AI logo generation** — Generate logo variations with fal.ai, pick your favorite, auto-remove background
138
148
  - **AI screenshot generation** — Generate marketing screenshots from a text description (8 style presets)
139
149
  - **Screenshot translation** — Translate app screenshots to 48+ locales in parallel
140
- - **App Store Connect setup** — Register bundle ID, create app, set metadata, categories, age rating, subscriptions, privacy, and review info
150
+ - **App Store Connect setup** — Register bundle ID (with Sign in with Apple, In-App Purchases, and Push Notifications capabilities enabled automatically), create app, set metadata, categories, age rating, subscriptions, privacy, and review info — fully automated, no manual App Store Connect steps needed
151
+ - **Google Play Console setup** — Push store listings, subscriptions (new monetization API), one-time in-app products, and the data safety declaration via a built-in wrapper around the Play Publisher API — no external CLI, no extra dependencies
141
152
  - **Adapty subscription setup** — Create products, paywalls, and placements for iOS and Android
142
153
  - **Version bumping** — Increment Android and iOS version codes and names in one command
143
154
  - **Image tools** — Split grids, remove backgrounds, enhance quality
@@ -165,6 +176,7 @@ The `create` command runs the full end-to-end setup. Some steps assume the [KApp
165
176
  - **Android SDK** — installed at `~/Library/Android/sdk` (configurable)
166
177
  - **asc CLI** (optional, for App Store Connect) — `brew install asc`
167
178
  - **Adapty CLI** (optional, for Adapty setup) — `npm install -g adapty`
179
+ - **No extra CLI for Google Play Console** — `kappmaker gpc` talks to the Play Publisher API directly via Node's built-in `fetch` and `crypto`; all it needs is the service-account JSON path set in `googleServiceAccountPath`
168
180
 
169
181
  ## External Services & API Keys
170
182
 
@@ -177,7 +189,7 @@ The CLI integrates with several external services for AI image generation, app s
177
189
  **How to get your key:**
178
190
  1. Sign up at [fal.ai](https://fal.ai)
179
191
  2. Go to [Dashboard > Keys](https://fal.ai/dashboard/keys) and create an API key
180
- 3. `kappmaker config set falApiKey <your-key>`
192
+ 3. `kappmaker config set falApiKey <your-key>` — or skip this and the CLI will prompt you the first time you run a command that needs it
181
193
 
182
194
  ### ImgBB — Image Hosting
183
195
 
@@ -186,7 +198,7 @@ The CLI integrates with several external services for AI image generation, app s
186
198
  **How to get your key:**
187
199
  1. Sign up at [imgbb.com](https://imgbb.com)
188
200
  2. Go to [api.imgbb.com](https://api.imgbb.com/) and get your free API key
189
- 3. `kappmaker config set imgbbApiKey <your-key>`
201
+ 3. `kappmaker config set imgbbApiKey <your-key>` — or prompted on first use
190
202
 
191
203
  ### OpenAI — Prompt Generation
192
204
 
@@ -195,7 +207,7 @@ The CLI integrates with several external services for AI image generation, app s
195
207
  **How to get your key:**
196
208
  1. Sign up at [platform.openai.com](https://platform.openai.com)
197
209
  2. Go to [API Keys](https://platform.openai.com/api-keys) and create a new key
198
- 3. `kappmaker config set openaiApiKey <your-key>`
210
+ 3. `kappmaker config set openaiApiKey <your-key>` — or prompted on first use
199
211
 
200
212
  ### App Store Connect CLI (asc) — iOS App Management & Publishing
201
213
 
@@ -232,9 +244,13 @@ The CLI integrates with several external services for AI image generation, app s
232
244
  1. Install: `npm install -g firebase-tools`
233
245
  2. The `create` command handles login and project creation interactively.
234
246
 
235
- ### Google Play Publisher — Android Store Uploads
247
+ ### Google Play Publisher — Android Store Uploads + Play Console Management
236
248
 
237
- **Used for:** Building and uploading Android AABs to Google Play Store, managing Play Store metadata and screenshots via `kappmaker publish --platform android`.
249
+ **Used for:**
250
+ - Building and uploading Android AABs to Google Play Store via `kappmaker publish --platform android` (Fastlane)
251
+ - Configuring store listings, subscriptions, in-app products, and the data safety declaration via `kappmaker gpc ...` (direct Publisher API call, no external CLI)
252
+
253
+ Both flows share the same service account JSON key — set it once, use it everywhere.
238
254
 
239
255
  **How to set up:**
240
256
 
@@ -249,6 +265,8 @@ The CLI integrates with several external services for AI image generation, app s
249
265
  kappmaker config set googleServiceAccountPath /path/to/google-service-app-publisher.json
250
266
  ```
251
267
 
268
+ > **Note:** Google Play does not allow creating new apps via any public API — you must create the app manually once in [Play Console](https://play.google.com/console/u/0/developers) before `kappmaker gpc` can configure it.
269
+
252
270
  ### App Store Publisher — iOS Store Uploads
253
271
 
254
272
  **Used for:** Building and uploading iOS IPAs to App Store Connect, managing App Store metadata and screenshots via `kappmaker publish --platform ios`.
@@ -285,15 +303,16 @@ kappmaker create Remimi
285
303
  | 2 | Firebase login | Opens browser for authentication |
286
304
  | 3 | Create Firebase project | `<appname>-app` (skips if exists) |
287
305
  | 4 | Create Firebase apps | Android + iOS apps (reuses existing if found) |
288
- | 5 | Enable anonymous auth | Via Identity Toolkit REST API (warns on failure) |
289
- | 6 | Download SDK configs | `google-services.json` + `GoogleService-Info.plist` (falls back to `Assets/` for custom templates) |
306
+ | 5 | Enable anonymous auth | If brand-new project, prompts user to click "Get started" in Firebase Console, then enables via API |
307
+ | 6 | Download SDK configs | `google-services.json` + `GoogleService-Info.plist` (verifies package match, falls back to `Assets/`) |
290
308
  | 7 | Logo generation | *Optional* — AI logo + automatic background removal |
291
- | 8 | App Store Connect | *Optional* full app setup (metadata, subs, privacy) |
292
- | 9 | Adapty setup | *Optional* — products, paywalls, placements |
293
- | 10 | Package refactor | Sets package name, application ID, bundle ID, and app name (TypeScript) |
294
- | 11 | Build environment | Creates `local.properties`, installs CocoaPods; *skipped with warning if `gradlew`/`Podfile` not found* |
295
- | 12 | Git remotes | Renames origin to upstream |
296
- | 13 | Android release build | Generates keystore if needed, builds signed AAB; *skipped if `gradlew` not found* |
309
+ | 8 | Package refactor | Renames packages, IDs, app name across all modules (composeApp, designsystem, libs) |
310
+ | 9 | Build environment | `local.properties`, CocoaPods, generates signing keystore if missing |
311
+ | 10 | Git remotes | Renames origin to upstream |
312
+ | | *Pre-store reminder* | *Prompts user to create Google Play Console app; App Store Connect is created automatically* |
313
+ | 11 | App Store Connect | *Optional* full app setup (metadata, subs, privacy); app created automatically via `asc web apps create` |
314
+ | 12 | Google Play Console | *Optional* Fastlane builds + uploads AAB to internal track, then runs full gpc setup |
315
+ | 13 | Adapty setup | *Optional* — products, paywalls, placements (links to ASC + Play products created in 11-12) |
297
316
 
298
317
  **Options:**
299
318
 
@@ -322,7 +341,7 @@ kappmaker create-logo --output ./custom/path/logo.png
322
341
 
323
342
  **Output:** `Assets/app_logo.png` + `Assets/logo_variations.png`
324
343
 
325
- Requires: `kappmaker config set falApiKey <your-key>`
344
+ Requires a fal.ai API key (prompted on first use if not set, or set manually: `kappmaker config set falApiKey <your-key>`)
326
345
 
327
346
  | Flag | Description | Default |
328
347
  |------|-------------|---------|
@@ -351,8 +370,8 @@ kappmaker create-appstore-app --config ./my-config.json
351
370
 
352
371
  1. Validate asc CLI and authentication
353
372
  2. Load config (from file or interactive prompts)
354
- 3. Register Bundle ID
355
- 4. Find or create app
373
+ 3. Register Bundle ID + enable capabilities (Sign in with Apple, In-App Purchases, Push Notifications). Name follows Apple convention: `XC com measify myapp` for `com.measify.myapp`
374
+ 4. Find or create app (fully automated via `asc web apps create` — no manual App Store Connect step needed)
356
375
  5. Set content rights
357
376
  6. Create app version (1.0.0)
358
377
  7. Set categories
@@ -401,6 +420,181 @@ During interactive setup, the CLI asks if the app accesses user content (AI imag
401
420
 
402
421
  ---
403
422
 
423
+ ## `gpc`
424
+
425
+ Google Play Console management — a tight wrapper around the official Google Play Android Publisher API. All subcommands authenticate via the service account JSON at `googleServiceAccountPath` (same one used by `publish --platform android`). **No external CLI and no extra npm dependencies** — the JWT flow and HTTPS calls are implemented with Node's built-in `crypto` and `fetch`.
426
+
427
+ > **Note:** Google Play does not allow creating new apps via any public API. Create the app manually once in [Play Console](https://play.google.com/console/u/0/developers), then use these commands to configure it.
428
+
429
+ ### `gpc setup`
430
+
431
+ Full end-to-end configuration (11 steps) — the Google Play parallel to `create-appstore-app`.
432
+
433
+ ```bash
434
+ kappmaker gpc setup
435
+ kappmaker gpc setup --config ./my-config.json
436
+ ```
437
+
438
+ **What it does:**
439
+
440
+ 1. Validate service account + obtain access token
441
+ 2. Load config (`./Assets/googleplay-config.json` or interactive prompts). **Auto-detects Play's actual default language** via a throwaway edit probe and rewrites `config.app.default_language` + the matching listing locale if your config drifted from reality. Also migrates legacy product IDs and legacy data-safety placeholders. Also reads tracks state to verify an APK/AAB is uploaded.
442
+ 3. Review summary and confirm
443
+ 4. Verify app exists on Play Console (fails fast with a deep link if not — Google does not allow app creation via the public API)
444
+ 5. Start a Play Console edit (only if the default-language listing has a title — otherwise steps 5-7 are skipped cleanly)
445
+ 6. Update app details (default language + contact website/email/phone)
446
+ 7. Update store listings per locale (title, short/full description, video); commits the edit
447
+ 8. **Pre-flight build check**, then create subscriptions via the new monetization API (`POST /subscriptions` with `productId` + `regionsVersion.version` as query params, base plans in body in DRAFT state, then `basePlans:activate` each one). Idempotent — existing product IDs are skipped. **Subscription listings are auto-cloned into Play's default language if missing.** Skipped with a clear message if no build is uploaded to any track (Google rejects monetization writes in that case).
448
+ 9. Create one-time in-app products via the **new** monetization API (`PATCH /onetimeproducts/{id}?allowMissing=true` + `purchaseOptions:batchUpdateStates` to activate). Idempotent via `GET /oneTimeProducts`. Replaces the legacy `/inappproducts` endpoint that returns 403 on migrated apps.
449
+ 10. Update the data safety declaration: converts `data_safety` JSON → Google's CSV format using a bundled canonical template + KAppMaker defaults matching the iOS App Store privacy set, then posts it via `POST /dataSafety` with `{ safetyLabels: "<csv>" }`. Respects `data_safety_csv_path` as an escape hatch for pre-exported CSVs.
450
+ 11. Print a checklist of policy declarations that the Publisher API does NOT expose (content rating / IARC, target audience, ads, health apps, financial features, government apps, news apps, gambling, COVID-19 tracing, app access, advertising ID, families compliance, app pricing tier) with a deep link to Play Console's App content page. All verified against Google's v3 discovery document — none have REST endpoints.
451
+
452
+ ### `gpc listings push`
453
+
454
+ Push just the store listings section from the config file (useful after editing copy).
455
+
456
+ ```bash
457
+ kappmaker gpc listings push
458
+ kappmaker gpc listings push --config ./my-config.json
459
+ ```
460
+
461
+ Runs a single edit transaction: updates app details → updates every listing locale → commits.
462
+
463
+ ### `gpc subscriptions list`
464
+
465
+ Read-only — lists existing subscription product IDs on Play Console.
466
+
467
+ ```bash
468
+ kappmaker gpc subscriptions list --package com.example.myapp
469
+ kappmaker gpc subscriptions list # uses app.package_name from the config file
470
+ ```
471
+
472
+ ### `gpc subscriptions push`
473
+
474
+ Create or reuse subscriptions from the config file. Idempotent — already-existing product IDs are skipped, and base plans are activated even for reused subscriptions.
475
+
476
+ ```bash
477
+ kappmaker gpc subscriptions push
478
+ ```
479
+
480
+ Uses the **new** monetization API (`applications/{pkg}/subscriptions` + `basePlans:activate`). Auto-generated IDs:
481
+
482
+ | Field | Format | Example ($6.99 weekly) |
483
+ |---|---|---|
484
+ | `productId` (subscription) | `{appname}.premium.{period}.v1` | `myapp.premium.weekly.v1` |
485
+ | `basePlanId` | `autorenew-{period}-{priceDigits}-v1` | `autorenew-weekly-699-v1` |
486
+ | Subscription title | `{AppName} Premium {PeriodLabel}` | `MyApp Premium Weekly` |
487
+
488
+ These align 1-to-1 with what `adapty setup` writes to `android_product_id` and `android_base_plan_id`, so Adapty links the products automatically without any extra configuration.
489
+
490
+ ### `gpc iap list`
491
+
492
+ Read-only — lists existing one-time in-app product SKUs on Play Console.
493
+
494
+ ```bash
495
+ kappmaker gpc iap list --package com.example.myapp
496
+ kappmaker gpc iap list
497
+ ```
498
+
499
+ ### `gpc iap push`
500
+
501
+ Create or reuse one-time in-app products from the config file. Idempotent — already-existing product IDs are skipped.
502
+
503
+ ```bash
504
+ kappmaker gpc iap push
505
+ ```
506
+
507
+ Uses the **new** monetization API: `PATCH /applications/{pkg}/onetimeproducts/{id}?allowMissing=true` to create/update the product, then `purchaseOptions:batchUpdateStates` with an `activatePurchaseOptionRequest` to activate the default purchase option so it's available to buyers. Replaces the legacy `/inappproducts` endpoint, which Google now rejects with "Please migrate to the new publishing API" on migrated apps.
508
+
509
+ ### `gpc data-safety push`
510
+
511
+ Push only the data safety declaration. Faster than running the full `setup` when you're iterating on the privacy answers.
512
+
513
+ ```bash
514
+ kappmaker gpc data-safety push
515
+ ```
516
+
517
+ **How it works under the hood:** Google's `POST /applications/{pkg}/dataSafety` does not take structured JSON — it takes a CSV file (the same one Play Console exports from Policy → App content → Data safety → Export to CSV), wrapped in `{ safetyLabels: "<csv>" }`. KAppMaker lets you stay in JSON and converts internally.
518
+
519
+ **Two ways to configure it in `Assets/googleplay-config.json`:**
520
+
521
+ 1. **Structured JSON (recommended)** — `data_safety.answers` overlay on top of KAppMaker defaults:
522
+
523
+ **Account creation:** "My app does not allow users to create an account" (`PSL_ACM_NONE`).
524
+
525
+ **Data deletion:** skipped entirely (the question is optional).
526
+
527
+ **Data types collected:**
528
+
529
+ | Data type | Play Question / Response |
530
+ |---|---|
531
+ | User IDs | `PSL_DATA_TYPES_PERSONAL/PSL_USER_ACCOUNT` |
532
+ | Device ID | `PSL_DATA_TYPES_IDENTIFIERS/PSL_DEVICE_ID` |
533
+ | Crash logs | `PSL_DATA_TYPES_APP_PERFORMANCE/PSL_CRASH_LOGS` |
534
+ | Diagnostics | `PSL_DATA_TYPES_APP_PERFORMANCE/PSL_PERFORMANCE_DIAGNOSTICS` |
535
+ | Other performance | `PSL_DATA_TYPES_APP_PERFORMANCE/PSL_OTHER_PERFORMANCE` |
536
+ | App interactions | `PSL_DATA_TYPES_APP_ACTIVITY/PSL_USER_INTERACTION` |
537
+
538
+ **Data handling (same for ALL data types above):**
539
+ - Collected only, **not shared** with third parties
540
+ - **Processed ephemerally** (YES)
541
+ - **Collection is required** — users can't turn it off
542
+ - Purposes: Analytics (+ App functionality for Device ID)
543
+
544
+ **Security:** encrypted in transit = YES.
545
+
546
+ Example config (just use the default — override if you need to add data types or change handling):
547
+ ```json
548
+ "data_safety": {
549
+ "apply_defaults": true,
550
+ "answers": {}
551
+ }
552
+ ```
553
+
554
+ To override a specific answer, add keys to `answers`. Keys are either `QuestionID` (for single-answer rows) or `QuestionID/ResponseID` (for multi-choice rows). Values are `true` / `false` / URL string / `null`:
555
+ ```json
556
+ "data_safety": {
557
+ "apply_defaults": true,
558
+ "answers": {
559
+ "PSL_DATA_TYPES_PERSONAL/PSL_USER_ACCOUNT": true,
560
+ "PSL_DATA_TYPES_LOCATION/PSL_APPROX_LOCATION": true
561
+ }
562
+ }
563
+ ```
564
+
565
+ Internally, KAppMaker loads a canonical 783-row template (extracted from the well-maintained [fastlane-plugin-google_data_safety](https://github.com/owenbean400/fastlane-plugin-google_data_safety)), applies defaults + your overrides, emits a filled CSV, and uploads it via `POST /dataSafety`.
566
+
567
+ 2. **Escape hatch: CSV file** — if you already exported a real CSV from Play Console and filled it in:
568
+ ```json
569
+ "data_safety_csv_path": "Assets/data-safety.csv"
570
+ ```
571
+ When this field is set and the file exists, it takes priority over the JSON block and is uploaded verbatim.
572
+
573
+ **Important:** Review the summary Play Console shows after the push before publishing. Google's conditional question logic may reject some answers — paste the error and I'll adjust the defaults.
574
+
575
+ ### `gpc app-check`
576
+
577
+ Quick read-only probe to verify that an app exists on Play Console. Useful for CI scripts and before running destructive operations.
578
+
579
+ ```bash
580
+ kappmaker gpc app-check --package com.example.myapp
581
+ ```
582
+
583
+ Exits 0 if found, 2 if missing (prints the Play Console deep link).
584
+
585
+ ### Config
586
+
587
+ All `gpc` subcommands except `app-check` load `./Assets/googleplay-config.json` by default. The first run of `kappmaker gpc setup` creates it interactively.
588
+
589
+ | Flag | Description | Default |
590
+ |------|-------------|---------|
591
+ | `--config <path>` | Path to JSON config file | `./Assets/googleplay-config.json` |
592
+ | `--package <name>` | (list commands) Override the package name from config | — |
593
+
594
+ **Alias:** `kappmaker create-play-app` is kept as a shortcut for `kappmaker gpc setup` (the entire 11-step flow is also what the top-level `kappmaker create` calls under step 8 when you answer yes to the Google Play Console prompt).
595
+
596
+ ---
597
+
404
598
  ## `adapty setup`
405
599
 
406
600
  Sets up Adapty subscription products, paywalls, and placements using the [Adapty CLI](https://github.com/adaptyteam/adapty-cli).
@@ -424,12 +618,12 @@ kappmaker adapty setup --config ./my-config.json
424
618
 
425
619
  ### Default products
426
620
 
427
- | Product | Period | Price | iOS Product ID | Android Base Plan ID |
428
- |---------|--------|-------|----------------|---------------------|
429
- | Weekly Premium | `weekly` | $6.99 | `{appname}.premium.weekly.v1.699.v1` | `autorenew-weekly-price-v1` |
430
- | Yearly Premium | `annual` | $29.99 | `{appname}.premium.yearly.v1.2999.v1` | `autorenew-yearly-price-v1` |
621
+ | Product | Period | Price | iOS Product ID | Android Product ID | Android Base Plan ID |
622
+ |---------|--------|-------|----------------|--------------------|-----------------------|
623
+ | Weekly Premium | `weekly` | $6.99 | `{appname}.premium.weekly.v1.699.v1` | `{appname}.premium.weekly.v1` | `autorenew-weekly-699-v1` |
624
+ | Yearly Premium | `annual` | $29.99 | `{appname}.premium.yearly.v1.2999.v1` | `{appname}.premium.yearly.v1` | `autorenew-yearly-2999-v1` |
431
625
 
432
- iOS product IDs match the App Store Connect format so they align across both systems.
626
+ iOS product IDs match the App Store Connect format, and Android IDs match what `kappmaker gpc setup` writes to Google Play Console — so all three systems link automatically without extra configuration.
433
627
 
434
628
  ### Default paywalls and placements
435
629
 
@@ -446,7 +640,7 @@ iOS product IDs match the App Store Connect format so they align across both sys
446
640
 
447
641
  ## Image Tools
448
642
 
449
- AI-powered image commands. Require a fal.ai API key: `kappmaker config set falApiKey <your-key>`
643
+ AI-powered image commands. A fal.ai API key is prompted on first use if not already configured.
450
644
 
451
645
  ### `image-split <source>`
452
646
 
@@ -605,6 +799,26 @@ Requires: `falApiKey`, `openaiApiKey`, and `imgbbApiKey` (if using reference ima
605
799
 
606
800
  ---
607
801
 
802
+ ## `fastlane configure`
803
+
804
+ Sets up Fastlane in the mobile app directory. Creates `Gemfile`, `fastlane/Fastfile`, and runs `bundle install`.
805
+
806
+ ```bash
807
+ kappmaker fastlane configure
808
+ ```
809
+
810
+ Run from the project root (containing `MobileApp/`) or inside `MobileApp/` directly.
811
+
812
+ **What it creates:**
813
+ - `Gemfile` — Ruby gem dependencies (fastlane)
814
+ - `fastlane/Fastfile` — Build and upload lanes for Android (Play Store) and iOS (App Store)
815
+
816
+ If files already exist, they are skipped (not overwritten).
817
+
818
+ **Prerequisite for:** `kappmaker publish`
819
+
820
+ ---
821
+
608
822
  ## `publish`
609
823
 
610
824
  Builds and uploads your app to Google Play and/or App Store using Fastlane.
@@ -775,8 +989,8 @@ kappmaker config adapty-defaults --save ./config.json # Save as global defaul
775
989
  | `ascKeyId` | App Store Connect API Key ID | — |
776
990
  | `ascIssuerId` | App Store Connect Issuer ID | — |
777
991
  | `ascPrivateKeyPath` | Path to `.p8` private key | — |
778
- | `appleId` | Apple ID email (for privacy setup) | — |
779
- | `googleServiceAccountPath` | Google Play service account JSON path | `~/credentials/google-service-app-publisher.json` |
992
+ | `appleId` | Apple ID email (for app creation & privacy setup) | — |
993
+ | `googleServiceAccountPath` | Google Play service account JSON used by both Fastlane publish and `kappmaker gpc` | `~/credentials/google-service-app-publisher.json` |
780
994
 
781
995
  ### Global defaults
782
996
 
@@ -796,15 +1010,18 @@ src/
796
1010
  index.ts # Entry point
797
1011
  cli.ts # Command registration (Commander.js)
798
1012
  commands/
799
- create.ts # Full app setup (13-step orchestrator)
1013
+ create.ts # Full app setup (13-step orchestrator: Firebase + logo + refactor + build + ASC + GPC + Adapty)
800
1014
  create-logo.ts # AI logo generation
801
1015
  create-appstore-app.ts # App Store Connect setup (13-step orchestrator)
1016
+ create-play-app.ts # Google Play Console setup (11-step orchestrator, aliased by `gpc setup`)
1017
+ gpc.ts # kappmaker gpc subcommands (setup, listings, subscriptions, iap, data-safety, app-check)
802
1018
  adapty-setup.ts # Adapty setup (8-step orchestrator)
803
1019
  split.ts # Grid image splitter
804
1020
  remove-bg.ts # Background removal
805
1021
  enhance.ts # Image quality enhancement
806
1022
  translate-screenshots.ts # Screenshot translation
807
1023
  generate-screenshots.ts # AI screenshot generation
1024
+ fastlane-configure.ts # Set up Fastlane (Gemfile + Fastfile + bundle install)
808
1025
  publish.ts # Build and upload to Play Store / App Store
809
1026
  generate-keystore.ts # Generate Android signing keystore
810
1027
  android-release-build.ts # Build signed Android release AAB
@@ -817,8 +1034,12 @@ src/
817
1034
  openai.service.ts # OpenAI API (prompt generation)
818
1035
  asc.service.ts # App Store Connect CLI wrapper
819
1036
  asc-monetization.service.ts # ASC pricing, subscriptions, IAP
1037
+ gpc.service.ts # Google Play Publisher API wrapper (JWT auth, edits, listings, data safety) — no external CLI
1038
+ gpc-monetization.service.ts # Play new monetization API (subscriptions + base plans + onetimeproducts, NOT legacy inappproducts)
1039
+ gpc-data-safety.service.ts # JSON → CSV converter for Play Data Safety form (uses bundled canonical template)
820
1040
  adapty.service.ts # Adapty CLI wrapper
821
1041
  git.service.ts # Git operations
1042
+ fastlane-setup.service.ts # Fastlane scaffolding (Gemfile + Fastfile)
822
1043
  publish.service.ts # Android/iOS publishing via Fastlane
823
1044
  keystore.service.ts # Android keystore generation
824
1045
  gradle.service.ts # Gradle build helpers (local.properties, clean & build)
@@ -837,9 +1058,12 @@ src/
837
1058
  prompt.ts # Interactive prompts
838
1059
  templates/
839
1060
  appstore-config.json # Default App Store Connect config
1061
+ googleplay-config.json # Default Google Play Console config
1062
+ data-safety-template.json # Canonical Play Data Safety form schema (783 rows, 217 Q IDs)
840
1063
  adapty-config.json # Default Adapty config
841
1064
  types/
842
1065
  index.ts # Shared interfaces
843
1066
  appstore.ts # App Store Connect types
1067
+ googleplay.ts # Google Play Console types
844
1068
  adapty.ts # Adapty types
845
1069
  ```
package/dist/cli.js CHANGED
@@ -7,6 +7,8 @@ import { enhance } from './commands/enhance.js';
7
7
  import { translateScreenshots } from './commands/translate-screenshots.js';
8
8
  import { configList, configGet, configSet, configPath, configInit, configAppStoreDefaults, configAdaptyDefaults } from './commands/config.js';
9
9
  import { createAppStoreApp } from './commands/create-appstore-app.js';
10
+ import { createPlayApp } from './commands/create-play-app.js';
11
+ import { gpcSetup, gpcAppCheck, gpcListingsPush, gpcSubscriptionsList, gpcSubscriptionsPush, gpcIapList, gpcIapPush, gpcDataSafetyPush, } from './commands/gpc.js';
10
12
  import { generateScreenshots } from './commands/generate-screenshots.js';
11
13
  import { adaptySetup } from './commands/adapty-setup.js';
12
14
  import { updateVersion } from './commands/update-version.js';
@@ -14,6 +16,7 @@ import { refactorCommand } from './commands/refactor.js';
14
16
  import { generateKeystoreCommand } from './commands/generate-keystore.js';
15
17
  import { androidReleaseBuild } from './commands/android-release-build.js';
16
18
  import { publishCommand } from './commands/publish.js';
19
+ import { fastlaneConfigure } from './commands/fastlane-configure.js';
17
20
  export function createCli() {
18
21
  const program = new Command();
19
22
  program
@@ -132,6 +135,79 @@ export function createCli() {
132
135
  .action(async (options) => {
133
136
  await createAppStoreApp(options);
134
137
  });
138
+ // ── Google Play Console ────────────────────────────────────────────
139
+ program
140
+ .command('create-play-app')
141
+ .description('Alias for `kappmaker gpc setup` — configure an existing Google Play app end-to-end')
142
+ .option('--config <path>', 'Path to Google Play JSON config file')
143
+ .action(async (options) => {
144
+ await createPlayApp(options);
145
+ });
146
+ const gpcCmd = program
147
+ .command('gpc')
148
+ .description('Google Play Console management (listings, subscriptions, IAPs, data safety)');
149
+ gpcCmd
150
+ .command('setup')
151
+ .description('Full end-to-end Google Play Console setup (11 steps)')
152
+ .option('--config <path>', 'Path to Google Play JSON config file')
153
+ .action(async (options) => {
154
+ await gpcSetup(options);
155
+ });
156
+ gpcCmd
157
+ .command('app-check')
158
+ .description('Check whether an app exists on Google Play Console')
159
+ .requiredOption('--package <name>', 'Android package name (e.g. com.example.myapp)')
160
+ .action(async (options) => {
161
+ await gpcAppCheck(options);
162
+ });
163
+ const gpcListings = gpcCmd.command('listings').description('Manage store listings');
164
+ gpcListings
165
+ .command('push')
166
+ .description('Push listings from the Google Play config file (title, short/full description, video)')
167
+ .option('--config <path>', 'Path to Google Play JSON config file')
168
+ .action(async (options) => {
169
+ await gpcListingsPush(options);
170
+ });
171
+ const gpcSubs = gpcCmd.command('subscriptions').description('Manage subscriptions (new monetization API)');
172
+ gpcSubs
173
+ .command('list')
174
+ .description('List existing subscriptions on Google Play Console')
175
+ .option('--package <name>', 'Android package name (defaults to config app.package_name)')
176
+ .option('--config <path>', 'Path to Google Play JSON config file')
177
+ .action(async (options) => {
178
+ await gpcSubscriptionsList(options);
179
+ });
180
+ gpcSubs
181
+ .command('push')
182
+ .description('Create/reuse subscriptions from the Google Play config file (idempotent)')
183
+ .option('--config <path>', 'Path to Google Play JSON config file')
184
+ .action(async (options) => {
185
+ await gpcSubscriptionsPush(options);
186
+ });
187
+ const gpcIap = gpcCmd.command('iap').description('Manage one-time in-app products');
188
+ gpcIap
189
+ .command('list')
190
+ .description('List existing one-time in-app products')
191
+ .option('--package <name>', 'Android package name (defaults to config app.package_name)')
192
+ .option('--config <path>', 'Path to Google Play JSON config file')
193
+ .action(async (options) => {
194
+ await gpcIapList(options);
195
+ });
196
+ gpcIap
197
+ .command('push')
198
+ .description('Create/reuse in-app products from the Google Play config file (idempotent)')
199
+ .option('--config <path>', 'Path to Google Play JSON config file')
200
+ .action(async (options) => {
201
+ await gpcIapPush(options);
202
+ });
203
+ const gpcDataSafety = gpcCmd.command('data-safety').description('Manage the Play Store data safety declaration');
204
+ gpcDataSafety
205
+ .command('push')
206
+ .description('Push data safety declaration from the Google Play config file')
207
+ .option('--config <path>', 'Path to Google Play JSON config file')
208
+ .action(async (options) => {
209
+ await gpcDataSafetyPush(options);
210
+ });
135
211
  // ── Adapty ──────────────────────────────────────────────────────────
136
212
  const adapty = program
137
213
  .command('adapty')
@@ -162,6 +238,16 @@ export function createCli() {
162
238
  .action(async (options) => {
163
239
  await androidReleaseBuild(options);
164
240
  });
241
+ // ── Fastlane ───────────────────────────────────────────────────────
242
+ const fastlaneCmd = program
243
+ .command('fastlane')
244
+ .description('Fastlane setup and management');
245
+ fastlaneCmd
246
+ .command('configure')
247
+ .description('Set up Fastlane in the mobile app directory (Gemfile + Fastfile + bundle install)')
248
+ .action(async () => {
249
+ await fastlaneConfigure();
250
+ });
165
251
  // ── Publish ────────────────────────────────────────────────────────
166
252
  function collect(value, previous) {
167
253
  return previous.concat([value]);
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9I,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,QAAQ,EACR,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CAAC,YAAY,EAAE,4CAA4C,CAAC;SACpE,MAAM,CAAC,uBAAuB,EAAE,oCAAoC,CAAC;SACrE,MAAM,CAAC,sBAAsB,EAAE,wCAAwC,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAAO,EAAE,EAAE;QACzC,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,sEAAsE;IAEtE,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,CAAC;SAC3C,MAAM,CAAC,YAAY,EAAE,mBAAmB,EAAE,GAAG,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,EAAE,MAAM,CAAC;SACzE,MAAM,CAAC,gBAAgB,EAAE,sCAAsC,EAAE,GAAG,CAAC;SACrE,MAAM,CAAC,kBAAkB,EAAE,6BAA6B,EAAE,KAAK,CAAC;SAChE,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,KAAK,CAAC;SAClE,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,EAAE,GAAG,CAAC;SAC7D,MAAM,CAAC,kBAAkB,EAAE,wEAAwE,CAAC;SACpG,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAAO,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI;YACvB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpE,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,KAAK,CAAC,MAAM,EAAE;YAClB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;YAC9B,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAClC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,mDAAmD,CAAC;SAChE,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;SACzC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAAO,EAAE,EAAE;QACxC,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,yCAAyC,CAAC;SACtD,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;SACzC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAAO,EAAE,EAAE;QACxC,MAAM,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,mEAAmE,CAAC;SAChF,QAAQ,CAAC,cAAc,EAAE,mHAAmH,CAAC;SAC7I,MAAM,CAAC,iBAAiB,EAAE,8DAA8D,CAAC;SACzF,MAAM,CAAC,sBAAsB,EAAE,kDAAkD,CAAC;SAClF,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,CAAC;SACtC,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,CAAC;SACzC,MAAM,CAAC,oBAAoB,EAAE,4BAA4B,EAAE,IAAI,CAAC;SAChE,MAAM,CAAC,2BAA2B,EAAE,+BAA+B,EAAE,IAAI,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAAO,EAAE,EAAE;QACvD,MAAM,WAAW,GAAG,SAAS,IAAI,gEAAgE,CAAC;QAClG,MAAM,oBAAoB,CAAC,WAAW,EAAE;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,gFAAgF,CAAC;SAC7F,cAAc,CAAC,iBAAiB,EAAE,kDAAkD,CAAC;SACrF,MAAM,CAAC,eAAe,EAAE,gFAAgF,CAAC;SACzG,MAAM,CAAC,cAAc,EAAE,iBAAiB,EAAE,GAAG,CAAC;SAC9C,MAAM,CAAC,gBAAgB,EAAE,qDAAqD,CAAC;SAC/E,MAAM,CAAC,oBAAoB,EAAE,4BAA4B,EAAE,IAAI,CAAC;SAChE,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,CAAC;SACtC,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,CAAC;SACzC,MAAM,CAAC,2BAA2B,EAAE,+BAA+B,EAAE,IAAI,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,mBAAmB,CAAC;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,qEAAqE;IAErE,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,yFAAyF,CAAC;SACtG,MAAM,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEL,sEAAsE;IAEtE,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,oFAAoF,CAAC;SACjG,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,6EAA6E,CAAC,CAAC;IAE9F,MAAM;SACH,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,oDAAoD,CAAC;SACjE,cAAc,CAAC,kBAAkB,EAAE,+CAA+C,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IACpF,WAAW;SACR,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uFAAuF,CAAC;SACpG,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAC;IAC3G,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,kBAAkB,EAAE,4DAA4D,CAAC;SACxF,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IACL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IACpF,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,kBAAkB,EAAE,4DAA4D,CAAC;SACxF,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACL,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4EAA4E,CAAC;SACzF,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAC;IACjH,aAAa;SACV,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEL,uEAAuE;IAEvE,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gCAAgC,CAAC,CAAC;IAEjD,MAAM;SACH,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,sEAAsE;IAEtE,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;SAC5D,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,CAAC;SACjE,MAAM,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,gBAAgB,EAAE,0DAA0D,CAAC;SACpF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEL,sEAAsE;IAEtE,MAAM,WAAW,GAAG,OAAO;SACxB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAEhD,WAAW;SACR,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,mFAAmF,CAAC;SAChG,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,iBAAiB,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,sEAAsE;IAEtE,SAAS,OAAO,CAAC,KAAa,EAAE,QAAkB;QAChD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,EAAE,OAAO,EAAE,EAAE,CAAC;SAC1F,MAAM,CAAC,gBAAgB,EAAE,2DAA2D,EAAE,YAAY,CAAC;SACnG,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,EAAE,KAAK,CAAC;SAC1E,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,KAAK,CAAC;SAC3D,MAAM,CAAC,iBAAiB,EAAE,sDAAsD,EAAE,KAAK,CAAC;SACxF,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,EAAE,IAAI,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,sEAAsE;IAEtE,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,cAAc,CAAC,eAAe,EAAE,wDAAwD,CAAC;SACzF,cAAc,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;SACrE,MAAM,CAAC,mBAAmB,EAAE,mEAAmE,CAAC;SAChG,MAAM,CAAC,uBAAuB,EAAE,4DAA4D,CAAC;SAC7F,MAAM,CAAC,uBAAuB,EAAE,8EAA8E,CAAC;SAC/G,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,sEAAsE;IAEtE,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,oEAAoE,CAAC;SACjF,MAAM,CAAC,sBAAsB,EAAE,2CAA2C,CAAC;SAC3E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,sEAAsE;IAEtE,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAE3C,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,oBAAoB,CAAC;SACjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC5B,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,oBAAoB,CAAC;SACjC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;SACtC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE;QAC3C,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,yEAAyE,CAAC;SACtF,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,yCAAyC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -227,13 +227,14 @@ function fillProductDefaults(config) {
227
227
  if (!product.ios_product_id) {
228
228
  product.ios_product_id = `${appNameLower}.premium.${suffix}.v1.${priceTag}.v1`;
229
229
  }
230
- // Android product ID: appname.premium.weekly.v1
230
+ // Android product ID (matches what `create-play-app` creates on Play): appname.premium.weekly.v1
231
231
  if (!product.android_product_id) {
232
232
  product.android_product_id = `${appNameLower}.premium.${suffix}.v1`;
233
233
  }
234
- // Android base plan ID: autorenew-weekly-price-v1
235
- if (!product.android_base_plan_id) {
236
- product.android_base_plan_id = `autorenew-${suffix}-price-v1`;
234
+ // Android base plan ID (matches what `create-play-app` creates on Play): autorenew-weekly-699-v1
235
+ // Normalizes the legacy `autorenew-<period>-price-v1` form so old configs get upgraded automatically.
236
+ if (!product.android_base_plan_id || product.android_base_plan_id === `autorenew-${suffix}-price-v1`) {
237
+ product.android_base_plan_id = `autorenew-${suffix}-${priceTag}-v1`;
237
238
  }
238
239
  }
239
240
  }