@payload-auth-link/migrate 0.2.1 → 0.3.1
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 +3 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +115 -9
- package/dist/cli.js.map +1 -1
- package/dist/codemods.d.ts +33 -0
- package/dist/codemods.d.ts.map +1 -0
- package/dist/codemods.js +58 -0
- package/dist/codemods.js.map +1 -0
- package/dist/exporters.d.ts +50 -0
- package/dist/exporters.d.ts.map +1 -0
- package/dist/exporters.js +76 -0
- package/dist/exporters.js.map +1 -0
- package/dist/importer/run-import.d.ts +2 -2
- package/dist/importer/run-import.d.ts.map +1 -1
- package/dist/importer/run-import.js +1 -1
- package/dist/importer/run-import.js.map +1 -1
- package/package.json +13 -5
- package/src/cli.ts +116 -10
- package/src/codemods.ts +95 -0
- package/src/exporters.ts +121 -0
- package/src/importer/run-import.ts +5 -3
package/README.md
CHANGED
|
@@ -47,4 +47,6 @@ Bun's module loader, which tolerates the directory imports
|
|
|
47
47
|
payload-auth's dist uses.
|
|
48
48
|
|
|
49
49
|
Peers: `payload` ^3.83.0 || 4.0.0-beta.0 (the import commands boot the
|
|
50
|
-
app's own Payload instance; the doctor itself only reads)
|
|
50
|
+
app's own Payload instance; the doctor itself only reads),
|
|
51
|
+
`better-auth` >=1.7.6 <1.8.0, and `@payload-auth-link/next` ^0.3.1
|
|
52
|
+
(optional — only the codemod's emitted route handlers need it).
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAuLA,KAAK,OAAO,GAAG;IACb,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC,CAAA;AAED,iBAAe,IAAI,CACjB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,OAAwB,EAC7B,GAAG,GAAE,OAAwB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAwLjB;AAiBD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,CAAA"}
|
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
/**
|
|
3
|
-
* The `@payload-auth-link/migrate` CLI (issues #49–#59)
|
|
4
|
-
* read-only `doctor` (#52)
|
|
5
|
-
*
|
|
3
|
+
* The `@payload-auth-link/migrate` CLI (issues #49–#59): the
|
|
4
|
+
* read-only `doctor` (#52), the importer lifecycle (#50), the
|
|
5
|
+
* codemods (#53), and the JSONL exporter (#58).
|
|
6
6
|
*
|
|
7
7
|
* Exit codes: 0 clean, 1 blockers, 2 warnings only, 3 usage errors.
|
|
8
8
|
* Never logs credential material — connection strings print only in
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { runDoctor } from './doctor/run-doctor.js';
|
|
13
13
|
import { runFinalize, runFromPayloadAuth, runRollback, runVerify, } from './importer/run-import.js';
|
|
14
|
+
import { applyCodemods } from './codemods.js';
|
|
15
|
+
import { readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
16
|
+
import { extname, join, relative } from 'node:path';
|
|
14
17
|
function parseArgs(argv) {
|
|
15
18
|
const positional = [];
|
|
16
19
|
const flags = new Map();
|
|
@@ -47,6 +50,9 @@ function usage() {
|
|
|
47
50
|
|
|
48
51
|
Commands:
|
|
49
52
|
doctor --config ./src/payload.config.ts [--src ./src] [--json] [--database-url URL]
|
|
53
|
+
export --database-url URL [--out file.jsonl]
|
|
54
|
+
(lossless JSONL of every auth table — the off-ramp, #58)
|
|
55
|
+
codemod --src ./src [--write]
|
|
50
56
|
from-payload-auth --config ./src/payload.config.ts [--apply] [--sessions=carry|drop]
|
|
51
57
|
[--manifest ./payload-auth-link-migration.json] [--database-url URL] [--json]
|
|
52
58
|
verify --config ./src/payload.config.ts [--database-url URL] [--json]
|
|
@@ -66,6 +72,10 @@ Commands:
|
|
|
66
72
|
rollback undoes exactly the manifest; finalize marks it read-only
|
|
67
73
|
so the legacy tables may be dropped later, in their own migration.
|
|
68
74
|
|
|
75
|
+
codemod rewrites the three named payload-auth call-site patterns
|
|
76
|
+
(getPayloadAuth, payload.betterAuth.api.getSession, toNextJsHandler)
|
|
77
|
+
and reports what needs a human. Dry run by default; --write rewrites.
|
|
78
|
+
|
|
69
79
|
Exit codes: 0 clean, 1 blockers/mismatch, 2 warnings only, 3 usage errors.
|
|
70
80
|
`;
|
|
71
81
|
}
|
|
@@ -161,20 +171,118 @@ async function main(argv, out = process.stdout, err = process.stderr) {
|
|
|
161
171
|
out.write(usage());
|
|
162
172
|
return command === null && argv.length === 0 ? 3 : 0;
|
|
163
173
|
}
|
|
164
|
-
const importCommands = [
|
|
174
|
+
const importCommands = [
|
|
175
|
+
'from-payload-auth',
|
|
176
|
+
'verify',
|
|
177
|
+
'rollback',
|
|
178
|
+
'finalize',
|
|
179
|
+
'codemod',
|
|
180
|
+
'export',
|
|
181
|
+
];
|
|
165
182
|
if (command !== 'doctor' && !importCommands.includes(command)) {
|
|
166
183
|
err.write(`unknown command '${command}'\n\n${usage()}`);
|
|
167
184
|
return 3;
|
|
168
185
|
}
|
|
169
186
|
if (importCommands.includes(command)) {
|
|
187
|
+
const databaseUrl = typeof flags.get('database-url') === 'string'
|
|
188
|
+
? flags.get('database-url')
|
|
189
|
+
: (process.env.DATABASE_URL ?? '');
|
|
190
|
+
// export --database-url URL [--out file.jsonl]
|
|
191
|
+
// (no --config: it reads the source database directly, #58)
|
|
192
|
+
if (command === 'export') {
|
|
193
|
+
if (databaseUrl === '') {
|
|
194
|
+
err.write('export requires --database-url or DATABASE_URL\n');
|
|
195
|
+
return 3;
|
|
196
|
+
}
|
|
197
|
+
const { exportToJsonl } = await import('./exporters.js');
|
|
198
|
+
const result = await exportToJsonl({
|
|
199
|
+
connectionString: databaseUrl,
|
|
200
|
+
format: 'jsonl',
|
|
201
|
+
log: (message) => out.write(`${message}\n`),
|
|
202
|
+
});
|
|
203
|
+
if (typeof flags.get('out') === 'string') {
|
|
204
|
+
writeFileSync(flags.get('out'), result.jsonl);
|
|
205
|
+
out.write(`wrote ${result.totalRows} row(s) to ${String(flags.get('out'))}\n`);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
out.write(result.jsonl);
|
|
209
|
+
}
|
|
210
|
+
return 0;
|
|
211
|
+
}
|
|
212
|
+
// codemod --src ./src [--write]
|
|
213
|
+
// (no --config: a pure source rewrite, #53)
|
|
214
|
+
if (command === 'codemod') {
|
|
215
|
+
const srcFlag = flags.get('src');
|
|
216
|
+
if (typeof srcFlag !== 'string' || srcFlag === '') {
|
|
217
|
+
err.write('codemod requires --src <directory>\n');
|
|
218
|
+
return 3;
|
|
219
|
+
}
|
|
220
|
+
const srcDir = new URL(srcFlag, `file://${process.cwd()}/`).pathname;
|
|
221
|
+
const write = flags.get('write') === true;
|
|
222
|
+
const changed = [];
|
|
223
|
+
const manual = [];
|
|
224
|
+
const walk = (dir) => {
|
|
225
|
+
let entries;
|
|
226
|
+
try {
|
|
227
|
+
entries = readdirSync(dir);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
for (const entry of entries) {
|
|
233
|
+
if (['node_modules', 'dist', '.next'].includes(entry) || entry.startsWith('.')) {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
const full = join(dir, entry);
|
|
237
|
+
let stats;
|
|
238
|
+
try {
|
|
239
|
+
stats = statSync(full);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (stats.isDirectory()) {
|
|
245
|
+
walk(full);
|
|
246
|
+
}
|
|
247
|
+
else if (['.ts', '.tsx', '.js', '.jsx', '.mts', '.mjs'].includes(extname(entry))) {
|
|
248
|
+
const before = readFileSync(full, 'utf8');
|
|
249
|
+
const result = applyCodemods(relative(srcDir, full), before);
|
|
250
|
+
if (result.changed) {
|
|
251
|
+
if (write) {
|
|
252
|
+
writeFileSync(full, result.after);
|
|
253
|
+
}
|
|
254
|
+
changed.push(relative(srcDir, full));
|
|
255
|
+
}
|
|
256
|
+
for (const site of result.manual) {
|
|
257
|
+
manual.push(`${relative(srcDir, full)}: ${site}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
walk(srcDir);
|
|
263
|
+
out.write(`${changed.length} file(s) ${write ? 'rewritten' : 'would be rewritten (dry run; pass --write)'}:\n` +
|
|
264
|
+
changed.map((f) => ` ${f}`).join('\n') +
|
|
265
|
+
(manual.length > 0
|
|
266
|
+
? `\nmanual follow-up:\n${manual.map((m) => ` ${m}`).join('\n')}`
|
|
267
|
+
: '') +
|
|
268
|
+
'\n');
|
|
269
|
+
return 0;
|
|
270
|
+
}
|
|
271
|
+
// finalize [--manifest ...]
|
|
272
|
+
// (no --config: manifest-only; no Payload instance is loaded)
|
|
273
|
+
if (command === 'finalize') {
|
|
274
|
+
await runFinalize(typeof flags.get('manifest') === 'string'
|
|
275
|
+
? { manifestPath: flags.get('manifest') }
|
|
276
|
+
: {});
|
|
277
|
+
return 0;
|
|
278
|
+
}
|
|
279
|
+
// The remaining commands (from-payload-auth, verify, rollback) all
|
|
280
|
+
// load a Payload instance, so they need the config.
|
|
170
281
|
const configFlag = flags.get('config');
|
|
171
282
|
if (typeof configFlag !== 'string' || configFlag === '') {
|
|
172
283
|
err.write(`${command} requires --config <path to payload.config.ts>\n`);
|
|
173
284
|
return 3;
|
|
174
285
|
}
|
|
175
|
-
const databaseUrl = typeof flags.get('database-url') === 'string'
|
|
176
|
-
? flags.get('database-url')
|
|
177
|
-
: (process.env.DATABASE_URL ?? '');
|
|
178
286
|
if ((command === 'from-payload-auth' || command === 'verify') && databaseUrl === '') {
|
|
179
287
|
err.write(`${command} requires --database-url or DATABASE_URL\n`);
|
|
180
288
|
return 3;
|
|
@@ -210,8 +318,6 @@ async function main(argv, out = process.stdout, err = process.stderr) {
|
|
|
210
318
|
await runRollback(importOptions);
|
|
211
319
|
return 0;
|
|
212
320
|
}
|
|
213
|
-
await runFinalize(importOptions);
|
|
214
|
-
return 0;
|
|
215
321
|
}
|
|
216
322
|
const configPath = flags.get('config');
|
|
217
323
|
if (typeof configPath !== 'string' || configPath === '') {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codemods (issue #53): rule-based rewrites for the call sites a
|
|
3
|
+
* payload-auth app must migrate. Deliberately textual and scoped —
|
|
4
|
+
* each rule matches an exact, idiomatic payload-auth pattern and
|
|
5
|
+
* leaves anything it cannot fully rewrite untouched (reported in the
|
|
6
|
+
* result), because a half-rewritten call site is worse than an
|
|
7
|
+
* explicit one.
|
|
8
|
+
*/
|
|
9
|
+
export type CodemodRule = {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly description: string;
|
|
12
|
+
/** Apply to one file's content; returns the new content (same string when untouched). */
|
|
13
|
+
readonly apply: (content: string) => string;
|
|
14
|
+
};
|
|
15
|
+
export type CodemodFileResult = {
|
|
16
|
+
readonly file: string;
|
|
17
|
+
readonly changed: boolean;
|
|
18
|
+
/** Rules that fired on this file. */
|
|
19
|
+
readonly applied: readonly string[];
|
|
20
|
+
/** Matches the rules could not fully rewrite (reported, never touched). */
|
|
21
|
+
readonly manual: readonly string[];
|
|
22
|
+
/** The rewritten content — equal to the input when nothing changed. */
|
|
23
|
+
readonly after: string;
|
|
24
|
+
};
|
|
25
|
+
export declare const codemodRules: readonly CodemodRule[];
|
|
26
|
+
/**
|
|
27
|
+
* Report call sites the rules cannot fully rewrite — each one needs a
|
|
28
|
+
* human decision (which session API call, which route handler shape).
|
|
29
|
+
*/
|
|
30
|
+
export declare function findManualSites(content: string): readonly string[];
|
|
31
|
+
/** Apply every rule to one file; reports what fired and what needs a human. */
|
|
32
|
+
export declare function applyCodemods(file: string, content: string): CodemodFileResult;
|
|
33
|
+
//# sourceMappingURL=codemods.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codemods.d.ts","sourceRoot":"","sources":["../src/codemods.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,WAAW,EAqC9C,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CASlE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAY9E"}
|
package/dist/codemods.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codemods (issue #53): rule-based rewrites for the call sites a
|
|
3
|
+
* payload-auth app must migrate. Deliberately textual and scoped —
|
|
4
|
+
* each rule matches an exact, idiomatic payload-auth pattern and
|
|
5
|
+
* leaves anything it cannot fully rewrite untouched (reported in the
|
|
6
|
+
* result), because a half-rewritten call site is worse than an
|
|
7
|
+
* explicit one.
|
|
8
|
+
*/
|
|
9
|
+
export const codemodRules = [
|
|
10
|
+
{
|
|
11
|
+
id: 'get-payload-auth',
|
|
12
|
+
description: 'getPayloadAuth() -> getPayload({ config })',
|
|
13
|
+
apply: (content) => content
|
|
14
|
+
.replace(/import\s*\{\s*getPayloadAuth\s*(?:,[^}]*)?\}\s*from\s*['"]payload-auth['"];?/g, "import { getPayload } from 'payload'")
|
|
15
|
+
.replace(/\bgetPayloadAuth\(\s*\)/g, 'await getPayload({ config })'),
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'better-auth-get-session',
|
|
19
|
+
description: 'payload.betterAuth.api.getSession({ headers }) -> authLinkServer(payload).getSession(headers)',
|
|
20
|
+
apply: (content) => content.replace(/payload\.betterAuth\.api\.getSession\(\s*\{\s*headers\s*\}\s*\)/g, '(await authLinkServer(payload)).getSession(headers)'),
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'to-next-js-handler',
|
|
24
|
+
description: 'toNextJsHandler(payload.betterAuth) -> createRouteHandlers from @payload-auth-link/next',
|
|
25
|
+
apply: (content) => content
|
|
26
|
+
.replace(/import\s*\{\s*toNextJsHandler\s*\}\s*from\s*['"]better-auth\/next-js['"];?/g, "import { createRouteHandlers } from '@payload-auth-link/next'")
|
|
27
|
+
.replace(/export\s*\{\s*(\w+)\s+as\s+GET\s*,\s*(\w+)\s+as\s+POST\s*\}\s*=\s*toNextJsHandler\(\s*payload\.betterAuth\s*\)/g, 'export const GET = createRouteHandlers.GET\nexport const POST = createRouteHandlers.POST'),
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
/**
|
|
31
|
+
* Report call sites the rules cannot fully rewrite — each one needs a
|
|
32
|
+
* human decision (which session API call, which route handler shape).
|
|
33
|
+
*/
|
|
34
|
+
export function findManualSites(content) {
|
|
35
|
+
const manual = [];
|
|
36
|
+
if (/\bpayload\.betterAuth\.api\.(?!getSession\b)\w+/.test(content)) {
|
|
37
|
+
manual.push('payload.betterAuth.api.<method> — see the authLinkServer session API (#54)');
|
|
38
|
+
}
|
|
39
|
+
if (/\$context\.(?:internalAdapter|adapter)\b/.test(content)) {
|
|
40
|
+
manual.push('$context internals — see the supported server session API (#54)');
|
|
41
|
+
}
|
|
42
|
+
return manual;
|
|
43
|
+
}
|
|
44
|
+
/** Apply every rule to one file; reports what fired and what needs a human. */
|
|
45
|
+
export function applyCodemods(file, content) {
|
|
46
|
+
let current = content;
|
|
47
|
+
const applied = [];
|
|
48
|
+
for (const rule of codemodRules) {
|
|
49
|
+
const next = rule.apply(current);
|
|
50
|
+
if (next !== current) {
|
|
51
|
+
applied.push(rule.id);
|
|
52
|
+
current = next;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const manual = findManualSites(current);
|
|
56
|
+
return { file, changed: current !== content, applied, manual, after: current };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=codemods.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codemods.js","sourceRoot":"","sources":["../src/codemods.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD;QACE,EAAE,EAAE,kBAAkB;QACtB,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACjB,OAAO;aACJ,OAAO,CACN,+EAA+E,EAC/E,sCAAsC,CACvC;aACA,OAAO,CAAC,0BAA0B,EAAE,8BAA8B,CAAC;KACzE;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,WAAW,EACT,+FAA+F;QACjG,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACjB,OAAO,CAAC,OAAO,CACb,kEAAkE,EAClE,qDAAqD,CACtD;KACJ;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,WAAW,EACT,yFAAyF;QAC3F,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACjB,OAAO;aACJ,OAAO,CACN,6EAA6E,EAC7E,+DAA+D,CAChE;aACA,OAAO,CACN,iHAAiH,EACjH,0FAA0F,CAC3F;KACN;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,iDAAiD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;IAC3F,CAAC;IACD,IAAI,0CAA0C,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IACzD,IAAI,OAAO,GAAG,OAAO,CAAA;IACrB,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAChC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACrB,OAAO,GAAG,IAAI,CAAA;QAChB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;AAChF,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Off-ramp exporters (issue #58): every payload-auth-link collection's
|
|
3
|
+
* rows as lossless JSONL — each line is one row with every column
|
|
4
|
+
* (including plugin-injected fields: identities, linkable,
|
|
5
|
+
* linkableEmail, suspension, roles child rows), typed as stored.
|
|
6
|
+
* Re-importing the JSONL reproduces the exact rows, so leaving is as
|
|
7
|
+
* testable as arriving.
|
|
8
|
+
*/
|
|
9
|
+
export type ExportFormat = 'jsonl';
|
|
10
|
+
export type ExportOptions = {
|
|
11
|
+
readonly connectionString: string;
|
|
12
|
+
readonly format: ExportFormat;
|
|
13
|
+
/** Tables to export; defaults to the full auth-table set. */
|
|
14
|
+
readonly tables?: readonly string[] | undefined;
|
|
15
|
+
readonly log?: (message: string) => void;
|
|
16
|
+
};
|
|
17
|
+
/** The auth-table set, in dependency order for re-import. */
|
|
18
|
+
export declare const exportTables: readonly string[];
|
|
19
|
+
export type ExportResult = {
|
|
20
|
+
readonly tables: readonly {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly rows: number;
|
|
23
|
+
}[];
|
|
24
|
+
/** The JSONL document: one JSON object per line, `{"table": …, "row": …}`. */
|
|
25
|
+
readonly jsonl: string;
|
|
26
|
+
readonly totalRows: number;
|
|
27
|
+
};
|
|
28
|
+
/** Export the auth tables to lossless JSONL (issue #58). */
|
|
29
|
+
export declare function exportToJsonl(options: ExportOptions): Promise<ExportResult>;
|
|
30
|
+
/** A round-trip verification row: source vs re-import counts. */
|
|
31
|
+
export type RoundTripResult = {
|
|
32
|
+
readonly ok: boolean;
|
|
33
|
+
readonly tables: readonly {
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly source: number;
|
|
36
|
+
readonly target: number;
|
|
37
|
+
}[];
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Lossless round-trip check (#58): re-import the JSONL into a target
|
|
41
|
+
* schema (same table names) and compare per-table counts. The JSONL
|
|
42
|
+
* rows carry every column, so a re-import that drops or reshapes
|
|
43
|
+
* anything fails here.
|
|
44
|
+
*/
|
|
45
|
+
export declare function verifyRoundTrip(options: {
|
|
46
|
+
readonly sourceConnectionString: string;
|
|
47
|
+
readonly targetConnectionString: string;
|
|
48
|
+
readonly tables?: readonly string[] | undefined;
|
|
49
|
+
}): Promise<RoundTripResult>;
|
|
50
|
+
//# sourceMappingURL=exporters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporters.d.ts","sourceRoot":"","sources":["../src/exporters.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAA;AAElC,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACzC,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAYzC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5E,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,4DAA4D;AAC5D,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCjF;AAED,iEAAiE;AACjE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB,EAAE,CAAA;CACJ,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAA;IACvC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAChD,GAAG,OAAO,CAAC,eAAe,CAAC,CAsB3B"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Client } from 'pg';
|
|
2
|
+
/** The auth-table set, in dependency order for re-import. */
|
|
3
|
+
export const exportTables = [
|
|
4
|
+
'users',
|
|
5
|
+
'users_role',
|
|
6
|
+
'users_identities',
|
|
7
|
+
'accounts',
|
|
8
|
+
'sessions',
|
|
9
|
+
'verifications',
|
|
10
|
+
'api_keys',
|
|
11
|
+
'jwks',
|
|
12
|
+
'organizations',
|
|
13
|
+
'members',
|
|
14
|
+
'invitations',
|
|
15
|
+
];
|
|
16
|
+
/** Export the auth tables to lossless JSONL (issue #58). */
|
|
17
|
+
export async function exportToJsonl(options) {
|
|
18
|
+
const tables = options.tables ?? exportTables;
|
|
19
|
+
const client = new Client({ connectionString: options.connectionString });
|
|
20
|
+
await client.connect();
|
|
21
|
+
try {
|
|
22
|
+
const lines = [];
|
|
23
|
+
const exported = [];
|
|
24
|
+
let totalRows = 0;
|
|
25
|
+
for (const table of tables) {
|
|
26
|
+
const exists = await client.query(`SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = $1`, [table]);
|
|
27
|
+
if (exists.rows.length === 0) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
// Export EVERY column raw (JSON types preserved by ::jsonb cast
|
|
31
|
+
// per row via row_to_json) — lossless by construction.
|
|
32
|
+
const result = await client.query(`SELECT row_to_json(t)::jsonb AS row FROM ${table} t ORDER BY t.id`);
|
|
33
|
+
exported.push({ name: table, rows: result.rows.length });
|
|
34
|
+
totalRows += result.rows.length;
|
|
35
|
+
for (const row of result.rows) {
|
|
36
|
+
lines.push(JSON.stringify({ table, row: row.row }));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
options.log?.(`exported ${totalRows} row(s) across ${exported.length} table(s)`);
|
|
40
|
+
return { tables: exported, jsonl: `${lines.join('\n')}\n`, totalRows };
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await client.end();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Lossless round-trip check (#58): re-import the JSONL into a target
|
|
48
|
+
* schema (same table names) and compare per-table counts. The JSONL
|
|
49
|
+
* rows carry every column, so a re-import that drops or reshapes
|
|
50
|
+
* anything fails here.
|
|
51
|
+
*/
|
|
52
|
+
export async function verifyRoundTrip(options) {
|
|
53
|
+
const tables = options.tables ?? exportTables;
|
|
54
|
+
const source = new Client({ connectionString: options.sourceConnectionString });
|
|
55
|
+
const target = new Client({ connectionString: options.targetConnectionString });
|
|
56
|
+
await source.connect();
|
|
57
|
+
await target.connect();
|
|
58
|
+
try {
|
|
59
|
+
const results = [];
|
|
60
|
+
for (const table of tables) {
|
|
61
|
+
const s = await source.query(`SELECT count(*)::int AS n FROM ${table}`);
|
|
62
|
+
const t = await target.query(`SELECT count(*)::int AS n FROM ${table}`);
|
|
63
|
+
results.push({
|
|
64
|
+
name: table,
|
|
65
|
+
source: s.rows[0]?.n ?? 0,
|
|
66
|
+
target: t.rows[0]?.n ?? 0,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return { ok: results.every((r) => r.source === r.target), tables: results };
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
await source.end();
|
|
73
|
+
await target.end();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=exporters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporters.js","sourceRoot":"","sources":["../src/exporters.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,6 @@ export declare function runRollback(options: ImportCommandOptions): Promise<{
|
|
|
35
35
|
deleted: number;
|
|
36
36
|
restored: number;
|
|
37
37
|
}>;
|
|
38
|
-
/** The `finalize` command. */
|
|
39
|
-
export declare function runFinalize(options: ImportCommandOptions): Promise<ImportManifest>;
|
|
38
|
+
/** The `finalize` command — manifest-only; no Payload instance is loaded. */
|
|
39
|
+
export declare function runFinalize(options: Pick<ImportCommandOptions, 'manifestPath' | 'log'>): Promise<ImportManifest>;
|
|
40
40
|
//# sourceMappingURL=run-import.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-import.d.ts","sourceRoot":"","sources":["../../src/importer/run-import.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EAElB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;GASG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,SAAS,EAAE,OAAO,CAAC,CAAA;CAClF,CAAA;AA8DD,8EAA8E;AAC9E,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAC/E,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CAC9B,CAAC,CA0ED;AAED,4BAA4B;AAC5B,wBAAsB,SAAS,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiBpF;AAED,8BAA8B;AAC9B,wBAAsB,WAAW,CAC/B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAahD;AAED,
|
|
1
|
+
{"version":3,"file":"run-import.d.ts","sourceRoot":"","sources":["../../src/importer/run-import.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EAElB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;GASG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,SAAS,EAAE,OAAO,CAAC,CAAA;CAClF,CAAA;AA8DD,8EAA8E;AAC9E,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAC/E,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CAC9B,CAAC,CA0ED;AAED,4BAA4B;AAC5B,wBAAsB,SAAS,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiBpF;AAED,8BAA8B;AAC9B,wBAAsB,WAAW,CAC/B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAahD;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CACzB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,KAAK,CAAC,GAC1D,OAAO,CAAC,cAAc,CAAC,CAYzB"}
|
|
@@ -161,7 +161,7 @@ export async function runRollback(options) {
|
|
|
161
161
|
const result = await rollbackImport({ payload, manifest, log });
|
|
162
162
|
return result;
|
|
163
163
|
}
|
|
164
|
-
/** The `finalize` command. */
|
|
164
|
+
/** The `finalize` command — manifest-only; no Payload instance is loaded. */
|
|
165
165
|
export function runFinalize(options) {
|
|
166
166
|
const log = log_(options);
|
|
167
167
|
const manifestPath = options.manifestPath ?? defaultManifestPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-import.js","sourceRoot":"","sources":["../../src/importer/run-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,YAAY,GAEb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACpF,OAAO,EACL,kBAAkB,GAKnB,MAAM,YAAY,CAAA;AAyBnB,MAAM,IAAI,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"run-import.js","sourceRoot":"","sources":["../../src/importer/run-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,YAAY,GAEb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACpF,OAAO,EACL,kBAAkB,GAKnB,MAAM,YAAY,CAAA;AAyBnB,MAAM,IAAI,GAAG,CAAC,OAA0C,EAA+B,EAAE,CACvF,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAE3B,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IACnD,oEAAoE;IACpE,gDAAgD;IAChD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAyB,CAAA;IAClF,IAAI,MAAM,GAAY,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IAC3E,IAAI,OAAQ,MAAgD,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAClF,MAAM,GAAG,MAAM,MAAM,CAAA;IACvB,CAAC;IACD,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,MAAoD,EAAE,CAAC,CAAA;AACrF,CAAC;AAED,SAAS,OAAO,CAAC,OAA6B;IAC5C,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAClC,CAAC;IACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACrD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IACD,OAAO,EAAE,GAAG,kBAAkB,EAAE,GAAI,MAAiC,EAAE,CAAA;AACzE,CAAC;AAED,mEAAmE;AACnE,KAAK,UAAU,SAAS,CAAC,OAA6B;IAIpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACpD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE;YAC7C,OAAO;YACP,UAAU;YACV,UAAU;YACV,eAAe;YACf,UAAU;YACV,MAAM;YACN,eAAe;YACf,SAAS;YACT,aAAa;YACb,YAAY;SACb,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;QACzC,OAAO;YACL,YAAY;YACZ,IAAI,EAAE;gBACJ,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,EAAE;aACb;SACF,CAAA;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;IACpB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA6B;IAMpE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;IAEjE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;QACnC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,CAAC;YACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;YACvD,OAAO,gBAAgB,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAA;QACxD,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,gEAAgE;QAChE,MAAM,IAAI,GAAe;YACvB,GAAG,QAAQ;YACX,QAAQ,EAAE;gBACR,GAAG,QAAQ,CAAC,QAAQ;gBACpB,GAAG,UAAU,CAAC,MAAM,4DAA4D;aACjF;SACF,CAAA;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,GAAG,CAAC,qDAAqD,CAAC,CAAA;YAC1D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;QAC1C,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,mBAAmB,CAAA;IAChE,MAAM,gBAAgB,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;IAEnD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,mBAAmB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACtF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;QAC/B,OAAO;QACP,sBAAsB,EAAE,OAAO,CAAC,WAAW;QAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,gBAAgB;QAC1B,YAAY;QACZ,YAAY;QACZ,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;QACnE,KAAK;QACL,GAAG;KACJ,CAAC,CAAA;IACF,MAAM,IAAI,GAAe;QACvB,GAAG,MAAM,CAAC,IAAI;QACd,QAAQ,EAAE;YACR,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ;YACvB,GAAG,UAAU,CAAC,MAAM,4DAA4D;SACjF;KACF,CAAA;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,GAAG,CACD,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3J,CAAA;QACH,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAA;QACvB,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM;QACN,IAAI;QACJ,UAAU;KACX,CAAA;AACH,CAAC;AAED,4BAA4B;AAC5B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA6B;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,mBAAmB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACtF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,OAAO;QACP,sBAAsB,EAAE,OAAO,CAAC,WAAW;QAC3C,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;KACxB,CAAC,CAAA;IACF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACzD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,8BAA8B;AAC9B,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;IACzB,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,mBAAmB,CAAA;IAChE,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;IAC3C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,wBAAwB,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;IAC/E,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,mBAAmB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACtF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;IAC/D,OAAO,MAAM,CAAA;AACf,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CACzB,OAA2D;IAE3D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;IACzB,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,mBAAmB,CAAA;IAChE,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;IAC3C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,YAAY,qBAAqB,CAAC,CAAC,CAAA;IACvF,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC1D,GAAG,CACD,8BAA8B,YAAY,8GAA8G,CACzJ,CAAA;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACnC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payload-auth-link/migrate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "payload-auth-link migration kit: read-only doctor/preflight, the payload-auth importer, and exporters.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"clean": "rm -rf dist *.tsbuildinfo"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@payload-auth-link/core": "0.
|
|
43
|
+
"@payload-auth-link/core": "0.5.0",
|
|
44
44
|
"pg": "^8.16.3"
|
|
45
45
|
},
|
|
46
46
|
"publishConfig": {
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@better-auth/api-key": "1.7.7",
|
|
55
|
-
"@payload-auth-link/core": "0.
|
|
56
|
-
"@payload-auth-link/plugin": "0.
|
|
57
|
-
"@payload-auth-link/provider-better-auth": "0.
|
|
55
|
+
"@payload-auth-link/core": "0.5.0",
|
|
56
|
+
"@payload-auth-link/plugin": "0.9.0",
|
|
57
|
+
"@payload-auth-link/provider-better-auth": "0.6.0",
|
|
58
58
|
"@payloadcms/db-postgres": "3.90.2",
|
|
59
59
|
"@types/node": "^22",
|
|
60
60
|
"@types/pg": "^8.15.4",
|
|
@@ -62,9 +62,17 @@
|
|
|
62
62
|
"payload": "3.90.2"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
|
65
|
+
"@payload-auth-link/next": "^0.3.1",
|
|
66
|
+
"better-auth": ">=1.7.6 <1.8.0",
|
|
65
67
|
"payload": "^3.83.0 || 4.0.0-beta.0"
|
|
66
68
|
},
|
|
67
69
|
"peerDependenciesMeta": {
|
|
70
|
+
"@payload-auth-link/next": {
|
|
71
|
+
"optional": true
|
|
72
|
+
},
|
|
73
|
+
"better-auth": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
68
76
|
"payload": {
|
|
69
77
|
"optional": false
|
|
70
78
|
}
|
package/src/cli.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
/**
|
|
3
|
-
* The `@payload-auth-link/migrate` CLI (issues #49–#59)
|
|
4
|
-
* read-only `doctor` (#52)
|
|
5
|
-
*
|
|
3
|
+
* The `@payload-auth-link/migrate` CLI (issues #49–#59): the
|
|
4
|
+
* read-only `doctor` (#52), the importer lifecycle (#50), the
|
|
5
|
+
* codemods (#53), and the JSONL exporter (#58).
|
|
6
6
|
*
|
|
7
7
|
* Exit codes: 0 clean, 1 blockers, 2 warnings only, 3 usage errors.
|
|
8
8
|
* Never logs credential material — connection strings print only in
|
|
@@ -18,6 +18,9 @@ import {
|
|
|
18
18
|
runVerify,
|
|
19
19
|
type ImportCommandOptions,
|
|
20
20
|
} from './importer/run-import.js'
|
|
21
|
+
import { applyCodemods } from './codemods.js'
|
|
22
|
+
import { readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'
|
|
23
|
+
import { extname, join, relative } from 'node:path'
|
|
21
24
|
|
|
22
25
|
type ParsedArgs = {
|
|
23
26
|
readonly command: string | null
|
|
@@ -58,6 +61,9 @@ function usage(): string {
|
|
|
58
61
|
|
|
59
62
|
Commands:
|
|
60
63
|
doctor --config ./src/payload.config.ts [--src ./src] [--json] [--database-url URL]
|
|
64
|
+
export --database-url URL [--out file.jsonl]
|
|
65
|
+
(lossless JSONL of every auth table — the off-ramp, #58)
|
|
66
|
+
codemod --src ./src [--write]
|
|
61
67
|
from-payload-auth --config ./src/payload.config.ts [--apply] [--sessions=carry|drop]
|
|
62
68
|
[--manifest ./payload-auth-link-migration.json] [--database-url URL] [--json]
|
|
63
69
|
verify --config ./src/payload.config.ts [--database-url URL] [--json]
|
|
@@ -77,6 +83,10 @@ Commands:
|
|
|
77
83
|
rollback undoes exactly the manifest; finalize marks it read-only
|
|
78
84
|
so the legacy tables may be dropped later, in their own migration.
|
|
79
85
|
|
|
86
|
+
codemod rewrites the three named payload-auth call-site patterns
|
|
87
|
+
(getPayloadAuth, payload.betterAuth.api.getSession, toNextJsHandler)
|
|
88
|
+
and reports what needs a human. Dry run by default; --write rewrites.
|
|
89
|
+
|
|
80
90
|
Exit codes: 0 clean, 1 blockers/mismatch, 2 warnings only, 3 usage errors.
|
|
81
91
|
`
|
|
82
92
|
}
|
|
@@ -185,21 +195,119 @@ async function main(
|
|
|
185
195
|
out.write(usage())
|
|
186
196
|
return command === null && argv.length === 0 ? 3 : 0
|
|
187
197
|
}
|
|
188
|
-
const importCommands = [
|
|
198
|
+
const importCommands = [
|
|
199
|
+
'from-payload-auth',
|
|
200
|
+
'verify',
|
|
201
|
+
'rollback',
|
|
202
|
+
'finalize',
|
|
203
|
+
'codemod',
|
|
204
|
+
'export',
|
|
205
|
+
]
|
|
189
206
|
if (command !== 'doctor' && !importCommands.includes(command)) {
|
|
190
207
|
err.write(`unknown command '${command}'\n\n${usage()}`)
|
|
191
208
|
return 3
|
|
192
209
|
}
|
|
193
210
|
if (importCommands.includes(command)) {
|
|
211
|
+
const databaseUrl =
|
|
212
|
+
typeof flags.get('database-url') === 'string'
|
|
213
|
+
? (flags.get('database-url') as string)
|
|
214
|
+
: (process.env.DATABASE_URL ?? '')
|
|
215
|
+
// export --database-url URL [--out file.jsonl]
|
|
216
|
+
// (no --config: it reads the source database directly, #58)
|
|
217
|
+
if (command === 'export') {
|
|
218
|
+
if (databaseUrl === '') {
|
|
219
|
+
err.write('export requires --database-url or DATABASE_URL\n')
|
|
220
|
+
return 3
|
|
221
|
+
}
|
|
222
|
+
const { exportToJsonl } = await import('./exporters.js')
|
|
223
|
+
const result = await exportToJsonl({
|
|
224
|
+
connectionString: databaseUrl,
|
|
225
|
+
format: 'jsonl',
|
|
226
|
+
log: (message) => out.write(`${message}\n`),
|
|
227
|
+
})
|
|
228
|
+
if (typeof flags.get('out') === 'string') {
|
|
229
|
+
writeFileSync(flags.get('out') as string, result.jsonl)
|
|
230
|
+
out.write(`wrote ${result.totalRows} row(s) to ${String(flags.get('out'))}\n`)
|
|
231
|
+
} else {
|
|
232
|
+
out.write(result.jsonl)
|
|
233
|
+
}
|
|
234
|
+
return 0
|
|
235
|
+
}
|
|
236
|
+
// codemod --src ./src [--write]
|
|
237
|
+
// (no --config: a pure source rewrite, #53)
|
|
238
|
+
if (command === 'codemod') {
|
|
239
|
+
const srcFlag = flags.get('src')
|
|
240
|
+
if (typeof srcFlag !== 'string' || srcFlag === '') {
|
|
241
|
+
err.write('codemod requires --src <directory>\n')
|
|
242
|
+
return 3
|
|
243
|
+
}
|
|
244
|
+
const srcDir = new URL(srcFlag, `file://${process.cwd()}/`).pathname
|
|
245
|
+
const write = flags.get('write') === true
|
|
246
|
+
const changed: string[] = []
|
|
247
|
+
const manual: string[] = []
|
|
248
|
+
const walk = (dir: string): void => {
|
|
249
|
+
let entries: string[]
|
|
250
|
+
try {
|
|
251
|
+
entries = readdirSync(dir)
|
|
252
|
+
} catch {
|
|
253
|
+
return
|
|
254
|
+
}
|
|
255
|
+
for (const entry of entries) {
|
|
256
|
+
if (['node_modules', 'dist', '.next'].includes(entry) || entry.startsWith('.')) {
|
|
257
|
+
continue
|
|
258
|
+
}
|
|
259
|
+
const full = join(dir, entry)
|
|
260
|
+
let stats
|
|
261
|
+
try {
|
|
262
|
+
stats = statSync(full)
|
|
263
|
+
} catch {
|
|
264
|
+
continue
|
|
265
|
+
}
|
|
266
|
+
if (stats.isDirectory()) {
|
|
267
|
+
walk(full)
|
|
268
|
+
} else if (['.ts', '.tsx', '.js', '.jsx', '.mts', '.mjs'].includes(extname(entry))) {
|
|
269
|
+
const before = readFileSync(full, 'utf8')
|
|
270
|
+
const result = applyCodemods(relative(srcDir, full), before)
|
|
271
|
+
if (result.changed) {
|
|
272
|
+
if (write) {
|
|
273
|
+
writeFileSync(full, result.after)
|
|
274
|
+
}
|
|
275
|
+
changed.push(relative(srcDir, full))
|
|
276
|
+
}
|
|
277
|
+
for (const site of result.manual) {
|
|
278
|
+
manual.push(`${relative(srcDir, full)}: ${site}`)
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
walk(srcDir)
|
|
284
|
+
out.write(
|
|
285
|
+
`${changed.length} file(s) ${write ? 'rewritten' : 'would be rewritten (dry run; pass --write)'}:\n` +
|
|
286
|
+
changed.map((f) => ` ${f}`).join('\n') +
|
|
287
|
+
(manual.length > 0
|
|
288
|
+
? `\nmanual follow-up:\n${manual.map((m) => ` ${m}`).join('\n')}`
|
|
289
|
+
: '') +
|
|
290
|
+
'\n'
|
|
291
|
+
)
|
|
292
|
+
return 0
|
|
293
|
+
}
|
|
294
|
+
// finalize [--manifest ...]
|
|
295
|
+
// (no --config: manifest-only; no Payload instance is loaded)
|
|
296
|
+
if (command === 'finalize') {
|
|
297
|
+
await runFinalize(
|
|
298
|
+
typeof flags.get('manifest') === 'string'
|
|
299
|
+
? { manifestPath: flags.get('manifest') as string }
|
|
300
|
+
: {}
|
|
301
|
+
)
|
|
302
|
+
return 0
|
|
303
|
+
}
|
|
304
|
+
// The remaining commands (from-payload-auth, verify, rollback) all
|
|
305
|
+
// load a Payload instance, so they need the config.
|
|
194
306
|
const configFlag = flags.get('config')
|
|
195
307
|
if (typeof configFlag !== 'string' || configFlag === '') {
|
|
196
308
|
err.write(`${command} requires --config <path to payload.config.ts>\n`)
|
|
197
309
|
return 3
|
|
198
310
|
}
|
|
199
|
-
const databaseUrl =
|
|
200
|
-
typeof flags.get('database-url') === 'string'
|
|
201
|
-
? (flags.get('database-url') as string)
|
|
202
|
-
: (process.env.DATABASE_URL ?? '')
|
|
203
311
|
if ((command === 'from-payload-auth' || command === 'verify') && databaseUrl === '') {
|
|
204
312
|
err.write(`${command} requires --database-url or DATABASE_URL\n`)
|
|
205
313
|
return 3
|
|
@@ -237,8 +345,6 @@ async function main(
|
|
|
237
345
|
await runRollback(importOptions)
|
|
238
346
|
return 0
|
|
239
347
|
}
|
|
240
|
-
await runFinalize(importOptions)
|
|
241
|
-
return 0
|
|
242
348
|
}
|
|
243
349
|
const configPath = flags.get('config')
|
|
244
350
|
if (typeof configPath !== 'string' || configPath === '') {
|
package/src/codemods.ts
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codemods (issue #53): rule-based rewrites for the call sites a
|
|
3
|
+
* payload-auth app must migrate. Deliberately textual and scoped —
|
|
4
|
+
* each rule matches an exact, idiomatic payload-auth pattern and
|
|
5
|
+
* leaves anything it cannot fully rewrite untouched (reported in the
|
|
6
|
+
* result), because a half-rewritten call site is worse than an
|
|
7
|
+
* explicit one.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export type CodemodRule = {
|
|
11
|
+
readonly id: string
|
|
12
|
+
readonly description: string
|
|
13
|
+
/** Apply to one file's content; returns the new content (same string when untouched). */
|
|
14
|
+
readonly apply: (content: string) => string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type CodemodFileResult = {
|
|
18
|
+
readonly file: string
|
|
19
|
+
readonly changed: boolean
|
|
20
|
+
/** Rules that fired on this file. */
|
|
21
|
+
readonly applied: readonly string[]
|
|
22
|
+
/** Matches the rules could not fully rewrite (reported, never touched). */
|
|
23
|
+
readonly manual: readonly string[]
|
|
24
|
+
/** The rewritten content — equal to the input when nothing changed. */
|
|
25
|
+
readonly after: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const codemodRules: readonly CodemodRule[] = [
|
|
29
|
+
{
|
|
30
|
+
id: 'get-payload-auth',
|
|
31
|
+
description: 'getPayloadAuth() -> getPayload({ config })',
|
|
32
|
+
apply: (content) =>
|
|
33
|
+
content
|
|
34
|
+
.replace(
|
|
35
|
+
/import\s*\{\s*getPayloadAuth\s*(?:,[^}]*)?\}\s*from\s*['"]payload-auth['"];?/g,
|
|
36
|
+
"import { getPayload } from 'payload'"
|
|
37
|
+
)
|
|
38
|
+
.replace(/\bgetPayloadAuth\(\s*\)/g, 'await getPayload({ config })'),
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'better-auth-get-session',
|
|
42
|
+
description:
|
|
43
|
+
'payload.betterAuth.api.getSession({ headers }) -> authLinkServer(payload).getSession(headers)',
|
|
44
|
+
apply: (content) =>
|
|
45
|
+
content.replace(
|
|
46
|
+
/payload\.betterAuth\.api\.getSession\(\s*\{\s*headers\s*\}\s*\)/g,
|
|
47
|
+
'(await authLinkServer(payload)).getSession(headers)'
|
|
48
|
+
),
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'to-next-js-handler',
|
|
52
|
+
description:
|
|
53
|
+
'toNextJsHandler(payload.betterAuth) -> createRouteHandlers from @payload-auth-link/next',
|
|
54
|
+
apply: (content) =>
|
|
55
|
+
content
|
|
56
|
+
.replace(
|
|
57
|
+
/import\s*\{\s*toNextJsHandler\s*\}\s*from\s*['"]better-auth\/next-js['"];?/g,
|
|
58
|
+
"import { createRouteHandlers } from '@payload-auth-link/next'"
|
|
59
|
+
)
|
|
60
|
+
.replace(
|
|
61
|
+
/export\s*\{\s*(\w+)\s+as\s+GET\s*,\s*(\w+)\s+as\s+POST\s*\}\s*=\s*toNextJsHandler\(\s*payload\.betterAuth\s*\)/g,
|
|
62
|
+
'export const GET = createRouteHandlers.GET\nexport const POST = createRouteHandlers.POST'
|
|
63
|
+
),
|
|
64
|
+
},
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Report call sites the rules cannot fully rewrite — each one needs a
|
|
69
|
+
* human decision (which session API call, which route handler shape).
|
|
70
|
+
*/
|
|
71
|
+
export function findManualSites(content: string): readonly string[] {
|
|
72
|
+
const manual: string[] = []
|
|
73
|
+
if (/\bpayload\.betterAuth\.api\.(?!getSession\b)\w+/.test(content)) {
|
|
74
|
+
manual.push('payload.betterAuth.api.<method> — see the authLinkServer session API (#54)')
|
|
75
|
+
}
|
|
76
|
+
if (/\$context\.(?:internalAdapter|adapter)\b/.test(content)) {
|
|
77
|
+
manual.push('$context internals — see the supported server session API (#54)')
|
|
78
|
+
}
|
|
79
|
+
return manual
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Apply every rule to one file; reports what fired and what needs a human. */
|
|
83
|
+
export function applyCodemods(file: string, content: string): CodemodFileResult {
|
|
84
|
+
let current = content
|
|
85
|
+
const applied: string[] = []
|
|
86
|
+
for (const rule of codemodRules) {
|
|
87
|
+
const next = rule.apply(current)
|
|
88
|
+
if (next !== current) {
|
|
89
|
+
applied.push(rule.id)
|
|
90
|
+
current = next
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const manual = findManualSites(current)
|
|
94
|
+
return { file, changed: current !== content, applied, manual, after: current }
|
|
95
|
+
}
|
package/src/exporters.ts
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Client } from 'pg'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Off-ramp exporters (issue #58): every payload-auth-link collection's
|
|
5
|
+
* rows as lossless JSONL — each line is one row with every column
|
|
6
|
+
* (including plugin-injected fields: identities, linkable,
|
|
7
|
+
* linkableEmail, suspension, roles child rows), typed as stored.
|
|
8
|
+
* Re-importing the JSONL reproduces the exact rows, so leaving is as
|
|
9
|
+
* testable as arriving.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export type ExportFormat = 'jsonl'
|
|
13
|
+
|
|
14
|
+
export type ExportOptions = {
|
|
15
|
+
readonly connectionString: string
|
|
16
|
+
readonly format: ExportFormat
|
|
17
|
+
/** Tables to export; defaults to the full auth-table set. */
|
|
18
|
+
readonly tables?: readonly string[] | undefined
|
|
19
|
+
readonly log?: (message: string) => void
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** The auth-table set, in dependency order for re-import. */
|
|
23
|
+
export const exportTables: readonly string[] = [
|
|
24
|
+
'users',
|
|
25
|
+
'users_role',
|
|
26
|
+
'users_identities',
|
|
27
|
+
'accounts',
|
|
28
|
+
'sessions',
|
|
29
|
+
'verifications',
|
|
30
|
+
'api_keys',
|
|
31
|
+
'jwks',
|
|
32
|
+
'organizations',
|
|
33
|
+
'members',
|
|
34
|
+
'invitations',
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
export type ExportResult = {
|
|
38
|
+
readonly tables: readonly { readonly name: string; readonly rows: number }[]
|
|
39
|
+
/** The JSONL document: one JSON object per line, `{"table": …, "row": …}`. */
|
|
40
|
+
readonly jsonl: string
|
|
41
|
+
readonly totalRows: number
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Export the auth tables to lossless JSONL (issue #58). */
|
|
45
|
+
export async function exportToJsonl(options: ExportOptions): Promise<ExportResult> {
|
|
46
|
+
const tables = options.tables ?? exportTables
|
|
47
|
+
const client = new Client({ connectionString: options.connectionString })
|
|
48
|
+
await client.connect()
|
|
49
|
+
try {
|
|
50
|
+
const lines: string[] = []
|
|
51
|
+
const exported: { name: string; rows: number }[] = []
|
|
52
|
+
let totalRows = 0
|
|
53
|
+
for (const table of tables) {
|
|
54
|
+
const exists = await client.query(
|
|
55
|
+
`SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = $1`,
|
|
56
|
+
[table]
|
|
57
|
+
)
|
|
58
|
+
if (exists.rows.length === 0) {
|
|
59
|
+
continue
|
|
60
|
+
}
|
|
61
|
+
// Export EVERY column raw (JSON types preserved by ::jsonb cast
|
|
62
|
+
// per row via row_to_json) — lossless by construction.
|
|
63
|
+
const result = await client.query(
|
|
64
|
+
`SELECT row_to_json(t)::jsonb AS row FROM ${table} t ORDER BY t.id`
|
|
65
|
+
)
|
|
66
|
+
exported.push({ name: table, rows: result.rows.length })
|
|
67
|
+
totalRows += result.rows.length
|
|
68
|
+
for (const row of result.rows) {
|
|
69
|
+
lines.push(JSON.stringify({ table, row: (row as { row: unknown }).row }))
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
options.log?.(`exported ${totalRows} row(s) across ${exported.length} table(s)`)
|
|
73
|
+
return { tables: exported, jsonl: `${lines.join('\n')}\n`, totalRows }
|
|
74
|
+
} finally {
|
|
75
|
+
await client.end()
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** A round-trip verification row: source vs re-import counts. */
|
|
80
|
+
export type RoundTripResult = {
|
|
81
|
+
readonly ok: boolean
|
|
82
|
+
readonly tables: readonly {
|
|
83
|
+
readonly name: string
|
|
84
|
+
readonly source: number
|
|
85
|
+
readonly target: number
|
|
86
|
+
}[]
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Lossless round-trip check (#58): re-import the JSONL into a target
|
|
91
|
+
* schema (same table names) and compare per-table counts. The JSONL
|
|
92
|
+
* rows carry every column, so a re-import that drops or reshapes
|
|
93
|
+
* anything fails here.
|
|
94
|
+
*/
|
|
95
|
+
export async function verifyRoundTrip(options: {
|
|
96
|
+
readonly sourceConnectionString: string
|
|
97
|
+
readonly targetConnectionString: string
|
|
98
|
+
readonly tables?: readonly string[] | undefined
|
|
99
|
+
}): Promise<RoundTripResult> {
|
|
100
|
+
const tables = options.tables ?? exportTables
|
|
101
|
+
const source = new Client({ connectionString: options.sourceConnectionString })
|
|
102
|
+
const target = new Client({ connectionString: options.targetConnectionString })
|
|
103
|
+
await source.connect()
|
|
104
|
+
await target.connect()
|
|
105
|
+
try {
|
|
106
|
+
const results: { name: string; source: number; target: number }[] = []
|
|
107
|
+
for (const table of tables) {
|
|
108
|
+
const s = await source.query(`SELECT count(*)::int AS n FROM ${table}`)
|
|
109
|
+
const t = await target.query(`SELECT count(*)::int AS n FROM ${table}`)
|
|
110
|
+
results.push({
|
|
111
|
+
name: table,
|
|
112
|
+
source: (s.rows[0] as { n?: number } | undefined)?.n ?? 0,
|
|
113
|
+
target: (t.rows[0] as { n?: number } | undefined)?.n ?? 0,
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
return { ok: results.every((r) => r.source === r.target), tables: results }
|
|
117
|
+
} finally {
|
|
118
|
+
await source.end()
|
|
119
|
+
await target.end()
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -41,7 +41,7 @@ export type ImportCommandOptions = {
|
|
|
41
41
|
readonly loadPayload?: (configPath: string) => Promise<import('payload').Payload>
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
const log_ = (options: ImportCommandOptions): ((message: string) => void) =>
|
|
44
|
+
const log_ = (options: Pick<ImportCommandOptions, 'log'>): ((message: string) => void) =>
|
|
45
45
|
options.log ?? (() => {})
|
|
46
46
|
|
|
47
47
|
async function loadPayloadInstance(configPath: string): Promise<import('payload').Payload> {
|
|
@@ -221,8 +221,10 @@ export async function runRollback(
|
|
|
221
221
|
return result
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
/** The `finalize` command. */
|
|
225
|
-
export function runFinalize(
|
|
224
|
+
/** The `finalize` command — manifest-only; no Payload instance is loaded. */
|
|
225
|
+
export function runFinalize(
|
|
226
|
+
options: Pick<ImportCommandOptions, 'manifestPath' | 'log'>
|
|
227
|
+
): Promise<ImportManifest> {
|
|
226
228
|
const log = log_(options)
|
|
227
229
|
const manifestPath = options.manifestPath ?? defaultManifestPath
|
|
228
230
|
const manifest = readManifest(manifestPath)
|