@gpc-cli/core 0.9.28 → 0.9.29

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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Business logic and command orchestration for [GPC](https://github.com/yasserstudio/gpc) — the complete CLI for Google Play.
4
4
 
5
- Use this package to call GPC commands programmatically in your own tools, scripts, or services.
5
+ Need to integrate Play operations into your own tools or services? Use `@gpc-cli/core` to call GPC commands programmatically same logic the CLI uses, no terminal required.
6
6
 
7
7
  ## Install
8
8
 
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { OutputFormat, ResolvedConfig, WebhookConfig } from '@gpc-cli/config';
2
2
  import { AuthClient } from '@gpc-cli/auth';
3
3
  import { GpcPlugin, PluginManifest, CommandEvent, CommandResult, PluginError, RequestEvent, ResponseEvent, PluginCommand } from '@gpc-cli/plugin-sdk';
4
- import { PlayApiClient, Track, ExternallyHostedApk, ExternallyHostedApkResponse, Listing, ImageType, CountryAvailability, Image, AppDetails, Review, ReviewReplyResponse, Subscription, SubscriptionOffer, OffersListResponse, BasePlanMigratePricesRequest, InAppProduct, SubscriptionDeferResponse, ProductPurchase, SubscriptionPurchaseV2, VoidedPurchase, UsersApiClient, User, DeveloperPermission, Grant, MetricRow, ReportingDimension, ReportingAggregation, ReportingApiClient, VitalsMetricSet, AnomalyDetectionResponse, MetricSetResponse, ErrorIssuesResponse, ConvertRegionPricesResponse, ReportType, StatsDimension, ReportBucket, Testers, AppRecoveryTargeting, AppRecoveryAction, CreateAppRecoveryActionRequest, DataSafety, ExternalTransaction, ExternalTransactionRefund, DeviceTierConfig, OneTimeOffer, OneTimeProduct, OneTimeOffersListResponse, OneTimeProductsListResponse, GeneratedApk, PurchaseOption, PurchaseOptionsListResponse } from '@gpc-cli/api';
4
+ import { PlayApiClient, Track, ExternallyHostedApk, ExternallyHostedApkResponse, Listing, ImageType, CountryAvailability, Image, AppDetails, Review, ReviewReplyResponse, Subscription, SubscriptionOffer, OffersListResponse, BasePlanMigratePricesRequest, InAppProduct, SubscriptionDeferResponse, ProductPurchase, SubscriptionPurchaseV2, VoidedPurchase, UsersApiClient, User, DeveloperPermission, Grant, MetricRow, ReportingDimension, ReportingAggregation, VitalsMetricSet, ReportingApiClient, AnomalyDetectionResponse, MetricSetResponse, ErrorIssuesResponse, ConvertRegionPricesResponse, ReportType, StatsDimension, ReportBucket, Testers, AppRecoveryTargeting, AppRecoveryAction, CreateAppRecoveryActionRequest, DataSafety, ExternalTransaction, ExternalTransactionRefund, DeviceTierConfig, OneTimeOffer, OneTimeProduct, OneTimeOffersListResponse, OneTimeProductsListResponse, GamesApiClient, Achievement, GameEvent, Leaderboard, EnterpriseApiClient, CustomApp, GeneratedApk, PurchaseOption, PurchaseOptionsListResponse } from '@gpc-cli/api';
5
5
 
6
6
  declare class GpcError extends Error {
7
7
  readonly code: string;
@@ -33,6 +33,15 @@ declare function formatOutput(data: unknown, format: OutputFormat, redact?: bool
33
33
  declare const SENSITIVE_KEYS: Set<string>;
34
34
  /** Recursively redact sensitive fields from data before output. */
35
35
  declare function redactSensitive(data: unknown): unknown;
36
+ /**
37
+ * Auto-pipe `output` to `$PAGER` when:
38
+ * - stdout is a TTY
39
+ * - row count exceeds terminal height
40
+ * - a pager is available in the environment
41
+ *
42
+ * Falls back to `console.log(output)` when pagination is not applicable.
43
+ */
44
+ declare function maybePaginate(output: string): Promise<void>;
36
45
  declare function formatJunit(data: unknown, commandName?: string): string;
37
46
 
38
47
  interface CommandContext {
@@ -181,6 +190,49 @@ declare function readListingsFromDir(dir: string): Promise<Listing[]>;
181
190
  declare function writeListingsToDir(dir: string, listings: Listing[]): Promise<void>;
182
191
  declare function diffListings(local: Listing[], remote: Listing[]): ListingDiff[];
183
192
 
193
+ /** Listing text lint and diff utilities. No external deps — pure functions. */
194
+ interface ListingFieldLimits {
195
+ title: number;
196
+ shortDescription: number;
197
+ fullDescription: number;
198
+ video: number;
199
+ }
200
+ declare const DEFAULT_LIMITS: ListingFieldLimits;
201
+ interface FieldLintResult {
202
+ field: string;
203
+ chars: number;
204
+ limit: number;
205
+ pct: number;
206
+ status: "ok" | "warn" | "over";
207
+ }
208
+ interface ListingLintResult {
209
+ language: string;
210
+ fields: FieldLintResult[];
211
+ valid: boolean;
212
+ }
213
+ interface LintableFields {
214
+ title?: string;
215
+ shortDescription?: string;
216
+ fullDescription?: string;
217
+ video?: string;
218
+ [key: string]: string | undefined;
219
+ }
220
+ /** Lint a single listing's fields against character limits. */
221
+ declare function lintListing(language: string, fields: LintableFields, limits?: ListingFieldLimits): ListingLintResult;
222
+ /** Lint multiple listings. */
223
+ declare function lintListings(listings: {
224
+ language: string;
225
+ fields: LintableFields;
226
+ }[], limits?: ListingFieldLimits): ListingLintResult[];
227
+ interface DiffToken {
228
+ text: string;
229
+ type: "equal" | "insert" | "delete";
230
+ }
231
+ /** Compute word-level LCS diff between two strings. */
232
+ declare function wordDiff(before: string, after: string): DiffToken[];
233
+ /** Format a word diff as an inline string with +/- markers. */
234
+ declare function formatWordDiff(diff: DiffToken[]): string;
235
+
184
236
  interface ListingsResult {
185
237
  listings: Listing[];
186
238
  }
@@ -195,8 +247,23 @@ declare function getListings(client: PlayApiClient, packageName: string, languag
195
247
  declare function updateListing(client: PlayApiClient, packageName: string, language: string, data: Partial<Omit<Listing, "language">>): Promise<Listing>;
196
248
  declare function deleteListing(client: PlayApiClient, packageName: string, language: string): Promise<void>;
197
249
  declare function pullListings(client: PlayApiClient, packageName: string, dir: string): Promise<ListingsResult>;
250
+ /** Lint local listing directory against Play Store character limits (no API call). */
251
+ declare function lintLocalListings(dir: string): Promise<ListingLintResult[]>;
252
+ /** Analyze live Play Store listings for character limit compliance (requires API). */
253
+ declare function analyzeRemoteListings(client: PlayApiClient, packageName: string, options?: {
254
+ expectedLocales?: string[];
255
+ }): Promise<{
256
+ results: ListingLintResult[];
257
+ missingLocales?: string[];
258
+ }>;
259
+ /** Enhanced diff: word-level inline diff for fullDescription, optional language filter. */
260
+ declare function diffListingsEnhanced(client: PlayApiClient, packageName: string, dir: string, options?: {
261
+ lang?: string;
262
+ wordLevel?: boolean;
263
+ }): Promise<ListingDiff[]>;
198
264
  declare function pushListings(client: PlayApiClient, packageName: string, dir: string, options?: {
199
265
  dryRun?: boolean;
266
+ force?: boolean;
200
267
  }): Promise<PushResult | DryRunResult>;
201
268
  declare function listImages(client: PlayApiClient, packageName: string, language: string, imageType: ImageType): Promise<Image[]>;
202
269
  declare function uploadImage(client: PlayApiClient, packageName: string, language: string, imageType: ImageType, filePath: string): Promise<Image>;
@@ -317,6 +384,29 @@ interface DryRunPublishResult {
317
384
  }
318
385
  declare function publish(client: PlayApiClient, packageName: string, filePath: string, options: PublishOptions): Promise<PublishResult | DryRunPublishResult>;
319
386
 
387
+ interface TopicCluster {
388
+ topic: string;
389
+ count: number;
390
+ avgScore: number;
391
+ }
392
+ interface KeywordFrequency {
393
+ word: string;
394
+ count: number;
395
+ }
396
+ interface ReviewAnalysis {
397
+ totalReviews: number;
398
+ avgRating: number;
399
+ sentiment: {
400
+ positive: number;
401
+ negative: number;
402
+ neutral: number;
403
+ avgScore: number;
404
+ };
405
+ topics: TopicCluster[];
406
+ keywords: KeywordFrequency[];
407
+ ratingDistribution: Record<number, number>;
408
+ }
409
+
320
410
  interface ReviewsFilterOptions {
321
411
  stars?: number;
322
412
  language?: string;
@@ -334,6 +424,9 @@ declare function getReview(client: PlayApiClient, packageName: string, reviewId:
334
424
  declare function replyToReview(client: PlayApiClient, packageName: string, reviewId: string, replyText: string): Promise<ReviewReplyResponse>;
335
425
  declare function exportReviews(client: PlayApiClient, packageName: string, options?: ReviewExportOptions): Promise<string>;
336
426
 
427
+ /** Fetch reviews and run local sentiment/topic/keyword analysis. */
428
+ declare function analyzeReviews(client: PlayApiClient, packageName: string, options?: ReviewsFilterOptions): Promise<ReviewAnalysis>;
429
+
337
430
  interface ListSubscriptionsOptions {
338
431
  pageToken?: string;
339
432
  pageSize?: number;
@@ -365,6 +458,23 @@ interface SubscriptionDiff {
365
458
  }
366
459
  declare function diffSubscription(client: PlayApiClient, packageName: string, productId: string, localData: Subscription): Promise<SubscriptionDiff[]>;
367
460
  declare function deactivateOffer(client: PlayApiClient, packageName: string, productId: string, basePlanId: string, offerId: string): Promise<SubscriptionOffer>;
461
+ interface SubscriptionAnalytics {
462
+ totalSubscriptions: number;
463
+ activeCount: number;
464
+ activeBasePlans: number;
465
+ trialBasePlans: number;
466
+ pausedBasePlans: number;
467
+ canceledBasePlans: number;
468
+ offerCount: number;
469
+ byProductId: Array<{
470
+ productId: string;
471
+ state: string;
472
+ basePlanCount: number;
473
+ offerCount: number;
474
+ }>;
475
+ }
476
+ /** Aggregate subscription catalog analytics from the Play API. */
477
+ declare function getSubscriptionAnalytics(client: PlayApiClient, packageName: string): Promise<SubscriptionAnalytics>;
368
478
 
369
479
  interface ListIapOptions {
370
480
  token?: string;
@@ -404,6 +514,7 @@ declare function getSubscriptionPurchase(client: PlayApiClient, packageName: str
404
514
  declare function cancelSubscriptionPurchase(client: PlayApiClient, packageName: string, subscriptionId: string, token: string): Promise<void>;
405
515
  declare function deferSubscriptionPurchase(client: PlayApiClient, packageName: string, subscriptionId: string, token: string, desiredExpiry: string): Promise<SubscriptionDeferResponse>;
406
516
  declare function revokeSubscriptionPurchase(client: PlayApiClient, packageName: string, token: string): Promise<void>;
517
+ declare function refundSubscriptionV2(client: PlayApiClient, packageName: string, token: string): Promise<void>;
407
518
 
408
519
  interface ListVoidedOptions {
409
520
  startTime?: string;
@@ -463,6 +574,8 @@ declare function getVitalsStartup(reporting: ReportingApiClient, packageName: st
463
574
  declare function getVitalsRendering(reporting: ReportingApiClient, packageName: string, options?: VitalsQueryOptions): Promise<MetricSetResponse>;
464
575
  declare function getVitalsBattery(reporting: ReportingApiClient, packageName: string, options?: VitalsQueryOptions): Promise<MetricSetResponse>;
465
576
  declare function getVitalsMemory(reporting: ReportingApiClient, packageName: string, options?: VitalsQueryOptions): Promise<MetricSetResponse>;
577
+ /** LMK-specific query: enforces DAILY aggregation as required by the API. */
578
+ declare function getVitalsLmk(reporting: ReportingApiClient, packageName: string, options?: VitalsQueryOptions): Promise<MetricSetResponse>;
466
579
  declare function getVitalsAnomalies(reporting: ReportingApiClient, packageName: string): Promise<AnomalyDetectionResponse>;
467
580
  declare function searchVitalsErrors(reporting: ReportingApiClient, packageName: string, options?: {
468
581
  filter?: string;
@@ -477,6 +590,39 @@ interface VitalsTrendComparison {
477
590
  }
478
591
  declare function compareVitalsTrend(reporting: ReportingApiClient, packageName: string, metricSet: VitalsMetricSet, days?: number): Promise<VitalsTrendComparison>;
479
592
  declare function checkThreshold(value: number | undefined, threshold: number): ThresholdResult;
593
+ interface VersionVitalsRow {
594
+ versionCode: string;
595
+ crashRate?: number;
596
+ anrRate?: number;
597
+ slowStartRate?: number;
598
+ slowRenderingRate?: number;
599
+ }
600
+ interface VersionVitalsComparison {
601
+ v1: VersionVitalsRow;
602
+ v2: VersionVitalsRow;
603
+ regressions: string[];
604
+ }
605
+ /** Compare vitals side-by-side for two version codes. */
606
+ declare function compareVersionVitals(reporting: ReportingApiClient, packageName: string, v1: string, v2: string, options?: {
607
+ days?: number;
608
+ }): Promise<VersionVitalsComparison>;
609
+ interface WatchVitalsOptions {
610
+ /** Polling interval in milliseconds. Defaults to 5 minutes. */
611
+ intervalMs?: number;
612
+ /** Threshold value; breach triggers halt. */
613
+ threshold: number;
614
+ /** Metric set to monitor. Defaults to crashRateMetricSet. */
615
+ metricSet?: VitalsMetricSet;
616
+ /** Called when threshold is breached. Implement halt logic here. */
617
+ onHalt?: (value: number) => Promise<void>;
618
+ /** Called on each poll result (value may be undefined if no data). */
619
+ onPoll?: (value: number | undefined, breached: boolean) => void;
620
+ }
621
+ /**
622
+ * Poll vitals on an interval; invoke onHalt if threshold is breached.
623
+ * Returns a stop function — call it to cancel the watch loop.
624
+ */
625
+ declare function watchVitalsWithAutoHalt(reporting: ReportingApiClient, packageName: string, options: WatchVitalsOptions): () => void;
480
626
 
481
627
  interface ImageValidationResult {
482
628
  valid: boolean;
@@ -499,6 +645,11 @@ declare function parseMonth(monthStr: string): ParsedMonth;
499
645
  declare function listReports(_client: PlayApiClient, _packageName: string, reportType: ReportType, _year: number, _month: number): Promise<ReportBucket[]>;
500
646
  declare function downloadReport(_client: PlayApiClient, _packageName: string, reportType: ReportType, _year: number, _month: number): Promise<string>;
501
647
 
648
+ declare function listGrants(client: UsersApiClient, developerId: string, email: string): Promise<Grant[]>;
649
+ declare function createGrant(client: UsersApiClient, developerId: string, email: string, packageName: string, permissions: string[]): Promise<Grant>;
650
+ declare function updateGrant(client: UsersApiClient, developerId: string, email: string, packageName: string, permissions: string[]): Promise<Grant>;
651
+ declare function deleteGrant(client: UsersApiClient, developerId: string, email: string, packageName: string): Promise<void>;
652
+
502
653
  declare function listTesters(client: PlayApiClient, packageName: string, track: string): Promise<Testers>;
503
654
  declare function addTesters(client: PlayApiClient, packageName: string, track: string, groupEmails: string[]): Promise<Testers>;
504
655
  declare function removeTesters(client: PlayApiClient, packageName: string, track: string, groupEmails: string[]): Promise<Testers>;
@@ -565,6 +716,74 @@ interface Spinner {
565
716
  }
566
717
  declare function createSpinner(message: string): Spinner;
567
718
 
719
+ interface TrainStage {
720
+ track: string;
721
+ rollout: number;
722
+ /** ISO 8601 duration or human string like "2d", "7d" */
723
+ after?: string;
724
+ }
725
+ interface TrainGates {
726
+ crashes?: {
727
+ max: number;
728
+ };
729
+ anr?: {
730
+ max: number;
731
+ };
732
+ }
733
+ interface TrainConfig {
734
+ stages: TrainStage[];
735
+ gates?: TrainGates;
736
+ }
737
+ type TrainStatus = "idle" | "running" | "paused" | "completed" | "aborted";
738
+ interface TrainState {
739
+ packageName: string;
740
+ status: TrainStatus;
741
+ currentStage: number;
742
+ startedAt?: string;
743
+ updatedAt: string;
744
+ stages: Array<TrainStage & {
745
+ executedAt?: string;
746
+ scheduledAt?: string;
747
+ }>;
748
+ gates?: TrainGates;
749
+ }
750
+
751
+ interface StartTrainOptions {
752
+ force?: boolean;
753
+ }
754
+ /** Start or resume a release train for a package. */
755
+ declare function startTrain(apiClient: PlayApiClient, packageName: string, config: TrainConfig, options?: StartTrainOptions): Promise<TrainState>;
756
+ /** Get current train status. */
757
+ declare function getTrainStatus(packageName: string): Promise<TrainState | null>;
758
+ /** Pause a running train. */
759
+ declare function pauseTrain(packageName: string): Promise<TrainState | null>;
760
+ /** Abort a train and clear state. */
761
+ declare function abortTrain(packageName: string): Promise<void>;
762
+ /** Advance the train to the next eligible stage. */
763
+ declare function advanceTrain(apiClient: PlayApiClient, reportingClient: ReportingApiClient, packageName: string): Promise<TrainState | null>;
764
+
765
+ declare function listLeaderboards(client: GamesApiClient, packageName: string): Promise<Leaderboard[]>;
766
+ declare function listAchievements(client: GamesApiClient, packageName: string): Promise<Achievement[]>;
767
+ declare function listEvents(client: GamesApiClient, packageName: string): Promise<GameEvent[]>;
768
+
769
+ declare function listEnterpriseApps(client: EnterpriseApiClient, organizationId: string): Promise<CustomApp[]>;
770
+ declare function createEnterpriseApp(client: EnterpriseApiClient, organizationId: string, app: Partial<CustomApp>): Promise<CustomApp>;
771
+
772
+ interface QuotaUsage {
773
+ dailyCallsUsed: number;
774
+ dailyCallsLimit: number;
775
+ dailyCallsRemaining: number;
776
+ minuteCallsUsed: number;
777
+ minuteCallsLimit: number;
778
+ minuteCallsRemaining: number;
779
+ topCommands: Array<{
780
+ command: string;
781
+ count: number;
782
+ }>;
783
+ }
784
+ /** Compute quota usage from the local audit log. */
785
+ declare function getQuotaUsage(): Promise<QuotaUsage>;
786
+
568
787
  /**
569
788
  * Normalize and resolve a user-supplied path.
570
789
  * Prevents path traversal by normalizing `.` and `..` components.
@@ -733,6 +952,24 @@ interface BundleComparison {
733
952
  }
734
953
  declare function analyzeBundle(filePath: string): Promise<BundleAnalysis>;
735
954
  declare function compareBundles(before: BundleAnalysis, after: BundleAnalysis): BundleComparison;
955
+ /** Return the top N largest files by compressed size. */
956
+ declare function topFiles(analysis: BundleAnalysis, n?: number): BundleEntry[];
957
+ interface BundleSizeConfig {
958
+ maxTotalCompressed?: number;
959
+ modules?: Record<string, {
960
+ maxCompressed: number;
961
+ }>;
962
+ }
963
+ interface BundleSizeCheckResult {
964
+ passed: boolean;
965
+ violations: Array<{
966
+ subject: string;
967
+ actual: number;
968
+ max: number;
969
+ }>;
970
+ }
971
+ /** Check bundle analysis against .bundlesize.json thresholds. */
972
+ declare function checkBundleSize(analysis: BundleAnalysis, configPath?: string): Promise<BundleSizeCheckResult>;
736
973
 
737
974
  interface StatusVitalMetric {
738
975
  value: number | undefined;
@@ -823,4 +1060,4 @@ declare function trackBreachState(packageName: string, isBreaching: boolean): Pr
823
1060
  declare function sendNotification(title: string, body: string): void;
824
1061
  declare function statusHasBreach(status: AppStatus): boolean;
825
1062
 
826
- export { ApiError, type AppInfo, type AppStatus, type AuditEntry, type BatchSyncResult, type BundleAnalysis, type BundleComparison, type BundleEntry, type CommandContext, ConfigError, type DiscoverPluginsOptions, type DryRunPublishResult, type DryRunResult, type DryRunUploadResult, type ExportImagesOptions, type ExportImagesSummary, type FastlaneDetection, type FastlaneLane, type FileValidationResult, GOOGLE_PLAY_LANGUAGES, type GetAppStatusOptions, type GitNotesOptions, type GitReleaseNotes, GpcError, type ImageValidationResult, type InternalSharingUploadResult, type ListIapOptions, type ListSubscriptionsOptions, type ListUsersOptions, type ListVoidedOptions, type ListingDiff, type ListingsResult, type LoadedPlugin, type MigrationResult, NetworkError, type OneTimeProductDiff, PERMISSION_PROPAGATION_WARNING, type ParsedMonth, PluginManager, type PublishOptions, type PublishResult, type PushResult, type ReleaseDiff, type ReleaseNotesValidation, type ReleaseStatusResult, type ReviewExportOptions, type ReviewsFilterOptions, SENSITIVE_ARG_KEYS, SENSITIVE_KEYS, type ScaffoldOptions, type ScaffoldResult, type Spinner, type StatusDiff, type StatusRelease, type StatusReviews, type StatusVitalMetric, type SubscriptionDiff, type SyncResult, type ThresholdResult, type UploadResult, type ValidateCheck, type ValidateOptions, type ValidateResult, type VitalsOverview, type VitalsQueryOptions, type VitalsTrendComparison, type WatchOptions, type WebhookPayload, acknowledgeProductPurchase, activateBasePlan, activateOffer, activatePurchaseOption, addRecoveryTargeting, addTesters, analyzeBundle, batchSyncInAppProducts, cancelRecoveryAction, cancelSubscriptionPurchase, checkThreshold, clearAuditLog, compareBundles, compareVitalsTrend, computeStatusDiff, consumeProductPurchase, convertRegionPrices, createAuditEntry, createDeviceTier, createExternalTransaction, createInAppProduct, createOffer, createOneTimeOffer, createOneTimeProduct, createPurchaseOption, createRecoveryAction, createSpinner, createSubscription, createTrack, deactivateBasePlan, deactivateOffer, deactivatePurchaseOption, deferSubscriptionPurchase, deleteBasePlan, deleteImage, deleteInAppProduct, deleteListing, deleteOffer, deleteOneTimeOffer, deleteOneTimeProduct, deleteSubscription, deployRecoveryAction, detectFastlane, detectOutputFormat, diffListings, diffListingsCommand, diffOneTimeProduct, diffReleases, diffSubscription, discoverPlugins, downloadGeneratedApk, downloadReport, exportDataSafety, exportImages, exportReviews, formatCustomPayload, formatDiscordPayload, formatJunit, formatOutput, formatSlackPayload, formatStatusDiff, formatStatusSummary, formatStatusTable, generateMigrationPlan, generateNotesFromGit, getAppInfo, getAppStatus, getCountryAvailability, getDataSafety, getDeviceTier, getExternalTransaction, getInAppProduct, getListings, getOffer, getOneTimeOffer, getOneTimeProduct, getProductPurchase, getPurchaseOption, getReleasesStatus, getReview, getSubscription, getSubscriptionPurchase, getUser, getVitalsAnomalies, getVitalsAnr, getVitalsBattery, getVitalsCrashes, getVitalsMemory, getVitalsOverview, getVitalsRendering, getVitalsStartup, importDataSafety, importTestersFromCsv, initAudit, inviteUser, isFinancialReportType, isStatsReportType, isValidBcp47, isValidReportType, isValidStatsDimension, listAuditEvents, listDeviceTiers, listGeneratedApks, listImages, listInAppProducts, listOffers, listOneTimeOffers, listOneTimeProducts, listPurchaseOptions, listRecoveryActions, listReports, listReviews, listSubscriptions, listTesters, listTracks, listUsers, listVoidedPurchases, loadStatusCache, migratePrices, parseAppfile, parseFastfile, parseGrantArg, parseMonth, promoteRelease, publish, pullListings, pushListings, readListingsFromDir, readReleaseNotesFromDir, redactAuditArgs, redactSensitive, refundExternalTransaction, refundOrder, removeTesters, removeUser, replyToReview, revokeSubscriptionPurchase, runWatchLoop, safePath, safePathWithin, saveStatusCache, scaffoldPlugin, searchAuditEvents, searchVitalsErrors, sendNotification, sendWebhook, sortResults, statusHasBreach, syncInAppProducts, trackBreachState, updateAppDetails, updateDataSafety, updateInAppProduct, updateListing, updateOffer, updateOneTimeOffer, updateOneTimeProduct, updateRollout, updateSubscription, updateTrackConfig, updateUser, uploadExternallyHosted, uploadImage, uploadInternalSharing, uploadRelease, validateImage, validateLanguageCode, validatePackageName, validatePreSubmission, validateReleaseNotes, validateSku, validateTrackName, validateUploadFile, validateVersionCode, writeAuditLog, writeListingsToDir, writeMigrationOutput };
1063
+ export { ApiError, type AppInfo, type AppStatus, type AuditEntry, type BatchSyncResult, type BundleAnalysis, type BundleComparison, type BundleEntry, type BundleSizeCheckResult, type BundleSizeConfig, type CommandContext, ConfigError, DEFAULT_LIMITS, type DiffToken, type DiscoverPluginsOptions, type DryRunPublishResult, type DryRunResult, type DryRunUploadResult, type ExportImagesOptions, type ExportImagesSummary, type FastlaneDetection, type FastlaneLane, type FieldLintResult, type FileValidationResult, GOOGLE_PLAY_LANGUAGES, type GetAppStatusOptions, type GitNotesOptions, type GitReleaseNotes, GpcError, type ImageValidationResult, type InternalSharingUploadResult, type ListIapOptions, type ListSubscriptionsOptions, type ListUsersOptions, type ListVoidedOptions, type ListingDiff, type ListingFieldLimits, type ListingLintResult, type ListingsResult, type LoadedPlugin, type MigrationResult, NetworkError, type OneTimeProductDiff, PERMISSION_PROPAGATION_WARNING, type ParsedMonth, PluginManager, type PublishOptions, type PublishResult, type PushResult, type QuotaUsage, type ReleaseDiff, type ReleaseNotesValidation, type ReleaseStatusResult, type ReviewAnalysis, type ReviewExportOptions, type ReviewsFilterOptions, SENSITIVE_ARG_KEYS, SENSITIVE_KEYS, type ScaffoldOptions, type ScaffoldResult, type Spinner, type StatusDiff, type StatusRelease, type StatusReviews, type StatusVitalMetric, type SubscriptionAnalytics, type SubscriptionDiff, type SyncResult, type ThresholdResult, type TrainConfig, type TrainState, type UploadResult, type ValidateCheck, type ValidateOptions, type ValidateResult, type VersionVitalsComparison, type VersionVitalsRow, type VitalsOverview, type VitalsQueryOptions, type VitalsTrendComparison, type WatchOptions, type WatchVitalsOptions, type WebhookPayload, abortTrain, acknowledgeProductPurchase, activateBasePlan, activateOffer, activatePurchaseOption, addRecoveryTargeting, addTesters, advanceTrain, analyzeBundle, analyzeRemoteListings, analyzeReviews, batchSyncInAppProducts, cancelRecoveryAction, cancelSubscriptionPurchase, checkBundleSize, checkThreshold, clearAuditLog, compareBundles, compareVersionVitals, compareVitalsTrend, computeStatusDiff, consumeProductPurchase, convertRegionPrices, createAuditEntry, createDeviceTier, createEnterpriseApp, createExternalTransaction, createGrant, createInAppProduct, createOffer, createOneTimeOffer, createOneTimeProduct, createPurchaseOption, createRecoveryAction, createSpinner, createSubscription, createTrack, deactivateBasePlan, deactivateOffer, deactivatePurchaseOption, deferSubscriptionPurchase, deleteBasePlan, deleteGrant, deleteImage, deleteInAppProduct, deleteListing, deleteOffer, deleteOneTimeOffer, deleteOneTimeProduct, deleteSubscription, deployRecoveryAction, detectFastlane, detectOutputFormat, diffListings, diffListingsCommand, diffListingsEnhanced, diffOneTimeProduct, diffReleases, diffSubscription, discoverPlugins, downloadGeneratedApk, downloadReport, exportDataSafety, exportImages, exportReviews, formatCustomPayload, formatDiscordPayload, formatJunit, formatOutput, formatSlackPayload, formatStatusDiff, formatStatusSummary, formatStatusTable, formatWordDiff, generateMigrationPlan, generateNotesFromGit, getAppInfo, getAppStatus, getCountryAvailability, getDataSafety, getDeviceTier, getExternalTransaction, getInAppProduct, getListings, getOffer, getOneTimeOffer, getOneTimeProduct, getProductPurchase, getPurchaseOption, getQuotaUsage, getReleasesStatus, getReview, getSubscription, getSubscriptionAnalytics, getSubscriptionPurchase, getTrainStatus, getUser, getVitalsAnomalies, getVitalsAnr, getVitalsBattery, getVitalsCrashes, getVitalsLmk, getVitalsMemory, getVitalsOverview, getVitalsRendering, getVitalsStartup, importDataSafety, importTestersFromCsv, initAudit, inviteUser, isFinancialReportType, isStatsReportType, isValidBcp47, isValidReportType, isValidStatsDimension, lintListing, lintListings, lintLocalListings, listAchievements, listAuditEvents, listDeviceTiers, listEnterpriseApps, listEvents, listGeneratedApks, listGrants, listImages, listInAppProducts, listLeaderboards, listOffers, listOneTimeOffers, listOneTimeProducts, listPurchaseOptions, listRecoveryActions, listReports, listReviews, listSubscriptions, listTesters, listTracks, listUsers, listVoidedPurchases, loadStatusCache, maybePaginate, migratePrices, parseAppfile, parseFastfile, parseGrantArg, parseMonth, pauseTrain, promoteRelease, publish, pullListings, pushListings, readListingsFromDir, readReleaseNotesFromDir, redactAuditArgs, redactSensitive, refundExternalTransaction, refundOrder, refundSubscriptionV2, removeTesters, removeUser, replyToReview, revokeSubscriptionPurchase, runWatchLoop, safePath, safePathWithin, saveStatusCache, scaffoldPlugin, searchAuditEvents, searchVitalsErrors, sendNotification, sendWebhook, sortResults, startTrain, statusHasBreach, syncInAppProducts, topFiles, trackBreachState, updateAppDetails, updateDataSafety, updateGrant, updateInAppProduct, updateListing, updateOffer, updateOneTimeOffer, updateOneTimeProduct, updateRollout, updateSubscription, updateTrackConfig, updateUser, uploadExternallyHosted, uploadImage, uploadInternalSharing, uploadRelease, validateImage, validateLanguageCode, validatePackageName, validatePreSubmission, validateReleaseNotes, validateSku, validateTrackName, validateUploadFile, validateVersionCode, watchVitalsWithAutoHalt, wordDiff, writeAuditLog, writeListingsToDir, writeMigrationOutput };