wfu-migrate 0.1.29 → 0.1.31
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/dist/commands/correct-user-sync.d.ts +20 -0
- package/dist/commands/correct-user-sync.d.ts.map +1 -0
- package/dist/commands/correct-user-sync.js +367 -0
- package/dist/commands/correct-user-sync.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +32 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/user-sync.d.ts.map +1 -1
- package/dist/commands/user-sync.js +1 -61
- package/dist/commands/user-sync.js.map +1 -1
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/mysql-query.d.ts +15 -0
- package/dist/lib/mysql-query.d.ts.map +1 -0
- package/dist/lib/mysql-query.js +68 -0
- package/dist/lib/mysql-query.js.map +1 -0
- package/dist/lib/update-checker.d.ts +24 -0
- package/dist/lib/update-checker.d.ts.map +1 -0
- package/dist/lib/update-checker.js +112 -0
- package/dist/lib/update-checker.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Correct User Sync command - Detect and fix cascading user ID mismatches
|
|
3
|
+
*
|
|
4
|
+
* When a user is created on PROD but fails to sync to another environment,
|
|
5
|
+
* every subsequent user ends up with the wrong auto-increment ID (off by 1
|
|
6
|
+
* or off by N if multiple users are missing). This command detects the full
|
|
7
|
+
* cascade and fixes everything in one batch operation.
|
|
8
|
+
*
|
|
9
|
+
* Algorithm:
|
|
10
|
+
* 1. Fetch recent users from both environments, keyed by email
|
|
11
|
+
* 2. Compare to find missing, mismatched, and extra users
|
|
12
|
+
* 3. Batch delete all affected users from target
|
|
13
|
+
* 4. Batch insert correct data from source using HEX/UNHEX
|
|
14
|
+
* 5. Fix AUTO_INCREMENT and verify
|
|
15
|
+
*
|
|
16
|
+
* Usage: wfu-migrate correct-user-sync --from <env> --to <env> [--dry-run] [--yes] [--lookback N]
|
|
17
|
+
*/
|
|
18
|
+
import { Command } from 'commander';
|
|
19
|
+
export declare const correctUserSyncCommand: Command;
|
|
20
|
+
//# sourceMappingURL=correct-user-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correct-user-sync.d.ts","sourceRoot":"","sources":["../../src/commands/correct-user-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmZpC,eAAO,MAAM,sBAAsB,SAS/B,CAAC"}
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Correct User Sync command - Detect and fix cascading user ID mismatches
|
|
3
|
+
*
|
|
4
|
+
* When a user is created on PROD but fails to sync to another environment,
|
|
5
|
+
* every subsequent user ends up with the wrong auto-increment ID (off by 1
|
|
6
|
+
* or off by N if multiple users are missing). This command detects the full
|
|
7
|
+
* cascade and fixes everything in one batch operation.
|
|
8
|
+
*
|
|
9
|
+
* Algorithm:
|
|
10
|
+
* 1. Fetch recent users from both environments, keyed by email
|
|
11
|
+
* 2. Compare to find missing, mismatched, and extra users
|
|
12
|
+
* 3. Batch delete all affected users from target
|
|
13
|
+
* 4. Batch insert correct data from source using HEX/UNHEX
|
|
14
|
+
* 5. Fix AUTO_INCREMENT and verify
|
|
15
|
+
*
|
|
16
|
+
* Usage: wfu-migrate correct-user-sync --from <env> --to <env> [--dry-run] [--yes] [--lookback N]
|
|
17
|
+
*/
|
|
18
|
+
import { Command } from 'commander';
|
|
19
|
+
import { createInterface } from 'readline';
|
|
20
|
+
import chalk from 'chalk';
|
|
21
|
+
import { readConfig } from '../lib/config-manager.js';
|
|
22
|
+
import { testDbConnection, checkMySqlAvailable } from '../lib/database.js';
|
|
23
|
+
import { runMysqlQuery, runMysqlStdin } from '../lib/mysql-query.js';
|
|
24
|
+
import { withBell } from '../lib/prompt.js';
|
|
25
|
+
const VALID_ENVS = ['dev', 'uat', 'pprd', 'prod'];
|
|
26
|
+
async function fetchRecentUsers(config, lookback, useDocker) {
|
|
27
|
+
const query = `SELECT ID, user_email, user_login FROM wp_users WHERE ID >= (SELECT MAX(ID) - ${lookback} FROM wp_users) ORDER BY ID ASC`;
|
|
28
|
+
const result = await runMysqlQuery(config, query, useDocker);
|
|
29
|
+
if (!result.success) {
|
|
30
|
+
throw new Error(`Failed to fetch users: ${result.stderr}`);
|
|
31
|
+
}
|
|
32
|
+
const lines = result.stdout.trim().split('\n').filter(Boolean);
|
|
33
|
+
return lines.map((line) => {
|
|
34
|
+
const parts = line.split('\t');
|
|
35
|
+
return { id: parseInt(parts[0], 10), email: parts[1], login: parts[2] };
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function buildSyncPlan(sourceUsers, targetUsers) {
|
|
39
|
+
const sourceByEmail = new Map();
|
|
40
|
+
for (const u of sourceUsers) {
|
|
41
|
+
sourceByEmail.set(u.email, u);
|
|
42
|
+
}
|
|
43
|
+
const targetByEmail = new Map();
|
|
44
|
+
for (const u of targetUsers) {
|
|
45
|
+
targetByEmail.set(u.email, u);
|
|
46
|
+
}
|
|
47
|
+
const missing = [];
|
|
48
|
+
const mismatched = [];
|
|
49
|
+
const extraOnTarget = [];
|
|
50
|
+
for (const [email, sourceUser] of sourceByEmail) {
|
|
51
|
+
const targetUser = targetByEmail.get(email);
|
|
52
|
+
if (!targetUser) {
|
|
53
|
+
missing.push(sourceUser);
|
|
54
|
+
}
|
|
55
|
+
else if (targetUser.id !== sourceUser.id) {
|
|
56
|
+
mismatched.push({ source: sourceUser, target: targetUser });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
for (const [email, targetUser] of targetByEmail) {
|
|
60
|
+
if (!sourceByEmail.has(email)) {
|
|
61
|
+
extraOnTarget.push(targetUser);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const idsToDeleteFromTarget = mismatched.map((m) => m.target.id);
|
|
65
|
+
const idsToInsertFromSource = [
|
|
66
|
+
...missing.map((m) => m.id),
|
|
67
|
+
...mismatched.map((m) => m.source.id),
|
|
68
|
+
];
|
|
69
|
+
const sourceIdsNeeded = new Set(idsToInsertFromSource);
|
|
70
|
+
const targetByIdMap = new Map();
|
|
71
|
+
for (const u of targetUsers) {
|
|
72
|
+
targetByIdMap.set(u.id, u);
|
|
73
|
+
}
|
|
74
|
+
for (const sourceId of sourceIdsNeeded) {
|
|
75
|
+
const occupant = targetByIdMap.get(sourceId);
|
|
76
|
+
if (!occupant)
|
|
77
|
+
continue;
|
|
78
|
+
const isAlreadyInDeleteSet = idsToDeleteFromTarget.includes(occupant.id);
|
|
79
|
+
if (isAlreadyInDeleteSet)
|
|
80
|
+
continue;
|
|
81
|
+
const sourceRecord = sourceByEmail.get(occupant.email);
|
|
82
|
+
if (sourceRecord && sourceRecord.id === occupant.id) {
|
|
83
|
+
throw new Error(`Conflict: source ID ${sourceId} is occupied on target by a correctly-mapped user (${occupant.email}). ` +
|
|
84
|
+
`This scenario should not happen with auto-increment cascades. Manual investigation required.`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return { missing, mismatched, extraOnTarget, idsToDeleteFromTarget, idsToInsertFromSource };
|
|
88
|
+
}
|
|
89
|
+
function displaySyncPlan(plan, fromEnv, toEnv) {
|
|
90
|
+
if (plan.missing.length > 0) {
|
|
91
|
+
console.log(chalk.bold(`\nMissing on ${toEnv} (${plan.missing.length}):`));
|
|
92
|
+
for (const u of plan.missing) {
|
|
93
|
+
console.log(` ${chalk.yellow('MISSING')} ID ${u.id} ${u.email}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (plan.mismatched.length > 0) {
|
|
97
|
+
console.log(chalk.bold(`\nMismatched IDs (${plan.mismatched.length}):`));
|
|
98
|
+
for (const m of plan.mismatched) {
|
|
99
|
+
console.log(` ${chalk.red('WRONG ID')} ${m.source.email} ` +
|
|
100
|
+
`${fromEnv}=${m.source.id} ${toEnv}=${m.target.id}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (plan.extraOnTarget.length > 0) {
|
|
104
|
+
console.log(chalk.bold(`\nExtra on ${toEnv} only (${plan.extraOnTarget.length}):`));
|
|
105
|
+
for (const u of plan.extraOnTarget) {
|
|
106
|
+
console.log(` ${chalk.gray('EXTRA')} ID ${u.id} ${u.email} ${chalk.gray('(no action)')}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const totalFixes = plan.missing.length + plan.mismatched.length;
|
|
110
|
+
console.log(chalk.bold(`\nActions:`));
|
|
111
|
+
console.log(` ${chalk.red('DELETE')} ${plan.idsToDeleteFromTarget.length} user(s) from ${toEnv} (mismatched IDs)`);
|
|
112
|
+
console.log(` ${chalk.green('INSERT')} ${plan.idsToInsertFromSource.length} user(s) from ${fromEnv} (missing + corrected)`);
|
|
113
|
+
console.log(` Total users to fix: ${chalk.bold(String(totalFixes))}\n`);
|
|
114
|
+
}
|
|
115
|
+
async function executeSyncPlan(plan, sourceConfig, targetConfig, useDocker) {
|
|
116
|
+
if (plan.idsToDeleteFromTarget.length > 0) {
|
|
117
|
+
const idList = plan.idsToDeleteFromTarget.join(',');
|
|
118
|
+
console.log(chalk.gray(`Deleting ${plan.idsToDeleteFromTarget.length} mismatched user(s) from target...`));
|
|
119
|
+
const deleteMetaResult = await runMysqlQuery(targetConfig, `DELETE FROM wp_usermeta WHERE user_id IN (${idList})`, useDocker);
|
|
120
|
+
if (!deleteMetaResult.success) {
|
|
121
|
+
throw new Error(`Failed to delete target usermeta: ${deleteMetaResult.stderr}`);
|
|
122
|
+
}
|
|
123
|
+
const deleteUserResult = await runMysqlQuery(targetConfig, `DELETE FROM wp_users WHERE ID IN (${idList})`, useDocker);
|
|
124
|
+
if (!deleteUserResult.success) {
|
|
125
|
+
throw new Error(`Failed to delete target users: ${deleteUserResult.stderr}`);
|
|
126
|
+
}
|
|
127
|
+
console.log(chalk.green(` Deleted ${plan.idsToDeleteFromTarget.length} user(s) and their usermeta\n`));
|
|
128
|
+
}
|
|
129
|
+
if (plan.idsToInsertFromSource.length === 0)
|
|
130
|
+
return;
|
|
131
|
+
const sourceIdList = plan.idsToInsertFromSource.join(',');
|
|
132
|
+
console.log(chalk.gray(`Reading ${plan.idsToInsertFromSource.length} user row(s) from source (HEX-encoded)...`));
|
|
133
|
+
const sourceRowsResult = await runMysqlQuery(sourceConfig, `SELECT ID, HEX(user_login), HEX(user_pass), HEX(user_nicename), HEX(user_email), HEX(user_url), HEX(user_registered), HEX(user_activation_key), user_status, HEX(display_name) FROM wp_users WHERE ID IN (${sourceIdList}) ORDER BY ID ASC`, useDocker);
|
|
134
|
+
if (!sourceRowsResult.success) {
|
|
135
|
+
throw new Error(`Failed to read source users: ${sourceRowsResult.stderr}`);
|
|
136
|
+
}
|
|
137
|
+
const userLines = sourceRowsResult.stdout.trim().split('\n').filter(Boolean);
|
|
138
|
+
if (userLines.length === 0) {
|
|
139
|
+
throw new Error('No user rows returned from source');
|
|
140
|
+
}
|
|
141
|
+
const userValues = userLines.map((line) => {
|
|
142
|
+
const cols = line.split('\t');
|
|
143
|
+
return `(${cols[0]}, UNHEX('${cols[1]}'), UNHEX('${cols[2]}'), UNHEX('${cols[3]}'), UNHEX('${cols[4]}'), UNHEX('${cols[5]}'), UNHEX('${cols[6]}'), UNHEX('${cols[7]}'), ${cols[8]}, UNHEX('${cols[9]}'))`;
|
|
144
|
+
});
|
|
145
|
+
console.log(chalk.gray(`Inserting ${userValues.length} user row(s) into target...`));
|
|
146
|
+
const insertUserSql = `INSERT INTO wp_users (ID, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) VALUES ${userValues.join(', ')};`;
|
|
147
|
+
const insertUserResult = await runMysqlStdin(targetConfig, insertUserSql, useDocker);
|
|
148
|
+
if (!insertUserResult.success) {
|
|
149
|
+
throw new Error(`Failed to insert users: ${insertUserResult.stderr}`);
|
|
150
|
+
}
|
|
151
|
+
console.log(chalk.green(` Inserted ${userValues.length} user row(s)\n`));
|
|
152
|
+
console.log(chalk.gray(`Reading usermeta for ${plan.idsToInsertFromSource.length} user(s) from source...`));
|
|
153
|
+
const sourceMetaResult = await runMysqlQuery(sourceConfig, `SELECT user_id, HEX(meta_key), HEX(meta_value) FROM wp_usermeta WHERE user_id IN (${sourceIdList})`, useDocker);
|
|
154
|
+
if (!sourceMetaResult.success) {
|
|
155
|
+
throw new Error(`Failed to read source usermeta: ${sourceMetaResult.stderr}`);
|
|
156
|
+
}
|
|
157
|
+
const metaLines = sourceMetaResult.stdout.trim().split('\n').filter(Boolean);
|
|
158
|
+
if (metaLines.length > 0) {
|
|
159
|
+
console.log(chalk.gray(`Inserting ${metaLines.length} usermeta row(s) into target...`));
|
|
160
|
+
const BATCH_SIZE = 100;
|
|
161
|
+
for (let i = 0; i < metaLines.length; i += BATCH_SIZE) {
|
|
162
|
+
const batch = metaLines.slice(i, i + BATCH_SIZE);
|
|
163
|
+
const valuesClauses = batch.map((line) => {
|
|
164
|
+
const parts = line.split('\t');
|
|
165
|
+
const metaUserId = parts[0];
|
|
166
|
+
const hexKey = parts[1];
|
|
167
|
+
const hexValue = parts[2];
|
|
168
|
+
if (!hexValue || hexValue === 'NULL') {
|
|
169
|
+
return `(${metaUserId}, UNHEX('${hexKey}'), NULL)`;
|
|
170
|
+
}
|
|
171
|
+
return `(${metaUserId}, UNHEX('${hexKey}'), UNHEX('${hexValue}'))`;
|
|
172
|
+
});
|
|
173
|
+
const insertMetaSql = `INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ${valuesClauses.join(', ')};`;
|
|
174
|
+
const insertMetaResult = await runMysqlStdin(targetConfig, insertMetaSql, useDocker);
|
|
175
|
+
if (!insertMetaResult.success) {
|
|
176
|
+
throw new Error(`Failed to insert usermeta batch: ${insertMetaResult.stderr}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
console.log(chalk.green(` Inserted ${metaLines.length} usermeta row(s)\n`));
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
console.log(chalk.yellow(' No usermeta rows to insert\n'));
|
|
183
|
+
}
|
|
184
|
+
console.log(chalk.gray('Fixing AUTO_INCREMENT on target wp_users...'));
|
|
185
|
+
const maxIdResult = await runMysqlQuery(targetConfig, `SELECT COALESCE(MAX(ID), 0) + 1 FROM wp_users`, useDocker);
|
|
186
|
+
if (maxIdResult.success) {
|
|
187
|
+
const nextId = maxIdResult.stdout.trim();
|
|
188
|
+
await runMysqlQuery(targetConfig, `ALTER TABLE wp_users AUTO_INCREMENT = ${nextId}`, useDocker);
|
|
189
|
+
console.log(chalk.green(` Set to ${nextId}\n`));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
async function verifySyncResults(plan, targetConfig, useDocker) {
|
|
193
|
+
const allEmails = [
|
|
194
|
+
...plan.missing.map((u) => u.email),
|
|
195
|
+
...plan.mismatched.map((m) => m.source.email),
|
|
196
|
+
];
|
|
197
|
+
const expectedIds = new Map();
|
|
198
|
+
for (const u of plan.missing) {
|
|
199
|
+
expectedIds.set(u.email, u.id);
|
|
200
|
+
}
|
|
201
|
+
for (const m of plan.mismatched) {
|
|
202
|
+
expectedIds.set(m.source.email, m.source.id);
|
|
203
|
+
}
|
|
204
|
+
if (allEmails.length === 0)
|
|
205
|
+
return true;
|
|
206
|
+
const escapedEmails = allEmails.map((e) => `'${e.replace(/'/g, "\\'")}'`).join(',');
|
|
207
|
+
const verifyResult = await runMysqlQuery(targetConfig, `SELECT ID, user_email FROM wp_users WHERE user_email IN (${escapedEmails})`, useDocker);
|
|
208
|
+
if (!verifyResult.success) {
|
|
209
|
+
console.error(chalk.red(`Verification query failed: ${verifyResult.stderr}`));
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
const verifyLines = verifyResult.stdout.trim().split('\n').filter(Boolean);
|
|
213
|
+
const verifiedMap = new Map();
|
|
214
|
+
for (const line of verifyLines) {
|
|
215
|
+
const parts = line.split('\t');
|
|
216
|
+
verifiedMap.set(parts[1], parseInt(parts[0], 10));
|
|
217
|
+
}
|
|
218
|
+
let allGood = true;
|
|
219
|
+
for (const [email, expectedId] of expectedIds) {
|
|
220
|
+
const actualId = verifiedMap.get(email);
|
|
221
|
+
if (actualId === expectedId) {
|
|
222
|
+
console.log(` ${email}: ID ${actualId} ${chalk.green('OK')}`);
|
|
223
|
+
}
|
|
224
|
+
else if (actualId === undefined) {
|
|
225
|
+
console.log(` ${email}: ${chalk.red('NOT FOUND')}`);
|
|
226
|
+
allGood = false;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
console.log(` ${email}: ID ${actualId} ${chalk.red(`expected ${expectedId}`)}`);
|
|
230
|
+
allGood = false;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return allGood;
|
|
234
|
+
}
|
|
235
|
+
async function askConfirmation(message) {
|
|
236
|
+
return new Promise((resolve) => {
|
|
237
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
238
|
+
rl.question(withBell(message), (answer) => {
|
|
239
|
+
rl.close();
|
|
240
|
+
const normalized = answer.trim().toLowerCase();
|
|
241
|
+
resolve(normalized === 'y' || normalized === 'yes');
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
async function runCorrectUserSync(options) {
|
|
246
|
+
const fromEnv = options.from;
|
|
247
|
+
const toEnv = options.to;
|
|
248
|
+
const lookback = parseInt(options.lookback, 10);
|
|
249
|
+
if (!VALID_ENVS.includes(fromEnv)) {
|
|
250
|
+
console.error(chalk.red(`Error: Invalid source environment: ${fromEnv}`));
|
|
251
|
+
console.error(chalk.gray(`Valid environments: ${VALID_ENVS.join(', ')}`));
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
if (!VALID_ENVS.includes(toEnv)) {
|
|
255
|
+
console.error(chalk.red(`Error: Invalid target environment: ${toEnv}`));
|
|
256
|
+
console.error(chalk.gray(`Valid environments: ${VALID_ENVS.join(', ')}`));
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
if (fromEnv === toEnv) {
|
|
260
|
+
console.error(chalk.red('Error: Source and target environments must be different'));
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
if (isNaN(lookback) || lookback <= 0) {
|
|
264
|
+
console.error(chalk.red('Error: --lookback must be a positive integer'));
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
const config = readConfig();
|
|
268
|
+
if (!config) {
|
|
269
|
+
console.error(chalk.red('Error: Configuration not found'));
|
|
270
|
+
console.error(chalk.gray('Run "wfu-migrate config wizard" to set up configuration'));
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
const sourceConfig = config.environments[fromEnv];
|
|
274
|
+
const targetConfig = config.environments[toEnv];
|
|
275
|
+
if (!sourceConfig.host) {
|
|
276
|
+
console.error(chalk.red(`Error: Environment ${fromEnv} is not configured`));
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
if (!targetConfig.host) {
|
|
280
|
+
console.error(chalk.red(`Error: Environment ${toEnv} is not configured`));
|
|
281
|
+
process.exit(1);
|
|
282
|
+
}
|
|
283
|
+
console.log(chalk.bold(`\nCorrect User Sync: ${fromEnv} -> ${toEnv} (lookback ${lookback})\n`));
|
|
284
|
+
console.log(chalk.gray('Testing database connections...'));
|
|
285
|
+
const [sourceConn, targetConn] = await Promise.all([
|
|
286
|
+
testDbConnection(sourceConfig, fromEnv),
|
|
287
|
+
testDbConnection(targetConfig, toEnv),
|
|
288
|
+
]);
|
|
289
|
+
if (!sourceConn.success) {
|
|
290
|
+
console.error(chalk.red(`Error: ${sourceConn.error}`));
|
|
291
|
+
process.exit(1);
|
|
292
|
+
}
|
|
293
|
+
if (!targetConn.success) {
|
|
294
|
+
console.error(chalk.red(`Error: ${targetConn.error}`));
|
|
295
|
+
process.exit(1);
|
|
296
|
+
}
|
|
297
|
+
console.log(chalk.green(' Both connections OK\n'));
|
|
298
|
+
const useDocker = !checkMySqlAvailable().available;
|
|
299
|
+
console.log(chalk.gray(`Fetching last ${lookback} users from both environments...`));
|
|
300
|
+
let sourceUsers;
|
|
301
|
+
let targetUsers;
|
|
302
|
+
try {
|
|
303
|
+
[sourceUsers, targetUsers] = await Promise.all([
|
|
304
|
+
fetchRecentUsers(sourceConfig, lookback, useDocker),
|
|
305
|
+
fetchRecentUsers(targetConfig, lookback, useDocker),
|
|
306
|
+
]);
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
console.error(chalk.red(`Error: ${err.message}`));
|
|
310
|
+
process.exit(1);
|
|
311
|
+
}
|
|
312
|
+
console.log(chalk.green(` ${fromEnv}: ${sourceUsers.length} users, ${toEnv}: ${targetUsers.length} users\n`));
|
|
313
|
+
let plan;
|
|
314
|
+
try {
|
|
315
|
+
plan = buildSyncPlan(sourceUsers, targetUsers);
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
console.error(chalk.red(`Error: ${err.message}`));
|
|
319
|
+
process.exit(1);
|
|
320
|
+
}
|
|
321
|
+
const totalFixes = plan.missing.length + plan.mismatched.length;
|
|
322
|
+
if (totalFixes === 0) {
|
|
323
|
+
console.log(chalk.green('Environments are in sync — no fixes needed'));
|
|
324
|
+
if (plan.extraOnTarget.length > 0) {
|
|
325
|
+
console.log(chalk.gray(` (${plan.extraOnTarget.length} user(s) exist only on ${toEnv}, no action taken)`));
|
|
326
|
+
}
|
|
327
|
+
process.exit(0);
|
|
328
|
+
}
|
|
329
|
+
displaySyncPlan(plan, fromEnv, toEnv);
|
|
330
|
+
if (options.dryRun) {
|
|
331
|
+
console.log(chalk.yellow('Dry run — no changes made'));
|
|
332
|
+
process.exit(0);
|
|
333
|
+
}
|
|
334
|
+
if (!options.yes) {
|
|
335
|
+
const confirmed = await askConfirmation(`Proceed with fixing ${totalFixes} user(s) on ${toEnv}? (y/n): `);
|
|
336
|
+
if (!confirmed) {
|
|
337
|
+
console.log(chalk.yellow('\nAborted by user'));
|
|
338
|
+
process.exit(0);
|
|
339
|
+
}
|
|
340
|
+
console.log();
|
|
341
|
+
}
|
|
342
|
+
try {
|
|
343
|
+
await executeSyncPlan(plan, sourceConfig, targetConfig, useDocker);
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
console.error(chalk.red(`Error during sync: ${err.message}`));
|
|
347
|
+
process.exit(1);
|
|
348
|
+
}
|
|
349
|
+
console.log(chalk.gray('Verifying...'));
|
|
350
|
+
const verified = await verifySyncResults(plan, targetConfig, useDocker);
|
|
351
|
+
if (!verified) {
|
|
352
|
+
console.error(chalk.red('\nVerification FAILED — some users may need manual attention'));
|
|
353
|
+
process.exit(1);
|
|
354
|
+
}
|
|
355
|
+
console.log(chalk.green(`\nAll ${totalFixes} user(s) synced from ${fromEnv} to ${toEnv}`));
|
|
356
|
+
}
|
|
357
|
+
export const correctUserSyncCommand = new Command('correct-user-sync')
|
|
358
|
+
.description('Detect and fix cascading user ID mismatches between environments')
|
|
359
|
+
.requiredOption('--from <env>', 'Source environment (dev, uat, pprd, prod)')
|
|
360
|
+
.requiredOption('--to <env>', 'Target environment (dev, uat, pprd, prod)')
|
|
361
|
+
.option('--dry-run', 'Show what would be done without making changes', false)
|
|
362
|
+
.option('--yes', 'Skip confirmation prompt', false)
|
|
363
|
+
.option('--lookback <n>', 'Number of recent users to compare', '500')
|
|
364
|
+
.action(async (options) => {
|
|
365
|
+
await runCorrectUserSync(options);
|
|
366
|
+
});
|
|
367
|
+
//# sourceMappingURL=correct-user-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correct-user-sync.js","sourceRoot":"","sources":["../../src/commands/correct-user-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsQpC,eAAO,MAAM,aAAa,SAEN,CAAC"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -12,7 +12,14 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { Command } from 'commander';
|
|
14
14
|
import { execSync } from 'child_process';
|
|
15
|
+
import { readFileSync } from 'fs';
|
|
16
|
+
import { dirname, join } from 'path';
|
|
17
|
+
import { fileURLToPath } from 'url';
|
|
15
18
|
import { configExists, readConfig, verifyConfig } from '../lib/config-manager.js';
|
|
19
|
+
import { checkForUpdate } from '../lib/update-checker.js';
|
|
20
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
const packageJson = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf-8'));
|
|
22
|
+
const CURRENT_VERSION = packageJson.version;
|
|
16
23
|
function checkDocker() {
|
|
17
24
|
try {
|
|
18
25
|
const version = execSync('docker --version', { encoding: 'utf-8' }).trim();
|
|
@@ -196,6 +203,30 @@ function checkS3() {
|
|
|
196
203
|
message: `s3://${config.s3.bucket}/${config.s3.prefix}`,
|
|
197
204
|
};
|
|
198
205
|
}
|
|
206
|
+
async function checkVersion() {
|
|
207
|
+
const result = await checkForUpdate(CURRENT_VERSION);
|
|
208
|
+
if (!result) {
|
|
209
|
+
return {
|
|
210
|
+
name: 'Version',
|
|
211
|
+
status: 'warn',
|
|
212
|
+
message: `v${CURRENT_VERSION} (unable to check for updates)`,
|
|
213
|
+
suggestion: 'Check manually: npm view wfu-migrate version',
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
if (result.updateAvailable) {
|
|
217
|
+
return {
|
|
218
|
+
name: 'Version',
|
|
219
|
+
status: 'warn',
|
|
220
|
+
message: `v${result.currentVersion} → v${result.latestVersion} available`,
|
|
221
|
+
suggestion: 'Run: wfu-migrate update',
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
name: 'Version',
|
|
226
|
+
status: 'pass',
|
|
227
|
+
message: `v${CURRENT_VERSION} (latest)`,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
199
230
|
function formatResult(result) {
|
|
200
231
|
const icon = result.status === 'pass' ? '✓' : result.status === 'warn' ? '⚠' : '✗';
|
|
201
232
|
const color = result.status === 'pass' ? '\x1b[32m' : result.status === 'warn' ? '\x1b[33m' : '\x1b[31m';
|
|
@@ -211,6 +242,7 @@ async function runDoctor() {
|
|
|
211
242
|
console.log('==============================');
|
|
212
243
|
console.log('');
|
|
213
244
|
const results = [
|
|
245
|
+
await checkVersion(),
|
|
214
246
|
checkDocker(),
|
|
215
247
|
checkMysqlClient(),
|
|
216
248
|
checkAwsCli(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-sync.d.ts","sourceRoot":"","sources":["../../src/commands/user-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"user-sync.d.ts","sourceRoot":"","sources":["../../src/commands/user-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmPpC,eAAO,MAAM,eAAe,SAQxB,CAAC"}
|
|
@@ -13,71 +13,11 @@
|
|
|
13
13
|
* Usage: wfu-migrate user-sync --from <env> --to <env> --user-id <id> [--dry-run]
|
|
14
14
|
*/
|
|
15
15
|
import { Command } from 'commander';
|
|
16
|
-
import { spawn } from 'child_process';
|
|
17
16
|
import chalk from 'chalk';
|
|
18
17
|
import { readConfig } from '../lib/config-manager.js';
|
|
19
18
|
import { testDbConnection, checkMySqlAvailable } from '../lib/database.js';
|
|
19
|
+
import { runMysqlQuery, runMysqlStdin } from '../lib/mysql-query.js';
|
|
20
20
|
const VALID_ENVS = ['dev', 'uat', 'pprd', 'prod'];
|
|
21
|
-
function runMysqlQuery(config, query, useDocker) {
|
|
22
|
-
return new Promise((resolve) => {
|
|
23
|
-
const baseArgs = [
|
|
24
|
-
'-h', config.host,
|
|
25
|
-
'-P', String(config.port),
|
|
26
|
-
'-u', config.user,
|
|
27
|
-
`-p${config.password}`,
|
|
28
|
-
config.database,
|
|
29
|
-
'-N',
|
|
30
|
-
'-e', query,
|
|
31
|
-
'--connect-timeout=10',
|
|
32
|
-
];
|
|
33
|
-
const args = useDocker
|
|
34
|
-
? ['run', '--rm', '--network', 'host', 'mysql:8.0', 'mysql', ...baseArgs]
|
|
35
|
-
: baseArgs;
|
|
36
|
-
const cmd = useDocker ? 'docker' : 'mysql';
|
|
37
|
-
const proc = spawn(cmd, args, { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
38
|
-
let stdout = '';
|
|
39
|
-
let stderr = '';
|
|
40
|
-
proc.stdout.on('data', (data) => { stdout += data.toString(); });
|
|
41
|
-
proc.stderr.on('data', (data) => { stderr += data.toString(); });
|
|
42
|
-
proc.on('close', (code) => {
|
|
43
|
-
resolve({ success: code === 0, stdout, stderr });
|
|
44
|
-
});
|
|
45
|
-
proc.on('error', (err) => {
|
|
46
|
-
resolve({ success: false, stdout: '', stderr: err.message });
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
function runMysqlStdin(config, sql, useDocker) {
|
|
51
|
-
return new Promise((resolve) => {
|
|
52
|
-
const baseArgs = [
|
|
53
|
-
'-h', config.host,
|
|
54
|
-
'-P', String(config.port),
|
|
55
|
-
'-u', config.user,
|
|
56
|
-
`-p${config.password}`,
|
|
57
|
-
config.database,
|
|
58
|
-
'--connect-timeout=10',
|
|
59
|
-
];
|
|
60
|
-
const args = useDocker
|
|
61
|
-
? ['run', '--rm', '--network', 'host', '-i', 'mysql:8.0', 'mysql', ...baseArgs]
|
|
62
|
-
: baseArgs;
|
|
63
|
-
const cmd = useDocker ? 'docker' : 'mysql';
|
|
64
|
-
const proc = spawn(cmd, args, { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
65
|
-
let stdout = '';
|
|
66
|
-
let stderr = '';
|
|
67
|
-
let stdinError = '';
|
|
68
|
-
proc.stdin.on('error', (err) => { stdinError = err.message; });
|
|
69
|
-
proc.stdout.on('data', (data) => { stdout += data.toString(); });
|
|
70
|
-
proc.stderr.on('data', (data) => { stderr += data.toString(); });
|
|
71
|
-
proc.on('close', (code) => {
|
|
72
|
-
resolve({ success: code === 0, stdout, stderr: stderr || stdinError });
|
|
73
|
-
});
|
|
74
|
-
proc.on('error', (err) => {
|
|
75
|
-
resolve({ success: false, stdout: '', stderr: err.message });
|
|
76
|
-
});
|
|
77
|
-
proc.stdin.write(sql);
|
|
78
|
-
proc.stdin.end();
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
21
|
async function runUserSync(options) {
|
|
82
22
|
const fromEnv = options.from;
|
|
83
23
|
const toEnv = options.to;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-sync.js","sourceRoot":"","sources":["../../src/commands/user-sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"user-sync.js","sourceRoot":"","sources":["../../src/commands/user-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* - S3 integration for file sync and backup archival
|
|
12
12
|
* - Resume capability for interrupted migrations
|
|
13
13
|
*/
|
|
14
|
-
import { program } from 'commander';
|
|
14
|
+
import { Command, program } from 'commander';
|
|
15
|
+
import { execSync } from 'child_process';
|
|
15
16
|
import { readFileSync } from 'fs';
|
|
16
17
|
import { dirname, join } from 'path';
|
|
17
18
|
import { fileURLToPath } from 'url';
|
|
@@ -22,6 +23,8 @@ import { doctorCommand } from './commands/doctor.js';
|
|
|
22
23
|
import { cleanupCommand } from './commands/cleanup.js';
|
|
23
24
|
import { listSitesCommand } from './commands/list-sites.js';
|
|
24
25
|
import { userSyncCommand } from './commands/user-sync.js';
|
|
26
|
+
import { correctUserSyncCommand } from './commands/correct-user-sync.js';
|
|
27
|
+
import { notifyIfUpdateAvailable } from './lib/update-checker.js';
|
|
25
28
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
26
29
|
const packageJson = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
27
30
|
const VERSION = packageJson.version;
|
|
@@ -36,5 +39,21 @@ program.addCommand(doctorCommand);
|
|
|
36
39
|
program.addCommand(cleanupCommand);
|
|
37
40
|
program.addCommand(listSitesCommand);
|
|
38
41
|
program.addCommand(userSyncCommand);
|
|
39
|
-
program.
|
|
42
|
+
program.addCommand(correctUserSyncCommand);
|
|
43
|
+
const updateCommand = new Command('update')
|
|
44
|
+
.description('Update wfu-migrate to the latest version')
|
|
45
|
+
.action(() => {
|
|
46
|
+
console.log('Updating wfu-migrate...');
|
|
47
|
+
try {
|
|
48
|
+
execSync('npm update -g wfu-migrate', { stdio: 'inherit' });
|
|
49
|
+
console.log('Update complete.');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
console.error('Update failed. Try running manually: npm update -g wfu-migrate');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
program.addCommand(updateCommand);
|
|
57
|
+
await program.parseAsync();
|
|
58
|
+
await notifyIfUpdateAvailable(VERSION);
|
|
40
59
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7F,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,+EAA+E,CAAC;KAC5F,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC,CAAC;AAEnE,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAE3C,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KACxC,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,QAAQ,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC3B,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL query utilities for WFU-Migrate
|
|
3
|
+
*
|
|
4
|
+
* Shared helpers for running MySQL queries via CLI (native or Docker fallback).
|
|
5
|
+
* Uses spawn for non-blocking execution with stdout/stderr capture.
|
|
6
|
+
*/
|
|
7
|
+
import type { DatabaseConfig } from '../types/index.js';
|
|
8
|
+
export interface QueryResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
stdout: string;
|
|
11
|
+
stderr: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function runMysqlQuery(config: DatabaseConfig, query: string, useDocker: boolean): Promise<QueryResult>;
|
|
14
|
+
export declare function runMysqlStdin(config: DatabaseConfig, sql: string, useDocker: boolean): Promise<QueryResult>;
|
|
15
|
+
//# sourceMappingURL=mysql-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql-query.d.ts","sourceRoot":"","sources":["../../src/lib/mysql-query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA4B7G;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA8B3G"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL query utilities for WFU-Migrate
|
|
3
|
+
*
|
|
4
|
+
* Shared helpers for running MySQL queries via CLI (native or Docker fallback).
|
|
5
|
+
* Uses spawn for non-blocking execution with stdout/stderr capture.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn } from 'child_process';
|
|
8
|
+
export function runMysqlQuery(config, query, useDocker) {
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
const baseArgs = [
|
|
11
|
+
'-h', config.host,
|
|
12
|
+
'-P', String(config.port),
|
|
13
|
+
'-u', config.user,
|
|
14
|
+
`-p${config.password}`,
|
|
15
|
+
config.database,
|
|
16
|
+
'-N',
|
|
17
|
+
'-e', query,
|
|
18
|
+
'--connect-timeout=10',
|
|
19
|
+
];
|
|
20
|
+
const args = useDocker
|
|
21
|
+
? ['run', '--rm', '--network', 'host', 'mysql:8.0', 'mysql', ...baseArgs]
|
|
22
|
+
: baseArgs;
|
|
23
|
+
const cmd = useDocker ? 'docker' : 'mysql';
|
|
24
|
+
const proc = spawn(cmd, args, { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
25
|
+
let stdout = '';
|
|
26
|
+
let stderr = '';
|
|
27
|
+
proc.stdout.on('data', (data) => { stdout += data.toString(); });
|
|
28
|
+
proc.stderr.on('data', (data) => { stderr += data.toString(); });
|
|
29
|
+
proc.on('close', (code) => {
|
|
30
|
+
resolve({ success: code === 0, stdout, stderr });
|
|
31
|
+
});
|
|
32
|
+
proc.on('error', (err) => {
|
|
33
|
+
resolve({ success: false, stdout: '', stderr: err.message });
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export function runMysqlStdin(config, sql, useDocker) {
|
|
38
|
+
return new Promise((resolve) => {
|
|
39
|
+
const baseArgs = [
|
|
40
|
+
'-h', config.host,
|
|
41
|
+
'-P', String(config.port),
|
|
42
|
+
'-u', config.user,
|
|
43
|
+
`-p${config.password}`,
|
|
44
|
+
config.database,
|
|
45
|
+
'--connect-timeout=10',
|
|
46
|
+
];
|
|
47
|
+
const args = useDocker
|
|
48
|
+
? ['run', '--rm', '--network', 'host', '-i', 'mysql:8.0', 'mysql', ...baseArgs]
|
|
49
|
+
: baseArgs;
|
|
50
|
+
const cmd = useDocker ? 'docker' : 'mysql';
|
|
51
|
+
const proc = spawn(cmd, args, { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
52
|
+
let stdout = '';
|
|
53
|
+
let stderr = '';
|
|
54
|
+
let stdinError = '';
|
|
55
|
+
proc.stdin.on('error', (err) => { stdinError = err.message; });
|
|
56
|
+
proc.stdout.on('data', (data) => { stdout += data.toString(); });
|
|
57
|
+
proc.stderr.on('data', (data) => { stderr += data.toString(); });
|
|
58
|
+
proc.on('close', (code) => {
|
|
59
|
+
resolve({ success: code === 0, stdout, stderr: stderr || stdinError });
|
|
60
|
+
});
|
|
61
|
+
proc.on('error', (err) => {
|
|
62
|
+
resolve({ success: false, stdout: '', stderr: err.message });
|
|
63
|
+
});
|
|
64
|
+
proc.stdin.write(sql);
|
|
65
|
+
proc.stdin.end();
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=mysql-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql-query.js","sourceRoot":"","sources":["../../src/lib/mysql-query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAStC,MAAM,UAAU,aAAa,CAAC,MAAsB,EAAE,KAAa,EAAE,SAAkB;IACrF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,MAAM,CAAC,QAAQ,EAAE;YACtB,MAAM,CAAC,QAAQ;YACf,IAAI;YACJ,IAAI,EAAE,KAAK;YACX,sBAAsB;SACvB,CAAC;QACF,MAAM,IAAI,GAAG,SAAS;YACpB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;YACzE,CAAC,CAAC,QAAQ,CAAC;QACb,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAsB,EAAE,GAAW,EAAE,SAAkB;IACnF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,MAAM,CAAC,QAAQ,EAAE;YACtB,MAAM,CAAC,QAAQ;YACf,sBAAsB;SACvB,CAAC;QACF,MAAM,IAAI,GAAG,SAAS;YACpB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;YAC/E,CAAC,CAAC,QAAQ,CAAC;QACb,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update checker - Alerts users when a newer version is available on npm
|
|
3
|
+
*
|
|
4
|
+
* Caches the latest version in ~/.wfu-migrate/.update-check.json
|
|
5
|
+
* to avoid hitting the npm registry on every invocation. Checks
|
|
6
|
+
* at most once every 24 hours.
|
|
7
|
+
*/
|
|
8
|
+
export interface UpdateCheckResult {
|
|
9
|
+
updateAvailable: boolean;
|
|
10
|
+
currentVersion: string;
|
|
11
|
+
latestVersion: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if a newer version is available. Uses a 24-hour cache to
|
|
15
|
+
* avoid excessive network requests. Returns null if the check
|
|
16
|
+
* was skipped or failed.
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkForUpdate(currentVersion: string): Promise<UpdateCheckResult | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Print an update notification to stderr if a newer version is available.
|
|
21
|
+
* Uses stderr so it doesn't interfere with piped output.
|
|
22
|
+
*/
|
|
23
|
+
export declare function notifyIfUpdateAvailable(currentVersion: string): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=update-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../src/lib/update-checker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+DH,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAiB9F;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAanF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update checker - Alerts users when a newer version is available on npm
|
|
3
|
+
*
|
|
4
|
+
* Caches the latest version in ~/.wfu-migrate/.update-check.json
|
|
5
|
+
* to avoid hitting the npm registry on every invocation. Checks
|
|
6
|
+
* at most once every 24 hours.
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { homedir } from 'os';
|
|
11
|
+
const CACHE_DIR = join(homedir(), '.wfu-migrate');
|
|
12
|
+
const CACHE_FILE = join(CACHE_DIR, '.update-check.json');
|
|
13
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
14
|
+
const REGISTRY_URL = 'https://registry.npmjs.org/wfu-migrate/latest';
|
|
15
|
+
const FETCH_TIMEOUT_MS = 3000;
|
|
16
|
+
function readCache() {
|
|
17
|
+
try {
|
|
18
|
+
if (!existsSync(CACHE_FILE))
|
|
19
|
+
return null;
|
|
20
|
+
return JSON.parse(readFileSync(CACHE_FILE, 'utf-8'));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function writeCache(data) {
|
|
27
|
+
try {
|
|
28
|
+
if (!existsSync(CACHE_DIR)) {
|
|
29
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
writeFileSync(CACHE_FILE, JSON.stringify(data), 'utf-8');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Silently fail - caching is best-effort
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function isNewer(latest, current) {
|
|
38
|
+
const latestParts = latest.split('.').map(Number);
|
|
39
|
+
const currentParts = current.split('.').map(Number);
|
|
40
|
+
for (let i = 0; i < Math.max(latestParts.length, currentParts.length); i++) {
|
|
41
|
+
const l = latestParts[i] || 0;
|
|
42
|
+
const c = currentParts[i] || 0;
|
|
43
|
+
if (l > c)
|
|
44
|
+
return true;
|
|
45
|
+
if (l < c)
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
async function fetchLatestVersion() {
|
|
51
|
+
try {
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
54
|
+
const response = await fetch(REGISTRY_URL, { signal: controller.signal });
|
|
55
|
+
clearTimeout(timeout);
|
|
56
|
+
if (!response.ok)
|
|
57
|
+
return null;
|
|
58
|
+
const data = await response.json();
|
|
59
|
+
return data.version;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if a newer version is available. Uses a 24-hour cache to
|
|
67
|
+
* avoid excessive network requests. Returns null if the check
|
|
68
|
+
* was skipped or failed.
|
|
69
|
+
*/
|
|
70
|
+
export async function checkForUpdate(currentVersion) {
|
|
71
|
+
const cache = readCache();
|
|
72
|
+
if (cache && (Date.now() - cache.lastCheck) < CHECK_INTERVAL_MS) {
|
|
73
|
+
return {
|
|
74
|
+
updateAvailable: isNewer(cache.latestVersion, currentVersion),
|
|
75
|
+
currentVersion,
|
|
76
|
+
latestVersion: cache.latestVersion,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const latestVersion = await fetchLatestVersion();
|
|
80
|
+
if (!latestVersion)
|
|
81
|
+
return null;
|
|
82
|
+
writeCache({ lastCheck: Date.now(), latestVersion });
|
|
83
|
+
return {
|
|
84
|
+
updateAvailable: isNewer(latestVersion, currentVersion),
|
|
85
|
+
currentVersion,
|
|
86
|
+
latestVersion,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Print an update notification to stderr if a newer version is available.
|
|
91
|
+
* Uses stderr so it doesn't interfere with piped output.
|
|
92
|
+
*/
|
|
93
|
+
export async function notifyIfUpdateAvailable(currentVersion) {
|
|
94
|
+
const result = await checkForUpdate(currentVersion);
|
|
95
|
+
if (!result?.updateAvailable)
|
|
96
|
+
return;
|
|
97
|
+
const yellow = '\x1b[33m';
|
|
98
|
+
const cyan = '\x1b[36m';
|
|
99
|
+
const bold = '\x1b[1m';
|
|
100
|
+
const reset = '\x1b[0m';
|
|
101
|
+
process.stderr.write(`\n${yellow}╭─────────────────────────────────────────────╮${reset}\n` +
|
|
102
|
+
`${yellow}│${reset} Update available: ${red(result.currentVersion)} → ${green(result.latestVersion)}${yellow} │${reset}\n` +
|
|
103
|
+
`${yellow}│${reset} Run ${cyan}${bold}npm update -g wfu-migrate${reset} to update ${yellow}│${reset}\n` +
|
|
104
|
+
`${yellow}╰─────────────────────────────────────────────╯${reset}\n\n`);
|
|
105
|
+
}
|
|
106
|
+
function red(text) {
|
|
107
|
+
return `\x1b[31m${text}\x1b[0m`;
|
|
108
|
+
}
|
|
109
|
+
function green(text) {
|
|
110
|
+
return `\x1b[32m${text}\x1b[0m`;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=update-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../src/lib/update-checker.ts"],"names":[],"mappings":"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"}
|