1 changed files with 57 additions and 0 deletions
@ -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) |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue