eas-cli 0.57.0 → 0.60.0

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.
Files changed (63) hide show
  1. package/README.md +84 -44
  2. package/build/build/android/build.js +17 -3
  3. package/build/build/android/graphql.js +2 -0
  4. package/build/build/android/prepareJob.js +5 -0
  5. package/build/build/android/syncProjectConfiguration.d.ts +3 -4
  6. package/build/build/android/syncProjectConfiguration.js +2 -3
  7. package/build/build/android/version.d.ts +11 -0
  8. package/build/build/android/version.js +71 -1
  9. package/build/build/build.js +1 -1
  10. package/build/build/context.d.ts +4 -0
  11. package/build/build/createContext.d.ts +2 -1
  12. package/build/build/createContext.js +7 -1
  13. package/build/build/ios/build.js +17 -1
  14. package/build/build/ios/graphql.js +2 -0
  15. package/build/build/ios/prepareJob.js +5 -0
  16. package/build/build/ios/syncProjectConfiguration.d.ts +3 -4
  17. package/build/build/ios/syncProjectConfiguration.js +2 -3
  18. package/build/build/ios/version.d.ts +13 -0
  19. package/build/build/ios/version.js +72 -1
  20. package/build/build/local.d.ts +2 -2
  21. package/build/build/local.js +7 -7
  22. package/build/build/metadata.js +18 -2
  23. package/build/build/runBuildAndSubmit.js +25 -3
  24. package/build/build/utils/printBuildInfo.d.ts +1 -1
  25. package/build/build/utils/printBuildInfo.js +7 -13
  26. package/build/commands/build/version/set.d.ts +0 -1
  27. package/build/commands/build/version/set.js +2 -3
  28. package/build/commands/build/version/sync.d.ts +0 -1
  29. package/build/commands/build/version/sync.js +2 -3
  30. package/build/commands/submit.js +4 -1
  31. package/build/commands/update/index.js +12 -2
  32. package/build/graphql/generated.d.ts +240 -4
  33. package/build/graphql/generated.js +2 -0
  34. package/build/graphql/mutations/PublishMutation.d.ts +2 -4
  35. package/build/graphql/queries/BuildQuery.d.ts +4 -1
  36. package/build/graphql/queries/BuildQuery.js +19 -0
  37. package/build/graphql/queries/PublishQuery.d.ts +2 -1
  38. package/build/graphql/queries/PublishQuery.js +16 -0
  39. package/build/graphql/types/Build.d.ts +1 -0
  40. package/build/graphql/types/Build.js +16 -1
  41. package/build/metadata/apple/config/reader.d.ts +3 -2
  42. package/build/metadata/apple/config/reader.js +22 -5
  43. package/build/metadata/apple/config/writer.d.ts +3 -2
  44. package/build/metadata/apple/config/writer.js +22 -6
  45. package/build/metadata/apple/tasks/app-version.d.ts +5 -1
  46. package/build/metadata/apple/tasks/app-version.js +109 -8
  47. package/build/metadata/apple/tasks/index.d.ts +6 -1
  48. package/build/metadata/apple/tasks/index.js +7 -2
  49. package/build/metadata/apple/types.d.ts +3 -7
  50. package/build/metadata/upload.js +6 -1
  51. package/build/project/projectUtils.d.ts +1 -0
  52. package/build/project/projectUtils.js +18 -1
  53. package/build/project/publish.d.ts +3 -1
  54. package/build/project/publish.js +17 -8
  55. package/build/project/remoteVersionSource.d.ts +5 -3
  56. package/build/project/remoteVersionSource.js +18 -9
  57. package/build/submit/submit.d.ts +2 -1
  58. package/build/submit/submit.js +3 -2
  59. package/build/vcs/clients/gitNoCommit.d.ts +1 -0
  60. package/build/vcs/clients/gitNoCommit.js +14 -0
  61. package/oclif.manifest.json +1 -1
  62. package/package.json +26 -25
  63. package/schema/metadata-0.json +38 -233
