@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.
- package/README.md +8 -0
- package/config/config.json +2 -2
- package/npm-shrinkwrap.json +1 -1
- package/package/dist/bin/vip-app-list.js +73 -0
- package/package/dist/bin/vip-app.js +76 -0
- package/package/dist/bin/vip-config-envvar-delete.js +97 -0
- package/package/dist/bin/vip-config-envvar-get-all.js +94 -0
- package/package/dist/bin/vip-config-envvar-get.js +79 -0
- package/package/dist/bin/vip-config-envvar-list.js +91 -0
- package/package/dist/bin/vip-config-envvar-set.js +123 -0
- package/package/dist/bin/vip-config-envvar.js +23 -0
- package/package/dist/bin/vip-config.js +20 -0
- package/package/dist/bin/vip-dev-env-create.js +105 -0
- package/package/dist/bin/vip-dev-env-destroy.js +56 -0
- package/package/dist/bin/vip-dev-env-exec.js +67 -0
- package/package/dist/bin/vip-dev-env-import-media.js +51 -0
- package/package/dist/bin/vip-dev-env-import-sql.js +83 -0
- package/package/dist/bin/vip-dev-env-import.js +32 -0
- package/package/dist/bin/vip-dev-env-info.js +61 -0
- package/package/dist/bin/vip-dev-env-list.js +46 -0
- package/package/dist/bin/vip-dev-env-start.js +77 -0
- package/package/dist/bin/vip-dev-env-stop.js +52 -0
- package/package/dist/bin/vip-dev-env-update.js +89 -0
- package/package/dist/bin/vip-dev-env.js +23 -0
- package/package/dist/bin/vip-import-media-abort.js +132 -0
- package/package/dist/bin/vip-import-media-status.js +84 -0
- package/package/dist/bin/vip-import-media.js +168 -0
- package/package/dist/bin/vip-import-sql-status.js +83 -0
- package/package/dist/bin/vip-import-sql.js +580 -0
- package/package/dist/bin/vip-import-validate-files.js +191 -0
- package/package/dist/bin/vip-import-validate-sql.js +34 -0
- package/package/dist/bin/vip-import.js +20 -0
- package/package/dist/bin/vip-logs.js +232 -0
- package/package/dist/bin/vip-search-replace.js +71 -0
- package/package/dist/bin/vip-sync.js +191 -0
- package/package/dist/bin/vip-whoami.js +67 -0
- package/package/dist/bin/vip-wp.js +555 -0
- package/package/dist/bin/vip.js +149 -0
- package/package/dist/lib/analytics/clients/client.js +1 -0
- package/package/dist/lib/analytics/clients/pendo.js +92 -0
- package/package/dist/lib/analytics/clients/stub.js +19 -0
- package/package/dist/lib/analytics/clients/tracks.js +128 -0
- package/package/dist/lib/analytics/index.js +45 -0
- package/package/dist/lib/api/app.js +70 -0
- package/package/dist/lib/api/feature-flags.js +39 -0
- package/package/dist/lib/api/user.js +58 -0
- package/package/dist/lib/api.js +136 -0
- package/package/dist/lib/app-logs/app-logs.js +70 -0
- package/package/dist/lib/cli/apiConfig.js +90 -0
- package/package/dist/lib/cli/command.js +606 -0
- package/package/dist/lib/cli/envAlias.js +60 -0
- package/package/dist/lib/cli/exit.js +33 -0
- package/package/dist/lib/cli/format.js +213 -0
- package/package/dist/lib/cli/pager.js +52 -0
- package/package/dist/lib/cli/progress.js +208 -0
- package/package/dist/lib/cli/prompt.js +37 -0
- package/package/dist/lib/cli/repo.js +77 -0
- package/package/dist/lib/client-file-uploader.js +602 -0
- package/package/dist/lib/constants/dev-environment.js +42 -0
- package/package/dist/lib/constants/file-size.js +14 -0
- package/package/dist/lib/dev-environment/dev-environment-cli.js +508 -0
- package/package/dist/lib/dev-environment/dev-environment-core.js +620 -0
- package/package/dist/lib/dev-environment/dev-environment-lando.js +330 -0
- package/package/dist/lib/dev-environment/types.js +1 -0
- package/package/dist/lib/env.js +36 -0
- package/package/dist/lib/envvar/api-delete.js +56 -0
- package/package/dist/lib/envvar/api-get-all.js +59 -0
- package/package/dist/lib/envvar/api-get.js +24 -0
- package/package/dist/lib/envvar/api-list.js +60 -0
- package/package/dist/lib/envvar/api-set.js +58 -0
- package/package/dist/lib/envvar/api.js +104 -0
- package/package/dist/lib/envvar/input.js +55 -0
- package/package/dist/lib/envvar/logging.js +33 -0
- package/package/dist/lib/envvar/read-file.js +43 -0
- package/package/dist/lib/http/socks-proxy-agent.js +25 -0
- package/package/dist/lib/keychain/browser.js +35 -0
- package/package/dist/lib/keychain/insecure.js +63 -0
- package/package/dist/lib/keychain/keychain.js +1 -0
- package/package/dist/lib/keychain/secure.js +36 -0
- package/package/dist/lib/keychain.js +36 -0
- package/package/dist/lib/media-import/media-file-import.js +34 -0
- package/package/dist/lib/media-import/progress.js +86 -0
- package/package/dist/lib/media-import/status.js +335 -0
- package/package/dist/lib/rollbar.js +35 -0
- package/package/dist/lib/search-and-replace.js +203 -0
- package/package/dist/lib/site-import/db-file-import.js +46 -0
- package/package/dist/lib/site-import/status.js +444 -0
- package/package/dist/lib/token.js +132 -0
- package/package/dist/lib/tracker.js +96 -0
- package/package/dist/lib/validations/is-multi-site-sql-dump.js +59 -0
- package/package/dist/lib/validations/is-multi-site.js +99 -0
- package/package/dist/lib/validations/line-by-line.js +92 -0
- package/package/dist/lib/validations/site-type.js +66 -0
- package/package/dist/lib/validations/sql.js +371 -0
- package/package/dist/lib/vip-import-validate-files.js +548 -0
- package/package/vip.iml +11 -0
- package/package.json +1 -1
- package/vip.iml +11 -0
- 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);
|