aboutsummaryrefslogtreecommitdiffhomepage
path: root/pkgs/server/src/repositories/refresh-token.ts
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/server/src/repositories/refresh-token.ts')
-rw-r--r--pkgs/server/src/repositories/refresh-token.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/pkgs/server/src/repositories/refresh-token.ts b/pkgs/server/src/repositories/refresh-token.ts
new file mode 100644
index 0000000..82302df
--- /dev/null
+++ b/pkgs/server/src/repositories/refresh-token.ts
@@ -0,0 +1,35 @@
+import { and, eq, gt } from "drizzle-orm";
+import { db, refreshTokens } from "../db";
+import type { RefreshTokenRepository } from "./types";
+
+export const refreshTokenRepository: RefreshTokenRepository = {
+ async findValidToken(tokenHash) {
+ const [token] = await db
+ .select({
+ id: refreshTokens.id,
+ userId: refreshTokens.userId,
+ expiresAt: refreshTokens.expiresAt,
+ })
+ .from(refreshTokens)
+ .where(
+ and(
+ eq(refreshTokens.tokenHash, tokenHash),
+ gt(refreshTokens.expiresAt, new Date()),
+ ),
+ )
+ .limit(1);
+ return token;
+ },
+
+ async create(data) {
+ await db.insert(refreshTokens).values({
+ userId: data.userId,
+ tokenHash: data.tokenHash,
+ expiresAt: data.expiresAt,
+ });
+ },
+
+ async deleteById(id) {
+ await db.delete(refreshTokens).where(eq(refreshTokens.id, id));
+ },
+};