@automattic/vip 2.21.0 → 2.23.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 (111) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/assets/dev-env.lando.template.yml.ejs +1 -1
  3. package/automattic-vip-2.23.0.tgz +0 -0
  4. package/dist/bin/vip-app-list.js +0 -12
  5. package/dist/bin/vip-app.js +6 -13
  6. package/dist/bin/vip-cache-purge-url.js +4 -19
  7. package/dist/bin/vip-cache.js +0 -2
  8. package/dist/bin/vip-config-envvar-delete.js +4 -19
  9. package/dist/bin/vip-config-envvar-get-all.js +6 -19
  10. package/dist/bin/vip-config-envvar-get.js +4 -15
  11. package/dist/bin/vip-config-envvar-list.js +8 -20
  12. package/dist/bin/vip-config-envvar-set.js +4 -23
  13. package/dist/bin/vip-config-envvar.js +0 -2
  14. package/dist/bin/vip-config-software-get.js +0 -17
  15. package/dist/bin/vip-config-software-update.js +6 -22
  16. package/dist/bin/vip-config-software.js +0 -2
  17. package/dist/bin/vip-config.js +0 -2
  18. package/dist/bin/vip-dev-env-create.js +0 -18
  19. package/dist/bin/vip-dev-env-destroy.js +0 -9
  20. package/dist/bin/vip-dev-env-exec.js +0 -12
  21. package/dist/bin/vip-dev-env-import-media.js +0 -7
  22. package/dist/bin/vip-dev-env-import-sql.js +2 -17
  23. package/dist/bin/vip-dev-env-import.js +0 -3
  24. package/dist/bin/vip-dev-env-info.js +0 -10
  25. package/dist/bin/vip-dev-env-list.js +0 -7
  26. package/dist/bin/vip-dev-env-start.js +4 -14
  27. package/dist/bin/vip-dev-env-stop.js +0 -9
  28. package/dist/bin/vip-dev-env-update.js +0 -11
  29. package/dist/bin/vip-dev-env.js +0 -2
  30. package/dist/bin/vip-import-media-abort.js +0 -18
  31. package/dist/bin/vip-import-media-status.js +0 -12
  32. package/dist/bin/vip-import-media.js +6 -23
  33. package/dist/bin/vip-import-sql-status.js +0 -12
  34. package/dist/bin/vip-import-sql.js +40 -103
  35. package/dist/bin/vip-import-validate-files.js +21 -42
  36. package/dist/bin/vip-import-validate-sql.js +0 -8
  37. package/dist/bin/vip-import.js +0 -3
  38. package/dist/bin/vip-logs.js +20 -50
  39. package/dist/bin/vip-search-replace.js +8 -14
  40. package/dist/bin/vip-sync.js +2 -25
  41. package/dist/bin/vip-validate-preflight.js +427 -0
  42. package/dist/bin/vip-validate.js +19 -0
  43. package/dist/bin/vip-whoami.js +2 -14
  44. package/dist/bin/vip-wp.js +39 -89
  45. package/dist/bin/vip.js +5 -35
  46. package/dist/lib/analytics/clients/pendo.js +9 -18
  47. package/dist/lib/analytics/clients/stub.js +1 -3
  48. package/dist/lib/analytics/clients/tracks.js +11 -20
  49. package/dist/lib/analytics/index.js +4 -11
  50. package/dist/lib/api/app.js +1 -11
  51. package/dist/lib/api/cache-purge.js +4 -7
  52. package/dist/lib/api/feature-flags.js +1 -4
  53. package/dist/lib/api/http.js +9 -15
  54. package/dist/lib/api/user.js +1 -7
  55. package/dist/lib/api.js +17 -19
  56. package/dist/lib/app-logs/app-logs.js +2 -9
  57. package/dist/lib/app.js +2 -5
  58. package/dist/lib/cli/apiConfig.js +4 -19
  59. package/dist/lib/cli/command.js +43 -133
  60. package/dist/lib/cli/config.js +1 -5
  61. package/dist/lib/cli/envAlias.js +14 -15
  62. package/dist/lib/cli/exit.js +4 -6
  63. package/dist/lib/cli/format.js +8 -50
  64. package/dist/lib/cli/progress.js +13 -42
  65. package/dist/lib/cli/prompt.js +1 -5
  66. package/dist/lib/cli/repo.js +7 -20
  67. package/dist/lib/client-file-uploader.js +44 -97
  68. package/dist/lib/config/software.js +2 -52
  69. package/dist/lib/constants/dev-environment.js +1 -2
  70. package/dist/lib/constants/file-size.js +1 -1
  71. package/dist/lib/constants/vipgo.js +1 -1
  72. package/dist/lib/dev-environment/dev-environment-cli.js +68 -155
  73. package/dist/lib/dev-environment/dev-environment-core.js +73 -194
  74. package/dist/lib/dev-environment/dev-environment-lando.js +16 -71
  75. package/dist/lib/env.js +1 -4
  76. package/dist/lib/envvar/api-delete.js +1 -4
  77. package/dist/lib/envvar/api-get-all.js +1 -4
  78. package/dist/lib/envvar/api-get.js +1 -2
  79. package/dist/lib/envvar/api-list.js +3 -4
  80. package/dist/lib/envvar/api-set.js +1 -4
  81. package/dist/lib/envvar/api.js +5 -16
  82. package/dist/lib/envvar/input.js +1 -8
  83. package/dist/lib/envvar/logging.js +2 -6
  84. package/dist/lib/envvar/read-file.js +1 -3
  85. package/dist/lib/http/proxy-agent.js +17 -22
  86. package/dist/lib/keychain/browser.js +1 -4
  87. package/dist/lib/keychain/insecure.js +1 -10
  88. package/dist/lib/keychain/secure.js +1 -8
  89. package/dist/lib/keychain.js +4 -8
  90. package/dist/lib/logout.js +0 -6
  91. package/dist/lib/media-import/media-file-import.js +3 -7
  92. package/dist/lib/media-import/progress.js +6 -17
  93. package/dist/lib/media-import/status.js +14 -65
  94. package/dist/lib/read-file.js +1 -6
  95. package/dist/lib/rollbar.js +1 -7
  96. package/dist/lib/search-and-replace.js +9 -41
  97. package/dist/lib/site-import/db-file-import.js +3 -9
  98. package/dist/lib/site-import/status.js +17 -74
  99. package/dist/lib/token.js +1 -33
  100. package/dist/lib/tracker.js +4 -20
  101. package/dist/lib/user-error.js +0 -2
  102. package/dist/lib/validations/is-multi-site-sql-dump.js +4 -12
  103. package/dist/lib/validations/is-multi-site.js +5 -21
  104. package/dist/lib/validations/is-multisite-domain-mapped.js +5 -31
  105. package/dist/lib/validations/line-by-line.js +4 -16
  106. package/dist/lib/validations/site-type.js +10 -19
  107. package/dist/lib/validations/sql.js +11 -76
  108. package/dist/lib/validations/utils.js +1 -6
  109. package/dist/lib/vip-import-validate-files.js +82 -109
  110. package/npm-shrinkwrap.json +2407 -1800
  111. package/package.json +18 -15
