eas-cli 0.49.0 → 0.50.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 (37) hide show
  1. package/README.md +42 -42
  2. package/build/build/build.d.ts +6 -2
  3. package/build/build/build.js +191 -104
  4. package/build/build/runBuildAndSubmit.js +5 -1
  5. package/build/credentials/context.js +5 -0
  6. package/build/credentials/ios/actions/AscApiKeyUtils.js +0 -1
  7. package/build/credentials/ios/actions/ConfigureProvisioningProfile.js +1 -1
  8. package/build/credentials/ios/actions/CreateProvisioningProfile.js +1 -1
  9. package/build/credentials/ios/appstore/AppStoreApi.d.ts +5 -1
  10. package/build/credentials/ios/appstore/AppStoreApi.js +38 -15
  11. package/build/credentials/ios/appstore/ascApiKey.d.ts +21 -5
  12. package/build/credentials/ios/appstore/ascApiKey.js +28 -12
  13. package/build/credentials/ios/appstore/authenticate.d.ts +9 -18
  14. package/build/credentials/ios/appstore/authenticate.js +43 -3
  15. package/build/credentials/ios/appstore/authenticateTypes.d.ts +42 -0
  16. package/build/credentials/ios/appstore/authenticateTypes.js +16 -0
  17. package/build/credentials/ios/appstore/contractMessages.d.ts +3 -0
  18. package/build/credentials/ios/appstore/contractMessages.js +12 -0
  19. package/build/credentials/ios/appstore/distributionCertificate.d.ts +1 -1
  20. package/build/credentials/ios/appstore/ensureAppExists.d.ts +2 -2
  21. package/build/credentials/ios/appstore/ensureAppExists.js +12 -5
  22. package/build/credentials/ios/appstore/provisioningProfile.d.ts +1 -1
  23. package/build/credentials/ios/appstore/provisioningProfileAdhoc.d.ts +1 -1
  24. package/build/credentials/ios/appstore/pushKey.d.ts +4 -4
  25. package/build/credentials/ios/appstore/pushKey.js +8 -8
  26. package/build/credentials/ios/appstore/resolveCredentials.d.ts +10 -1
  27. package/build/credentials/ios/appstore/resolveCredentials.js +125 -3
  28. package/build/graphql/generated.d.ts +73 -0
  29. package/build/graphql/generated.js +16 -1
  30. package/build/graphql/types/Build.js +4 -0
  31. package/build/submit/ios/AppProduce.d.ts +0 -1
  32. package/build/submit/ios/AppProduce.js +5 -6
  33. package/build/submit/ios/AppSpecificPasswordSource.js +2 -2
  34. package/build/utils/code-signing.d.ts +0 -5
  35. package/build/utils/code-signing.js +5 -51
  36. package/oclif.manifest.json +1 -1
  37. package/package.json +6 -6