@@ -172,6 +172,7 @@ class UpdatePublish extends EasCommand_1.default {
172
172
  let unsortedUpdateInfoGroups = {};
173
173
  let oldMessage, oldRuntimeVersion;
174
174
  let uploadedAssetCount = 0;
175
+ let assetLimitPerUpdateGroup = 0;
175
176
  if (republish) {
176
177
  // If we are republishing, we don't need to worry about building the bundle or uploading the assets.
177
178
  // Instead we get the `updateInfoGroup` from the update we wish to republish.
@@ -270,10 +271,11 @@ class UpdatePublish extends EasCommand_1.default {
270
271
  try {
271
272
  const platforms = platformFlag === 'all' ? exports.defaultPublishPlatforms : [platformFlag];
272
273
  const assets = await (0, publish_1.collectAssetsAsync)({ inputDir: inputDir, platforms });
273
- const { uniqueUploadedAssetCount } = await (0, publish_1.uploadAssetsAsync)(assets, (totalAssets, missingAssets) => {
274
+ const uploadResults = await (0, publish_1.uploadAssetsAsync)(assets, projectId, (totalAssets, missingAssets) => {
274
275
  assetSpinner.text = `Uploading assets. Finished (${totalAssets - missingAssets}/${totalAssets})`;
275
276
  });
276
- uploadedAssetCount = uniqueUploadedAssetCount;
277
+ uploadedAssetCount = uploadResults.uniqueUploadedAssetCount;
278
+ assetLimitPerUpdateGroup = uploadResults.assetLimitPerUpdateGroup;
277
279
  unsortedUpdateInfoGroups = await (0, publish_1.buildUnsortedUpdateInfoGroupAsync)(assets, exp);
278
280
  const uploadAssetSuccessMessage = uploadedAssetCount
279
281
  ? `Uploaded ${uploadedAssetCount} ${uploadedAssetCount === 1 ? 'asset' : 'assets'}!`
@@ -387,6 +389,14 @@ class UpdatePublish extends EasCommand_1.default {
387
389
  { label: 'Website link', value: updateGroupLink },
388
390
  ]));
389
391
  log_1.default.addNewLineIfNone();
392
+ if ((0, publish_1.isUploadedAssetCountAboveWarningThreshold)(uploadedAssetCount, assetLimitPerUpdateGroup)) {
393
+ log_1.default.warn(`This update group contains ${uploadedAssetCount} assets and is nearing the server cap of ${assetLimitPerUpdateGroup}.\n` +
394
+ `${(0, log_1.learnMore)('https://docs.expo.dev/eas-update/optimize-assets/', {
395
+ learnMoreMessage: 'Consider optimizing your usage of assets',
396
+ dim: false,
397
+ })}.`);
398
+ log_1.default.addNewLineIfNone();
399
+ }
390
400
  }
391
401
  }
392
402
  }
@@ -24,13 +24,9 @@ export declare type Scalars = {
24
24
  Boolean: boolean;
25
25
  Int: number;
26
26
  Float: number;
27
- /** Date custom scalar type */
28
27
  DateTime: any;
29
- /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */
30
28
  JSON: any;
31
- /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */
32
29
  JSONObject: any;
33
- /** The `Upload` scalar type represents a file upload. */
34
30
  Upload: any;
35
31
  };
36
32
  export declare type AcceptUserInvitationResult = {
@@ -755,6 +751,7 @@ export declare type App = Project & {
755
751
  androidAppCredentials: Array<AndroidAppCredentials>;
756
752
  /** ios.appStoreUrl field from most recent classic update manifest */
757
753
  appStoreUrl?: Maybe<Scalars['String']>;
754
+ assetLimitPerUpdateGroup: Scalars['Int'];
758
755
  buildJobs: Array<BuildJob>;
759
756
  /**
760
757
  * Coalesced Build (EAS) or BuildJob (Classic) items for this app.
@@ -1466,6 +1463,7 @@ export declare type Build = ActivityTimelineProjectActivity & BuildOrBuildJob &
1466
1463
  reactNativeVersion?: Maybe<Scalars['String']>;
1467
1464
  releaseChannel?: Maybe<Scalars['String']>;
1468
1465
  resourceClass?: Maybe<BuildResourceClass>;
1466
+ runFromCI?: Maybe<Scalars['Boolean']>;
1469
1467
  runtimeVersion?: Maybe<Scalars['String']>;
1470
1468
  sdkVersion?: Maybe<Scalars['String']>;
1471
1469
  status: BuildStatus;
@@ -1598,6 +1596,8 @@ export declare type BuildMetadataInput = {
1598
1596
  message?: InputMaybe<Scalars['String']>;
1599
1597
  reactNativeVersion?: InputMaybe<Scalars['String']>;
1600
1598
  releaseChannel?: InputMaybe<Scalars['String']>;
1599
+ runFromCI?: InputMaybe<Scalars['Boolean']>;
1600
+ runWithNoWaitFlag?: InputMaybe<Scalars['Boolean']>;
1601
1601
  runtimeVersion?: InputMaybe<Scalars['String']>;
1602
1602
  sdkVersion?: InputMaybe<Scalars['String']>;
1603
1603
  trackingContext?: InputMaybe<Scalars['JSONObject']>;
@@ -1821,6 +1821,11 @@ export declare type CreateIosSubmissionInput = {
1821
1821
  config: IosSubmissionConfigInput;
1822
1822
  submittedBuildId?: InputMaybe<Scalars['ID']>;
1823
1823
  };
1824
+ export declare type CreateServerlessFunctionUploadUrlResult = {
1825
+ __typename?: 'CreateServerlessFunctionUploadUrlResult';
1826
+ formDataFields: Scalars['JSONObject'];
1827
+ url: Scalars['String'];
1828
+ };
1824
1829
  export declare type CreateSubmissionResult = {
1825
1830
  __typename?: 'CreateSubmissionResult';
1826
1831
  /** Created submission */
@@ -1919,6 +1924,7 @@ export declare enum EasServiceMetric {
1919
1924
  BandwidthUsage = "BANDWIDTH_USAGE",
1920
1925
  Builds = "BUILDS",
1921
1926
  ManifestRequests = "MANIFEST_REQUESTS",
1927
+ UniqueUpdaters = "UNIQUE_UPDATERS",
1922
1928
  UniqueUsers = "UNIQUE_USERS"
1923
1929
  }
1924
1930
  export declare type EditUpdateBranchInput = {
@@ -2616,6 +2622,7 @@ export declare type RootMutation = {
2616
2622
  me: MeMutation;
2617
2623
  /** Mutations that create, update, and delete Robots */
2618
2624
  robot: RobotMutation;
2625
+ serverlessFunction: ServerlessFunctionMutation;
2619
2626
  /** Mutations that modify an EAS Submit submission */
2620
2627
  submission: SubmissionMutation;
2621
2628
  update: UpdateMutation;
@@ -2757,6 +2764,17 @@ export declare type SecondFactorRegenerateBackupCodesResult = {
2757
2764
  __typename?: 'SecondFactorRegenerateBackupCodesResult';
2758
2765
  plaintextBackupCodes: Array<Scalars['String']>;
2759
2766
  };
2767
+ export declare type ServerlessFunctionIdentifierInput = {
2768
+ gitCommitSHA1: Scalars['String'];
2769
+ };
2770
+ export declare type ServerlessFunctionMutation = {
2771
+ __typename?: 'ServerlessFunctionMutation';
2772
+ createUploadPresignedUrl: CreateServerlessFunctionUploadUrlResult;
2773
+ };
2774
+ export declare type ServerlessFunctionMutationCreateUploadPresignedUrlArgs = {
2775
+ appId: Scalars['ID'];
2776
+ serverlessFunctionIdentifierInput: ServerlessFunctionIdentifierInput;
2777
+ };
2760
2778
  export declare type Snack = Project & {
2761
2779
  __typename?: 'Snack';
2762
2780
  /** Description of the Snack */
@@ -2809,6 +2827,15 @@ export declare enum StandardOffer {
2809
2827
  /** $348 USD per year, 30 day trial */
2810
2828
  YearlySub = "YEARLY_SUB"
2811
2829
  }
2830
+ export declare type StripeCoupon = {
2831
+ __typename?: 'StripeCoupon';
2832
+ amountOff?: Maybe<Scalars['String']>;
2833
+ appliesTo?: Maybe<Scalars['String']>;
2834
+ id: Scalars['ID'];
2835
+ name: Scalars['String'];
2836
+ percentOff?: Maybe<Scalars['Float']>;
2837
+ valid: Scalars['Boolean'];
2838
+ };
2812
2839
  /** Represents an EAS Submission */
2813
2840
  export declare type Submission = ActivityTimelineProjectActivity & {
2814
2841
  __typename?: 'Submission';
@@ -2904,6 +2931,7 @@ export declare type SubscriptionDetails = {
2904
2931
  addons: Array<AddonDetails>;
2905
2932
  cancelledAt?: Maybe<Scalars['DateTime']>;
2906
2933
  concurrencies?: Maybe<Concurrencies>;
2934
+ coupon?: Maybe<StripeCoupon>;
2907
2935
  endedAt?: Maybe<Scalars['DateTime']>;
2908
2936
  futureSubscription?: Maybe<FutureSubscription>;
2909
2937
  id: Scalars['ID'];
@@ -3069,6 +3097,7 @@ export declare enum UsageMetricType {
3069
3097
  Bandwidth = "BANDWIDTH",
3070
3098
  Build = "BUILD",
3071
3099
  Request = "REQUEST",
3100
+ Update = "UPDATE",
3072
3101
  User = "USER"
3073
3102
  }
3074
3103
  export declare enum UsageMetricsGranularity {
@@ -6473,6 +6502,107 @@ export declare type BuildsByIdQuery = {
6473
6502
  };
6474
6503
  };
6475
6504
  };
6505
+ export declare type BuildsWithSubmissionsByIdQueryVariables = Exact<{
6506
+ buildId: Scalars['ID'];
6507
+ }>;
6508
+ export declare type BuildsWithSubmissionsByIdQuery = {
6509
+ __typename?: 'RootQuery';
6510
+ builds: {
6511
+ __typename?: 'BuildQuery';
6512
+ byId: {
6513
+ __typename?: 'Build';
6514
+ id: string;
6515
+ status: BuildStatus;
6516
+ platform: AppPlatform;
6517
+ channel?: string | null;
6518
+ releaseChannel?: string | null;
6519
+ distribution?: DistributionType | null;
6520
+ iosEnterpriseProvisioning?: BuildIosEnterpriseProvisioning | null;
6521
+ buildProfile?: string | null;
6522
+ sdkVersion?: string | null;
6523
+ appVersion?: string | null;
6524
+ appBuildVersion?: string | null;
6525
+ runtimeVersion?: string | null;
6526
+ gitCommitHash?: string | null;
6527
+ initialQueuePosition?: number | null;
6528
+ queuePosition?: number | null;
6529
+ estimatedWaitTimeLeftSeconds?: number | null;
6530
+ priority: BuildPriority;
6531
+ createdAt: any;
6532
+ updatedAt: any;
6533
+ submissions: Array<{
6534
+ __typename?: 'Submission';
6535
+ id: string;
6536
+ status: SubmissionStatus;
6537
+ platform: AppPlatform;
6538
+ logsUrl?: string | null;
6539
+ app: {
6540
+ __typename?: 'App';
6541
+ id: string;
6542
+ name: string;
6543
+ slug: string;
6544
+ ownerAccount: {
6545
+ __typename?: 'Account';
6546
+ id: string;
6547
+ name: string;
6548
+ };
6549
+ };
6550
+ androidConfig?: {
6551
+ __typename?: 'AndroidSubmissionConfig';
6552
+ applicationIdentifier?: string | null;
6553
+ track: SubmissionAndroidTrack;
6554
+ releaseStatus?: SubmissionAndroidReleaseStatus | null;
6555
+ } | null;
6556
+ iosConfig?: {
6557
+ __typename?: 'IosSubmissionConfig';
6558
+ ascAppIdentifier: string;
6559
+ appleIdUsername?: string | null;
6560
+ } | null;
6561
+ error?: {
6562
+ __typename?: 'SubmissionError';
6563
+ errorCode?: string | null;
6564
+ message?: string | null;
6565
+ } | null;
6566
+ }>;
6567
+ error?: {
6568
+ __typename?: 'BuildError';
6569
+ errorCode: string;
6570
+ message: string;
6571
+ docsUrl?: string | null;
6572
+ } | null;
6573
+ artifacts?: {
6574
+ __typename?: 'BuildArtifacts';
6575
+ buildUrl?: string | null;
6576
+ xcodeBuildLogsUrl?: string | null;
6577
+ } | null;
6578
+ initiatingActor?: {
6579
+ __typename: 'Robot';
6580
+ id: string;
6581
+ displayName: string;
6582
+ } | {
6583
+ __typename: 'User';
6584
+ id: string;
6585
+ displayName: string;
6586
+ } | null;
6587
+ project: {
6588
+ __typename: 'App';
6589
+ id: string;
6590
+ name: string;
6591
+ slug: string;
6592
+ ownerAccount: {
6593
+ __typename?: 'Account';
6594
+ id: string;
6595
+ name: string;
6596
+ };
6597
+ } | {
6598
+ __typename: 'Snack';
6599
+ id: string;
6600
+ name: string;
6601
+ slug: string;
6602
+ };
6603
+ };
6604
+ };
6605
+ };
6476
6606
  export declare type GetAllBuildsForAppQueryVariables = Exact<{
6477
6607
  appId: Scalars['String'];
6478
6608
  offset: Scalars['Int'];
@@ -6660,6 +6790,20 @@ export declare type GetAssetMetadataQuery = {
6660
6790
  }>;
6661
6791
  };
6662
6792
  };
6793
+ export declare type GetAssetLimitPerUpdateGroupForAppQueryVariables = Exact<{
6794
+ appId: Scalars['String'];
6795
+ }>;
6796
+ export declare type GetAssetLimitPerUpdateGroupForAppQuery = {
6797
+ __typename?: 'RootQuery';
6798
+ app: {
6799
+ __typename?: 'AppQuery';
6800
+ byId: {
6801
+ __typename?: 'App';
6802
+ id: string;
6803
+ assetLimitPerUpdateGroup: number;
6804
+ };
6805
+ };
6806
+ };
6663
6807
  export declare type SubmissionsByIdQueryVariables = Exact<{
6664
6808
  submissionId: Scalars['ID'];
6665
6809
  }>;
@@ -6967,6 +7111,98 @@ export declare type BuildFragment = {
6967
7111
  slug: string;
6968
7112
  };
6969
7113
  };
7114
+ export declare type BuildWithSubmissionsFragment = {
7115
+ __typename?: 'Build';
7116
+ id: string;
7117
+ status: BuildStatus;
7118
+ platform: AppPlatform;
7119
+ channel?: string | null;
7120
+ releaseChannel?: string | null;
7121
+ distribution?: DistributionType | null;
7122
+ iosEnterpriseProvisioning?: BuildIosEnterpriseProvisioning | null;
7123
+ buildProfile?: string | null;
7124
+ sdkVersion?: string | null;
7125
+ appVersion?: string | null;
7126
+ appBuildVersion?: string | null;
7127
+ runtimeVersion?: string | null;
7128
+ gitCommitHash?: string | null;
7129
+ initialQueuePosition?: number | null;
7130
+ queuePosition?: number | null;
7131
+ estimatedWaitTimeLeftSeconds?: number | null;
7132
+ priority: BuildPriority;
7133
+ createdAt: any;
7134
+ updatedAt: any;
7135
+ submissions: Array<{
7136
+ __typename?: 'Submission';
7137
+ id: string;
7138
+ status: SubmissionStatus;
7139
+ platform: AppPlatform;
7140
+ logsUrl?: string | null;
7141
+ app: {
7142
+ __typename?: 'App';
7143
+ id: string;
7144
+ name: string;
7145
+ slug: string;
7146
+ ownerAccount: {
7147
+ __typename?: 'Account';
7148
+ id: string;
7149
+ name: string;
7150
+ };
7151
+ };
7152
+ androidConfig?: {
7153
+ __typename?: 'AndroidSubmissionConfig';
7154
+ applicationIdentifier?: string | null;
7155
+ track: SubmissionAndroidTrack;
7156
+ releaseStatus?: SubmissionAndroidReleaseStatus | null;
7157
+ } | null;
7158
+ iosConfig?: {
7159
+ __typename?: 'IosSubmissionConfig';
7160
+ ascAppIdentifier: string;
7161
+ appleIdUsername?: string | null;
7162
+ } | null;
7163
+ error?: {
7164
+ __typename?: 'SubmissionError';
7165
+ errorCode?: string | null;
7166
+ message?: string | null;
7167
+ } | null;
7168
+ }>;
7169
+ error?: {
7170
+ __typename?: 'BuildError';
7171
+ errorCode: string;
7172
+ message: string;
7173
+ docsUrl?: string | null;
7174
+ } | null;
7175
+ artifacts?: {
7176
+ __typename?: 'BuildArtifacts';
7177
+ buildUrl?: string | null;
7178
+ xcodeBuildLogsUrl?: string | null;
7179
+ } | null;
7180
+ initiatingActor?: {
7181
+ __typename: 'Robot';
7182
+ id: string;
7183
+ displayName: string;
7184
+ } | {
7185
+ __typename: 'User';
7186
+ id: string;
7187
+ displayName: string;
7188
+ } | null;
7189
+ project: {
7190
+ __typename: 'App';
7191
+ id: string;
7192
+ name: string;
7193
+ slug: string;
7194
+ ownerAccount: {
7195
+ __typename?: 'Account';
7196
+ id: string;
7197
+ name: string;
7198
+ };
7199
+ } | {
7200
+ __typename: 'Snack';
7201
+ id: string;
7202
+ name: string;
7203
+ slug: string;
7204
+ };
7205
+ };
6970
7206
  export declare type EnvironmentSecretFragment = {
6971
7207
  __typename?: 'EnvironmentSecret';
6972
7208
  id: string;
@@ -164,6 +164,7 @@ var EasServiceMetric;
164
164
  EasServiceMetric["BandwidthUsage"] = "BANDWIDTH_USAGE";
165
165
  EasServiceMetric["Builds"] = "BUILDS";
166
166
  EasServiceMetric["ManifestRequests"] = "MANIFEST_REQUESTS";
167
+ EasServiceMetric["UniqueUpdaters"] = "UNIQUE_UPDATERS";
167
168
  EasServiceMetric["UniqueUsers"] = "UNIQUE_USERS";
168
169
  })(EasServiceMetric = exports.EasServiceMetric || (exports.EasServiceMetric = {}));
169
170
  var Feature;
@@ -307,6 +308,7 @@ var UsageMetricType;
307
308
  UsageMetricType["Bandwidth"] = "BANDWIDTH";
308
309
  UsageMetricType["Build"] = "BUILD";
309
310
  UsageMetricType["Request"] = "REQUEST";
311
+ UsageMetricType["Update"] = "UPDATE";
310
312
  UsageMetricType["User"] = "USER";
311
313
  })(UsageMetricType = exports.UsageMetricType || (exports.UsageMetricType = {}));
312
314
  var UsageMetricsGranularity;
@@ -1,8 +1,6 @@
1
- import { CodeSigningInfoInput, PublishUpdateGroupInput, SetCodeSigningInfoMutation, UpdatePublishMutation } from '../generated';
1
+ import { CodeSigningInfoInput, GetSignedUploadMutation, PublishUpdateGroupInput, SetCodeSigningInfoMutation, UpdatePublishMutation } from '../generated';
2
2
  export declare const PublishMutation: {
3
- getUploadURLsAsync(contentTypes: string[]): Promise<{
4
- specifications: string[];
5
- }>;
3
+ getUploadURLsAsync(contentTypes: string[]): Promise<GetSignedUploadMutation['asset']['getSignedAssetUploadSpecifications']>;
6
4
  publishUpdateGroupAsync(publishUpdateGroupsInput: PublishUpdateGroupInput[]): Promise<UpdatePublishMutation['updateBranch']['publishUpdateGroups']>;
7
5
  setCodeSigningInfoAsync(updateId: string, codeSigningInfo: CodeSigningInfoInput): Promise<SetCodeSigningInfoMutation['update']['setCodeSigningInfo']>;
8
6
  };
@@ -1,4 +1,4 @@
1
- import { AppPlatform, BuildFragment, BuildStatus, DistributionType } from '../generated';
1
+ import { AppPlatform, BuildFragment, BuildStatus, BuildWithSubmissionsFragment, DistributionType } from '../generated';
2
2
  declare type BuildsQuery = {
3
3
  offset?: number;
4
4
  limit?: number;
@@ -20,6 +20,9 @@ export declare const BuildQuery: {
20
20
  byIdAsync(buildId: string, { useCache }?: {
21
21
  useCache?: boolean | undefined;
22
22
  }): Promise<BuildFragment>;
23
+ withSubmissionsByIdAsync(buildId: string, { useCache }?: {
24
+ useCache?: boolean | undefined;
25
+ }): Promise<BuildWithSubmissionsFragment>;
23
26
  allForAppAsync(appId: string, { limit, offset, filter }: BuildsQuery): Promise<BuildFragment[]>;
24
27
  };
25
28
  export {};
@@ -26,6 +26,25 @@ exports.BuildQuery = {
26
26
  .toPromise());
27
27
  return data.builds.byId;
28
28
  },
29
+ async withSubmissionsByIdAsync(buildId, { useCache = true } = {}) {
30
+ const data = await (0, client_1.withErrorHandlingAsync)(client_1.graphqlClient
31
+ .query((0, graphql_tag_1.default) `
32
+ query BuildsWithSubmissionsByIdQuery($buildId: ID!) {
33
+ builds {
34
+ byId(buildId: $buildId) {
35
+ id
36
+ ...BuildWithSubmissionsFragment
37
+ }
38
+ }
39
+ }
40
+ ${(0, graphql_1.print)(Build_1.BuildFragmentWithSubmissionsNode)}
41
+ `, { buildId }, {
42
+ requestPolicy: useCache ? 'cache-first' : 'network-only',
43
+ additionalTypenames: ['Build'],
44
+ })
45
+ .toPromise());
46
+ return data.builds.byId;
47
+ },
29
48
  async allForAppAsync(appId, { limit = 10, offset = 0, filter }) {
30
49
  var _a, _b;
31
50
  const data = await (0, client_1.withErrorHandlingAsync)(client_1.graphqlClient
@@ -1,4 +1,5 @@
1
- import { AssetMetadataResult } from '../generated';
1
+ import { AssetMetadataResult, GetAssetLimitPerUpdateGroupForAppQuery } from '../generated';
2
2
  export declare const PublishQuery: {
3
3
  getAssetMetadataAsync(storageKeys: string[]): Promise<AssetMetadataResult[]>;
4
+ getAssetLimitPerUpdateGroupAsync(appId: string): Promise<GetAssetLimitPerUpdateGroupForAppQuery['app']['byId']['assetLimitPerUpdateGroup']>;
4
5
  };
@@ -26,4 +26,20 @@ exports.PublishQuery = {
26
26
  .toPromise());
27
27
  return data.asset.metadata;
28
28
  },
29
+ async getAssetLimitPerUpdateGroupAsync(appId) {
30
+ const data = await (0, client_1.withErrorHandlingAsync)(client_1.graphqlClient
31
+ .query((0, graphql_tag_1.default) `
32
+ query GetAssetLimitPerUpdateGroupForApp($appId: String!) {
33
+ app {
34
+ byId(appId: $appId) {
35
+ id
36
+ assetLimitPerUpdateGroup
37
+ }
38
+ }
39
+ }
40
+ `, { appId }, { additionalTypenames: [] } // required arg
41
+ )
42
+ .toPromise());
43
+ return data.app.byId.assetLimitPerUpdateGroup;
44
+ },
29
45
  };
@@ -1 +1,2 @@
1
1
  export declare const BuildFragmentNode: import("graphql").DocumentNode;
2
+ export declare const BuildFragmentWithSubmissionsNode: import("graphql").DocumentNode;
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BuildFragmentNode = void 0;
3
+ exports.BuildFragmentWithSubmissionsNode = exports.BuildFragmentNode = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const graphql_1 = require("graphql");
5
6
  const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
7
+ const Submission_1 = require("./Submission");
6
8
  exports.BuildFragmentNode = (0, graphql_tag_1.default) `
7
9
  fragment BuildFragment on Build {
8
10
  id
@@ -52,3 +54,16 @@ exports.BuildFragmentNode = (0, graphql_tag_1.default) `
52
54
  updatedAt
53
55
  }
54
56
  `;
57
+ exports.BuildFragmentWithSubmissionsNode = (0, graphql_tag_1.default) `
58
+ ${(0, graphql_1.print)(Submission_1.SubmissionFragmentNode)}
59
+ ${(0, graphql_1.print)(exports.BuildFragmentNode)}
60
+
61
+ fragment BuildWithSubmissionsFragment on Build {
62
+ id
63
+ ...BuildFragment
64
+ submissions {
65
+ id
66
+ ...SubmissionFragment
67
+ }
68
+ }
69
+ `;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="@expo/apple-utils/ts-declarations/expo__app-store" />
2
- import { AgeRatingDeclaration, AppInfoLocalization, AppStoreReviewDetail, AppStoreVersion, AppStoreVersionLocalization, CategoryIds } from '@expo/apple-utils';
2
+ import { AgeRatingDeclaration, AppInfoLocalization, AppStoreReviewDetail, AppStoreVersion, AppStoreVersionLocalization, AppStoreVersionPhasedRelease, CategoryIds } from '@expo/apple-utils';
3
3
  import { AttributesOf } from '../../utils/asc';
4
4
  import { AppleMetadata } from '../types';
5
5
  declare type PartialExcept<T, K extends keyof T> = Pick<T, K> & Partial<Omit<T, K>>;
@@ -17,7 +17,8 @@ export declare class AppleConfigReader {
17
17
  getCategories(): CategoryIds | null;
18
18
  /** Get the `AppStoreVersion` object. */
19
19
  getVersion(): Partial<Omit<AttributesOf<AppStoreVersion>, 'releaseType' | 'earliestReleaseDate'>> | null;
20
- getVersionRelease(): Partial<Pick<AttributesOf<AppStoreVersion>, 'releaseType' | 'earliestReleaseDate'>> | null;
20
+ getVersionReleaseType(): Partial<Pick<AttributesOf<AppStoreVersion>, 'releaseType' | 'earliestReleaseDate'>> | null;
21
+ getVersionReleasePhased(): Pick<AttributesOf<AppStoreVersionPhasedRelease>, 'phasedReleaseState'> | null;
21
22
  getVersionLocale(locale: string, context: {
22
23
  versionIsFirst: boolean;
23
24
  }): Partial<AttributesOf<AppStoreVersionLocalization>> | null;
@@ -88,16 +88,22 @@ class AppleConfigReader {
88
88
  }
89
89
  /** Get the `AppStoreVersion` object. */
90
90
  getVersion() {
91
- return this.schema.copyright ? { copyright: this.schema.copyright } : null;
91
+ var _a, _b;
92
+ const attributes = {
93
+ versionString: (_a = this.schema.version) !== null && _a !== void 0 ? _a : '',
94
+ copyright: (_b = this.schema.copyright) !== null && _b !== void 0 ? _b : null,
95
+ };
96
+ const hasValues = Object.values(attributes).some(Boolean);
97
+ return hasValues ? attributes : null;
92
98
  }
93
- getVersionRelease() {
99
+ getVersionReleaseType() {
94
100
  var _a, _b;
95
101
  const { release } = this.schema;
96
- if (release === null || release === void 0 ? void 0 : release.autoReleaseDate) {
102
+ if (typeof (release === null || release === void 0 ? void 0 : release.automaticRelease) === 'string') {
97
103
  return {
98
104
  releaseType: apple_utils_1.ReleaseType.SCHEDULED,
99
- // Convert time format to 2020-06-17T12:00:00-07:00
100
- earliestReleaseDate: (_b = (_a = (0, date_1.removeDatePrecision)(release.autoReleaseDate)) === null || _a === void 0 ? void 0 : _a.toISOString()) !== null && _b !== void 0 ? _b : null,
105
+ // Convert time format to 2020-06-17T12:00:00-07:00, if that fails, try the date anyways.
106
+ earliestReleaseDate: (_b = (_a = (0, date_1.removeDatePrecision)(release.automaticRelease)) === null || _a === void 0 ? void 0 : _a.toISOString()) !== null && _b !== void 0 ? _b : release.automaticRelease,
101
107
  };
102
108
  }
103
109
  if ((release === null || release === void 0 ? void 0 : release.automaticRelease) === true) {
@@ -114,6 +120,17 @@ class AppleConfigReader {
114
120
  }
115
121
  return null;
116
122
  }
123
+ getVersionReleasePhased() {
124
+ var _a;
125
+ if (((_a = this.schema.release) === null || _a === void 0 ? void 0 : _a.phasedRelease) === true) {
126
+ return {
127
+ phasedReleaseState: apple_utils_1.PhasedReleaseState.ACTIVE,
128
+ };
129
+ }
130
+ // When phased release is turned off, we need to delete the phased release request.
131
+ // There is no concept (yet) of pausing the phased release through EAS metadata.
132
+ return null;
133
+ }
117
134
  getVersionLocale(locale, context) {
118
135
  var _a, _b;
119
136
  const info = (_a = this.schema.info) === null || _a === void 0 ? void 0 : _a[locale];
@@ -1,5 +1,5 @@
1
1
  /// <reference types="@expo/apple-utils/ts-declarations/expo__app-store" />
2
- import { AgeRatingDeclaration, AppInfo, AppInfoLocalization, AppStoreReviewDetail, AppStoreVersion, AppStoreVersionLocalization } from '@expo/apple-utils';
2
+ import { AgeRatingDeclaration, AppInfo, AppInfoLocalization, AppStoreReviewDetail, AppStoreVersion, AppStoreVersionLocalization, AppStoreVersionPhasedRelease } from '@expo/apple-utils';
3
3
  import { AttributesOf } from '../../utils/asc';
4
4
  import { AppleMetadata } from '../types';
5
5
  /**
@@ -18,7 +18,8 @@ export declare class AppleConfigWriter {
18
18
  setInfoLocale(attributes: AttributesOf<AppInfoLocalization>): void;
19
19
  setCategories(attributes: Pick<AttributesOf<AppInfo>, 'primaryCategory' | 'primarySubcategoryOne' | 'primarySubcategoryTwo' | 'secondaryCategory' | 'secondarySubcategoryOne' | 'secondarySubcategoryTwo'>): void;
20
20
  setVersion(attributes: Omit<AttributesOf<AppStoreVersion>, 'releaseType' | 'earliestReleaseDate'>): void;
21
- setVersionRelease(attributes: Pick<AttributesOf<AppStoreVersion>, 'releaseType' | 'earliestReleaseDate'>): void;
21
+ setVersionReleaseType(attributes: Pick<AttributesOf<AppStoreVersion>, 'releaseType' | 'earliestReleaseDate'>): void;
22
+ setVersionReleasePhased(attributes?: AttributesOf<AppStoreVersionPhasedRelease>): void;
22
23
  setVersionLocale(attributes: AttributesOf<AppStoreVersionLocalization>): void;
23
24
  setReviewDetails(attributes: AttributesOf<AppStoreReviewDetail>): void;
24
25
  }
@@ -82,23 +82,39 @@ class AppleConfigWriter {
82
82
  }
83
83
  }
84
84
  setVersion(attributes) {
85
+ this.schema.version = optional(attributes.versionString);
85
86
  this.schema.copyright = optional(attributes.copyright);
86
87
  }
87
- setVersionRelease(attributes) {
88
- if (attributes.releaseType === apple_utils_1.ReleaseType.SCHEDULED) {
88
+ setVersionReleaseType(attributes) {
89
+ if (attributes.releaseType === apple_utils_1.ReleaseType.SCHEDULED && attributes.earliestReleaseDate) {
89
90
  this.schema.release = {
90
- autoReleaseDate: optional(attributes.earliestReleaseDate),
91
+ ...this.schema.release,
92
+ automaticRelease: attributes.earliestReleaseDate,
91
93
  };
92
94
  }
93
95
  if (attributes.releaseType === apple_utils_1.ReleaseType.AFTER_APPROVAL) {
94
96
  this.schema.release = {
97
+ ...this.schema.release,
95
98
  automaticRelease: true,
96
99
  };
97
100
  }
98
101
  if (attributes.releaseType === apple_utils_1.ReleaseType.MANUAL) {
99
- // ReleaseType.MANUAL is the default behavior, so we don't need to configure it.
100
- // Setting `"automaticRelease": false` is a bit confusing for people who don't know what automaticRelease does.
101
- this.schema.release = undefined;
102
+ this.schema.release = {
103
+ ...this.schema.release,
104
+ automaticRelease: false,
105
+ };
106
+ }
107
+ }
108
+ setVersionReleasePhased(attributes) {
109
+ var _a;
110
+ if (!attributes) {
111
+ (_a = this.schema.release) === null || _a === void 0 ? true : delete _a.phasedRelease;
112
+ }
113
+ else {
114
+ this.schema.release = {
115
+ ...this.schema.release,
116
+ phasedRelease: true,
117
+ };
102
118
  }
103
119
  }
104
120
  setVersionLocale(attributes) {
@@ -1,11 +1,13 @@
1
1
  /// <reference types="@expo/apple-utils/ts-declarations/expo__app-store" />
2
- import { AppStoreVersion, AppStoreVersionLocalization, Platform } from '@expo/apple-utils';
2
+ import { AppStoreVersion, AppStoreVersionLocalization, AppStoreVersionPhasedRelease, Platform } from '@expo/apple-utils';
3
3
  import { AppleTask, TaskDownloadOptions, TaskPrepareOptions, TaskUploadOptions } from '../task';
4
4
  export declare type AppVersionOptions = {
5
5
  /** If we should use the live version of the app (if available - defaults to false) */
6
6
  editLive: boolean;
7
7
  /** The platform to use (defaults to IOS) */
8
8
  platform: Platform;
9
+ /** A version to create or select, if defined in the store configuration */
10
+ version: string | null;
9
11
  };
10
12
  export declare type AppVersionData = {
11
13
  /** The current selected app store version to update */
@@ -16,6 +18,8 @@ export declare type AppVersionData = {
16
18
  versionIsFirst: boolean;
17
19
  /** All version locales that should be, or are enabled */
18
20
  versionLocales: AppStoreVersionLocalization[];
21
+ /** The (existing) phased release configuration, when set */
22
+ versionPhasedRelease: AppStoreVersionPhasedRelease | null;
19
23
  };
20
24
  export declare class AppVersionTask extends AppleTask {
21
25
  private options;