@@ -3,22 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.formatSoftwareSettings = exports.getUpdateResult = exports.triggerUpdate = exports.promptForUpdate = exports.appQueryFragments = exports.appQuery = void 0;
7
-
6
+ exports.triggerUpdate = exports.promptForUpdate = exports.getUpdateResult = exports.formatSoftwareSettings = exports.appQueryFragments = exports.appQuery = void 0;
8
7
  var _enquirer = require("enquirer");
9
-
10
8
  var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
11
-
12
9
  var _debug = _interopRequireDefault(require("debug"));
13
-
14
10
  var _app = require("../app");
15
-
16
11
  var _api = _interopRequireDefault(require("../api"));
17
-
18
12
  var _userError = _interopRequireDefault(require("../user-error"));
19
-
20
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
14
  /**
23
15
  * External dependencies
24
16
  */
@@ -26,6 +18,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
26
18
  /**
27
19
  * Internal dependencies
28
20
  */
21
+
29
22
  const UPDATE_PROGRESS_POLL_INTERVAL = 5;
30
23
  const debug = (0, _debug.default)('@automattic/vip:bin:config-software');
31
24
  const appQuery = `
@@ -140,7 +133,6 @@ const COMPONENT_NAMES = {
140
133
  nodejs: 'Node.js'
141
134
  };
142
135
  const MANAGED_OPTION_KEY = 'managed_latest';
143
-
144
136
  const _optionsForVersion = softwareSettings => {
145
137
  const {
146
138
  options,
@@ -154,7 +146,6 @@ const _optionsForVersion = softwareSettings => {
154
146
  test: [],
155
147
  deprecated: []
156
148
  };
157
-
158
149
  for (const option of options) {
159
150
  if (option.deprecated) {
160
151
  versionChoices.deprecated.push({
@@ -173,19 +164,16 @@ const _optionsForVersion = softwareSettings => {
173
164
  });
174
165
  }
175
166
  }
176
-
177
167
  if (slug === 'wordpress') {
178
168
  versionChoices.managed.push({
179
169
  message: 'Managed updates',
180
170
  value: MANAGED_OPTION_KEY
181
171
  });
182
172
  }
183
-
184
173
  const allOptions = [...versionChoices.managed, ...versionChoices.supported, ...versionChoices.test, ...versionChoices.deprecated];
185
174
  return allOptions.map(option => {
186
175
  const isActivePinned = option.value === MANAGED_OPTION_KEY && !pinned;
187
176
  const isActiveVersion = option.value === current.version && pinned;
188
-
189
177
  if (isActivePinned || isActiveVersion) {
190
178
  return {
191
179
  message: `Active: ${option.message}`,
@@ -193,36 +181,28 @@ const _optionsForVersion = softwareSettings => {
193
181
  disabled: true
194
182
  };
195
183
  }
196
-
197
184
  return option;
198
185
  });
199
186
  };
200
-
201
187
  const _processComponent = async (appTypeId, userProvidedComponent) => {
202
188
  const validComponents = [];
203
-
204
189
  if ((0, _app.isAppWordPress)(appTypeId)) {
205
190
  validComponents.push('wordpress', 'php', 'muplugins');
206
191
  } else if ((0, _app.isAppNodejs)(appTypeId)) {
207
192
  validComponents.push('nodejs');
208
193
  }
209
-
210
194
  if (userProvidedComponent) {
211
195
  if (!validComponents.includes(userProvidedComponent)) {
212
196
  throw new _userError.default(`Component ${userProvidedComponent} is not supported. Use one of: ${validComponents.join(',')}`);
213
197
  }
214
-
215
198
  return userProvidedComponent;
216
199
  }
217
-
218
200
  if (validComponents.length === 0) {
219
201
  throw new _userError.default('No components are supported for this application');
220
202
  }
221
-
222
203
  if (validComponents.length === 1) {
223
204
  return validComponents[0];
224
205
  }
225
-
226
206
  const choices = validComponents.map(item => ({
227
207
  message: COMPONENT_NAMES[item],
228
208
  value: item
@@ -235,20 +215,15 @@ const _processComponent = async (appTypeId, userProvidedComponent) => {
235
215
  throw new _userError.default('Command cancelled by user.');
236
216
  });
237
217
  };
238
-
239
218
  const _processComponentVersion = async (softwareSettings, component, userProvidedVersion) => {
240
219
  const versionChoices = _optionsForVersion(softwareSettings[component]);
241
-
242
220
  if (userProvidedVersion) {
243
221
  const validValues = versionChoices.map(item => item.value);
244
-
245
222
  if (!validValues.includes(userProvidedVersion)) {
246
223
  throw new _userError.default(`Version ${userProvidedVersion} is not supported for ${COMPONENT_NAMES[component]}. Use one of: ${validValues.join(',')}`);
247
224
  }
248
-
249
225
  return userProvidedVersion;
250
226
  }
251
-
252
227
  const versionSelect = new _enquirer.Select({
253
228
  message: `Version for ${COMPONENT_NAMES[component]} to upgrade to`,
254
229
  choices: versionChoices
@@ -257,7 +232,6 @@ const _processComponentVersion = async (softwareSettings, component, userProvide
257
232
  throw new _userError.default('Command cancelled by user.');
258
233
  });
259
234
  };
260
-
261
235
  const promptForUpdate = async (appTypeId, opts, softwareSettings) => {
262
236
  const component = await _processComponent(appTypeId, opts.component);
263
237
  const version = await _processComponentVersion(softwareSettings, component, opts.version);
@@ -266,19 +240,15 @@ const promptForUpdate = async (appTypeId, opts, softwareSettings) => {
266
240
  }).run().catch(() => {
267
241
  throw new _userError.default('Command cancelled by user.');
268
242
  }));
269
-
270
243
  if (confirm) {
271
244
  return {
272
245
  component,
273
246
  version
274
247
  };
275
248
  }
276
-
277
249
  throw new _userError.default('Update canceled');
278
250
  };
279
-
280
251
  exports.promptForUpdate = promptForUpdate;
281
-
282
252
  const triggerUpdate = async variables => {
283
253
  debug('Triggering update', variables);
284
254
  const api = await (0, _api.default)();
@@ -287,12 +257,9 @@ const triggerUpdate = async variables => {
287
257
  variables
288
258
  });
289
259
  };
290
-
291
260
  exports.triggerUpdate = triggerUpdate;
292
-
293
261
  const _getLatestJob = async (appId, envId) => {
294
262
  var _result$data, _result$data$app;
295
-
296
263
  const api = await (0, _api.default)();
297
264
  const result = await api.query({
298
265
  query: updateJobQuery,
@@ -303,43 +270,34 @@ const _getLatestJob = async (appId, envId) => {
303
270
  fetchPolicy: 'network-only'
304
271
  });
305
272
  const jobs = (result === null || result === void 0 ? void 0 : (_result$data = result.data) === null || _result$data === void 0 ? void 0 : (_result$data$app = _result$data.app) === null || _result$data$app === void 0 ? void 0 : _result$data$app.environments[0].jobs) || [];
306
-
307
273
  if (jobs.length) {
308
274
  return jobs.reduce((prev, current) => prev.createdAt > current.createdAt ? prev : current);
309
275
  }
310
-
311
276
  return null;
312
277
  };
313
-
314
278
  const _getCompletedJob = async (appId, envId) => {
315
279
  const latestJob = await _getLatestJob(appId, envId);
316
280
  debug('Latest job result:', latestJob);
317
-
318
281
  if (!latestJob || !latestJob.inProgressLock) {
319
282
  return latestJob;
320
283
  }
321
-
322
284
  debug(`Sleep for ${UPDATE_PROGRESS_POLL_INTERVAL} seconds`);
323
285
  await new Promise(resolve => setTimeout(resolve, UPDATE_PROGRESS_POLL_INTERVAL * 1000));
324
286
  return _getCompletedJob(appId, envId);
325
287
  };
326
-
327
288
  const getUpdateResult = async (appId, envId) => {
328
289
  var _completedJob$progres, _completedJob$progres2, _completedJob$progres3;
329
-
330
290
  debug('Getting update result', {
331
291
  appId,
332
292
  envId
333
293
  });
334
294
  const completedJob = await _getCompletedJob(appId, envId);
335
295
  const success = !completedJob || (completedJob === null || completedJob === void 0 ? void 0 : (_completedJob$progres = completedJob.progress) === null || _completedJob$progres === void 0 ? void 0 : _completedJob$progres.status) === 'success';
336
-
337
296
  if (success) {
338
297
  return {
339
298
  ok: true
340
299
  };
341
300
  }
342
-
343
301
  const failedStep = completedJob === null || completedJob === void 0 ? void 0 : (_completedJob$progres2 = completedJob.progress) === null || _completedJob$progres2 === void 0 ? void 0 : (_completedJob$progres3 = _completedJob$progres2.steps) === null || _completedJob$progres3 === void 0 ? void 0 : _completedJob$progres3.find(step => step.status === 'failed');
344
302
  const error = failedStep ? `Failed during step: ${failedStep.name}` : 'Software update failed';
345
303
  return {
@@ -347,31 +305,23 @@ const getUpdateResult = async (appId, envId) => {
347
305
  errorMessage: error
348
306
  };
349
307
  };
350
-
351
308
  exports.getUpdateResult = getUpdateResult;
352
-
353
309
  const formatSoftwareSettings = (softwareSetting, includes, format) => {
354
310
  let version = softwareSetting.current.version;
355
-
356
311
  if (softwareSetting.slug === 'wordpress' && !softwareSetting.pinned) {
357
312
  version += ' (managed updates)';
358
313
  }
359
-
360
314
  const result = {
361
315
  name: softwareSetting.name,
362
316
  slug: softwareSetting.slug,
363
317
  version
364
318
  };
365
-
366
319
  if (includes.includes('available_versions')) {
367
320
  result.available_versions = _optionsForVersion(softwareSetting).map(option => option.value);
368
-
369
321
  if (format !== 'json') {
370
322
  result.available_versions = result.available_versions.join(',');
371
323
  }
372
324
  }
373
-
374
325
  return result;
375
326
  };
376
-
377
327
  exports.formatSoftwareSettings = formatSoftwareSettings;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.DEV_ENVIRONMENT_PHP_VERSIONS = exports.DEV_ENVIRONMENT_WORDPRESS_VERSION_TTL = exports.DEV_ENVIRONMENT_WORDPRESS_CACHE_KEY = exports.DEV_ENVIRONMENT_WORDPRESS_VERSIONS_URI = exports.DEV_ENVIRONMENT_RAW_GITHUB_HOST = exports.DEV_ENVIRONMENT_COMPONENTS = exports.DEV_ENVIRONMENT_NOT_FOUND = exports.DEV_ENVIRONMENT_PROMPT_INTRO = exports.DEV_ENVIRONMENT_DEFAULTS = exports.DEV_ENVIRONMENT_FULL_COMMAND = exports.DEV_ENVIRONMENT_SUBCOMMAND = void 0;
6
+ exports.DEV_ENVIRONMENT_WORDPRESS_VERSION_TTL = exports.DEV_ENVIRONMENT_WORDPRESS_VERSIONS_URI = exports.DEV_ENVIRONMENT_WORDPRESS_CACHE_KEY = exports.DEV_ENVIRONMENT_SUBCOMMAND = exports.DEV_ENVIRONMENT_RAW_GITHUB_HOST = exports.DEV_ENVIRONMENT_PROMPT_INTRO = exports.DEV_ENVIRONMENT_PHP_VERSIONS = exports.DEV_ENVIRONMENT_NOT_FOUND = exports.DEV_ENVIRONMENT_FULL_COMMAND = exports.DEV_ENVIRONMENT_DEFAULTS = exports.DEV_ENVIRONMENT_COMPONENTS = void 0;
7
7
  const DEV_ENVIRONMENT_SUBCOMMAND = 'dev-env';
8
8
  exports.DEV_ENVIRONMENT_SUBCOMMAND = DEV_ENVIRONMENT_SUBCOMMAND;
9
9
  const DEV_ENVIRONMENT_FULL_COMMAND = `vip ${DEV_ENVIRONMENT_SUBCOMMAND}`;
@@ -28,7 +28,6 @@ exports.DEV_ENVIRONMENT_WORDPRESS_VERSIONS_URI = DEV_ENVIRONMENT_WORDPRESS_VERSI
28
28
  const DEV_ENVIRONMENT_WORDPRESS_CACHE_KEY = 'wordpress-versions.json';
29
29
  exports.DEV_ENVIRONMENT_WORDPRESS_CACHE_KEY = DEV_ENVIRONMENT_WORDPRESS_CACHE_KEY;
30
30
  const DEV_ENVIRONMENT_WORDPRESS_VERSION_TTL = 86400; // once per day
31
-
32
31
  exports.DEV_ENVIRONMENT_WORDPRESS_VERSION_TTL = DEV_ENVIRONMENT_WORDPRESS_VERSION_TTL;
33
32
  const DEV_ENVIRONMENT_PHP_VERSIONS = {
34
33
  // eslint-disable-next-line quote-props
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TB_IN_BYTES = exports.GB_IN_BYTES = exports.MB_IN_BYTES = exports.KB_IN_BYTES = void 0;
6
+ exports.TB_IN_BYTES = exports.MB_IN_BYTES = exports.KB_IN_BYTES = exports.GB_IN_BYTES = void 0;
7
7
  const KB_IN_BYTES = 1024;
8
8
  exports.KB_IN_BYTES = KB_IN_BYTES;
9
9
  const MB_IN_BYTES = 1024 * KB_IN_BYTES;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.NODEJS_SITE_TYPE_IDS = exports.NODEJS_MYSQL_REDIS_APPLICATION_TYPE_ID = exports.NODEJS_REDIS_APPLICATION_TYPE_ID = exports.NODEJS_MYSQL_APPLICATION_TYPE_ID = exports.NODEJS_APPLICATION_TYPE_ID = exports.WORDPRESS_SITE_TYPE_IDS = exports.WORDPRESS_NON_PROD_APPLICATION_TYPE_ID = exports.WORDPRESS_APPLICATION_TYPE_ID = void 0;
6
+ exports.WORDPRESS_SITE_TYPE_IDS = exports.WORDPRESS_NON_PROD_APPLICATION_TYPE_ID = exports.WORDPRESS_APPLICATION_TYPE_ID = exports.NODEJS_SITE_TYPE_IDS = exports.NODEJS_REDIS_APPLICATION_TYPE_ID = exports.NODEJS_MYSQL_REDIS_APPLICATION_TYPE_ID = exports.NODEJS_MYSQL_APPLICATION_TYPE_ID = exports.NODEJS_APPLICATION_TYPE_ID = void 0;
7
7
  const WORDPRESS_APPLICATION_TYPE_ID = 2;
8
8
  exports.WORDPRESS_APPLICATION_TYPE_ID = WORDPRESS_APPLICATION_TYPE_ID;
9
9
  const WORDPRESS_NON_PROD_APPLICATION_TYPE_ID = 6;