import {
HttpApiBuilder,
HttpApiSwagger,
HttpMiddleware,
HttpServer,
} from '@effect/platform';
import { BunHttpServer, BunRuntime } from '@effect/platform-bun';
import { ApiLive } from '@repo/domain/api-live';
import { ServerConfig } from '@repo/shared/services/config';
import { Context, Effect, Layer, Logger, LogLevel } from 'effect';
import { applicationServiceLayers } from './runtimes/server';
export class CorsService extends Context.Tag('CorsService')<
CorsService,
ReturnType<typeof HttpApiBuilder.middlewareCors>
>() {}
const CorsLive = Layer.effect(
CorsService,
Effect.gen(function* () {
const serverConfig = yield* ServerConfig;
const appConfig = yield* serverConfig.getAppConfig;
const clientOrigin = appConfig.ApplicationInfo.WebOrigin;
yield* Effect.log(clientOrigin);
return HttpApiBuilder.middlewareCors({
credentials: true,
allowedOrigins: [clientOrigin],
});
})
);
HttpApiBuilder.serve(HttpMiddleware.logger).pipe(
Layer.provide(HttpApiSwagger.layer()),
Layer.provide(HttpApiBuilder.middlewareOpenApi()),
Layer.provideMerge(CorsLive),
Layer.provideMerge(HttpServer.layerContext),
Layer.provide(ApiLive),
Layer.provide(applicationServiceLayers),
HttpServer.withLogAddress,
Layer.provide(Logger.minimumLogLevel(LogLevel.All)),
Layer.provide(Logger.structured),
Layer.provide(BunHttpServer.layer({ port: 3000 })),
Layer.launch,
BunRuntime.runMain
);
import {
HttpApiBuilder,
HttpApiSwagger,
HttpMiddleware,
HttpServer,
} from '@effect/platform';
import { BunHttpServer, BunRuntime } from '@effect/platform-bun';
import { ApiLive } from '@repo/domain/api-live';
import { ServerConfig } from '@repo/shared/services/config';
import { Context, Effect, Layer, Logger, LogLevel } from 'effect';
import { applicationServiceLayers } from './runtimes/server';
export class CorsService extends Context.Tag('CorsService')<
CorsService,
ReturnType<typeof HttpApiBuilder.middlewareCors>
>() {}
const CorsLive = Layer.effect(
CorsService,
Effect.gen(function* () {
const serverConfig = yield* ServerConfig;
const appConfig = yield* serverConfig.getAppConfig;
const clientOrigin = appConfig.ApplicationInfo.WebOrigin;
yield* Effect.log(clientOrigin);
return HttpApiBuilder.middlewareCors({
credentials: true,
allowedOrigins: [clientOrigin],
});
})
);
HttpApiBuilder.serve(HttpMiddleware.logger).pipe(
Layer.provide(HttpApiSwagger.layer()),
Layer.provide(HttpApiBuilder.middlewareOpenApi()),
Layer.provideMerge(CorsLive),
Layer.provideMerge(HttpServer.layerContext),
Layer.provide(ApiLive),
Layer.provide(applicationServiceLayers),
HttpServer.withLogAddress,
Layer.provide(Logger.minimumLogLevel(LogLevel.All)),
Layer.provide(Logger.structured),
Layer.provide(BunHttpServer.layer({ port: 3000 })),
Layer.launch,
BunRuntime.runMain
);