diff options
Diffstat (limited to 'lib/server.ts')
-rw-r--r-- | lib/server.ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/server.ts b/lib/server.ts new file mode 100644 index 0000000..9885bf3 --- /dev/null +++ b/lib/server.ts @@ -0,0 +1,35 @@ +import { + FourOhFourActivityImpl, + HealthCheckActivityImpl, + type HealthChecker, + type IFourOhFourActivity, + type IHealthCheckActivity, + type ITraceable, + PenguenoRequest, + Server, + type ServerTrace, +} from '@emprespresso/pengueno'; +import { healthCheck as _healthCheck, EmailActivityImpl, IEmailActivity, Inbox, Outbox } from './index'; + +export class UptimeServer implements Server { + constructor( + healthCheck: HealthChecker = _healthCheck, + private readonly healthCheckActivity: IHealthCheckActivity = new HealthCheckActivityImpl(healthCheck), + private readonly emailActivity: IEmailActivity = new EmailActivityImpl( + (a) => Outbox.from(a), + (b) => Inbox.from(b), + ), + private readonly fourOhFourActivity: IFourOhFourActivity = new FourOhFourActivityImpl(), + ) {} + + public serve(req: ITraceable<PenguenoRequest, ServerTrace>) { + const url = new URL(req.get().req.url); + if (url.pathname === '/health') { + return this.healthCheckActivity.checkHealth(req); + } + if (url.pathname === '/email') { + return this.emailActivity.runMail(req); + } + return this.fourOhFourActivity.fourOhFour(req); + } +} |