@gpc-cli/api 1.0.28 → 1.0.30

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 GPC Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Typed Google Play Developer API v3 client for TypeScript. Part of [GPC](https://github.com/yasserstudio/gpc).
4
4
 
5
- 208 endpoints across edits, releases, tracks, listings, subscriptions, in-app products, purchases, reviews, vitals, reports, users, and testers. Built-in rate limiting, retry logic, and pagination.
5
+ 215 endpoints across edits, releases, tracks, listings, subscriptions, in-app products, purchases, reviews, vitals, reports, users, and testers. Built-in rate limiting, retry logic, and pagination.
6
6
 
7
7
  ## Install
8
8
 
@@ -29,18 +29,18 @@ await client.edits.delete("com.example.app", edit.id);
29
29
 
30
30
  ## Client Factories
31
31
 
32
- | Factory | Purpose |
33
- | ------- | ------- |
34
- | `createApiClient(options)` | Core Play API: apps, releases, listings, monetization, purchases |
35
- | `createReportingClient(options)` | Vitals, crash rates, ANR, error reporting |
36
- | `createUsersClient(options)` | Developer account users and permission grants |
37
- | `createHttpClient(options)` | Low-level HTTP with auth, retry, and rate limiting |
32
+ | Factory | Purpose |
33
+ | -------------------------------- | ---------------------------------------------------------------- |
34
+ | `createApiClient(options)` | Core Play API: apps, releases, listings, monetization, purchases |
35
+ | `createReportingClient(options)` | Vitals, crash rates, ANR, error reporting |
36
+ | `createUsersClient(options)` | Developer account users and permission grants |
37
+ | `createHttpClient(options)` | Low-level HTTP with auth, retry, and rate limiting |
38
38
 
39
39
  ```typescript
40
40
  const options: ApiClientOptions = {
41
- auth, // Required: { getAccessToken(): Promise<string> }
42
- maxRetries: 3, // Default retry count
43
- timeout: 30_000, // Request timeout in ms
41
+ auth, // Required: { getAccessToken(): Promise<string> }
42
+ maxRetries: 3, // Default retry count
43
+ timeout: 30_000, // Request timeout in ms
44
44
  onRetry: (entry) => console.warn(`Retry #${entry.attempt}`),
45
45
  };
46
46
  ```
@@ -92,31 +92,31 @@ await client.purchases.acknowledgeProduct("com.example.app", "coins_100", token)
92
92
 
93
93
  ## All API Modules
94
94
 
95
- | Module | Methods |
96
- | ------ | ------- |
97
- | `client.edits` | insert, get, validate, commit, delete |
98
- | `client.bundles` | upload, list |
99
- | `client.tracks` | list, get, update |
100
- | `client.listings` | list, get, update, delete, deleteAll |
101
- | `client.images` | list, upload, delete, deleteAll |
102
- | `client.subscriptions` | list, get, create, patch, archive, activate/deactivate base plans and offers |
103
- | `client.inappproducts` | list, get, create, update, delete, batchGet, batchUpdate, batchDelete |
104
- | `client.oneTimeProducts` | list, get, create, patch, delete, batchGet, batchUpdate, batchDelete |
105
- | `client.purchases` | getProduct, acknowledgeProduct, getSubscriptionV2, revokeSubscription, refund, listVoided |
106
- | `client.reviews` | list, get, reply |
107
- | `client.testers` | get, update |
108
- | `client.reports` | list |
109
- | `client.monetization` | convertRegionPrices |
110
- | `client.deobfuscation` | upload |
111
- | `client.expansionFiles` | get, update, patch, upload |
112
- | `client.dataSafety` | get, update |
113
- | `client.deviceTiers` | list, get, create |
114
- | `client.internalSharing` | uploadBundle, uploadApk |
115
- | `client.generatedApks` | list, download |
116
- | `client.externalTransactions` | create, get, refund |
117
- | `client.appRecovery` | create, deploy, cancel, list |
118
- | `reporting.*` | queryMetricSet, getAnomalies, searchErrorIssues, searchErrorReports |
119
- | `users.*` | list, get, create, patch, delete, listGrants, createGrant, patchGrant, deleteGrant |
95
+ | Module | Methods |
96
+ | ----------------------------- | ----------------------------------------------------------------------------------------- |
97
+ | `client.edits` | insert, get, validate, commit, delete |
98
+ | `client.bundles` | upload, list |
99
+ | `client.tracks` | list, get, update |
100
+ | `client.listings` | list, get, update, delete, deleteAll |
101
+ | `client.images` | list, upload, delete, deleteAll |
102
+ | `client.subscriptions` | list, get, create, patch, archive, activate/deactivate base plans and offers |
103
+ | `client.inappproducts` | list, get, create, update, delete, batchGet, batchUpdate, batchDelete |
104
+ | `client.oneTimeProducts` | list, get, create, patch, delete, batchGet, batchUpdate, batchDelete |
105
+ | `client.purchases` | getProduct, acknowledgeProduct, getSubscriptionV2, revokeSubscription, refund, listVoided |
106
+ | `client.reviews` | list, get, reply |
107
+ | `client.testers` | get, update |
108
+ | `client.reports` | list |
109
+ | `client.monetization` | convertRegionPrices |
110
+ | `client.deobfuscation` | upload |
111
+ | `client.expansionFiles` | get, update, patch, upload |
112
+ | `client.dataSafety` | get, update |
113
+ | `client.deviceTiers` | list, get, create |
114
+ | `client.internalSharing` | uploadBundle, uploadApk |
115
+ | `client.generatedApks` | list, download |
116
+ | `client.externalTransactions` | create, get, refund |
117
+ | `client.appRecovery` | create, deploy, cancel, list |
118
+ | `reporting.*` | queryMetricSet, getAnomalies, searchErrorIssues, searchErrorReports |
119
+ | `users.*` | list, get, create, patch, delete, listGrants, createGrant, patchGrant, deleteGrant |
120
120
 
121
121
  ## Pagination
122
122
 
@@ -146,7 +146,7 @@ try {
146
146
  await client.tracks.get("com.example.app", editId, "production");
147
147
  } catch (error) {
148
148
  if (error instanceof ApiError) {
149
- console.error(error.code); // "API_NOT_FOUND"
149
+ console.error(error.code); // "API_NOT_FOUND"
150
150
  console.error(error.statusCode); // 404
151
151
  console.error(error.suggestion); // actionable fix
152
152
  }
@@ -159,12 +159,30 @@ All Google Play API types are exported:
159
159
 
160
160
  ```typescript
