@gpc-cli/core 0.9.41 → 0.9.42

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/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, UploadProgressEvent, ResumableUploadOptions, Listing, ImageType, CountryAvailability, Image, AppDetails, Review, ReviewReplyResponse, Subscription, SubscriptionOffer, OffersListResponse, BasePlanMigratePricesRequest, InAppProduct, Order, SubscriptionDeferResponse, SubscriptionsV2DeferResponse, ProductPurchase, ProductPurchaseV2, 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';
4
+ import { PlayApiClient, EditCommitOptions, Track, ExternallyHostedApk, ExternallyHostedApkResponse, DeobfuscationFileType, UploadProgressEvent, ResumableUploadOptions, Listing, ImageType, CountryAvailability, Image, AppDetails, Review, ReviewReplyResponse, Subscription, SubscriptionOffer, OffersListResponse, BasePlanMigratePricesRequest, InAppProduct, Order, SubscriptionDeferResponse, SubscriptionsV2DeferResponse, ProductPurchase, ProductPurchaseV2, 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;
@@ -153,10 +153,13 @@ declare function uploadRelease(client: PlayApiClient, packageName: string, fileP
153
153
  }[];
154
154
  releaseName?: string;
155
155
  mappingFile?: string;
156
+ mappingFileType?: DeobfuscationFileType;
156
157
  dryRun?: boolean;
157
158
  onProgress?: (uploaded: number, total: number) => void;
158
159
  onUploadProgress?: (event: UploadProgressEvent) => void;
159
160
  uploadOptions?: Pick<ResumableUploadOptions, "chunkSize" | "resumeSessionUri" | "maxResumeAttempts">;
161
+ deviceTierConfigId?: string;
162
+ commitOptions?: EditCommitOptions;
160
163
  }): Promise<UploadResult | DryRunUploadResult>;
161
164
  declare function getReleasesStatus(client: PlayApiClient, packageName: string, trackFilter?: string): Promise<ReleaseStatusResult[]>;
162
165
  declare function promoteRelease(client: PlayApiClient, packageName: string, fromTrack: string, toTrack: string, options?: {
@@ -166,11 +169,12 @@ declare function promoteRelease(client: PlayApiClient, packageName: string, from
166
169
  language: string;
167
170
  text: string;
168
171
  }[];
172
+ commitOptions?: EditCommitOptions;
169
173
  }): Promise<ReleaseStatusResult>;
170
- declare function updateRollout(client: PlayApiClient, packageName: string, track: string, action: "increase" | "halt" | "resume" | "complete", userFraction?: number): Promise<ReleaseStatusResult>;
174
+ declare function updateRollout(client: PlayApiClient, packageName: string, track: string, action: "increase" | "halt" | "resume" | "complete", userFraction?: number, commitOptions?: EditCommitOptions): Promise<ReleaseStatusResult>;
171
175
  declare function listTracks(client: PlayApiClient, packageName: string): Promise<Track[]>;
172
- declare function createTrack(client: PlayApiClient, packageName: string, trackName: string): Promise<Track>;
173
- declare function updateTrackConfig(client: PlayApiClient, packageName: string, trackName: string, config: Record<string, unknown>): Promise<Track>;
176
+ declare function createTrack(client: PlayApiClient, packageName: string, trackName: string, commitOptions?: EditCommitOptions): Promise<Track>;
177
+ declare function updateTrackConfig(client: PlayApiClient, packageName: string, trackName: string, config: Record<string, unknown>, commitOptions?: EditCommitOptions): Promise<Track>;
174
178
  /**
175
179
  * Fetch release notes from the latest active release on a given track.
176
180
  * Opens and discards an edit — read-only, no mutations.
@@ -189,7 +193,7 @@ declare function diffReleases(client: PlayApiClient, packageName: string, fromTr
189
193
  toTrack: string;
190
194
  diffs: ReleaseDiff[];
191
195
  }>;
192
- declare function uploadExternallyHosted(client: PlayApiClient, packageName: string, data: ExternallyHostedApk): Promise<ExternallyHostedApkResponse>;
196
+ declare function uploadExternallyHosted(client: PlayApiClient, packageName: string, data: ExternallyHostedApk, commitOptions?: EditCommitOptions): Promise<ExternallyHostedApkResponse>;
193
197
 
194
198
  interface ListingDiff {
195
199
  language: string;
@@ -255,8 +259,8 @@ interface DryRunResult {
255
259
  diffs: ListingDiff[];
256
260
  }
257
261
  declare function getListings(client: PlayApiClient, packageName: string, language?: string): Promise<Listing[]>;
258
- declare function updateListing(client: PlayApiClient, packageName: string, language: string, data: Partial<Omit<Listing, "language">>): Promise<Listing>;
259
- declare function deleteListing(client: PlayApiClient, packageName: string, language: string): Promise<void>;
262
+ declare function updateListing(client: PlayApiClient, packageName: string, language: string, data: Partial<Omit<Listing, "language">>, commitOptions?: EditCommitOptions): Promise<Listing>;
263
+ declare function deleteListing(client: PlayApiClient, packageName: string, language: string, commitOptions?: EditCommitOptions): Promise<void>;
260
264
  declare function pullListings(client: PlayApiClient, packageName: string, dir: string): Promise<ListingsResult>;
261
265
  /** Lint local listing directory against Play Store character limits (no API call). */
