@expo/apple-utils 2.1.19 → 2.1.21

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.
@@ -1026,7 +1026,12 @@ declare module "portal/Keys" {
1026
1026
  */
1027
1027
  APNS = "U27F4V844T",
1028
1028
  DEVICE_CHECK = "DQ8HTZ7739",
1029
- MUSIC_KIT = "6A7HVUVQ3M"
1029
+ MUSIC_KIT = "6A7HVUVQ3M",
1030
+ /**
1031
+ * Sign In with Apple key configuration.
1032
+ * Associates with bundle IDs for primary app consent.
1033
+ */
1034
+ APPLE_ID_AUTH = "APPLE_ID_AUTH_KEY_CONFIGURATION"
1030
1035
  }
1031
1036
  /**
1032
1037
  * Find all keys available for the currently authenticated account.
@@ -1070,6 +1075,34 @@ declare module "portal/Keys" {
1070
1075
  export class MaxKeysCreatedError extends Error {
1071
1076
  constructor(services: string[]);
1072
1077
  }
1078
+ /**
1079
+ * Creates a new Sign In with Apple key.
1080
+ *
1081
+ * @param name The name of the key
1082
+ * @param bundleIds Array of bundle ID opaque IDs (not identifiers) to associate with the key
1083
+ * @param usageDescription Optional description for the key
1084
+ *
1085
+ * @throws MaxKeysCreatedError -- too many SIWA keys have already been created
1086
+ */
1087
+ export function createSignInWithAppleKeyAsync(context: RequestContext, { name, bundleIds, usageDescription, }: {
1088
+ name: string;
1089
+ bundleIds: string[];
1090
+ usageDescription?: string;
1091
+ }): Promise<AppStoreKey>;
1092
+ /**
1093
+ * Updates an existing Sign In with Apple key's bundle ID associations.
1094
+ *
1095
+ * @param id The key ID
1096
+ * @param name The name of the key
1097
+ * @param bundleIds Array of bundle ID opaque IDs to associate with the key
1098
+ * @param usageDescription Optional description for the key
1099
+ */
1100
+ export function updateSignInWithAppleKeyAsync(context: RequestContext, { id, name, bundleIds, usageDescription, }: {
1101
+ id: string;
1102
+ name: string;
1103
+ bundleIds: string[];
1104
+ usageDescription?: string;
1105
+ }): Promise<AppStoreKey>;
1073
1106
  }
1074
1107
  declare module "connect/ClientAPI" {
1075
1108
  import { AxiosResponse } from 'axios';
@@ -1136,6 +1169,7 @@ declare module "connect/ConnectAPI" {
1136
1169
  export interface ConnectQueryParams<F extends Record<string, any> = Record<string, any>> {
1137
1170
  filter?: F;
1138
1171
  fields?: F;
1172
+ exists?: Record<string, boolean>;
1139
1173
  includes?: string[];
1140
1174
  limit?: number;
1141
1175
  sort?: string;
@@ -1187,7 +1221,7 @@ declare module "connect/ConnectAPI" {
1187
1221
  }
1188
1222
  export const client: ConnectClientAPI;
1189
1223
  export function filterQueryParamsWithDefaults(query?: ConnectQueryParams, defaultQuery?: ConnectQueryParams): Record<string, any>;
1190
- export function filterQueryParams({ fields, filter, includes, limit, sort, cursor, }?: ConnectQueryParams): Record<string, any>;
1224
+ export function filterQueryParams({ fields, filter, exists, includes, limit, sort, cursor, }?: ConnectQueryParams): Record<string, any>;
1191
1225
  }
1192
1226
  declare module "connect/IrisAPI" {
1193
1227
  import { AxiosResponse } from 'axios';
@@ -1413,37 +1447,6 @@ declare module "connect/models/ContentProvider" {
1413
1447
  } | undefined) => Promise<ContentProvider[]>;
1414
1448
  }
1415
1449
  }
