export class AuthMiddleware extends HttpApiMiddleware.Tag<AuthMiddleware>()(
"@repo/middleware/AuthMiddleware",
{
provides: ActorContext,
failure: AuthError,
},
) {}
export const AuthMiddlewareLayer = Layer.effect(
AuthMiddleware,
Effect.gen(function* () {
yield* Effect.log("AuthMiddleware running");
const supabase = createServerClient(
Redacted.value(yield* Config.redacted("NEXT_PUBLIC_SUPABASE_URL")),
Redacted.value(yield* Config.redacted("SUPABASE_SERVICE_ROLE_KEY")),
{
cookies: {
getAll: () => {
/* return req.headers.cookies */
},
setAll: (cookies) => {
/* I could maybe refresh the cookies in a nextjs proxy instead if thats easier */
/* for cookie in cookies: setCookie */
},
},
},
);
...
const {data: {user}} = yield* Effect.tryPromise(supabase.auth.getuser())
if (!user) {
return Effect.succeed(new PublicActor());
}
return Effect.succeed(
new UserActor({ userId: UserIdSchema.make(user.id) }),
);
...
export class AuthMiddleware extends HttpApiMiddleware.Tag<AuthMiddleware>()(
"@repo/middleware/AuthMiddleware",
{
provides: ActorContext,
failure: AuthError,
},
) {}
export const AuthMiddlewareLayer = Layer.effect(
AuthMiddleware,
Effect.gen(function* () {
yield* Effect.log("AuthMiddleware running");
const supabase = createServerClient(
Redacted.value(yield* Config.redacted("NEXT_PUBLIC_SUPABASE_URL")),
Redacted.value(yield* Config.redacted("SUPABASE_SERVICE_ROLE_KEY")),
{
cookies: {
getAll: () => {
/* return req.headers.cookies */
},
setAll: (cookies) => {
/* I could maybe refresh the cookies in a nextjs proxy instead if thats easier */
/* for cookie in cookies: setCookie */
},
},
},
);
...
const {data: {user}} = yield* Effect.tryPromise(supabase.auth.getuser())
if (!user) {
return Effect.succeed(new PublicActor());
}
return Effect.succeed(
new UserActor({ userId: UserIdSchema.make(user.id) }),
);
...