eas-cli 0.29.0 → 0.31.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 (148) hide show
  1. package/README.md +26 -26
  2. package/build/analytics.js +6 -9
  3. package/build/build/android/build.js +6 -8
  4. package/build/build/android/configure.d.ts +6 -1
  5. package/build/build/android/configure.js +31 -5
  6. package/build/build/android/prepareJob.js +3 -3
  7. package/build/build/android/version.d.ts +15 -0
  8. package/build/build/android/version.js +75 -1
  9. package/build/build/context.d.ts +2 -0
  10. package/build/build/context.js +8 -0
  11. package/build/build/ios/UpdatesModule.js +3 -1
  12. package/build/build/ios/configure.js +1 -1
  13. package/build/build/ios/credentials.js +2 -7
  14. package/build/build/ios/prepareJob.js +3 -14
  15. package/build/build/ios/version.d.ts +1 -1
  16. package/build/build/ios/version.js +5 -23
  17. package/build/build/utils/printBuildInfo.js +1 -1
  18. package/build/build/utils/updates.js +1 -1
  19. package/build/build/utils/version.d.ts +7 -0
  20. package/build/build/utils/version.js +37 -0
  21. package/build/commands/branch/create.js +1 -4
  22. package/build/commands/branch/delete.js +1 -4
  23. package/build/commands/branch/list.js +1 -4
  24. package/build/commands/branch/publish.js +2 -5
  25. package/build/commands/branch/rename.js +1 -4
  26. package/build/commands/branch/view.js +1 -4
  27. package/build/commands/build/cancel.js +1 -2
  28. package/build/commands/build/configure.js +2 -2
  29. package/build/commands/build/index.js +15 -6
  30. package/build/commands/build/list.js +1 -2
  31. package/build/commands/build/view.js +1 -2
  32. package/build/commands/channel/create.js +1 -4
  33. package/build/commands/channel/edit.js +1 -4
  34. package/build/commands/channel/list.js +1 -4
  35. package/build/commands/channel/rollout.js +1 -4
  36. package/build/commands/channel/view.js +1 -4
  37. package/build/commands/config.js +1 -2
  38. package/build/commands/credentials.js +5 -1
  39. package/build/commands/device/list.js +1 -2
  40. package/build/commands/device/view.js +1 -2
  41. package/build/commands/project/info.js +1 -4
  42. package/build/commands/project/init.js +1 -4
  43. package/build/commands/secret/create.js +1 -2
  44. package/build/commands/secret/delete.js +1 -2
  45. package/build/commands/secret/list.js +1 -2
  46. package/build/commands/submit.js +2 -3
  47. package/build/commands/webhook/create.js +1 -4
  48. package/build/commands/webhook/delete.js +1 -4
  49. package/build/commands/webhook/list.js +1 -4
  50. package/build/credentials/android/AndroidCredentialsProvider.d.ts +2 -2
  51. package/build/credentials/android/actions/AssignFcm.d.ts +2 -2
  52. package/build/credentials/android/actions/AssignGoogleServiceAccountKey.d.ts +8 -0
  53. package/build/credentials/android/actions/AssignGoogleServiceAccountKey.js +19 -0
  54. package/build/credentials/android/actions/BuildCredentialsUtils.d.ts +5 -5
  55. package/build/credentials/android/actions/CreateFcm.d.ts +2 -2
  56. package/build/credentials/android/actions/CreateGoogleServiceAccountKey.d.ts +3 -2
  57. package/build/credentials/android/actions/CreateGoogleServiceAccountKey.js +19 -11
  58. package/build/credentials/android/actions/CreateKeystore.d.ts +2 -2
  59. package/build/credentials/android/actions/DownloadKeystore.d.ts +3 -3
  60. package/build/credentials/android/actions/RemoveFcm.d.ts +2 -2
  61. package/build/credentials/android/actions/RemoveGoogleServiceAccountKey.d.ts +13 -0
  62. package/build/credentials/android/actions/RemoveGoogleServiceAccountKey.js +48 -0
  63. package/build/credentials/android/actions/RemoveKeystore.d.ts +2 -2
  64. package/build/credentials/android/actions/SetupBuildCredentials.d.ts +5 -5
  65. package/build/credentials/android/actions/SetupBuildCredentialsFromCredentialsJson.d.ts +2 -2
  66. package/build/credentials/android/actions/SetupGoogleServiceAccountKey.d.ts +10 -0
  67. package/build/credentials/android/actions/SetupGoogleServiceAccountKey.js +59 -0
  68. package/build/credentials/android/actions/UpdateCredentialsJson.d.ts +2 -2
  69. package/build/credentials/android/actions/UseExistingGoogleServiceAccountKey.d.ts +8 -0
  70. package/build/credentials/android/actions/UseExistingGoogleServiceAccountKey.js +23 -0
  71. package/build/credentials/android/api/GraphqlClient.d.ts +5 -2
  72. package/build/credentials/android/api/GraphqlClient.js +20 -3
  73. package/build/credentials/android/api/graphql/mutations/AndroidAppCredentialsMutation.d.ts +1 -0
  74. package/build/credentials/android/api/graphql/mutations/AndroidAppCredentialsMutation.js +26 -0
  75. package/build/credentials/android/api/graphql/mutations/GoogleServiceAccountKeyMutation.d.ts +1 -0
  76. package/build/credentials/android/api/graphql/mutations/GoogleServiceAccountKeyMutation.js +17 -0
  77. package/build/credentials/android/api/graphql/queries/GoogleServiceAccountKeyQuery.d.ts +4 -0
  78. package/build/credentials/android/api/graphql/queries/GoogleServiceAccountKeyQuery.js +31 -0
  79. package/build/credentials/android/credentials.d.ts +2 -0
  80. package/build/credentials/android/utils/googleServiceAccountKey.d.ts +3 -0
  81. package/build/credentials/android/utils/googleServiceAccountKey.js +90 -1
  82. package/build/credentials/android/utils/printCredentials.js +67 -28
  83. package/build/credentials/context.d.ts +17 -21
  84. package/build/credentials/context.js +21 -26
  85. package/build/credentials/credentialsJson/update.d.ts +3 -3
  86. package/build/credentials/ios/IosCredentialsProvider.d.ts +2 -2
  87. package/build/credentials/ios/actions/AppleTeamUtils.d.ts +2 -2
  88. package/build/credentials/ios/actions/AssignPushKey.d.ts +2 -2
  89. package/build/credentials/ios/actions/BuildCredentialsUtils.d.ts +8 -8
  90. package/build/credentials/ios/actions/ConfigureProvisioningProfile.d.ts +2 -2
  91. package/build/credentials/ios/actions/CreateDistributionCertificate.d.ts +2 -2
  92. package/build/credentials/ios/actions/CreateProvisioningProfile.d.ts +2 -2
  93. package/build/credentials/ios/actions/CreatePushKey.d.ts +2 -2
  94. package/build/credentials/ios/actions/DistributionCertificateUtils.d.ts +4 -4
  95. package/build/credentials/ios/actions/DistributionCertificateUtils.js +3 -3
  96. package/build/credentials/ios/actions/ProvisioningProfileUtils.d.ts +2 -2
  97. package/build/credentials/ios/actions/PushKeyUtils.d.ts +4 -4
  98. package/build/credentials/ios/actions/RemoveDistributionCertificate.d.ts +3 -3
  99. package/build/credentials/ios/actions/RemoveProvisioningProfile.d.ts +2 -2
  100. package/build/credentials/ios/actions/RemovePushKey.d.ts +3 -3
  101. package/build/credentials/ios/actions/SetupAdhocProvisioningProfile.d.ts +4 -3
  102. package/build/credentials/ios/actions/SetupAdhocProvisioningProfile.js +48 -4
  103. package/build/credentials/ios/actions/SetupBuildCredentials.d.ts +2 -2
  104. package/build/credentials/ios/actions/SetupBuildCredentialsFromCredentialsJson.d.ts +2 -2
  105. package/build/credentials/ios/actions/SetupDistributionCertificate.d.ts +3 -3
  106. package/build/credentials/ios/actions/SetupInternalProvisioningProfile.d.ts +2 -2
  107. package/build/credentials/ios/actions/SetupProvisioningProfile.d.ts +6 -6
  108. package/build/credentials/ios/actions/SetupPushKey.d.ts +3 -3
  109. package/build/credentials/ios/actions/SetupTargetBuildCredentials.d.ts +4 -4
  110. package/build/credentials/ios/actions/SetupTargetBuildCredentialsFromCredentialsJson.d.ts +5 -5
  111. package/build/credentials/ios/actions/UpdateCredentialsJson.d.ts +2 -2
  112. package/build/credentials/ios/appstore/AppStoreApi.d.ts +4 -15
  113. package/build/credentials/ios/appstore/AppStoreApi.js +4 -12
  114. package/build/credentials/ios/appstore/entitlements.js +14 -13
  115. package/build/credentials/ios/utils/printCredentials.js +83 -51
  116. package/build/credentials/ios/validators/validateDistributionCertificate.d.ts +2 -2
  117. package/build/credentials/ios/validators/validateProvisioningProfile.d.ts +2 -2
  118. package/build/credentials/ios/validators/validatePushKey.d.ts +2 -2
  119. package/build/credentials/manager/HelperActions.d.ts +4 -0
  120. package/build/credentials/manager/ManageAndroid.d.ts +18 -12
  121. package/build/credentials/manager/ManageAndroid.js +72 -10
  122. package/build/credentials/manager/ManageIos.d.ts +3 -2
  123. package/build/credentials/manager/SelectAndroidBuildCredentials.d.ts +3 -3
  124. package/build/credentials/manager/SelectBuildProfileFromEasJson.d.ts +3 -4
  125. package/build/credentials/manager/SelectBuildProfileFromEasJson.js +0 -1
  126. package/build/credentials/manager/SelectIosDistributionTypeGraphqlFromBuildProfile.d.ts +3 -3
  127. package/build/credentials/manager/SelectPlatform.d.ts +3 -3
  128. package/build/devices/context.js +1 -1
  129. package/build/graphql/generated.d.ts +60 -1
  130. package/build/graphql/types/credentials/AndroidAppCredentials.js +6 -0
  131. package/build/project/android/applicationId.js +2 -2
  132. package/build/project/projectUtils.d.ts +4 -1
  133. package/build/project/projectUtils.js +13 -3
  134. package/build/project/publish.d.ts +3 -3
  135. package/build/project/publish.js +10 -10
  136. package/build/submit/android/AndroidSubmitCommand.js +3 -8
  137. package/build/submit/android/AndroidSubmitter.js +31 -9
  138. package/build/submit/android/ServiceAccountSource.d.ts +24 -5
  139. package/build/submit/android/ServiceAccountSource.js +54 -75
  140. package/build/submit/context.d.ts +14 -7
  141. package/build/submit/context.js +18 -4
  142. package/build/submit/ios/AppProduce.js +3 -3
  143. package/build/submit/ios/AppSpecificPasswordSource.js +1 -1
  144. package/build/submit/ios/IosSubmitCommand.js +1 -1
  145. package/build/utils/json.js +2 -6
  146. package/build/vcs/local.js +7 -7
  147. package/oclif.manifest.json +1 -1
  148. package/package.json +9 -8
