Changeset 66bf4fd


Ignore:
Timestamp:
12/16/25 01:31:19 (7 months ago)
Author:
Tome <gjorgievtome@…>
Branches:
main
Children:
c30935a
Parents:
fdd776b
Message:

setup config

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • drizzle.config.ts

    rfdd776b r66bf4fd  
    77
    88export default defineConfig({
    9   dialect: "sqlite",
     9  dialect: "postgresql",
    1010  schema: "./database/drizzle/schema/*",
    1111  out: "./database/migrations",
  • package.json

    rfdd776b r66bf4fd  
    1212  },
    1313  "dependencies": {
    14     "vike": "^0.4.247",
    1514    "@auth/core": "^0.41.1",
     15    "@auth/drizzle-adapter": "^1.11.1",
     16    "@photonjs/hono": "^0.1.10",
    1617    "@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",
    1920    "dotenv": "^17.2.3",
    20     "better-sqlite3": "^12.5.0",
    21     "@photonjs/hono": "^0.1.10",
     21    "drizzle-orm": "^0.45.1",
    2222    "hono": "^4.10.7",
    23     "vike-photon": "^0.1.22",
     23    "pg": "^8.16.3",
    2424    "react": "^19.2.1",
    2525    "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"
    2830  },
    2931  "devDependencies": {
    30     "typescript": "^5.9.3",
    31     "vite": "^7.2.7",
    3232    "@biomejs/biome": "2.3.8",
     33    "@types/bcrypt": "^6.0.0",
    3334    "@types/better-sqlite3": "^7.6.13",
    3435    "@types/node": "^20.19.25",
     36    "@types/pg": "^8.16.0",
     37    "@types/react": "^19.2.7",
     38    "@types/react-dom": "^19.2.3",
    3539    "@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"
    3843  },
    3944  "type": "module"
  • server/authjs-handler.ts

    rfdd776b r66bf4fd  
    33import type { Session } from "@auth/core/types";
    44import { enhance, type UniversalHandler, type UniversalMiddleware } from "@universal-middleware/core";
     5import {eq} from "drizzle-orm";
     6import { db } from "../database/drizzle/db";
     7import { usersTable } from "../database/drizzle/schema";
     8import bcrypt from "bcrypt";
     9// import { users, accounts, sessions, verificationTokens } from "../database/drizzle/schema/auth";
    510
    611const authjsConfig = {
    712  basePath: "/api/auth",
    813  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  },
    1118  providers: [
    12     // TODO: Choose and implement providers
    1319    CredentialsProvider({
    1420      name: "Credentials",
    1521      credentials: {
    16         username: { label: "Username", type: "text", placeholder: "jsmith" },
     22        username: { label: "Username", type: "text" },
    1723        password: { label: "Password", type: "password" },
    1824      },
    19       async authorize() {
    20         // Add logic here to look up the user from the credentials supplied
    21         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;
    2228
    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        }
    2746      },
    2847    }),
    2948  ],
     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  },
    3060} satisfies Omit<AuthConfig, "raw">;
    3161
     
    6999  },
    70100  {
    71     name: "my-app:authjs-middleware",
     101    name: "pc-forge:authjs-middleware",
    72102    immutable: false,
    73103  },
     
    83113  },
    84114  {
    85     name: "my-app:authjs-handler",
     115    name: "pc-forge:authjs-handler",
    86116    path: "/api/auth/**",
    87117    method: ["GET", "POST"],
  • server/db-middleware.ts

    rfdd776b r66bf4fd  
    1 import { dbSqlite } from "../database/drizzle/db";
     1import { db } from "../database/drizzle/db";
     2import type { Database } from "../database/drizzle/db";
    23import { enhance, type UniversalMiddleware } from "@universal-middleware/core";
    34
     
    56  namespace Universal {
    67    interface Context {
    7       db: ReturnType<typeof dbSqlite>;
     8      db: Database;
    89    }
    910  }
     
    1213// Add `db` to the Context
    1314export 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  }),
    2219  {
    23     name: "my-app:db-middleware",
     20    name: "pc-forge:db-middleware",
    2421    immutable: false,
    2522  },
  • server/telefunc-handler.ts

    rfdd776b r66bf4fd  
    1 import type { dbSqlite } from "../database/drizzle/db";
     1import type { Database } from "../database/drizzle/db";
    22import { enhance, type UniversalHandler } from "@universal-middleware/core";
    33import { telefunc } from "telefunc";
     
    1010      body: await request.text(),
    1111      context: {
    12         ...(context as { db: ReturnType<typeof dbSqlite> }),
     12        ...(context as { db: Database }),
    1313        ...runtime,
    1414      },
     
    2323  },
    2424  {
    25     name: "my-app:telefunc-handler",
     25    name: "pc-forge:telefunc-handler",
    2626    path: `/_telefunc`,
    2727    method: ["GET", "POST"],
Note: See TracChangeset for help on using the changeset viewer.