1416
- declare module "connect/models/AppClipAppStoreReviewDetail" {
1417
- import { RequestContext } from "network/Request";
1418
- import { ConnectModel } from "connect/models/ConnectModel";
1419
- export interface AppClipAppStoreReviewDetailProps {
1420
- invocationUrls: string[] | null;
1421
- }
1422
- /**
1423
- * App Store review detail for an App Clip default experience.
1424
- *
1425
- * Holds the list of invocation URLs that App Review will use to launch the
1426
- * App Clip during review.
1427
- *
1428
- * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipappstorereviewdetail
1429
- */
1430
- export class AppClipAppStoreReviewDetail extends ConnectModel<AppClipAppStoreReviewDetailProps> {
1431
- static type: string;
1432
- static infoAsync: (context: RequestContext, props: {
1433
- id: string;
1434
- query?: import("connect/ConnectAPI").ConnectQueryParams;
1435
- }) => Promise<AppClipAppStoreReviewDetail>;
1436
- static deleteAsync: (context: RequestContext, props: {
1437
- id: string;
1438
- }) => Promise<void>;
1439
- static createAsync(context: RequestContext, { appClipDefaultExperienceId, attributes, }: {
1440
- appClipDefaultExperienceId: string;
1441
- attributes: Pick<AppClipAppStoreReviewDetailProps, 'invocationUrls'>;
1442
- }): Promise<AppClipAppStoreReviewDetail>;
1443
- updateAsync(options: Partial<Pick<AppClipAppStoreReviewDetailProps, 'invocationUrls'>>): Promise<AppClipAppStoreReviewDetail>;
1444
- deleteAsync(): Promise<void>;
1445
- }
1446
- }
1447
1450
  declare module "utils/crypto" {
1448
1451
  import * as crypto from 'crypto';
1449
1452
  export function getChecksum(value: crypto.BinaryLike): string;
@@ -1466,6 +1469,8 @@ declare module "connect/AssetAPI" {
1466
1469
  export enum AppMediaAssetStateState {
1467
1470
  AWAITING_UPLOAD = "AWAITING_UPLOAD",
1468
1471
  UPLOAD_COMPLETE = "UPLOAD_COMPLETE",
1472
+ /** Used by videoDeliveryState while Apple transcodes the video. */
1473
+ PROCESSING = "PROCESSING",
1469
1474
  COMPLETE = "COMPLETE",
1470
1475
  FAILED = "FAILED"
1471
1476
  }
@@ -1502,137 +1507,268 @@ declare module "connect/AssetAPI" {
1502
1507
  }
1503
1508
  export const assetClient: AssetAPI;
1504
1509
  }
1505
- declare module "connect/models/AppClipHeaderImage" {
1510
+ declare module "connect/models/AppPreview" {
1506
1511
  import { RequestContext } from "network/Request";
1507
1512
  import { AppMediaAssetState, ImageAsset, UploadOperation } from "connect/AssetAPI";
1508
1513
  import { ConnectModel } from "connect/models/ConnectModel";
1509
- export interface AppClipHeaderImageProps {
1514
+ export interface AppPreviewProps {
1510
1515
  fileSize: number;
1511
1516
  fileName: string;
1512
1517
  sourceFileChecksum: string;
1513
- imageAsset: ImageAsset;
1518
+ /**
1519
+ * Time code for the preview frame (poster image).
1520
+ * Must be exactly 4-segment "HH:MM:SS:FF" format where FF is frames.
1521
+ * 3-segment ("MM:SS:FF") and 5+ segment formats are rejected with "Invalid format!".
1522
+ * Values beyond the video duration are silently accepted (clamped to last frame).
1523
+ * Empty string and null are rejected with "previewFrameTimeCode attribute is missing!".
1524
+ * @example "00:00:05:01"
1525
+ */
1526
+ previewFrameTimeCode: string | null;
1527
+ mimeType: string;
1528
+ /**
1529
+ * URL to download the processed video preview.
1530
+ * Only available after processing is complete.
1531
+ */
1532
+ videoUrl: string | null;
1533
+ /**
1534
+ * Preview frame/poster image with processing state.
1535
+ * Contains the image asset and its processing state (e.g., COMPLETE, PROCESSING).
1536
+ * This is the detailed version returned by the API after setting a preview frame time code.
1537
+ */
1538
+ previewFrameImage: {
1539
+ image: ImageAsset;
1540
+ state: AppMediaAssetState;
1541
+ } | null;
1542
+ /**
1543
+ * Preview frame/poster image asset.
1544
+ * Contains templateUrl with {w}, {h}, {f} placeholders.
1545
+ */
1546
+ previewImage: ImageAsset | null;
1514
1547
  uploadOperations: UploadOperation[];
1515
1548
  assetDeliveryState: AppMediaAssetState;
1549
+ /**
1550
+ * Video-specific delivery state. Tracks video transcoding/processing progress
1551
+ * separately from the asset upload state.
1552
+ * Only present for video previews (not screenshots).
1553
+ */
1554
+ videoDeliveryState: AppMediaAssetState | null;
1516
1555
  }
1517
1556
  /**
1518
- * A header image for an App Clip default experience localization.
1519
- *
1520
- * Uses the same upload protocol as `AppScreenshot`:
1521
- * 1. POST `/v1/appClipHeaderImages` with `fileName` + `fileSize` to reserve
1522
- * the asset and obtain `uploadOperations`.
1523
- * 2. PUT the binary data to each operation's URL via `assetClient`.
1524
- * 3. PATCH the resource with `uploaded: true` and `sourceFileChecksum`.
1525
- * 4. Optionally poll until `assetDeliveryState.state` is `COMPLETE`.
1526
- *
1527
- * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipheaderimage
1557
+ * App Preview (video) for App Store listings.
1558
+ * Previews are short videos that demonstrate your app's features.
1528
1559
  */
1529
- export class AppClipHeaderImage extends ConnectModel<AppClipHeaderImageProps> {
1560
+ export class AppPreview extends ConnectModel<AppPreviewProps> {
1530
1561
  static type: string;
1531
1562
  static infoAsync: (context: RequestContext, props: {
1532
1563
  id: string;
1533
1564
  query?: import("connect/ConnectAPI").ConnectQueryParams;
1534
- }) => Promise<AppClipHeaderImage>;
1565
+ }) => Promise<AppPreview>;
1535
1566
  static createAsync(context: RequestContext, { id, attributes, }: {
1536
- /** AppClipDefaultExperienceLocalization id */
1567
+ /** AppPreviewSet ID */
1537
1568
  id: string;
1538
- attributes: Pick<AppClipHeaderImageProps, 'fileName' | 'fileSize'>;
1539
- }): Promise<AppClipHeaderImage>;
1569
+ attributes: Pick<AppPreviewProps, 'fileName' | 'fileSize'> & {
1570
+ /** Optional MIME type (e.g., "video/mp4", "video/quicktime") */
1571
+ mimeType?: string;
1572
+ };
1573
+ }): Promise<AppPreview>;
1540
1574
  /**
1541
- * Upload a header image PNG to App Store Connect for an App Clip
1542
- * default-experience localization.
1543
- *
1544
- * @param id `AppClipDefaultExperienceLocalization` id
1575
+ * Upload a video preview file.
1576
+ * @param id AppPreviewSet ID
1577
+ * @param filePath Path to the video file (MP4, MOV)
1578
+ * @param waitForProcessing Wait for Apple to process the video (default: true)
1579
+ * @param previewFrameTimeCode Optional time code for preview frame in "HH:MM:SS:FF" format (e.g., "00:00:05:00" for 5 seconds)
1545
1580
  */
1546
- static uploadAsync(context: RequestContext, { id, filePath, waitForProcessing, }: {
1581
+ static uploadAsync(context: RequestContext, { id, filePath, waitForProcessing, previewFrameTimeCode, }: {
1547
1582
  id: string;
1548
1583
  filePath: string;
1549
1584
  waitForProcessing?: boolean;
1550
- }): Promise<AppClipHeaderImage>;
1585
+ previewFrameTimeCode?: string;
1586
+ }): Promise<AppPreview>;
1551
1587
  static deleteAsync: (context: RequestContext, props: {
1552
1588
  id: string;
1553
1589
  }) => Promise<void>;
1554
1590
  deleteAsync(): Promise<void>;
1555
- updateAsync(options: Partial<Pick<AppClipHeaderImageProps, 'sourceFileChecksum'>> & {
1591
+ updateAsync(options: Partial<AppPreviewProps> & {
1556
1592
  uploaded?: boolean;
1557
- }): Promise<AppClipHeaderImage>;
1593
+ }): Promise<AppPreview>;
1594
+ /**
1595
+ * Set the poster frame (preview image) for this app preview.
1596
+ * @param previewFrameTimeCode Time code in "HH:MM:SS:FF" format (e.g., "00:00:05:01" for ~5 seconds)
1597
+ */
1598
+ setPreviewFrameAsync(previewFrameTimeCode: string): Promise<AppPreview>;
1558
1599
  isAwaitingUpload(): boolean;
1600
+ isProcessing(): boolean;
1559
1601
  isComplete(): boolean;
1560
1602
  isFailed(): boolean;
1561
1603
  getErrorMessages(): string[];
1562
1604
  /**
1563
- * Get a downloadable URL for the rendered image asset. Note that the
1564
- * downloaded image is a re-rendered copy and will NOT match
1565
- * `sourceFileChecksum`.
1605
+ * Get the video URL for downloading the preview.
1606
+ * Only available after processing is complete.
1566
1607
  */
1567
- getImageAssetUrl({ width, height, type, }: {
1608
+ getVideoUrl(): string | null;
1609
+ /**
1610
+ * Get the preview frame (poster) image URL.
1611
+ * Returns null if not available.
1612
+ */
1613
+ getPreviewImageUrl({ width, height, type, }?: {
1568
1614
  width?: number;
1569
1615
  height?: number;
1570
- type?: string | 'png';
1616
+ type?: string;
1571
1617
  }): string | null;
1572
1618
  }
1573
1619
  }
1574
- declare module "connect/models/AppClipDefaultExperienceLocalization" {
1620
+ declare module "connect/models/AppScreenshot" {
1575
1621
  import { RequestContext } from "network/Request";
1576
- import { AppClipHeaderImage } from "connect/models/AppClipHeaderImage";
1622
+ import { AppMediaAssetState, ImageAsset, UploadOperation } from "connect/AssetAPI";
1577
1623
  import { ConnectModel } from "connect/models/ConnectModel";
1578
- export interface AppClipDefaultExperienceLocalizationProps {
1579
- /**
1580
- * @example 'en-US'
1581
- */
1582
- locale: string;
1583
- subtitle: string | null;
1584
- appClipHeaderImage?: AppClipHeaderImage | null;
1624
+ export interface AppScreenshotProps {
1625
+ fileSize: number;
1626
+ fileName: string;
1627
+ sourceFileChecksum: string;
1628
+ imageAsset: ImageAsset;
1629
+ assetToken: string;
1630
+ assetType: string;
1631
+ uploadOperations: UploadOperation[];
1632
+ assetDeliveryState: AppMediaAssetState;
1585
1633
  }
1586
- /**
1587
- * A localized subtitle and header image for an App Clip default experience.
1588
- *
1589
- * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipdefaultexperiencelocalization
1590
- */
1591
- export class AppClipDefaultExperienceLocalization extends ConnectModel<AppClipDefaultExperienceLocalizationProps> {
1634
+ export class AppScreenshot extends ConnectModel<AppScreenshotProps> {
1592
1635
  static type: string;
1593
1636
  static infoAsync: (context: RequestContext, props: {
1594
1637
  id: string;
1595
1638
  query?: import("connect/ConnectAPI").ConnectQueryParams;
1596
- }) => Promise<AppClipDefaultExperienceLocalization>;
1597
- static deleteAsync: (context: RequestContext, props: {
1639
+ }) => Promise<AppScreenshot>;
1640
+ static createAsync(context: RequestContext, { id, attributes, }: {
1598
1641
  id: string;
1599
- }) => Promise<void>;
1600
- static createAsync(context: RequestContext, { appClipDefaultExperienceId, attributes, }: {
1601
- appClipDefaultExperienceId: string;
1602
- attributes: Pick<AppClipDefaultExperienceLocalizationProps, 'locale' | 'subtitle'>;
1603
- }): Promise<AppClipDefaultExperienceLocalization>;
1604
- updateAsync(options: Partial<Pick<AppClipDefaultExperienceLocalizationProps, 'subtitle'>>): Promise<AppClipDefaultExperienceLocalization>;
1605
- deleteAsync(): Promise<void>;
1606
- /**
1607
- * Get the header image for this localization. Returns null if none uploaded.
1608
- */
1609
- getAppClipHeaderImageAsync(): Promise<AppClipHeaderImage | null>;
1610
- }
1611
- }
1612
- declare module "connect/ProvisioningAPI" {
1613
- import { AxiosResponse } from 'axios';
1614
- import { ParsingOptions, RequestContext, RequestProps } from "network/Request";
1615
- import { ConnectClientAPI } from "connect/ConnectAPI";
1616
- class ProvisioningClientAPI extends ConnectClientAPI {
1617
- getHostnameAsync(context: RequestContext): Promise<string>;
1618
- requestAsync<T = any, R extends AxiosResponse<T> = AxiosResponse<T>>(context: RequestContext, request: RequestProps, options?: ParsingOptions): Promise<R>;
1642
+ attributes: Pick<AppScreenshotProps, 'fileName' | 'fileSize'>;
1643
+ }): Promise<AppScreenshot>;
1619
1644
  /**
1620
- * Used for web session requests (username/password auth).
1621
1645
  *
1622
- * @param request
1623
- * @param options
1646
+ * @param id `AppScreenshotSet` id
1624
1647
  */
1625
- proxyRequestAsync<T = any, R extends AxiosResponse<T> = AxiosResponse<T>>(context: RequestContext, request: RequestProps, options?: ParsingOptions): Promise<R>;
1648
+ static uploadAsync(context: RequestContext, { id, filePath, waitForProcessing, }: {
1649
+ id: string;
1650
+ filePath: string;
1651
+ waitForProcessing?: boolean;
1652
+ }): Promise<AppScreenshot>;
1653
+ static deleteAsync: (context: RequestContext, props: {
1654
+ id: string;
1655
+ }) => Promise<void>;
1656
+ deleteAsync(): Promise<void>;
1657
+ updateAsync(options: Partial<AppScreenshotProps>): Promise<AppScreenshot>;
1658
+ isAwaitingUpload(): boolean;
1659
+ isComplete(): boolean;
1660
+ isFailed(): boolean;
1661
+ getErrorMessages(): string[];
1662
+ getImageAssetUrl({ width, height, type, }: {
1663
+ width?: number;
1664
+ height?: number;
1665
+ type?: string | 'png';
1666
+ }): string | null;
1626
1667
  }
1627
- export const provisioningClient: ProvisioningClientAPI;
1628
1668
  }
1629
- declare module "connect/models/CapabilityConnectModel" {
1669
+ declare module "connect/models/AppScreenshotSet" {
1630
1670
  import { RequestContext } from "network/Request";
1631
- import { ConnectQueryFilter } from "connect/ConnectAPI";
1671
+ import { ConnectQueryParams } from "connect/ConnectAPI";
1672
+ import { AppScreenshot } from "connect/models/AppScreenshot";
1632
1673
  import { ConnectModel } from "connect/models/ConnectModel";
1633
- export interface CapabilityConnectModelProps {
1674
+ export interface AppScreenshotSetProps {
1675
+ screenshotDisplayType: ScreenshotDisplayType;
1676
+ appScreenshots: AppScreenshot[];
1677
+ }
1678
+ export enum ScreenshotDisplayType {
1679
+ APP_IPHONE_35 = "APP_IPHONE_35",
1680
+ APP_IPHONE_40 = "APP_IPHONE_40",
1681
+ APP_IPHONE_47 = "APP_IPHONE_47",
1682
+ APP_IPHONE_55 = "APP_IPHONE_55",
1683
+ APP_IPHONE_58 = "APP_IPHONE_58",
1684
+ APP_IPHONE_61 = "APP_IPHONE_61",
1685
+ APP_IPHONE_65 = "APP_IPHONE_65",
1686
+ APP_IPHONE_67 = "APP_IPHONE_67",
1687
+ APP_IPAD_97 = "APP_IPAD_97",
1688
+ APP_IPAD_105 = "APP_IPAD_105",
1689
+ APP_IPAD_PRO_129 = "APP_IPAD_PRO_129",
1690
+ APP_IPAD_PRO_3GEN_11 = "APP_IPAD_PRO_3GEN_11",
1691
+ APP_IPAD_PRO_3GEN_129 = "APP_IPAD_PRO_3GEN_129",
1692
+ IMESSAGE_APP_IPHONE_40 = "IMESSAGE_APP_IPHONE_40",
1693
+ IMESSAGE_APP_IPHONE_47 = "IMESSAGE_APP_IPHONE_47",
1694
+ IMESSAGE_APP_IPHONE_55 = "IMESSAGE_APP_IPHONE_55",
1695
+ IMESSAGE_APP_IPHONE_58 = "IMESSAGE_APP_IPHONE_58",
1696
+ IMESSAGE_APP_IPHONE_61 = "IMESSAGE_APP_IPHONE_61",
1697
+ IMESSAGE_APP_IPHONE_65 = "IMESSAGE_APP_IPHONE_65",
1698
+ IMESSAGE_APP_IPHONE_67 = "IMESSAGE_APP_IPHONE_67",
1699
+ IMESSAGE_APP_IPAD_97 = "IMESSAGE_APP_IPAD_97",
1700
+ IMESSAGE_APP_IPAD_105 = "IMESSAGE_APP_IPAD_105",
1701
+ IMESSAGE_APP_IPAD_PRO_129 = "IMESSAGE_APP_IPAD_PRO_129",
1702
+ IMESSAGE_APP_IPAD_PRO_3GEN_11 = "IMESSAGE_APP_IPAD_PRO_3GEN_11",
1703
+ IMESSAGE_APP_IPAD_PRO_3GEN_129 = "IMESSAGE_APP_IPAD_PRO_3GEN_129",
1704
+ APP_WATCH_SERIES_3 = "APP_WATCH_SERIES_3",
1705
+ APP_WATCH_SERIES_4 = "APP_WATCH_SERIES_4",
1706
+ APP_WATCH_SERIES_7 = "APP_WATCH_SERIES_7",
1707
+ APP_WATCH_SERIES_10 = "APP_WATCH_SERIES_10",
1708
+ APP_WATCH_ULTRA = "APP_WATCH_ULTRA",
1709
+ APP_APPLE_TV = "APP_APPLE_TV",
1710
+ APP_APPLE_VISION_PRO = "APP_APPLE_VISION_PRO",
1711
+ APP_DESKTOP = "APP_DESKTOP"
1712
+ }
1713
+ export const ALL: ScreenshotDisplayType[];
1714
+ export class AppScreenshotSet extends ConnectModel<AppScreenshotSetProps> {
1715
+ static type: string;
1634
1716
  /**
1635
- * A string that's always prefixed with a set value like `merchant.`, `group.`, or `iCloud.`.
1717
+ *
1718
+ * @param id `AppScreenshotSet` id (ex: UNHB5PT4MA)
1719
+ */
1720
+ static infoAsync: (context: RequestContext, props: {
1721
+ id: string;
1722
+ query?: ConnectQueryParams;
1723
+ }) => Promise<AppScreenshotSet>;
1724
+ /**
1725
+ *
1726
+ * @param id `AppStoreVersionLocalization` id
1727
+ */
1728
+ static createAsync(context: RequestContext, { id, attributes, }: {
1729
+ id: string;
1730
+ attributes: Partial<AppScreenshotSetProps>;
1731
+ }): Promise<AppScreenshotSet>;
1732
+ updateAsync({ appScreenshots, }: {
1733
+ appScreenshots: string[];
1734
+ }): Promise<AppScreenshotSet>;
1735
+ isImessage(): boolean;
1736
+ isAppleTv(): boolean;
1737
+ uploadScreenshot({ filePath, waitForProcessing, position, }: {
1738
+ filePath: string;
1739
+ waitForProcessing?: boolean;
1740
+ position?: number;
1741
+ }): Promise<AppScreenshot>;
1742
+ reorderScreenshotsAsync({ appScreenshots, query, }: {
1743
+ appScreenshots: string[];
1744
+ query?: ConnectQueryParams;
1745
+ }): Promise<AppScreenshotSet[]>;
1746
+ }
1747
+ }
1748
+ declare module "connect/ProvisioningAPI" {
1749
+ import { AxiosResponse } from 'axios';
1750
+ import { ParsingOptions, RequestContext, RequestProps } from "network/Request";
1751
+ import { ConnectClientAPI } from "connect/ConnectAPI";
1752
+ class ProvisioningClientAPI extends ConnectClientAPI {
1753
+ getHostnameAsync(context: RequestContext): Promise<string>;
1754
+ requestAsync<T = any, R extends AxiosResponse<T> = AxiosResponse<T>>(context: RequestContext, request: RequestProps, options?: ParsingOptions): Promise<R>;
1755
+ /**
1756
+ * Used for web session requests (username/password auth).
1757
+ *
1758
+ * @param request
1759
+ * @param options
1760
+ */
1761
+ proxyRequestAsync<T = any, R extends AxiosResponse<T> = AxiosResponse<T>>(context: RequestContext, request: RequestProps, options?: ParsingOptions): Promise<R>;
1762
+ }
1763
+ export const provisioningClient: ProvisioningClientAPI;
1764
+ }
1765
+ declare module "connect/models/CapabilityConnectModel" {
1766
+ import { RequestContext } from "network/Request";
1767
+ import { ConnectQueryFilter } from "connect/ConnectAPI";
1768
+ import { ConnectModel } from "connect/models/ConnectModel";
1769
+ export interface CapabilityConnectModelProps {
1770
+ /**
1771
+ * A string that's always prefixed with a set value like `merchant.`, `group.`, or `iCloud.`.
1636
1772
  *
1637
1773
  * @example 'merchant.com.example.development'
1638
1774
  */
@@ -2542,14 +2678,29 @@ declare module "connect/models/BundleId" {
2542
2678
  export enum BundleIdPlatform {
2543
2679
  IOS = "IOS",
2544
2680
  MAC_OS = "MAC_OS",
2545
- UNIVERSAL = "UNIVERSAL"
2681
+ UNIVERSAL = "UNIVERSAL",
2682
+ /** Service IDs for Sign In with Apple web */
2683
+ SERVICES = "SERVICES"
2684
+ }
2685
+ /**
2686
+ * Configuration for Sign In with Apple web capability.
2687
+ */
2688
+ export interface SignInWithAppleWebConfig {
2689
+ /** List of domains that can use this service ID */
2690
+ domains: string[];
2691
+ /** List of redirect URLs for OAuth flow */
2692
+ redirectUrls: string[];
2693
+ /** The primary app bundle ID that this service ID is associated with (opaque ID, not identifier) */
2694
+ primaryAppBundleIdId: string;
2546
2695
  }
2547
2696
  interface BundleIdProps {
2548
2697
  identifier: string;
2549
2698
  name: string;
2550
2699
  seedId: string;
2551
2700
  dateModified: string;
2701
+ dateCreated?: string;
2552
2702
  platform: BundleIdPlatform;
2703
+ platformName?: string;
2553
2704
  bundleIdCapabilities?: BundleIdCapability[];
2554
2705
  /**
2555
2706
  * Seems to always be `bundle`.
@@ -2635,6 +2786,46 @@ declare module "connect/models/BundleId" {
2635
2786
  getCapabilityId(capabilityType: CapabilityType): string;
2636
2787
  private getOrFetchBundleIdCapabilitiesAsync;
2637
2788
  hasCapabilityAsync(capability: CapabilityType): Promise<BundleIdCapability | null>;
2789
+ /**
2790
+ * Returns true if this is a Service ID (platform: SERVICES).
2791
+ */
2792
+ isServiceId(): boolean;
2793
+ /**
2794
+ * List all Service IDs for the team.
2795
+ */
2796
+ static getServiceIdsAsync(context: RequestContext, { query }?: {
2797
+ query?: ConnectQueryParams<BundleIdQueryFilter>;
2798
+ }): Promise<BundleId[]>;
2799
+ /**
2800
+ * Find a Service ID by its identifier.
2801
+ */
2802
+ static findServiceIdAsync(context: RequestContext, { identifier }: {
2803
+ identifier: string;
2804
+ }): Promise<BundleId | null>;
2805
+ /**
2806
+ * Create a new Service ID for Sign In with Apple web.
2807
+ */
2808
+ static createServiceIdAsync(context: RequestContext, { name, identifier }: {
2809
+ name: string;
2810
+ identifier: string;
2811
+ }): Promise<BundleId>;
2812
+ /**
2813
+ * Configure Sign In with Apple for this Service ID.
2814
+ */
2815
+ configureSignInWithAppleAsync(config: SignInWithAppleWebConfig): Promise<BundleId>;
2816
+ /**
2817
+ * Disable Sign In with Apple for this Service ID.
2818
+ */
2819
+ disableSignInWithAppleAsync(): Promise<BundleId>;
2820
+ /**
2821
+ * Get the Sign In with Apple configuration from the capabilities.
2822
+ * Returns null if Sign In with Apple is not configured.
2823
+ */
2824
+ getSignInWithAppleConfig(): SignInWithAppleWebConfig | null;
2825
+ /**
2826
+ * Check if Sign In with Apple is configured for this Service ID.
2827
+ */
2828
+ hasSignInWithApple(): boolean;
2638
2829
  }
2639
2830
  }
2640
2831
  declare module "connect/models/AppCategory" {
@@ -2981,527 +3172,167 @@ declare module "connect/models/AppStoreReviewDetail" {
2981
3172
  uploadAttachmentAsync(filePath: string): Promise<AppStoreReviewAttachment>;
2982
3173
  }
2983
3174
  }
2984
- declare module "connect/models/AppPreview" {
3175
+ declare module "connect/models/AppStoreVersionPhasedRelease" {
2985
3176
  import { RequestContext } from "network/Request";
2986
- import { AppMediaAssetState, ImageAsset, UploadOperation } from "connect/AssetAPI";
2987
3177
  import { ConnectModel } from "connect/models/ConnectModel";
2988
- export interface AppPreviewProps {
2989
- fileSize: number;
2990
- fileName: string;
2991
- sourceFileChecksum: string;
2992
- /**
2993
- * Time code for the preview frame (poster image).
2994
- * Format: "MM:SS:FF" where FF is frames (e.g., "00:05:00" for 5 seconds)
2995
- * @example "00:05:00"
2996
- */
2997
- previewFrameTimeCode: string | null;
2998
- mimeType: string;
2999
- /**
3000
- * URL to download the processed video preview.
3001
- * Only available after processing is complete.
3002
- */
3003
- videoUrl: string | null;
3004
- /**
3005
- * Preview frame/poster image asset.
3006
- * Contains templateUrl with {w}, {h}, {f} placeholders.
3007
- */
3008
- previewImage: ImageAsset | null;
3009
- uploadOperations: UploadOperation[];
3010
- assetDeliveryState: AppMediaAssetState;
3178
+ export enum PhasedReleaseState {
3179
+ INACTIVE = "INACTIVE",
3180
+ ACTIVE = "ACTIVE",
3181
+ PAUSED = "PAUSED",
3182
+ COMPLETE = "COMPLETE"
3183
+ }
3184
+ export interface AppStoreVersionPhasedReleaseProps {
3185
+ phasedReleaseState: PhasedReleaseState | null;
3186
+ startDate: string | null;
3187
+ totalPauseDuration: number | null;
3188
+ currentDayNumber: number | null;
3011
3189
  }
3012
3190
  /**
3013
- * App Preview (video) for App Store listings.
3014
- * Previews are short videos that demonstrate your app's features.
3191
+ * Used for updating basic metadata.
3015
3192
  */
3016
- export class AppPreview extends ConnectModel<AppPreviewProps> {
3193
+ export class AppStoreVersionPhasedRelease extends ConnectModel<AppStoreVersionPhasedReleaseProps> {
3017
3194
  static type: string;
3018
- static infoAsync: (context: RequestContext, props: {
3019
- id: string;
3020
- query?: import("connect/ConnectAPI").ConnectQueryParams;
3021
- }) => Promise<AppPreview>;
3022
- static createAsync(context: RequestContext, { id, attributes, }: {
3023
- /** AppPreviewSet ID */
3024
- id: string;
3025
- attributes: Pick<AppPreviewProps, 'fileName' | 'fileSize'> & {
3026
- /** Optional MIME type (e.g., "video/mp4", "video/quicktime") */
3027
- mimeType?: string;
3028
- };
3029
- }): Promise<AppPreview>;
3030
3195
  /**
3031
- * Upload a video preview file.
3032
- * @param id AppPreviewSet ID
3033
- * @param filePath Path to the video file (MP4, MOV)
3034
- * @param waitForProcessing Wait for Apple to process the video (default: true)
3035
- * @param previewFrameTimeCode Optional time code for preview frame (e.g., "00:05:00" for 5 seconds)
3196
+ *
3197
+ * @param id `AppStoreVersion` id
3036
3198
  */
3037
- static uploadAsync(context: RequestContext, { id, filePath, waitForProcessing, previewFrameTimeCode, }: {
3199
+ static createAsync(context: RequestContext, { id, phasedReleaseState, }: {
3038
3200
  id: string;
3039
- filePath: string;
3040
- waitForProcessing?: boolean;
3041
- previewFrameTimeCode?: string;
3042
- }): Promise<AppPreview>;
3201
+ phasedReleaseState: AppStoreVersionPhasedReleaseProps['phasedReleaseState'];
3202
+ }): Promise<AppStoreVersionPhasedRelease>;
3043
3203
  static deleteAsync: (context: RequestContext, props: {
3044
3204
  id: string;
3045
3205
  }) => Promise<void>;
3046
3206
  deleteAsync(): Promise<void>;
3047
- updateAsync(options: Partial<AppPreviewProps> & {
3048
- uploaded?: boolean;
3049
- }): Promise<AppPreview>;
3050
- isAwaitingUpload(): boolean;
3051
- isProcessing(): boolean;
3052
- isComplete(): boolean;
3053
- isFailed(): boolean;
3054
- getErrorMessages(): string[];
3055
- /**
3056
- * Get the video URL for downloading the preview.
3057
- * Only available after processing is complete.
3058
- */
3059
- getVideoUrl(): string | null;
3060
- /**
3061
- * Get the preview frame (poster) image URL.
3062
- * Returns null if not available.
3063
- */
3064
- getPreviewImageUrl({ width, height, type, }?: {
3065
- width?: number;
3066
- height?: number;
3067
- type?: string;
3068
- }): string | null;
3207
+ pauseAsync(): Promise<AppStoreVersionPhasedRelease>;
3208
+ resumeAsync(): Promise<AppStoreVersionPhasedRelease>;
3209
+ completeAsync(): Promise<AppStoreVersionPhasedRelease>;
3210
+ updateAsync({ phasedReleaseState, }: Pick<AppStoreVersionPhasedReleaseProps, 'phasedReleaseState'>): Promise<AppStoreVersionPhasedRelease>;
3069
3211
  }
3070
3212
  }
3071
- declare module "connect/models/AppPreviewSet" {
3213
+ declare module "connect/models/AppStoreVersionReleaseRequest" {
3072
3214
  import { RequestContext } from "network/Request";
3073
- import { ConnectQueryParams } from "connect/ConnectAPI";
3074
- import { AppPreview } from "connect/models/AppPreview";
3075
3215
  import { ConnectModel } from "connect/models/ConnectModel";
3076
- export interface AppPreviewSetProps {
3077
- previewType: PreviewType;
3078
- appPreviews: AppPreview[];
3079
- }
3080
- /**
3081
- * Display types for app previews.
3082
- * Each type corresponds to a specific device screen size.
3083
- */
3084
- export enum PreviewType {
3085
- IPHONE_35 = "IPHONE_35",
3086
- IPHONE_40 = "IPHONE_40",
3087
- IPHONE_47 = "IPHONE_47",
3088
- IPHONE_55 = "IPHONE_55",
3089
- IPHONE_58 = "IPHONE_58",
3090
- IPHONE_61 = "IPHONE_61",
3091
- IPHONE_65 = "IPHONE_65",
3092
- IPHONE_67 = "IPHONE_67",
3093
- IPAD_97 = "IPAD_97",
3094
- IPAD_105 = "IPAD_105",
3095
- IPAD_PRO_129 = "IPAD_PRO_129",
3096
- IPAD_PRO_3GEN_11 = "IPAD_PRO_3GEN_11",
3097
- IPAD_PRO_3GEN_129 = "IPAD_PRO_3GEN_129",
3098
- WATCH_SERIES_3 = "WATCH_SERIES_3",
3099
- WATCH_SERIES_4 = "WATCH_SERIES_4",
3100
- WATCH_SERIES_7 = "WATCH_SERIES_7",
3101
- WATCH_SERIES_10 = "WATCH_SERIES_10",
3102
- WATCH_ULTRA = "WATCH_ULTRA",
3103
- APPLE_TV = "APPLE_TV",
3104
- APPLE_VISION_PRO = "APPLE_VISION_PRO",
3105
- DESKTOP = "DESKTOP"
3106
- }
3107
- export const ALL_PREVIEW_TYPES: PreviewType[];
3108
- /**
3109
- * App Preview Set - groups app previews by display type.
3110
- * Each set contains previews for a specific device screen size.
3111
- */
3112
- export class AppPreviewSet extends ConnectModel<AppPreviewSetProps> {
3216
+ export class AppStoreVersionReleaseRequest extends ConnectModel<object> {
3113
3217
  static type: string;
3114
3218
  /**
3115
- * Get info for a specific AppPreviewSet.
3116
- * @param id AppPreviewSet ID
3219
+ *
3220
+ * @param id `AppStoreVersion` id
3117
3221
  */
3118
- static infoAsync: (context: RequestContext, props: {
3222
+ static createAsync(context: RequestContext, { id, }: {
3119
3223
  id: string;
3120
- query?: ConnectQueryParams;
3121
- }) => Promise<AppPreviewSet>;
3224
+ }): Promise<AppStoreVersionReleaseRequest>;
3225
+ }
3226
+ }
3227
+ declare module "connect/models/AppStoreVersionSubmission" {
3228
+ import { RequestContext } from "network/Request";
3229
+ import { ConnectModel } from "connect/models/ConnectModel";
3230
+ export interface AppStoreVersionSubmissionProps {
3231
+ canReject: boolean;
3232
+ }
3233
+ export class AppStoreVersionSubmission extends ConnectModel<AppStoreVersionSubmissionProps> {
3234
+ static type: string;
3122
3235
  /**
3123
- * Create a new AppPreviewSet for a localization.
3124
- * @param id AppStoreVersionLocalization ID
3125
- * @param attributes Preview type attributes
3236
+ *
3237
+ * @param id `AppStoreVersion` id
3126
3238
  */
3127
3239
  static createAsync(context: RequestContext, { id, attributes, }: {
3128
3240
  id: string;
3129
- attributes: Pick<AppPreviewSetProps, 'previewType'>;
3130
- }): Promise<AppPreviewSet>;
3131
- /**
3132
- * Update the order of previews in this set.
3133
- */
3134
- updateAsync({ appPreviews }: {
3135
- appPreviews: string[];
3136
- }): Promise<AppPreviewSet>;
3241
+ attributes?: Partial<AppStoreVersionSubmissionProps>;
3242
+ }): Promise<AppStoreVersionSubmission>;
3137
3243
  static deleteAsync: (context: RequestContext, props: {
3138
3244
  id: string;
3139
3245
  }) => Promise<void>;
3140
- deleteAsync(): Promise<void>;
3141
- isIphone(): boolean;
3142
- isIpad(): boolean;
3143
- isWatch(): boolean;
3144
- isAppleTv(): boolean;
3145
- isAppleVisionPro(): boolean;
3146
- isDesktop(): boolean;
3147
- /**
3148
- * Upload a video preview to this set.
3149
- * @param filePath Path to the video file (MP4, MOV)
3150
- * @param waitForProcessing Wait for Apple to process the video
3151
- * @param position Optional position to insert the preview
3152
- * @param previewFrameTimeCode Optional time code for the preview frame (e.g., "00:05:00")
3153
- */
3154
- uploadPreview({ filePath, waitForProcessing, position, previewFrameTimeCode, }: {
3155
- filePath: string;
3156
- waitForProcessing?: boolean;
3157
- position?: number;
3158
- previewFrameTimeCode?: string;
3159
- }): Promise<AppPreview>;
3160
- /**
3161
- * Reorder previews in this set.
3162
- * @param appPreviews Array of AppPreview IDs in desired order
3163
- */
3164
- reorderPreviewsAsync({ appPreviews, query, }: {
3165
- appPreviews: string[];
3166
- query?: ConnectQueryParams;
3167
- }): Promise<AppPreviewSet[]>;
3168
3246
  }
3169
3247
  }
3170
- declare module "connect/models/AppScreenshot" {
3248
+ declare module "connect/models/BetaAppReviewSubmission" {
3171
3249
  import { RequestContext } from "network/Request";
3172
- import { AppMediaAssetState, ImageAsset, UploadOperation } from "connect/AssetAPI";
3250
+ import { ConnectQueryFilter } from "connect/ConnectAPI";
3173
3251
  import { ConnectModel } from "connect/models/ConnectModel";
3174
- export interface AppScreenshotProps {
3175
- fileSize: number;
3176
- fileName: string;
3177
- sourceFileChecksum: string;
3178
- imageAsset: ImageAsset;
3179
- assetToken: string;
3180
- assetType: string;
3181
- uploadOperations: UploadOperation[];
3182
- assetDeliveryState: AppMediaAssetState;
3252
+ export enum BetaReviewState {
3253
+ WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW",
3254
+ IN_REVIEW = "IN_REVIEW",
3255
+ REJECTED = "REJECTED",
3256
+ APPROVED = "APPROVED"
3183
3257
  }
3184
- export class AppScreenshot extends ConnectModel<AppScreenshotProps> {
3258
+ /** @see https://developer.apple.com/documentation/appstoreconnectapi/betaappreviewsubmission/attributes-data.dictionary */
3259
+ interface BetaAppReviewSubmissionProps {
3260
+ betaReviewState: BetaReviewState;
3261
+ /** @since 1.5 */
3262
+ submittedDate: string | null;
3263
+ }
3264
+ export type BetaAppReviewSubmissionQueryFilter = ConnectQueryFilter<BetaAppReviewSubmissionProps, 'betaReviewState'>;
3265
+ export class BetaAppReviewSubmission extends ConnectModel<BetaAppReviewSubmissionProps> {
3185
3266
  static type: string;
3186
- static infoAsync: (context: RequestContext, props: {
3187
- id: string;
3188
- query?: import("connect/ConnectAPI").ConnectQueryParams;
3189
- }) => Promise<AppScreenshot>;
3190
- static createAsync(context: RequestContext, { id, attributes, }: {
3191
- id: string;
3192
- attributes: Pick<AppScreenshotProps, 'fileName' | 'fileSize'>;
3193
- }): Promise<AppScreenshot>;
3267
+ static getAsync: (context: RequestContext, props?: {
3268
+ query?: import("connect/ConnectAPI").ConnectQueryParams<Partial<{
3269
+ betaReviewState: BetaReviewState | BetaReviewState[];
3270
+ } & {
3271
+ id?: string;
3272
+ }>> | undefined;
3273
+ } | undefined) => Promise<BetaAppReviewSubmission[]>;
3194
3274
  /**
3195
3275
  *
3196
- * @param id `AppScreenshotSet` id
3276
+ * @param id `Build` id
3197
3277
  */
3198
- static uploadAsync(context: RequestContext, { id, filePath, waitForProcessing, }: {
3278
+ static createAsync(context: RequestContext, { id, }: {
3199
3279
  id: string;
3200
- filePath: string;
3201
- waitForProcessing?: boolean;
3202
- }): Promise<AppScreenshot>;
3280
+ }): Promise<BetaAppReviewSubmission>;
3203
3281
  static deleteAsync: (context: RequestContext, props: {
3204
3282
  id: string;
3205
3283
  }) => Promise<void>;
3284
+ /** Withdraw the beta app review submission. */
3206
3285
  deleteAsync(): Promise<void>;
3207
- updateAsync(options: Partial<AppScreenshotProps>): Promise<AppScreenshot>;
3208
- isAwaitingUpload(): boolean;
3209
- isComplete(): boolean;
3210
- isFailed(): boolean;
3211
- getErrorMessages(): string[];
3212
- getImageAssetUrl({ width, height, type, }: {
3213
- width?: number;
3214
- height?: number;
3215
- type?: string | 'png';
3216
- }): string | null;
3217
3286
  }
3218
3287
  }
3219
- declare module "connect/models/AppScreenshotSet" {
3288
+ declare module "connect/models/BetaBuildLocalization" {
3220
3289
  import { RequestContext } from "network/Request";
3221
- import { ConnectQueryParams } from "connect/ConnectAPI";
3222
- import { AppScreenshot } from "connect/models/AppScreenshot";
3290
+ import { ConnectQueryFilter } from "connect/ConnectAPI";
3223
3291
  import { ConnectModel } from "connect/models/ConnectModel";
3224
- export interface AppScreenshotSetProps {
3225
- screenshotDisplayType: ScreenshotDisplayType;
3226
- appScreenshots: AppScreenshot[];
3227
- }
3228
- export enum ScreenshotDisplayType {
3229
- APP_IPHONE_35 = "APP_IPHONE_35",
3230
- APP_IPHONE_40 = "APP_IPHONE_40",
3231
- APP_IPHONE_47 = "APP_IPHONE_47",
3232
- APP_IPHONE_55 = "APP_IPHONE_55",
3233
- APP_IPHONE_58 = "APP_IPHONE_58",
3234
- APP_IPHONE_61 = "APP_IPHONE_61",
3235
- APP_IPHONE_65 = "APP_IPHONE_65",
3236
- APP_IPHONE_67 = "APP_IPHONE_67",
3237
- APP_IPAD_97 = "APP_IPAD_97",
3238
- APP_IPAD_105 = "APP_IPAD_105",
3239
- APP_IPAD_PRO_129 = "APP_IPAD_PRO_129",
3240
- APP_IPAD_PRO_3GEN_11 = "APP_IPAD_PRO_3GEN_11",
3241
- APP_IPAD_PRO_3GEN_129 = "APP_IPAD_PRO_3GEN_129",
3242
- IMESSAGE_APP_IPHONE_40 = "IMESSAGE_APP_IPHONE_40",
3243
- IMESSAGE_APP_IPHONE_47 = "IMESSAGE_APP_IPHONE_47",
3244
- IMESSAGE_APP_IPHONE_55 = "IMESSAGE_APP_IPHONE_55",
3245
- IMESSAGE_APP_IPHONE_58 = "IMESSAGE_APP_IPHONE_58",
3246
- IMESSAGE_APP_IPHONE_61 = "IMESSAGE_APP_IPHONE_61",
3247
- IMESSAGE_APP_IPHONE_65 = "IMESSAGE_APP_IPHONE_65",
3248
- IMESSAGE_APP_IPHONE_67 = "IMESSAGE_APP_IPHONE_67",
3249
- IMESSAGE_APP_IPAD_97 = "IMESSAGE_APP_IPAD_97",
3250
- IMESSAGE_APP_IPAD_105 = "IMESSAGE_APP_IPAD_105",
3251
- IMESSAGE_APP_IPAD_PRO_129 = "IMESSAGE_APP_IPAD_PRO_129",
3252
- IMESSAGE_APP_IPAD_PRO_3GEN_11 = "IMESSAGE_APP_IPAD_PRO_3GEN_11",
3253
- IMESSAGE_APP_IPAD_PRO_3GEN_129 = "IMESSAGE_APP_IPAD_PRO_3GEN_129",
3254
- APP_WATCH_SERIES_3 = "APP_WATCH_SERIES_3",
3255
- APP_WATCH_SERIES_4 = "APP_WATCH_SERIES_4",
3256
- APP_WATCH_SERIES_7 = "APP_WATCH_SERIES_7",
3257
- APP_WATCH_SERIES_10 = "APP_WATCH_SERIES_10",
3258
- APP_WATCH_ULTRA = "APP_WATCH_ULTRA",
3259
- APP_APPLE_TV = "APP_APPLE_TV",
3260
- APP_APPLE_VISION_PRO = "APP_APPLE_VISION_PRO",
3261
- APP_DESKTOP = "APP_DESKTOP"
3292
+ interface BetaBuildLocalizationProps {
3293
+ whatsNew: string | null;
3294
+ locale: string | null;
3262
3295
  }
3263
- export const ALL: ScreenshotDisplayType[];
3264
- export class AppScreenshotSet extends ConnectModel<AppScreenshotSetProps> {
3265
- static type: string;
3296
+ export type BetaBuildLocalizationQueryFilter = ConnectQueryFilter<BetaBuildLocalizationProps & {
3266
3297
  /**
3267
- *
3268
- * @param id `AppScreenshotSet` id (ex: UNHB5PT4MA)
3298
+ * `Build` id
3269
3299
  */
3270
- static infoAsync: (context: RequestContext, props: {
3271
- id: string;
3272
- query?: ConnectQueryParams;
3273
- }) => Promise<AppScreenshotSet>;
3300
+ build: string;
3301
+ }, 'build' | 'locale'>;
3302
+ export class BetaBuildLocalization extends ConnectModel<BetaBuildLocalizationProps> {
3303
+ static type: string;
3304
+ static getAsync: (context: RequestContext, props?: {
3305
+ query?: import("connect/ConnectAPI").ConnectQueryParams<Partial<{
3306
+ locale: string | (string | null)[] | null;
3307
+ build: string | string[];
3308
+ } & {
3309
+ id?: string;
3310
+ }>> | undefined;
3311
+ } | undefined) => Promise<BetaBuildLocalization[]>;
3274
3312
  /**
3275
3313
  *
3276
- * @param id `AppStoreVersionLocalization` id
3277
- */
3278
- static createAsync(context: RequestContext, { id, attributes, }: {
3279
- id: string;
3280
- attributes: Partial<AppScreenshotSetProps>;
3281
- }): Promise<AppScreenshotSet>;
3282
- updateAsync({ appScreenshots, }: {
3283
- appScreenshots: string[];
3284
- }): Promise<AppScreenshotSet>;
3285
- isImessage(): boolean;
3286
- isAppleTv(): boolean;
3287
- uploadScreenshot({ filePath, waitForProcessing, position, }: {
3288
- filePath: string;
3289
- waitForProcessing?: boolean;
3290
- position?: number;
3291
- }): Promise<AppScreenshot>;
3292
- reorderScreenshotsAsync({ appScreenshots, query, }: {
3293
- appScreenshots: string[];
3294
- query?: ConnectQueryParams;
3295
- }): Promise<AppScreenshotSet[]>;
3296
- }
3297
- }
3298
- declare module "connect/models/AppStoreVersionLocalization" {
3299
- import { RequestContext } from "network/Request";
3300
- import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
3301
- import { AppPreviewSet, AppPreviewSetProps } from "connect/models/AppPreviewSet";
3302
- import { AppScreenshotSet, AppScreenshotSetProps } from "connect/models/AppScreenshotSet";
3303
- import { ConnectModel } from "connect/models/ConnectModel";
3304
- export interface AppStoreVersionLocalizationProps {
3305
- description: string | null;
3306
- /**
3307
- * @example 'en-US'
3308
- */
3309
- locale: string;
3310
- /**
3311
- * @example 'Dating, Food, Books,'
3314
+ * @param id `Build` id
3312
3315
  */
3313
- keywords: string | null;
3314
- marketingUrl: string | null;
3315
- promotionalText: string | null;
3316
- supportUrl: string | null;
3317
- whatsNew: string | null;
3318
- appScreenshotSets?: AppScreenshotSet[];
3319
- appPreviewSets?: AppPreviewSet[];
3320
- }
3321
- /**
3322
- * Used for updating basic metadata.
3323
- */
3324
- export class AppStoreVersionLocalization extends ConnectModel<AppStoreVersionLocalizationProps> {
3325
- static type: string;
3326
3316
  static createAsync(context: RequestContext, { id, locale, }: {
3327
3317
  id: string;
3328
3318
  locale: string;
3329
- }): Promise<AppStoreVersionLocalization>;
3330
- static deleteAsync: (context: RequestContext, props: {
3331
- id: string;
3332
- }) => Promise<void>;
3333
- updateAsync(options: Partial<Omit<AppStoreVersionLocalizationProps, 'locale' | 'appScreenshotSets' | 'appPreviewSets'>>): Promise<AppStoreVersionLocalization>;
3334
- getAppScreenshotSetsAsync({ query, }?: {
3335
- query?: ConnectQueryParams<ConnectQueryFilter<AppScreenshotSetProps, 'screenshotDisplayType'>>;
3336
- }): Promise<AppScreenshotSet[]>;
3337
- createAppScreenshotSetAsync(attributes: Pick<AppScreenshotSetProps, 'screenshotDisplayType'>): Promise<AppScreenshotSet>;
3338
- getAppPreviewSetsAsync({ query, }?: {
3339
- query?: ConnectQueryParams<ConnectQueryFilter<AppPreviewSetProps, 'previewType'>>;
3340
- }): Promise<AppPreviewSet[]>;
3341
- createAppPreviewSetAsync(attributes: Pick<AppPreviewSetProps, 'previewType'>): Promise<AppPreviewSet>;
3319
+ }): Promise<BetaBuildLocalization>;
3320
+ updateAsync(attributes: Partial<BetaBuildLocalizationProps>): Promise<BetaBuildLocalization>;
3342
3321
  }
3343
3322
  }
3344
- declare module "connect/models/AppStoreVersionPhasedRelease" {
3345
- import { RequestContext } from "network/Request";
3323
+ declare module "connect/models/BetaBuildMetric" {
3346
3324
  import { ConnectModel } from "connect/models/ConnectModel";
3347
- export enum PhasedReleaseState {
3348
- INACTIVE = "INACTIVE",
3349
- ACTIVE = "ACTIVE",
3350
- PAUSED = "PAUSED",
3351
- COMPLETE = "COMPLETE"
3352
- }
3353
- export interface AppStoreVersionPhasedReleaseProps {
3354
- phasedReleaseState: PhasedReleaseState | null;
3355
- startDate: string | null;
3356
- totalPauseDuration: number | null;
3357
- currentDayNumber: number | null;
3325
+ interface BetaBuildMetricProps {
3326
+ installCount: number;
3327
+ crashCount: number;
3328
+ inviteCount: number;
3329
+ sevenDayTesterCount: number;
3358
3330
  }
3359
- /**
3360
- * Used for updating basic metadata.
3361
- */
3362
- export class AppStoreVersionPhasedRelease extends ConnectModel<AppStoreVersionPhasedReleaseProps> {
3331
+ export class BetaBuildMetric extends ConnectModel<BetaBuildMetricProps> {
3363
3332
  static type: string;
3364
- /**
3365
- *
3366
- * @param id `AppStoreVersion` id
3367
- */
3368
- static createAsync(context: RequestContext, { id, phasedReleaseState, }: {
3369
- id: string;
3370
- phasedReleaseState: AppStoreVersionPhasedReleaseProps['phasedReleaseState'];
3371
- }): Promise<AppStoreVersionPhasedRelease>;
3372
- static deleteAsync: (context: RequestContext, props: {
3373
- id: string;
3374
- }) => Promise<void>;
3375
- deleteAsync(): Promise<void>;
3376
- pauseAsync(): Promise<AppStoreVersionPhasedRelease>;
3377
- resumeAsync(): Promise<AppStoreVersionPhasedRelease>;
3378
- completeAsync(): Promise<AppStoreVersionPhasedRelease>;
3379
- updateAsync({ phasedReleaseState, }: Pick<AppStoreVersionPhasedReleaseProps, 'phasedReleaseState'>): Promise<AppStoreVersionPhasedRelease>;
3380
3333
  }
3381
3334
  }
3382
- declare module "connect/models/AppStoreVersionReleaseRequest" {
3383
- import { RequestContext } from "network/Request";
3384
- import { ConnectModel } from "connect/models/ConnectModel";
3385
- export class AppStoreVersionReleaseRequest extends ConnectModel<object> {
3386
- static type: string;
3387
- /**
3388
- *
3389
- * @param id `AppStoreVersion` id
3390
- */
3391
- static createAsync(context: RequestContext, { id, }: {
3392
- id: string;
3393
- }): Promise<AppStoreVersionReleaseRequest>;
3394
- }
3395
- }
3396
- declare module "connect/models/AppStoreVersionSubmission" {
3397
- import { RequestContext } from "network/Request";
3398
- import { ConnectModel } from "connect/models/ConnectModel";
3399
- export interface AppStoreVersionSubmissionProps {
3400
- canReject: boolean;
3401
- }
3402
- export class AppStoreVersionSubmission extends ConnectModel<AppStoreVersionSubmissionProps> {
3403
- static type: string;
3404
- /**
3405
- *
3406
- * @param id `AppStoreVersion` id
3407
- */
3408
- static createAsync(context: RequestContext, { id, attributes, }: {
3409
- id: string;
3410
- attributes?: Partial<AppStoreVersionSubmissionProps>;
3411
- }): Promise<AppStoreVersionSubmission>;
3412
- static deleteAsync: (context: RequestContext, props: {
3413
- id: string;
3414
- }) => Promise<void>;
3415
- }
3416
- }
3417
- declare module "connect/models/BetaAppReviewSubmission" {
3418
- import { RequestContext } from "network/Request";
3419
- import { ConnectQueryFilter } from "connect/ConnectAPI";
3420
- import { ConnectModel } from "connect/models/ConnectModel";
3421
- export enum BetaReviewState {
3422
- WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW",
3423
- IN_REVIEW = "IN_REVIEW",
3424
- REJECTED = "REJECTED",
3425
- APPROVED = "APPROVED"
3426
- }
3427
- /** @see https://developer.apple.com/documentation/appstoreconnectapi/betaappreviewsubmission/attributes-data.dictionary */
3428
- interface BetaAppReviewSubmissionProps {
3429
- betaReviewState: BetaReviewState;
3430
- /** @since 1.5 */
3431
- submittedDate: string | null;
3432
- }
3433
- export type BetaAppReviewSubmissionQueryFilter = ConnectQueryFilter<BetaAppReviewSubmissionProps, 'betaReviewState'>;
3434
- export class BetaAppReviewSubmission extends ConnectModel<BetaAppReviewSubmissionProps> {
3435
- static type: string;
3436
- static getAsync: (context: RequestContext, props?: {
3437
- query?: import("connect/ConnectAPI").ConnectQueryParams<Partial<{
3438
- betaReviewState: BetaReviewState | BetaReviewState[];
3439
- } & {
3440
- id?: string;
3441
- }>> | undefined;
3442
- } | undefined) => Promise<BetaAppReviewSubmission[]>;
3443
- /**
3444
- *
3445
- * @param id `Build` id
3446
- */
3447
- static createAsync(context: RequestContext, { id, }: {
3448
- id: string;
3449
- }): Promise<BetaAppReviewSubmission>;
3450
- static deleteAsync: (context: RequestContext, props: {
3451
- id: string;
3452
- }) => Promise<void>;
3453
- /** Withdraw the beta app review submission. */
3454
- deleteAsync(): Promise<void>;
3455
- }
3456
- }
3457
- declare module "connect/models/BetaBuildLocalization" {
3458
- import { RequestContext } from "network/Request";
3459
- import { ConnectQueryFilter } from "connect/ConnectAPI";
3460
- import { ConnectModel } from "connect/models/ConnectModel";
3461
- interface BetaBuildLocalizationProps {
3462
- whatsNew: string | null;
3463
- locale: string | null;
3464
- }
3465
- export type BetaBuildLocalizationQueryFilter = ConnectQueryFilter<BetaBuildLocalizationProps & {
3466
- /**
3467
- * `Build` id
3468
- */
3469
- build: string;
3470
- }, 'build' | 'locale'>;
3471
- export class BetaBuildLocalization extends ConnectModel<BetaBuildLocalizationProps> {
3472
- static type: string;
3473
- static getAsync: (context: RequestContext, props?: {
3474
- query?: import("connect/ConnectAPI").ConnectQueryParams<Partial<{
3475
- locale: string | (string | null)[] | null;
3476
- build: string | string[];
3477
- } & {
3478
- id?: string;
3479
- }>> | undefined;
3480
- } | undefined) => Promise<BetaBuildLocalization[]>;
3481
- /**
3482
- *
3483
- * @param id `Build` id
3484
- */
3485
- static createAsync(context: RequestContext, { id, locale, }: {
3486
- id: string;
3487
- locale: string;
3488
- }): Promise<BetaBuildLocalization>;
3489
- updateAsync(attributes: Partial<BetaBuildLocalizationProps>): Promise<BetaBuildLocalization>;
3490
- }
3491
- }
3492
- declare module "connect/models/BetaBuildMetric" {
3493
- import { ConnectModel } from "connect/models/ConnectModel";
3494
- interface BetaBuildMetricProps {
3495
- installCount: number;
3496
- crashCount: number;
3497
- inviteCount: number;
3498
- sevenDayTesterCount: number;
3499
- }
3500
- export class BetaBuildMetric extends ConnectModel<BetaBuildMetricProps> {
3501
- static type: string;
3502
- }
3503
- }
3504
- declare module "connect/models/BetaTester" {
3335
+ declare module "connect/models/BetaTester" {
3505
3336
  import { RequestContext } from "network/Request";
3506
3337
  import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
3507
3338
  import type { App } from "connect/models/App";
@@ -3816,6 +3647,10 @@ declare module "connect/models/ResolutionCenterMessage" {
3816
3647
  fromActor: unknown;
3817
3648
  }
3818
3649
  export type ResolutionCenterMessageQueryFilter = ConnectQueryFilter<ResolutionCenterMessageProps, 'rejections'>;
3650
+ /**
3651
+ * Resolution center messages require session auth (Iris API).
3652
+ * These endpoints are NOT available with API key (JWT) authentication.
3653
+ */
3819
3654
  export class ResolutionCenterMessage extends ConnectModel<ResolutionCenterMessageProps> {
3820
3655
  static type: string;
3821
3656
  static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
@@ -3827,20 +3662,82 @@ declare module "connect/models/ResolutionCenterMessage" {
3827
3662
  } | undefined) => Promise<ResolutionCenterMessage[]>;
3828
3663
  }
3829
3664
  }
3665
+ declare module "connect/models/ResolutionCenterDraftMessage" {
3666
+ import { RequestContext } from "network/Request";
3667
+ import { ConnectModel } from "connect/models/ConnectModel";
3668
+ import { ResolutionCenterMessage } from "connect/models/ResolutionCenterMessage";
3669
+ interface ResolutionCenterDraftMessageProps {
3670
+ messageBody: string;
3671
+ /** @example '2026-04-13T20:26:31.914Z' */
3672
+ createdDate: string;
3673
+ /** @example '2026-04-13T20:26:31.883Z' */
3674
+ lastUpdatedDate: string;
3675
+ }
3676
+ /**
3677
+ * Draft messages in the resolution center. Used as an intermediate step
3678
+ * before sending a reply to App Review.
3679
+ *
3680
+ * Requires session auth (Iris API). NOT available with API key (JWT) authentication.
3681
+ *
3682
+ * Flow: createAsync (draft) → sendAsync (publish draft as message)
3683
+ */
3684
+ export class ResolutionCenterDraftMessage extends ConnectModel<ResolutionCenterDraftMessageProps> {
3685
+ static type: string;
3686
+ /**
3687
+ * Create a draft message on a resolution center thread.
3688
+ *
3689
+ * POST /iris/v1/resolutionCenterDraftMessages
3690
+ */
3691
+ static createAsync(context: RequestContext, { threadId, messageBody, }: {
3692
+ threadId: string;
3693
+ messageBody: string;
3694
+ }): Promise<ResolutionCenterDraftMessage>;
3695
+ static deleteAsync: (context: RequestContext, props: {
3696
+ id: string;
3697
+ }) => Promise<void>;
3698
+ /**
3699
+ * Update the draft message body.
3700
+ *
3701
+ * PATCH /iris/v1/resolutionCenterDraftMessages/{id}
3702
+ */
3703
+ updateAsync({ messageBody, }: {
3704
+ messageBody: string;
3705
+ }): Promise<ResolutionCenterDraftMessage>;
3706
+ /**
3707
+ * Delete this draft message.
3708
+ *
3709
+ * DELETE /iris/v1/resolutionCenterDraftMessages/{id}
3710
+ */
3711
+ deleteAsync(): Promise<void>;
3712
+ /**
3713
+ * Send this draft message, publishing it as a resolution center message.
3714
+ *
3715
+ * POST /iris/v1/resolutionCenterMessages
3716
+ */
3717
+ sendAsync(): Promise<ResolutionCenterMessage>;
3718
+ }
3719
+ }
3830
3720
  declare module "connect/models/ReviewRejection" {
3831
3721
  import { ConnectQueryFilter } from "connect/ConnectAPI";
3832
3722
  import { ConnectModel } from "connect/models/ConnectModel";
3833
- interface ReviewRejectionProps {
3834
- /** '2.1' */
3723
+ export interface ReviewRejectionReason {
3724
+ /** @example '2.5' */
3835
3725
  reasonSection: string;
3836
- /** 'Performance: App Completeness' */
3726
+ /** @example 'Performance: Software Requirements' */
3837
3727
  reasonDescription: string;
3838
- /** '2.1.0' */
3728
+ /** @example '2.5.4' */
3839
3729
  reasonCode: string;
3840
3730
  }
3731
+ interface ReviewRejectionProps {
3732
+ reasons: ReviewRejectionReason[];
3733
+ }
3841
3734
  export type ReviewRejectionQueryFilter = ConnectQueryFilter<ReviewRejectionProps & {
3842
3735
  'resolutionCenterMessage.resolutionCenterThread': string;
3843
3736
  }, 'resolutionCenterMessage.resolutionCenterThread'>;
3737
+ /**
3738
+ * Review rejections require session auth (Iris API).
3739
+ * These endpoints are NOT available with API key (JWT) authentication.
3740
+ */
3844
3741
  export class ReviewRejection extends ConnectModel<ReviewRejectionProps> {
3845
3742
  static type: string;
3846
3743
  static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
@@ -3857,6 +3754,7 @@ declare module "connect/models/ResolutionCenterThread" {
3857
3754
  import type { AppStoreVersion } from "connect/models/AppStoreVersion";
3858
3755
  import type { Build } from "connect/models/Build";
3859
3756
  import { ConnectModel } from "connect/models/ConnectModel";
3757
+ import { ResolutionCenterDraftMessage } from "connect/models/ResolutionCenterDraftMessage";
3860
3758
  import { ResolutionCenterMessage } from "connect/models/ResolutionCenterMessage";
3861
3759
  import { ReviewRejection } from "connect/models/ReviewRejection";
3862
3760
  export interface ResolutionCenterThreadProps {
@@ -3877,6 +3775,10 @@ declare module "connect/models/ResolutionCenterThread" {
3877
3775
  build: string;
3878
3776
  reviewSubmission: string;
3879
3777
  }, 'build' | 'appStoreVersion' | 'threadType' | 'reviewSubmission'>;
3778
+ /**
3779
+ * Resolution center threads require session auth (Iris API).
3780
+ * These endpoints are NOT available with API key (JWT) authentication.
3781
+ */
3880
3782
  export class ResolutionCenterThread extends ConnectModel<ResolutionCenterThreadProps> {
3881
3783
  static type: string;
3882
3784
  static DEFAULT_INCLUDES: string[];
@@ -3893,7 +3795,28 @@ declare module "connect/models/ResolutionCenterThread" {
3893
3795
  getResolutionCenterMessagesAsync({ query, }?: {
3894
3796
  query?: ConnectQueryParams;
3895
3797
  }): Promise<ResolutionCenterMessage[]>;
3798
+ /**
3799
+ * Get the current draft message for this thread, if any.
3800
+ *
3801
+ * GET /iris/v1/resolutionCenterThreads/{id}/resolutionCenterDraftMessage
3802
+ * Note: singular endpoint (not plural), returns a single object not an array.
3803
+ */
3804
+ getDraftMessageAsync(): Promise<ResolutionCenterDraftMessage | null>;
3896
3805
  fetchRejectionReasonsAsync(): Promise<ReviewRejection[]>;
3806
+ /**
3807
+ * Create a draft message on this thread.
3808
+ * Use `draft.sendAsync()` to publish it.
3809
+ */
3810
+ createDraftMessageAsync({ messageBody, }: {
3811
+ messageBody: string;
3812
+ }): Promise<ResolutionCenterDraftMessage>;
3813
+ /**
3814
+ * Send a reply to this resolution center thread.
3815
+ * Creates a draft and immediately publishes it.
3816
+ */
3817
+ sendReplyAsync({ messageBody }: {
3818
+ messageBody: string;
3819
+ }): Promise<ResolutionCenterMessage>;
3897
3820
  }
3898
3821
  }
3899
3822
  declare module "connect/models/Build" {
@@ -4018,207 +3941,606 @@ declare module "connect/models/Build" {
4018
3941
  isReadyForInternalTesting(): boolean;
4019
3942
  }
4020
3943
  }
4021
- declare module "connect/models/IdfaDeclaration" {
3944
+ declare module "connect/models/IdfaDeclaration" {
3945
+ import { RequestContext } from "network/Request";
3946
+ import { ConnectModel } from "connect/models/ConnectModel";
3947
+ /** @deprecated 1.6 */
3948
+ export interface IdfaDeclarationProps {
3949
+ servesAds: boolean;
3950
+ attributesAppInstallationToPreviousAd: boolean;
3951
+ attributesActionWithPreviousAd: boolean;
3952
+ honorsLimitedAdTracking: boolean;
3953
+ }
3954
+ /** @deprecated 1.6 */
3955
+ export class IdfaDeclaration extends ConnectModel<IdfaDeclarationProps> {
3956
+ static type: string;
3957
+ /**
3958
+ *
3959
+ * @param id `AppStoreVersion` id
3960
+ */
3961
+ static createAsync(context: RequestContext, { id, attributes, }: {
3962
+ id: string;
3963
+ attributes: Partial<IdfaDeclarationProps>;
3964
+ }): Promise<IdfaDeclaration>;
3965
+ static deleteAsync: (context: RequestContext, props: {
3966
+ id: string;
3967
+ }) => Promise<void>;
3968
+ deleteAsync(): Promise<void>;
3969
+ updateAsync(options: Partial<IdfaDeclarationProps>): Promise<IdfaDeclaration>;
3970
+ }
3971
+ }
3972
+ declare module "connect/models/ResetRatingsRequest" {
3973
+ import { RequestContext } from "network/Request";
3974
+ import { ConnectModel } from "connect/models/ConnectModel";
3975
+ export interface ResetRatingsRequestProps {
3976
+ resetDate: string | null;
3977
+ }
3978
+ export class ResetRatingsRequest extends ConnectModel<ResetRatingsRequestProps> {
3979
+ static type: string;
3980
+ /**
3981
+ *
3982
+ * @param id `AppStoreVersion` id
3983
+ */
3984
+ static createAsync(context: RequestContext, { id, }: {
3985
+ id: string;
3986
+ }): Promise<ResetRatingsRequest>;
3987
+ static deleteAsync: (context: RequestContext, props: {
3988
+ id: string;
3989
+ }) => Promise<void>;
3990
+ deleteAsync(): Promise<void>;
3991
+ }
3992
+ }
3993
+ declare module "connect/models/AppStoreVersion" {
3994
+ import { RequestContext } from "network/Request";
3995
+ import { ImageAsset } from "connect/AssetAPI";
3996
+ import { ConnectQueryParams } from "connect/ConnectAPI";
3997
+ import { AgeRatingDeclaration } from "connect/models/AgeRatingDeclaration";
3998
+ import { AppStoreState } from "connect/models/AppInfo";
3999
+ import { AppStoreReviewDetail, AppStoreReviewDetailProps } from "connect/models/AppStoreReviewDetail";
4000
+ import { AppStoreVersionLocalization, AppStoreVersionLocalizationProps } from "connect/models/AppStoreVersionLocalization";
4001
+ import { AppStoreVersionPhasedRelease, AppStoreVersionPhasedReleaseProps } from "connect/models/AppStoreVersionPhasedRelease";
4002
+ import { AppStoreVersionReleaseRequest } from "connect/models/AppStoreVersionReleaseRequest";
4003
+ import { AppStoreVersionSubmission } from "connect/models/AppStoreVersionSubmission";
4004
+ import { Build } from "connect/models/Build";
4005
+ import { ConnectModel } from "connect/models/ConnectModel";
4006
+ import { IdfaDeclaration, IdfaDeclarationProps } from "connect/models/IdfaDeclaration";
4007
+ import { Platform } from "connect/models/PreReleaseVersion";
4008
+ import { ResetRatingsRequest } from "connect/models/ResetRatingsRequest";
4009
+ export enum ReleaseType {
4010
+ AFTER_APPROVAL = "AFTER_APPROVAL",
4011
+ MANUAL = "MANUAL",
4012
+ SCHEDULED = "SCHEDULED"
4013
+ }
4014
+ /**
4015
+ * `NOTARIZATION` is alternative app marketplace distribution.
4016
+ * All eligible app versions default to both `APP_STORE` and `NOTARIZATION`.
4017
+ * An app can be distributed on either or both.
4018
+ */
4019
+ export enum ReviewType {
4020
+ APP_STORE = "APP_STORE",
4021
+ NOTARIZATION = "NOTARIZATION"
4022
+ }
4023
+ export enum AppVersionState {
4024
+ ACCEPTED = "ACCEPTED",
4025
+ DEVELOPER_REJECTED = "DEVELOPER_REJECTED",
4026
+ IN_REVIEW = "IN_REVIEW",
4027
+ INVALID_BINARY = "INVALID_BINARY",
4028
+ METADATA_REJECTED = "METADATA_REJECTED",
4029
+ PENDING_APPLE_RELEASE = "PENDING_APPLE_RELEASE",
4030
+ PENDING_DEVELOPER_RELEASE = "PENDING_DEVELOPER_RELEASE",
4031
+ PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION",
4032
+ PROCESSING_FOR_DISTRIBUTION = "PROCESSING_FOR_DISTRIBUTION",
4033
+ READY_FOR_DISTRIBUTION = "READY_FOR_DISTRIBUTION",
4034
+ READY_FOR_REVIEW = "READY_FOR_REVIEW",
4035
+ REJECTED = "REJECTED",
4036
+ REPLACED_WITH_NEW_VERSION = "REPLACED_WITH_NEW_VERSION",
4037
+ WAITING_FOR_EXPORT_COMPLIANCE = "WAITING_FOR_EXPORT_COMPLIANCE",
4038
+ WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
4039
+ }
4040
+ /**
4041
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appstoreversion/attributes-data.dictionary
4042
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appstoreversioncreaterequest/data-data.dictionary/attributes-data.dictionary
4043
+ */
4044
+ export interface AppStoreVersionProps {
4045
+ /**
4046
+ * @since 1.2
4047
+ * @example 'IOS'
4048
+ */
4049
+ platform: Platform;
4050
+ /**
4051
+ * @since 1.2
4052
+ * @deprecated 3.3 - use {@link appVersionState} instead
4053
+ * @example 'PREPARE_FOR_SUBMISSION'
4054
+ */
4055
+ appStoreState: AppStoreState;
4056
+ /**
4057
+ * @since 1.2
4058
+ * @example '2020 Expo'
4059
+ */
4060
+ copyright: string | null;
4061
+ /**
4062
+ * @since 1.2
4063
+ * @example '2020-10-29T09:03:06-07:00'
4064
+ */
4065
+ earliestReleaseDate: string | null;
4066
+ /** @since 1.2 */
4067
+ releaseType: ReleaseType | null;
4068
+ /** @since 1.2 */
4069
+ versionString: string;
4070
+ /**
4071
+ * @since 1.2
4072
+ * @example '2020-10-29T09:03:06-07:00'
4073
+ */
4074
+ createdDate: string;
4075
+ /** @since 1.2 */
4076
+ downloadable: boolean;
4077
+ /** @since 3.3 */
4078
+ appVersionState: AppVersionState | null;
4079
+ /** @since 3.3 */
4080
+ reviewType: ReviewType | null;
4081
+ storeIcon: ImageAsset | null;
4082
+ watchStoreIcon: ImageAsset | null;
4083
+ appStoreVersionSubmission?: AppStoreVersionSubmission;
4084
+ /**
4085
+ * This property has been removed.
4086
+ * @since 1.2
4087
+ * @deprecated 1.6
4088
+ */
4089
+ usesIdfa?: never;
4090
+ }
4091
+ export class AppStoreVersion extends ConnectModel<AppStoreVersionProps> {
4092
+ static type: string;
4093
+ static DEFAULT_INCLUDES: string[];
4094
+ /** @see https://developer.apple.com/documentation/appstoreconnectapi/appstoreversioncreaterequest/data-data.dictionary */
4095
+ static createAsync(context: RequestContext, { id, platform, versionString, copyright, earliestReleaseDate, releaseType, reviewType, }: {
4096
+ /** The `App` identifier to create the version for */
4097
+ id: string;
4098
+ } & Pick<AppStoreVersionProps, 'platform' | 'versionString'> & Partial<Pick<AppStoreVersionProps, 'copyright' | 'earliestReleaseDate' | 'releaseType' | 'reviewType'>>): Promise<AppStoreVersion>;
4099
+ getBuildAsync({ version, }?: {
4100
+ version?: string;
4101
+ }): Promise<Build | null>;
4102
+ updateBuildAsync({ buildId }?: {
4103
+ buildId?: string;
4104
+ }): Promise<AppStoreVersion>;
4105
+ /** @see https://developer.apple.com/documentation/appstoreconnectapi/appstoreversionupdaterequest/data-data.dictionary */
4106
+ updateAsync(options: Partial<Pick<AppStoreVersionProps, 'copyright' | 'earliestReleaseDate' | 'releaseType' | 'versionString' | 'downloadable' | 'reviewType'>>): Promise<AppStoreVersion>;
4107
+ /**
4108
+ * @deprecated The ageRatingDeclaration relationship has moved from appStoreVersions to appInfos.
4109
+ * Use {@link AppInfo.getAgeRatingDeclarationAsync} instead.
4110
+ */
4111
+ getAgeRatingDeclarationAsync({ query, }?: {
4112
+ query?: ConnectQueryParams;
4113
+ }): Promise<AgeRatingDeclaration | null>;
4114
+ createResetRatingsRequestAsync(): Promise<ResetRatingsRequest>;
4115
+ createPhasedReleaseAsync({ state, }?: {
4116
+ state?: AppStoreVersionPhasedReleaseProps['phasedReleaseState'];
4117
+ }): Promise<AppStoreVersionPhasedRelease>;
4118
+ getPhasedReleaseAsync({ query, }?: {
4119
+ query?: ConnectQueryParams;
4120
+ }): Promise<AppStoreVersionPhasedRelease | null>;
4121
+ getAppStoreReviewDetailAsync({ query, }?: {
4122
+ query?: ConnectQueryParams;
4123
+ }): Promise<AppStoreReviewDetail | null>;
4124
+ createSubmissionAsync(): Promise<AppStoreVersionSubmission>;
4125
+ getSubmissionAsync({ query, }?: {
4126
+ query?: ConnectQueryParams;
4127
+ }): Promise<AppStoreVersionSubmission | null>;
4128
+ /** @deprecated 1.6 */
4129
+ getIdfaDeclarationAsync({ query, }?: {
4130
+ query?: ConnectQueryParams;
4131
+ }): Promise<IdfaDeclaration | null>;
4132
+ /** @deprecated 1.6 */
4133
+ createIdfaDeclarationAsync(attributes: Partial<IdfaDeclarationProps>): Promise<IdfaDeclaration>;
4134
+ createLocalizationAsync({ locale, }: Pick<AppStoreVersionLocalizationProps, 'locale'>): Promise<AppStoreVersionLocalization>;
4135
+ createReviewDetailAsync(attributes: Partial<Omit<AppStoreReviewDetailProps, 'demoAccountRequired'>>): Promise<AppStoreReviewDetail>;
4136
+ createReleaseRequestAsync(): Promise<AppStoreVersionReleaseRequest>;
4137
+ getResetRatingsRequestAsync({ query, }?: {
4138
+ query?: ConnectQueryParams;
4139
+ }): Promise<ResetRatingsRequest | null>;
4140
+ getLocalizationsAsync({ query, }?: {
4141
+ query?: ConnectQueryParams;
4142
+ }): Promise<AppStoreVersionLocalization[]>;
4143
+ canReject(): boolean;
4144
+ rejectAsync(): Promise<boolean>;
4145
+ }
4146
+ }
4147
+ declare module "connect/models/AppStoreVersionLocalization" {
4148
+ import { RequestContext } from "network/Request";
4149
+ import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
4150
+ import { AppPreviewSet, AppPreviewSetProps } from "connect/models/AppPreviewSet";
4151
+ import { AppScreenshotSet, AppScreenshotSetProps } from "connect/models/AppScreenshotSet";
4152
+ import { ConnectModel } from "connect/models/ConnectModel";
4153
+ export interface AppStoreVersionLocalizationProps {
4154
+ description: string | null;
4155
+ /**
4156
+ * @example 'en-US'
4157
+ */
4158
+ locale: string;
4159
+ /**
4160
+ * @example 'Dating, Food, Books,'
4161
+ */
4162
+ keywords: string | null;
4163
+ marketingUrl: string | null;
4164
+ promotionalText: string | null;
4165
+ supportUrl: string | null;
4166
+ whatsNew: string | null;
4167
+ appScreenshotSets?: AppScreenshotSet[];
4168
+ appPreviewSets?: AppPreviewSet[];
4169
+ }
4170
+ /**
4171
+ * Used for updating basic metadata.
4172
+ */
4173
+ export class AppStoreVersionLocalization extends ConnectModel<AppStoreVersionLocalizationProps> {
4174
+ static type: string;
4175
+ static createAsync(context: RequestContext, { id, locale, }: {
4176
+ id: string;
4177
+ locale: string;
4178
+ }): Promise<AppStoreVersionLocalization>;
4179
+ static deleteAsync: (context: RequestContext, props: {
4180
+ id: string;
4181
+ }) => Promise<void>;
4182
+ updateAsync(options: Partial<Omit<AppStoreVersionLocalizationProps, 'locale' | 'appScreenshotSets' | 'appPreviewSets'>>): Promise<AppStoreVersionLocalization>;
4183
+ getAppScreenshotSetsAsync({ query, }?: {
4184
+ query?: ConnectQueryParams<ConnectQueryFilter<AppScreenshotSetProps, 'screenshotDisplayType'>>;
4185
+ }): Promise<AppScreenshotSet[]>;
4186
+ createAppScreenshotSetAsync(attributes: Pick<AppScreenshotSetProps, 'screenshotDisplayType'>): Promise<AppScreenshotSet>;
4187
+ getAppPreviewSetsAsync({ query, }?: {
4188
+ query?: ConnectQueryParams<ConnectQueryFilter<AppPreviewSetProps, 'previewType'>>;
4189
+ }): Promise<AppPreviewSet[]>;
4190
+ createAppPreviewSetAsync(attributes: Pick<AppPreviewSetProps, 'previewType'>): Promise<AppPreviewSet>;
4191
+ }
4192
+ }
4193
+ declare module "connect/models/AppPreviewSet" {
4194
+ import { RequestContext } from "network/Request";
4195
+ import { ConnectQueryParams } from "connect/ConnectAPI";
4196
+ import { AppPreview } from "connect/models/AppPreview";
4197
+ import { ConnectModel } from "connect/models/ConnectModel";
4198
+ export interface AppPreviewSetProps {
4199
+ previewType: PreviewType;
4200
+ appPreviews: AppPreview[];
4201
+ }
4202
+ /**
4203
+ * Display types for app previews.
4204
+ * Each type corresponds to a specific device screen size.
4205
+ */
4206
+ export enum PreviewType {
4207
+ IPHONE_35 = "IPHONE_35",
4208
+ IPHONE_40 = "IPHONE_40",
4209
+ IPHONE_47 = "IPHONE_47",
4210
+ IPHONE_55 = "IPHONE_55",
4211
+ IPHONE_58 = "IPHONE_58",
4212
+ IPHONE_61 = "IPHONE_61",
4213
+ IPHONE_65 = "IPHONE_65",
4214
+ IPHONE_67 = "IPHONE_67",
4215
+ IPAD_97 = "IPAD_97",
4216
+ IPAD_105 = "IPAD_105",
4217
+ IPAD_PRO_129 = "IPAD_PRO_129",
4218
+ IPAD_PRO_3GEN_11 = "IPAD_PRO_3GEN_11",
4219
+ IPAD_PRO_3GEN_129 = "IPAD_PRO_3GEN_129",
4220
+ WATCH_SERIES_3 = "WATCH_SERIES_3",
4221
+ WATCH_SERIES_4 = "WATCH_SERIES_4",
4222
+ WATCH_SERIES_7 = "WATCH_SERIES_7",
4223
+ WATCH_SERIES_10 = "WATCH_SERIES_10",
4224
+ WATCH_ULTRA = "WATCH_ULTRA",
4225
+ APPLE_TV = "APPLE_TV",
4226
+ APPLE_VISION_PRO = "APPLE_VISION_PRO",
4227
+ DESKTOP = "DESKTOP"
4228
+ }
4229
+ export const ALL_PREVIEW_TYPES: PreviewType[];
4230
+ /**
4231
+ * App Preview Set - groups app previews by display type.
4232
+ * Each set contains previews for a specific device screen size.
4233
+ */
4234
+ export class AppPreviewSet extends ConnectModel<AppPreviewSetProps> {
4235
+ static type: string;
4236
+ /**
4237
+ * Get info for a specific AppPreviewSet.
4238
+ * @param id AppPreviewSet ID
4239
+ */
4240
+ static infoAsync: (context: RequestContext, props: {
4241
+ id: string;
4242
+ query?: ConnectQueryParams;
4243
+ }) => Promise<AppPreviewSet>;
4244
+ /**
4245
+ * Create a new AppPreviewSet for a localization.
4246
+ * @param id AppStoreVersionLocalization ID
4247
+ * @param attributes Preview type attributes
4248
+ */
4249
+ static createAsync(context: RequestContext, { id, attributes, }: {
4250
+ id: string;
4251
+ attributes: Pick<AppPreviewSetProps, 'previewType'>;
4252
+ }): Promise<AppPreviewSet>;
4253
+ /**
4254
+ * Update the order of previews in this set.
4255
+ */
4256
+ updateAsync({ appPreviews }: {
4257
+ appPreviews: string[];
4258
+ }): Promise<AppPreviewSet>;
4259
+ static deleteAsync: (context: RequestContext, props: {
4260
+ id: string;
4261
+ }) => Promise<void>;
4262
+ deleteAsync(): Promise<void>;
4263
+ isIphone(): boolean;
4264
+ isIpad(): boolean;
4265
+ isWatch(): boolean;
4266
+ isAppleTv(): boolean;
4267
+ isAppleVisionPro(): boolean;
4268
+ isDesktop(): boolean;
4269
+ /**
4270
+ * Upload a video preview to this set.
4271
+ * @param filePath Path to the video file (MP4, MOV)
4272
+ * @param waitForProcessing Wait for Apple to process the video
4273
+ * @param position Optional position to insert the preview
4274
+ * @param previewFrameTimeCode Optional time code for the preview frame (e.g., "00:05:00")
4275
+ */
4276
+ uploadPreview({ filePath, waitForProcessing, position, previewFrameTimeCode, }: {
4277
+ filePath: string;
4278
+ waitForProcessing?: boolean;
4279
+ position?: number;
4280
+ previewFrameTimeCode?: string;
4281
+ }): Promise<AppPreview>;
4282
+ /**
4283
+ * Reorder previews in this set.
4284
+ * @param appPreviews Array of AppPreview IDs in desired order
4285
+ */
4286
+ reorderPreviewsAsync({ appPreviews, query, }: {
4287
+ appPreviews: string[];
4288
+ query?: ConnectQueryParams;
4289
+ }): Promise<AppPreviewSet[]>;
4290
+ }
4291
+ }
4292
+ declare module "connect/models/AppCustomProductPageLocalization" {
4293
+ import { RequestContext } from "network/Request";
4294
+ import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
4295
+ import { AppPreviewSet, AppPreviewSetProps } from "connect/models/AppPreviewSet";
4296
+ import { AppScreenshotSet, AppScreenshotSetProps } from "connect/models/AppScreenshotSet";
4297
+ import { ConnectModel } from "connect/models/ConnectModel";
4298
+ export interface AppCustomProductPageLocalizationProps {
4299
+ /** Locale code (e.g. 'en-US'). */
4300
+ locale: string;
4301
+ /** Promotional text for the page. */
4302
+ promotionalText: string | null;
4303
+ appScreenshotSets?: AppScreenshotSet[];
4304
+ appPreviewSets?: AppPreviewSet[];
4305
+ }
4306
+ export class AppCustomProductPageLocalization extends ConnectModel<AppCustomProductPageLocalizationProps> {
4307
+ static type: string;
4308
+ static infoAsync: (context: RequestContext, props: {
4309
+ id: string;
4310
+ query?: ConnectQueryParams;
4311
+ }) => Promise<AppCustomProductPageLocalization>;
4312
+ static deleteAsync: (context: RequestContext, props: {
4313
+ id: string;
4314
+ }) => Promise<void>;
4315
+ static createAsync(context: RequestContext, { appCustomProductPageVersionId, locale, promotionalText, }: {
4316
+ appCustomProductPageVersionId: string;
4317
+ locale: string;
4318
+ promotionalText?: string;
4319
+ }): Promise<AppCustomProductPageLocalization>;
4320
+ updateAsync(attributes: Partial<Pick<AppCustomProductPageLocalizationProps, 'promotionalText'>>): Promise<AppCustomProductPageLocalization>;
4321
+ getAppScreenshotSetsAsync({ query, }?: {
4322
+ query?: ConnectQueryParams<ConnectQueryFilter<AppScreenshotSetProps, 'screenshotDisplayType'>>;
4323
+ }): Promise<AppScreenshotSet[]>;
4324
+ getAppPreviewSetsAsync({ query, }?: {
4325
+ query?: ConnectQueryParams<ConnectQueryFilter<AppPreviewSetProps, 'previewType'>>;
4326
+ }): Promise<AppPreviewSet[]>;
4327
+ }
4328
+ }
4329
+ declare module "connect/models/AppCustomProductPageVersion" {
4330
+ import { RequestContext } from "network/Request";
4331
+ import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
4332
+ import { AppCustomProductPageLocalization } from "connect/models/AppCustomProductPageLocalization";
4333
+ import { ConnectModel } from "connect/models/ConnectModel";
4334
+ export enum AppCustomProductPageVersionState {
4335
+ PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION",
4336
+ READY_FOR_REVIEW = "READY_FOR_REVIEW",
4337
+ WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW",
4338
+ IN_REVIEW = "IN_REVIEW",
4339
+ ACCEPTED = "ACCEPTED",
4340
+ APPROVED = "APPROVED",
4341
+ REPLACED_WITH_NEW_VERSION = "REPLACED_WITH_NEW_VERSION",
4342
+ REJECTED = "REJECTED"
4343
+ }
4344
+ export interface AppCustomProductPageVersionProps {
4345
+ /** Version identifier. */
4346
+ version: string;
4347
+ /** Current state of the version. */
4348
+ state: AppCustomProductPageVersionState;
4349
+ /** Deep link URL for the version. */
4350
+ deepLink: string | null;
4351
+ appCustomProductPageLocalizations?: AppCustomProductPageLocalization[];
4352
+ }
4353
+ export type AppCustomProductPageVersionQueryFilter = ConnectQueryFilter<AppCustomProductPageVersionProps, 'state'>;
4354
+ export class AppCustomProductPageVersion extends ConnectModel<AppCustomProductPageVersionProps> {
4355
+ static type: string;
4356
+ static DEFAULT_INCLUDES: string[];
4357
+ static infoAsync: (context: RequestContext, props: {
4358
+ id: string;
4359
+ query?: ConnectQueryParams;
4360
+ }) => Promise<AppCustomProductPageVersion>;
4361
+ static createAsync(context: RequestContext, { appCustomProductPageId, deepLink, }: {
4362
+ appCustomProductPageId: string;
4363
+ deepLink?: string;
4364
+ }): Promise<AppCustomProductPageVersion>;
4365
+ updateAsync(attributes: Partial<Pick<AppCustomProductPageVersionProps, 'deepLink'>>): Promise<AppCustomProductPageVersion>;
4366
+ getAppCustomProductPageLocalizationsAsync({ query, }?: {
4367
+ query?: ConnectQueryParams;
4368
+ }): Promise<AppCustomProductPageLocalization[]>;
4369
+ }
4370
+ }
4371
+ declare module "connect/models/AppCustomProductPage" {
4022
4372
  import { RequestContext } from "network/Request";
4373
+ import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
4374
+ import { AppCustomProductPageVersion } from "connect/models/AppCustomProductPageVersion";
4023
4375
  import { ConnectModel } from "connect/models/ConnectModel";
4024
- /** @deprecated 1.6 */
4025
- export interface IdfaDeclarationProps {
4026
- servesAds: boolean;
4027
- attributesAppInstallationToPreviousAd: boolean;
4028
- attributesActionWithPreviousAd: boolean;
4029
- honorsLimitedAdTracking: boolean;
4376
+ export interface AppCustomProductPageProps {
4377
+ /** Name of the custom product page. */
4378
+ name: string;
4379
+ /** The generated URL for the custom product page. */
4380
+ url: string;
4381
+ /** Whether the page is visible. */
4382
+ visible: boolean | null;
4383
+ appCustomProductPageVersions?: AppCustomProductPageVersion[];
4030
4384
  }
4031
- /** @deprecated 1.6 */
4032
- export class IdfaDeclaration extends ConnectModel<IdfaDeclarationProps> {
4385
+ export type AppCustomProductPageQueryFilter = ConnectQueryFilter<AppCustomProductPageProps, 'visible'>;
4386
+ export class AppCustomProductPage extends ConnectModel<AppCustomProductPageProps> {
4033
4387
  static type: string;
4034
- /**
4035
- *
4036
- * @param id `AppStoreVersion` id
4037
- */
4038
- static createAsync(context: RequestContext, { id, attributes, }: {
4388
+ static DEFAULT_INCLUDES: string[];
4389
+ static infoAsync: (context: RequestContext, props: {
4039
4390
  id: string;
4040
- attributes: Partial<IdfaDeclarationProps>;
4041
- }): Promise<IdfaDeclaration>;
4391
+ query?: ConnectQueryParams;
4392
+ }) => Promise<AppCustomProductPage>;
4042
4393
  static deleteAsync: (context: RequestContext, props: {
4043
4394
  id: string;
4044
4395
  }) => Promise<void>;
4045
- deleteAsync(): Promise<void>;
4046
- updateAsync(options: Partial<IdfaDeclarationProps>): Promise<IdfaDeclaration>;
4396
+ static createAsync(context: RequestContext, { appId, name, appStoreVersionTemplateId, customProductPageTemplateId, }: {
4397
+ appId: string;
4398
+ name: string;
4399
+ appStoreVersionTemplateId?: string;
4400
+ customProductPageTemplateId?: string;
4401
+ }): Promise<AppCustomProductPage>;
4402
+ updateAsync(attributes: Partial<Pick<AppCustomProductPageProps, 'name' | 'visible'>>): Promise<AppCustomProductPage>;
4403
+ getAppCustomProductPageVersionsAsync({ query, }?: {
4404
+ query?: ConnectQueryParams;
4405
+ }): Promise<AppCustomProductPageVersion[]>;
4047
4406
  }
4048
4407
  }
4049
- declare module "connect/models/ResetRatingsRequest" {
4408
+ declare module "connect/models/AppClipAppStoreReviewDetail" {
4050
4409
  import { RequestContext } from "network/Request";
4051
4410
  import { ConnectModel } from "connect/models/ConnectModel";
4052
- export interface ResetRatingsRequestProps {
4053
- resetDate: string | null;
4411
+ export interface AppClipAppStoreReviewDetailProps {
4412
+ invocationUrls: string[] | null;
4054
4413
  }
4055
- export class ResetRatingsRequest extends ConnectModel<ResetRatingsRequestProps> {
4414
+ /**
4415
+ * App Store review detail for an App Clip default experience.
4416
+ *
4417
+ * Holds the list of invocation URLs that App Review will use to launch the
4418
+ * App Clip during review.
4419
+ *
4420
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipappstorereviewdetail
4421
+ */
4422
+ export class AppClipAppStoreReviewDetail extends ConnectModel<AppClipAppStoreReviewDetailProps> {
4056
4423
  static type: string;
4057
- /**
4058
- *
4059
- * @param id `AppStoreVersion` id
4060
- */
4061
- static createAsync(context: RequestContext, { id, }: {
4424
+ static infoAsync: (context: RequestContext, props: {
4062
4425
  id: string;
4063
- }): Promise<ResetRatingsRequest>;
4426
+ query?: import("connect/ConnectAPI").ConnectQueryParams;
4427
+ }) => Promise<AppClipAppStoreReviewDetail>;
4064
4428
  static deleteAsync: (context: RequestContext, props: {
4065
4429
  id: string;
4066
4430
  }) => Promise<void>;
4431
+ static createAsync(context: RequestContext, { appClipDefaultExperienceId, attributes, }: {
4432
+ appClipDefaultExperienceId: string;
4433
+ attributes: Pick<AppClipAppStoreReviewDetailProps, 'invocationUrls'>;
4434
+ }): Promise<AppClipAppStoreReviewDetail>;
4435
+ updateAsync(options: Partial<Pick<AppClipAppStoreReviewDetailProps, 'invocationUrls'>>): Promise<AppClipAppStoreReviewDetail>;
4067
4436
  deleteAsync(): Promise<void>;
4068
4437
  }
4069
4438
  }
4070
- declare module "connect/models/AppStoreVersion" {
4439
+ declare module "connect/models/AppClipHeaderImage" {
4071
4440
  import { RequestContext } from "network/Request";
4072
- import { ImageAsset } from "connect/AssetAPI";
4073
- import { ConnectQueryParams } from "connect/ConnectAPI";
4074
- import { AgeRatingDeclaration } from "connect/models/AgeRatingDeclaration";
4075
- import { AppStoreState } from "connect/models/AppInfo";
4076
- import { AppStoreReviewDetail, AppStoreReviewDetailProps } from "connect/models/AppStoreReviewDetail";
4077
- import { AppStoreVersionLocalization, AppStoreVersionLocalizationProps } from "connect/models/AppStoreVersionLocalization";
4078
- import { AppStoreVersionPhasedRelease, AppStoreVersionPhasedReleaseProps } from "connect/models/AppStoreVersionPhasedRelease";
4079
- import { AppStoreVersionReleaseRequest } from "connect/models/AppStoreVersionReleaseRequest";
4080
- import { AppStoreVersionSubmission } from "connect/models/AppStoreVersionSubmission";
4081
- import { Build } from "connect/models/Build";
4441
+ import { AppMediaAssetState, ImageAsset, UploadOperation } from "connect/AssetAPI";
4082
4442
  import { ConnectModel } from "connect/models/ConnectModel";
4083
- import { IdfaDeclaration, IdfaDeclarationProps } from "connect/models/IdfaDeclaration";
4084
- import { Platform } from "connect/models/PreReleaseVersion";
4085
- import { ResetRatingsRequest } from "connect/models/ResetRatingsRequest";
4086
- export enum ReleaseType {
4087
- AFTER_APPROVAL = "AFTER_APPROVAL",
4088
- MANUAL = "MANUAL",
4089
- SCHEDULED = "SCHEDULED"
4090
- }
4091
- /**
4092
- * `NOTARIZATION` is alternative app marketplace distribution.
4093
- * All eligible app versions default to both `APP_STORE` and `NOTARIZATION`.
4094
- * An app can be distributed on either or both.
4095
- */
4096
- export enum ReviewType {
4097
- APP_STORE = "APP_STORE",
4098
- NOTARIZATION = "NOTARIZATION"
4099
- }
4100
- export enum AppVersionState {
4101
- ACCEPTED = "ACCEPTED",
4102
- DEVELOPER_REJECTED = "DEVELOPER_REJECTED",
4103
- IN_REVIEW = "IN_REVIEW",
4104
- INVALID_BINARY = "INVALID_BINARY",
4105
- METADATA_REJECTED = "METADATA_REJECTED",
4106
- PENDING_APPLE_RELEASE = "PENDING_APPLE_RELEASE",
4107
- PENDING_DEVELOPER_RELEASE = "PENDING_DEVELOPER_RELEASE",
4108
- PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION",
4109
- PROCESSING_FOR_DISTRIBUTION = "PROCESSING_FOR_DISTRIBUTION",
4110
- READY_FOR_DISTRIBUTION = "READY_FOR_DISTRIBUTION",
4111
- READY_FOR_REVIEW = "READY_FOR_REVIEW",
4112
- REJECTED = "REJECTED",
4113
- REPLACED_WITH_NEW_VERSION = "REPLACED_WITH_NEW_VERSION",
4114
- WAITING_FOR_EXPORT_COMPLIANCE = "WAITING_FOR_EXPORT_COMPLIANCE",
4115
- WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
4443
+ export interface AppClipHeaderImageProps {
4444
+ fileSize: number;
4445
+ fileName: string;
4446
+ sourceFileChecksum: string;
4447
+ imageAsset: ImageAsset;
4448
+ uploadOperations: UploadOperation[];
4449
+ assetDeliveryState: AppMediaAssetState;
4116
4450
  }
4117
4451
  /**
4118
- * @see https://developer.apple.com/documentation/appstoreconnectapi/appstoreversion/attributes-data.dictionary
4119
- * @see https://developer.apple.com/documentation/appstoreconnectapi/appstoreversioncreaterequest/data-data.dictionary/attributes-data.dictionary
4452
+ * A header image for an App Clip default experience localization.
4453
+ *
4454
+ * Uses the same upload protocol as `AppScreenshot`:
4455
+ * 1. POST `/v1/appClipHeaderImages` with `fileName` + `fileSize` to reserve
4456
+ * the asset and obtain `uploadOperations`.
4457
+ * 2. PUT the binary data to each operation's URL via `assetClient`.
4458
+ * 3. PATCH the resource with `uploaded: true` and `sourceFileChecksum`.
4459
+ * 4. Optionally poll until `assetDeliveryState.state` is `COMPLETE`.
4460
+ *
4461
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipheaderimage
4120
4462
  */
4121
- export interface AppStoreVersionProps {
4122
- /**
4123
- * @since 1.2
4124
- * @example 'IOS'
4125
- */
4126
- platform: Platform;
4127
- /**
4128
- * @since 1.2
4129
- * @deprecated 3.3 - use {@link appVersionState} instead
4130
- * @example 'PREPARE_FOR_SUBMISSION'
4131
- */
4132
- appStoreState: AppStoreState;
4133
- /**
4134
- * @since 1.2
4135
- * @example '2020 Expo'
4136
- */
4137
- copyright: string | null;
4463
+ export class AppClipHeaderImage extends ConnectModel<AppClipHeaderImageProps> {
4464
+ static type: string;
4465
+ static infoAsync: (context: RequestContext, props: {
4466
+ id: string;
4467
+ query?: import("connect/ConnectAPI").ConnectQueryParams;
4468
+ }) => Promise<AppClipHeaderImage>;
4469
+ static createAsync(context: RequestContext, { id, attributes, }: {
4470
+ /** AppClipDefaultExperienceLocalization id */
4471
+ id: string;
4472
+ attributes: Pick<AppClipHeaderImageProps, 'fileName' | 'fileSize'>;
4473
+ }): Promise<AppClipHeaderImage>;
4138
4474
  /**
4139
- * @since 1.2
4140
- * @example '2020-10-29T09:03:06-07:00'
4475
+ * Upload a header image PNG to App Store Connect for an App Clip
4476
+ * default-experience localization.
4477
+ *
4478
+ * @param id `AppClipDefaultExperienceLocalization` id
4141
4479
  */
4142
- earliestReleaseDate: string | null;
4143
- /** @since 1.2 */
4144
- releaseType: ReleaseType | null;
4145
- /** @since 1.2 */
4146
- versionString: string;
4480
+ static uploadAsync(context: RequestContext, { id, filePath, waitForProcessing, }: {
4481
+ id: string;
4482
+ filePath: string;
4483
+ waitForProcessing?: boolean;
4484
+ }): Promise<AppClipHeaderImage>;
4485
+ static deleteAsync: (context: RequestContext, props: {
4486
+ id: string;
4487
+ }) => Promise<void>;
4488
+ deleteAsync(): Promise<void>;
4489
+ updateAsync(options: Partial<Pick<AppClipHeaderImageProps, 'sourceFileChecksum'>> & {
4490
+ uploaded?: boolean;
4491
+ }): Promise<AppClipHeaderImage>;
4492
+ isAwaitingUpload(): boolean;
4493
+ isComplete(): boolean;
4494
+ isFailed(): boolean;
4495
+ getErrorMessages(): string[];
4147
4496
  /**
4148
- * @since 1.2
4149
- * @example '2020-10-29T09:03:06-07:00'
4497
+ * Get a downloadable URL for the rendered image asset. Note that the
4498
+ * downloaded image is a re-rendered copy and will NOT match
4499
+ * `sourceFileChecksum`.
4150
4500
  */
4151
- createdDate: string;
4152
- /** @since 1.2 */
4153
- downloadable: boolean;
4154
- /** @since 3.3 */
4155
- appVersionState: AppVersionState | null;
4156
- /** @since 3.3 */
4157
- reviewType: ReviewType | null;
4158
- storeIcon: ImageAsset | null;
4159
- watchStoreIcon: ImageAsset | null;
4160
- appStoreVersionSubmission?: AppStoreVersionSubmission;
4501
+ getImageAssetUrl({ width, height, type, }: {
4502
+ width?: number;
4503
+ height?: number;
4504
+ type?: string | 'png';
4505
+ }): string | null;
4506
+ }
4507
+ }
4508
+ declare module "connect/models/AppClipDefaultExperienceLocalization" {
4509
+ import { RequestContext } from "network/Request";
4510
+ import { AppClipHeaderImage } from "connect/models/AppClipHeaderImage";
4511
+ import { ConnectModel } from "connect/models/ConnectModel";
4512
+ export interface AppClipDefaultExperienceLocalizationProps {
4161
4513
  /**
4162
- * This property has been removed.
4163
- * @since 1.2
4164
- * @deprecated 1.6
4514
+ * @example 'en-US'
4165
4515
  */
4166
- usesIdfa?: never;
4516
+ locale: string;
4517
+ subtitle: string | null;
4518
+ appClipHeaderImage?: AppClipHeaderImage | null;
4167
4519
  }
4168
- export class AppStoreVersion extends ConnectModel<AppStoreVersionProps> {
4520
+ /**
4521
+ * A localized subtitle and header image for an App Clip default experience.
4522
+ *
4523
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipdefaultexperiencelocalization
4524
+ */
4525
+ export class AppClipDefaultExperienceLocalization extends ConnectModel<AppClipDefaultExperienceLocalizationProps> {
4169
4526
  static type: string;
4170
- static DEFAULT_INCLUDES: string[];
4171
- /** @see https://developer.apple.com/documentation/appstoreconnectapi/appstoreversioncreaterequest/data-data.dictionary */
4172
- static createAsync(context: RequestContext, { id, platform, versionString, copyright, earliestReleaseDate, releaseType, reviewType, }: {
4173
- /** The `App` identifier to create the version for */
4527
+ static infoAsync: (context: RequestContext, props: {
4174
4528
  id: string;
4175
- } & Pick<AppStoreVersionProps, 'platform' | 'versionString'> & Partial<Pick<AppStoreVersionProps, 'copyright' | 'earliestReleaseDate' | 'releaseType' | 'reviewType'>>): Promise<AppStoreVersion>;
4176
- getBuildAsync({ version, }?: {
4177
- version?: string;
4178
- }): Promise<Build | null>;
4179
- updateBuildAsync({ buildId }?: {
4180
- buildId?: string;
4181
- }): Promise<AppStoreVersion>;
4182
- /** @see https://developer.apple.com/documentation/appstoreconnectapi/appstoreversionupdaterequest/data-data.dictionary */
4183
- updateAsync(options: Partial<Pick<AppStoreVersionProps, 'copyright' | 'earliestReleaseDate' | 'releaseType' | 'versionString' | 'downloadable' | 'reviewType'>>): Promise<AppStoreVersion>;
4529
+ query?: import("connect/ConnectAPI").ConnectQueryParams;
4530
+ }) => Promise<AppClipDefaultExperienceLocalization>;
4531
+ static deleteAsync: (context: RequestContext, props: {
4532
+ id: string;
4533
+ }) => Promise<void>;
4534
+ static createAsync(context: RequestContext, { appClipDefaultExperienceId, attributes, }: {
4535
+ appClipDefaultExperienceId: string;
4536
+ attributes: Pick<AppClipDefaultExperienceLocalizationProps, 'locale' | 'subtitle'>;
4537
+ }): Promise<AppClipDefaultExperienceLocalization>;
4538
+ updateAsync(options: Partial<Pick<AppClipDefaultExperienceLocalizationProps, 'subtitle'>>): Promise<AppClipDefaultExperienceLocalization>;
4539
+ deleteAsync(): Promise<void>;
4184
4540
  /**
4185
- * @deprecated The ageRatingDeclaration relationship has moved from appStoreVersions to appInfos.
4186
- * Use {@link AppInfo.getAgeRatingDeclarationAsync} instead.
4541
+ * Get the header image for this localization. Returns null if none uploaded.
4187
4542
  */
4188
- getAgeRatingDeclarationAsync({ query, }?: {
4189
- query?: ConnectQueryParams;
4190
- }): Promise<AgeRatingDeclaration | null>;
4191
- createResetRatingsRequestAsync(): Promise<ResetRatingsRequest>;
4192
- createPhasedReleaseAsync({ state, }?: {
4193
- state?: AppStoreVersionPhasedReleaseProps['phasedReleaseState'];
4194
- }): Promise<AppStoreVersionPhasedRelease>;
4195
- getPhasedReleaseAsync({ query, }?: {
4196
- query?: ConnectQueryParams;
4197
- }): Promise<AppStoreVersionPhasedRelease | null>;
4198
- getAppStoreReviewDetailAsync({ query, }?: {
4199
- query?: ConnectQueryParams;
4200
- }): Promise<AppStoreReviewDetail | null>;
4201
- createSubmissionAsync(): Promise<AppStoreVersionSubmission>;
4202
- getSubmissionAsync({ query, }?: {
4203
- query?: ConnectQueryParams;
4204
- }): Promise<AppStoreVersionSubmission | null>;
4205
- /** @deprecated 1.6 */
4206
- getIdfaDeclarationAsync({ query, }?: {
4207
- query?: ConnectQueryParams;
4208
- }): Promise<IdfaDeclaration | null>;
4209
- /** @deprecated 1.6 */
4210
- createIdfaDeclarationAsync(attributes: Partial<IdfaDeclarationProps>): Promise<IdfaDeclaration>;
4211
- createLocalizationAsync({ locale, }: Pick<AppStoreVersionLocalizationProps, 'locale'>): Promise<AppStoreVersionLocalization>;
4212
- createReviewDetailAsync(attributes: Partial<Omit<AppStoreReviewDetailProps, 'demoAccountRequired'>>): Promise<AppStoreReviewDetail>;
4213
- createReleaseRequestAsync(): Promise<AppStoreVersionReleaseRequest>;
4214
- getResetRatingsRequestAsync({ query, }?: {
4215
- query?: ConnectQueryParams;
4216
- }): Promise<ResetRatingsRequest | null>;
4217
- getLocalizationsAsync({ query, }?: {
4218
- query?: ConnectQueryParams;
4219
- }): Promise<AppStoreVersionLocalization[]>;
4220
- canReject(): boolean;
4221
- rejectAsync(): Promise<boolean>;
4543
+ getAppClipHeaderImageAsync(): Promise<AppClipHeaderImage | null>;
4222
4544
  }
4223
4545
  }
4224
4546
  declare module "connect/models/AppClipDefaultExperience" {
@@ -4513,12 +4835,119 @@ declare module "connect/models/AppPriceTier" {
4513
4835
  static type: string;
4514
4836
  }
4515
4837
  }
4838
+ declare module "connect/models/Territory" {
4839
+ import { ConnectModel } from "connect/models/ConnectModel";
4840
+ export interface TerritoryProps {
4841
+ /**
4842
+ * @example 'USD'
4843
+ */
4844
+ currency: string;
4845
+ }
4846
+ export class Territory extends ConnectModel<TerritoryProps> {
4847
+ static type: string;
4848
+ static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
4849
+ query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
4850
+ } | undefined) => Promise<Territory[]>;
4851
+ }
4852
+ }
4853
+ declare module "connect/models/AppPricePoint" {
4854
+ import { RequestContext } from "network/Request";
4855
+ import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
4856
+ import { AppPriceTier } from "connect/models/AppPriceTier";
4857
+ import { ConnectModel } from "connect/models/ConnectModel";
4858
+ import { Territory } from "connect/models/Territory";
4859
+ export interface AppPricePointProps {
4860
+ customerPrice: string;
4861
+ proceeds: string;
4862
+ /** @deprecated Only populated via the legacy iris endpoint. */
4863
+ priceTier?: AppPriceTier;
4864
+ territory?: Territory;
4865
+ }
4866
+ export type AppPricePointQueryFilter = ConnectQueryFilter<{
4867
+ territory: string;
4868
+ priceTier: string;
4869
+ app: string;
4870
+ }, 'territory' | 'priceTier' | 'app'>;
4871
+ export class AppPricePoint extends ConnectModel<AppPricePointProps> {
4872
+ static type: string;
4873
+ /**
4874
+ * Legacy list endpoint (iris). Kept for backwards compatibility; new callers
4875
+ * should use the app-scoped {@link AppPricePoint.getForAppAsync} helper which
4876
+ * uses the public App Store Connect API.
4877
+ */
4878
+ static getAsync: (context: RequestContext, props?: {
4879
+ query?: ConnectQueryParams<Partial<{
4880
+ app: string | string[];
4881
+ territory: string | string[];
4882
+ priceTier: string | string[];
4883
+ } & {
4884
+ id?: string;
4885
+ }>> | undefined;
4886
+ } | undefined) => Promise<AppPricePoint[]>;
4887
+ /**
4888
+ * Look up a single price point by id (ex: `UNHB5PT4MA`).
4889
+ *
4890
+ * Uses the legacy iris endpoint for compatibility with existing callers.
4891
+ * The modern equivalent is `GET /v3/appPricePoints/{id}`.
4892
+ */
4893
+ static infoAsync: (context: RequestContext, props: {
4894
+ id: string;
4895
+ query?: ConnectQueryParams;
4896
+ }) => Promise<AppPricePoint>;
4897
+ /**
4898
+ * Fetch the valid price points for a given app, optionally filtered by
4899
+ * territory. This is the replacement for the deprecated global
4900
+ * `appPriceTiers` lookup and is used when constructing an
4901
+ * {@link AppPriceSchedule}. Price point ids are app-specific.
4902
+ *
4903
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppricepoints
4904
+ */
4905
+ static getForAppAsync(context: RequestContext, { id, query, }: {
4906
+ /** App id (e.g. `1234567890`). */
4907
+ id: string;
4908
+ query?: ConnectQueryParams<AppPricePointQueryFilter>;
4909
+ }): Promise<AppPricePoint[]>;
4910
+ }
4911
+ }
4516
4912
  declare module "connect/models/AppPrice" {
4913
+ import { AppPricePoint } from "connect/models/AppPricePoint";
4517
4914
  import { AppPriceTier } from "connect/models/AppPriceTier";
4518
4915
  import { ConnectModel } from "connect/models/ConnectModel";
4916
+ import { Territory } from "connect/models/Territory";
4519
4917
  export interface AppPriceProps {
4520
- startDate: string;
4521
- priceTier: AppPriceTier;
4918
+ /**
4919
+ * ISO-8601 start date for this price (e.g. `2024-01-31`).
4920
+ *
4921
+ * When used as a "manual" price inside an {@link AppPriceSchedule} create
4922
+ * request, passing `null` (or omitting the attribute) means "effective
4923
+ * immediately".
4924
+ */
4925
+ startDate: string | null;
4926
+ /**
4927
+ * ISO-8601 end date. Optional — typically not set by callers and returned by
4928
+ * Apple only for historical automatic prices.
4929
+ */
4930
+ endDate?: string | null;
4931
+ /**
4932
+ * Whether this price was set manually as part of an
4933
+ * {@link AppPriceSchedule}, or automatically computed by Apple from the
4934
+ * schedule's `baseTerritory` price. Only populated on reads.
4935
+ */
4936
+ manual?: boolean;
4937
+ /**
4938
+ * The price point this price refers to. Populated on reads, and required
4939
+ * when constructing an `AppPrice` to pass to
4940
+ * {@link AppPriceSchedule.createAsync}.
4941
+ */
4942
+ appPricePoint?: AppPricePoint;
4943
+ /** Territory this price applies to (read-only). */
4944
+ territory?: Territory;
4945
+ /**
4946
+ * Legacy price tier (e.g. `1`, `2`, ...). Only populated by the deprecated
4947
+ * iris endpoint. New callers should use {@link AppPriceProps.appPricePoint}.
4948
+ * @deprecated Apple removed the global tier system in late 2023.
4949
+ */
4950
+ priceTier?: AppPriceTier;
4522
4951
  }
4523
4952
  export class AppPrice extends ConnectModel<AppPriceProps> {
4524
4953
  static type: string;
@@ -4531,6 +4960,123 @@ declare module "connect/models/AppPrice" {
4531
4960
  }) => Promise<AppPrice>;
4532
4961
  }
4533
4962
  }
4963
+ declare module "connect/models/AppPriceSchedule" {
4964
+ /**
4965
+ * App price schedule — the "base territory" pricing model Apple introduced in
4966
+ * late 2023, replacing the legacy `appPriceTier`-driven
4967
+ * `App.updateAsync({ appPriceTier, territories })` flow.
4968
+ *
4969
+ * A schedule describes the full set of manual prices for an app. Creating a
4970
+ * new schedule REPLACES any prior schedule entirely, so callers must include
4971
+ * every manual price they want to keep.
4972
+ *
4973
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appPriceSchedules
4974
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/post-v1-apppriceschedules
4975
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppriceschedule
4976
+ */
4977
+ import { RequestContext } from "network/Request";
4978
+ import { ConnectQueryParams } from "connect/ConnectAPI";
4979
+ import { AppPrice } from "connect/models/AppPrice";
4980
+ import { ConnectModel } from "connect/models/ConnectModel";
4981
+ import { Territory } from "connect/models/Territory";
4982
+ export interface AppPriceScheduleProps {
4983
+ /** Territory used as the reference for automatically-computed prices. */
4984
+ baseTerritory?: Territory;
4985
+ /**
4986
+ * Manual prices explicitly set by the developer. Each entry ties an
4987
+ * {@link AppPricePoint} to an (optional) `startDate`.
4988
+ */
4989
+ manualPrices?: AppPrice[];
4990
+ /**
4991
+ * Prices automatically computed by Apple for territories not covered by
4992
+ * `manualPrices`, using the `baseTerritory` price point as a reference.
4993
+ * Read-only.
4994
+ */
4995
+ automaticPrices?: AppPrice[];
4996
+ }
4997
+ /**
4998
+ * Shape of a manual price when creating an {@link AppPriceSchedule}. Each
4999
+ * entry becomes an inline `appPrices` resource in the POST body, referencing
5000
+ * an existing `appPricePoint` id (look these up via
5001
+ * {@link AppPricePoint.getForAppAsync}).
5002
+ */
5003
+ export interface AppPriceScheduleManualPriceInput {
5004
+ /** Id of the target `appPricePoint`. */
5005
+ appPricePointId: string;
5006
+ /**
5007
+ * ISO-8601 date (YYYY-MM-DD) for when this price should take effect.
5008
+ * Pass `null` (or omit) for "effective immediately".
5009
+ */
5010
+ startDate?: string | null;
5011
+ /**
5012
+ * Optional end date. Typically unused on creates — callers express "end"
5013
+ * by scheduling a follow-up price with a later `startDate`.
5014
+ */
5015
+ endDate?: string | null;
5016
+ }
5017
+ export class AppPriceSchedule extends ConnectModel<AppPriceScheduleProps> {
5018
+ static type: string;
5019
+ static DEFAULT_INCLUDES: string[];
5020
+ /**
5021
+ * Fetch a single schedule by id.
5022
+ *
5023
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apppriceschedules-_id_
5024
+ */
5025
+ static infoAsync: (context: RequestContext, props: {
5026
+ id: string;
5027
+ query?: ConnectQueryParams;
5028
+ }) => Promise<AppPriceSchedule>;
5029
+ /**
5030
+ * Fetch the current schedule for an app.
5031
+ *
5032
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppriceschedule
5033
+ */
5034
+ static getForAppAsync(context: RequestContext, { id, query, }: {
5035
+ /** App id. */
5036
+ id: string;
5037
+ query?: ConnectQueryParams;
5038
+ }): Promise<AppPriceSchedule | null>;
5039
+ /**
5040
+ * Create a new price schedule for an app. This REPLACES any prior
5041
+ * schedule — callers must include every manual price they want to keep.
5042
+ *
5043
+ * Manual prices are passed as inline `appPrices` resources referencing
5044
+ * existing `appPricePoint` ids. Look up valid price point ids for the target
5045
+ * app (and optionally a specific territory) via
5046
+ * {@link AppPricePoint.getForAppAsync}.
5047
+ *
5048
+ * @example
5049
+ * ```ts
5050
+ * const pricePoints = await AppPricePoint.getForAppAsync(context, {
5051
+ * id: app.id,
5052
+ * query: { filter: { territory: 'USA' } },
5053
+ * });
5054
+ * await AppPriceSchedule.createAsync(context, {
5055
+ * appId: app.id,
5056
+ * baseTerritoryId: 'USA',
5057
+ * manualPrices: [{ appPricePointId: pricePoints[0].id }],
5058
+ * });
5059
+ * ```
5060
+ *
5061
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/post-v1-apppriceschedules
5062
+ */
5063
+ static createAsync(context: RequestContext, { appId, baseTerritoryId, manualPrices, }: {
5064
+ /** Id of the app the schedule is being set on. */
5065
+ appId: string;
5066
+ /**
5067
+ * Id of the territory (e.g. `USA`) whose manual price Apple should use
5068
+ * as the reference for automatic prices in other territories.
5069
+ */
5070
+ baseTerritoryId: string;
5071
+ /**
5072
+ * Manual prices to apply. An empty array makes the app free in the
5073
+ * base territory (Apple requires at least one entry matching the base
5074
+ * territory's price point in practice).
5075
+ */
5076
+ manualPrices: AppPriceScheduleManualPriceInput[];
5077
+ }): Promise<AppPriceSchedule>;
5078
+ }
5079
+ }
4534
5080
  declare module "connect/models/BetaAppLocalization" {
4535
5081
  import { RequestContext } from "network/Request";
4536
5082
  import { ConnectQueryFilter } from "connect/ConnectAPI";
@@ -4877,13 +5423,77 @@ declare module "connect/models/InAppPurchase" {
4877
5423
  }) => Promise<InAppPurchase>;
4878
5424
  }
4879
5425
  }
5426
+ declare module "connect/models/CustomerReviewResponse" {
5427
+ import { RequestContext } from "network/Request";
5428
+ import { ConnectQueryParams } from "connect/ConnectAPI";
5429
+ import { ConnectModel } from "connect/models/ConnectModel";
5430
+ export interface CustomerReviewResponseProps {
5431
+ responseBody: string;
5432
+ lastModifiedDate: string;
5433
+ state: 'PUBLISHED' | 'PENDING_PUBLISH';
5434
+ }
5435
+ export class CustomerReviewResponse extends ConnectModel<CustomerReviewResponseProps> {
5436
+ static type: string;
5437
+ static infoAsync: (context: RequestContext, props: {
5438
+ id: string;
5439
+ query?: ConnectQueryParams;
5440
+ }) => Promise<CustomerReviewResponse>;
5441
+ static deleteAsync: (context: RequestContext, props: {
5442
+ id: string;
5443
+ }) => Promise<void>;
5444
+ static createAsync(context: RequestContext, { responseBody, reviewId, }: {
5445
+ responseBody: string;
5446
+ reviewId: string;
5447
+ }): Promise<CustomerReviewResponse>;
5448
+ }
5449
+ }
5450
+ declare module "connect/models/CustomerReview" {
5451
+ import { RequestContext } from "network/Request";
5452
+ import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
5453
+ import { ConnectModel } from "connect/models/ConnectModel";
5454
+ import { CustomerReviewResponse } from "connect/models/CustomerReviewResponse";
5455
+ export interface CustomerReviewProps {
5456
+ rating: number;
5457
+ title: string | null;
5458
+ body: string | null;
5459
+ reviewerNickname: string;
5460
+ createdDate: string;
5461
+ territory: string;
5462
+ response?: CustomerReviewResponse | null;
5463
+ }
5464
+ export type CustomerReviewQueryFilter = ConnectQueryFilter<CustomerReviewProps & {
5465
+ publishedResponse: string;
5466
+ }, 'rating' | 'territory'>;
5467
+ export class CustomerReview extends ConnectModel<CustomerReviewProps> {
5468
+ static type: string;
5469
+ static DEFAULT_INCLUDES: string[];
5470
+ static getAsync: (context: RequestContext, props?: {
5471
+ query?: ConnectQueryParams<Partial<{
5472
+ territory: string | string[];
5473
+ rating: number | number[];
5474
+ } & {
5475
+ id?: string;
5476
+ }>> | undefined;
5477
+ } | undefined) => Promise<CustomerReview[]>;
5478
+ static infoAsync: (context: RequestContext, props: {
5479
+ id: string;
5480
+ query?: ConnectQueryParams;
5481
+ }) => Promise<CustomerReview>;
5482
+ getResponseAsync({ query, }?: {
5483
+ query?: ConnectQueryParams;
5484
+ }): Promise<CustomerReviewResponse | null>;
5485
+ createResponseAsync({ responseBody, }: {
5486
+ responseBody: string;
5487
+ }): Promise<CustomerReviewResponse>;
5488
+ }
5489
+ }
4880
5490
  declare module "connect/models/ReviewSubmissionItem" {
4881
5491
  import { ConnectQueryFilter } from "connect/ConnectAPI";
4882
5492
  import type { AppStoreVersion } from "connect/models/AppStoreVersion";
4883
5493
  import { ConnectModel } from "connect/models/ConnectModel";
4884
5494
  /** @see https://developer.apple.com/documentation/appstoreconnectapi/reviewsubmissionitem/attributes-data.dictionary */
4885
5495
  interface ReviewSubmissionItemProps {
4886
- state: unknown;
5496
+ state: 'READY_FOR_REVIEW' | 'ACCEPTED' | 'APPROVED' | 'REJECTED' | 'REMOVED' | string;
4887
5497
  appStoreVersionExperiment: unknown;
4888
5498
  appStoreVersion?: AppStoreVersion;
4889
5499
  appCustomProductPageVersion: unknown;
@@ -4894,8 +5504,8 @@ declare module "connect/models/ReviewSubmissionItem" {
4894
5504
  static type: string;
4895
5505
  static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
4896
5506
  query?: import("connect/ConnectAPI").ConnectQueryParams<Partial<{
5507
+ state: string | string[];
4897
5508
  appStoreVersion?: AppStoreVersion | (AppStoreVersion | undefined)[] | undefined;
4898
- state: unknown;
4899
5509
  appCustomProductPageVersion: unknown;
4900
5510
  appEvent: unknown;
4901
5511
  appStoreVersionExperiment: unknown;
@@ -4903,6 +5513,8 @@ declare module "connect/models/ReviewSubmissionItem" {
4903
5513
  id?: string;
4904
5514
  }>> | undefined;
4905
5515
  } | undefined) => Promise<ReviewSubmissionItem[]>;
5516
+ /** Mark a rejected review submission item as resolved so it can be resubmitted. */
5517
+ resolveAsync(): Promise<ReviewSubmissionItem>;
4906
5518
  }
4907
5519
  }
4908
5520
  declare module "connect/models/ReviewSubmission" {
@@ -4930,8 +5542,8 @@ declare module "connect/models/ReviewSubmission" {
4930
5542
  static DEFAULT_INCLUDES: string[];
4931
5543
  static getAsync: (context: RequestContext, props?: {
4932
5544
  query?: ConnectQueryParams<Partial<{
4933
- platform: Platform | Platform[];
4934
5545
  state: "COMPLETE" | "IN_REVIEW" | "READY_FOR_REVIEW" | "WAITING_FOR_REVIEW" | "UNRESOLVED_ISSUES" | "CANCELING" | "COMPLETING" | ("COMPLETE" | "IN_REVIEW" | "READY_FOR_REVIEW" | "WAITING_FOR_REVIEW" | "UNRESOLVED_ISSUES" | "CANCELING" | "COMPLETING")[];
5546
+ platform: Platform | Platform[];
4935
5547
  } & {
4936
5548
  id?: string;
4937
5549
  }>> | undefined;
@@ -4961,24 +5573,10 @@ declare module "connect/models/ReviewSubmission" {
4961
5573
  getResolutionCenterThreadsAsync(): Promise<ResolutionCenterThread[]>;
4962
5574
  }
4963
5575
  }
4964
- declare module "connect/models/Territory" {
4965
- import { ConnectModel } from "connect/models/ConnectModel";
4966
- export interface TerritoryProps {
4967
- /**
4968
- * @example 'USD'
4969
- */
4970
- currency: string;
4971
- }
4972
- export class Territory extends ConnectModel<TerritoryProps> {
4973
- static type: string;
4974
- static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
4975
- query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
4976
- } | undefined) => Promise<Territory[]>;
4977
- }
4978
- }
4979
5576
  declare module "connect/models/App" {
4980
5577
  import { RequestContext } from "network/Request";
4981
5578
  import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
5579
+ import { AppCustomProductPage, AppCustomProductPageQueryFilter } from "connect/models/AppCustomProductPage";
4982
5580
  import { AppClip } from "connect/models/AppClip";
4983
5581
  import { AppDataUsage } from "connect/models/AppDataUsage";
4984
5582
  import { AppDataUsageCategoryId } from "connect/models/AppDataUsageCategory";
@@ -4987,6 +5585,8 @@ declare module "connect/models/App" {
4987
5585
  import { AppDataUsagesPublishState } from "connect/models/AppDataUsagesPublishState";
4988
5586
  import { AppInfo, AppStoreState } from "connect/models/AppInfo";
4989
5587
  import { AppPrice } from "connect/models/AppPrice";
5588
+ import { AppPricePoint, AppPricePointQueryFilter } from "connect/models/AppPricePoint";
5589
+ import { AppPriceSchedule, AppPriceScheduleManualPriceInput } from "connect/models/AppPriceSchedule";
4990
5590
  import { AppStoreVersion, AppStoreVersionProps } from "connect/models/AppStoreVersion";
4991
5591
  import { BetaAppLocalization, BetaAppLocalizationProps } from "connect/models/BetaAppLocalization";
4992
5592
  import { BetaAppReviewDetail, BetaAppReviewDetailProps } from "connect/models/BetaAppReviewDetail";
@@ -5000,6 +5600,7 @@ declare module "connect/models/App" {
5000
5600
  import { ConnectModel } from "connect/models/ConnectModel";
5001
5601
  import { InAppPurchase, InAppPurchaseQueryFilter } from "connect/models/InAppPurchase";
5002
5602
  import { Platform, PreReleaseVersion } from "connect/models/PreReleaseVersion";
5603
+ import { CustomerReview, CustomerReviewQueryFilter } from "connect/models/CustomerReview";
5003
5604
  import { ReviewSubmission } from "connect/models/ReviewSubmission";
5004
5605
  import { Territory } from "connect/models/Territory";
5005
5606
  export enum ContentRightsDeclaration {
@@ -5085,6 +5686,9 @@ declare module "connect/models/App" {
5085
5686
  getAppStoreVersionsAsync({ query, }?: {
5086
5687
  query?: ConnectQueryParams;
5087
5688
  }): Promise<AppStoreVersion[]>;
5689
+ getAppCustomProductPagesAsync({ query, }?: {
5690
+ query?: ConnectQueryParams<AppCustomProductPageQueryFilter>;
5691
+ }): Promise<AppCustomProductPage[]>;
5088
5692
  getAppInfoAsync({ query }?: {
5089
5693
  query?: ConnectQueryParams;
5090
5694
  }): Promise<AppInfo[]>;
@@ -5148,6 +5752,36 @@ declare module "connect/models/App" {
5148
5752
  getAvailableTerritoriesAsync({ query, }?: {
5149
5753
  query?: ConnectQueryParams;
5150
5754
  }): Promise<Territory[]>;
5755
+ /**
5756
+ * Get the current base-territory price schedule for this app, or `null` if
5757
+ * none has been set. This is the read half of the modern pricing API
5758
+ * (replaces the legacy `prices` relationship populated by
5759
+ * `App.updateAsync({ appPriceTier, territories })`).
5760
+ *
5761
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppriceschedule
5762
+ */
5763
+ getPriceScheduleAsync({ query, }?: {
5764
+ query?: ConnectQueryParams;
5765
+ }): Promise<AppPriceSchedule | null>;
5766
+ /**
5767
+ * Create (replace) the price schedule for this app. See
5768
+ * {@link AppPriceSchedule.createAsync} for important details — this
5769
+ * REPLACES any prior schedule entirely.
5770
+ */
5771
+ createPriceScheduleAsync({ baseTerritoryId, manualPrices, }: {
5772
+ baseTerritoryId: string;
5773
+ manualPrices: AppPriceScheduleManualPriceInput[];
5774
+ }): Promise<AppPriceSchedule>;
5775
+ /**
5776
+ * List the valid price points for this app, optionally filtered by
5777
+ * territory. Use this to look up a concrete `appPricePoint` id to pass to
5778
+ * {@link App.createPriceScheduleAsync}.
5779
+ *
5780
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppricepoints
5781
+ */
5782
+ getAppPricePointsAsync({ query, }?: {
5783
+ query?: ConnectQueryParams<AppPricePointQueryFilter>;
5784
+ }): Promise<AppPricePoint[]>;
5151
5785
  getInAppPurchasesAsync({ query, }?: {
5152
5786
  query?: ConnectQueryParams<InAppPurchaseQueryFilter>;
5153
5787
  }): Promise<InAppPurchase[]>;
@@ -5160,6 +5794,10 @@ declare module "connect/models/App" {
5160
5794
  platform?: Platform;
5161
5795
  includes?: string[];
5162
5796
  }): Promise<ReviewSubmission | null>;
5797
+ getUnresolvedReviewSubmissionAsync({ platform, includes, }?: {
5798
+ platform?: Platform;
5799
+ includes?: string[];
5800
+ }): Promise<ReviewSubmission | null>;
5163
5801
  getReviewSubmissionsAsync({ query, }?: {
5164
5802
  query?: ConnectQueryParams;
5165
5803
  }): Promise<ReviewSubmission[]>;
@@ -5205,6 +5843,9 @@ declare module "connect/models/App" {
5205
5843
  appDataUsagePurpose?: AppDataUsagePurposeId;
5206
5844
  }): Promise<AppDataUsage>;
5207
5845
  createVersionAsync({ versionString, platform, }: Pick<AppStoreVersionProps, 'versionString' | 'platform'>): Promise<AppStoreVersion>;
5846
+ getCustomerReviewsAsync({ query, }?: {
5847
+ query?: ConnectQueryParams<CustomerReviewQueryFilter>;
5848
+ }): Promise<CustomerReview[]>;
5208
5849
  }
5209
5850
  }
5210
5851
  declare module "connect/models/User" {
@@ -5349,41 +5990,6 @@ declare module "connect/models/ApiKey" {
5349
5990
  revokeAsync(): Promise<ApiKey>;
5350
5991
  }
5351
5992
  }
5352
- declare module "connect/models/AppPricePoint" {
5353
- import { ConnectQueryFilter } from "connect/ConnectAPI";
5354
- import { AppPriceTier } from "connect/models/AppPriceTier";
5355
- import { ConnectModel } from "connect/models/ConnectModel";
5356
- import { Territory } from "connect/models/Territory";
5357
- export interface AppPricePointProps {
5358
- customerPrice: string;
5359
- proceeds: string;
5360
- priceTier?: AppPriceTier;
5361
- territory?: Territory;
5362
- }
5363
- export type AppPricePointQueryFilter = ConnectQueryFilter<{
5364
- territory: string;
5365
- priceTier: string;
5366
- }, 'territory' | 'priceTier'>;
5367
- export class AppPricePoint extends ConnectModel<AppPricePointProps> {
5368
- static type: string;
5369
- static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
5370
- query?: import("connect/ConnectAPI").ConnectQueryParams<Partial<{
5371
- territory: string | string[];
5372
- priceTier: string | string[];
5373
- } & {
5374
- id?: string;
5375
- }>> | undefined;
5376
- } | undefined) => Promise<AppPricePoint[]>;
5377
- /**
5378
- *
5379
- * @param id `AppPricePoint` id (ex: UNHB5PT4MA)
5380
- */
5381
- static infoAsync: (context: import("AppStoreConnect").RequestContext, props: {
5382
- id: string;
5383
- query?: import("connect/ConnectAPI").ConnectQueryParams;
5384
- }) => Promise<AppPricePoint>;
5385
- }
5386
- }
5387
5993
  declare module "connect/models/BetaCrashLog" {
5388
5994
  /**
5389
5995
  * The crash log text associated with a beta feedback crash submission.
@@ -5676,6 +6282,9 @@ declare module "connect/index" {
5676
6282
  export * from "connect/models/ApiKey";
5677
6283
  export * from "connect/models/App";
5678
6284
  export * from "connect/models/AppClip";
6285
+ export * from "connect/models/AppCustomProductPage";
6286
+ export * from "connect/models/AppCustomProductPageLocalization";
6287
+ export * from "connect/models/AppCustomProductPageVersion";
5679
6288
  export * from "connect/models/AppClipAppStoreReviewDetail";
5680
6289
  export * from "connect/models/AppClipDefaultExperience";
5681
6290
  export * from "connect/models/AppClipDefaultExperienceLocalization";
@@ -5692,6 +6301,7 @@ declare module "connect/index" {
5692
6301
  export * from "connect/models/AppInfoLocalization";
5693
6302
  export * from "connect/models/AppPrice";
5694
6303
  export * from "connect/models/AppPricePoint";
6304
+ export * from "connect/models/AppPriceSchedule";
5695
6305
  export * from "connect/models/AppPriceTier";
5696
6306
  export * from "connect/models/AppPreview";
5697
6307
  export * from "connect/models/AppPreviewSet";
@@ -5725,11 +6335,14 @@ declare module "connect/index" {
5725
6335
  export * from "connect/models/BundleId";
5726
6336
  export * from "connect/models/BundleIdCapability";
5727
6337
  export * from "connect/models/ContentProvider";
6338
+ export * from "connect/models/ResolutionCenterDraftMessage";
5728
6339
  export * from "connect/models/ResolutionCenterMessage";
5729
6340
  export * from "connect/models/ResolutionCenterThread";
5730
6341
  export * from "connect/models/ReviewRejection";
5731
6342
  export * from "connect/models/ResolutionCenterMessageAttachment";
5732
6343
  export * from "connect/models/Certificate";
6344
+ export * from "connect/models/CustomerReview";
6345
+ export * from "connect/models/CustomerReviewResponse";
5733
6346
  export * from "connect/models/Device";
5734
6347
  export * from "connect/models/Profile";
5735
6348
  export * from "connect/models/InAppPurchase";