@@ -1,9 +1,9 @@
1
1
  import { AppleProvisioningProfileIdentifiersFragment } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { AppLookupParams } from '../api/GraphqlClient';
4
4
  export declare class RemoveProvisioningProfiles {
5
5
  private apps;
6
6
  private provisioningProfiles;
7
7
  constructor(apps: AppLookupParams[], provisioningProfiles: AppleProvisioningProfileIdentifiersFragment[]);
8
- runAsync(ctx: Context): Promise<void>;
8
+ runAsync(ctx: CredentialsContext): Promise<void>;
9
9
  }
@@ -1,14 +1,14 @@
1
1
  import { ApplePushKeyFragment } from '../../../graphql/generated';
2
2
  import { Account } from '../../../user/Account';
3
- import { Context } from '../../context';
3
+ import { CredentialsContext } from '../../context';
4
4
  export declare class SelectAndRemovePushKey {
5
5
  private account;
6
6
  constructor(account: Account);
7
- runAsync(ctx: Context): Promise<void>;
7
+ runAsync(ctx: CredentialsContext): Promise<void>;
8
8
  }
9
9
  export declare class RemovePushKey {
10
10
  private account;
11
11
  private pushKey;
12
12
  constructor(account: Account, pushKey: ApplePushKeyFragment);
13
- runAsync(ctx: Context): Promise<void>;
13
+ runAsync(ctx: CredentialsContext): Promise<void>;
14
14
  }