262
266
  declare function lintLocalListings(dir: string): Promise<ListingLintResult[]>;
@@ -275,10 +279,11 @@ declare function diffListingsEnhanced(client: PlayApiClient, packageName: string
275
279
  declare function pushListings(client: PlayApiClient, packageName: string, dir: string, options?: {
276
280
  dryRun?: boolean;
277
281
  force?: boolean;
282
+ commitOptions?: EditCommitOptions;
278
283
  }): Promise<PushResult | DryRunResult>;
279
284
  declare function listImages(client: PlayApiClient, packageName: string, language: string, imageType: ImageType): Promise<Image[]>;
280
- declare function uploadImage(client: PlayApiClient, packageName: string, language: string, imageType: ImageType, filePath: string): Promise<Image>;
281
- declare function deleteImage(client: PlayApiClient, packageName: string, language: string, imageType: ImageType, imageId: string): Promise<void>;
285
+ declare function uploadImage(client: PlayApiClient, packageName: string, language: string, imageType: ImageType, filePath: string, commitOptions?: EditCommitOptions): Promise<Image>;
286
+ declare function deleteImage(client: PlayApiClient, packageName: string, language: string, imageType: ImageType, imageId: string, commitOptions?: EditCommitOptions): Promise<void>;
282
287
  declare function diffListingsCommand(client: PlayApiClient, packageName: string, dir: string): Promise<ListingDiff[]>;
283
288
  declare function getCountryAvailability(client: PlayApiClient, packageName: string, track: string): Promise<CountryAvailability>;
284
289
  interface ExportImagesOptions {
@@ -291,7 +296,7 @@ interface ExportImagesSummary {
291
296
  totalSize: number;
292
297
  }
293
298
  declare function exportImages(client: PlayApiClient, packageName: string, dir: string, options?: ExportImagesOptions): Promise<ExportImagesSummary>;
294
- declare function updateAppDetails(client: PlayApiClient, packageName: string, details: Partial<AppDetails>): Promise<AppDetails>;
299
+ declare function updateAppDetails(client: PlayApiClient, packageName: string, details: Partial<AppDetails>, commitOptions?: EditCommitOptions): Promise<AppDetails>;
295
300
 
296
301
  interface FastlaneDetection {
297
302
  hasFastfile: boolean;
@@ -382,7 +387,10 @@ interface PublishOptions {
382
387
  notesDir?: string;
383
388
  releaseName?: string;
384
389
  mappingFile?: string;
390
+ mappingFileType?: DeobfuscationFileType;
391
+ deviceTierConfigId?: string;
385
392
  dryRun?: boolean;
393
+ commitOptions?: EditCommitOptions;
386
394
  }
387
395
  interface PublishResult {
388
396
  validation: ValidateResult;
@@ -670,8 +678,8 @@ declare function updateGrant(client: UsersApiClient, developerId: string, email:
670
678
  declare function deleteGrant(client: UsersApiClient, developerId: string, email: string, packageName: string): Promise<void>;
671
679
 
672
680
  declare function listTesters(client: PlayApiClient, packageName: string, track: string): Promise<Testers>;
673
- declare function addTesters(client: PlayApiClient, packageName: string, track: string, groupEmails: string[]): Promise<Testers>;
674
- declare function removeTesters(client: PlayApiClient, packageName: string, track: string, groupEmails: string[]): Promise<Testers>;
681
+ declare function addTesters(client: PlayApiClient, packageName: string, track: string, groupEmails: string[], commitOptions?: EditCommitOptions): Promise<Testers>;
682
+ declare function removeTesters(client: PlayApiClient, packageName: string, track: string, groupEmails: string[], commitOptions?: EditCommitOptions): Promise<Testers>;
675
683
  declare function importTestersFromCsv(client: PlayApiClient, packageName: string, track: string, csvPath: string): Promise<{
676
684
  added: number;
677
685
  testers: Testers;
package/dist/index.js CHANGED
@@ -755,13 +755,14 @@ ${validation.errors.join("\n")}`,
755
755
  if (options.onUploadProgress) options.onUploadProgress(event);
756
756
  }
757
757
  };
758
- const bundle = isApk ? await client.apks.upload(packageName, edit.id, filePath, uploadOpts) : await client.bundles.upload(packageName, edit.id, filePath, uploadOpts);
758
+ const bundle = isApk ? await client.apks.upload(packageName, edit.id, filePath, uploadOpts) : await client.bundles.upload(packageName, edit.id, filePath, uploadOpts, options.deviceTierConfigId);
759
759
  if (options.mappingFile) {
760
760
  await client.deobfuscation.upload(
761
761
  packageName,
762
762
  edit.id,
763
763
  bundle.versionCode,
764
- options.mappingFile
764
+ options.mappingFile,
765
+ options.mappingFileType
765
766
  );
766
767
  }
767
768
  const release = {
@@ -773,7 +774,7 @@ ${validation.errors.join("\n")}`,
773
774
  };
774
775
  await client.tracks.update(packageName, edit.id, options.track, release);
775
776
  await client.edits.validate(packageName, edit.id);
776
- await client.edits.commit(packageName, edit.id);
777
+ await client.edits.commit(packageName, edit.id, options.commitOptions);
777
778
  return {
778
779
  versionCode: bundle.versionCode,
779
780
  track: options.track,
@@ -839,7 +840,7 @@ async function promoteRelease(client, packageName, fromTrack, toTrack, options)
839
840
  };
840
841
  await client.tracks.update(packageName, edit.id, toTrack, release);
841
842
  await client.edits.validate(packageName, edit.id);
842
- await client.edits.commit(packageName, edit.id);
843
+ await client.edits.commit(packageName, edit.id, options?.commitOptions);
843
844
  return {
844
845
  track: toTrack,
845
846
  status: release.status,
@@ -848,7 +849,7 @@ async function promoteRelease(client, packageName, fromTrack, toTrack, options)
848
849
  };
849
850
  });
850
851
  }
851
- async function updateRollout(client, packageName, track, action, userFraction) {
852
+ async function updateRollout(client, packageName, track, action, userFraction, commitOptions) {
852
853
  const edit = await client.edits.insert(packageName);
853
854
  try {
854
855
  const trackData = await client.tracks.get(packageName, edit.id, track);
@@ -906,7 +907,7 @@ async function updateRollout(client, packageName, track, action, userFraction) {
906
907
  };
907
908
  await client.tracks.update(packageName, edit.id, track, release);
908
909
  await client.edits.validate(packageName, edit.id);
909
- await client.edits.commit(packageName, edit.id);
910
+ await client.edits.commit(packageName, edit.id, commitOptions);
910
911
  return {
911
912
  track,
912
913
  status: newStatus,
@@ -931,7 +932,7 @@ async function listTracks(client, packageName) {
931
932
  throw error;
932
933
  }
933
934
  }
934
- async function createTrack(client, packageName, trackName) {
935
+ async function createTrack(client, packageName, trackName, commitOptions) {
935
936
  if (!trackName || trackName.trim().length === 0) {
936
937
  throw new GpcError(
937
938
  "Track name must not be empty",
@@ -944,7 +945,7 @@ async function createTrack(client, packageName, trackName) {
944
945
  try {
945
946
  const track = await client.tracks.create(packageName, edit.id, trackName);
946
947
  await client.edits.validate(packageName, edit.id);
947
- await client.edits.commit(packageName, edit.id);
948
+ await client.edits.commit(packageName, edit.id, commitOptions);
948
949
  return track;
949
950
  } catch (error) {
950
951
  await client.edits.delete(packageName, edit.id).catch(() => {
@@ -952,7 +953,7 @@ async function createTrack(client, packageName, trackName) {
952
953
  throw error;
953
954
  }
954
955
  }
955
- async function updateTrackConfig(client, packageName, trackName, config) {
956
+ async function updateTrackConfig(client, packageName, trackName, config, commitOptions) {
956
957
  if (!trackName || trackName.trim().length === 0) {
957
958
  throw new GpcError(
958
959
  "Track name must not be empty",
@@ -978,7 +979,7 @@ async function updateTrackConfig(client, packageName, trackName, config) {
978
979
  }
979
980
  const track = await client.tracks.update(packageName, edit.id, trackName, release);
980
981
  await client.edits.validate(packageName, edit.id);
981
- await client.edits.commit(packageName, edit.id);
982
+ await client.edits.commit(packageName, edit.id, commitOptions);
982
983
  return track;
983
984
  } catch (error) {
984
985
  await client.edits.delete(packageName, edit.id).catch(() => {
@@ -1031,7 +1032,7 @@ async function diffReleases(client, packageName, fromTrack, toTrack) {
1031
1032
  throw error;
1032
1033
  }
1033
1034
  }
1034
- async function uploadExternallyHosted(client, packageName, data) {
1035
+ async function uploadExternallyHosted(client, packageName, data, commitOptions) {
1035
1036
  if (!data.externallyHostedUrl) {
1036
1037
  throw new GpcError(
1037
1038
  "externallyHostedUrl is required",
@@ -1052,7 +1053,7 @@ async function uploadExternallyHosted(client, packageName, data) {
1052
1053
  try {
1053
1054
  const result = await client.apks.addExternallyHosted(packageName, edit.id, data);
1054
1055
  await client.edits.validate(packageName, edit.id);
1055
- await client.edits.commit(packageName, edit.id);
1056
+ await client.edits.commit(packageName, edit.id, commitOptions);
1056
1057
  return result;
1057
1058
  } catch (error) {
1058
1059
  await client.edits.delete(packageName, edit.id).catch(() => {
@@ -1397,13 +1398,13 @@ async function getListings(client, packageName, language) {
1397
1398
  throw error;
1398
1399
  }
1399
1400
  }
1400
- async function updateListing(client, packageName, language, data) {
1401
+ async function updateListing(client, packageName, language, data, commitOptions) {
1401
1402
  validateLanguage(language);
1402
1403
  const edit = await client.edits.insert(packageName);
1403
1404
  try {
1404
1405
  const listing = await client.listings.patch(packageName, edit.id, language, data);
1405
1406
  await client.edits.validate(packageName, edit.id);
1406
- await client.edits.commit(packageName, edit.id);
1407
+ await client.edits.commit(packageName, edit.id, commitOptions);
1407
1408
  return listing;
1408
1409
  } catch (error) {
1409
1410
  await client.edits.delete(packageName, edit.id).catch(() => {
@@ -1411,13 +1412,13 @@ async function updateListing(client, packageName, language, data) {
1411
1412
  throw error;
1412
1413
  }
1413
1414
  }
1414
- async function deleteListing(client, packageName, language) {
1415
+ async function deleteListing(client, packageName, language, commitOptions) {
1415
1416
  validateLanguage(language);
1416
1417
  const edit = await client.edits.insert(packageName);
1417
1418
  try {
1418
1419
  await client.listings.delete(packageName, edit.id, language);
1419
1420
  await client.edits.validate(packageName, edit.id);
1420
- await client.edits.commit(packageName, edit.id);
1421
+ await client.edits.commit(packageName, edit.id, commitOptions);
1421
1422
  } catch (error) {
1422
1423
  await client.edits.delete(packageName, edit.id).catch(() => {
1423
1424
  });
@@ -1541,7 +1542,7 @@ ${details}`,
1541
1542
  await client.listings.update(packageName, edit.id, language, data);
1542
1543
  }
1543
1544
  await client.edits.validate(packageName, edit.id);
1544
- await client.edits.commit(packageName, edit.id);
1545
+ await client.edits.commit(packageName, edit.id, options?.commitOptions);
1545
1546
  return {
1546
1547
  updated: localListings.length,
1547
1548
  languages: localListings.map((l) => l.language)
@@ -1565,7 +1566,7 @@ async function listImages(client, packageName, language, imageType) {
1565
1566
  throw error;
1566
1567
  }
1567
1568
  }
1568
- async function uploadImage(client, packageName, language, imageType, filePath) {
1569
+ async function uploadImage(client, packageName, language, imageType, filePath, commitOptions) {
1569
1570
  validateLanguage(language);
1570
1571
  const imageCheck = await validateImage(filePath, imageType);
1571
1572
  if (!imageCheck.valid) {
@@ -1583,7 +1584,7 @@ async function uploadImage(client, packageName, language, imageType, filePath) {
1583
1584
  try {
1584
1585
  const image = await client.images.upload(packageName, edit.id, language, imageType, filePath);
1585
1586
  await client.edits.validate(packageName, edit.id);
1586
- await client.edits.commit(packageName, edit.id);
1587
+ await client.edits.commit(packageName, edit.id, commitOptions);
1587
1588
  return image;
1588
1589
  } catch (error) {
1589
1590
  await client.edits.delete(packageName, edit.id).catch(() => {
@@ -1591,13 +1592,13 @@ async function uploadImage(client, packageName, language, imageType, filePath) {
1591
1592
  throw error;
1592
1593
  }
1593
1594
  }
1594
- async function deleteImage(client, packageName, language, imageType, imageId) {
1595
+ async function deleteImage(client, packageName, language, imageType, imageId, commitOptions) {
1595
1596
  validateLanguage(language);
1596
1597
  const edit = await client.edits.insert(packageName);
1597
1598
  try {
1598
1599
  await client.images.delete(packageName, edit.id, language, imageType, imageId);
1599
1600
  await client.edits.validate(packageName, edit.id);
1600
- await client.edits.commit(packageName, edit.id);
1601
+ await client.edits.commit(packageName, edit.id, commitOptions);
1601
1602
  } catch (error) {
1602
1603
  await client.edits.delete(packageName, edit.id).catch(() => {
1603
1604
  });
@@ -1706,12 +1707,12 @@ async function exportImages(client, packageName, dir, options) {
1706
1707
  throw error;
1707
1708
  }
1708
1709
  }
1709
- async function updateAppDetails(client, packageName, details) {
1710
+ async function updateAppDetails(client, packageName, details, commitOptions) {
1710
1711
  const edit = await client.edits.insert(packageName);
1711
1712
  try {
1712
1713
  const result = await client.details.patch(packageName, edit.id, details);
1713
1714
  await client.edits.validate(packageName, edit.id);
1714
- await client.edits.commit(packageName, edit.id);
1715
+ await client.edits.commit(packageName, edit.id, commitOptions);
1715
1716
  return result;
1716
1717
  } catch (error) {
1717
1718
  await client.edits.delete(packageName, edit.id).catch(() => {
@@ -2186,7 +2187,10 @@ async function publish(client, packageName, filePath, options) {
2186
2187
  userFraction: options.rolloutPercent ? options.rolloutPercent / 100 : void 0,
2187
2188
  releaseNotes,
2188
2189
  releaseName: options.releaseName,
2189
- mappingFile: options.mappingFile
2190
+ mappingFile: options.mappingFile,
2191
+ mappingFileType: options.mappingFileType,
2192
+ deviceTierConfigId: options.deviceTierConfigId,
2193
+ commitOptions: options.commitOptions
2190
2194
  });
2191
2195
  return { validation, upload };
2192
2196
  }
@@ -3554,7 +3558,7 @@ async function listTesters(client, packageName, track) {
3554
3558
  await client.edits.delete(packageName, edit.id);
3555
3559
  }
3556
3560
  }
3557
- async function addTesters(client, packageName, track, groupEmails) {
3561
+ async function addTesters(client, packageName, track, groupEmails, commitOptions) {
3558
3562
  const edit = await client.edits.insert(packageName);
3559
3563
  try {
3560
3564
  const current = await client.testers.get(packageName, edit.id, track);
@@ -3566,7 +3570,7 @@ async function addTesters(client, packageName, track, groupEmails) {
3566
3570
  googleGroups: [...existing]
3567
3571
  });
3568
3572
  await client.edits.validate(packageName, edit.id);
3569
- await client.edits.commit(packageName, edit.id);
3573
+ await client.edits.commit(packageName, edit.id, commitOptions);
3570
3574
  return updated;
3571
3575
  } catch (error) {
3572
3576
  await client.edits.delete(packageName, edit.id).catch(() => {
@@ -3574,7 +3578,7 @@ async function addTesters(client, packageName, track, groupEmails) {
3574
3578
  throw error;
3575
3579
  }
3576
3580
  }
3577
- async function removeTesters(client, packageName, track, groupEmails) {
3581
+ async function removeTesters(client, packageName, track, groupEmails, commitOptions) {
3578
3582
  const edit = await client.edits.insert(packageName);
3579
3583
  try {
3580
3584
  const current = await client.testers.get(packageName, edit.id, track);
@@ -3584,7 +3588,7 @@ async function removeTesters(client, packageName, track, groupEmails) {
3584
3588
  googleGroups: filtered
3585
3589
  });
3586
3590
  await client.edits.validate(packageName, edit.id);
3587
- await client.edits.commit(packageName, edit.id);
3591
+ await client.edits.commit(packageName, edit.id, commitOptions);
3588
3592
  return updated;
3589
3593
  } catch (error) {
3590
3594
  await client.edits.delete(packageName, edit.id).catch(() => {