@@ -93,6 +93,7 @@ export declare type Account = {
93
93
  availableBuilds?: Maybe<Scalars['Int']>;
94
94
  /** Billing information */
95
95
  billing?: Maybe<Billing>;
96
+ billingPeriod: BillingPeriod;
96
97
  /** Build Jobs associated with this account */
97
98
  buildJobs: Array<BuildJob>;
98
99
  /**
@@ -126,6 +127,8 @@ export declare type Account = {
126
127
  /** @deprecated See isCurrent */
127
128
  unlimitedBuilds: Scalars['Boolean'];
128
129
  updatedAt: Scalars['DateTime'];
130
+ /** Account query object for querying EAS usage metrics */
131
+ usageMetrics: AccountUsageMetrics;
129
132
  /** Pending user invitations for this account */
130
133
  userInvitations: Array<UserInvitation>;
131
134
  /** Actors associated with this account and permissions they hold */
@@ -179,6 +182,13 @@ export declare type AccountAppsArgs = {
179
182
  limit: Scalars['Int'];
180
183
  offset: Scalars['Int'];
181
184
  };
185
+ /**
186
+ * An account is a container owning projects, credentials, billing and other organization
187
+ * data and settings. Actors may own and be members of accounts.
188
+ */
189
+ export declare type AccountBillingPeriodArgs = {
190
+ date: Scalars['DateTime'];
191
+ };
182
192
  /**
183
193
  * An account is a container owning projects, credentials, billing and other organization
184
194
  * data and settings. Actors may own and be members of accounts.
@@ -322,6 +332,22 @@ export declare type AccountQueryByIdArgs = {
322
332
  export declare type AccountQueryByNameArgs = {
323
333
  accountName: Scalars['String'];
324
334
  };
335
+ export declare type AccountUsageMetric = {
336
+ __typename?: 'AccountUsageMetric';
337
+ metric: EasServiceMetric;
338
+ metricType: UsageMetricType;
339
+ timestamp: Scalars['DateTime'];
340
+ value: Scalars['Float'];
341
+ };
342
+ export declare type AccountUsageMetrics = {
343
+ __typename?: 'AccountUsageMetrics';
344
+ metricsForServiceMetric: Array<AccountUsageMetric>;
345
+ };
346
+ export declare type AccountUsageMetricsMetricsForServiceMetricArgs = {
347
+ granularity: UsageMetricsGranularity;
348
+ metric: EasServiceMetric;
349
+ timespan: UsageMetricsTimespan;
350
+ };
325
351
  export declare type ActivityTimelineProjectActivity = {
326
352
  activityTimestamp: Scalars['DateTime'];
327
353
  actor?: Maybe<Actor>;
@@ -1232,6 +1258,12 @@ export declare type Billing = {
1232
1258
  payment?: Maybe<PaymentDetails>;
1233
1259
  subscription?: Maybe<SubscriptionDetails>;
1234
1260
  };
1261
+ export declare type BillingPeriod = {
1262
+ __typename?: 'BillingPeriod';
1263
+ anchor: Scalars['DateTime'];
1264
+ end: Scalars['DateTime'];
1265
+ start: Scalars['DateTime'];
1266
+ };
1235
1267
  /** Represents an EAS Build */
1236
1268
  export declare type Build = ActivityTimelineProjectActivity & BuildOrBuildJob & {
1237
1269
  __typename?: 'Build';
@@ -1246,9 +1278,12 @@ export declare type Build = ActivityTimelineProjectActivity & BuildOrBuildJob &
1246
1278
  createdAt?: Maybe<Scalars['DateTime']>;
1247
1279
  distribution?: Maybe<DistributionType>;
1248
1280
  error?: Maybe<BuildError>;
1281
+ estimatedWaitTimeLeftSeconds?: Maybe<Scalars['Int']>;
1249
1282
  expirationDate?: Maybe<Scalars['DateTime']>;
1250
1283
  gitCommitHash?: Maybe<Scalars['String']>;
1251
1284
  id: Scalars['ID'];
1285
+ /** Queue position is 1-indexed */
1286
+ initialQueuePosition?: Maybe<Scalars['Int']>;
1252
1287
  initiatingActor?: Maybe<Actor>;
1253
1288
  /** @deprecated User type is deprecated */
1254
1289
  initiatingUser?: Maybe<User>;
@@ -1684,6 +1719,9 @@ export declare enum EasBuildDeprecationInfoType {
1684
1719
  Internal = "INTERNAL",
1685
1720
  UserFacing = "USER_FACING"
1686
1721
  }
1722
+ export declare enum EasServiceMetric {
1723
+ ManifestRequests = "MANIFEST_REQUESTS"
1724
+ }
1687
1725
  export declare type EditUpdateBranchInput = {
1688
1726
  appId?: InputMaybe<Scalars['ID']>;
1689
1727
  id?: InputMaybe<Scalars['ID']>;
@@ -2790,6 +2828,19 @@ export declare enum UploadSessionType {
2790
2828
  EasBuildProjectSources = "EAS_BUILD_PROJECT_SOURCES",
2791
2829
  EasSubmitAppArchive = "EAS_SUBMIT_APP_ARCHIVE"
2792
2830
  }
2831
+ export declare enum UsageMetricType {
2832
+ Request = "REQUEST"
2833
+ }
2834
+ export declare enum UsageMetricsGranularity {
2835
+ Day = "DAY",
2836
+ Hour = "HOUR",
2837
+ Minute = "MINUTE",
2838
+ Total = "TOTAL"
2839
+ }
2840
+ export declare type UsageMetricsTimespan = {
2841
+ end: Scalars['DateTime'];
2842
+ start: Scalars['DateTime'];
2843
+ };
2793
2844
  /** Represents a human (not robot) actor. */
2794
2845
  export declare type User = Actor & {
2795
2846
  __typename?: 'User';
@@ -2899,6 +2950,7 @@ export declare type UserInvitation = {
2899
2950
  created: Scalars['DateTime'];
2900
2951
  /** Email to which this invitation was sent */
2901
2952
  email: Scalars['String'];
2953
+ expires: Scalars['DateTime'];
2902
2954
  id: Scalars['ID'];
2903
2955
  /** Account permissions to be granted upon acceptance of this invitation */
2904
2956
  permissions: Array<Permission>;
@@ -2956,6 +3008,7 @@ export declare type UserInvitationPublicData = {
2956
3008
  accountName: Scalars['String'];
2957
3009
  created: Scalars['DateTime'];
2958
3010
  email: Scalars['String'];
3011
+ expires: Scalars['DateTime'];
2959
3012
  /** Email to which this invitation was sent */
2960
3013
  id: Scalars['ID'];
2961
3014
  };
@@ -5663,6 +5716,10 @@ export declare type CreateAndroidBuildMutation = {
5663
5716
  appBuildVersion?: string | null;
5664
5717
  runtimeVersion?: string | null;
5665
5718
  gitCommitHash?: string | null;
5719
+ initialQueuePosition?: number | null;
5720
+ queuePosition?: number | null;
5721
+ estimatedWaitTimeLeftSeconds?: number | null;
5722
+ priority: BuildPriority;
5666
5723
  createdAt?: any | null;
5667
5724
  updatedAt?: any | null;
5668
5725
  error?: {
@@ -5736,6 +5793,10 @@ export declare type CreateIosBuildMutation = {
5736
5793
  appBuildVersion?: string | null;
5737
5794
  runtimeVersion?: string | null;
5738
5795
  gitCommitHash?: string | null;
5796
+ initialQueuePosition?: number | null;
5797
+ queuePosition?: number | null;
5798
+ estimatedWaitTimeLeftSeconds?: number | null;
5799
+ priority: BuildPriority;
5739
5800
  createdAt?: any | null;
5740
5801
  updatedAt?: any | null;
5741
5802
  error?: {
@@ -6090,6 +6151,10 @@ export declare type BuildsByIdQuery = {
6090
6151
  appBuildVersion?: string | null;
6091
6152
  runtimeVersion?: string | null;
6092
6153
  gitCommitHash?: string | null;
6154
+ initialQueuePosition?: number | null;
6155
+ queuePosition?: number | null;
6156
+ estimatedWaitTimeLeftSeconds?: number | null;
6157
+ priority: BuildPriority;
6093
6158
  createdAt?: any | null;
6094
6159
  updatedAt?: any | null;
6095
6160
  error?: {
@@ -6159,6 +6224,10 @@ export declare type GetAllBuildsForAppQuery = {
6159
6224
  appBuildVersion?: string | null;
6160
6225
  runtimeVersion?: string | null;
6161
6226
  gitCommitHash?: string | null;
6227
+ initialQueuePosition?: number | null;
6228
+ queuePosition?: number | null;
6229
+ estimatedWaitTimeLeftSeconds?: number | null;
6230
+ priority: BuildPriority;
6162
6231
  createdAt?: any | null;
6163
6232
  updatedAt?: any | null;
6164
6233
  error?: {
@@ -6571,6 +6640,10 @@ export declare type BuildFragment = {
6571
6640
  appBuildVersion?: string | null;
6572
6641
  runtimeVersion?: string | null;
6573
6642
  gitCommitHash?: string | null;
6643
+ initialQueuePosition?: number | null;
6644
+ queuePosition?: number | null;
6645
+ estimatedWaitTimeLeftSeconds?: number | null;
6646
+ priority: BuildPriority;
6574
6647
  createdAt?: any | null;
6575
6648
  updatedAt?: any | null;
6576
6649
  error?: {
@@ -6,7 +6,7 @@
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.WebhookType = exports.UploadSessionType = exports.SubmissionStatus = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = 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.Feature = exports.EasBuildDeprecationInfoType = exports.DistributionType = exports.CacheControlScope = exports.BuildWorkflow = exports.BuildStatus = exports.BuildPriority = exports.BuildJobStatus = exports.BuildJobLogsFormat = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.AssetMetadataStatus = exports.AppsFilter = exports.AppleDeviceClass = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppPrivacy = exports.AppPlatform = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = void 0;
9
+ exports.WebhookType = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.SubmissionStatus = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = 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.Feature = exports.EasServiceMetric = exports.EasBuildDeprecationInfoType = exports.DistributionType = exports.CacheControlScope = exports.BuildWorkflow = exports.BuildStatus = exports.BuildPriority = exports.BuildJobStatus = exports.BuildJobLogsFormat = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = 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
10
  var ActivityTimelineProjectActivityType;
11
11
  (function (ActivityTimelineProjectActivityType) {
12
12
  ActivityTimelineProjectActivityType["Build"] = "BUILD";
@@ -145,6 +145,10 @@ var EasBuildDeprecationInfoType;
145
145
  EasBuildDeprecationInfoType["Internal"] = "INTERNAL";
146
146
  EasBuildDeprecationInfoType["UserFacing"] = "USER_FACING";
147
147
  })(EasBuildDeprecationInfoType = exports.EasBuildDeprecationInfoType || (exports.EasBuildDeprecationInfoType = {}));
148
+ var EasServiceMetric;
149
+ (function (EasServiceMetric) {
150
+ EasServiceMetric["ManifestRequests"] = "MANIFEST_REQUESTS";
151
+ })(EasServiceMetric = exports.EasServiceMetric || (exports.EasServiceMetric = {}));
148
152
  var Feature;
149
153
  (function (Feature) {
150
154
  /** Priority Builds */
@@ -281,6 +285,17 @@ var UploadSessionType;
281
285
  UploadSessionType["EasBuildProjectSources"] = "EAS_BUILD_PROJECT_SOURCES";
282
286
  UploadSessionType["EasSubmitAppArchive"] = "EAS_SUBMIT_APP_ARCHIVE";
283
287
  })(UploadSessionType = exports.UploadSessionType || (exports.UploadSessionType = {}));
288
+ var UsageMetricType;
289
+ (function (UsageMetricType) {
290
+ UsageMetricType["Request"] = "REQUEST";
291
+ })(UsageMetricType = exports.UsageMetricType || (exports.UsageMetricType = {}));
292
+ var UsageMetricsGranularity;
293
+ (function (UsageMetricsGranularity) {
294
+ UsageMetricsGranularity["Day"] = "DAY";
295
+ UsageMetricsGranularity["Hour"] = "HOUR";
296
+ UsageMetricsGranularity["Minute"] = "MINUTE";
297
+ UsageMetricsGranularity["Total"] = "TOTAL";
298
+ })(UsageMetricsGranularity = exports.UsageMetricsGranularity || (exports.UsageMetricsGranularity = {}));
284
299
  var WebhookType;
285
300
  (function (WebhookType) {
286
301
  WebhookType["Build"] = "BUILD";
@@ -44,6 +44,10 @@ exports.BuildFragmentNode = (0, graphql_tag_1.default) `
44
44
  appBuildVersion
45
45
  runtimeVersion
46
46
  gitCommitHash
47
+ initialQueuePosition
48
+ queuePosition
49
+ estimatedWaitTimeLeftSeconds
50
+ priority
47
51
  createdAt
48
52
  updatedAt
49
53
  }
@@ -1,7 +1,6 @@
1
1
  import { Platform } from '@expo/eas-build-job';
2
2
  import { SubmissionContext } from '../context';
3
3
  declare type AppStoreResult = {
4
- appleIdUsername: string;
5
4
  ascAppIdentifier: string;
6
5
  };
7
6
  export declare function ensureAppStoreConnectAppExistsAsync(ctx: SubmissionContext<Platform.IOS>): Promise<AppStoreResult>;
@@ -32,24 +32,24 @@ async function isProvisioningAvailableAsync(requestCtx) {
32
32
  }
33
33
  async function createAppStoreConnectAppAsync(ctx, options) {
34
34
  const { appleId, appleTeamId, bundleIdentifier: bundleId, appName, language, companyName, sku, } = options;
35
- const authCtx = await ctx.credentialsCtx.appStore.ensureAuthenticatedAsync({
35
+ const userAuthCtx = await ctx.credentialsCtx.appStore.ensureUserAuthenticatedAsync({
36
36
  appleId,
37
37
  teamId: appleTeamId,
38
38
  });
39
- const requestCtx = (0, authenticate_1.getRequestContext)(authCtx);
39
+ const requestCtx = (0, authenticate_1.getRequestContext)(userAuthCtx);
40
40
  log_1.default.addNewLineIfNone();
41
41
  if (await isProvisioningAvailableAsync(requestCtx)) {
42
- await (0, ensureAppExists_1.ensureBundleIdExistsWithNameAsync)(authCtx, {
42
+ await (0, ensureAppExists_1.ensureBundleIdExistsWithNameAsync)(userAuthCtx, {
43
43
  name: appName,
44
44
  bundleIdentifier: bundleId,
45
45
  });
46
46
  }
47
47
  else {
48
- log_1.default.warn(`Provisioning is not available for user "${authCtx.appleId}", skipping bundle identifier check.`);
48
+ log_1.default.warn(`Provisioning is not available for Apple User: ${userAuthCtx.appleId}, skipping bundle identifier check.`);
49
49
  }
50
50
  let app = null;
51
51
  try {
52
- app = await (0, ensureAppExists_1.ensureAppExistsAsync)(authCtx, {
52
+ app = await (0, ensureAppExists_1.ensureAppExistsAsync)(userAuthCtx, {
53
53
  name: appName,
54
54
  language,
55
55
  companyName,
@@ -74,7 +74,6 @@ async function createAppStoreConnectAppAsync(ctx, options) {
74
74
  throw error;
75
75
  }
76
76
  return {
77
- appleIdUsername: authCtx.appleId,
78
77
  ascAppIdentifier: app.id,
79
78
  };
80
79
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAppleIdUsernameAsync = exports.getAppSpecificPasswordLocallyAsync = exports.AppSpecificPasswordSourceType = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const getenv_1 = tslib_1.__importDefault(require("getenv"));
6
+ const authenticate_1 = require("../../credentials/ios/appstore/authenticate");
6
7
  const prompts_1 = require("../../prompts");
7
8
  const UserSettings_1 = tslib_1.__importDefault(require("../../user/UserSettings"));
8
9
  var AppSpecificPasswordSourceType;
@@ -23,7 +24,6 @@ async function getAppSpecificPasswordLocallyAsync(ctx, source) {
23
24
  }
24
25
  exports.getAppSpecificPasswordLocallyAsync = getAppSpecificPasswordLocallyAsync;
25
26
  async function getAppleIdUsernameAsync(ctx) {
26
- var _a;
27
27
  if (ctx.profile.appleId) {
28
28
  return ctx.profile.appleId;
29
29
  }
@@ -31,7 +31,7 @@ async function getAppleIdUsernameAsync(ctx) {
31
31
  if (envAppleId) {
32
32
  return envAppleId;
33
33
  }
34
- if ((_a = ctx.credentialsCtx.appStore.authCtx) === null || _a === void 0 ? void 0 : _a.appleId) {
34
+ if ((0, authenticate_1.isUserAuthCtx)(ctx.credentialsCtx.appStore.authCtx)) {
35
35
  return ctx.credentialsCtx.appStore.authCtx.appleId;
36
36
  }
37
37
  // Get the email address that was last used and set it as
@@ -18,11 +18,6 @@ export declare function getKeyAndCertificateFromPathsAsync({ codeSigningCertific
18
18
  privateKey: PKI.rsa.PrivateKey;
19
19
  certificate: PKI.Certificate;
20
20
  }>;
21
- export declare type MultipartPart = {
22
- headers: Map<string, string>;
23
- body: string;
24
- };
25
- export declare function parseMultipartMixedResponseAsync(res: Response): Promise<MultipartPart[]>;
26
21
  export declare function getManifestBodyAsync(res: Response): Promise<string | null>;
27
22
  export declare function signManifestBody(body: string, codeSigningInfo: CodeSigningInfo): string;
28
23
  export declare function checkManifestBodyAgainstUpdateInfoGroup(manifestResponseBody: string, partialManifest: PartialManifest): void;
@@ -1,15 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkManifestBodyAgainstUpdateInfoGroup = exports.signManifestBody = exports.getManifestBodyAsync = exports.parseMultipartMixedResponseAsync = exports.getKeyAndCertificateFromPathsAsync = exports.getCodeSigningInfoAsync = void 0;
3
+ exports.checkManifestBodyAgainstUpdateInfoGroup = exports.signManifestBody = exports.getManifestBodyAsync = exports.getKeyAndCertificateFromPathsAsync = exports.getCodeSigningInfoAsync = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const code_signing_certificates_1 = require("@expo/code-signing-certificates");
6
- const dicer_1 = tslib_1.__importDefault(require("dicer"));
6
+ const multipart_body_parser_1 = require("@expo/multipart-body-parser");
7
7
  const fast_deep_equal_1 = tslib_1.__importDefault(require("fast-deep-equal"));
8
8
  const fs_1 = require("fs");
9
9
  const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
10
10
  const path_1 = tslib_1.__importDefault(require("path"));
11
- const stream_1 = require("stream");
12
- const structured_headers_1 = require("structured-headers");
13
11
  async function getCodeSigningInfoAsync(config, privateKeyPath) {
14
12
  var _a, _b;
15
13
  const codeSigningCertificatePath = (_a = config.updates) === null || _a === void 0 ? void 0 : _a.codeSigningCertificate;
@@ -66,59 +64,15 @@ async function getKeyAndCertificateFromPathsAsync({ codeSigningCertificatePath,
66
64
  };
67
65
  }
68
66
  exports.getKeyAndCertificateFromPathsAsync = getKeyAndCertificateFromPathsAsync;
69
- async function parseMultipartMixedResponseAsync(res) {
67
+ async function getManifestBodyAsync(res) {
70
68
  var _a;
71
69
  const contentType = res.headers.get('content-type');
72
70
  if (!contentType) {
73
71
  throw new Error('The multipart manifest response is missing the content-type header');
74
72
  }
75
- const boundaryRegex = /^multipart\/.+?; boundary=(?:"([^"]+)"|([^\s;]+))/i;
76
- const matches = boundaryRegex.exec(contentType);
77
- if (!matches) {
78
- throw new Error('The content-type header in the HTTP response is not a multipart media type');
79
- }
80
- const boundary = (_a = matches[1]) !== null && _a !== void 0 ? _a : matches[2];
81
73
  const bodyBuffer = await res.arrayBuffer();
82
- const bufferStream = new stream_1.Stream.PassThrough();
83
- bufferStream.end(bodyBuffer);
84
- return await new Promise((resolve, reject) => {
85
- const parts = [];
86
- bufferStream.pipe(new dicer_1.default({ boundary })
87
- .on('part', p => {
88
- const part = {
89
- body: '',
90
- headers: new Map(),
91
- };
92
- p.on('header', headers => {
93
- for (const h in headers) {
94
- part.headers.set(h, headers[h][0]);
95
- }
96
- });
97
- p.on('data', data => {
98
- part.body += data.toString();
99
- });
100
- p.on('end', () => {
101
- parts.push(part);
102
- });
103
- })
104
- .on('finish', () => {
105
- resolve(parts);
106
- })
107
- .on('error', error => {
108
- reject(error);
109
- }));
110
- });
111
- }
112
- exports.parseMultipartMixedResponseAsync = parseMultipartMixedResponseAsync;
113
- function isManifestMultipartPart(multipartPart) {
114
- const [, parameters] = (0, structured_headers_1.parseItem)((0, nullthrows_1.default)(multipartPart.headers.get('content-disposition')));
115
- const partName = parameters.get('name');
116
- return partName === 'manifest';
117
- }
118
- async function getManifestBodyAsync(res) {
119
- var _a;
120
- const multipartParts = await parseMultipartMixedResponseAsync(res);
121
- const manifestPart = multipartParts.find(isManifestMultipartPart);
74
+ const multipartParts = await (0, multipart_body_parser_1.parseMultipartMixedResponseAsync)(contentType, Buffer.from(bodyBuffer));
75
+ const manifestPart = multipartParts.find(part => (0, multipart_body_parser_1.isMultipartPartWithName)(part, 'manifest'));
122
76
  return (_a = manifestPart === null || manifestPart === void 0 ? void 0 : manifestPart.body) !== null && _a !== void 0 ? _a : null;
123
77
  }
124
78
  exports.getManifestBodyAsync = getManifestBodyAsync;
@@ -1 +1 @@
1
- {"version":"0.49.0","commands":{"analytics":{"id":"analytics","description":"display or change analytics settings","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"display project configuration (app.json + eas.json)","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"credentials":{"id":"credentials","description":"manage credentials","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"display environment info","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit app binary to App Store and/or Play Store","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]},"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json.","multiple":false},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false,"exclusive":["id","path","url"]},"id":{"name":"id","type":"option","description":"ID of the build to submit","multiple":false,"exclusive":["latest, path, url"]},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file","multiple":false,"exclusive":["latest","id","url"]},"url":{"name":"url","type":"option","description":"App archive url","multiple":false,"exclusive":["latest","id","path"]},"verbose":{"name":"verbose","type":"boolean","description":"Always print logs from Submission Service","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for submission to complete","allowNo":true},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[],"_globalFlags":{}},"account:login":{"id":"account:login","description":"log in with your Expo account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"create a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the new branch ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to create","required":false}],"_globalFlags":{}},"branch:delete":{"id":"branch:delete","description":"delete a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return JSON with the edited branch's ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to delete","required":false}],"_globalFlags":{}},"branch:list":{"id":"branch:list","description":"list all branches","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[],"_globalFlags":{}},"branch:publish":{"id":"branch:publish","description":"deprecated, use \"eas update\"","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{},"args":[]},"branch:rename":{"id":"branch:rename","description":"rename a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false,"multiple":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false,"multiple":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[],"_globalFlags":{}},"branch:view":{"id":"branch:view","description":"view a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the branch's ID name and recent update groups.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to view","required":false}],"_globalFlags":{}},"build:cancel":{"id":"build:cancel","description":"cancel a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"configure the project to support EAS Build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]}},"args":[],"_globalFlags":{}},"build":{"id":"build","description":"start a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]},"skip-credentials-check":{"name":"skip-credentials-check","type":"boolean","hidden":true,"allowNo":false},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"skip-project-configuration":{"name":"skip-project-configuration","type":"boolean","hidden":true,"allowNo":false},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME","multiple":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false},"local":{"name":"local","type":"boolean","description":"Run build locally [experimental]","allowNo":false},"output":{"name":"output","type":"option","description":"Output path for local build","multiple":false},"wait":{"name":"wait","type":"boolean","description":"Wait for build(s) to complete","allowNo":true},"clear-cache":{"name":"clear-cache","type":"boolean","description":"Clear cache before the build","allowNo":false},"auto-submit":{"name":"auto-submit","type":"boolean","description":"Submit on build complete using the submit profile with the same name as the build profile","allowNo":false,"exclusive":["auto-submit-with-profile"]},"auto-submit-with-profile":{"name":"auto-submit-with-profile","type":"option","description":"Submit on build complete using the submit profile with provided name","helpValue":"PROFILE_NAME","multiple":false,"exclusive":["auto-submit"]}},"args":[],"_globalFlags":{}},"build:inspect":{"id":"build:inspect","description":"inspect the state of the project at specific build stages, useful for troubleshooting","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","required":true,"helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME","multiple":false},"stage":{"name":"stage","type":"option","char":"s","description":"Stage of the build you want to inspect.\n archive - builds the project archive that would be uploaded to EAS when building\n pre-build - prepares the project to be built with Gradle/Xcode. Does not run the native build.\n post-build - builds the native project and leaves the output directory for inspection","required":true,"helpValue":"(archive|pre-build|post-build)","multiple":false,"options":["archive","pre-build","post-build"]},"output":{"name":"output","type":"option","char":"o","description":"Output directory.","required":true,"helpValue":"OUTPUT_DIRECTORY","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete OUTPUT_DIRECTORY if it already exists.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[],"_globalFlags":{}},"build:list":{"id":"build:list","description":"list all builds for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","multiple":false,"options":["all","android","ios"]},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"status":{"name":"status","type":"option","helpValue":"(new|in-queue|in-progress|errored|finished|canceled)","multiple":false,"options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","multiple":false,"options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option","multiple":false},"appVersion":{"name":"appVersion","type":"option","multiple":false},"appBuildVersion":{"name":"appBuildVersion","type":"option","multiple":false},"sdkVersion":{"name":"sdkVersion","type":"option","multiple":false},"runtimeVersion":{"name":"runtimeVersion","type":"option","multiple":false},"appIdentifier":{"name":"appIdentifier","type":"option","multiple":false},"buildProfile":{"name":"buildProfile","type":"option","multiple":false},"gitCommitHash":{"name":"gitCommitHash","type":"option","multiple":false},"limit":{"name":"limit","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"build:view":{"id":"build:view","description":"view a build for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false}},"args":[{"name":"BUILD_ID"}],"_globalFlags":{}},"channel:create":{"id":"channel:create","description":"create a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to create","required":false}],"_globalFlags":{}},"channel:delete":{"id":"channel:delete","description":"Delete a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object","allowNo":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to delete","required":false}],"_globalFlags":{}},"channel:edit":{"id":"channel:edit","description":"point a channel at a new branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to","multiple":false},"json":{"name":"json","type":"boolean","description":"Print output as a JSON object with the channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to edit","required":false}],"_globalFlags":{}},"channel:list":{"id":"channel:list","description":"list all channels","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[],"_globalFlags":{}},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false,"multiple":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false,"multiple":false},"end":{"name":"end","type":"boolean","description":"end the rollout","allowNo":false},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"channel","description":"rollout that the channel is on","required":true}],"_globalFlags":{}},"channel:view":{"id":"channel:view","description":"view a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to view","required":false}],"_globalFlags":{}},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:delete":{"id":"device:delete","description":"remove a registered device from your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false},"udid":{"name":"udid","type":"option","multiple":true}},"args":[],"_globalFlags":{}},"device:list":{"id":"device:list","description":"list all registered devices for your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"device:view":{"id":"device:view","description":"view a device for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"project:info":{"id":"project:info","description":"information about the current project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["init"],"flags":{},"args":[]},"secret:create":{"id":"secret:create","description":"create an environment secret on the current project or owner account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","multiple":false,"options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret","multiple":false},"value":{"name":"value","type":"option","description":"Value of the secret","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[],"_globalFlags":{}},"secret:delete":{"id":"secret:delete","description":"delete an environment secret by ID","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete","multiple":false}},"args":[],"_globalFlags":{}},"secret:list":{"id":"secret:list","description":"list environment secrets available for your current app","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:configure":{"id":"update:configure","description":"configure the project to support EAS Update","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"}},"args":[],"_globalFlags":{}},"update:delete":{"id":"update:delete","description":"delete all the updates in an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the group ID of the deleted updates.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group to delete.","required":true}],"_globalFlags":{}},"update":{"id":"update","description":"publish an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Branch to publish the update group on","required":false,"multiple":false},"message":{"name":"message","type":"option","description":"A short message describing the update","required":false,"multiple":false},"republish":{"name":"republish","type":"boolean","description":"Republish an update group","allowNo":false,"exclusive":["input-dir","skip-bundler"]},"group":{"name":"group","type":"option","description":"Update group to republish","multiple":false,"exclusive":["input-dir","skip-bundler"]},"input-dir":{"name":"input-dir","type":"option","description":"Location of the bundle","required":false,"multiple":false,"default":"dist"},"skip-bundler":{"name":"skip-bundler","type":"boolean","description":"Skip running Expo CLI to bundle the app before publishing","allowNo":false},"platform":{"name":"platform","type":"option","char":"p","required":false,"helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"auto":{"name":"auto","type":"boolean","description":"Use the current git branch and commit message for the EAS branch and update message","allowNo":false},"private-key-path":{"name":"private-key-path","type":"option","description":"File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named \"private-key.pem\" in the certificate's directory.","required":false,"multiple":false}},"args":[],"_globalFlags":{}},"update:list":{"id":"update:list","description":"view the recent updates for a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"List all updates on this branch","multiple":false,"exclusive":["all"]},"all":{"name":"all","type":"boolean","description":"List all updates associated with this project","allowNo":false,"exclusive":["branch"]},"json":{"name":"json","type":"boolean","description":"Return a json with all of the recent update groups.","allowNo":false}},"args":[],"_globalFlags":{}},"update:view":{"id":"update:view","description":"update group details","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the updates belonging to the group.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group.","required":true}],"_globalFlags":{}},"webhook:create":{"id":"webhook:create","description":"create a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:delete":{"id":"webhook:delete","description":"delete a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to delete","required":false}]},"webhook:list":{"id":"webhook:list","description":"list webhooks","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]}},"args":[],"_globalFlags":{}},"webhook:update":{"id":"webhook:update","description":"update a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true,"multiple":false},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:view":{"id":"webhook:view","description":"view a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
1
+ {"version":"0.50.0","commands":{"analytics":{"id":"analytics","description":"display or change analytics settings","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"display project configuration (app.json + eas.json)","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"credentials":{"id":"credentials","description":"manage credentials","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"display environment info","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit app binary to App Store and/or Play Store","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]},"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json.","multiple":false},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false,"exclusive":["id","path","url"]},"id":{"name":"id","type":"option","description":"ID of the build to submit","multiple":false,"exclusive":["latest, path, url"]},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file","multiple":false,"exclusive":["latest","id","url"]},"url":{"name":"url","type":"option","description":"App archive url","multiple":false,"exclusive":["latest","id","path"]},"verbose":{"name":"verbose","type":"boolean","description":"Always print logs from Submission Service","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for submission to complete","allowNo":true},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[],"_globalFlags":{}},"account:login":{"id":"account:login","description":"log in with your Expo account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"create a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the new branch ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to create","required":false}],"_globalFlags":{}},"branch:delete":{"id":"branch:delete","description":"delete a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return JSON with the edited branch's ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to delete","required":false}],"_globalFlags":{}},"branch:list":{"id":"branch:list","description":"list all branches","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[],"_globalFlags":{}},"branch:publish":{"id":"branch:publish","description":"deprecated, use \"eas update\"","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{},"args":[]},"branch:rename":{"id":"branch:rename","description":"rename a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false,"multiple":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false,"multiple":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[],"_globalFlags":{}},"branch:view":{"id":"branch:view","description":"view a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the branch's ID name and recent update groups.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to view","required":false}],"_globalFlags":{}},"build:cancel":{"id":"build:cancel","description":"cancel a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"configure the project to support EAS Build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]}},"args":[],"_globalFlags":{}},"build":{"id":"build","description":"start a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]},"skip-credentials-check":{"name":"skip-credentials-check","type":"boolean","hidden":true,"allowNo":false},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"skip-project-configuration":{"name":"skip-project-configuration","type":"boolean","hidden":true,"allowNo":false},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME","multiple":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false},"local":{"name":"local","type":"boolean","description":"Run build locally [experimental]","allowNo":false},"output":{"name":"output","type":"option","description":"Output path for local build","multiple":false},"wait":{"name":"wait","type":"boolean","description":"Wait for build(s) to complete","allowNo":true},"clear-cache":{"name":"clear-cache","type":"boolean","description":"Clear cache before the build","allowNo":false},"auto-submit":{"name":"auto-submit","type":"boolean","description":"Submit on build complete using the submit profile with the same name as the build profile","allowNo":false,"exclusive":["auto-submit-with-profile"]},"auto-submit-with-profile":{"name":"auto-submit-with-profile","type":"option","description":"Submit on build complete using the submit profile with provided name","helpValue":"PROFILE_NAME","multiple":false,"exclusive":["auto-submit"]}},"args":[],"_globalFlags":{}},"build:inspect":{"id":"build:inspect","description":"inspect the state of the project at specific build stages, useful for troubleshooting","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","required":true,"helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME","multiple":false},"stage":{"name":"stage","type":"option","char":"s","description":"Stage of the build you want to inspect.\n archive - builds the project archive that would be uploaded to EAS when building\n pre-build - prepares the project to be built with Gradle/Xcode. Does not run the native build.\n post-build - builds the native project and leaves the output directory for inspection","required":true,"helpValue":"(archive|pre-build|post-build)","multiple":false,"options":["archive","pre-build","post-build"]},"output":{"name":"output","type":"option","char":"o","description":"Output directory.","required":true,"helpValue":"OUTPUT_DIRECTORY","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete OUTPUT_DIRECTORY if it already exists.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[],"_globalFlags":{}},"build:list":{"id":"build:list","description":"list all builds for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","multiple":false,"options":["all","android","ios"]},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"status":{"name":"status","type":"option","helpValue":"(new|in-queue|in-progress|errored|finished|canceled)","multiple":false,"options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","multiple":false,"options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option","multiple":false},"appVersion":{"name":"appVersion","type":"option","multiple":false},"appBuildVersion":{"name":"appBuildVersion","type":"option","multiple":false},"sdkVersion":{"name":"sdkVersion","type":"option","multiple":false},"runtimeVersion":{"name":"runtimeVersion","type":"option","multiple":false},"appIdentifier":{"name":"appIdentifier","type":"option","multiple":false},"buildProfile":{"name":"buildProfile","type":"option","multiple":false},"gitCommitHash":{"name":"gitCommitHash","type":"option","multiple":false},"limit":{"name":"limit","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"build:view":{"id":"build:view","description":"view a build for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false}},"args":[{"name":"BUILD_ID"}],"_globalFlags":{}},"channel:create":{"id":"channel:create","description":"create a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to create","required":false}],"_globalFlags":{}},"channel:delete":{"id":"channel:delete","description":"Delete a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object","allowNo":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to delete","required":false}],"_globalFlags":{}},"channel:edit":{"id":"channel:edit","description":"point a channel at a new branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to","multiple":false},"json":{"name":"json","type":"boolean","description":"Print output as a JSON object with the channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to edit","required":false}],"_globalFlags":{}},"channel:list":{"id":"channel:list","description":"list all channels","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[],"_globalFlags":{}},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false,"multiple":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false,"multiple":false},"end":{"name":"end","type":"boolean","description":"end the rollout","allowNo":false},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"channel","description":"rollout that the channel is on","required":true}],"_globalFlags":{}},"channel:view":{"id":"channel:view","description":"view a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to view","required":false}],"_globalFlags":{}},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:delete":{"id":"device:delete","description":"remove a registered device from your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false},"udid":{"name":"udid","type":"option","multiple":true}},"args":[],"_globalFlags":{}},"device:list":{"id":"device:list","description":"list all registered devices for your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"device:view":{"id":"device:view","description":"view a device for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"project:info":{"id":"project:info","description":"information about the current project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["init"],"flags":{},"args":[]},"secret:create":{"id":"secret:create","description":"create an environment secret on the current project or owner account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","multiple":false,"options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret","multiple":false},"value":{"name":"value","type":"option","description":"Value of the secret","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[],"_globalFlags":{}},"secret:delete":{"id":"secret:delete","description":"delete an environment secret by ID","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete","multiple":false}},"args":[],"_globalFlags":{}},"secret:list":{"id":"secret:list","description":"list environment secrets available for your current app","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:configure":{"id":"update:configure","description":"configure the project to support EAS Update","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"}},"args":[],"_globalFlags":{}},"update:delete":{"id":"update:delete","description":"delete all the updates in an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the group ID of the deleted updates.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group to delete.","required":true}],"_globalFlags":{}},"update":{"id":"update","description":"publish an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Branch to publish the update group on","required":false,"multiple":false},"message":{"name":"message","type":"option","description":"A short message describing the update","required":false,"multiple":false},"republish":{"name":"republish","type":"boolean","description":"Republish an update group","allowNo":false,"exclusive":["input-dir","skip-bundler"]},"group":{"name":"group","type":"option","description":"Update group to republish","multiple":false,"exclusive":["input-dir","skip-bundler"]},"input-dir":{"name":"input-dir","type":"option","description":"Location of the bundle","required":false,"multiple":false,"default":"dist"},"skip-bundler":{"name":"skip-bundler","type":"boolean","description":"Skip running Expo CLI to bundle the app before publishing","allowNo":false},"platform":{"name":"platform","type":"option","char":"p","required":false,"helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"auto":{"name":"auto","type":"boolean","description":"Use the current git branch and commit message for the EAS branch and update message","allowNo":false},"private-key-path":{"name":"private-key-path","type":"option","description":"File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named \"private-key.pem\" in the certificate's directory.","required":false,"multiple":false}},"args":[],"_globalFlags":{}},"update:list":{"id":"update:list","description":"view the recent updates for a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"List all updates on this branch","multiple":false,"exclusive":["all"]},"all":{"name":"all","type":"boolean","description":"List all updates associated with this project","allowNo":false,"exclusive":["branch"]},"json":{"name":"json","type":"boolean","description":"Return a json with all of the recent update groups.","allowNo":false}},"args":[],"_globalFlags":{}},"update:view":{"id":"update:view","description":"update group details","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the updates belonging to the group.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group.","required":true}],"_globalFlags":{}},"webhook:create":{"id":"webhook:create","description":"create a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:delete":{"id":"webhook:delete","description":"delete a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to delete","required":false}]},"webhook:list":{"id":"webhook:list","description":"list webhooks","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]}},"args":[],"_globalFlags":{}},"webhook:update":{"id":"webhook:update","description":"update a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true,"multiple":false},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:view":{"id":"webhook:view","description":"view a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eas-cli",
3
3
  "description": "EAS command line tool",
4
- "version": "0.49.0",
4
+ "version": "0.50.0",
5
5
  "author": "Expo <support@expo.dev>",
6
6
  "bin": {
7
7
  "eas": "./bin/run"
@@ -14,8 +14,9 @@
14
14
  "@expo/config-plugins": "4.1.0",
15
15
  "@expo/config-types": "44.0.0",
16
16
  "@expo/eas-build-job": "0.2.68",
17
- "@expo/eas-json": "0.49.0",
17
+ "@expo/eas-json": "0.50.0",
18
18
  "@expo/json-file": "8.2.34",
19
+ "@expo/multipart-body-parser": "1.1.0",
19
20
  "@expo/pkcs12": "0.0.7",
20
21
  "@expo/plist": "0.0.17",
21
22
  "@expo/plugin-warn-if-update-available": "2.1.0",
@@ -30,9 +31,9 @@
30
31
  "@urql/core": "2.4.3",
31
32
  "@urql/exchange-retry": "0.3.2",
32
33
  "chalk": "4.1.2",
34
+ "cli-progress": "3.10.0",
33
35
  "cli-table3": "0.6.1",
34
36
  "dateformat": "4.6.3",
35
- "dicer": "0.3.1",
36
37
  "env-paths": "2.2.0",
37
38
  "envinfo": "7.8.1",
38
39
  "fast-deep-equal": "3.1.3",
@@ -65,7 +66,6 @@
65
66
  "semver": "7.3.5",
66
67
  "slash": "3.0.0",
67
68
  "strip-ansi": "6.0.0",
68
- "structured-headers": "0.4.1",
69
69
  "tar": "6.1.11",
70
70
  "terminal-link": "2.1.1",
71
71
  "tslib": "2.3.1",
@@ -79,8 +79,8 @@
79
79
  "@graphql-codegen/introspection": "2.1.1",
80
80
  "@graphql-codegen/typescript": "2.4.8",
81
81
  "@graphql-codegen/typescript-operations": "2.3.5",
82
+ "@types/cli-progress": "3.9.2",
82
83
  "@types/dateformat": "3.0.1",
83
- "@types/dicer": "0.2.2",
84
84
  "@types/envinfo": "7.8.1",
85
85
  "@types/fs-extra": "9.0.13",
86
86
  "@types/getenv": "^1.0.0",
@@ -195,5 +195,5 @@
195
195
  "generate-graphql-code": "graphql-codegen --config graphql-codegen.yml",
196
196
  "clean": "rm -rf dist build tmp node_modules yarn-error.log"
197
197
  },
198
- "gitHead": "1b02a67d886f7676eddd9ac1d0688230c76c7b16"
198
+ "gitHead": "80cc849137cbb439df1184bb222bf97f82f5783e"
199
199
  }