@@ -1,13 +1,14 @@
1
1
  import { AppleDistributionCertificateFragment, IosAppBuildCredentialsFragment } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { AppLookupParams } from '../api/GraphqlClient';
4
4
  export declare class SetupAdhocProvisioningProfile {
5
5
  private app;
6
6
  constructor(app: AppLookupParams);
7
- runAsync(ctx: Context): Promise<IosAppBuildCredentialsFragment>;
8
- runWithDistributionCertificateAsync(ctx: Context, distCert: AppleDistributionCertificateFragment): Promise<IosAppBuildCredentialsFragment>;
7
+ runAsync(ctx: CredentialsContext): Promise<IosAppBuildCredentialsFragment>;
8
+ runWithDistributionCertificateAsync(ctx: CredentialsContext, distCert: AppleDistributionCertificateFragment): Promise<IosAppBuildCredentialsFragment>;
9
9
  private areBuildCredentialsSetupAsync;
10
10
  private shouldUseExistingProfileAsync;
11
+ private promptForReuseActionAsync;
11
12
  private registerDevicesAsync;
12
13
  }
13
14
  export declare function doUDIDsMatch(udidsA: string[], udidsB: string[]): boolean;
@@ -16,6 +16,12 @@ const AppleTeamUtils_1 = require("./AppleTeamUtils");
16
16
  const BuildCredentialsUtils_1 = require("./BuildCredentialsUtils");
17
17
  const DeviceUtils_1 = require("./DeviceUtils");
18
18
  const SetupDistributionCertificate_1 = require("./SetupDistributionCertificate");
19
+ var ReuseAction;
20
+ (function (ReuseAction) {
21
+ ReuseAction[ReuseAction["Yes"] = 0] = "Yes";
22
+ ReuseAction[ReuseAction["ShowDevices"] = 1] = "ShowDevices";
23
+ ReuseAction[ReuseAction["No"] = 2] = "No";
24
+ })(ReuseAction || (ReuseAction = {}));
19
25
  class SetupAdhocProvisioningProfile {
20
26
  constructor(app) {
21
27
  this.app = app;
@@ -108,10 +114,23 @@ class SetupAdhocProvisioningProfile {
108
114
  const provisionedDevices = provisioningProfile.appleDevices;
109
115
  const allRegisteredDevicesAreProvisioned = doUDIDsMatch(registeredAppleDevices.map(({ identifier }) => identifier), provisionedDevices.map(({ identifier }) => identifier));
110
116
  if (allRegisteredDevicesAreProvisioned) {
111
- return await (0, prompts_1.confirmAsync)({
112
- message: `All your registered devices are present in the Provisioning Profile. Would you like to reuse it?`,
113
- initial: true,
114
- });
117
+ const reuseAction = await this.promptForReuseActionAsync();
118
+ if (reuseAction === ReuseAction.Yes) {
119
+ return true;
120
+ }
121
+ else if (reuseAction === ReuseAction.No) {
122
+ return false;
123
+ }
124
+ else {
125
+ log_1.default.newLine();
126
+ log_1.default.log('Devices registered in the Provisioning Profile:');
127
+ for (const device of provisionedDevices) {
128
+ log_1.default.log(`- ${(0, DeviceUtils_1.formatDeviceLabel)(device)}`);
129
+ }
130
+ log_1.default.newLine();
131
+ return ((await this.promptForReuseActionAsync({ showShowDevicesOption: false })) ===
132
+ ReuseAction.Yes);
133
+ }
115
134
  }
116
135
  else {
117
136
  const missingDevices = (0, differenceBy_1.default)(registeredAppleDevices, provisionedDevices, 'identifier');
@@ -125,6 +144,31 @@ class SetupAdhocProvisioningProfile {
125
144
  }));
126
145
  }
127
146
  }
