Changeset 66bf4fd
- Timestamp:
- 12/16/25 01:31:19 (7 months ago)
- Branches:
- main
- Children:
- c30935a
- Parents:
- fdd776b
- Files:
-
- 5 edited
-
drizzle.config.ts (modified) (1 diff)
-
package.json (modified) (1 diff)
-
server/authjs-handler.ts (modified) (3 diffs)
-
server/db-middleware.ts (modified) (3 diffs)
-
server/telefunc-handler.ts (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
drizzle.config.ts
rfdd776b r66bf4fd 7 7 8 8 export default defineConfig({ 9 dialect: " sqlite",9 dialect: "postgresql", 10 10 schema: "./database/drizzle/schema/*", 11 11 out: "./database/migrations", -
package.json
rfdd776b r66bf4fd 12 12 }, 13 13 "dependencies": { 14 "vike": "^0.4.247",15 14 "@auth/core": "^0.41.1", 15 "@auth/drizzle-adapter": "^1.11.1", 16 "@photonjs/hono": "^0.1.10", 16 17 "@universal-middleware/core": "^0.4.13", 17 " drizzle-kit": "^0.31.8",18 " drizzle-orm": "^0.45.0",18 "bcrypt": "^6.0.0", 19 "better-sqlite3": "^12.5.0", 19 20 "dotenv": "^17.2.3", 20 "better-sqlite3": "^12.5.0", 21 "@photonjs/hono": "^0.1.10", 21 "drizzle-orm": "^0.45.1", 22 22 "hono": "^4.10.7", 23 " vike-photon": "^0.1.22",23 "pg": "^8.16.3", 24 24 "react": "^19.2.1", 25 25 "react-dom": "^19.2.1", 26 "vike-react": "^0.6.13", 27 "telefunc": "^0.2.17" 26 "telefunc": "^0.2.17", 27 "vike": "^0.4.247", 28 "vike-photon": "^0.1.22", 29 "vike-react": "^0.6.13" 28 30 }, 29 31 "devDependencies": { 30 "typescript": "^5.9.3",31 "vite": "^7.2.7",32 32 "@biomejs/biome": "2.3.8", 33 "@types/bcrypt": "^6.0.0", 33 34 "@types/better-sqlite3": "^7.6.13", 34 35 "@types/node": "^20.19.25", 36 "@types/pg": "^8.16.0", 37 "@types/react": "^19.2.7", 38 "@types/react-dom": "^19.2.3", 35 39 "@vitejs/plugin-react": "^5.1.2", 36 "@types/react": "^19.2.7", 37 "@types/react-dom": "^19.2.3" 40 "drizzle-kit": "^0.31.8", 41 "typescript": "^5.9.3", 42 "vite": "^7.2.7" 38 43 }, 39 44 "type": "module" -
server/authjs-handler.ts
rfdd776b r66bf4fd 3 3 import type { Session } from "@auth/core/types"; 4 4 import { enhance, type UniversalHandler, type UniversalMiddleware } from "@universal-middleware/core"; 5 import {eq} from "drizzle-orm"; 6 import { db } from "../database/drizzle/db"; 7 import { usersTable } from "../database/drizzle/schema"; 8 import bcrypt from "bcrypt"; 9 // import { users, accounts, sessions, verificationTokens } from "../database/drizzle/schema/auth"; 5 10 6 11 const authjsConfig = { 7 12 basePath: "/api/auth", 8 13 trustHost: true, 9 // TODO: Replace secret {@see https://authjs.dev/reference/core#secret} 10 secret: "MY_SECRET", 14 secret: process.env.AUTH_SECRET, 15 session: { 16 strategy: "jwt", 17 }, 11 18 providers: [ 12 // TODO: Choose and implement providers13 19 CredentialsProvider({ 14 20 name: "Credentials", 15 21 credentials: { 16 username: { label: "Username", type: "text" , placeholder: "jsmith"},22 username: { label: "Username", type: "text" }, 17 23 password: { label: "Password", type: "password" }, 18 24 }, 19 async authorize( ) {20 // Add logic here to look up the user from the credentials supplied21 const user = { id: "1", name: "J Smith", email: "jsmith@example.com" };25 async authorize(credentials) { 26 const username = typeof credentials?.username === "string" ? credentials.username : null; 27 const password = typeof credentials?.password === "string" ? credentials.password : null; 22 28 23 // Any object returned will be saved in `user` property of the JWT 24 // If you return null then an error will be displayed advising the user to check their details. 25 // You can also Reject this callback with an Error thus the user will be sent to the error page with the error message as a query parameter 26 return user ?? null; 29 if(!username || !password) { return null; } 30 31 const user = await db.query.usersTable.findFirst({ 32 where: eq(usersTable.username, username), 33 }); 34 35 if(!user) { return null; } 36 37 const isPasswordValid = await bcrypt.compare(password, user.passwordHash); 38 39 if(!isPasswordValid) { return null; } 40 41 return { 42 id: String(user.id), 43 name: user.username, 44 email: user.email, 45 } 27 46 }, 28 47 }), 29 48 ], 49 50 callbacks: { 51 async jwt({ token, user }) { 52 if (user) token.sub = user.id; 53 return token; 54 }, 55 async session({ session, token }) { 56 if (session.user && token.sub) session.user.id = token.sub; 57 return session; 58 }, 59 }, 30 60 } satisfies Omit<AuthConfig, "raw">; 31 61 … … 69 99 }, 70 100 { 71 name: " my-app:authjs-middleware",101 name: "pc-forge:authjs-middleware", 72 102 immutable: false, 73 103 }, … … 83 113 }, 84 114 { 85 name: " my-app:authjs-handler",115 name: "pc-forge:authjs-handler", 86 116 path: "/api/auth/**", 87 117 method: ["GET", "POST"], -
server/db-middleware.ts
rfdd776b r66bf4fd 1 import { dbSqlite } from "../database/drizzle/db"; 1 import { db } from "../database/drizzle/db"; 2 import type { Database } from "../database/drizzle/db"; 2 3 import { enhance, type UniversalMiddleware } from "@universal-middleware/core"; 3 4 … … 5 6 namespace Universal { 6 7 interface Context { 7 db: ReturnType<typeof dbSqlite>;8 db: Database; 8 9 } 9 10 } … … 12 13 // Add `db` to the Context 13 14 export const dbMiddleware: UniversalMiddleware = enhance( 14 async (_request, context, _runtime) => { 15 const db = dbSqlite(); 16 17 return { 18 ...context, 19 db: db, 20 }; 21 }, 15 async (_request, context) => ({ 16 ...context, 17 db, 18 }), 22 19 { 23 name: " my-app:db-middleware",20 name: "pc-forge:db-middleware", 24 21 immutable: false, 25 22 }, -
server/telefunc-handler.ts
rfdd776b r66bf4fd 1 import type { dbSqlite } from "../database/drizzle/db";1 import type { Database } from "../database/drizzle/db"; 2 2 import { enhance, type UniversalHandler } from "@universal-middleware/core"; 3 3 import { telefunc } from "telefunc"; … … 10 10 body: await request.text(), 11 11 context: { 12 ...(context as { db: ReturnType<typeof dbSqlite>}),12 ...(context as { db: Database }), 13 13 ...runtime, 14 14 }, … … 23 23 }, 24 24 { 25 name: " my-app:telefunc-handler",25 name: "pc-forge:telefunc-handler", 26 26 path: `/_telefunc`, 27 27 method: ["GET", "POST"],
Note:
See TracChangeset
for help on using the changeset viewer.
