eas-cli 2.5.0 → 2.6.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 (120) hide show
  1. package/README.md +89 -49
  2. package/build/branch/queries.js +3 -22
  3. package/build/build/queries.d.ts +11 -1
  4. package/build/build/queries.js +39 -1
  5. package/build/channel/queries.js +5 -8
  6. package/build/channel/utils.js +22 -22
  7. package/build/commandUtils/context/LoggedInContextField.d.ts +3 -0
  8. package/build/commandUtils/context/LoggedInContextField.js +9 -1
  9. package/build/commandUtils/context/MaybeLoggedInContextField.d.ts +3 -0
  10. package/build/commandUtils/context/MaybeLoggedInContextField.js +9 -1
  11. package/build/commandUtils/context/contextUtils/createGraphqlClient.d.ts +2 -2
  12. package/build/commandUtils/gating/FeatureGateEnvOverrides.d.ts +7 -0
  13. package/build/commandUtils/gating/FeatureGateEnvOverrides.js +35 -0
  14. package/build/commandUtils/gating/FeatureGateKey.d.ts +4 -0
  15. package/build/commandUtils/gating/FeatureGateKey.js +11 -0
  16. package/build/commandUtils/gating/FeatureGateTestOverrides.d.ts +5 -0
  17. package/build/commandUtils/gating/FeatureGateTestOverrides.js +17 -0
  18. package/build/commandUtils/gating/FeatureGating.d.ts +16 -0
  19. package/build/commandUtils/gating/FeatureGating.js +55 -0
  20. package/build/commandUtils/pagination.d.ts +4 -3
  21. package/build/commands/branch/list.d.ts +1 -1
  22. package/build/commands/branch/view.d.ts +1 -1
  23. package/build/commands/build/configure.d.ts +1 -1
  24. package/build/commands/build/index.d.ts +2 -2
  25. package/build/commands/build/list.d.ts +4 -4
  26. package/build/commands/build/list.js +2 -15
  27. package/build/commands/build/run.d.ts +21 -0
  28. package/build/commands/build/run.js +149 -0
  29. package/build/commands/build/version/set.d.ts +1 -1
  30. package/build/commands/build/version/sync.d.ts +1 -1
  31. package/build/commands/channel/list.d.ts +1 -1
  32. package/build/commands/channel/view.d.ts +1 -1
  33. package/build/commands/config.d.ts +1 -1
  34. package/build/commands/credentials.d.ts +1 -1
  35. package/build/commands/device/list.d.ts +1 -1
  36. package/build/commands/metadata/lint.d.ts +12 -0
  37. package/build/commands/metadata/lint.js +72 -0
  38. package/build/commands/metadata/pull.js +20 -9
  39. package/build/commands/metadata/push.js +20 -9
  40. package/build/commands/secret/create.d.ts +1 -1
  41. package/build/commands/secret/list.js +12 -17
  42. package/build/commands/submit.d.ts +1 -1
  43. package/build/commands/update/configure.js +2 -0
  44. package/build/commands/update/list.d.ts +1 -1
  45. package/build/commands/webhook/create.d.ts +1 -1
  46. package/build/commands/webhook/list.d.ts +1 -1
  47. package/build/commands/webhook/update.d.ts +1 -1
  48. package/build/devices/actions/create/inputMethod.js +2 -15
  49. package/build/devices/utils/formatDevice.d.ts +2 -0
  50. package/build/devices/utils/formatDevice.js +32 -7
  51. package/build/env.d.ts +8 -0
  52. package/build/env.js +8 -0
  53. package/build/graphql/generated.d.ts +74 -6
  54. package/build/graphql/generated.js +10 -2
  55. package/build/graphql/mutations/KeystoreGenerationUrlMutation.js +1 -1
  56. package/build/graphql/queries/UserQuery.js +2 -2
  57. package/build/graphql/types/Build.js +1 -0
  58. package/build/metadata/apple/rules/index.d.ts +1 -0
  59. package/build/metadata/apple/rules/index.js +6 -0
  60. package/build/metadata/apple/rules/infoKeywordLength.d.ts +6 -0
  61. package/build/metadata/apple/rules/infoKeywordLength.js +35 -0
  62. package/build/metadata/apple/rules/infoRestrictedWords.d.ts +6 -0
  63. package/build/metadata/apple/rules/infoRestrictedWords.js +57 -0
  64. package/build/metadata/apple/tasks/index.d.ts +1 -2
  65. package/build/metadata/apple/tasks/index.js +1 -1
  66. package/build/metadata/auth.d.ts +21 -0
  67. package/build/metadata/auth.js +33 -0
  68. package/build/metadata/config/issue.d.ts +21 -0
  69. package/build/metadata/config/issue.js +9 -0
  70. package/build/metadata/config/resolve.d.ts +27 -0
  71. package/build/metadata/{config.js → config/resolve.js} +24 -25
  72. package/build/metadata/config/schema.d.ts +7 -0
  73. package/build/metadata/config/schema.js +2 -0
  74. package/build/metadata/config/validate.d.ts +3 -0
  75. package/build/metadata/config/validate.js +47 -0
  76. package/build/metadata/download.d.ts +11 -2
  77. package/build/metadata/download.js +14 -9
  78. package/build/metadata/errors.d.ts +3 -3
  79. package/build/metadata/errors.js +3 -1
  80. package/build/metadata/upload.d.ts +11 -2
  81. package/build/metadata/upload.js +16 -11
  82. package/build/metadata/utils/ajv.d.ts +10 -0
  83. package/build/metadata/utils/ajv.js +30 -0
  84. package/build/metadata/utils/telemetry.js +6 -6
  85. package/build/project/publish.js +8 -14
  86. package/build/run/android/run.d.ts +1 -0
  87. package/build/run/android/run.js +9 -0
  88. package/build/run/ios/run.d.ts +1 -0
  89. package/build/run/ios/run.js +31 -0
  90. package/build/run/ios/simctl.d.ts +2 -0
  91. package/build/run/ios/simctl.js +8 -0
  92. package/build/run/ios/simulator.d.ts +21 -0
  93. package/build/run/ios/simulator.js +161 -0
  94. package/build/run/ios/systemRequirements.d.ts +1 -0
  95. package/build/run/ios/systemRequirements.js +82 -0
  96. package/build/run/ios/xcode.d.ts +4 -0
  97. package/build/run/ios/xcode.js +41 -0
  98. package/build/run/ios/xcrun.d.ts +4 -0
  99. package/build/run/ios/xcrun.js +68 -0
  100. package/build/run/run.d.ts +8 -0
  101. package/build/run/run.js +15 -0
  102. package/build/submit/utils/summary.d.ts +1 -1
  103. package/build/update/queries.js +30 -39
  104. package/build/update/utils.d.ts +8 -1
  105. package/build/update/utils.js +35 -1
  106. package/build/utils/buildDistribution.d.ts +3 -0
  107. package/build/utils/buildDistribution.js +20 -0
  108. package/build/utils/download.d.ts +2 -0
  109. package/build/utils/download.js +114 -0
  110. package/build/utils/expoCli.d.ts +0 -1
  111. package/build/utils/expoCli.js +1 -8
  112. package/build/utils/expodash/filter.d.ts +2 -0
  113. package/build/utils/expodash/filter.js +8 -0
  114. package/build/utils/formatFields.d.ts +3 -2
  115. package/oclif.manifest.json +1 -1
  116. package/package.json +32 -30
  117. package/schema/metadata-0.json +1 -1
  118. package/build/metadata/config.d.ts +0 -41
  119. package/build/metadata/context.d.ts +0 -50
  120. package/build/metadata/context.js +0 -47
