@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 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":";AA6KA,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,CAwFjB;AAiBD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,CAAA"}
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). Today: the
4
- * read-only `doctor` (#52). The importer and exporters ride the same
5
- * entrypoint as they land (#50, #58).
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 = ['from-payload-auth', 'verify', 'rollback', 'finalize'];
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"}
@@ -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,8BAA8B;AAC9B,wBAAgB,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAYlF"}
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":"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"}
1
+ {"version":3,"file":"run-import.js","sourceRoot":"","sources":["../../src/importer/run-import.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payload-auth-link/migrate",
3
- "version": "0.2.1",
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.4.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.4.0",
56
- "@payload-auth-link/plugin": "0.8.0",
57
- "@payload-auth-link/provider-better-auth": "0.5.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). Today: the
4
- * read-only `doctor` (#52). The importer and exporters ride the same
5
- * entrypoint as they land (#50, #58).
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 = ['from-payload-auth', 'verify', 'rollback', 'finalize']
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 === '') {
@@ -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
+ }
@@ -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(options: ImportCommandOptions): Promise<ImportManifest> {
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)