feat: add effect api

This commit is contained in:
Max Koon
2025-11-26 00:32:18 -05:00
parent 2df7f2d924
commit 371f5e879b
8 changed files with 276 additions and 89 deletions

View File

@@ -1,4 +1,5 @@
import { z } from "zod";
import { Schema } from "effect";
export const sessionSchema = z.object({
id: z.string(),
@@ -20,6 +21,39 @@ export const authDataSchema = z.object({
user: userSchema,
});
const DateFromDateOrString = Schema.Union(
Schema.DateFromString,
Schema.DateFromSelf,
);
export const SessionSchema = Schema.Struct({
expiresAt: DateFromDateOrString,
token: Schema.Redacted(Schema.String),
createdAt: DateFromDateOrString,
updatedAt: DateFromDateOrString,
ipAddress: Schema.optional(Schema.NullishOr(Schema.String)),
userAgent: Schema.optional(Schema.NullishOr(Schema.String)),
userId: Schema.String,
id: Schema.String,
});
export const UserSchema = Schema.Struct({
name: Schema.String,
email: Schema.String,
emailVerified: Schema.Boolean,
image: Schema.optional(Schema.NullishOr(Schema.String)),
createdAt: DateFromDateOrString,
updatedAt: DateFromDateOrString,
id: Schema.String,
});
export const AuthSchema = Schema.Struct({
session: SessionSchema,
user: UserSchema,
});
export type AuthSchemaType = Schema.Schema.Type<typeof AuthSchema>;
export type Session = z.infer<typeof sessionSchema>;
export type User = z.infer<typeof userSchema>;
export type AuthData = z.infer<typeof authDataSchema>;