@@ -1248,21 +1248,33 @@ export const ProtectedRoute = ({ children }${language === 'ts' ? ': { children:
12481248
12491249// for frameworks needing express server
12501250export const actions = ( language ) => {
1251- return `import UserModel from "../models/user.model.js";
1252- import connectDB from "../lib/dbconnect.js";
1251+ const isTS = language === "ts" ;
1252+
1253+ return `
1254+ import ${ isTS ? "{ connectDB }" : "connectDB" } from "../lib/dbconnect${ isTS ? "" : ".js" } ";
1255+ import UserModel from "../models/user.model${ isTS ? "" : ".js" } ";
1256+ ${ isTS ? `import type { UserJSON, DeletedObjectJSON } from "@clerk/backend";` : "" }
12531257
12541258// Create user
1255- export async function createUser(payload) {
1259+ export async function createUser(payload${ isTS ? ": UserJSON" : "" } ) {
12561260 try {
12571261 await connectDB();
12581262
12591263 const userData = {
12601264 clerkId: payload.id,
1261- email: (payload.email_addresses && payload.email_addresses[0]?.email_address) || "",
1262- username: payload.username || "",
1263- photo: payload.profile_image_url || "",
1264- firstName: payload.first_name || "",
1265- lastName: payload.last_name || "",
1265+ email: ${
1266+ isTS
1267+ ? "payload.email_addresses?.[0]?.email_address ?? \"\""
1268+ : "(payload.email_addresses && payload.email_addresses[0]?.email_address) || \"\""
1269+ } ,
1270+ username: ${ isTS ? "payload.username ?? \"\"" : "payload.username || \"\"" } ,
1271+ photo: ${
1272+ isTS
1273+ ? "payload.image_url ?? \"\""
1274+ : "payload.profile_image_url || \"\""
1275+ } ,
1276+ firstName: ${ isTS ? "payload.first_name ?? \"\"" : "payload.first_name || \"\"" } ,
1277+ lastName: ${ isTS ? "payload.last_name ?? \"\"" : "payload.last_name || \"\"" } ,
12661278 };
12671279
12681280 const newUser = await UserModel.create(userData);
@@ -1274,18 +1286,26 @@ export async function createUser(payload) {
12741286}
12751287
12761288// Update user
1277- export async function updateUser(payload) {
1289+ export async function updateUser(payload${ isTS ? ": UserJSON" : "" } ) {
12781290 try {
12791291 await connectDB();
12801292
12811293 const updatedUser = await UserModel.findOneAndUpdate(
12821294 { clerkId: payload.id },
12831295 {
1284- email: (payload.email_addresses && payload.email_addresses[0]?.email_address) || "",
1285- username: payload.username || "",
1286- photo: payload.profile_image_url || "",
1287- firstName: payload.first_name || "",
1288- lastName: payload.last_name || "",
1296+ email: ${
1297+ isTS
1298+ ? "payload.email_addresses?.[0]?.email_address ?? \"\""
1299+ : "(payload.email_addresses && payload.email_addresses[0]?.email_address) || \"\""
1300+ } ,
1301+ username: ${ isTS ? "payload.username ?? \"\"" : "payload.username || \"\"" } ,
1302+ photo: ${
1303+ isTS
1304+ ? "payload.image_url ?? \"\""
1305+ : "payload.profile_image_url || \"\""
1306+ } ,
1307+ firstName: ${ isTS ? "payload.first_name ?? \"\"" : "payload.first_name || \"\"" } ,
1308+ lastName: ${ isTS ? "payload.last_name ?? \"\"" : "payload.last_name || \"\"" } ,
12891309 },
12901310 { new: true }
12911311 );
@@ -1298,7 +1318,7 @@ export async function updateUser(payload) {
12981318}
12991319
13001320// Delete user
1301- export async function deleteUser(payload) {
1321+ export async function deleteUser(payload${ isTS ? ": DeletedObjectJSON" : "" } ) {
13021322 try {
13031323 await connectDB();
13041324 await UserModel.findOneAndDelete({ clerkId: payload.id });
@@ -1307,42 +1327,55 @@ export async function deleteUser(payload) {
13071327 throw error;
13081328 }
13091329}
1310- `
1311- }
1330+ ` ;
1331+ } ;
13121332
13131333// for frameworks needing express server
13141334export const webhooksRoute = ( language ) => {
1315- return `import express from "express";
1335+ const isTS = language === "ts" ;
1336+
1337+ return `
1338+ import express${ isTS ? ", { Request, Response }" : "" } from "express";
13161339import { verifyWebhook } from "@clerk/express/webhooks";
1317- import { createUser, updateUser, deleteUser } from "../actions/user.actions.js";
1340+ import { createUser, updateUser, deleteUser } from "../actions/user.actions${ isTS ? "" : ".js" } ";
1341+ ${ isTS ? `import type {
1342+ UserJSON,
1343+ DeletedObjectJSON,
1344+ WebhookEvent,
1345+ } from "@clerk/backend";` : "" }
13181346
13191347const router = express.Router();
13201348
13211349router.post(
13221350 "/clerk",
13231351 express.raw({ type: "application/json" }),
1324- async (req, res) => {
1352+ async (req${ isTS ? ": Request" : "" } , res${ isTS ? ": Response" : "" } ) => {
13251353 try {
1326- const evt = await verifyWebhook(req);
1354+ ${ isTS ? " const evt: WebhookEvent = await verifyWebhook(req);" : "const evt = await verifyWebhook(req);" }
13271355
1328- const eventType = evt.type;
1329- const data = evt.data;
1356+ const { type: eventType, data } = evt;
13301357
13311358 switch (eventType) {
1332- case "user.created":
1333- await createUser(data);
1334- console.log("User created (webhook):", data.id);
1359+ case "user.created": {
1360+ ${ isTS ? "const user = data as UserJSON;" : "const user = data;" }
1361+ await createUser(user);
1362+ console.log("User created (webhook):", user.id);
13351363 break;
1364+ }
13361365
1337- case "user.updated":
1338- await updateUser(data);
1339- console.log("User updated (webhook):", data.id);
1366+ case "user.updated": {
1367+ ${ isTS ? "const user = data as UserJSON;" : "const user = data;" }
1368+ await updateUser(user);
1369+ console.log("User updated (webhook):", user.id);
13401370 break;
1371+ }
13411372
1342- case "user.deleted":
1343- await deleteUser(data);
1344- console.log("User deleted (webhook):", data.id);
1373+ case "user.deleted": {
1374+ ${ isTS ? "const deleted = data as DeletedObjectJSON;" : "const deleted = data;" }
1375+ await deleteUser(deleted);
1376+ console.log("User deleted (webhook):", deleted.id);
13451377 break;
1378+ }
13461379
13471380 default:
13481381 console.log(\`Unhandled Clerk event type: \${eventType}\`);
@@ -1357,8 +1390,8 @@ router.post(
13571390);
13581391
13591392export default router;
1360- `
1361- }
1393+ ` ;
1394+ } ;
13621395
13631396export const SignInReactPage = ( useTailwind ) => {
13641397 if ( useTailwind ) {
@@ -1444,7 +1477,7 @@ export default SignUpPage;
14441477
14451478
14461479export const clerkUserModel = ( language ) => {
1447- return `import mongoose, { Schema } ${ language === 'ts' ? ', { Document, Model }' : '' } from "mongoose";
1480+ return `import mongoose${ language === 'ts' ? ', { Document, Schema, Model }' : ', { Schema } ' } from "mongoose";
14481481
14491482${ language === 'ts' ? `export interface IUser extends Document {
14501483 clerkId: string;
0 commit comments