@expo/apple-utils 2.1.18 → 2.1.20

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.
@@ -1413,212 +1413,203 @@ declare module "connect/models/ContentProvider" {
1413
1413
  } | undefined) => Promise<ContentProvider[]>;
1414
1414
  }
1415
1415
  }
1416
- declare module "connect/models/AppClip" {
1416
+ declare module "connect/models/AppClipAppStoreReviewDetail" {
1417
+ import { RequestContext } from "network/Request";
1417
1418
  import { ConnectModel } from "connect/models/ConnectModel";
1418
- export interface AppClipProps {
1419
- /**
1420
- * The bundle identifier of the App Clip.
1421
- * @example 'com.bacon.app.Clip'
1422
- */
1423
- bundleId: string;
1419
+ export interface AppClipAppStoreReviewDetailProps {
1420
+ invocationUrls: string[] | null;
1424
1421
  }
1425
1422
  /**
1426
- * An App Clip associated with an app in App Store Connect.
1423
+ * App Store review detail for an App Clip default experience.
1427
1424
  *
1428
- * App Clips are lightweight versions of apps that let users perform quick tasks
1429
- * without downloading the full app.
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
1430
1429
  */
1431
- export class AppClip extends ConnectModel<AppClipProps> {
1430
+ export class AppClipAppStoreReviewDetail extends ConnectModel<AppClipAppStoreReviewDetailProps> {
1432
1431
  static type: string;
1433
- /**
1434
- * Get a single App Clip by ID.
1435
- *
1436
- * @param id App Clip ID
1437
- */
1438
- static infoAsync: (context: import("AppStoreConnect").RequestContext, props: {
1432
+ static infoAsync: (context: RequestContext, props: {
1439
1433
  id: string;
1440
1434
  query?: import("connect/ConnectAPI").ConnectQueryParams;
1441
- }) => Promise<AppClip>;
1442
- }
1443
- }
1444
- declare module "connect/models/AppDataUsageGrouping" {
1445
- import { ConnectModel } from "connect/models/ConnectModel";
1446
- export interface AppDataUsageGroupingProps {
1447
- deleted: boolean;
1448
- }
1449
- export class AppDataUsageGrouping extends ConnectModel<AppDataUsageGroupingProps> {
1450
- static type: string;
1451
- static deleteAsync: (context: import("AppStoreConnect").RequestContext, props: {
1435
+ }) => Promise<AppClipAppStoreReviewDetail>;
1436
+ static deleteAsync: (context: RequestContext, props: {
1452
1437
  id: string;
1453
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>;
1454
1444
  deleteAsync(): Promise<void>;
1455
1445
  }
1456
1446
  }
1457
- declare module "connect/models/AppDataUsageCategory" {
1458
- import { AppDataUsageGrouping } from "connect/models/AppDataUsageGrouping";
1459
- import { ConnectModel } from "connect/models/ConnectModel";
1460
- export interface AppDataUsageCategoryProps {
1461
- deleted: boolean;
1462
- grouping: AppDataUsageGrouping;
1447
+ declare module "utils/crypto" {
1448
+ import * as crypto from 'crypto';
1449
+ export function getChecksum(value: crypto.BinaryLike): string;
1450
+ }
1451
+ declare module "connect/AssetAPI" {
1452
+ import { AxiosResponse } from 'axios';
1453
+ import { ParsingOptions, RequestContext, RequestProps } from "network/Request";
1454
+ import { ConnectClientAPI } from "connect/ConnectAPI";
1455
+ export interface UploadOperationHeader {
1456
+ name: string;
1457
+ value: string;
1463
1458
  }
1464
- /**
1465
- * @see https://appstoreconnect.apple.com/iris/v1/appDataUsageCategories
1466
- * @example `apple-utils app-data-usage-category:get`
1467
- */
1468
- export enum AppDataUsageCategoryId {
1469
- ADVERTISING_DATA = "ADVERTISING_DATA",
1470
- AUDIO = "AUDIO",
1471
- BROWSING_HISTORY = "BROWSING_HISTORY",
1472
- COARSE_LOCATION = "COARSE_LOCATION",
1473
- CONTACTS = "CONTACTS",
1474
- CRASH_DATA = "CRASH_DATA",
1475
- CREDIT_AND_FRAUD = "CREDIT_AND_FRAUD",
1476
- CUSTOMER_SUPPORT = "CUSTOMER_SUPPORT",
1477
- DEVICE_ID = "DEVICE_ID",
1478
- EMAIL_ADDRESS = "EMAIL_ADDRESS",
1479
- EMAILS_OR_TEXT_MESSAGES = "EMAILS_OR_TEXT_MESSAGES",
1480
- ENVIRONMENTAL_SCANNING = "ENVIRONMENTAL_SCANNING",
1481
- FITNESS = "FITNESS",
1482
- GAMEPLAY_CONTENT = "GAMEPLAY_CONTENT",
1483
- HANDS = "HANDS",
1484
- HEAD_MOVEMENT = "HEAD_MOVEMENT",
1485
- HEALTH = "HEALTH",
1486
- NAME = "NAME",
1487
- OTHER_CONTACT_INFO = "OTHER_CONTACT_INFO",
1488
- OTHER_DATA = "OTHER_DATA",
1489
- OTHER_DIAGNOSTIC_DATA = "OTHER_DIAGNOSTIC_DATA",
1490
- OTHER_FINANCIAL_INFO = "OTHER_FINANCIAL_INFO",
1491
- OTHER_USAGE_DATA = "OTHER_USAGE_DATA",
1492
- OTHER_USER_CONTENT = "OTHER_USER_CONTENT",
1493
- PAYMENT_INFORMATION = "PAYMENT_INFORMATION",
1494
- PERFORMANCE_DATA = "PERFORMANCE_DATA",
1495
- PHONE_NUMBER = "PHONE_NUMBER",
1496
- PHOTOS_OR_VIDEOS = "PHOTOS_OR_VIDEOS",
1497
- PHYSICAL_ADDRESS = "PHYSICAL_ADDRESS",
1498
- PRECISE_LOCATION = "PRECISE_LOCATION",
1499
- PRODUCT_INTERACTION = "PRODUCT_INTERACTION",
1500
- PURCHASE_HISTORY = "PURCHASE_HISTORY",
1501
- SEARCH_HISTORY = "SEARCH_HISTORY",
1502
- SENSITIVE_INFO = "SENSITIVE_INFO",
1503
- USER_ID = "USER_ID"
1459
+ export interface UploadOperation {
1460
+ method: string;
1461
+ url: string;
1462
+ length: number;
1463
+ offset: number;
1464
+ requestHeaders: UploadOperationHeader[];
1504
1465
  }
1505
- export class AppDataUsageCategory extends ConnectModel<AppDataUsageCategoryProps> {
1506
- static type: string;
1507
- static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
1508
- query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
1509
- } | undefined) => Promise<AppDataUsageCategory[]>;
1510
- static deleteAsync: (context: import("AppStoreConnect").RequestContext, props: {
1511
- id: string;
1512
- }) => Promise<void>;
1513
- deleteAsync(): Promise<void>;
1466
+ export enum AppMediaAssetStateState {
1467
+ AWAITING_UPLOAD = "AWAITING_UPLOAD",
1468
+ UPLOAD_COMPLETE = "UPLOAD_COMPLETE",
1469
+ /** Used by videoDeliveryState while Apple transcodes the video. */
1470
+ PROCESSING = "PROCESSING",
1471
+ COMPLETE = "COMPLETE",
1472
+ FAILED = "FAILED"
1514
1473
  }
1515
- }
1516
- declare module "connect/models/AppDataUsageDataProtection" {
1517
- import { ConnectModel } from "connect/models/ConnectModel";
1518
- export interface AppDataUsageDataProtectionProps {
1519
- deleted: boolean;
1474
+ export interface AppMediaStateError {
1475
+ code: string;
1476
+ description: string;
1520
1477
  }
1521
- /**
1522
- * @see https://appstoreconnect.apple.com/iris/v1/appDataUsageDataProtections
1523
- * @example `apple-utils app-data-usage-protection:get`
1524
- */
1525
- export enum AppDataUsageDataProtectionId {
1526
- DATA_USED_TO_TRACK_YOU = "DATA_USED_TO_TRACK_YOU",
1527
- DATA_LINKED_TO_YOU = "DATA_LINKED_TO_YOU",
1528
- DATA_NOT_LINKED_TO_YOU = "DATA_NOT_LINKED_TO_YOU",
1529
- DATA_NOT_COLLECTED = "DATA_NOT_COLLECTED"
1478
+ export interface AppMediaAssetState {
1479
+ errors: AppMediaStateError[];
1480
+ warnings: AppMediaStateError[];
1481
+ state: AppMediaAssetStateState;
1530
1482
  }
1531
- export class AppDataUsageDataProtection extends ConnectModel<AppDataUsageDataProtectionProps> {
1532
- static type: string;
1533
- static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
1534
- query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
1535
- } | undefined) => Promise<AppDataUsageDataProtection[]>;
1536
- static deleteAsync: (context: import("AppStoreConnect").RequestContext, props: {
1537
- id: string;
1538
- }) => Promise<void>;
1539
- deleteAsync(): Promise<void>;
1483
+ export interface ImageAsset {
1484
+ /**
1485
+ * @example 'https://is3-ssl.mzstatic.com/image/thumb/Purple118/v4/0c/26/16/0c261675-72c5-7e10-3fdc-c8a20ccebd77/AppIcon-1x_U007emarketing-85-220-0-6.png/{w}x{h}bb.{f}'
1486
+ */
1487
+ templateUrl: string;
1488
+ /**
1489
+ * @example 1024
1490
+ */
1491
+ width: number;
1492
+ /**
1493
+ * @example 1024
1494
+ */
1495
+ height: number;
1496
+ }
1497
+ class AssetAPI extends ConnectClientAPI {
1498
+ get hostname(): string;
1499
+ requestAsync<T = any, R extends AxiosResponse<T> = AxiosResponse<T>>(context: RequestContext, request: RequestProps, options?: ParsingOptions): Promise<R>;
1500
+ uploadAsync(_context: RequestContext, { uploadOperations, bytes, }: {
1501
+ uploadOperations: UploadOperation[];
1502
+ bytes: Buffer;
1503
+ }): Promise<void>;
1540
1504
  }
1505
+ export const assetClient: AssetAPI;
1541
1506
  }
1542
- declare module "connect/models/AppDataUsagePurpose" {
1507
+ declare module "connect/models/AppClipHeaderImage" {
1508
+ import { RequestContext } from "network/Request";
1509
+ import { AppMediaAssetState, ImageAsset, UploadOperation } from "connect/AssetAPI";
1543
1510
  import { ConnectModel } from "connect/models/ConnectModel";
1544
- export interface AppDataUsagePurposeProps {
1545
- deleted: boolean;
1511
+ export interface AppClipHeaderImageProps {
1512
+ fileSize: number;
1513
+ fileName: string;
1514
+ sourceFileChecksum: string;
1515
+ imageAsset: ImageAsset;
1516
+ uploadOperations: UploadOperation[];
1517
+ assetDeliveryState: AppMediaAssetState;
1546
1518
  }
1547
1519
  /**
1548
- * @see https://appstoreconnect.apple.com/iris/v1/appDataUsagePurposes
1549
- * @example `apple-utils app-data-usage-purpose:get`
1520
+ * A header image for an App Clip default experience localization.
1521
+ *
1522
+ * Uses the same upload protocol as `AppScreenshot`:
1523
+ * 1. POST `/v1/appClipHeaderImages` with `fileName` + `fileSize` to reserve
1524
+ * the asset and obtain `uploadOperations`.
1525
+ * 2. PUT the binary data to each operation's URL via `assetClient`.
1526
+ * 3. PATCH the resource with `uploaded: true` and `sourceFileChecksum`.
1527
+ * 4. Optionally poll until `assetDeliveryState.state` is `COMPLETE`.
1528
+ *
1529
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipheaderimage
1550
1530
  */
1551
- export enum AppDataUsagePurposeId {
1552
- THIRD_PARTY_ADVERTISING = "THIRD_PARTY_ADVERTISING",
1553
- DEVELOPERS_ADVERTISING = "DEVELOPERS_ADVERTISING",
1554
- ANALYTICS = "ANALYTICS",
1555
- PRODUCT_PERSONALIZATION = "PRODUCT_PERSONALIZATION",
1556
- APP_FUNCTIONALITY = "APP_FUNCTIONALITY",
1557
- OTHER_PURPOSES = "OTHER_PURPOSES"
1558
- }
1559
- export class AppDataUsagePurpose extends ConnectModel<AppDataUsagePurposeProps> {
1531
+ export class AppClipHeaderImage extends ConnectModel<AppClipHeaderImageProps> {
1560
1532
  static type: string;
1561
- static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
1562
- query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
1563
- } | undefined) => Promise<AppDataUsagePurpose[]>;
1564
- static deleteAsync: (context: import("AppStoreConnect").RequestContext, props: {
1533
+ static infoAsync: (context: RequestContext, props: {
1565
1534
  id: string;
1566
- }) => Promise<void>;
1567
- deleteAsync(): Promise<void>;
1568
- }
1569
- }
1570
- declare module "connect/models/AppDataUsage" {
1571
- import { RequestContext } from "network/Request";
1572
- import { AppDataUsageCategory } from "connect/models/AppDataUsageCategory";
1573
- import { AppDataUsageDataProtection } from "connect/models/AppDataUsageDataProtection";
1574
- import { AppDataUsageGrouping } from "connect/models/AppDataUsageGrouping";
1575
- import { AppDataUsagePurpose } from "connect/models/AppDataUsagePurpose";
1576
- import { ConnectModel } from "connect/models/ConnectModel";
1577
- export interface AppDataUsageProps {
1578
- category?: AppDataUsageCategory;
1579
- grouping?: AppDataUsageGrouping;
1580
- purpose?: AppDataUsagePurpose;
1581
- dataProtection?: AppDataUsageDataProtection;
1582
- }
1583
- export class AppDataUsage extends ConnectModel<AppDataUsageProps> {
1584
- static type: string;
1585
- static DEFAULT_INCLUDES: string[];
1535
+ query?: import("connect/ConnectAPI").ConnectQueryParams;
1536
+ }) => Promise<AppClipHeaderImage>;
1537
+ static createAsync(context: RequestContext, { id, attributes, }: {
1538
+ /** AppClipDefaultExperienceLocalization id */
1539
+ id: string;
1540
+ attributes: Pick<AppClipHeaderImageProps, 'fileName' | 'fileSize'>;
1541
+ }): Promise<AppClipHeaderImage>;
1586
1542
  /**
1543
+ * Upload a header image PNG to App Store Connect for an App Clip
1544
+ * default-experience localization.
1587
1545
  *
1588
- * @param id `App` id
1589
- * @param appDataUsageCategory `AppDataUsageCategory` id (`AppDataUsageCategoryId`)
1590
- * @param appDataUsageProtection `AppDataUsageProtection` id (`AppDataUsageProtectionId`)
1591
- * @param appDataUsagePurpose `AppDataUsagePurpose` id (`AppDataUsagePurposeId`)
1546
+ * @param id `AppClipDefaultExperienceLocalization` id
1592
1547
  */
1593
- static createAsync(context: RequestContext, { id, appDataUsageCategory, appDataUsageProtection, appDataUsagePurpose, }: {
1548
+ static uploadAsync(context: RequestContext, { id, filePath, waitForProcessing, }: {
1594
1549
  id: string;
1595
- appDataUsageCategory?: string;
1596
- appDataUsageProtection?: string;
1597
- appDataUsagePurpose?: string;
1598
- }): Promise<AppDataUsage>;
1550
+ filePath: string;
1551
+ waitForProcessing?: boolean;
1552
+ }): Promise<AppClipHeaderImage>;
1599
1553
  static deleteAsync: (context: RequestContext, props: {
1600
1554
  id: string;
1601
1555
  }) => Promise<void>;
1602
1556
  deleteAsync(): Promise<void>;
1557
+ updateAsync(options: Partial<Pick<AppClipHeaderImageProps, 'sourceFileChecksum'>> & {
1558
+ uploaded?: boolean;
1559
+ }): Promise<AppClipHeaderImage>;
1560
+ isAwaitingUpload(): boolean;
1561
+ isComplete(): boolean;
1562
+ isFailed(): boolean;
1563
+ getErrorMessages(): string[];
1564
+ /**
1565
+ * Get a downloadable URL for the rendered image asset. Note that the
1566
+ * downloaded image is a re-rendered copy and will NOT match
1567
+ * `sourceFileChecksum`.
1568
+ */
1569
+ getImageAssetUrl({ width, height, type, }: {
1570
+ width?: number;
1571
+ height?: number;
1572
+ type?: string | 'png';
1573
+ }): string | null;
1603
1574
  }
1604
1575
  }
1605
- declare module "connect/models/AppDataUsagesPublishState" {
1576
+ declare module "connect/models/AppClipDefaultExperienceLocalization" {
1577
+ import { RequestContext } from "network/Request";
1578
+ import { AppClipHeaderImage } from "connect/models/AppClipHeaderImage";
1606
1579
  import { ConnectModel } from "connect/models/ConnectModel";
1607
- export interface AppDataUsagesPublishStateProps {
1608
- published: boolean;
1609
- /**
1610
- * @example "2021-06-26T14:31:32.201-07:00"
1611
- */
1612
- lastPublished: string;
1580
+ export interface AppClipDefaultExperienceLocalizationProps {
1613
1581
  /**
1614
- * @example "Evan Bacon"
1582
+ * @example 'en-US'
1615
1583
  */
1616
- lastPublishedBy: string;
1584
+ locale: string;
1585
+ subtitle: string | null;
1586
+ appClipHeaderImage?: AppClipHeaderImage | null;
1617
1587
  }
1618
- export class AppDataUsagesPublishState extends ConnectModel<AppDataUsagesPublishStateProps> {
1588
+ /**
1589
+ * A localized subtitle and header image for an App Clip default experience.
1590
+ *
1591
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipdefaultexperiencelocalization
1592
+ */
1593
+ export class AppClipDefaultExperienceLocalization extends ConnectModel<AppClipDefaultExperienceLocalizationProps> {
1619
1594
  static type: string;
1620
- updateAsync(options: Pick<AppDataUsagesPublishStateProps, 'published'>): Promise<AppDataUsagesPublishState>;
1621
- }
1595
+ static infoAsync: (context: RequestContext, props: {
1596
+ id: string;
1597
+ query?: import("connect/ConnectAPI").ConnectQueryParams;
1598
+ }) => Promise<AppClipDefaultExperienceLocalization>;
1599
+ static deleteAsync: (context: RequestContext, props: {
1600
+ id: string;
1601
+ }) => Promise<void>;
1602
+ static createAsync(context: RequestContext, { appClipDefaultExperienceId, attributes, }: {
1603
+ appClipDefaultExperienceId: string;
1604
+ attributes: Pick<AppClipDefaultExperienceLocalizationProps, 'locale' | 'subtitle'>;
1605
+ }): Promise<AppClipDefaultExperienceLocalization>;
1606
+ updateAsync(options: Partial<Pick<AppClipDefaultExperienceLocalizationProps, 'subtitle'>>): Promise<AppClipDefaultExperienceLocalization>;
1607
+ deleteAsync(): Promise<void>;
1608
+ /**
1609
+ * Get the header image for this localization. Returns null if none uploaded.
1610
+ */
1611
+ getAppClipHeaderImageAsync(): Promise<AppClipHeaderImage | null>;
1612
+ }
1622
1613
  }
1623
1614
  declare module "connect/ProvisioningAPI" {
1624
1615
  import { AxiosResponse } from 'axios';
@@ -2728,63 +2719,198 @@ declare module "connect/models/AppCategory" {
2728
2719
  } | undefined) => Promise<AppCategory[]>;
2729
2720
  }
2730
2721
  }
2731
- declare module "connect/AssetAPI" {
2732
- import { AxiosResponse } from 'axios';
2733
- import { ParsingOptions, RequestContext, RequestProps } from "network/Request";
2734
- import { ConnectClientAPI } from "connect/ConnectAPI";
2735
- export interface UploadOperationHeader {
2736
- name: string;
2737
- value: string;
2722
+ declare module "connect/models/AppInfoLocalization" {
2723
+ import { RequestContext } from "network/Request";
2724
+ import { ConnectModel } from "connect/models/ConnectModel";
2725
+ export interface AppInfoLocalizationProps {
2726
+ locale: string;
2727
+ name: string | null;
2728
+ subtitle: string | null;
2729
+ privacyPolicyUrl: string | null;
2730
+ privacyChoicesUrl: string | null;
2731
+ privacyPolicyText: string | null;
2738
2732
  }
2739
- export interface UploadOperation {
2740
- method: string;
2741
- url: string;
2742
- length: number;
2743
- offset: number;
2744
- requestHeaders: UploadOperationHeader[];
2733
+ /**
2734
+ * Used for updating basic metadata.
2735
+ */
2736
+ export class AppInfoLocalization extends ConnectModel<AppInfoLocalizationProps> {
2737
+ static type: string;
2738
+ /**
2739
+ *
2740
+ * @param id `AppInfo` id
2741
+ */
2742
+ static createAsync(context: RequestContext, { id, locale, }: {
2743
+ id: string;
2744
+ locale: string;
2745
+ }): Promise<AppInfoLocalization>;
2746
+ static deleteAsync: (context: RequestContext, props: {
2747
+ id: string;
2748
+ }) => Promise<void>;
2749
+ updateAsync(attributes: Partial<AppInfoLocalizationProps>): Promise<AppInfoLocalization>;
2745
2750
  }
2746
- export enum AppMediaAssetStateState {
2747
- AWAITING_UPLOAD = "AWAITING_UPLOAD",
2748
- UPLOAD_COMPLETE = "UPLOAD_COMPLETE",
2749
- COMPLETE = "COMPLETE",
2750
- FAILED = "FAILED"
2751
+ }
2752
+ declare module "connect/models/AppInfo" {
2753
+ import { RequestContext } from "network/Request";
2754
+ import { ConnectQueryParams } from "connect/ConnectAPI";
2755
+ import { AgeRatingDeclaration, KidsAgeBand } from "connect/models/AgeRatingDeclaration";
2756
+ import { AppCategory, AppCategoryId, AppSubcategoryId } from "connect/models/AppCategory";
2757
+ import { AppInfoLocalization, AppInfoLocalizationProps } from "connect/models/AppInfoLocalization";
2758
+ import { BundleIdPlatform } from "connect/models/BundleId";
2759
+ import { ConnectModel } from "connect/models/ConnectModel";
2760
+ export enum AppState {
2761
+ ACCEPTED = "ACCEPTED",
2762
+ DEVELOPER_REJECTED = "DEVELOPER_REJECTED",
2763
+ IN_REVIEW = "IN_REVIEW",
2764
+ PENDING_RELEASE = "PENDING_RELEASE",
2765
+ PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION",
2766
+ READY_FOR_DISTRIBUTION = "READY_FOR_DISTRIBUTION",
2767
+ READY_FOR_REVIEW = "READY_FOR_REVIEW",
2768
+ REJECTED = "REJECTED",
2769
+ REPLACED_WITH_NEW_INFO = "REPLACED_WITH_NEW_INFO",
2770
+ WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
2751
2771
  }
2752
- export interface AppMediaStateError {
2753
- code: string;
2754
- description: string;
2772
+ /** @deprecated 3.3 - use {@link AppState} instead. */
2773
+ export enum AppStoreState {
2774
+ READY_FOR_SALE = "READY_FOR_SALE",
2775
+ PROCESSING_FOR_APP_STORE = "PROCESSING_FOR_APP_STORE",
2776
+ PENDING_DEVELOPER_RELEASE = "PENDING_DEVELOPER_RELEASE",
2777
+ PENDING_APPLE_RELEASE = "PENDING_APPLE_RELEASE",
2778
+ IN_REVIEW = "IN_REVIEW",
2779
+ WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW",
2780
+ DEVELOPER_REJECTED = "DEVELOPER_REJECTED",
2781
+ REJECTED = "REJECTED",
2782
+ PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION",
2783
+ METADATA_REJECTED = "METADATA_REJECTED",
2784
+ INVALID_BINARY = "INVALID_BINARY"
2755
2785
  }
2756
- export interface AppMediaAssetState {
2757
- errors: AppMediaStateError[];
2758
- warnings: AppMediaStateError[];
2759
- state: AppMediaAssetStateState;
2786
+ export enum AustraliaAgeRating {
2787
+ FIFTEEN = "FIFTEEN",
2788
+ EIGHTEEN = "EIGHTEEN"
2760
2789
  }
2761
- export interface ImageAsset {
2790
+ /** @deprecated 2.2 - use {@link BrazilAgeRatingV2} instead. */
2791
+ export enum BrazilAgeRating {
2792
+ L = "L",
2793
+ TEN = "TEN",
2794
+ TWELVE = "TWELVE",
2795
+ FOURTEEN = "FOURTEEN",
2796
+ SIXTEEN = "SIXTEEN",
2797
+ EIGHTEEN = "EIGHTEEN"
2798
+ }
2799
+ export enum BrazilAgeRatingV2 {
2800
+ SELF_RATED_L = "SELF_RATED_L",
2801
+ SELF_RATED_TEN = "SELF_RATED_TEN",
2802
+ SELF_RATED_TWELVE = "SELF_RATED_TWELVE",
2803
+ SELF_RATED_FOURTEE = "SELF_RATED_FOURTEE",
2804
+ SELF_RATED_SIXTEEN = "SELF_RATED_SIXTEEN",
2805
+ SELF_RATED_EIGHTEE = "SELF_RATED_EIGHTEE",
2806
+ OFFICIAL_L = "OFFICIAL_L",
2807
+ OFFICIAL_TEN = "OFFICIAL_TEN",
2808
+ OFFICIAL_TWELVE = "OFFICIAL_TWELVE",
2809
+ OFFICIAL_FOURTEEN = "OFFICIAL_FOURTEEN",
2810
+ OFFICIAL_SIXTEEN = "OFFICIAL_SIXTEEN",
2811
+ OFFICIAL_EIGHTEEN = "OFFICIAL_EIGHTEEN"
2812
+ }
2813
+ export enum KoreaAgeRating {
2814
+ ALL = "ALL",
2815
+ TWELVE = "TWELVE",
2816
+ FIFTEEN = "FIFTEEN",
2817
+ NINETEEN = "NINETEEN",
2818
+ NOT_APPLICABLE = "NOT_APPLICABLE"
2819
+ }
2820
+ export enum AppStoreAgeRating {
2821
+ FOUR_PLUS = "FOUR_PLUS"
2822
+ }
2823
+ /**
2824
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appinfo/attributes-data.dictionary
2825
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appinfoupdaterequest/data-data.dictionary
2826
+ */
2827
+ export interface AppInfoProps {
2762
2828
  /**
2763
- * @example 'https://is3-ssl.mzstatic.com/image/thumb/Purple118/v4/0c/26/16/0c261675-72c5-7e10-3fdc-c8a20ccebd77/AppIcon-1x_U007emarketing-85-220-0-6.png/{w}x{h}bb.{f}'
2829
+ * The app’s age rating as it appears on the App Store for all platforms.
2830
+ * @since 1.2
2764
2831
  */
2765
- templateUrl: string;
2832
+ appStoreAgeRating: AppStoreAgeRating | null;
2766
2833
  /**
2767
- * @example 1024
2834
+ * The state of an app version in the App Store.
2835
+ * @since 1.2
2836
+ * @deprecated 3.3 - use {@link state} instead.
2768
2837
  */
2769
- width: number;
2838
+ appStoreState: AppStoreState;
2770
2839
  /**
2771
- * @example 1024
2840
+ * The app’s age rating as it appears on the App Store in Australia for all platforms.
2841
+ * @since 3.6.0
2772
2842
  */
2773
- height: number;
2843
+ australiaAgeRating: AustraliaAgeRating | null;
2844
+ /**
2845
+ * The app’s age rating as it appears on the App Store in Brazil for all platforms.
2846
+ * @since 1.2
2847
+ * @deprecated 2.2 - use {@link brazilAgeRatingV2} instead.
2848
+ */
2849
+ brazilAgeRating: BrazilAgeRating | null;
2850
+ /**
2851
+ * The app’s age rating as it appears on the App Store in Brazil for all platforms.
2852
+ * @since 2.2
2853
+ */
2854
+ brazilAgeRatingV2: BrazilAgeRatingV2 | null;
2855
+ /**
2856
+ * A Made for Kids app’s age band.
2857
+ * @since 1.2
2858
+ */
2859
+ kidsAgeBand: KidsAgeBand | null;
2860
+ /**
2861
+ * The app’s age rating as it appears on the App Store in South Korea for all platforms.
2862
+ * @since 3.6.0
2863
+ */
2864
+ koreaAgeRating: KoreaAgeRating | null;
2865
+ /**
2866
+ * The state of an app version in the App Store.
2867
+ * @since 3.3
2868
+ */
2869
+ state: AppState | null;
2870
+ primaryCategory?: AppCategory;
2871
+ primarySubcategoryOne?: AppCategory;
2872
+ primarySubcategoryTwo?: AppCategory;
2873
+ secondaryCategory?: AppCategory;
2874
+ secondarySubcategoryOne?: AppCategory;
2875
+ secondarySubcategoryTwo?: AppCategory;
2774
2876
  }
2775
- class AssetAPI extends ConnectClientAPI {
2776
- get hostname(): string;
2777
- requestAsync<T = any, R extends AxiosResponse<T> = AxiosResponse<T>>(context: RequestContext, request: RequestProps, options?: ParsingOptions): Promise<R>;
2778
- uploadAsync(context: RequestContext, { uploadOperations, bytes, }: {
2779
- uploadOperations: UploadOperation[];
2780
- bytes: Buffer;
2781
- }): Promise<void>;
2877
+ export interface CategoryIds {
2878
+ primaryCategory?: AppCategoryId;
2879
+ primarySubcategoryOne?: AppSubcategoryId;
2880
+ primarySubcategoryTwo?: AppSubcategoryId;
2881
+ secondaryCategory?: AppCategoryId;
2882
+ secondarySubcategoryOne?: AppSubcategoryId;
2883
+ secondarySubcategoryTwo?: AppSubcategoryId;
2884
+ }
2885
+ export class AppInfo extends ConnectModel<AppInfoProps> {
2886
+ static type: string;
2887
+ static DEFAULT_INCLUDES: string[];
2888
+ static createAsync(context: RequestContext, { id, versionString, platform, }: {
2889
+ id: string;
2890
+ versionString: string;
2891
+ platform: BundleIdPlatform;
2892
+ }): Promise<AppInfo>;
2893
+ static infoAsync: (context: RequestContext, props: {
2894
+ id: string;
2895
+ query?: ConnectQueryParams;
2896
+ }) => Promise<AppInfo>;
2897
+ static deleteAsync: (context: RequestContext, props: {
2898
+ id: string;
2899
+ }) => Promise<void>;
2900
+ updateCategoriesAsync(categories?: CategoryIds): Promise<AppInfo>;
2901
+ /**
2902
+ * Get the age rating declaration for this app info.
2903
+ * The ageRatingDeclaration relationship moved from appStoreVersions to appInfos
2904
+ * in App Store Connect API.
2905
+ */
2906
+ getAgeRatingDeclarationAsync({ query, }?: {
2907
+ query?: ConnectQueryParams;
2908
+ }): Promise<AgeRatingDeclaration | null>;
2909
+ getLocalizationsAsync({ query, }?: {
2910
+ query?: ConnectQueryParams;
2911
+ }): Promise<AppInfoLocalization[]>;
2912
+ createLocalizationAsync({ locale, }: Pick<AppInfoLocalizationProps, 'locale'>): Promise<AppInfoLocalization>;
2782
2913
  }
2783
- export const assetClient: AssetAPI;
2784
- }
2785
- declare module "utils/crypto" {
2786
- import * as crypto from 'crypto';
2787
- export function getChecksum(value: crypto.BinaryLike): string;
2788
2914
  }
2789
2915
  declare module "connect/models/AppStoreReviewAttachment" {
2790
2916
  import { RequestContext } from "network/Request";
@@ -2867,8 +2993,11 @@ declare module "connect/models/AppPreview" {
2867
2993
  sourceFileChecksum: string;
2868
2994
  /**
2869
2995
  * Time code for the preview frame (poster image).
2870
- * Format: "MM:SS:FF" where FF is frames (e.g., "00:05:00" for 5 seconds)
2871
- * @example "00:05:00"
2996
+ * Must be exactly 4-segment "HH:MM:SS:FF" format where FF is frames.
2997
+ * 3-segment ("MM:SS:FF") and 5+ segment formats are rejected with "Invalid format!".
2998
+ * Values beyond the video duration are silently accepted (clamped to last frame).
2999
+ * Empty string and null are rejected with "previewFrameTimeCode attribute is missing!".
3000
+ * @example "00:00:05:01"
2872
3001
  */
2873
3002
  previewFrameTimeCode: string | null;
2874
3003
  mimeType: string;
@@ -2877,6 +3006,15 @@ declare module "connect/models/AppPreview" {
2877
3006
  * Only available after processing is complete.
2878
3007
  */
2879
3008
  videoUrl: string | null;
3009
+ /**
3010
+ * Preview frame/poster image with processing state.
3011
+ * Contains the image asset and its processing state (e.g., COMPLETE, PROCESSING).
3012
+ * This is the detailed version returned by the API after setting a preview frame time code.
3013
+ */
3014
+ previewFrameImage: {
3015
+ image: ImageAsset;
3016
+ state: AppMediaAssetState;
3017
+ } | null;
2880
3018
  /**
2881
3019
  * Preview frame/poster image asset.
2882
3020
  * Contains templateUrl with {w}, {h}, {f} placeholders.
@@ -2884,6 +3022,12 @@ declare module "connect/models/AppPreview" {
2884
3022
  previewImage: ImageAsset | null;
2885
3023
  uploadOperations: UploadOperation[];
2886
3024
  assetDeliveryState: AppMediaAssetState;
3025
+ /**
3026
+ * Video-specific delivery state. Tracks video transcoding/processing progress
3027
+ * separately from the asset upload state.
3028
+ * Only present for video previews (not screenshots).
3029
+ */
3030
+ videoDeliveryState: AppMediaAssetState | null;
2887
3031
  }
2888
3032
  /**
2889
3033
  * App Preview (video) for App Store listings.
@@ -2908,7 +3052,7 @@ declare module "connect/models/AppPreview" {
2908
3052
  * @param id AppPreviewSet ID
2909
3053
  * @param filePath Path to the video file (MP4, MOV)
2910
3054
  * @param waitForProcessing Wait for Apple to process the video (default: true)
2911
- * @param previewFrameTimeCode Optional time code for preview frame (e.g., "00:05:00" for 5 seconds)
3055
+ * @param previewFrameTimeCode Optional time code for preview frame in "HH:MM:SS:FF" format (e.g., "00:00:05:00" for 5 seconds)
2912
3056
  */
2913
3057
  static uploadAsync(context: RequestContext, { id, filePath, waitForProcessing, previewFrameTimeCode, }: {
2914
3058
  id: string;
@@ -2923,6 +3067,11 @@ declare module "connect/models/AppPreview" {
2923
3067
  updateAsync(options: Partial<AppPreviewProps> & {
2924
3068
  uploaded?: boolean;
2925
3069
  }): Promise<AppPreview>;
3070
+ /**
3071
+ * Set the poster frame (preview image) for this app preview.
3072
+ * @param previewFrameTimeCode Time code in "HH:MM:SS:FF" format (e.g., "00:00:05:01" for ~5 seconds)
3073
+ */
3074
+ setPreviewFrameAsync(previewFrameTimeCode: string): Promise<AppPreview>;
2926
3075
  isAwaitingUpload(): boolean;
2927
3076
  isProcessing(): boolean;
2928
3077
  isComplete(): boolean;
@@ -3692,6 +3841,10 @@ declare module "connect/models/ResolutionCenterMessage" {
3692
3841
  fromActor: unknown;
3693
3842
  }
3694
3843
  export type ResolutionCenterMessageQueryFilter = ConnectQueryFilter<ResolutionCenterMessageProps, 'rejections'>;
3844
+ /**
3845
+ * Resolution center messages require session auth (Iris API).
3846
+ * These endpoints are NOT available with API key (JWT) authentication.
3847
+ */
3695
3848
  export class ResolutionCenterMessage extends ConnectModel<ResolutionCenterMessageProps> {
3696
3849
  static type: string;
3697
3850
  static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
@@ -3703,23 +3856,85 @@ declare module "connect/models/ResolutionCenterMessage" {
3703
3856
  } | undefined) => Promise<ResolutionCenterMessage[]>;
3704
3857
  }
3705
3858
  }
3706
- declare module "connect/models/ReviewRejection" {
3707
- import { ConnectQueryFilter } from "connect/ConnectAPI";
3859
+ declare module "connect/models/ResolutionCenterDraftMessage" {
3860
+ import { RequestContext } from "network/Request";
3708
3861
  import { ConnectModel } from "connect/models/ConnectModel";
3709
- interface ReviewRejectionProps {
3710
- /** '2.1' */
3711
- reasonSection: string;
3712
- /** 'Performance: App Completeness' */
3713
- reasonDescription: string;
3714
- /** '2.1.0' */
3715
- reasonCode: string;
3862
+ import { ResolutionCenterMessage } from "connect/models/ResolutionCenterMessage";
3863
+ interface ResolutionCenterDraftMessageProps {
3864
+ messageBody: string;
3865
+ /** @example '2026-04-13T20:26:31.914Z' */
3866
+ createdDate: string;
3867
+ /** @example '2026-04-13T20:26:31.883Z' */
3868
+ lastUpdatedDate: string;
3716
3869
  }
3717
- export type ReviewRejectionQueryFilter = ConnectQueryFilter<ReviewRejectionProps & {
3718
- 'resolutionCenterMessage.resolutionCenterThread': string;
3719
- }, 'resolutionCenterMessage.resolutionCenterThread'>;
3720
- export class ReviewRejection extends ConnectModel<ReviewRejectionProps> {
3721
- static type: string;
3722
- static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
3870
+ /**
3871
+ * Draft messages in the resolution center. Used as an intermediate step
3872
+ * before sending a reply to App Review.
3873
+ *
3874
+ * Requires session auth (Iris API). NOT available with API key (JWT) authentication.
3875
+ *
3876
+ * Flow: createAsync (draft) → sendAsync (publish draft as message)
3877
+ */
3878
+ export class ResolutionCenterDraftMessage extends ConnectModel<ResolutionCenterDraftMessageProps> {
3879
+ static type: string;
3880
+ /**
3881
+ * Create a draft message on a resolution center thread.
3882
+ *
3883
+ * POST /iris/v1/resolutionCenterDraftMessages
3884
+ */
3885
+ static createAsync(context: RequestContext, { threadId, messageBody, }: {
3886
+ threadId: string;
3887
+ messageBody: string;
3888
+ }): Promise<ResolutionCenterDraftMessage>;
3889
+ static deleteAsync: (context: RequestContext, props: {
3890
+ id: string;
3891
+ }) => Promise<void>;
3892
+ /**
3893
+ * Update the draft message body.
3894
+ *
3895
+ * PATCH /iris/v1/resolutionCenterDraftMessages/{id}
3896
+ */
3897
+ updateAsync({ messageBody, }: {
3898
+ messageBody: string;
3899
+ }): Promise<ResolutionCenterDraftMessage>;
3900
+ /**
3901
+ * Delete this draft message.
3902
+ *
3903
+ * DELETE /iris/v1/resolutionCenterDraftMessages/{id}
3904
+ */
3905
+ deleteAsync(): Promise<void>;
3906
+ /**
3907
+ * Send this draft message, publishing it as a resolution center message.
3908
+ *
3909
+ * POST /iris/v1/resolutionCenterMessages
3910
+ */
3911
+ sendAsync(): Promise<ResolutionCenterMessage>;
3912
+ }
3913
+ }
3914
+ declare module "connect/models/ReviewRejection" {
3915
+ import { ConnectQueryFilter } from "connect/ConnectAPI";
3916
+ import { ConnectModel } from "connect/models/ConnectModel";
3917
+ export interface ReviewRejectionReason {
3918
+ /** @example '2.5' */
3919
+ reasonSection: string;
3920
+ /** @example 'Performance: Software Requirements' */
3921
+ reasonDescription: string;
3922
+ /** @example '2.5.4' */
3923
+ reasonCode: string;
3924
+ }
3925
+ interface ReviewRejectionProps {
3926
+ reasons: ReviewRejectionReason[];
3927
+ }
3928
+ export type ReviewRejectionQueryFilter = ConnectQueryFilter<ReviewRejectionProps & {
3929
+ 'resolutionCenterMessage.resolutionCenterThread': string;
3930
+ }, 'resolutionCenterMessage.resolutionCenterThread'>;
3931
+ /**
3932
+ * Review rejections require session auth (Iris API).
3933
+ * These endpoints are NOT available with API key (JWT) authentication.
3934
+ */
3935
+ export class ReviewRejection extends ConnectModel<ReviewRejectionProps> {
3936
+ static type: string;
3937
+ static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
3723
3938
  query?: import("connect/ConnectAPI").ConnectQueryParams<Partial<{
3724
3939
  'resolutionCenterMessage.resolutionCenterThread': string | string[];
3725
3940
  } & {
@@ -3733,6 +3948,7 @@ declare module "connect/models/ResolutionCenterThread" {
3733
3948
  import type { AppStoreVersion } from "connect/models/AppStoreVersion";
3734
3949
  import type { Build } from "connect/models/Build";
3735
3950
  import { ConnectModel } from "connect/models/ConnectModel";
3951
+ import { ResolutionCenterDraftMessage } from "connect/models/ResolutionCenterDraftMessage";
3736
3952
  import { ResolutionCenterMessage } from "connect/models/ResolutionCenterMessage";
3737
3953
  import { ReviewRejection } from "connect/models/ReviewRejection";
3738
3954
  export interface ResolutionCenterThreadProps {
@@ -3753,6 +3969,10 @@ declare module "connect/models/ResolutionCenterThread" {
3753
3969
  build: string;
3754
3970
  reviewSubmission: string;
3755
3971
  }, 'build' | 'appStoreVersion' | 'threadType' | 'reviewSubmission'>;
3972
+ /**
3973
+ * Resolution center threads require session auth (Iris API).
3974
+ * These endpoints are NOT available with API key (JWT) authentication.
3975
+ */
3756
3976
  export class ResolutionCenterThread extends ConnectModel<ResolutionCenterThreadProps> {
3757
3977
  static type: string;
3758
3978
  static DEFAULT_INCLUDES: string[];
@@ -3769,7 +3989,28 @@ declare module "connect/models/ResolutionCenterThread" {
3769
3989
  getResolutionCenterMessagesAsync({ query, }?: {
3770
3990
  query?: ConnectQueryParams;
3771
3991
  }): Promise<ResolutionCenterMessage[]>;
3992
+ /**
3993
+ * Get the current draft message for this thread, if any.
3994
+ *
3995
+ * GET /iris/v1/resolutionCenterThreads/{id}/resolutionCenterDraftMessage
3996
+ * Note: singular endpoint (not plural), returns a single object not an array.
3997
+ */
3998
+ getDraftMessageAsync(): Promise<ResolutionCenterDraftMessage | null>;
3772
3999
  fetchRejectionReasonsAsync(): Promise<ReviewRejection[]>;
4000
+ /**
4001
+ * Create a draft message on this thread.
4002
+ * Use `draft.sendAsync()` to publish it.
4003
+ */
4004
+ createDraftMessageAsync({ messageBody, }: {
4005
+ messageBody: string;
4006
+ }): Promise<ResolutionCenterDraftMessage>;
4007
+ /**
4008
+ * Send a reply to this resolution center thread.
4009
+ * Creates a draft and immediately publishes it.
4010
+ */
4011
+ sendReplyAsync({ messageBody }: {
4012
+ messageBody: string;
4013
+ }): Promise<ResolutionCenterMessage>;
3773
4014
  }
3774
4015
  }
3775
4016
  declare module "connect/models/Build" {
@@ -4097,197 +4338,290 @@ declare module "connect/models/AppStoreVersion" {
4097
4338
  rejectAsync(): Promise<boolean>;
4098
4339
  }
4099
4340
  }
4100
- declare module "connect/models/AppInfoLocalization" {
4341
+ declare module "connect/models/AppClipDefaultExperience" {
4101
4342
  import { RequestContext } from "network/Request";
4343
+ import { ConnectQueryParams } from "connect/ConnectAPI";
4344
+ import { AppClipAppStoreReviewDetail } from "connect/models/AppClipAppStoreReviewDetail";
4345
+ import { AppClipDefaultExperienceLocalization } from "connect/models/AppClipDefaultExperienceLocalization";
4346
+ import { AppStoreVersion } from "connect/models/AppStoreVersion";
4102
4347
  import { ConnectModel } from "connect/models/ConnectModel";
4103
- export interface AppInfoLocalizationProps {
4104
- locale: string;
4105
- name: string | null;
4106
- subtitle: string | null;
4107
- privacyPolicyUrl: string | null;
4108
- privacyChoicesUrl: string | null;
4109
- privacyPolicyText: string | null;
4348
+ export enum AppClipAction {
4349
+ OPEN = "OPEN",
4350
+ VIEW = "VIEW",
4351
+ PLAY = "PLAY"
4352
+ }
4353
+ export interface AppClipDefaultExperienceProps {
4354
+ action: AppClipAction | null;
4355
+ appClipDefaultExperienceLocalizations?: AppClipDefaultExperienceLocalization[];
4356
+ appClipAppStoreReviewDetail?: AppClipAppStoreReviewDetail | null;
4357
+ releaseWithAppStoreVersion?: AppStoreVersion | null;
4110
4358
  }
4111
4359
  /**
4112
- * Used for updating basic metadata.
4360
+ * The default experience for an App Clip.
4361
+ *
4362
+ * One default experience exists per App Clip, optionally linked to a specific
4363
+ * App Store version via `releaseWithAppStoreVersion`. The default experience
4364
+ * holds per-locale subtitles + header images and the App Store review detail
4365
+ * (invocation URLs).
4366
+ *
4367
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appclipdefaultexperience
4113
4368
  */
4114
- export class AppInfoLocalization extends ConnectModel<AppInfoLocalizationProps> {
4369
+ export class AppClipDefaultExperience extends ConnectModel<AppClipDefaultExperienceProps> {
4370
+ static type: string;
4371
+ static infoAsync: (context: RequestContext, props: {
4372
+ id: string;
4373
+ query?: ConnectQueryParams;
4374
+ }) => Promise<AppClipDefaultExperience>;
4375
+ static deleteAsync: (context: RequestContext, props: {
4376
+ id: string;
4377
+ }) => Promise<void>;
4378
+ static createAsync(context: RequestContext, { appClipId, releaseWithAppStoreVersionId, appClipDefaultExperienceTemplateId, attributes, }: {
4379
+ appClipId: string;
4380
+ releaseWithAppStoreVersionId?: string;
4381
+ /**
4382
+ * Optional id of an existing default experience to copy. Apple uses
4383
+ * this to clone localizations + review detail from a previous version's
4384
+ * default experience into the new one.
4385
+ */
4386
+ appClipDefaultExperienceTemplateId?: string;
4387
+ attributes?: Partial<Pick<AppClipDefaultExperienceProps, 'action'>>;
4388
+ }): Promise<AppClipDefaultExperience>;
4389
+ updateAsync(options: Partial<Pick<AppClipDefaultExperienceProps, 'action'>> & {
4390
+ releaseWithAppStoreVersionId?: string | null;
4391
+ }): Promise<AppClipDefaultExperience>;
4392
+ deleteAsync(): Promise<void>;
4393
+ /**
4394
+ * Get the localizations (locale + subtitle + optional header image) for this default experience.
4395
+ */
4396
+ getAppClipDefaultExperienceLocalizationsAsync({ query, }?: {
4397
+ query?: ConnectQueryParams;
4398
+ }): Promise<AppClipDefaultExperienceLocalization[]>;
4399
+ /**
4400
+ * Get the App Store review detail (invocation URLs) for this default experience.
4401
+ * Returns null if none has been created yet.
4402
+ */
4403
+ getAppClipAppStoreReviewDetailAsync(): Promise<AppClipAppStoreReviewDetail | null>;
4404
+ createAppClipDefaultExperienceLocalizationAsync(attributes: Pick<AppClipDefaultExperienceLocalization['attributes'], 'locale' | 'subtitle'>): Promise<AppClipDefaultExperienceLocalization>;
4405
+ }
4406
+ }
4407
+ declare module "connect/models/AppClip" {
4408
+ import { ConnectQueryParams } from "connect/ConnectAPI";
4409
+ import { AppClipDefaultExperience } from "connect/models/AppClipDefaultExperience";
4410
+ import { ConnectModel } from "connect/models/ConnectModel";
4411
+ export interface AppClipProps {
4412
+ /**
4413
+ * The bundle identifier of the App Clip.
4414
+ * @example 'com.bacon.app.Clip'
4415
+ */
4416
+ bundleId: string;
4417
+ }
4418
+ /**
4419
+ * An App Clip associated with an app in App Store Connect.
4420
+ *
4421
+ * App Clips are lightweight versions of apps that let users perform quick tasks
4422
+ * without downloading the full app.
4423
+ */
4424
+ export class AppClip extends ConnectModel<AppClipProps> {
4115
4425
  static type: string;
4116
4426
  /**
4427
+ * Get a single App Clip by ID.
4117
4428
  *
4118
- * @param id `AppInfo` id
4429
+ * @param id App Clip ID
4119
4430
  */
4120
- static createAsync(context: RequestContext, { id, locale, }: {
4431
+ static infoAsync: (context: import("AppStoreConnect").RequestContext, props: {
4121
4432
  id: string;
4122
- locale: string;
4123
- }): Promise<AppInfoLocalization>;
4124
- static deleteAsync: (context: RequestContext, props: {
4433
+ query?: ConnectQueryParams;
4434
+ }) => Promise<AppClip>;
4435
+ /**
4436
+ * Get the default experiences associated with this App Clip.
4437
+ *
4438
+ * Eagerly includes localizations and the App Store review detail so callers
4439
+ * can avoid follow-up requests.
4440
+ *
4441
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-appclips-_id_-appclipdefaultexperiences
4442
+ */
4443
+ getAppClipDefaultExperiencesAsync({ query, }?: {
4444
+ query?: ConnectQueryParams;
4445
+ }): Promise<AppClipDefaultExperience[]>;
4446
+ }
4447
+ }
4448
+ declare module "connect/models/AppDataUsageGrouping" {
4449
+ import { ConnectModel } from "connect/models/ConnectModel";
4450
+ export interface AppDataUsageGroupingProps {
4451
+ deleted: boolean;
4452
+ }
4453
+ export class AppDataUsageGrouping extends ConnectModel<AppDataUsageGroupingProps> {
4454
+ static type: string;
4455
+ static deleteAsync: (context: import("AppStoreConnect").RequestContext, props: {
4125
4456
  id: string;
4126
4457
  }) => Promise<void>;
4127
- updateAsync(attributes: Partial<AppInfoLocalizationProps>): Promise<AppInfoLocalization>;
4458
+ deleteAsync(): Promise<void>;
4128
4459
  }
4129
4460
  }
4130
- declare module "connect/models/AppInfo" {
4131
- import { RequestContext } from "network/Request";
4132
- import { ConnectQueryParams } from "connect/ConnectAPI";
4133
- import { AgeRatingDeclaration, KidsAgeBand } from "connect/models/AgeRatingDeclaration";
4134
- import { AppCategory, AppCategoryId, AppSubcategoryId } from "connect/models/AppCategory";
4135
- import { AppInfoLocalization, AppInfoLocalizationProps } from "connect/models/AppInfoLocalization";
4136
- import { BundleIdPlatform } from "connect/models/BundleId";
4461
+ declare module "connect/models/AppDataUsageCategory" {
4462
+ import { AppDataUsageGrouping } from "connect/models/AppDataUsageGrouping";
4137
4463
  import { ConnectModel } from "connect/models/ConnectModel";
4138
- export enum AppState {
4139
- ACCEPTED = "ACCEPTED",
4140
- DEVELOPER_REJECTED = "DEVELOPER_REJECTED",
4141
- IN_REVIEW = "IN_REVIEW",
4142
- PENDING_RELEASE = "PENDING_RELEASE",
4143
- PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION",
4144
- READY_FOR_DISTRIBUTION = "READY_FOR_DISTRIBUTION",
4145
- READY_FOR_REVIEW = "READY_FOR_REVIEW",
4146
- REJECTED = "REJECTED",
4147
- REPLACED_WITH_NEW_INFO = "REPLACED_WITH_NEW_INFO",
4148
- WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
4464
+ export interface AppDataUsageCategoryProps {
4465
+ deleted: boolean;
4466
+ grouping: AppDataUsageGrouping;
4149
4467
  }
4150
- /** @deprecated 3.3 - use {@link AppState} instead. */
4151
- export enum AppStoreState {
4152
- READY_FOR_SALE = "READY_FOR_SALE",
4153
- PROCESSING_FOR_APP_STORE = "PROCESSING_FOR_APP_STORE",
4154
- PENDING_DEVELOPER_RELEASE = "PENDING_DEVELOPER_RELEASE",
4155
- PENDING_APPLE_RELEASE = "PENDING_APPLE_RELEASE",
4156
- IN_REVIEW = "IN_REVIEW",
4157
- WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW",
4158
- DEVELOPER_REJECTED = "DEVELOPER_REJECTED",
4159
- REJECTED = "REJECTED",
4160
- PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION",
4161
- METADATA_REJECTED = "METADATA_REJECTED",
4162
- INVALID_BINARY = "INVALID_BINARY"
4468
+ /**
4469
+ * @see https://appstoreconnect.apple.com/iris/v1/appDataUsageCategories
4470
+ * @example `apple-utils app-data-usage-category:get`
4471
+ */
4472
+ export enum AppDataUsageCategoryId {
4473
+ ADVERTISING_DATA = "ADVERTISING_DATA",
4474
+ AUDIO = "AUDIO",
4475
+ BROWSING_HISTORY = "BROWSING_HISTORY",
4476
+ COARSE_LOCATION = "COARSE_LOCATION",
4477
+ CONTACTS = "CONTACTS",
4478
+ CRASH_DATA = "CRASH_DATA",
4479
+ CREDIT_AND_FRAUD = "CREDIT_AND_FRAUD",
4480
+ CUSTOMER_SUPPORT = "CUSTOMER_SUPPORT",
4481
+ DEVICE_ID = "DEVICE_ID",
4482
+ EMAIL_ADDRESS = "EMAIL_ADDRESS",
4483
+ EMAILS_OR_TEXT_MESSAGES = "EMAILS_OR_TEXT_MESSAGES",
4484
+ ENVIRONMENTAL_SCANNING = "ENVIRONMENTAL_SCANNING",
4485
+ FITNESS = "FITNESS",
4486
+ GAMEPLAY_CONTENT = "GAMEPLAY_CONTENT",
4487
+ HANDS = "HANDS",
4488
+ HEAD_MOVEMENT = "HEAD_MOVEMENT",
4489
+ HEALTH = "HEALTH",
4490
+ NAME = "NAME",
4491
+ OTHER_CONTACT_INFO = "OTHER_CONTACT_INFO",
4492
+ OTHER_DATA = "OTHER_DATA",
4493
+ OTHER_DIAGNOSTIC_DATA = "OTHER_DIAGNOSTIC_DATA",
4494
+ OTHER_FINANCIAL_INFO = "OTHER_FINANCIAL_INFO",
4495
+ OTHER_USAGE_DATA = "OTHER_USAGE_DATA",
4496
+ OTHER_USER_CONTENT = "OTHER_USER_CONTENT",
4497
+ PAYMENT_INFORMATION = "PAYMENT_INFORMATION",
4498
+ PERFORMANCE_DATA = "PERFORMANCE_DATA",
4499
+ PHONE_NUMBER = "PHONE_NUMBER",
4500
+ PHOTOS_OR_VIDEOS = "PHOTOS_OR_VIDEOS",
4501
+ PHYSICAL_ADDRESS = "PHYSICAL_ADDRESS",
4502
+ PRECISE_LOCATION = "PRECISE_LOCATION",
4503
+ PRODUCT_INTERACTION = "PRODUCT_INTERACTION",
4504
+ PURCHASE_HISTORY = "PURCHASE_HISTORY",
4505
+ SEARCH_HISTORY = "SEARCH_HISTORY",
4506
+ SENSITIVE_INFO = "SENSITIVE_INFO",
4507
+ USER_ID = "USER_ID"
4163
4508
  }
4164
- export enum AustraliaAgeRating {
4165
- FIFTEEN = "FIFTEEN",
4166
- EIGHTEEN = "EIGHTEEN"
4509
+ export class AppDataUsageCategory extends ConnectModel<AppDataUsageCategoryProps> {
4510
+ static type: string;
4511
+ static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
4512
+ query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
4513
+ } | undefined) => Promise<AppDataUsageCategory[]>;
4514
+ static deleteAsync: (context: import("AppStoreConnect").RequestContext, props: {
4515
+ id: string;
4516
+ }) => Promise<void>;
4517
+ deleteAsync(): Promise<void>;
4167
4518
  }
4168
- /** @deprecated 2.2 - use {@link BrazilAgeRatingV2} instead. */
4169
- export enum BrazilAgeRating {
4170
- L = "L",
4171
- TEN = "TEN",
4172
- TWELVE = "TWELVE",
4173
- FOURTEEN = "FOURTEEN",
4174
- SIXTEEN = "SIXTEEN",
4175
- EIGHTEEN = "EIGHTEEN"
4519
+ }
4520
+ declare module "connect/models/AppDataUsageDataProtection" {
4521
+ import { ConnectModel } from "connect/models/ConnectModel";
4522
+ export interface AppDataUsageDataProtectionProps {
4523
+ deleted: boolean;
4176
4524
  }
4177
- export enum BrazilAgeRatingV2 {
4178
- SELF_RATED_L = "SELF_RATED_L",
4179
- SELF_RATED_TEN = "SELF_RATED_TEN",
4180
- SELF_RATED_TWELVE = "SELF_RATED_TWELVE",
4181
- SELF_RATED_FOURTEE = "SELF_RATED_FOURTEE",
4182
- SELF_RATED_SIXTEEN = "SELF_RATED_SIXTEEN",
4183
- SELF_RATED_EIGHTEE = "SELF_RATED_EIGHTEE",
4184
- OFFICIAL_L = "OFFICIAL_L",
4185
- OFFICIAL_TEN = "OFFICIAL_TEN",
4186
- OFFICIAL_TWELVE = "OFFICIAL_TWELVE",
4187
- OFFICIAL_FOURTEEN = "OFFICIAL_FOURTEEN",
4188
- OFFICIAL_SIXTEEN = "OFFICIAL_SIXTEEN",
4189
- OFFICIAL_EIGHTEEN = "OFFICIAL_EIGHTEEN"
4525
+ /**
4526
+ * @see https://appstoreconnect.apple.com/iris/v1/appDataUsageDataProtections
4527
+ * @example `apple-utils app-data-usage-protection:get`
4528
+ */
4529
+ export enum AppDataUsageDataProtectionId {
4530
+ DATA_USED_TO_TRACK_YOU = "DATA_USED_TO_TRACK_YOU",
4531
+ DATA_LINKED_TO_YOU = "DATA_LINKED_TO_YOU",
4532
+ DATA_NOT_LINKED_TO_YOU = "DATA_NOT_LINKED_TO_YOU",
4533
+ DATA_NOT_COLLECTED = "DATA_NOT_COLLECTED"
4190
4534
  }
4191
- export enum KoreaAgeRating {
4192
- ALL = "ALL",
4193
- TWELVE = "TWELVE",
4194
- FIFTEEN = "FIFTEEN",
4195
- NINETEEN = "NINETEEN",
4196
- NOT_APPLICABLE = "NOT_APPLICABLE"
4535
+ export class AppDataUsageDataProtection extends ConnectModel<AppDataUsageDataProtectionProps> {
4536
+ static type: string;
4537
+ static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
4538
+ query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
4539
+ } | undefined) => Promise<AppDataUsageDataProtection[]>;
4540
+ static deleteAsync: (context: import("AppStoreConnect").RequestContext, props: {
4541
+ id: string;
4542
+ }) => Promise<void>;
4543
+ deleteAsync(): Promise<void>;
4197
4544
  }
4198
- export enum AppStoreAgeRating {
4199
- FOUR_PLUS = "FOUR_PLUS"
4545
+ }
4546
+ declare module "connect/models/AppDataUsagePurpose" {
4547
+ import { ConnectModel } from "connect/models/ConnectModel";
4548
+ export interface AppDataUsagePurposeProps {
4549
+ deleted: boolean;
4200
4550
  }
4201
4551
  /**
4202
- * @see https://developer.apple.com/documentation/appstoreconnectapi/appinfo/attributes-data.dictionary
4203
- * @see https://developer.apple.com/documentation/appstoreconnectapi/appinfoupdaterequest/data-data.dictionary
4552
+ * @see https://appstoreconnect.apple.com/iris/v1/appDataUsagePurposes
4553
+ * @example `apple-utils app-data-usage-purpose:get`
4204
4554
  */
4205
- export interface AppInfoProps {
4206
- /**
4207
- * The app’s age rating as it appears on the App Store for all platforms.
4208
- * @since 1.2
4209
- */
4210
- appStoreAgeRating: AppStoreAgeRating | null;
4211
- /**
4212
- * The state of an app version in the App Store.
4213
- * @since 1.2
4214
- * @deprecated 3.3 - use {@link state} instead.
4215
- */
4216
- appStoreState: AppStoreState;
4217
- /**
4218
- * The app’s age rating as it appears on the App Store in Australia for all platforms.
4219
- * @since 3.6.0
4220
- */
4221
- australiaAgeRating: AustraliaAgeRating | null;
4222
- /**
4223
- * The app’s age rating as it appears on the App Store in Brazil for all platforms.
4224
- * @since 1.2
4225
- * @deprecated 2.2 - use {@link brazilAgeRatingV2} instead.
4226
- */
4227
- brazilAgeRating: BrazilAgeRating | null;
4228
- /**
4229
- * The app’s age rating as it appears on the App Store in Brazil for all platforms.
4230
- * @since 2.2
4231
- */
4232
- brazilAgeRatingV2: BrazilAgeRatingV2 | null;
4233
- /**
4234
- * A Made for Kids app’s age band.
4235
- * @since 1.2
4236
- */
4237
- kidsAgeBand: KidsAgeBand | null;
4238
- /**
4239
- * The app’s age rating as it appears on the App Store in South Korea for all platforms.
4240
- * @since 3.6.0
4241
- */
4242
- koreaAgeRating: KoreaAgeRating | null;
4243
- /**
4244
- * The state of an app version in the App Store.
4245
- * @since 3.3
4246
- */
4247
- state: AppState | null;
4248
- primaryCategory?: AppCategory;
4249
- primarySubcategoryOne?: AppCategory;
4250
- primarySubcategoryTwo?: AppCategory;
4251
- secondaryCategory?: AppCategory;
4252
- secondarySubcategoryOne?: AppCategory;
4253
- secondarySubcategoryTwo?: AppCategory;
4555
+ export enum AppDataUsagePurposeId {
4556
+ THIRD_PARTY_ADVERTISING = "THIRD_PARTY_ADVERTISING",
4557
+ DEVELOPERS_ADVERTISING = "DEVELOPERS_ADVERTISING",
4558
+ ANALYTICS = "ANALYTICS",
4559
+ PRODUCT_PERSONALIZATION = "PRODUCT_PERSONALIZATION",
4560
+ APP_FUNCTIONALITY = "APP_FUNCTIONALITY",
4561
+ OTHER_PURPOSES = "OTHER_PURPOSES"
4562
+ }
4563
+ export class AppDataUsagePurpose extends ConnectModel<AppDataUsagePurposeProps> {
4564
+ static type: string;
4565
+ static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
4566
+ query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
4567
+ } | undefined) => Promise<AppDataUsagePurpose[]>;
4568
+ static deleteAsync: (context: import("AppStoreConnect").RequestContext, props: {
4569
+ id: string;
4570
+ }) => Promise<void>;
4571
+ deleteAsync(): Promise<void>;
4254
4572
  }
4255
- export interface CategoryIds {
4256
- primaryCategory?: AppCategoryId;
4257
- primarySubcategoryOne?: AppSubcategoryId;
4258
- primarySubcategoryTwo?: AppSubcategoryId;
4259
- secondaryCategory?: AppCategoryId;
4260
- secondarySubcategoryOne?: AppSubcategoryId;
4261
- secondarySubcategoryTwo?: AppSubcategoryId;
4573
+ }
4574
+ declare module "connect/models/AppDataUsage" {
4575
+ import { RequestContext } from "network/Request";
4576
+ import { AppDataUsageCategory } from "connect/models/AppDataUsageCategory";
4577
+ import { AppDataUsageDataProtection } from "connect/models/AppDataUsageDataProtection";
4578
+ import { AppDataUsageGrouping } from "connect/models/AppDataUsageGrouping";
4579
+ import { AppDataUsagePurpose } from "connect/models/AppDataUsagePurpose";
4580
+ import { ConnectModel } from "connect/models/ConnectModel";
4581
+ export interface AppDataUsageProps {
4582
+ category?: AppDataUsageCategory;
4583
+ grouping?: AppDataUsageGrouping;
4584
+ purpose?: AppDataUsagePurpose;
4585
+ dataProtection?: AppDataUsageDataProtection;
4262
4586
  }
4263
- export class AppInfo extends ConnectModel<AppInfoProps> {
4587
+ export class AppDataUsage extends ConnectModel<AppDataUsageProps> {
4264
4588
  static type: string;
4265
4589
  static DEFAULT_INCLUDES: string[];
4266
- static createAsync(context: RequestContext, { id, versionString, platform, }: {
4267
- id: string;
4268
- versionString: string;
4269
- platform: BundleIdPlatform;
4270
- }): Promise<AppInfo>;
4271
- static infoAsync: (context: RequestContext, props: {
4590
+ /**
4591
+ *
4592
+ * @param id `App` id
4593
+ * @param appDataUsageCategory `AppDataUsageCategory` id (`AppDataUsageCategoryId`)
4594
+ * @param appDataUsageProtection `AppDataUsageProtection` id (`AppDataUsageProtectionId`)
4595
+ * @param appDataUsagePurpose `AppDataUsagePurpose` id (`AppDataUsagePurposeId`)
4596
+ */
4597
+ static createAsync(context: RequestContext, { id, appDataUsageCategory, appDataUsageProtection, appDataUsagePurpose, }: {
4272
4598
  id: string;
4273
- query?: ConnectQueryParams;
4274
- }) => Promise<AppInfo>;
4599
+ appDataUsageCategory?: string;
4600
+ appDataUsageProtection?: string;
4601
+ appDataUsagePurpose?: string;
4602
+ }): Promise<AppDataUsage>;
4275
4603
  static deleteAsync: (context: RequestContext, props: {
4276
4604
  id: string;
4277
4605
  }) => Promise<void>;
4278
- updateCategoriesAsync(categories?: CategoryIds): Promise<AppInfo>;
4606
+ deleteAsync(): Promise<void>;
4607
+ }
4608
+ }
4609
+ declare module "connect/models/AppDataUsagesPublishState" {
4610
+ import { ConnectModel } from "connect/models/ConnectModel";
4611
+ export interface AppDataUsagesPublishStateProps {
4612
+ published: boolean;
4279
4613
  /**
4280
- * Get the age rating declaration for this app info.
4281
- * The ageRatingDeclaration relationship moved from appStoreVersions to appInfos
4282
- * in App Store Connect API.
4614
+ * @example "2021-06-26T14:31:32.201-07:00"
4283
4615
  */
4284
- getAgeRatingDeclarationAsync({ query, }?: {
4285
- query?: ConnectQueryParams;
4286
- }): Promise<AgeRatingDeclaration | null>;
4287
- getLocalizationsAsync({ query, }?: {
4288
- query?: ConnectQueryParams;
4289
- }): Promise<AppInfoLocalization[]>;
4290
- createLocalizationAsync({ locale, }: Pick<AppInfoLocalizationProps, 'locale'>): Promise<AppInfoLocalization>;
4616
+ lastPublished: string;
4617
+ /**
4618
+ * @example "Evan Bacon"
4619
+ */
4620
+ lastPublishedBy: string;
4621
+ }
4622
+ export class AppDataUsagesPublishState extends ConnectModel<AppDataUsagesPublishStateProps> {
4623
+ static type: string;
4624
+ updateAsync(options: Pick<AppDataUsagesPublishStateProps, 'published'>): Promise<AppDataUsagesPublishState>;
4291
4625
  }
4292
4626
  }
4293
4627
  declare module "connect/models/AppPriceTier" {
@@ -4296,12 +4630,119 @@ declare module "connect/models/AppPriceTier" {
4296
4630
  static type: string;
4297
4631
  }
4298
4632
  }
4633
+ declare module "connect/models/Territory" {
4634
+ import { ConnectModel } from "connect/models/ConnectModel";
4635
+ export interface TerritoryProps {
4636
+ /**
4637
+ * @example 'USD'
4638
+ */
4639
+ currency: string;
4640
+ }
4641
+ export class Territory extends ConnectModel<TerritoryProps> {
4642
+ static type: string;
4643
+ static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
4644
+ query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
4645
+ } | undefined) => Promise<Territory[]>;
4646
+ }
4647
+ }
4648
+ declare module "connect/models/AppPricePoint" {
4649
+ import { RequestContext } from "network/Request";
4650
+ import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
4651
+ import { AppPriceTier } from "connect/models/AppPriceTier";
4652
+ import { ConnectModel } from "connect/models/ConnectModel";
4653
+ import { Territory } from "connect/models/Territory";
4654
+ export interface AppPricePointProps {
4655
+ customerPrice: string;
4656
+ proceeds: string;
4657
+ /** @deprecated Only populated via the legacy iris endpoint. */
4658
+ priceTier?: AppPriceTier;
4659
+ territory?: Territory;
4660
+ }
4661
+ export type AppPricePointQueryFilter = ConnectQueryFilter<{
4662
+ territory: string;
4663
+ priceTier: string;
4664
+ app: string;
4665
+ }, 'territory' | 'priceTier' | 'app'>;
4666
+ export class AppPricePoint extends ConnectModel<AppPricePointProps> {
4667
+ static type: string;
4668
+ /**
4669
+ * Legacy list endpoint (iris). Kept for backwards compatibility; new callers
4670
+ * should use the app-scoped {@link AppPricePoint.getForAppAsync} helper which
4671
+ * uses the public App Store Connect API.
4672
+ */
4673
+ static getAsync: (context: RequestContext, props?: {
4674
+ query?: ConnectQueryParams<Partial<{
4675
+ app: string | string[];
4676
+ territory: string | string[];
4677
+ priceTier: string | string[];
4678
+ } & {
4679
+ id?: string;
4680
+ }>> | undefined;
4681
+ } | undefined) => Promise<AppPricePoint[]>;
4682
+ /**
4683
+ * Look up a single price point by id (ex: `UNHB5PT4MA`).
4684
+ *
4685
+ * Uses the legacy iris endpoint for compatibility with existing callers.
4686
+ * The modern equivalent is `GET /v3/appPricePoints/{id}`.
4687
+ */
4688
+ static infoAsync: (context: RequestContext, props: {
4689
+ id: string;
4690
+ query?: ConnectQueryParams;
4691
+ }) => Promise<AppPricePoint>;
4692
+ /**
4693
+ * Fetch the valid price points for a given app, optionally filtered by
4694
+ * territory. This is the replacement for the deprecated global
4695
+ * `appPriceTiers` lookup and is used when constructing an
4696
+ * {@link AppPriceSchedule}. Price point ids are app-specific.
4697
+ *
4698
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppricepoints
4699
+ */
4700
+ static getForAppAsync(context: RequestContext, { id, query, }: {
4701
+ /** App id (e.g. `1234567890`). */
4702
+ id: string;
4703
+ query?: ConnectQueryParams<AppPricePointQueryFilter>;
4704
+ }): Promise<AppPricePoint[]>;
4705
+ }
4706
+ }
4299
4707
  declare module "connect/models/AppPrice" {
4708
+ import { AppPricePoint } from "connect/models/AppPricePoint";
4300
4709
  import { AppPriceTier } from "connect/models/AppPriceTier";
4301
4710
  import { ConnectModel } from "connect/models/ConnectModel";
4711
+ import { Territory } from "connect/models/Territory";
4302
4712
  export interface AppPriceProps {
4303
- startDate: string;
4304
- priceTier: AppPriceTier;
4713
+ /**
4714
+ * ISO-8601 start date for this price (e.g. `2024-01-31`).
4715
+ *
4716
+ * When used as a "manual" price inside an {@link AppPriceSchedule} create
4717
+ * request, passing `null` (or omitting the attribute) means "effective
4718
+ * immediately".
4719
+ */
4720
+ startDate: string | null;
4721
+ /**
4722
+ * ISO-8601 end date. Optional — typically not set by callers and returned by
4723
+ * Apple only for historical automatic prices.
4724
+ */
4725
+ endDate?: string | null;
4726
+ /**
4727
+ * Whether this price was set manually as part of an
4728
+ * {@link AppPriceSchedule}, or automatically computed by Apple from the
4729
+ * schedule's `baseTerritory` price. Only populated on reads.
4730
+ */
4731
+ manual?: boolean;
4732
+ /**
4733
+ * The price point this price refers to. Populated on reads, and required
4734
+ * when constructing an `AppPrice` to pass to
4735
+ * {@link AppPriceSchedule.createAsync}.
4736
+ */
4737
+ appPricePoint?: AppPricePoint;
4738
+ /** Territory this price applies to (read-only). */
4739
+ territory?: Territory;
4740
+ /**
4741
+ * Legacy price tier (e.g. `1`, `2`, ...). Only populated by the deprecated
4742
+ * iris endpoint. New callers should use {@link AppPriceProps.appPricePoint}.
4743
+ * @deprecated Apple removed the global tier system in late 2023.
4744
+ */
4745
+ priceTier?: AppPriceTier;
4305
4746
  }
4306
4747
  export class AppPrice extends ConnectModel<AppPriceProps> {
4307
4748
  static type: string;
@@ -4314,6 +4755,123 @@ declare module "connect/models/AppPrice" {
4314
4755
  }) => Promise<AppPrice>;
4315
4756
  }
4316
4757
  }
4758
+ declare module "connect/models/AppPriceSchedule" {
4759
+ /**
4760
+ * App price schedule — the "base territory" pricing model Apple introduced in
4761
+ * late 2023, replacing the legacy `appPriceTier`-driven
4762
+ * `App.updateAsync({ appPriceTier, territories })` flow.
4763
+ *
4764
+ * A schedule describes the full set of manual prices for an app. Creating a
4765
+ * new schedule REPLACES any prior schedule entirely, so callers must include
4766
+ * every manual price they want to keep.
4767
+ *
4768
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/appPriceSchedules
4769
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/post-v1-apppriceschedules
4770
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppriceschedule
4771
+ */
4772
+ import { RequestContext } from "network/Request";
4773
+ import { ConnectQueryParams } from "connect/ConnectAPI";
4774
+ import { AppPrice } from "connect/models/AppPrice";
4775
+ import { ConnectModel } from "connect/models/ConnectModel";
4776
+ import { Territory } from "connect/models/Territory";
4777
+ export interface AppPriceScheduleProps {
4778
+ /** Territory used as the reference for automatically-computed prices. */
4779
+ baseTerritory?: Territory;
4780
+ /**
4781
+ * Manual prices explicitly set by the developer. Each entry ties an
4782
+ * {@link AppPricePoint} to an (optional) `startDate`.
4783
+ */
4784
+ manualPrices?: AppPrice[];
4785
+ /**
4786
+ * Prices automatically computed by Apple for territories not covered by
4787
+ * `manualPrices`, using the `baseTerritory` price point as a reference.
4788
+ * Read-only.
4789
+ */
4790
+ automaticPrices?: AppPrice[];
4791
+ }
4792
+ /**
4793
+ * Shape of a manual price when creating an {@link AppPriceSchedule}. Each
4794
+ * entry becomes an inline `appPrices` resource in the POST body, referencing
4795
+ * an existing `appPricePoint` id (look these up via
4796
+ * {@link AppPricePoint.getForAppAsync}).
4797
+ */
4798
+ export interface AppPriceScheduleManualPriceInput {
4799
+ /** Id of the target `appPricePoint`. */
4800
+ appPricePointId: string;
4801
+ /**
4802
+ * ISO-8601 date (YYYY-MM-DD) for when this price should take effect.
4803
+ * Pass `null` (or omit) for "effective immediately".
4804
+ */
4805
+ startDate?: string | null;
4806
+ /**
4807
+ * Optional end date. Typically unused on creates — callers express "end"
4808
+ * by scheduling a follow-up price with a later `startDate`.
4809
+ */
4810
+ endDate?: string | null;
4811
+ }
4812
+ export class AppPriceSchedule extends ConnectModel<AppPriceScheduleProps> {
4813
+ static type: string;
4814
+ static DEFAULT_INCLUDES: string[];
4815
+ /**
4816
+ * Fetch a single schedule by id.
4817
+ *
4818
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apppriceschedules-_id_
4819
+ */
4820
+ static infoAsync: (context: RequestContext, props: {
4821
+ id: string;
4822
+ query?: ConnectQueryParams;
4823
+ }) => Promise<AppPriceSchedule>;
4824
+ /**
4825
+ * Fetch the current schedule for an app.
4826
+ *
4827
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppriceschedule
4828
+ */
4829
+ static getForAppAsync(context: RequestContext, { id, query, }: {
4830
+ /** App id. */
4831
+ id: string;
4832
+ query?: ConnectQueryParams;
4833
+ }): Promise<AppPriceSchedule | null>;
4834
+ /**
4835
+ * Create a new price schedule for an app. This REPLACES any prior
4836
+ * schedule — callers must include every manual price they want to keep.
4837
+ *
4838
+ * Manual prices are passed as inline `appPrices` resources referencing
4839
+ * existing `appPricePoint` ids. Look up valid price point ids for the target
4840
+ * app (and optionally a specific territory) via
4841
+ * {@link AppPricePoint.getForAppAsync}.
4842
+ *
4843
+ * @example
4844
+ * ```ts
4845
+ * const pricePoints = await AppPricePoint.getForAppAsync(context, {
4846
+ * id: app.id,
4847
+ * query: { filter: { territory: 'USA' } },
4848
+ * });
4849
+ * await AppPriceSchedule.createAsync(context, {
4850
+ * appId: app.id,
4851
+ * baseTerritoryId: 'USA',
4852
+ * manualPrices: [{ appPricePointId: pricePoints[0].id }],
4853
+ * });
4854
+ * ```
4855
+ *
4856
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/post-v1-apppriceschedules
4857
+ */
4858
+ static createAsync(context: RequestContext, { appId, baseTerritoryId, manualPrices, }: {
4859
+ /** Id of the app the schedule is being set on. */
4860
+ appId: string;
4861
+ /**
4862
+ * Id of the territory (e.g. `USA`) whose manual price Apple should use
4863
+ * as the reference for automatic prices in other territories.
4864
+ */
4865
+ baseTerritoryId: string;
4866
+ /**
4867
+ * Manual prices to apply. An empty array makes the app free in the
4868
+ * base territory (Apple requires at least one entry matching the base
4869
+ * territory's price point in practice).
4870
+ */
4871
+ manualPrices: AppPriceScheduleManualPriceInput[];
4872
+ }): Promise<AppPriceSchedule>;
4873
+ }
4874
+ }
4317
4875
  declare module "connect/models/BetaAppLocalization" {
4318
4876
  import { RequestContext } from "network/Request";
4319
4877
  import { ConnectQueryFilter } from "connect/ConnectAPI";
@@ -4714,7 +5272,7 @@ declare module "connect/models/ReviewSubmission" {
4714
5272
  static getAsync: (context: RequestContext, props?: {
4715
5273
  query?: ConnectQueryParams<Partial<{
4716
5274
  platform: Platform | Platform[];
4717
- state: "COMPLETE" | "WAITING_FOR_REVIEW" | "IN_REVIEW" | "READY_FOR_REVIEW" | "UNRESOLVED_ISSUES" | "CANCELING" | "COMPLETING" | ("COMPLETE" | "WAITING_FOR_REVIEW" | "IN_REVIEW" | "READY_FOR_REVIEW" | "UNRESOLVED_ISSUES" | "CANCELING" | "COMPLETING")[];
5275
+ 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")[];
4718
5276
  } & {
4719
5277
  id?: string;
4720
5278
  }>> | undefined;
@@ -4744,21 +5302,6 @@ declare module "connect/models/ReviewSubmission" {
4744
5302
  getResolutionCenterThreadsAsync(): Promise<ResolutionCenterThread[]>;
4745
5303
  }
4746
5304
  }
4747
- declare module "connect/models/Territory" {
4748
- import { ConnectModel } from "connect/models/ConnectModel";
4749
- export interface TerritoryProps {
4750
- /**
4751
- * @example 'USD'
4752
- */
4753
- currency: string;
4754
- }
4755
- export class Territory extends ConnectModel<TerritoryProps> {
4756
- static type: string;
4757
- static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
4758
- query?: import("connect/ConnectAPI").ConnectQueryParams<Record<string, any>> | undefined;
4759
- } | undefined) => Promise<Territory[]>;
4760
- }
4761
- }
4762
5305
  declare module "connect/models/App" {
4763
5306
  import { RequestContext } from "network/Request";
4764
5307
  import { ConnectQueryFilter, ConnectQueryParams } from "connect/ConnectAPI";
@@ -4770,6 +5313,8 @@ declare module "connect/models/App" {
4770
5313
  import { AppDataUsagesPublishState } from "connect/models/AppDataUsagesPublishState";
4771
5314
  import { AppInfo, AppStoreState } from "connect/models/AppInfo";
4772
5315
  import { AppPrice } from "connect/models/AppPrice";
5316
+ import { AppPricePoint, AppPricePointQueryFilter } from "connect/models/AppPricePoint";
5317
+ import { AppPriceSchedule, AppPriceScheduleManualPriceInput } from "connect/models/AppPriceSchedule";
4773
5318
  import { AppStoreVersion, AppStoreVersionProps } from "connect/models/AppStoreVersion";
4774
5319
  import { BetaAppLocalization, BetaAppLocalizationProps } from "connect/models/BetaAppLocalization";
4775
5320
  import { BetaAppReviewDetail, BetaAppReviewDetailProps } from "connect/models/BetaAppReviewDetail";
@@ -4931,6 +5476,36 @@ declare module "connect/models/App" {
4931
5476
  getAvailableTerritoriesAsync({ query, }?: {
4932
5477
  query?: ConnectQueryParams;
4933
5478
  }): Promise<Territory[]>;
5479
+ /**
5480
+ * Get the current base-territory price schedule for this app, or `null` if
5481
+ * none has been set. This is the read half of the modern pricing API
5482
+ * (replaces the legacy `prices` relationship populated by
5483
+ * `App.updateAsync({ appPriceTier, territories })`).
5484
+ *
5485
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppriceschedule
5486
+ */
5487
+ getPriceScheduleAsync({ query, }?: {
5488
+ query?: ConnectQueryParams;
5489
+ }): Promise<AppPriceSchedule | null>;
5490
+ /**
5491
+ * Create (replace) the price schedule for this app. See
5492
+ * {@link AppPriceSchedule.createAsync} for important details — this
5493
+ * REPLACES any prior schedule entirely.
5494
+ */
5495
+ createPriceScheduleAsync({ baseTerritoryId, manualPrices, }: {
5496
+ baseTerritoryId: string;
5497
+ manualPrices: AppPriceScheduleManualPriceInput[];
5498
+ }): Promise<AppPriceSchedule>;
5499
+ /**
5500
+ * List the valid price points for this app, optionally filtered by
5501
+ * territory. Use this to look up a concrete `appPricePoint` id to pass to
5502
+ * {@link App.createPriceScheduleAsync}.
5503
+ *
5504
+ * @see https://developer.apple.com/documentation/appstoreconnectapi/get-v1-apps-_id_-apppricepoints
5505
+ */
5506
+ getAppPricePointsAsync({ query, }?: {
5507
+ query?: ConnectQueryParams<AppPricePointQueryFilter>;
5508
+ }): Promise<AppPricePoint[]>;
4934
5509
  getInAppPurchasesAsync({ query, }?: {
4935
5510
  query?: ConnectQueryParams<InAppPurchaseQueryFilter>;
4936
5511
  }): Promise<InAppPurchase[]>;
@@ -4943,6 +5518,10 @@ declare module "connect/models/App" {
4943
5518
  platform?: Platform;
4944
5519
  includes?: string[];
4945
5520
  }): Promise<ReviewSubmission | null>;
5521
+ getUnresolvedReviewSubmissionAsync({ platform, includes, }?: {
5522
+ platform?: Platform;
5523
+ includes?: string[];
5524
+ }): Promise<ReviewSubmission | null>;
4946
5525
  getReviewSubmissionsAsync({ query, }?: {
4947
5526
  query?: ConnectQueryParams;
4948
5527
  }): Promise<ReviewSubmission[]>;
@@ -5132,41 +5711,6 @@ declare module "connect/models/ApiKey" {
5132
5711
  revokeAsync(): Promise<ApiKey>;
5133
5712
  }
5134
5713
  }
5135
- declare module "connect/models/AppPricePoint" {
5136
- import { ConnectQueryFilter } from "connect/ConnectAPI";
5137
- import { AppPriceTier } from "connect/models/AppPriceTier";
5138
- import { ConnectModel } from "connect/models/ConnectModel";
5139
- import { Territory } from "connect/models/Territory";
5140
- export interface AppPricePointProps {
5141
- customerPrice: string;
5142
- proceeds: string;
5143
- priceTier?: AppPriceTier;
5144
- territory?: Territory;
5145
- }
5146
- export type AppPricePointQueryFilter = ConnectQueryFilter<{
5147
- territory: string;
5148
- priceTier: string;
5149
- }, 'territory' | 'priceTier'>;
5150
- export class AppPricePoint extends ConnectModel<AppPricePointProps> {
5151
- static type: string;
5152
- static getAsync: (context: import("AppStoreConnect").RequestContext, props?: {
5153
- query?: import("connect/ConnectAPI").ConnectQueryParams<Partial<{
5154
- territory: string | string[];
5155
- priceTier: string | string[];
5156
- } & {
5157
- id?: string;
5158
- }>> | undefined;
5159
- } | undefined) => Promise<AppPricePoint[]>;
5160
- /**
5161
- *
5162
- * @param id `AppPricePoint` id (ex: UNHB5PT4MA)
5163
- */
5164
- static infoAsync: (context: import("AppStoreConnect").RequestContext, props: {
5165
- id: string;
5166
- query?: import("connect/ConnectAPI").ConnectQueryParams;
5167
- }) => Promise<AppPricePoint>;
5168
- }
5169
- }
5170
5714
  declare module "connect/models/BetaCrashLog" {
5171
5715
  /**
5172
5716
  * The crash log text associated with a beta feedback crash submission.
@@ -5459,6 +6003,10 @@ declare module "connect/index" {
5459
6003
  export * from "connect/models/ApiKey";
5460
6004
  export * from "connect/models/App";
5461
6005
  export * from "connect/models/AppClip";
6006
+ export * from "connect/models/AppClipAppStoreReviewDetail";
6007
+ export * from "connect/models/AppClipDefaultExperience";
6008
+ export * from "connect/models/AppClipDefaultExperienceLocalization";
6009
+ export * from "connect/models/AppClipHeaderImage";
5462
6010
  export * from "connect/models/AppDataUsage";
5463
6011
  export * from "connect/models/AppDataUsageCategory";
5464
6012
  export * from "connect/models/AppDataUsageDataProtection";
@@ -5471,6 +6019,7 @@ declare module "connect/index" {
5471
6019
  export * from "connect/models/AppInfoLocalization";
5472
6020
  export * from "connect/models/AppPrice";
5473
6021
  export * from "connect/models/AppPricePoint";
6022
+ export * from "connect/models/AppPriceSchedule";
5474
6023
  export * from "connect/models/AppPriceTier";
5475
6024
  export * from "connect/models/AppPreview";
5476
6025
  export * from "connect/models/AppPreviewSet";
@@ -5504,6 +6053,7 @@ declare module "connect/index" {
5504
6053
  export * from "connect/models/BundleId";
5505
6054
  export * from "connect/models/BundleIdCapability";
5506
6055
  export * from "connect/models/ContentProvider";
6056
+ export * from "connect/models/ResolutionCenterDraftMessage";
5507
6057
  export * from "connect/models/ResolutionCenterMessage";
5508
6058
  export * from "connect/models/ResolutionCenterThread";
5509
6059
  export * from "connect/models/ReviewRejection";