"use strict";var p=Object.create;var o=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var m=(r,t)=>{for(var e in t)o(r,e,{get:t[e],enumerable:!0})},h=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!g.call(r,n)&&n!==e&&o(r,n,{get:()=>t[n],enumerable:!(s=d(t,n))||s.enumerable});return r};var c=(r,t,e)=>(e=r!=null?p(l(r)):{},h(t||!r||!r.__esModule?o(e,"default",{value:r,enumerable:!0}):e,r)),f=r=>h(o({},"__esModule",{value:!0}),r);var R={};m(R,{HttpServer:()=>a,getRequestMethod:()=>H,parseUrlPath:()=>b,readRequestBody:()=>S,sendJsonResponse:()=>P});module.exports=f(R);var u=c(require("http")),a=class{constructor(t){this.server=null;this.host=t.host,this.defaultPort=t.defaultPort,this.port=this.defaultPort,this.requestHandler=t.requestHandler,this.logger=t.logger||console.log,this.onPortInUse=t.onPortInUse,this.onStart=t.onStart,this.onError=t.onError}getState(){return{running:this.isRunning(),port:this.port,host:this.host}}getPort(){return this.port}isRunning(){return!!this.server}start(t){this.stop();let e=t||this.defaultPort;this.createServer(e)}stop(){this.server&&(this.server.close(),this.server=null)}createServer(t){this.server=u.createServer((e,s)=>{this.handleRequest(e,s)}),this.server.once("error",e=>{if((e==null?void 0:e.code)==="EADDRINUSE"&&t<65535){this.onPortInUse&&this.onPortInUse(t,t+1),this.createServer(t+1);return}this.onError&&this.onError(e)}),this.server.listen(t,this.host,()=>{var s;let e=(s=this.server)==null?void 0:s.address();e&&typeof e=="object"?this.port=Number(e.port||t):this.port=t,this.onStart&&this.onStart(this.port)})}handleRequest(t,e){Promise.resolve(this.requestHandler(t,e)).catch(s=>{e.headersSent||(e.statusCode=500,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify({ok:!1,message:(s==null?void 0:s.message)||"internal error"})))})}};function S(r){return new Promise((t,e)=>{let s="",n=!1;r.on("data",i=>{n||(s+=i.toString())}),r.on("end",()=>{n||t(s)}),r.on("error",i=>{n||(n=!0,e(i))})})}function P(r,t,e){r.statusCode=t,r.setHeader("Content-Type","application/json; charset=utf-8"),r.end(JSON.stringify(e))}function b(r){return(r||"").split("?")[0]}function H(r){return(r.method||"").toUpperCase()}0&&(module.exports={HttpServer,getRequestMethod,parseUrlPath,readRequestBody,sendJsonResponse});