0ac4beaaa8
- Add requireAuth() to admin-permissions.ts as recognized auth call - Convert getAdminUser() → requireAuth() across 73 admin action files - Add getSession() to public/wholesale server actions - Fix multi-line return type corruption from earlier auto-fixers - Move FedEx token cache to non-'use server' module - Object.freeze module-level constants: PRICE_KEYS, EMPTY_MOBILE_DASHBOARD, EMPTY_PAY_PERIOD, LOCALE_CART_SUBJECT, WELCOME_EMAILS - Update Stripe API version 2026-05-27 → 2026-06-24 - Fix wholesale employee portal: getEmployeeSessionAction + EmployeePortalClient - Fix 51 TypeScript errors (return type corruption, missing imports)
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
/**
|
|
* Create an admin user in Neon Auth via direct HTTP call.
|
|
* Run: npx tsx scripts/create-admin-user.ts [email] [password] [name]
|
|
*
|
|
* Makes a direct HTTP request to the Neon Auth API so we don't need
|
|
* a Next.js request context, then updates email_verified in the DB.
|
|
*/
|
|
import { config } from "dotenv";
|
|
config({ path: ".env.local" });
|
|
import pg from "pg";
|
|
|
|
const { Pool } = pg;
|
|
|
|
async function main() {
|
|
const email = process.argv[2] ?? "admin@example.com";
|
|
const password = process.argv[3] ?? "Admin1234!";
|
|
const name = process.argv[4] ?? "Admin";
|
|
|
|
const baseUrl = process.env.NEON_AUTH_BASE_URL!;
|
|
|
|
console.log(`Creating user: ${email}`);
|
|
|
|
const res = await fetch(`${baseUrl}/sign-up/email`, {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"Origin": "http://localhost:4000",
|
|
"x-neon-auth-proxy": "node",
|
|
},
|
|
body: JSON.stringify({ email, password, name, callbackURL: "/admin" }),
|
|
});
|
|
|
|
const data = await res.json().catch(() => ({}));
|
|
console.log(`Sign-up status: ${res.status}`);
|
|
|
|
if (!res.ok) {
|
|
console.error("Failed to create user:", JSON.stringify(data));
|
|
process.exit(1);
|
|
}
|
|
|
|
const userId = data.user?.id;
|
|
console.log("User created:", data.user?.email, "| ID:", userId);
|
|
|
|
// Mark email verified in DB so they can log in immediately
|
|
if (userId) {
|
|
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
try {
|
|
await pool.query(
|
|
"UPDATE neon_auth.user SET email_verified = true WHERE id = $1",
|
|
[userId]
|
|
);
|
|
console.log("Email verified in DB.");
|
|
} finally {
|
|
await pool.end();
|
|
}
|
|
}
|
|
|
|
console.log(`\nLog in at http://localhost:4000/login with ${email} / ${password}`);
|
|
}
|
|
|
|
main();
|