@@ -13,7 +13,7 @@ external envGet: string => option<string> = "get"
1313/** FFI: Deno.serve */
1414type serveOptions = {port : int }
1515@scope ("Deno" ) @val
16- external serve : (serveOptions , Fetch .request => promise <Fetch .response >) => unit = "serve"
16+ external serve : (serveOptions , Webapi . Fetch .request => promise <Webapi . Fetch .response >) => unit = "serve"
1717
1818/** FFI: console.log */
1919@scope ("console" ) @val
@@ -25,7 +25,7 @@ external consoleError: (string, 'a) => unit = "error"
2525
2626/** FFI: fetch */
2727@val
28- external fetch : (string , {"method" : string , "headers" : Fetch .headers , "body" : option <Fetch .readableStream >}) => promise <Fetch .response > = "fetch"
28+ external fetch : (string , {"method" : string , "headers" : Webapi . Fetch .headers , "body" : option <Webapi . Fetch .readableStream >}) => promise <Webapi . Fetch .response > = "fetch"
2929
3030/** FFI: URL constructor */
3131type url = {
@@ -36,13 +36,13 @@ type url = {
3636@new external makeUrlFromString : string => url = "URL"
3737
3838/** FFI: Request fields */
39- @get external getUrl : Fetch .request => string = "url"
40- @get external getMethod : Fetch .request => string = "method"
41- @get external getHeaders : Fetch .request => Fetch .headers = "headers"
42- @get external getBody : Fetch .request => option <Fetch .readableStream > = "body"
39+ @get external getUrl : Webapi . Fetch .request => string = "url"
40+ @get external getMethod : Webapi . Fetch .request => string = "method"
41+ @get external getHeaders : Webapi . Fetch .request => Webapi . Fetch .headers = "headers"
42+ @get external getBody : Webapi . Fetch .request => option <Webapi . Fetch .readableStream > = "body"
4343
4444/** FFI: Response constructors */
45- @new external makeResponse : (string , {"status" : int , "headers" : Js . Dict .t <string >}) => Fetch .response = "Response"
45+ @new external makeResponse : (string , {"status" : int , "headers" : Dict .t <string >}) => Webapi . Fetch .response = "Response"
4646
4747/** FFI: serveDir from std */
4848type serveDirOptions = {
@@ -53,39 +53,42 @@ type serveDirOptions = {
5353 enableCors : bool ,
5454}
5555@module ("https://deno.land/std@0.211.0/http/file_server.ts" )
56- external serveDir : (Fetch .request , serveDirOptions ) => promise <Fetch .response > = "serveDir"
56+ external serveDir : (Webapi . Fetch .request , serveDirOptions ) => promise <Webapi . Fetch .response > = "serveDir"
5757
5858/** Server port */
59- let port = 8081
59+ let port = switch envGet ("PORT" ) {
60+ | Some (p ) => p -> Int .fromString -> Option .getOr (3000 )
61+ | None => 3000
62+ }
6063
6164/** API backend URL (configurable via ECHIDNA_API_URL env var) */
6265let apiBackend = switch envGet ("ECHIDNA_API_URL" ) {
6366| Some (url ) => url
64- | None => "http://localhost:3000 "
67+ | None => "http://localhost:8081 "
6568}
6669
6770/** Request handler — proxies /api/ to Rust backend, serves static files otherwise */
68- let handler = async (req : Fetch .request ): Fetch .response => {
69- let reqUrl = getUrl ( req )
71+ let handler = async (req : Webapi . Fetch .request ): Webapi . Fetch .response => {
72+ let reqUrl = req -> getUrl
7073 let url = makeUrlFromString (reqUrl )
7174
7275 // API proxy to Rust backend
73- if Js . String2 .startsWith (url . pathname , "/api/" ) {
76+ if url . pathname -> String .startsWith ("/api/" ) {
7477 try {
7578 let apiUrl = makeUrl (url .pathname , apiBackend )
7679 let targetUrl = apiUrl .pathname ++ url .search
7780
7881 let response = await fetch (targetUrl , {
79- "method" : getMethod ( req ) ,
80- "headers" : getHeaders ( req ) ,
81- "body" : getBody ( req ) ,
82+ "method" : req -> getMethod ,
83+ "headers" : req -> getHeaders ,
84+ "body" : req -> getBody ,
8285 })
8386
8487 response
8588 } catch {
8689 | exn =>
8790 consoleError ("API proxy error:" , exn )
88- let headers = Js . Dict .fromArray ([("Content-Type" , "application/json" )])
91+ let headers = Dict .fromArray ([("Content-Type" , "application/json" )])
8992 makeResponse (` {"error": "Backend unavailable"}` , {"status" : 502 , "headers" : headers })
9093 }
9194 } else {
@@ -102,7 +105,7 @@ let handler = async (req: Fetch.request): Fetch.response => {
102105
103106/** Start the server */
104107let start = () => {
105- log (` ECHIDNA UI Server starting on port ${Belt. Int.toString(port) }` )
108+ log (` ECHIDNA UI Server starting on port ${port -> Int.toString}` )
106109 log (` API Backend: ${apiBackend}` )
107110 serve ({port : port }, handler )
108111}
0 commit comments