@@ -344,6 +344,7 @@ export declare type AccountSsoConfiguration = {
344
344
  issuer?: Maybe<Scalars['String']>;
345
345
  jwksEndpoint?: Maybe<Scalars['String']>;
346
346
  redirectUri: Scalars['String'];
347
+ revokeEndpoint?: Maybe<Scalars['String']>;
347
348
  tokenEndpoint?: Maybe<Scalars['String']>;
348
349
  updatedAt: Scalars['DateTime'];
349
350
  userInfoEndpoint?: Maybe<Scalars['String']>;
@@ -357,6 +358,7 @@ export declare type AccountSsoConfigurationData = {
357
358
  issuer?: InputMaybe<Scalars['String']>;
358
359
  jwksEndpoint?: InputMaybe<Scalars['String']>;
359
360
  redirectUri: Scalars['String'];
361
+ revokeEndpoint?: InputMaybe<Scalars['String']>;
360
362
  tokenEndpoint?: InputMaybe<Scalars['String']>;
361
363
  userInfoEndpoint?: InputMaybe<Scalars['String']>;
362
364
  };
@@ -391,6 +393,7 @@ export declare type AccountSsoConfigurationPublicData = {
391
393
  issuer?: Maybe<Scalars['String']>;
392
394
  jwksEndpoint?: Maybe<Scalars['String']>;
393
395
  redirectUri: Scalars['String'];
396
+ revokeEndpoint?: Maybe<Scalars['String']>;
394
397
  tokenEndpoint?: Maybe<Scalars['String']>;
395
398
  userInfoEndpoint?: Maybe<Scalars['String']>;
396
399
  };
@@ -1456,6 +1459,8 @@ export declare type Build = ActivityTimelineProjectActivity & BuildOrBuildJob &
1456
1459
  __typename?: 'Build';
1457
1460
  activityTimestamp: Scalars['DateTime'];
1458
1461
  actor?: Maybe<Actor>;
1462
+ /** The actual resource class of the builder assigned to the build job */
1463
+ actualResourceClass?: Maybe<BuildResourceClass>;
1459
1464
  appBuildVersion?: Maybe<Scalars['String']>;
1460
1465
  appVersion?: Maybe<Scalars['String']>;
1461
1466
  artifacts?: Maybe<BuildArtifacts>;
@@ -1496,7 +1501,8 @@ export declare type Build = ActivityTimelineProjectActivity & BuildOrBuildJob &
1496
1501
  queuePosition?: Maybe<Scalars['Int']>;
1497
1502
  reactNativeVersion?: Maybe<Scalars['String']>;
1498
1503
  releaseChannel?: Maybe<Scalars['String']>;
1499
- resourceClass?: Maybe<BuildResourceClass>;
1504
+ /** The builder resource class requested by the developer */
1505
+ resourceClass: BuildResourceClass;
1500
1506
  runFromCI?: Maybe<Scalars['Boolean']>;
1501
1507
  runtimeVersion?: Maybe<Scalars['String']>;
1502
1508
  sdkVersion?: Maybe<Scalars['String']>;
@@ -1863,6 +1869,7 @@ export declare type CreateAccessTokenResponse = {
1863
1869
  };
1864
1870
  export declare type CreateAndroidSubmissionInput = {
1865
1871
  appId: Scalars['ID'];
1872
+ archiveSource?: InputMaybe<SubmissionArchiveSourceInput>;
1866
1873
  archiveUrl?: InputMaybe<Scalars['String']>;
1867
1874
  config: AndroidSubmissionConfigInput;
1868
1875
  submittedBuildId?: InputMaybe<Scalars['ID']>;
@@ -1885,6 +1892,7 @@ export declare type CreateGitHubRepositoryInput = {
1885
1892
  appId: Scalars['ID'];
1886
1893
  githubAppInstallationId: Scalars['ID'];
1887
1894
  githubRepositoryIdentifier: Scalars['Int'];
1895
+ nodeIdentifier: Scalars['String'];
1888
1896
  };
1889
1897
  export declare type CreateGitHubRepositorySettingsInput = {
1890
1898
  appId: Scalars['ID'];
@@ -1893,6 +1901,7 @@ export declare type CreateGitHubRepositorySettingsInput = {
1893
1901
  };
1894
1902
  export declare type CreateIosSubmissionInput = {
1895
1903
  appId: Scalars['ID'];
1904
+ archiveSource?: InputMaybe<SubmissionArchiveSourceInput>;
1896
1905
  archiveUrl?: InputMaybe<Scalars['String']>;
1897
1906
  config: IosSubmissionConfigInput;
1898
1907
  submittedBuildId?: InputMaybe<Scalars['ID']>;
@@ -1943,6 +1952,14 @@ export declare type DeleteGoogleServiceAccountKeyResult = {
1943
1952
  __typename?: 'DeleteGoogleServiceAccountKeyResult';
1944
1953
  id: Scalars['ID'];
1945
1954
  };
1955
+ export declare type DeleteIosAppBuildCredentialsResult = {
1956
+ __typename?: 'DeleteIosAppBuildCredentialsResult';
1957
+ id: Scalars['ID'];
1958
+ };
1959
+ export declare type DeleteIosAppCredentialsResult = {
1960
+ __typename?: 'DeleteIosAppCredentialsResult';
1961
+ id: Scalars['ID'];
1962
+ };
1946
1963
  export declare type DeleteRobotResult = {
1947
1964
  __typename?: 'DeleteRobotResult';
1948
1965
  id: Scalars['ID'];
@@ -2099,7 +2116,7 @@ export declare type GetSignedAssetUploadSpecificationsResult = {
2099
2116
  };
2100
2117
  export declare type GitHubAppInstallation = {
2101
2118
  __typename?: 'GitHubAppInstallation';
2102
- accessibleRepositories: Array<GitHubAppInstallationAccessibleRepository>;
2119
+ accessibleRepositories: GitHubRepositoryPaginationResult;
2103
2120
  account: Account;
2104
2121
  actor?: Maybe<Actor>;
2105
2122
  id: Scalars['ID'];
@@ -2116,6 +2133,7 @@ export declare type GitHubAppInstallationAccessibleRepository = {
2116
2133
  description?: Maybe<Scalars['String']>;
2117
2134
  id: Scalars['Int'];
2118
2135
  name: Scalars['String'];
2136
+ nodeId: Scalars['String'];
2119
2137
  owner: GitHubRepositoryOwner;
2120
2138
  private: Scalars['Boolean'];
2121
2139
  url: Scalars['String'];
@@ -2148,12 +2166,14 @@ export declare type GitHubAppQuery = {
2148
2166
  __typename?: 'GitHubAppQuery';
2149
2167
  appIdentifier: Scalars['String'];
2150
2168
  clientIdentifier: Scalars['String'];
2151
- searchRepositories: Array<GitHubAppInstallationAccessibleRepository>;
2169
+ installation: GitHubAppInstallation;
2170
+ searchRepositories: GitHubRepositoryPaginationResult;
2171
+ };
2172
+ export declare type GitHubAppQueryInstallationArgs = {
2173
+ id: Scalars['ID'];
2152
2174
  };
2153
2175
  export declare type GitHubAppQuerySearchRepositoriesArgs = {
2154
2176
  githubAppInstallationId: Scalars['ID'];
2155
- page?: InputMaybe<Scalars['Int']>;
2156
- perPage?: InputMaybe<Scalars['Int']>;
2157
2177
  query: Scalars['String'];
2158
2178
  };
2159
2179
  export declare type GitHubRepository = {
@@ -2163,6 +2183,7 @@ export declare type GitHubRepository = {
2163
2183
  githubRepositoryIdentifier: Scalars['Int'];
2164
2184
  id: Scalars['ID'];
2165
2185
  metadata?: Maybe<GitHubRepositoryMetadata>;
2186
+ nodeIdentifier: Scalars['String'];
2166
2187
  };
2167
2188
  export declare type GitHubRepositoryMetadata = {
2168
2189
  __typename?: 'GitHubRepositoryMetadata';
@@ -2194,6 +2215,11 @@ export declare type GitHubRepositoryOwner = {
2194
2215
  login: Scalars['String'];
2195
2216
  url: Scalars['String'];
2196
2217
  };
2218
+ export declare type GitHubRepositoryPaginationResult = {
2219
+ __typename?: 'GitHubRepositoryPaginationResult';
2220
+ repositories: Array<GitHubAppInstallationAccessibleRepository>;
2221
+ totalCount: Scalars['Int'];
2222
+ };
2197
2223
  export declare type GitHubRepositorySettings = {
2198
2224
  __typename?: 'GitHubRepositorySettings';
2199
2225
  app: App;
@@ -2332,6 +2358,8 @@ export declare type IosAppBuildCredentialsMutation = {
2332
2358
  __typename?: 'IosAppBuildCredentialsMutation';
2333
2359
  /** Create a set of build credentials for an iOS app */
2334
2360
  createIosAppBuildCredentials: IosAppBuildCredentials;
2361
+ /** Disassociate the build credentials from an iOS app */
2362
+ deleteIosAppBuildCredentials: DeleteIosAppBuildCredentialsResult;
2335
2363
  /** Set the distribution certificate to be used for an iOS app */
2336
2364
  setDistributionCertificate: IosAppBuildCredentials;
2337
2365
  /** Set the provisioning profile to be used for an iOS app */
@@ -2341,6 +2369,9 @@ export declare type IosAppBuildCredentialsMutationCreateIosAppBuildCredentialsAr
2341
2369
  iosAppBuildCredentialsInput: IosAppBuildCredentialsInput;
2342
2370
  iosAppCredentialsId: Scalars['ID'];
2343
2371
  };
2372
+ export declare type IosAppBuildCredentialsMutationDeleteIosAppBuildCredentialsArgs = {
2373
+ id: Scalars['ID'];
2374
+ };
2344
2375
  export declare type IosAppBuildCredentialsMutationSetDistributionCertificateArgs = {
2345
2376
  distributionCertificateId: Scalars['ID'];
2346
2377
  id: Scalars['ID'];
@@ -2379,6 +2410,8 @@ export declare type IosAppCredentialsMutation = {
2379
2410
  __typename?: 'IosAppCredentialsMutation';
2380
2411
  /** Create a set of credentials for an iOS app */
2381
2412
  createIosAppCredentials: IosAppCredentials;
2413
+ /** Delete a set of credentials for an iOS app */
2414
+ deleteIosAppCredentials: DeleteIosAppCredentialsResult;
2382
2415
  /** Set the App Store Connect Api Key to be used for submitting an iOS app */
2383
2416
  setAppStoreConnectApiKeyForSubmissions: IosAppCredentials;
2384
2417
  /** Set the push key to be used in an iOS app */
@@ -2389,6 +2422,9 @@ export declare type IosAppCredentialsMutationCreateIosAppCredentialsArgs = {
2389
2422
  appleAppIdentifierId: Scalars['ID'];
2390
2423
  iosAppCredentialsInput: IosAppCredentialsInput;
2391
2424
  };
2425
+ export declare type IosAppCredentialsMutationDeleteIosAppCredentialsArgs = {
2426
+ id: Scalars['ID'];
2427
+ };
2392
2428
  export declare type IosAppCredentialsMutationSetAppStoreConnectApiKeyForSubmissionsArgs = {
2393
2429
  ascApiKeyId: Scalars['ID'];
2394
2430
  id: Scalars['ID'];
@@ -2397,6 +2433,13 @@ export declare type IosAppCredentialsMutationSetPushKeyArgs = {
2397
2433
  id: Scalars['ID'];
2398
2434
  pushKeyId: Scalars['ID'];
2399
2435
  };
2436
+ export declare type IosAppCredentialsQuery = {
2437
+ __typename?: 'IosAppCredentialsQuery';
2438
+ byId: IosAppCredentials;
2439
+ };
2440
+ export declare type IosAppCredentialsQueryByIdArgs = {
2441
+ iosAppCredentialsId: Scalars['ID'];
2442
+ };
2400
2443
  /** @deprecated Use developmentClient option instead. */
2401
2444
  export declare enum IosBuildType {
2402
2445
  DevelopmentClient = "DEVELOPMENT_CLIENT",
@@ -2926,6 +2969,8 @@ export declare type RootQuery = {
2926
2969
  githubApp: GitHubAppQuery;
2927
2970
  /** Top-level query object for querying Stripe Invoices. */
2928
2971
  invoice: InvoiceQuery;
2972
+ /** Top-level query object for querying IosAppCredentials. */
2973
+ iosAppCredentials: IosAppCredentialsQuery;
2929
2974
  /**
2930
2975
  * If authenticated as a typical end user, this is the appropriate top-level
2931
2976
  * query object
@@ -3211,6 +3256,18 @@ export declare enum SubmissionAndroidTrack {
3211
3256
  Internal = "INTERNAL",
3212
3257
  Production = "PRODUCTION"
3213
3258
  }
3259
+ export declare type SubmissionArchiveSourceInput = {
3260
+ /** Required if the archive source type is GCS_BUILD_APPLICATION_ARCHIVE or GCS_SUBMIT_ARCHIVE */
3261
+ bucketKey?: InputMaybe<Scalars['String']>;
3262
+ type: SubmissionArchiveSourceType;
3263
+ /** Required if the archive source type is URL */
3264
+ url?: InputMaybe<Scalars['String']>;
3265
+ };
3266
+ export declare enum SubmissionArchiveSourceType {
3267
+ GcsBuildApplicationArchive = "GCS_BUILD_APPLICATION_ARCHIVE",
3268
+ GcsSubmitArchive = "GCS_SUBMIT_ARCHIVE",
3269
+ Url = "URL"
3270
+ }
3214
3271
  export declare type SubmissionError = {
3215
3272
  __typename?: 'SubmissionError';
3216
3273
  errorCode?: Maybe<Scalars['String']>;
@@ -3423,8 +3480,10 @@ export declare type UploadSessionCreateUploadSessionArgs = {
3423
3480
  type: UploadSessionType;
3424
3481
  };
3425
3482
  export declare enum UploadSessionType {
3483
+ EasBuildGcsProjectSources = "EAS_BUILD_GCS_PROJECT_SOURCES",
3426
3484
  EasBuildProjectSources = "EAS_BUILD_PROJECT_SOURCES",
3427
- EasSubmitAppArchive = "EAS_SUBMIT_APP_ARCHIVE"
3485
+ EasSubmitAppArchive = "EAS_SUBMIT_APP_ARCHIVE",
3486
+ EasSubmitGcsAppArchive = "EAS_SUBMIT_GCS_APP_ARCHIVE"
3428
3487
  }
3429
3488
  export declare type UsageMetricTotal = {
3430
3489
  __typename?: 'UsageMetricTotal';
@@ -6644,6 +6703,7 @@ export declare type CreateAndroidBuildMutation = {
6644
6703
  __typename?: 'BuildArtifacts';
6645
6704
  buildUrl?: string | null;
6646
6705
  xcodeBuildLogsUrl?: string | null;
6706
+ applicationArchiveUrl?: string | null;
6647
6707
  } | null;
6648
6708
  initiatingActor?: {
6649
6709
  __typename: 'Robot';
@@ -6722,6 +6782,7 @@ export declare type CreateIosBuildMutation = {
6722
6782
  __typename?: 'BuildArtifacts';
6723
6783
  buildUrl?: string | null;
6724
6784
  xcodeBuildLogsUrl?: string | null;
6785
+ applicationArchiveUrl?: string | null;
6725
6786
  } | null;
6726
6787
  initiatingActor?: {
6727
6788
  __typename: 'Robot';
@@ -7258,6 +7319,7 @@ export declare type BuildsByIdQuery = {
7258
7319
  __typename?: 'BuildArtifacts';
7259
7320
  buildUrl?: string | null;
7260
7321
  xcodeBuildLogsUrl?: string | null;
7322
+ applicationArchiveUrl?: string | null;
7261
7323
  } | null;
7262
7324
  initiatingActor?: {
7263
7325
  __typename: 'Robot';
@@ -7359,6 +7421,7 @@ export declare type BuildsWithSubmissionsByIdQuery = {
7359
7421
  __typename?: 'BuildArtifacts';
7360
7422
  buildUrl?: string | null;
7361
7423
  xcodeBuildLogsUrl?: string | null;
7424
+ applicationArchiveUrl?: string | null;
7362
7425
  } | null;
7363
7426
  initiatingActor?: {
7364
7427
  __typename: 'Robot';
@@ -7432,6 +7495,7 @@ export declare type ViewBuildsOnAppQuery = {
7432
7495
  __typename?: 'BuildArtifacts';
7433
7496
  buildUrl?: string | null;
7434
7497
  xcodeBuildLogsUrl?: string | null;
7498
+ applicationArchiveUrl?: string | null;
7435
7499
  } | null;
7436
7500
  initiatingActor?: {
7437
7501
  __typename: 'Robot';
@@ -7862,6 +7926,7 @@ export declare type CurrentUserQuery = {
7862
7926
  __typename: 'Robot';
7863
7927
  firstName?: string | null;
7864
7928
  id: string;
7929
+ featureGates: any;
7865
7930
  isExpoAdmin: boolean;
7866
7931
  accounts: Array<{
7867
7932
  __typename?: 'Account';
@@ -7883,6 +7948,7 @@ export declare type CurrentUserQuery = {
7883
7948
  __typename: 'User';
7884
7949
  username: string;
7885
7950
  id: string;
7951
+ featureGates: any;
7886
7952
  isExpoAdmin: boolean;
7887
7953
  primaryAccount: {
7888
7954
  __typename?: 'Account';
@@ -8026,6 +8092,7 @@ export declare type BuildFragment = {
8026
8092
  __typename?: 'BuildArtifacts';
8027
8093
  buildUrl?: string | null;
8028
8094
  xcodeBuildLogsUrl?: string | null;
8095
+ applicationArchiveUrl?: string | null;
8029
8096
  } | null;
8030
8097
  initiatingActor?: {
8031
8098
  __typename: 'Robot';
@@ -8118,6 +8185,7 @@ export declare type BuildWithSubmissionsFragment = {
8118
8185
  __typename?: 'BuildArtifacts';
8119
8186
  buildUrl?: string | null;
8120
8187
  xcodeBuildLogsUrl?: string | null;
8188
+ applicationArchiveUrl?: string | null;
8121
8189
  } | null;
8122
8190
  initiatingActor?: {
8123
8191
  __typename: 'Robot';
@@ -6,8 +6,8 @@
6
6
  * For more info and docs, visit https://graphql-code-generator.com/
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.UploadSessionType = exports.SubmissionStatus = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = exports.StatuspageServiceStatus = exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ProjectArchiveSourceType = exports.Permission = exports.Order = exports.OfferType = exports.MailchimpTag = exports.MailchimpAudience = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.GitHubAppInstallationStatus = exports.Feature = exports.EnvironmentSecretType = exports.EasServiceMetric = exports.EasBuildDeprecationInfoType = exports.DistributionType = exports.CacheControlScope = exports.BuildWorkflow = exports.BuildStatus = exports.BuildResourceClass = exports.BuildPriority = exports.BuildJobStatus = exports.BuildJobLogsFormat = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.AuthProtocolType = exports.AssetMetadataStatus = exports.AppsFilter = exports.AppleDeviceClass = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppPrivacy = exports.AppPlatform = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = void 0;
10
- exports.WebhookType = exports.UsageMetricsGranularity = exports.UsageMetricType = void 0;
9
+ exports.SubmissionStatus = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = exports.StatuspageServiceStatus = exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ProjectArchiveSourceType = exports.Permission = exports.Order = exports.OfferType = exports.MailchimpTag = exports.MailchimpAudience = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.GitHubAppInstallationStatus = exports.Feature = exports.EnvironmentSecretType = exports.EasServiceMetric = exports.EasBuildDeprecationInfoType = exports.DistributionType = exports.CacheControlScope = exports.BuildWorkflow = exports.BuildStatus = exports.BuildResourceClass = exports.BuildPriority = exports.BuildJobStatus = exports.BuildJobLogsFormat = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.AuthProtocolType = exports.AssetMetadataStatus = exports.AppsFilter = exports.AppleDeviceClass = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppPrivacy = exports.AppPlatform = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = void 0;
10
+ exports.WebhookType = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = void 0;
11
11
  var ActivityTimelineProjectActivityType;
12
12
  (function (ActivityTimelineProjectActivityType) {
13
13
  ActivityTimelineProjectActivityType["Build"] = "BUILD";
@@ -340,6 +340,12 @@ var SubmissionAndroidTrack;
340
340
  SubmissionAndroidTrack["Internal"] = "INTERNAL";
341
341
  SubmissionAndroidTrack["Production"] = "PRODUCTION";
342
342
  })(SubmissionAndroidTrack = exports.SubmissionAndroidTrack || (exports.SubmissionAndroidTrack = {}));
343
+ var SubmissionArchiveSourceType;
344
+ (function (SubmissionArchiveSourceType) {
345
+ SubmissionArchiveSourceType["GcsBuildApplicationArchive"] = "GCS_BUILD_APPLICATION_ARCHIVE";
346
+ SubmissionArchiveSourceType["GcsSubmitArchive"] = "GCS_SUBMIT_ARCHIVE";
347
+ SubmissionArchiveSourceType["Url"] = "URL";
348
+ })(SubmissionArchiveSourceType = exports.SubmissionArchiveSourceType || (exports.SubmissionArchiveSourceType = {}));
343
349
  var SubmissionStatus;
344
350
  (function (SubmissionStatus) {
345
351
  SubmissionStatus["AwaitingBuild"] = "AWAITING_BUILD";
@@ -351,8 +357,10 @@ var SubmissionStatus;
351
357
  })(SubmissionStatus = exports.SubmissionStatus || (exports.SubmissionStatus = {}));
352
358
  var UploadSessionType;
353
359
  (function (UploadSessionType) {
360
+ UploadSessionType["EasBuildGcsProjectSources"] = "EAS_BUILD_GCS_PROJECT_SOURCES";
354
361
  UploadSessionType["EasBuildProjectSources"] = "EAS_BUILD_PROJECT_SOURCES";
355
362
  UploadSessionType["EasSubmitAppArchive"] = "EAS_SUBMIT_APP_ARCHIVE";
363
+ UploadSessionType["EasSubmitGcsAppArchive"] = "EAS_SUBMIT_GCS_APP_ARCHIVE";
356
364
  })(UploadSessionType = exports.UploadSessionType || (exports.UploadSessionType = {}));
357
365
  var UsageMetricType;
358
366
  (function (UsageMetricType) {
@@ -16,7 +16,7 @@ exports.KeystoreGenerationUrlMutation = {
16
16
  }
17
17
  }
18
18
  }
19
- `)
19
+ `, {})
20
20
  .toPromise());
21
21
  return data.keystoreGenerationUrl.createKeystoreGenerationUrl.url;
22
22
  },
@@ -28,12 +28,12 @@ exports.UserQuery = {
28
28
  id
29
29
  ...AccountFragment
30
30
  }
31
+ featureGates
31
32
  isExpoAdmin
32
33
  }
33
34
  }
34
35
  ${(0, graphql_1.print)(Account_1.AccountFragmentNode)}
35
- `,
36
- /* variables */ undefined, {
36
+ `, {}, {
37
37
  additionalTypenames: ['User'],
38
38
  })
39
39
  .toPromise());
@@ -18,6 +18,7 @@ exports.BuildFragmentNode = (0, graphql_tag_1.default) `
18
18
  artifacts {
19
19
  buildUrl
20
20
  xcodeBuildLogsUrl
21
+ applicationArchiveUrl
21
22
  }
22
23
  initiatingActor {
23
24
  __typename
@@ -0,0 +1 @@
1
+ export declare const appleRules: import("../../config/issue").IssueRule<import("../../config/schema").MetadataConfig>[];
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appleRules = void 0;
4
+ const infoKeywordLength_1 = require("./infoKeywordLength");
5
+ const infoRestrictedWords_1 = require("./infoRestrictedWords");
6
+ exports.appleRules = [infoKeywordLength_1.infoKeywordLength, infoRestrictedWords_1.infoRestrictedWords];
@@ -0,0 +1,6 @@
1
+ import { IssueRule } from '../../config/issue';
2
+ /**
3
+ * Keywords are limited to 100 characters when converted to a comma separated string.
4
+ * @see https://developer.apple.com/app-store/search/
5
+ */
6
+ export declare const infoKeywordLength: IssueRule;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.infoKeywordLength = void 0;
4
+ const filter_1 = require("../../../utils/expodash/filter");
5
+ const KEYWORD_CHARACTER_LIMIT = 100;
6
+ /**
7
+ * Keywords are limited to 100 characters when converted to a comma separated string.
8
+ * @see https://developer.apple.com/app-store/search/
9
+ */
10
+ exports.infoKeywordLength = {
11
+ id: 'apple.info.keyword.length',
12
+ severity: 2,
13
+ validate(config) {
14
+ var _a;
15
+ if (!((_a = config.apple) === null || _a === void 0 ? void 0 : _a.info) || Object.keys(config.apple.info).length === 0) {
16
+ return null;
17
+ }
18
+ return Object.keys(config.apple.info)
19
+ .map(locale => {
20
+ var _a, _b, _c;
21
+ const keywords = (_c = (_b = (_a = config.apple) === null || _a === void 0 ? void 0 : _a.info) === null || _b === void 0 ? void 0 : _b[locale].keywords) !== null && _c !== void 0 ? _c : [];
22
+ const length = keywords.join(',').length;
23
+ if (length > KEYWORD_CHARACTER_LIMIT) {
24
+ return {
25
+ id: this.id,
26
+ severity: this.severity,
27
+ path: ['apple', 'info', locale, 'keywords'],
28
+ message: `Keywords are limited to ${KEYWORD_CHARACTER_LIMIT} characters, but found ${length}.`,
29
+ };
30
+ }
31
+ return null;
32
+ })
33
+ .filter(filter_1.truthy);
34
+ },
35
+ };
@@ -0,0 +1,6 @@
1
+ import { IssueRule } from '../../config/issue';
2
+ /**
3
+ * Apple restricts certain words from being used in name, description, or keywords.
4
+ * Using these words likely result in a rejection.
5
+ */
6
+ export declare const infoRestrictedWords: IssueRule;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.infoRestrictedWords = void 0;
4
+ const filter_1 = require("../../../utils/expodash/filter");
5
+ const RESTRICTED_PROPERTIES = ['title', 'subtitle', 'description', 'keywords'];
6
+ const RESTRICTED_WORDS = {
7
+ beta: 'Apple restricts the word "beta" and synonyms implying incomplete functionality.',
8
+ };
9
+ /**
10
+ * Apple restricts certain words from being used in name, description, or keywords.
11
+ * Using these words likely result in a rejection.
12
+ */
13
+ exports.infoRestrictedWords = {
14
+ id: 'apple.info.restrictedWords',
15
+ severity: 1,
16
+ validate(config) {
17
+ var _a;
18
+ if (!((_a = config.apple) === null || _a === void 0 ? void 0 : _a.info) || Object.keys(config.apple.info).length === 0) {
19
+ return null;
20
+ }
21
+ return Object.keys(config.apple.info)
22
+ .map(locale => RESTRICTED_PROPERTIES.map(property => {
23
+ var _a, _b;
24
+ const value = getStringValue((_b = (_a = config.apple) === null || _a === void 0 ? void 0 : _a.info) === null || _b === void 0 ? void 0 : _b[locale][property]);
25
+ const issueDescription = getDescriptionForFirstMatch(value);
26
+ if (issueDescription) {
27
+ return {
28
+ id: this.id,
29
+ severity: this.severity,
30
+ path: ['apple', 'info', locale, property],
31
+ message: issueDescription,
32
+ };
33
+ }
34
+ return null;
35
+ }).filter(filter_1.truthy))
36
+ .filter(filter_1.truthy)
37
+ .flat();
38
+ },
39
+ };
40
+ function getDescriptionForFirstMatch(value) {
41
+ const sanitized = value.toLowerCase();
42
+ for (const [word, description] of Object.entries(RESTRICTED_WORDS)) {
43
+ if (sanitized.includes(word)) {
44
+ return description;
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ function getStringValue(value) {
50
+ if (!value) {
51
+ return '';
52
+ }
53
+ if (Array.isArray(value)) {
54
+ return value.join(' ');
55
+ }
56
+ return value;
57
+ }
@@ -1,4 +1,3 @@
1
- import { MetadataContext } from '../../context';
2
1
  import { AppleTask } from '../task';
3
2
  import { AppVersionOptions } from './app-version';
4
3
  declare type AppleTaskOptions = {
@@ -7,5 +6,5 @@ declare type AppleTaskOptions = {
7
6
  /**
8
7
  * List of all eligible tasks to sync local store configuration to the App store.
9
8
  */
10
- export declare function createAppleTasks(_ctx: MetadataContext, { version }?: AppleTaskOptions): AppleTask[];
9
+ export declare function createAppleTasks({ version }?: AppleTaskOptions): AppleTask[];
11
10
  export {};
@@ -8,7 +8,7 @@ const app_version_1 = require("./app-version");
8
8
  /**
9
9
  * List of all eligible tasks to sync local store configuration to the App store.
10
10
  */
11
- function createAppleTasks(_ctx, { version } = {}) {
11
+ function createAppleTasks({ version } = {}) {
12
12
  return [
13
13
  new app_version_1.AppVersionTask({ version }),
14
14
  new app_info_1.AppInfoTask(),
@@ -0,0 +1,21 @@
1
+ /// <reference types="@expo/apple-utils/ts-declarations/expo__app-store" />
2
+ import { App, Session } from '@expo/apple-utils';
3
+ import { ExpoConfig } from '@expo/config';
4
+ import { SubmitProfile } from '@expo/eas-json';
5
+ import { CredentialsContext } from '../credentials/context';
6
+ export declare type MetadataAppStoreAuthentication = {
7
+ /** The root entity of the App store */
8
+ app: App;
9
+ /** The authentication state we used to fetch the root entity */
10
+ auth: Partial<Session.AuthState>;
11
+ };
12
+ /**
13
+ * To start syncing ASC entities, we need access to the apple utils App instance.
14
+ * This resolves both the authentication and that App instance.
15
+ */
16
+ export declare function getAppStoreAuthAsync({ projectDir, profile, exp, credentialsCtx, }: {
17
+ projectDir: string;
18
+ profile: SubmitProfile;
19
+ exp: ExpoConfig;
20
+ credentialsCtx: CredentialsContext;
21
+ }): Promise<MetadataAppStoreAuthentication>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAppStoreAuthAsync = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const apple_utils_1 = require("@expo/apple-utils");
6
+ const assert_1 = tslib_1.__importDefault(require("assert"));
7
+ const authenticate_1 = require("../credentials/ios/appstore/authenticate");
8
+ const bundleIdentifier_1 = require("../project/ios/bundleIdentifier");
9
+ /**
10
+ * Resolve the bundle identifier from the selected submit profile.
11
+ * This bundle identifier is used as target for the metadata submission.
12
+ */
13
+ async function resolveAppStoreBundleIdentifierAsync(projectDir, profile, exp) {
14
+ var _a;
15
+ if ('bundleIdentifier' in profile) {
16
+ return (_a = profile.bundleIdentifier) !== null && _a !== void 0 ? _a : (await (0, bundleIdentifier_1.getBundleIdentifierAsync)(projectDir, exp));
17
+ }
18
+ return await (0, bundleIdentifier_1.getBundleIdentifierAsync)(projectDir, exp);
19
+ }
20
+ /**
21
+ * To start syncing ASC entities, we need access to the apple utils App instance.
22
+ * This resolves both the authentication and that App instance.
23
+ */
24
+ async function getAppStoreAuthAsync({ projectDir, profile, exp, credentialsCtx, }) {
25
+ const bundleId = await resolveAppStoreBundleIdentifierAsync(projectDir, profile, exp);
26
+ const authCtx = await credentialsCtx.appStore.ensureAuthenticatedAsync();
27
+ (0, assert_1.default)(authCtx.authState, 'Failed to authenticate with App Store Connect');
28
+ // TODO: improve error handling by mentioning possible configuration errors
29
+ const app = await apple_utils_1.App.findAsync((0, authenticate_1.getRequestContext)(authCtx), { bundleId });
30
+ (0, assert_1.default)(app, `Failed to load app "${bundleId}" from App Store Connect`);
31
+ return { app, auth: authCtx.authState };
32
+ }
33
+ exports.getAppStoreAuthAsync = getAppStoreAuthAsync;
@@ -0,0 +1,21 @@
1
+ import { MetadataConfig } from './schema';
2
+ export declare enum IssueSeverity {
3
+ info = 0,
4
+ warn = 1,
5
+ error = 2
6
+ }
7
+ export interface Issue {
8
+ /** The type of issue, auto-generated for AJV errors based on the validation type */
9
+ id: string;
10
+ /** The severity of the lint message */
11
+ severity: IssueSeverity;
12
+ /** The data path, using segments, to the source of this message */
13
+ path: string[];
14
+ /** A human readable description of the issue, presented to users */
15
+ message: string;
16
+ }
17
+ export interface IssueRule<Data = MetadataConfig> {
18
+ id: string;
19
+ severity: IssueSeverity;
20
+ validate(config: Data): null | Issue | Issue[];
21
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IssueSeverity = void 0;
4
+ var IssueSeverity;
5
+ (function (IssueSeverity) {
6
+ IssueSeverity[IssueSeverity["info"] = 0] = "info";
7
+ IssueSeverity[IssueSeverity["warn"] = 1] = "warn";
8
+ IssueSeverity[IssueSeverity["error"] = 2] = "error";
9
+ })(IssueSeverity = exports.IssueSeverity || (exports.IssueSeverity = {}));
@@ -0,0 +1,27 @@
1
+ import { SubmitProfile } from '@expo/eas-json';
2
+ import { AppleConfigReader } from '../apple/config/reader';
3
+ import { AppleConfigWriter } from '../apple/config/writer';
4
+ import { MetadataConfig } from './schema';
5
+ /**
6
+ * Get the static configuration file path, based on the metadata context.
7
+ * This uses any custom name provided, but swaps out the extension for `.json`.
8
+ */
9
+ export declare function getStaticConfigFilePath({ projectDir, profile, }: {
10
+ projectDir: string;
11
+ profile: SubmitProfile;
12
+ }): string;
13
+ /**
14
+ * Load the store configuration from a metadata context.
15
+ * This can load `.json` and `.js` config files, using `require`.
16
+ * It throws MetadataValidationErrors when the file doesn't exist, or contains errors.
17
+ * The user is prompted to try anyway when errors are found.
18
+ */
19
+ export declare function loadConfigAsync({ projectDir, profile, skipValidation, }: {
20
+ projectDir: string;
21
+ profile: SubmitProfile;
22
+ skipValidation?: boolean;
23
+ }): Promise<MetadataConfig>;
24
+ /** Create a versioned deserializer to fetch App Store data from the store configuration. */
25
+ export declare function createAppleReader(config: MetadataConfig): AppleConfigReader;
26
+ /** Create the serializer to write the App Store to the store configuration. */
27
+ export declare function createAppleWriter(): AppleConfigWriter;