161
161
  import type {
162
- PlayApiClient, ReportingApiClient, UsersApiClient, ApiClientOptions,
163
- Track, Release, ReleaseStatus, Bundle, Listing,
164
- Subscription, BasePlan, SubscriptionOffer, InAppProduct,
165
- Review, ProductPurchase, SubscriptionPurchaseV2, VoidedPurchase,
166
- MetricSetQuery, MetricSetResponse, ErrorIssue,
167
- User, Grant, ImageType, Money,
162
+ PlayApiClient,
163
+ ReportingApiClient,
164
+ UsersApiClient,
165
+ ApiClientOptions,
166
+ Track,
167
+ Release,
168
+ ReleaseStatus,
169
+ Bundle,
170
+ Listing,
171
+ Subscription,
172
+ BasePlan,
173
+ SubscriptionOffer,
174
+ InAppProduct,
175
+ Review,
176
+ ProductPurchase,
177
+ SubscriptionPurchaseV2,
178
+ VoidedPurchase,
179
+ MetricSetQuery,
180
+ MetricSetResponse,
181
+ ErrorIssue,
182
+ User,
183
+ Grant,
184
+ ImageType,
185
+ Money,
168
186
  } from "@gpc-cli/api";
169
187
  ```
170
188
 
package/dist/index.d.ts CHANGED
@@ -395,6 +395,27 @@ interface BasePlanMigratePricesRequest {
395
395
  };
396
396
  latencyTolerance?: ProductUpdateLatencyTolerance;
397
397
  }
398
+ interface BatchMigratePricesRequest {
399
+ requests: {
400
+ packageName: string;
401
+ productId: string;
402
+ basePlanId: string;
403
+ regionalPriceMigrations: {
404
+ regionCode: string;
405
+ oldestAllowedPriceVersionTime?: string;
406
+ priceIncreaseType?: string;
407
+ }[];
408
+ regionsVersion?: {
409
+ version?: string;
410
+ };
411
+ latencyTolerance?: ProductUpdateLatencyTolerance;
412
+ }[];
413
+ }
414
+ interface BatchMigratePricesResponse {
415
+ responses: {
416
+ subscription?: Subscription;
417
+ }[];
418
+ }
398
419
  interface SubscriptionOfferPhase {
399
420
  recurrenceCount: number;
400
421
  duration: string;
@@ -458,8 +479,6 @@ interface SubscriptionPurchaseV2 {
458
479
  subscriptionState: string;
459
480
  acknowledgementState?: string;
460
481
  linkedPurchaseToken?: string;
461
- /** Current offer phase: free trial, introductory price, proration, or base plan price. (Jan 2026) */
462
- offerPhase?: string;
463
482
  /** Resubscription context when purchase originates from Play Store. (Nov 2025) */
464
483
  outOfAppPurchaseContext?: {
465
484
  externalTransactionToken?: string;
@@ -529,8 +548,13 @@ interface SubscriptionPurchaseLineItem {
529
548
  offerId?: string;
530
549
  };
531
550
  };
532
- /** Current offer phase identifier. (Jan 2026) */
533
- offerPhase?: string;
551
+ /** Current offer phase (union field — exactly one set). (Jan 2026) */
552
+ offerPhase?: {
553
+ basePrice?: Record<string, unknown>;
554
+ freeTrial?: Record<string, unknown>;
555
+ introductoryPrice?: Record<string, unknown>;
556
+ proratedPeriod?: Record<string, unknown>;
557
+ };
534
558
  }
535
559
  interface SubscriptionPurchase {
536
560
  startTimeMillis: string;
@@ -638,9 +662,39 @@ interface ProductPurchaseLineItem {
638
662
  offerTags?: string[];
639
663
  };
640
664
  }
665
+ /**
666
+ * Request body for purchases.subscriptions.acknowledge.
667
+ * externalAccountId is used to associate a resubscription purchase with a
668
+ * user identifier. (Nov 2025)
669
+ */
670
+ interface AcknowledgeSubscriptionRequest {
671
+ developerPayload?: string;
672
+ externalAccountId?: string;
673
+ }
641
674
  interface SubscriptionsV2CancelRequest {
642
675
  cancellationType?: string;
643
676
  }
677
+ /**
678
+ * Request body for purchases.subscriptionsv2.revoke.
679
+ * revocationContext is a union — exactly one of fullRefund, proratedRefund,
680
+ * or itemBasedRefund should be set. itemBasedRefund targets a single add-on
681
+ * product by productId. (May 2025)
682
+ */
683
+ interface RevokeSubscriptionV2Request {
684
+ revocationContext?: {
685
+ fullRefund?: Record<string, never>;
686
+ proratedRefund?: Record<string, never>;
687
+ itemBasedRefund?: {
688
+ productId: string;
689
+ };
690
+ };
691
+ }
692
+ /**
693
+ * Request body for purchases.subscriptionsv2.defer.
694
+ * For subscriptions with add-ons, the billing date of all line items is
695
+ * deferred together server-side — no per-line-item field is required in
696
+ * the request. (Jan 2026)
697
+ */
644
698
  interface SubscriptionsV2DeferRequest {
645
699
  deferralInfo: {
646
700
  desiredExpiryTime: string;
@@ -888,14 +942,26 @@ interface TaxAndComplianceSettings {
888
942
  interface OneTimeOffer {
889
943
  packageName: string;
890
944
  productId: string;
945
+ purchaseOptionId: string;
891
946
  offerId: string;
892
- regionalConfigs: Record<string, OneTimeOfferRegionalConfig>;
947
+ state?: "DRAFT" | "ACTIVE" | "CANCELLED" | "INACTIVE";
948
+ regionalPricingAndAvailabilityConfigs?: Record<string, OneTimeOfferRegionalConfig>;
949
+ /** @deprecated Use regionalPricingAndAvailabilityConfigs instead */
950
+ regionalConfigs?: Record<string, OneTimeOfferRegionalConfig>;
893
951
  otherRegionsConfig?: {
894
952
  usdPrice: {
895
953
  units: string;
896
954
  nanos?: number;
897
955
  };
898
956
  };
957
+ offerTags?: Array<{
958
+ tag: string;
959
+ }>;
960
+ regionsVersion?: {
961
+ version: string;
962
+ };
963
+ preOrderOffer?: Record<string, unknown>;
964
+ discountedOffer?: Record<string, unknown>;
899
965
  }
900
966
  interface OneTimeOfferRegionalConfig {
901
967
  price: {
@@ -910,25 +976,25 @@ interface OneTimeProductsListResponse {
910
976
  nextPageToken?: string;
911
977
  }
912
978
  interface OneTimeOffersListResponse {
913
- oneTimeOffers: OneTimeOffer[];
979
+ oneTimeProductOffers?: OneTimeOffer[];
980
+ /** @deprecated Use oneTimeProductOffers */
981
+ oneTimeOffers?: OneTimeOffer[];
914
982
  nextPageToken?: string;
915
983
  }
916
- interface PurchaseOption {
917
- packageName: string;
918
- productId: string;
919
- purchaseOptionId: string;
920
- stateInfo?: {
921
- activeState?: Record<string, unknown>;
922
- inactiveState?: Record<string, unknown>;
923
- };
924
- listings?: Record<string, {
925
- title: string;
926
- description?: string;
927
- }>;
984
+ interface SystemApkDeviceSpec {
985
+ supportedAbis?: string[];
986
+ supportedLocales?: string[];
987
+ screenDensity?: number;
928
988
  }
929
- interface PurchaseOptionsListResponse {
930
- purchaseOptions: PurchaseOption[];
931
- nextPageToken?: string;
989
+ interface SystemApkOptions {
990
+ uncompressedNativeLibraries?: boolean;
991
+ uncompressedDexFiles?: boolean;
992
+ rotated?: boolean;
993
+ }
994
+ interface SystemApkVariant {
995
+ variantId?: number;
996
+ deviceSpec?: SystemApkDeviceSpec;
997
+ options?: SystemApkOptions;
932
998
  }
933
999
  interface InAppProductsBatchUpdateRequest {
934
1000
  requests: {
@@ -972,7 +1038,7 @@ interface ReleaseSummary {
972
1038
  activeArtifacts?: {
973
1039
  versionCode: number;
974
1040
  }[];
975
- releaseLifecycleState?: 'RELEASE_LIFECYCLE_STATE_UNSPECIFIED' | 'DRAFT' | 'NOT_SENT_FOR_REVIEW' | 'IN_REVIEW' | 'APPROVED_NOT_PUBLISHED' | 'NOT_APPROVED' | 'PUBLISHED';
1041
+ releaseLifecycleState?: "RELEASE_LIFECYCLE_STATE_UNSPECIFIED" | "DRAFT" | "NOT_SENT_FOR_REVIEW" | "IN_REVIEW" | "APPROVED_NOT_PUBLISHED" | "NOT_APPROVED" | "PUBLISHED";
976
1042
  }
977
1043
  interface ReleasesListResponse {
978
1044
  releases: ReleaseSummary[];
@@ -1085,6 +1151,7 @@ interface PlayApiClient {
1085
1151
  deactivateBasePlan(packageName: string, productId: string, basePlanId: string): Promise<Subscription>;
1086
1152
  deleteBasePlan(packageName: string, productId: string, basePlanId: string): Promise<void>;
1087
1153
  migratePrices(packageName: string, productId: string, basePlanId: string, body: BasePlanMigratePricesRequest): Promise<Subscription>;
1154
+ batchMigratePrices(packageName: string, productId: string, body: BatchMigratePricesRequest): Promise<BatchMigratePricesResponse>;
1088
1155
  listOffers(packageName: string, productId: string, basePlanId: string): Promise<OffersListResponse>;
1089
1156
  getOffer(packageName: string, productId: string, basePlanId: string, offerId: string): Promise<SubscriptionOffer>;
1090
1157
  createOffer(packageName: string, productId: string, basePlanId: string, data: SubscriptionOffer, offerId?: string, regionsVersion?: string): Promise<SubscriptionOffer>;
@@ -1138,6 +1205,10 @@ interface PlayApiClient {
1138
1205
  autoConvertMissingPrices?: boolean;
1139
1206
  allowMissing?: boolean;
1140
1207
  }): Promise<InAppProduct>;
1208
+ patch(packageName: string, sku: string, data: Partial<InAppProduct>, options?: {
1209
+ autoConvertMissingPrices?: boolean;
1210
+ latencyTolerance?: string;
1211
+ }): Promise<InAppProduct>;
1141
1212
  delete(packageName: string, sku: string): Promise<void>;
1142
1213
  batchUpdate(packageName: string, requests: InAppProductsBatchUpdateRequest): Promise<InAppProductsBatchUpdateResponse>;
1143
1214
  batchGet(packageName: string, skus: string[]): Promise<InAppProduct[]>;
@@ -1153,11 +1224,8 @@ interface PlayApiClient {
1153
1224
  getSubscriptionV1(packageName: string, subscriptionId: string, token: string): Promise<SubscriptionPurchase>;
1154
1225
  cancelSubscription(packageName: string, subscriptionId: string, token: string): Promise<void>;
1155
1226
  deferSubscription(packageName: string, subscriptionId: string, token: string, body: SubscriptionDeferRequest): Promise<SubscriptionDeferResponse>;
1156
- acknowledgeSubscription(packageName: string, subscriptionId: string, token: string, body?: {
1157
- developerPayload?: string;
1158
- }): Promise<void>;
1159
- revokeSubscriptionV2(packageName: string, token: string): Promise<void>;
1160
- refundSubscriptionV2(packageName: string, token: string): Promise<void>;
1227
+ acknowledgeSubscription(packageName: string, subscriptionId: string, token: string, body?: AcknowledgeSubscriptionRequest): Promise<void>;
1228
+ revokeSubscriptionV2(packageName: string, token: string, body?: RevokeSubscriptionV2Request): Promise<void>;
1161
1229
  /** V2 cancel with cancellationType support. (Sep 2025) */
1162
1230
  cancelSubscriptionV2(packageName: string, token: string, body?: SubscriptionsV2CancelRequest): Promise<void>;
1163
1231
  /** V2 defer for subscriptions with add-ons. (Jan 2026) */
@@ -1191,6 +1259,7 @@ interface PlayApiClient {
1191
1259
  testers: {
1192
1260
  get(packageName: string, editId: string, track: string): Promise<Testers>;
1193
1261
  update(packageName: string, editId: string, track: string, testers: Testers): Promise<Testers>;
1262
+ patch(packageName: string, editId: string, track: string, testers: Partial<Testers>): Promise<Testers>;
1194
1263
  };
1195
1264
  deobfuscation: {
1196
1265
  upload(packageName: string, editId: string, versionCode: number, filePath: string, fileType?: DeobfuscationFileType): Promise<DeobfuscationFile>;
@@ -1221,11 +1290,11 @@ interface PlayApiClient {
1221
1290
  create(packageName: string, product: OneTimeProduct, regionsVersion?: string): Promise<OneTimeProduct>;
1222
1291
  update(packageName: string, productId: string, product: Partial<OneTimeProduct>, updateMask?: string, regionsVersion?: string, options?: MutationOptions): Promise<OneTimeProduct>;
1223
1292
  delete(packageName: string, productId: string): Promise<void>;
1224
- listOffers(packageName: string, productId: string): Promise<OneTimeOffersListResponse>;
1225
- getOffer(packageName: string, productId: string, offerId: string): Promise<OneTimeOffer>;
1226
- createOffer(packageName: string, productId: string, offer: OneTimeOffer, regionsVersion?: string): Promise<OneTimeOffer>;
1227
- updateOffer(packageName: string, productId: string, offerId: string, offer: Partial<OneTimeOffer>, updateMask?: string, regionsVersion?: string, options?: MutationOptions): Promise<OneTimeOffer>;
1228
- deleteOffer(packageName: string, productId: string, offerId: string): Promise<void>;
1293
+ listOffers(packageName: string, productId: string, purchaseOptionId?: string): Promise<OneTimeOffersListResponse>;
1294
+ getOffer(packageName: string, productId: string, purchaseOptionId: string, offerId: string): Promise<OneTimeOffer>;
1295
+ createOffer(packageName: string, productId: string, purchaseOptionId: string, offer: OneTimeOffer, regionsVersion?: string): Promise<OneTimeOffer>;
1296
+ updateOffer(packageName: string, productId: string, purchaseOptionId: string, offerId: string, offer: Partial<OneTimeOffer>, updateMask?: string, regionsVersion?: string, options?: MutationOptions): Promise<OneTimeOffer>;
1297
+ deleteOffer(packageName: string, productId: string, purchaseOptionId: string, offerId: string): Promise<void>;
1229
1298
  batchGet(packageName: string, productIds: string[]): Promise<OneTimeProduct[]>;
1230
1299
  batchUpdate(packageName: string, requests: {
1231
1300
  requests: Array<{
@@ -1237,13 +1306,63 @@ interface PlayApiClient {
1237
1306
  oneTimeProducts: OneTimeProduct[];
1238
1307
  }>;
1239
1308
  batchDelete(packageName: string, productIds: string[]): Promise<void>;
1240
- };
1241
- purchaseOptions: {
1242
- list(packageName: string): Promise<PurchaseOptionsListResponse>;
1243
- get(packageName: string, purchaseOptionId: string): Promise<PurchaseOption>;
1244
- create(packageName: string, data: PurchaseOption): Promise<PurchaseOption>;
1245
- activate(packageName: string, purchaseOptionId: string): Promise<PurchaseOption>;
1246
- deactivate(packageName: string, purchaseOptionId: string): Promise<PurchaseOption>;
1309
+ batchDeletePurchaseOptions(packageName: string, productId: string, requests: Array<{
1310
+ packageName: string;
1311
+ productId: string;
1312
+ purchaseOptionId: string;
1313
+ force?: boolean;
1314
+ latencyTolerance?: string;
1315
+ }>): Promise<void>;
1316
+ batchUpdatePurchaseOptionStates(packageName: string, productId: string, requests: Array<{
1317
+ activatePurchaseOptionRequest?: {
1318
+ packageName: string;
1319
+ productId: string;
1320
+ purchaseOptionId: string;
1321
+ latencyTolerance?: string;
1322
+ };
1323
+ deactivatePurchaseOptionRequest?: {
1324
+ packageName: string;
1325
+ productId: string;
1326
+ purchaseOptionId: string;
1327
+ latencyTolerance?: string;
1328
+ };
1329
+ }>): Promise<{
1330
+ oneTimeProducts: OneTimeProduct[];
1331
+ }>;
1332
+ cancelOffer(packageName: string, productId: string, purchaseOptionId: string, offerId: string, latencyTolerance?: string): Promise<OneTimeOffer>;
1333
+ batchGetOffers(packageName: string, productId: string, purchaseOptionId: string, requests: Array<{
1334
+ packageName: string;
1335
+ productId: string;
1336
+ purchaseOptionId: string;
1337
+ offerId: string;
1338
+ }>): Promise<{
1339
+ oneTimeProductOffers: OneTimeOffer[];
1340
+ }>;
1341
+ batchUpdateOffers(packageName: string, productId: string, purchaseOptionId: string, requests: Array<{
1342
+ oneTimeProductOffer: Partial<OneTimeOffer>;
1343
+ updateMask?: string;
1344
+ regionsVersion?: {
1345
+ version: string;
1346
+ };
1347
+ allowMissing?: boolean;
1348
+ latencyTolerance?: string;
1349
+ }>): Promise<{
1350
+ oneTimeProductOffers: OneTimeOffer[];
1351
+ }>;
1352
+ batchUpdateOfferStates(packageName: string, productId: string, purchaseOptionId: string, requests: Array<{
1353
+ activateOneTimeProductOfferRequest?: Record<string, unknown>;
1354
+ deactivateOneTimeProductOfferRequest?: Record<string, unknown>;
1355
+ cancelOneTimeProductOfferRequest?: Record<string, unknown>;
1356
+ }>): Promise<{
1357
+ oneTimeProductOffers: OneTimeOffer[];
1358
+ }>;
1359
+ batchDeleteOffers(packageName: string, productId: string, purchaseOptionId: string, requests: Array<{
1360
+ packageName: string;
1361
+ productId: string;
1362
+ purchaseOptionId: string;
1363
+ offerId: string;
1364
+ latencyTolerance?: string;
1365
+ }>): Promise<void>;
1247
1366
  };
1248
1367
  internalAppSharing: {
1249
1368
  uploadBundle(packageName: string, bundlePath: string): Promise<InternalAppSharingArtifact>;
@@ -1253,6 +1372,14 @@ interface PlayApiClient {
1253
1372
  list(packageName: string, versionCode: number): Promise<GeneratedApk[]>;
1254
1373
  download(packageName: string, versionCode: number, id: string): Promise<ArrayBuffer>;
1255
1374
  };
1375
+ systemApks: {
1376
+ create(packageName: string, versionCode: number, variant: SystemApkVariant): Promise<SystemApkVariant>;
1377
+ list(packageName: string, versionCode: number): Promise<{
1378
+ variants: SystemApkVariant[];
1379
+ }>;
1380
+ get(packageName: string, versionCode: number, variantId: number): Promise<SystemApkVariant>;
1381
+ download(packageName: string, versionCode: number, variantId: number): Promise<ArrayBuffer>;
1382
+ };
1256
1383
  }
1257
1384
  declare function createApiClient(options: ApiClientOptions): PlayApiClient;
1258
1385
 
@@ -1273,11 +1400,11 @@ interface UsersApiClient {
1273
1400
  pageToken?: string;
1274
1401
  pageSize?: number;
1275
1402
  }): Promise<UsersListResponse>;
1276
- get(developerId: string, userId: string): Promise<User>;
1277
1403
  create(developerId: string, user: Partial<User>): Promise<User>;
1278
1404
  update(developerId: string, userId: string, user: Partial<User>, updateMask?: string): Promise<User>;
1279
1405
  delete(developerId: string, userId: string): Promise<void>;
1280
1406
  grants: {
1407
+ /** Not in official API reference but may work as an undocumented endpoint. */
1281
1408
  list(developerId: string, email: string): Promise<GrantsListResponse>;
1282
1409
  create(developerId: string, email: string, grant: Partial<Grant>): Promise<Grant>;
1283
1410
  patch(developerId: string, email: string, packageName: string, grant: Partial<Grant>, updateMask?: string): Promise<Grant>;
@@ -1429,4 +1556,4 @@ declare class PlayApiError extends Error {
1429
1556
  /** Files below this threshold use simple upload instead. */
1430
1557
  declare const RESUMABLE_THRESHOLD: number;
1431
1558
 
1432
- export { type Achievement, type Anomaly, type AnomalyDetectionResponse, type ApiClientOptions, type ApiResponse, type ApkInfo, type ApksListResponse, type AppDetails, type AppEdit, type AppRecoveriesListResponse, type AppRecoveryAction, type AppRecoveryTargeting, type BasePlan, type BasePlanMigratePricesRequest, type BatchGetOrdersResponse, type Bundle, type BundleListResponse, type ChangesInReviewBehavior, type ConvertRegionPricesRequest, type ConvertRegionPricesResponse, type ConvertedRegionPrice, type CountryAvailability, type CreateAppRecoveryActionRequest, type CustomApp, type CustomAppsListResponse, type DataSafety, type DataSafetyDataType, type DataSafetyPurpose, type DeobfuscationFile, type DeobfuscationFileType, type DeobfuscationUploadResponse, type DeveloperComment, type DeveloperPermission, type DeviceGroup, type DeviceSelector, type DeviceTier, type DeviceTierConfig, type DeviceTierConfigsListResponse, type EditCommitOptions, type EnterpriseApiClient, type ErrorIssue, type ErrorIssuesResponse, type ErrorReport, type ErrorReportsResponse, type ExpansionFile, type ExpansionFileType, type ExternalTransaction, type ExternalTransactionAmount, type ExternalTransactionRefund, type ExternallyHostedApk, type ExternallyHostedApkResponse, type GameEvent, type GamesApiClient, type GeneratedApk, type GeneratedApksPerVersion, type Grant, type GrantsListResponse, type HttpClient, type Image, type ImageType, type ImageUploadResponse, type ImagesDeleteAllResponse, type ImagesListResponse, type InAppProduct, type InAppProductListing, type InAppProductsBatchDeleteRequest, type InAppProductsBatchGetRequest, type InAppProductsBatchUpdateRequest, type InAppProductsBatchUpdateResponse, type InAppProductsListResponse, type InternalAppSharingArtifact, type Leaderboard, type LeaderboardScore, type Listing, type ListingsListResponse, type MetricRow, type MetricSetQuery, type MetricSetResponse, type Money, type MutationOptions, type OffersListResponse, type OneTimeOffer, type OneTimeOfferRegionalConfig, type OneTimeOffersListResponse, type OneTimeProduct, type OneTimeProductListing, type OneTimeProductsListResponse, type Order, type OrderLineItem, type PagedResponse, type PaginateOptions, type PlayApiClient, PlayApiError, type ProductPurchase, type ProductPurchaseLineItem, type ProductPurchaseV2, type ProductUpdateLatencyTolerance, type PurchaseOption, type PurchaseOptionsListResponse, RATE_LIMIT_BUCKETS, RESUMABLE_THRESHOLD, type RateLimitBucket, type RateLimiter, type RegionalBasePlanConfig, type Release, type ReleaseNote, type ReleaseStatus, type ReleaseSummary, type ReleasesListResponse, type ReportBucket, type ReportType, type ReportingAggregation, type ReportingApiClient, type ReportingDimension, type ReportsListResponse, type ResumableUploadOptions, type RetryLogEntry, type Review, type ReviewComment, type ReviewReplyRequest, type ReviewReplyResponse, type ReviewsListOptions, type ReviewsListResponse, type StatsDimension, type Subscription, type SubscriptionDeferRequest, type SubscriptionDeferResponse, type SubscriptionListing, type SubscriptionOffer, type SubscriptionOfferPhase, type SubscriptionPurchase, type SubscriptionPurchaseLineItem, type SubscriptionPurchaseV2, type SubscriptionsBatchGetRequest, type SubscriptionsBatchGetResponse, type SubscriptionsBatchUpdateRequest, type SubscriptionsBatchUpdateResponse, type SubscriptionsListResponse, type SubscriptionsV2CancelRequest, type SubscriptionsV2DeferRequest, type SubscriptionsV2DeferResponse, type TaxAndComplianceSettings, type Testers, type TokenPagination, type Track, type TrackListResponse, type UploadProgressEvent, type UploadResponse, type User, type UserComment, type UsersApiClient, type UsersListResponse, type VitalsMetricSet, type VoidedPurchase, type VoidedPurchasesListResponse, createApiClient, createEnterpriseClient, createGamesClient, createHttpClient, createRateLimiter, createReportingClient, createUsersClient, paginate, paginateAll, paginateParallel, resolveBucket };
1559
+ export { type Achievement, type AcknowledgeSubscriptionRequest, type Anomaly, type AnomalyDetectionResponse, type ApiClientOptions, type ApiResponse, type ApkInfo, type ApksListResponse, type AppDetails, type AppEdit, type AppRecoveriesListResponse, type AppRecoveryAction, type AppRecoveryTargeting, type BasePlan, type BasePlanMigratePricesRequest, type BatchGetOrdersResponse, type BatchMigratePricesRequest, type BatchMigratePricesResponse, type Bundle, type BundleListResponse, type ChangesInReviewBehavior, type ConvertRegionPricesRequest, type ConvertRegionPricesResponse, type ConvertedRegionPrice, type CountryAvailability, type CreateAppRecoveryActionRequest, type CustomApp, type CustomAppsListResponse, type DataSafety, type DataSafetyDataType, type DataSafetyPurpose, type DeobfuscationFile, type DeobfuscationFileType, type DeobfuscationUploadResponse, type DeveloperComment, type DeveloperPermission, type DeviceGroup, type DeviceSelector, type DeviceTier, type DeviceTierConfig, type DeviceTierConfigsListResponse, type EditCommitOptions, type EnterpriseApiClient, type ErrorIssue, type ErrorIssuesResponse, type ErrorReport, type ErrorReportsResponse, type ExpansionFile, type ExpansionFileType, type ExternalTransaction, type ExternalTransactionAmount, type ExternalTransactionRefund, type ExternallyHostedApk, type ExternallyHostedApkResponse, type GameEvent, type GamesApiClient, type GeneratedApk, type GeneratedApksPerVersion, type Grant, type GrantsListResponse, type HttpClient, type Image, type ImageType, type ImageUploadResponse, type ImagesDeleteAllResponse, type ImagesListResponse, type InAppProduct, type InAppProductListing, type InAppProductsBatchDeleteRequest, type InAppProductsBatchGetRequest, type InAppProductsBatchUpdateRequest, type InAppProductsBatchUpdateResponse, type InAppProductsListResponse, type InternalAppSharingArtifact, type Leaderboard, type LeaderboardScore, type Listing, type ListingsListResponse, type MetricRow, type MetricSetQuery, type MetricSetResponse, type Money, type MutationOptions, type OffersListResponse, type OneTimeOffer, type OneTimeOfferRegionalConfig, type OneTimeOffersListResponse, type OneTimeProduct, type OneTimeProductListing, type OneTimeProductsListResponse, type Order, type OrderLineItem, type PagedResponse, type PaginateOptions, type PlayApiClient, PlayApiError, type ProductPurchase, type ProductPurchaseLineItem, type ProductPurchaseV2, type ProductUpdateLatencyTolerance, RATE_LIMIT_BUCKETS, RESUMABLE_THRESHOLD, type RateLimitBucket, type RateLimiter, type RegionalBasePlanConfig, type Release, type ReleaseNote, type ReleaseStatus, type ReleaseSummary, type ReleasesListResponse, type ReportBucket, type ReportType, type ReportingAggregation, type ReportingApiClient, type ReportingDimension, type ReportsListResponse, type ResumableUploadOptions, type RetryLogEntry, type Review, type ReviewComment, type ReviewReplyRequest, type ReviewReplyResponse, type ReviewsListOptions, type ReviewsListResponse, type RevokeSubscriptionV2Request, type StatsDimension, type Subscription, type SubscriptionDeferRequest, type SubscriptionDeferResponse, type SubscriptionListing, type SubscriptionOffer, type SubscriptionOfferPhase, type SubscriptionPurchase, type SubscriptionPurchaseLineItem, type SubscriptionPurchaseV2, type SubscriptionsBatchGetRequest, type SubscriptionsBatchGetResponse, type SubscriptionsBatchUpdateRequest, type SubscriptionsBatchUpdateResponse, type SubscriptionsListResponse, type SubscriptionsV2CancelRequest, type SubscriptionsV2DeferRequest, type SubscriptionsV2DeferResponse, type SystemApkDeviceSpec, type SystemApkOptions, type SystemApkVariant, type TaxAndComplianceSettings, type Testers, type TokenPagination, type Track, type TrackListResponse, type UploadProgressEvent, type UploadResponse, type User, type UserComment, type UsersApiClient, type UsersListResponse, type VitalsMetricSet, type VoidedPurchase, type VoidedPurchasesListResponse, createApiClient, createEnterpriseClient, createGamesClient, createHttpClient, createRateLimiter, createReportingClient, createUsersClient, paginate, paginateAll, paginateParallel, resolveBucket };