const z = @import( "std" ); const u = @import( "util.zig" ); const zap = @import( "zap" ); const api = @import( "api.zig" ); const user = @import( "user.zig" ); const chat = @import( "chat.zig" ); const prefs = @import( "userdata.zig" ); const model = @import( "model.zig" ); const stripe = @import( "stripe.zig" ); const config = @import( "config.zig" ); const userdata = @import( "userdata.zig" ); const Allocator = z.mem.Allocator; const Status = zap.StatusCode; const Request = zap.Request; const bufprint = z.fmt.bufPrint; var routes: z.StringHashMap( zap.HttpRequestFn ) = undefined; const alloc = u.alloc; fn index( r: Request ) void { r.sendBody( "" ) catch {}; } fn stop( r: Request ) void { api.stop(); z.time.sleep( 5000000000 ); zap.stop(); r.sendBody( "" ) catch {}; } fn setupRoutes( a: Allocator ) void { routes = z.StringHashMap( zap.HttpRequestFn ).init( a ); routes.put( "/", index ) catch {}; //routes.put( "/stop", stop ) catch {}; // user routes routes.put( "/login", user.routes.@"login" ) catch {}; routes.put( "/get-tokens", user.routes.@"get-tokens" ) catch {}; routes.put( "/create-token", user.routes.@"create-token" ) catch {}; routes.put( "/delete-token", user.routes.@"delete-token" ) catch {}; routes.put( "/delete-tokens", user.routes.@"delete-tokens" ) catch {}; routes.put( "/send-login-link", user.routes.@"send-login-link" ) catch {}; routes.put( "/invalidate-session", user.routes.@"invalidate-session" ) catch {}; routes.put( "/invalidate-all-sessions", user.routes.@"invalidate-all-sessions" ) catch {}; // settings routes routes.put( "/settings", prefs.routes.@"settings" ) catch {}; routes.put( "/get-notes", prefs.routes.@"get-notes" ) catch {}; routes.put( "/getalldata", prefs.routes.@"getalldata" ) catch {}; routes.put( "/delete-note", prefs.routes.@"delete-note" ) catch {}; routes.put( "/delete-notes", prefs.routes.@"delete-notes" ) catch {}; routes.put( "/update-settings", prefs.routes.@"update-settings" ) catch {}; // models route routes.put( "/models", model.routes.@"models" ) catch {}; // stripe route routes.put( "/create-payment-intent", stripe.routes.@"create-payment-intent" ) catch {}; // chat routes routes.put( "/chat", chat.routes.@"chat" ) catch {}; routes.put( "/get-chat", chat.routes.@"get-chat" ) catch {}; routes.put( "/generate", chat.routes.@"generate" ) catch {}; routes.put( "/create-chat", chat.routes.@"create-chat" ) catch {}; routes.put( "/delete-chat", chat.routes.@"delete-chat" ) catch {}; } fn onRequest( r: Request ) void { r.setHeader( "Access-Control-Allow-Origin", "*" ) catch {}; r.setHeader( "Access-Control-Allow-Methods", "*" ) catch {}; r.setHeader( "Access-Control-Allow-Headers", "*" ) catch {}; r.setHeader( "Access-Control-Allow-Credentials", "true" ) catch {}; if( r.path ) |p| { if( routes.get( p ) ) |route| { route( r ); return; } } r.setStatus( .not_found ); r.sendBody( "

404 Not Found

" ) catch return; } var listener: zap.HttpListener = undefined; pub fn listen( a: Allocator ) !void { setupRoutes( a ); listener = zap.HttpListener.init( .{ .port = config.server_port, .on_request = onRequest, .max_clients = 5000, } ); try listener.listen(); } pub fn deinit() void { routes.deinit(); }