147
+ async promptForReuseActionAsync({ showShowDevicesOption = true, } = {}) {
148
+ const { selected } = await (0, prompts_1.promptAsync)({
149
+ type: 'select',
150
+ name: 'selected',
151
+ message: `${showShowDevicesOption
152
+ ? 'All your registered devices are present in the Provisioning Profile. '
153
+ : ''}Would you like to reuse the profile?`,
154
+ choices: [
155
+ { title: 'Yes', value: ReuseAction.Yes },
156
+ ...(showShowDevicesOption
157
+ ? [
158
+ {
159
+ title: 'Show devices and ask me again',
160
+ value: ReuseAction.ShowDevices,
161
+ },
162
+ ]
163
+ : []),
164
+ {
165
+ title: 'No, let me choose devices again',
166
+ value: ReuseAction.No,
167
+ },
168
+ ],
169
+ });
170
+ return selected;
171
+ }
128
172
  async registerDevicesAsync(ctx, appleTeam) {
129
173
  const action = new action_1.default(this.app.account, appleTeam);
130
174
  const method = await action.runAsync();
@@ -1,5 +1,5 @@
1
1
  import { DistributionType, IosEnterpriseProvisioning } from '@expo/eas-json';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { IosCapabilitiesOptions } from '../appstore/ensureAppExists';
4
4
  import { App, IosCredentials, Target } from '../types';
5
5
  interface Options {
@@ -12,6 +12,6 @@ interface Options {
12
12
  export declare class SetupBuildCredentials {
13
13
  private options;
14
14
  constructor(options: Options);
15
- runAsync(ctx: Context): Promise<IosCredentials>;
15
+ runAsync(ctx: CredentialsContext): Promise<IosCredentials>;
16
16
  }
17
17
  export {};
@@ -1,11 +1,11 @@
1
1
  import { IosDistributionType } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { App, Target } from '../types';
4
4
  export declare class SetupBuildCredentialsFromCredentialsJson {
5
5
  private app;
6
6
  private targets;
7
7
  private distributionType;
8
8
  constructor(app: App, targets: Target[], distributionType: IosDistributionType);
9
- runAsync(ctx: Context): Promise<void>;
9
+ runAsync(ctx: CredentialsContext): Promise<void>;
10
10
  private readCredentialsJsonAsync;
11
11
  }
@@ -1,17 +1,17 @@
1
1
  import { AppleDistributionCertificate, AppleDistributionCertificateFragment, IosDistributionType } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { AppLookupParams } from '../api/GraphqlClient';
4
4
  export declare class SetupDistributionCertificate {
5
5
  private app;
6
6
  private distributionType;
7
7
  private validDistCerts?;
8
8
  constructor(app: AppLookupParams, distributionType: IosDistributionType);
9
- runAsync(ctx: Context): Promise<AppleDistributionCertificateFragment>;
9
+ runAsync(ctx: CredentialsContext): Promise<AppleDistributionCertificateFragment>;
10
10
  private runNonInteractiveAsync;
11
11
  private runInteractiveAsync;
12
12
  private isCurrentCertificateValidAsync;
13
13
  private createOrReuseDistCertAsync;
14
14
  private createNewDistCertAsync;
15
- reuseDistCertAsync(ctx: Context): Promise<AppleDistributionCertificate>;
15
+ reuseDistCertAsync(ctx: CredentialsContext): Promise<AppleDistributionCertificate>;
16
16
  private getValidDistCertsAsync;
17
17
  }
@@ -1,5 +1,5 @@
1
1
  import { IosAppBuildCredentialsFragment } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { AppLookupParams } from '../api/GraphqlClient';
4
4
  /**
5
5
  * It's used when setting up credentials for internal distribution but `enterpriseProvisioning` is not set.
@@ -11,7 +11,7 @@ import { AppLookupParams } from '../api/GraphqlClient';
11
11
  export declare class SetupInternalProvisioningProfile {
12
12
  private app;
13
13
  constructor(app: AppLookupParams);
14
- runAsync(ctx: Context): Promise<IosAppBuildCredentialsFragment>;
14
+ runAsync(ctx: CredentialsContext): Promise<IosAppBuildCredentialsFragment>;
15
15
  private setupAdhocProvisioningProfileAsync;
16
16
  private setupUniversalProvisioningProfileAsync;
17
17
  private askForDistributionTypeAndSetupAsync;
@@ -1,5 +1,5 @@
1
1
  import { AppleDistributionCertificateFragment, AppleProvisioningProfileFragment, IosAppBuildCredentialsFragment, IosDistributionType } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { AppLookupParams } from '../api/GraphqlClient';
4
4
  /**
5
5
  * Sets up either APP_STORE or ENTERPRISE provisioning profiles
@@ -8,10 +8,10 @@ export declare class SetupProvisioningProfile {
8
8
  private app;
9
9
  private distributionType;
10
10
  constructor(app: AppLookupParams, distributionType: IosDistributionType);
11
- areBuildCredentialsSetupAsync(ctx: Context): Promise<boolean>;
12
- assignNewAndDeleteOldProfileAsync(ctx: Context, distCert: AppleDistributionCertificateFragment, currentProfile: AppleProvisioningProfileFragment): Promise<IosAppBuildCredentialsFragment>;
13
- createAndAssignProfileAsync(ctx: Context, distCert: AppleDistributionCertificateFragment): Promise<IosAppBuildCredentialsFragment>;
14
- configureAndAssignProfileAsync(ctx: Context, distCert: AppleDistributionCertificateFragment, originalProvisioningProfile: AppleProvisioningProfileFragment): Promise<IosAppBuildCredentialsFragment | null>;
15
- runAsync(ctx: Context): Promise<IosAppBuildCredentialsFragment>;
11
+ areBuildCredentialsSetupAsync(ctx: CredentialsContext): Promise<boolean>;
12
+ assignNewAndDeleteOldProfileAsync(ctx: CredentialsContext, distCert: AppleDistributionCertificateFragment, currentProfile: AppleProvisioningProfileFragment): Promise<IosAppBuildCredentialsFragment>;
13
+ createAndAssignProfileAsync(ctx: CredentialsContext, distCert: AppleDistributionCertificateFragment): Promise<IosAppBuildCredentialsFragment>;
14
+ configureAndAssignProfileAsync(ctx: CredentialsContext, distCert: AppleDistributionCertificateFragment, originalProvisioningProfile: AppleProvisioningProfileFragment): Promise<IosAppBuildCredentialsFragment | null>;
15
+ runAsync(ctx: CredentialsContext): Promise<IosAppBuildCredentialsFragment>;
16
16
  private getCurrentProfileStoreInfo;
17
17
  }
@@ -1,10 +1,10 @@
1
1
  import { CommonIosAppCredentialsFragment } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { AppLookupParams } from '../api/GraphqlClient';
4
4
  export declare class SetupPushKey {
5
5
  private app;
6
6
  constructor(app: AppLookupParams);
7
- isPushKeySetupAsync(ctx: Context): Promise<boolean>;
8
- runAsync(ctx: Context): Promise<CommonIosAppCredentialsFragment | null>;
7
+ isPushKeySetupAsync(ctx: CredentialsContext): Promise<boolean>;
8
+ runAsync(ctx: CredentialsContext): Promise<CommonIosAppCredentialsFragment | null>;
9
9
  private createOrReusePushKeyAsync;
10
10
  }
@@ -1,6 +1,6 @@
1
1
  import { DistributionType, IosEnterpriseProvisioning } from '@expo/eas-json';
2
2
  import { IosAppBuildCredentialsFragment } from '../../../graphql/generated';
3
- import { Action, Context } from '../../context';
3
+ import { CredentialsContext } from '../../context';
4
4
  import { AppLookupParams as GraphQLAppLookupParams } from '../api/GraphqlClient';
5
5
  import { IosCapabilitiesOptions } from '../appstore/ensureAppExists';
6
6
  interface Options {
@@ -9,10 +9,10 @@ interface Options {
9
9
  enterpriseProvisioning?: IosEnterpriseProvisioning;
10
10
  iosCapabilitiesOptions?: IosCapabilitiesOptions;
11
11
  }
12
- export declare class SetupTargetBuildCredentials implements Action<IosAppBuildCredentialsFragment> {
12
+ export declare class SetupTargetBuildCredentials {
13
13
  private options;
14
14
  constructor(options: Options);
15
- runAsync(ctx: Context): Promise<IosAppBuildCredentialsFragment>;
16
- setupBuildCredentialsAsync(ctx: Context): Promise<IosAppBuildCredentialsFragment>;
15
+ runAsync(ctx: CredentialsContext): Promise<IosAppBuildCredentialsFragment>;
16
+ setupBuildCredentialsAsync(ctx: CredentialsContext): Promise<IosAppBuildCredentialsFragment>;
17
17
  }
18
18
  export {};
@@ -1,5 +1,5 @@
1
1
  import { AppleDistributionCertificateFragment, AppleProvisioningProfileFragment, AppleTeamFragment, IosAppBuildCredentialsFragment, IosDistributionType } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { IosTargetCredentials } from '../../credentialsJson/types';
4
4
  import { AppLookupParams } from '../api/GraphqlClient';
5
5
  export declare class SetupTargetBuildCredentialsFromCredentialsJson {
@@ -7,8 +7,8 @@ export declare class SetupTargetBuildCredentialsFromCredentialsJson {
7
7
  private distributionType;
8
8
  private targetCredentials;
9
9
  constructor(app: AppLookupParams, distributionType: IosDistributionType, targetCredentials: IosTargetCredentials);
10
- runAsync(ctx: Context): Promise<IosAppBuildCredentialsFragment>;
11
- getDistributionCertificateToAssignAsync(ctx: Context, appleTeam: AppleTeamFragment, currentDistributionCertificate: AppleDistributionCertificateFragment | null): Promise<AppleDistributionCertificateFragment>;
12
- getProvisioningProfileToAssignAsync(ctx: Context, appleTeam: AppleTeamFragment, currentProvisioningProfile: AppleProvisioningProfileFragment | null): Promise<AppleProvisioningProfileFragment>;
13
- createNewProvisioningProfileAsync(ctx: Context, appleTeam: AppleTeamFragment): Promise<AppleProvisioningProfileFragment>;
10
+ runAsync(ctx: CredentialsContext): Promise<IosAppBuildCredentialsFragment>;
11
+ getDistributionCertificateToAssignAsync(ctx: CredentialsContext, appleTeam: AppleTeamFragment, currentDistributionCertificate: AppleDistributionCertificateFragment | null): Promise<AppleDistributionCertificateFragment>;
12
+ getProvisioningProfileToAssignAsync(ctx: CredentialsContext, appleTeam: AppleTeamFragment, currentProvisioningProfile: AppleProvisioningProfileFragment | null): Promise<AppleProvisioningProfileFragment>;
13
+ createNewProvisioningProfileAsync(ctx: CredentialsContext, appleTeam: AppleTeamFragment): Promise<AppleProvisioningProfileFragment>;
14
14
  }
@@ -1,10 +1,10 @@
1
1
  import { IosDistributionType } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { App, Target } from '../types';
4
4
  export declare class UpdateCredentialsJson {
5
5
  private app;
6
6
  private targets;
7
7
  private distributionType;
8
8
  constructor(app: App, targets: Target[], distributionType: IosDistributionType);
9
- runAsync(ctx: Context): Promise<void>;
9
+ runAsync(ctx: CredentialsContext): Promise<void>;
10
10
  }
@@ -1,20 +1,10 @@
1
1
  import { DistributionCertificate, DistributionCertificateStoreInfo, ProvisioningProfile, ProvisioningProfileStoreInfo, PushKey, PushKeyStoreInfo } from './Credentials.types';
2
- import { AuthCtx } from './authenticate';
3
- import { AppleTooManyCertsError } from './distributionCertificate';
2
+ import { AuthCtx, Options as AuthenticateOptions } from './authenticate';
4
3
  import { AppLookupParams, IosCapabilitiesOptions } from './ensureAppExists';
5
4
  import { ProfileClass } from './provisioningProfile';
6
- interface Options {
7
- appleIdPassword?: string;
8
- appleId?: string;
9
- teamId?: string;
10
- }
11
- export { AppleTooManyCertsError };
12
- declare class AppStoreApi {
13
- readonly options?: Options | undefined;
14
- private _authCtx?;
15
- constructor(options?: Options | undefined);
16
- get authCtx(): AuthCtx | undefined;
17
- ensureAuthenticatedAsync(): Promise<AuthCtx>;
5
+ export default class AppStoreApi {
6
+ authCtx?: AuthCtx;
7
+ ensureAuthenticatedAsync(options?: AuthenticateOptions): Promise<AuthCtx>;
18
8
  ensureBundleIdExistsAsync(app: AppLookupParams, options?: IosCapabilitiesOptions): Promise<void>;
19
9
  listDistributionCertificatesAsync(): Promise<DistributionCertificateStoreInfo[]>;
20
10
  createDistributionCertificateAsync(): Promise<DistributionCertificate>;
@@ -28,4 +18,3 @@ declare class AppStoreApi {
28
18
  revokeProvisioningProfileAsync(bundleIdentifier: string, profileClass?: ProfileClass): Promise<void>;
29
19
  createOrReuseAdhocProvisioningProfileAsync(udids: string[], bundleIdentifier: string, distCertSerialNumber: string): Promise<ProvisioningProfile>;
30
20
  }
31
- export default AppStoreApi;
@@ -1,25 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AppleTooManyCertsError = void 0;
4
3
  const authenticate_1 = require("./authenticate");
5
4
  const distributionCertificate_1 = require("./distributionCertificate");
6
- Object.defineProperty(exports, "AppleTooManyCertsError", { enumerable: true, get: function () { return distributionCertificate_1.AppleTooManyCertsError; } });
7
5
  const ensureAppExists_1 = require("./ensureAppExists");
8
6
  const provisioningProfile_1 = require("./provisioningProfile");
9
7
  const provisioningProfileAdhoc_1 = require("./provisioningProfileAdhoc");
10
8
  const pushKey_1 = require("./pushKey");
11
9
  class AppStoreApi {
12
- constructor(options) {
13
- this.options = options;
14
- }
15
- get authCtx() {
16
- return this._authCtx;
17
- }
18
- async ensureAuthenticatedAsync() {
19
- if (!this._authCtx) {
20
- this._authCtx = await (0, authenticate_1.authenticateAsync)(this.options);
10
+ async ensureAuthenticatedAsync(options) {
11
+ if (!this.authCtx) {
12
+ this.authCtx = await (0, authenticate_1.authenticateAsync)(options);
21
13
  }
22
- return this._authCtx;
14
+ return this.authCtx;
23
15
  }
24
16
  async ensureBundleIdExistsAsync(app, options) {
25
17
  const ctx = await this.ensureAuthenticatedAsync();
@@ -6,17 +6,7 @@ const config_plugins_1 = require("@expo/config-plugins");
6
6
  const eas_build_job_1 = require("@expo/eas-build-job");
7
7
  const plist_1 = (0, tslib_1.__importDefault)(require("@expo/plist"));
8
8
  const prebuild_config_1 = require("@expo/prebuild-config");
9
- const fs_1 = (0, tslib_1.__importDefault)(require("fs"));
10
- function getEntitlementsJson(projectDir) {
11
- try {
12
- const entitlementsPath = config_plugins_1.IOSConfig.Paths.getEntitlementsPath(projectDir);
13
- if (entitlementsPath) {
14
- return plist_1.default.parse(fs_1.default.readFileSync(entitlementsPath, 'utf8'));
15
- }
16
- }
17
- catch { }
18
- return null;
19
- }
9
+ const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
20
10
  async function getManagedEntitlementsJsonAsync(projectDir) {
21
11
  var _a;
22
12
  let { exp } = (0, prebuild_config_1.getPrebuildConfig)(projectDir, { platforms: ['ios'] });
@@ -30,13 +20,24 @@ async function getManagedEntitlementsJsonAsync(projectDir) {
30
20
  exports.getManagedEntitlementsJsonAsync = getManagedEntitlementsJsonAsync;
31
21
  async function resolveEntitlementsJsonAsync(projectDir, workflow) {
32
22
  if (workflow === eas_build_job_1.Workflow.GENERIC) {
33
- return getEntitlementsJson(projectDir) || {};
23
+ return (await getEntitlementsJsonAsync(projectDir)) || {};
34
24
  }
35
25
  else if (workflow === eas_build_job_1.Workflow.MANAGED) {
36
- return getManagedEntitlementsJsonAsync(projectDir);
26
+ return await getManagedEntitlementsJsonAsync(projectDir);
37
27
  }
38
28
  else {
39
29
  throw new Error(`Unknown workflow: ${workflow}`);
40
30
  }
41
31
  }
42
32
  exports.resolveEntitlementsJsonAsync = resolveEntitlementsJsonAsync;
33
+ async function getEntitlementsJsonAsync(projectDir) {
34
+ try {
35
+ const entitlementsPath = config_plugins_1.IOSConfig.Paths.getEntitlementsPath(projectDir);
36
+ if (entitlementsPath) {
37
+ const entitlementsContents = await fs_extra_1.default.readFile(entitlementsPath, 'utf8');
38
+ return plist_1.default.parse(entitlementsContents);
39
+ }
40
+ }
41
+ catch { }
42
+ return null;
43
+ }
@@ -8,6 +8,7 @@ const generated_1 = require("../../../graphql/generated");
8
8
  const AppleDevice_1 = require("../../../graphql/types/credentials/AppleDevice");
9
9
  const log_1 = (0, tslib_1.__importDefault)(require("../../../log"));
10
10
  const date_1 = require("../../../utils/date");
11
+ const formatFields_1 = (0, tslib_1.__importDefault)(require("../../../utils/formatFields"));
11
12
  function prettyIosDistributionType(distributionType) {
12
13
  switch (distributionType) {
13
14
  case generated_1.IosDistributionType.AppStore:
@@ -24,10 +25,14 @@ function prettyIosDistributionType(distributionType) {
24
25
  }
25
26
  function displayEmptyIosCredentials(appLookupParams) {
26
27
  const { projectName, bundleIdentifier } = appLookupParams;
27
- log_1.default.log(chalk_1.default.bold(`iOS Credentials`));
28
- log_1.default.log(` Project: ${projectName}`);
29
- log_1.default.log(` Bundle Identifier: ${bundleIdentifier}`);
30
- log_1.default.log(` No credentials set up yet!`);
28
+ const fields = [
29
+ { label: 'iOS Credentials', value: '' },
30
+ { label: 'Project', value: projectName },
31
+ { label: 'Bundle Identifier', value: bundleIdentifier },
32
+ ];
33
+ fields.push({ label: '', value: 'No credentials set up yet!' });
34
+ fields.push({ label: '', value: '' });
35
+ log_1.default.log((0, formatFields_1.default)(fields, { labelFormat: chalk_1.default.cyan.bold }));
31
36
  }
32
37
  exports.displayEmptyIosCredentials = displayEmptyIosCredentials;
33
38
  /**
@@ -49,36 +54,41 @@ function sortBuildCredentialsByDistributionType(iosAppBuildCredentialsList) {
49
54
  function displayIosCredentials(app, appCredentialsMap, targets) {
50
55
  const projectFullName = `@${app.account.name}/${app.projectName}`;
51
56
  const isMultitarget = targets.length > 1;
52
- log_1.default.log(chalk_1.default.bold(`iOS Credentials`));
53
- log_1.default.addNewLineIfNone();
54
- log_1.default.log(` Project: ${chalk_1.default.bold(projectFullName)}`);
57
+ const fields = [
58
+ { label: 'iOS Credentials', value: '' },
59
+ { label: 'Project', value: projectFullName },
60
+ ];
55
61
  for (const { targetName, bundleIdentifier } of targets) {
56
62
  if (isMultitarget) {
57
- log_1.default.newLine();
58
- log_1.default.log(` Target: ${chalk_1.default.bold(targetName)}`);
63
+ fields.push({ label: '', value: '' });
64
+ fields.push({ label: 'Target', value: targetName });
59
65
  }
60
- log_1.default.log(` Bundle Identifier: ${chalk_1.default.bold(bundleIdentifier)}`);
66
+ fields.push({ label: 'Bundle Identifier', value: bundleIdentifier });
61
67
  const targetAppCredentials = appCredentialsMap[targetName];
62
68
  if (!targetAppCredentials) {
63
- log_1.default.newLine();
64
- log_1.default.log(` No credentials set up yet!`);
65
- log_1.default.newLine();
69
+ fields.push({ label: '', value: '' });
70
+ fields.push({ label: '', value: 'No credentials set up yet!' });
71
+ fields.push({ label: '', value: '' });
66
72
  continue;
67
73
  }
68
74
  const { appleTeam, pushKey } = targetAppCredentials;
69
75
  if (appleTeam) {
70
76
  const { appleTeamIdentifier, appleTeamName } = appleTeam;
71
- log_1.default.log(` Apple Team: ${appleTeamIdentifier} ${appleTeamName ? `(${appleTeamName})` : ''}`);
77
+ fields.push({
78
+ label: 'Apple Team',
79
+ value: `${appleTeamIdentifier} ${appleTeamName ? `(${appleTeamName})` : ''}`,
80
+ });
72
81
  }
73
- log_1.default.newLine();
82
+ fields.push({ label: '', value: '' });
74
83
  if (pushKey) {
75
- displayApplePushKey(pushKey);
84
+ displayApplePushKey(pushKey, fields);
76
85
  }
77
86
  const sortedIosAppBuildCredentialsList = sortBuildCredentialsByDistributionType(targetAppCredentials.iosAppBuildCredentialsList);
78
87
  for (const iosAppBuildCredentials of sortedIosAppBuildCredentialsList) {
79
- displayIosAppBuildCredentials(iosAppBuildCredentials);
88
+ displayIosAppBuildCredentials(iosAppBuildCredentials, fields);
80
89
  }
81
90
  }
91
+ log_1.default.log((0, formatFields_1.default)(fields, { labelFormat: chalk_1.default.cyan.bold }));
82
92
  }
83
93
  exports.displayIosCredentials = displayIosCredentials;
84
94
  function displayProjectCredentials(app, appBuildCredentials, targets) {
@@ -89,78 +99,100 @@ function displayProjectCredentials(app, appBuildCredentials, targets) {
89
99
  }, {});
90
100
  const isMultitarget = targets.length > 1;
91
101
  log_1.default.addNewLineIfNone();
92
- log_1.default.log(chalk_1.default.bold('Project Credentials Configuration:'));
93
- log_1.default.log(` Project: ${chalk_1.default.bold(projectFullName)}`);
102
+ log_1.default.log(chalk_1.default.cyan.bold('Project Credentials Configuration'));
103
+ log_1.default.newLine();
104
+ const fields = [{ label: 'Project', value: projectFullName }];
94
105
  for (const [targetName, buildCredentials] of Object.entries(appBuildCredentials)) {
95
106
  if (isMultitarget) {
96
- log_1.default.newLine();
97
- log_1.default.log(` Target: ${chalk_1.default.bold(targetName)}`);
107
+ fields.push({ label: '', value: '' });
108
+ fields.push({ label: 'Target', value: targetName });
98
109
  }
99
- log_1.default.log(` Bundle Identifier: ${chalk_1.default.bold(targetToBundleId[targetName])}`);
100
- displayIosAppBuildCredentials(buildCredentials);
110
+ fields.push({ label: 'Bundle Identifier', value: targetToBundleId[targetName] });
111
+ displayIosAppBuildCredentials(buildCredentials, fields);
101
112
  }
113
+ log_1.default.log((0, formatFields_1.default)(fields, { labelFormat: chalk_1.default.cyan.bold }));
102
114
  }
103
115
  exports.displayProjectCredentials = displayProjectCredentials;
104
- function displayIosAppBuildCredentials(buildCredentials) {
105
- log_1.default.log(` Configuration: ${chalk_1.default.bold(prettyIosDistributionType(buildCredentials.iosDistributionType))}`);
106
- log_1.default.newLine();
116
+ function displayIosAppBuildCredentials(buildCredentials, fields) {
117
+ fields.push({ label: '', value: '' });
118
+ fields.push({
119
+ label: `${prettyIosDistributionType(buildCredentials.iosDistributionType)} Configuration`,
120
+ value: '',
121
+ });
122
+ fields.push({ label: '', value: '' });
107
123
  const maybeDistCert = buildCredentials.distributionCertificate;
108
- log_1.default.log(` Distribution Certificate:`);
124
+ fields.push({ label: 'Distribution Certificate', value: '' });
109
125
  if (maybeDistCert) {
110
126
  const { serialNumber, updatedAt, validityNotAfter, appleTeam } = maybeDistCert;
111
- log_1.default.log(` Serial Number: ${serialNumber}`);
112
- log_1.default.log(` Expiration Date: ${(0, dateformat_1.default)(validityNotAfter, 'expiresHeaderFormat')}`);
127
+ fields.push({ label: 'Serial Number', value: serialNumber });
128
+ fields.push({
129
+ label: 'Expiration Date',
130
+ value: (0, dateformat_1.default)(validityNotAfter, 'expiresHeaderFormat'),
131
+ });
113
132
  if (appleTeam) {
114
133
  const { appleTeamIdentifier, appleTeamName } = appleTeam;
115
- log_1.default.log(` Apple Team: ${appleTeamIdentifier} ${appleTeamName ? `(${appleTeamName})` : ''}`);
134
+ fields.push({
135
+ label: 'Apple Team',
136
+ value: `${appleTeamIdentifier} ${appleTeamName ? `(${appleTeamName})` : ''}`,
137
+ });
116
138
  }
117
- log_1.default.log(` Updated ${(0, date_1.fromNow)(new Date(updatedAt))} ago`);
139
+ fields.push({ label: 'Updated', value: `${(0, date_1.fromNow)(new Date(updatedAt))} ago` });
118
140
  }
119
141
  else {
120
- log_1.default.log(` None assigned yet`);
142
+ fields.push({ label: '', value: 'None assigned yet' });
121
143
  }
122
- log_1.default.newLine();
144
+ fields.push({ label: '', value: '' });
123
145
  const maybeProvProf = buildCredentials.provisioningProfile;
124
- log_1.default.log(` Provisioning Profile:`);
146
+ fields.push({ label: 'Provisioning Profile', value: '' });
125
147
  if (maybeProvProf) {
126
148
  const { expiration, updatedAt, status, developerPortalIdentifier, appleTeam, appleDevices } = maybeProvProf;
127
149
  if (developerPortalIdentifier) {
128
- log_1.default.log(` Developer Portal ID: ${developerPortalIdentifier}`);
150
+ fields.push({ label: 'Developer Portal ID', value: developerPortalIdentifier });
129
151
  }
130
- log_1.default.log(` Status: ${status}`);
131
- log_1.default.log(` Expiration Date: ${(0, dateformat_1.default)(expiration, 'expiresHeaderFormat')}`);
152
+ fields.push({ label: 'Status', value: status });
153
+ fields.push({ label: 'Expiration', value: (0, dateformat_1.default)(expiration, 'expiresHeaderFormat') });
132
154
  if (appleTeam) {
133
155
  const { appleTeamIdentifier, appleTeamName } = appleTeam;
134
- log_1.default.log(` Apple Team: ${appleTeamIdentifier} ${appleTeamName ? `(${appleTeamName})` : ''}`);
156
+ fields.push({
157
+ label: 'Apple Team',
158
+ value: `${appleTeamIdentifier} ${appleTeamName ? `(${appleTeamName})` : ''}`,
159
+ });
135
160
  }
136
161
  if (appleDevices && appleDevices.length > 0) {
137
- log_1.default.log(` Provisioned devices:`);
138
- for (const appleDevice of appleDevices) {
139
- log_1.default.log(` - ${formatAppleDevice(appleDevice)}`);
162
+ const [firstAppleDevice, ...rest] = appleDevices;
163
+ fields.push({
164
+ label: 'Provisioned devices',
165
+ value: `- ${formatAppleDevice(firstAppleDevice)}`,
166
+ });
167
+ for (const appleDevice of rest) {
168
+ fields.push({ label: '', value: `- ${formatAppleDevice(appleDevice)}` });
140
169
  }
141
170
  }
142
- log_1.default.log(` Updated ${(0, date_1.fromNow)(new Date(updatedAt))} ago`);
171
+ fields.push({ label: 'Updated', value: `${(0, date_1.fromNow)(new Date(updatedAt))} ago` });
143
172
  }
144
173
  else {
145
- log_1.default.log(` None assigned yet`);
174
+ fields.push({ label: '', value: 'None assigned yet' });
146
175
  }
147
- log_1.default.newLine();
176
+ fields.push({ label: '', value: '' });
148
177
  }
149
- function displayApplePushKey(maybePushKey) {
150
- log_1.default.log(` Push Key:`);
178
+ function displayApplePushKey(maybePushKey, fields) {
179
+ fields.push({ label: 'Push Key', value: '' });
151
180
  if (maybePushKey) {
152
181
  const { keyIdentifier, appleTeam, updatedAt } = maybePushKey;
153
- log_1.default.log(` Developer Portal ID: ${keyIdentifier}`);
182
+ fields.push({ label: 'Developer Portal ID', value: keyIdentifier });
154
183
  if (appleTeam) {
155
184
  const { appleTeamIdentifier, appleTeamName } = appleTeam;
156
- log_1.default.log(` Apple Team: ${appleTeamIdentifier} ${appleTeamName ? `(${appleTeamName})` : ''}`);
185
+ fields.push({
186
+ label: 'Apple Team',
187
+ value: `${appleTeamIdentifier} ${appleTeamName ? `(${appleTeamName})` : ''}`,
188
+ });
157
189
  }
158
- log_1.default.log(` Updated ${(0, date_1.fromNow)(new Date(updatedAt))} ago`);
190
+ fields.push({ label: 'Updated', value: `${(0, date_1.fromNow)(new Date(updatedAt))} ago` });
159
191
  }
160
192
  else {
161
- log_1.default.log(` None assigned yet`);
193
+ fields.push({ label: '', value: 'None assigned yet' });
162
194
  }
163
- log_1.default.newLine();
195
+ fields.push({ label: '', value: '' });
164
196
  }
165
197
  function formatAppleDevice(device) {
166
198
  let deviceString = '';
@@ -1,3 +1,3 @@
1
- import { Context } from '../../context';
1
+ import { CredentialsContext } from '../../context';
2
2
  import { DistributionCertificate } from '../appstore/Credentials.types';
3
- export declare function validateDistributionCertificateAsync(ctx: Context, distributionCertificate: DistributionCertificate): Promise<boolean>;
3
+ export declare function validateDistributionCertificateAsync(ctx: CredentialsContext, distributionCertificate: DistributionCertificate): Promise<boolean>;
@@ -1,4 +1,4 @@
1
1
  import { IosAppBuildCredentialsFragment } from '../../../graphql/generated';
2
- import { Context } from '../../context';
2
+ import { CredentialsContext } from '../../context';
3
3
  import { AppLookupParams } from '../api/GraphqlClient';
4
- export declare function validateProvisioningProfileAsync(ctx: Context, app: AppLookupParams, buildCredentials: Partial<IosAppBuildCredentialsFragment> | null): Promise<boolean>;
4
+ export declare function validateProvisioningProfileAsync(ctx: CredentialsContext, app: AppLookupParams, buildCredentials: Partial<IosAppBuildCredentialsFragment> | null): Promise<boolean>;