export type AuthorizationToken = typeof AuthorizationSchema.Type;
export const AuthorizationToken =
Context.GenericTag<AuthorizationToken>("AuthorizationToken");
export const authorizationMiddleware: <E, R>(
httpApp: HttpApp.Default<E, R>,
) => HttpApp.Default<E, R> = (httpApp) =>
Effect.withFiberRuntime((fiber) =>
Effect.gen(function* () {
const context = fiber.getFiberRef(FiberRef.currentContext);
const request = Context.unsafeGet(
context,
HttpServerRequest.HttpServerRequest,
);
const authorization =
request.headers.authorization ?? request.headers.Authorization;
const decoded =
yield* Schema.decodeUnknown(AuthorizationSchema)(authorization);
return yield* Effect.locally(
httpApp,
FiberRef.currentContext,
Context.add(context, AuthorizationToken, decoded),
);
}).pipe(
Effect.catchAll((e) =>
HttpServerResponse.unsafeJson(
{
message: "Unauthorized",
},
{ status: 401 },
),
),
),
);
export type AuthorizationToken = typeof AuthorizationSchema.Type;
export const AuthorizationToken =
Context.GenericTag<AuthorizationToken>("AuthorizationToken");
export const authorizationMiddleware: <E, R>(
httpApp: HttpApp.Default<E, R>,
) => HttpApp.Default<E, R> = (httpApp) =>
Effect.withFiberRuntime((fiber) =>
Effect.gen(function* () {
const context = fiber.getFiberRef(FiberRef.currentContext);
const request = Context.unsafeGet(
context,
HttpServerRequest.HttpServerRequest,
);
const authorization =
request.headers.authorization ?? request.headers.Authorization;
const decoded =
yield* Schema.decodeUnknown(AuthorizationSchema)(authorization);
return yield* Effect.locally(
httpApp,
FiberRef.currentContext,
Context.add(context, AuthorizationToken, decoded),
);
}).pipe(
Effect.catchAll((e) =>
HttpServerResponse.unsafeJson(
{
message: "Unauthorized",
},
{ status: 401 },
),
),
),
);