diff --git a/server.js b/server.js new file mode 100644 index 0000000..893336e --- /dev/null +++ b/server.js @@ -0,0 +1,57 @@ +class Server { + async getEnv(variables) { + return Object.fromEntries( + await Promise.all( + variables.map(async variable => { + const {state} = await Deno.permissions.query({ + name: 'env', variable + }) + if (state === 'granted') { + return [variable, Deno.env.get(variable)] + } else { + return [variable, undefined] + } + }) + ) + ) + } + + async configure() { + const env = await this.getEnv([ + 'PORT', 'BASE_URL' + ]) + this.port = env.PORT ?? 3000 + this.baseUrl = env.BASE_URL ?? '/macchiato' + } + + async serveRequest(event) { + const {pathname} = new URL(event.request.url) + if (pathname === `${this.baseUrl}/api/auth`) { + event.respondWith(new Response( + 'extract query and redirect', {status: 200} + )) + } else { + event.respondWith(new Response( + 'here', {status: 404} + )) + } + } + + async serveConn(conn) { + console.log({conn}) + const httpConn = Deno.serveHttp(conn) + for await (const event of httpConn) { + this.serveRequest(event) + } + } + + async serve() { + await this.configure() + this.server = Deno.listen({ + port: this.port, + }) + for await (const conn of this.server) { + this.serveConn(conn) + } + } +} \ No newline at end of file