@automattic/vip 2.11.0 → 2.11.2

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 (99) hide show
  1. package/README.md +8 -0
  2. package/config/config.json +2 -2
  3. package/npm-shrinkwrap.json +1 -1
  4. package/package/dist/bin/vip-app-list.js +73 -0
  5. package/package/dist/bin/vip-app.js +76 -0
  6. package/package/dist/bin/vip-config-envvar-delete.js +97 -0
  7. package/package/dist/bin/vip-config-envvar-get-all.js +94 -0
  8. package/package/dist/bin/vip-config-envvar-get.js +79 -0
  9. package/package/dist/bin/vip-config-envvar-list.js +91 -0
  10. package/package/dist/bin/vip-config-envvar-set.js +123 -0
  11. package/package/dist/bin/vip-config-envvar.js +23 -0
  12. package/package/dist/bin/vip-config.js +20 -0
  13. package/package/dist/bin/vip-dev-env-create.js +105 -0
  14. package/package/dist/bin/vip-dev-env-destroy.js +56 -0
  15. package/package/dist/bin/vip-dev-env-exec.js +67 -0
  16. package/package/dist/bin/vip-dev-env-import-media.js +51 -0
  17. package/package/dist/bin/vip-dev-env-import-sql.js +83 -0
  18. package/package/dist/bin/vip-dev-env-import.js +32 -0
  19. package/package/dist/bin/vip-dev-env-info.js +61 -0
  20. package/package/dist/bin/vip-dev-env-list.js +46 -0
  21. package/package/dist/bin/vip-dev-env-start.js +77 -0
  22. package/package/dist/bin/vip-dev-env-stop.js +52 -0
  23. package/package/dist/bin/vip-dev-env-update.js +89 -0
  24. package/package/dist/bin/vip-dev-env.js +23 -0
  25. package/package/dist/bin/vip-import-media-abort.js +132 -0
  26. package/package/dist/bin/vip-import-media-status.js +84 -0
  27. package/package/dist/bin/vip-import-media.js +168 -0
  28. package/package/dist/bin/vip-import-sql-status.js +83 -0
  29. package/package/dist/bin/vip-import-sql.js +580 -0
  30. package/package/dist/bin/vip-import-validate-files.js +191 -0
  31. package/package/dist/bin/vip-import-validate-sql.js +34 -0
  32. package/package/dist/bin/vip-import.js +20 -0
  33. package/package/dist/bin/vip-logs.js +232 -0
  34. package/package/dist/bin/vip-search-replace.js +71 -0
  35. package/package/dist/bin/vip-sync.js +191 -0
  36. package/package/dist/bin/vip-whoami.js +67 -0
  37. package/package/dist/bin/vip-wp.js +555 -0
  38. package/package/dist/bin/vip.js +149 -0
  39. package/package/dist/lib/analytics/clients/client.js +1 -0
  40. package/package/dist/lib/analytics/clients/pendo.js +92 -0
  41. package/package/dist/lib/analytics/clients/stub.js +19 -0
  42. package/package/dist/lib/analytics/clients/tracks.js +128 -0
  43. package/package/dist/lib/analytics/index.js +45 -0
  44. package/package/dist/lib/api/app.js +70 -0
  45. package/package/dist/lib/api/feature-flags.js +39 -0
  46. package/package/dist/lib/api/user.js +58 -0
  47. package/package/dist/lib/api.js +136 -0
  48. package/package/dist/lib/app-logs/app-logs.js +70 -0
  49. package/package/dist/lib/cli/apiConfig.js +90 -0
  50. package/package/dist/lib/cli/command.js +606 -0
  51. package/package/dist/lib/cli/envAlias.js +60 -0
  52. package/package/dist/lib/cli/exit.js +33 -0
  53. package/package/dist/lib/cli/format.js +213 -0
  54. package/package/dist/lib/cli/pager.js +52 -0
  55. package/package/dist/lib/cli/progress.js +208 -0
  56. package/package/dist/lib/cli/prompt.js +37 -0
  57. package/package/dist/lib/cli/repo.js +77 -0
  58. package/package/dist/lib/client-file-uploader.js +602 -0
  59. package/package/dist/lib/constants/dev-environment.js +42 -0
  60. package/package/dist/lib/constants/file-size.js +14 -0
  61. package/package/dist/lib/dev-environment/dev-environment-cli.js +508 -0
  62. package/package/dist/lib/dev-environment/dev-environment-core.js +620 -0
  63. package/package/dist/lib/dev-environment/dev-environment-lando.js +330 -0
  64. package/package/dist/lib/dev-environment/types.js +1 -0
  65. package/package/dist/lib/env.js +36 -0
  66. package/package/dist/lib/envvar/api-delete.js +56 -0
  67. package/package/dist/lib/envvar/api-get-all.js +59 -0
  68. package/package/dist/lib/envvar/api-get.js +24 -0
  69. package/package/dist/lib/envvar/api-list.js +60 -0
  70. package/package/dist/lib/envvar/api-set.js +58 -0
  71. package/package/dist/lib/envvar/api.js +104 -0
  72. package/package/dist/lib/envvar/input.js +55 -0
  73. package/package/dist/lib/envvar/logging.js +33 -0
  74. package/package/dist/lib/envvar/read-file.js +43 -0
  75. package/package/dist/lib/http/socks-proxy-agent.js +25 -0
  76. package/package/dist/lib/keychain/browser.js +35 -0
  77. package/package/dist/lib/keychain/insecure.js +63 -0
  78. package/package/dist/lib/keychain/keychain.js +1 -0
  79. package/package/dist/lib/keychain/secure.js +36 -0
  80. package/package/dist/lib/keychain.js +36 -0
  81. package/package/dist/lib/media-import/media-file-import.js +34 -0
  82. package/package/dist/lib/media-import/progress.js +86 -0
  83. package/package/dist/lib/media-import/status.js +335 -0
  84. package/package/dist/lib/rollbar.js +35 -0
  85. package/package/dist/lib/search-and-replace.js +203 -0
  86. package/package/dist/lib/site-import/db-file-import.js +46 -0
  87. package/package/dist/lib/site-import/status.js +444 -0
  88. package/package/dist/lib/token.js +132 -0
  89. package/package/dist/lib/tracker.js +96 -0
  90. package/package/dist/lib/validations/is-multi-site-sql-dump.js +59 -0
  91. package/package/dist/lib/validations/is-multi-site.js +99 -0
  92. package/package/dist/lib/validations/line-by-line.js +92 -0
  93. package/package/dist/lib/validations/site-type.js +66 -0
  94. package/package/dist/lib/validations/sql.js +371 -0
  95. package/package/dist/lib/vip-import-validate-files.js +548 -0
  96. package/package/vip.iml +11 -0
  97. package/package.json +1 -1
  98. package/vip.iml +11 -0
  99. package/automattic-vip-2.11.0.tgz +0 -0
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * External dependencies
5
+ */
6
+ "use strict";
7
+
8
+ var _chalk = _interopRequireDefault(require("chalk"));
9
+
10
+ var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
11
+
12
+ var _singleLineLog = require("single-line-log");
13
+
14
+ var _api = _interopRequireDefault(require("../lib/api"));
15
+
16
+ var _app2 = _interopRequireDefault(require("../lib/api/app"));
17
+
18
+ var _command = _interopRequireDefault(require("../lib/cli/command"));
19
+
20
+ var _format = require("../lib/cli/format");
21
+
22
+ var _tracker = require("../lib/tracker");
23
+
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+
26
+ /**
27
+ * Internal dependencies
28
+ */
29
+ const appQuery = `id,name,environments{
30
+ id,appId,type,name,defaultDomain,branch,datacenter,syncProgress{
31
+ status,sync,steps{name,status}
32
+ },syncPreview { canSync, errors { message }, backup { createdAt }, replacements { from, to } }
33
+ }`;
34
+ (0, _command.default)({
35
+ appContext: true,
36
+ appQuery: appQuery,
37
+ childEnvContext: true,
38
+ module: 'sync',
39
+ requireConfirm: 'Are you sure you want to sync from production?'
40
+ }).argv(process.argv, async (arg, opts) => {
41
+ const api = await (0, _api.default)();
42
+ let syncing = false;
43
+ await (0, _tracker.trackEvent)('sync_command_execute');
44
+
45
+ try {
46
+ await api.mutate({
47
+ // $FlowFixMe: gql template is not supported by flow
48
+ mutation: (0, _graphqlTag.default)`
49
+ mutation SyncEnvironmentMutation($input: AppEnvironmentSyncInput){
50
+ syncEnvironment(input: $input){
51
+ environment{
52
+ id
53
+ }
54
+ }
55
+ }
56
+ `,
57
+ variables: {
58
+ input: {
59
+ id: opts.app.id,
60
+ environmentId: opts.env.id
61
+ }
62
+ }
63
+ });
64
+ } catch (error) {
65
+ if (error.graphQLErrors) {
66
+ let bail = false;
67
+
68
+ for (const err of error.graphQLErrors) {
69
+ if (err.message !== 'Site is already syncing') {
70
+ bail = true;
71
+ console.log(_chalk.default.red('Error:'), err.message);
72
+ }
73
+ } // TODO: Log e
74
+
75
+
76
+ if (bail) {
77
+ return;
78
+ }
79
+ }
80
+
81
+ syncing = true;
82
+ await (0, _tracker.trackEvent)('sync_command_execute_error', {
83
+ error: `Already syncing: ${error.message}`
84
+ });
85
+ }
86
+
87
+ const sprite = {
88
+ count: 0,
89
+ sprite: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],
90
+
91
+ next() {
92
+ this.count++;
93
+
94
+ if (this.count >= this.sprite.length) {
95
+ this.count = 0;
96
+ }
97
+
98
+ return {
99
+ value: this.sprite[this.count],
100
+ done: false
101
+ };
102
+ }
103
+
104
+ };
105
+ const application = await (0, _app2.default)(opts.app.id, appQuery);
106
+ let environment = application.environments.find(env => env.id === opts.env.id);
107
+
108
+ if (syncing) {
109
+ if (environment.syncProgress.status === 'running') {
110
+ console.log(_chalk.default.yellow('Note:'), 'A data sync is already running');
111
+ } else {
112
+ console.log(_chalk.default.yellow('Note:'), 'Someone recently ran a data sync on this site');
113
+ console.log(_chalk.default.yellow('Note:'), 'Please wait a few minutes before trying again');
114
+ }
115
+ }
116
+
117
+ console.log();
118
+ console.log(` syncing: ${_chalk.default.yellow(opts.app.name)}`);
119
+ console.log(` from: ${(0, _format.formatEnvironment)('production')}`);
120
+ console.log(` to: ${(0, _format.formatEnvironment)(opts.env.type)}`);
121
+ let count = 0;
122
+ const progress = setInterval(async () => {
123
+ if (count++ % 10 === 0) {
124
+ // Query the API 1/10 of the time (every 1s)
125
+ // The rest of the iterations are just for moving the spinner
126
+ api.query({
127
+ // $FlowFixMe: gql template is not supported by flow
128
+ query: (0, _graphqlTag.default)`query App( $id: Int, $sync: Int ) {
129
+ app( id: $id ){
130
+ id,name,environments{
131
+ id,name,defaultDomain,branch,datacenter,syncProgress( sync: $sync ){
132
+ status,sync,steps{name,status}
133
+ }
134
+ }
135
+ }
136
+ }`,
137
+ fetchPolicy: 'network-only',
138
+ variables: {
139
+ id: opts.app.id,
140
+ sync: environment.syncProgress.sync
141
+ }
142
+ }).then(res => res.data.app).then(_app => {
143
+ environment = _app.environments.find(env => env.id === opts.env.id);
144
+ });
145
+ }
146
+
147
+ const marks = {
148
+ pending: '○',
149
+ running: _chalk.default.blueBright(sprite.next().value),
150
+ success: _chalk.default.green('✓'),
151
+ failed: _chalk.default.red('✕'),
152
+ unknown: _chalk.default.yellow('✕')
153
+ };
154
+ const out = [];
155
+ const steps = environment.syncProgress.steps || [];
156
+ out.push('');
157
+ steps.forEach(step => {
158
+ if (step.status === 'pending') {
159
+ out.push(_chalk.default.dim(` ${marks[step.status]} ${step.name}`));
160
+ } else {
161
+ out.push(` ${marks[step.status]} ${step.name}`);
162
+ }
163
+ });
164
+ out.push('');
165
+
166
+ switch (environment.syncProgress.status) {
167
+ case 'running':
168
+ out.push(`${marks.running} Press ^C to hide progress. Data sync will continue in the background.`);
169
+ break;
170
+
171
+ case 'failed':
172
+ clearInterval(progress);
173
+ await (0, _tracker.trackEvent)('sync_command_error', {
174
+ error: 'API returned `failed` status'
175
+ });
176
+ out.push(`${marks.failed} Data Sync is finished for ${opts.app.name}`);
177
+ out.push('');
178
+ break;
179
+
180
+ case 'success':
181
+ default:
182
+ clearInterval(progress);
183
+ await (0, _tracker.trackEvent)('sync_command_success');
184
+ out.push(`${marks.success} Data Sync is finished for ${opts.app.name}`);
185
+ out.push('');
186
+ break;
187
+ }
188
+
189
+ (0, _singleLineLog.stdout)(out.join('\n'));
190
+ }, 100);
191
+ });
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ *
5
+ * @format
6
+ */
7
+
8
+ /**
9
+ * External dependencies
10
+ */
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ "use strict";
16
+
17
+ Object.defineProperty(exports, "__esModule", {
18
+ value: true
19
+ });
20
+ exports.whoamiCommand = whoamiCommand;
21
+
22
+ var _user = require("../lib/api/user");
23
+
24
+ var _command = _interopRequireDefault(require("../lib/cli/command"));
25
+
26
+ var _tracker = require("../lib/tracker");
27
+
28
+ var exit = _interopRequireWildcard(require("../lib/cli/exit"));
29
+
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+
34
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
+
36
+ async function whoamiCommand() {
37
+ const trackingParams = {
38
+ command: 'vip whoami'
39
+ };
40
+ await (0, _tracker.trackEvent)('whoami_command_execute', trackingParams);
41
+ let currentUser = {};
42
+
43
+ try {
44
+ currentUser = await (0, _user.getCurrentUserInfo)();
45
+ } catch (err) {
46
+ await (0, _tracker.trackEvent)('whoami_command_error', { ...trackingParams,
47
+ error: err.message
48
+ });
49
+ exit.withError(`Failed to fetch information about the currently logged-in user error: ${err.message}`);
50
+ }
51
+
52
+ await (0, _tracker.trackEvent)('whoami_command_success', trackingParams);
53
+ const output = [`- Howdy ${currentUser.displayName}!`, `- Your user ID is ${currentUser.id}`];
54
+
55
+ if (currentUser.isVIP) {
56
+ output.push('- Your account has VIP Staff permissions');
57
+ }
58
+
59
+ console.log(output.join('\n'));
60
+ }
61
+
62
+ (0, _command.default)({
63
+ usage: 'vip whoami'
64
+ }).examples([{
65
+ usage: 'vip whoami',
66
+ description: 'Display details about the currently logged-in user.'
67
+ }]).argv(process.argv, whoamiCommand);